001 /** 002 * Copyright 2004-2013 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.hr.time.calendar.service; 017 018 import java.util.ArrayList; 019 import java.util.Date; 020 import java.util.List; 021 022 import org.apache.commons.lang3.StringUtils; 023 import org.kuali.hr.job.Job; 024 import org.kuali.hr.lm.LMConstants; 025 import org.kuali.hr.time.calendar.Calendar; 026 import org.kuali.hr.time.calendar.CalendarEntries; 027 import org.kuali.hr.time.calendar.dao.CalendarDao; 028 import org.kuali.hr.time.paytype.PayType; 029 import org.kuali.hr.time.principal.PrincipalHRAttributes; 030 import org.kuali.hr.time.service.base.TkServiceLocator; 031 import org.kuali.hr.time.util.TkConstants; 032 033 public class CalendarServiceImpl implements CalendarService { 034 035 private CalendarDao calendarDao; 036 037 public void setCalendarDao(CalendarDao calendarDao) { 038 this.calendarDao = calendarDao; 039 } 040 041 @Override 042 public Calendar getCalendar(String hrCalendarId) { 043 return calendarDao.getCalendar(hrCalendarId); 044 } 045 046 @Override 047 public Calendar getCalendarByGroup(String calendarName) { 048 return calendarDao.getCalendarByGroup(calendarName); 049 } 050 051 @Override 052 public CalendarEntries getCalendarDatesByPayEndDate(String principalId, Date payEndDate, String calendarType) { 053 PrincipalHRAttributes principalCalendar = TkServiceLocator.getPrincipalHRAttributeService().getPrincipalCalendar(principalId, payEndDate); 054 055 Calendar calendar = null; 056 if (StringUtils.equalsIgnoreCase(calendarType, TkConstants.PAY_CALENDAR_TYPE)) { 057 calendar = getCalendarByGroup(principalCalendar.getPayCalendar()); 058 } else if (StringUtils.equalsIgnoreCase(calendarType, LMConstants.LEAVE_CALENDAR_TYPE)) { 059 calendar = getCalendarByGroup(principalCalendar.getLeaveCalendar()); 060 } 061 062 CalendarEntries calendarEntry = TkServiceLocator.getCalendarEntriesService().getCalendarEntriesByIdAndPeriodEndDate(calendar.getHrCalendarId(), payEndDate); 063 calendarEntry.setCalendarObj(calendar); 064 065 return calendarEntry; 066 } 067 068 @Override 069 public CalendarEntries getCurrentCalendarDates(String principalId, Date currentDate) { 070 CalendarEntries pcd = null; 071 Calendar calendar = getCalendarByPrincipalIdAndDate(principalId, currentDate, false); 072 if(calendar != null) { 073 pcd = TkServiceLocator.getCalendarEntriesService().getCurrentCalendarEntriesByCalendarId(calendar.getHrCalendarId(), currentDate); 074 if(pcd != null) { 075 pcd.setCalendarObj(calendar); 076 } 077 } 078 return pcd; 079 } 080 081 @Override 082 public CalendarEntries getPreviousCalendarEntry(String tkCalendarId, Date beginDateCurrentCalendar){ 083 return calendarDao.getPreviousCalendarEntry(tkCalendarId, beginDateCurrentCalendar); 084 } 085 086 @Override 087 public Calendar getCalendarByPrincipalIdAndDate(String principalId, Date asOfDate, boolean findLeaveCal) { 088 Calendar pcal = null; 089 List<Job> currentJobs = TkServiceLocator.getJobService().getJobs(principalId, asOfDate); 090 if(currentJobs.size() < 1){ 091 return pcal; 092 } 093 Job job = currentJobs.get(0); 094 if (principalId == null || job == null) { 095 return pcal; 096 } else { 097 PayType payType = job.getPayTypeObj(); 098 if (payType == null) { 099 throw new RuntimeException("No paytype setup for "+principalId + " job number: "+job.getJobNumber()); 100 } 101 102 PrincipalHRAttributes principalCalendar = TkServiceLocator.getPrincipalHRAttributeService().getPrincipalCalendar(principalId, asOfDate); 103 if(principalCalendar == null){ 104 throw new RuntimeException("No principal hr attribute setup for "+principalId); 105 } 106 if(!findLeaveCal) { 107 pcal = principalCalendar.getCalendar(); 108 if (pcal == null){ 109 pcal = principalCalendar.getLeaveCalObj(); 110 if(pcal == null){ 111 return pcal; 112 } 113 } 114 } else { 115 pcal = principalCalendar.getLeaveCalObj(); 116 if(pcal == null){ 117 return pcal; 118 } 119 } 120 } 121 122 return pcal; 123 } 124 125 @Override 126 public CalendarEntries getCurrentCalendarDatesForLeaveCalendar( 127 String principalId, Date currentDate) { 128 CalendarEntries pcd = null; 129 Calendar calendar = getCalendarByPrincipalIdAndDate(principalId, currentDate, true); 130 if(calendar != null) { 131 pcd = TkServiceLocator.getCalendarEntriesService().getCurrentCalendarEntriesByCalendarId(calendar.getHrCalendarId(), currentDate); 132 if(pcd != null) { 133 pcd.setCalendarObj(calendar); 134 } 135 } 136 return pcd; 137 } 138 139 @Override 140 public List<Calendar> getCalendars(String calendarName, String calendarTypes, String flsaBeginDay, String flsaBeginTime) { 141 return calendarDao.getCalendars(calendarName, calendarTypes, flsaBeginDay, flsaBeginTime); 142 } 143 144 }