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.Date;
019 import java.util.List;
020
021 import org.apache.commons.lang3.StringUtils;
022 import org.kuali.hr.job.Job;
023 import org.kuali.hr.lm.LMConstants;
024 import org.kuali.hr.time.calendar.Calendar;
025 import org.kuali.hr.time.calendar.CalendarEntries;
026 import org.kuali.hr.time.calendar.dao.CalendarDao;
027 import org.kuali.hr.time.paytype.PayType;
028 import org.kuali.hr.time.principal.PrincipalHRAttributes;
029 import org.kuali.hr.time.service.base.TkServiceLocator;
030 import org.kuali.hr.time.util.TKUtils;
031 import org.kuali.hr.time.util.TkConstants;
032 import org.kuali.rice.krad.util.ObjectUtils;
033
034 public class CalendarServiceImpl implements CalendarService {
035
036 private CalendarDao calendarDao;
037
038 public void setCalendarDao(CalendarDao calendarDao) {
039 this.calendarDao = calendarDao;
040 }
041
042 @Override
043 public Calendar getCalendar(String hrCalendarId) {
044 return calendarDao.getCalendar(hrCalendarId);
045 }
046
047 @Override
048 public Calendar getCalendarByGroup(String calendarName) {
049 return calendarDao.getCalendarByGroup(calendarName);
050 }
051
052 @Override
053 public CalendarEntries getCalendarDatesByPayEndDate(String principalId, Date payEndDate, String calendarType) {
054 PrincipalHRAttributes principalCalendar = TkServiceLocator.getPrincipalHRAttributeService().getPrincipalCalendar(principalId, payEndDate);
055
056 Calendar calendar = null;
057 if(ObjectUtils.isNull(principalCalendar)) {
058 return null;
059 }
060 if (StringUtils.equalsIgnoreCase(calendarType, TkConstants.PAY_CALENDAR_TYPE)) {
061 calendar = getCalendarByGroup(principalCalendar.getPayCalendar());
062 } else if (StringUtils.equalsIgnoreCase(calendarType, LMConstants.LEAVE_CALENDAR_TYPE)) {
063 calendar = getCalendarByGroup(principalCalendar.getLeaveCalendar());
064 }
065
066 CalendarEntries calendarEntry = TkServiceLocator.getCalendarEntriesService().getCalendarEntriesByIdAndPeriodEndDate(calendar.getHrCalendarId(), payEndDate);
067
068 if(ObjectUtils.isNotNull(calendarEntry))
069 calendarEntry.setCalendarObj(calendar);
070
071 return calendarEntry;
072 }
073
074 @Override
075 public CalendarEntries getCurrentCalendarDates(String principalId, Date currentDate) {
076 CalendarEntries pcd = null;
077 Calendar calendar = getCalendarByPrincipalIdAndDate(principalId, currentDate, false);
078 if(calendar != null) {
079 pcd = TkServiceLocator.getCalendarEntriesService().getCurrentCalendarEntriesByCalendarId(calendar.getHrCalendarId(), currentDate);
080 if(pcd != null) {
081 pcd.setCalendarObj(calendar);
082 }
083 }
084 return pcd;
085 }
086
087 @Override
088 public CalendarEntries getCurrentCalendarDates(String principalId, Date beginDate, Date endDate) {
089 CalendarEntries pcd = null;
090 Calendar calendar = getCalendarByPrincipalIdAndDate(principalId, beginDate, endDate, false);
091 if(calendar != null) {
092 pcd = TkServiceLocator.getCalendarEntriesService().getCalendarEntriesByCalendarIdAndDateRange(calendar.getHrCalendarId(), beginDate, endDate);
093 if(pcd != null) {
094 pcd.setCalendarObj(calendar);
095 }
096 }
097 return pcd;
098 }
099
100 @Override
101 public CalendarEntries getPreviousCalendarEntry(String tkCalendarId, Date beginDateCurrentCalendar){
102 return calendarDao.getPreviousCalendarEntry(tkCalendarId, beginDateCurrentCalendar);
103 }
104
105 @Override
106 public Calendar getCalendarByPrincipalIdAndDate(String principalId, Date beginDate, Date endDate, boolean findLeaveCal) {
107 Calendar pcal = null;
108 List<Job> currentJobs = TkServiceLocator.getJobService().getJobs(principalId, endDate);
109 if(currentJobs.size() < 1){
110 return pcal;
111 }
112 Job job = currentJobs.get(0);
113 if (principalId == null || job == null) {
114 return pcal;
115 } else {
116 PayType payType = job.getPayTypeObj();
117 if (payType == null) {
118 throw new RuntimeException("No paytype setup for "+principalId + " job number: "+job.getJobNumber());
119 }
120
121 PrincipalHRAttributes principalCalendar = TkServiceLocator.getPrincipalHRAttributeService().getPrincipalCalendar(principalId, beginDate);
122 if(principalCalendar == null){
123 return null;
124 //throw new RuntimeException("No principal hr attribute setup for "+principalId);
125 }
126 if(!findLeaveCal) {
127 pcal = principalCalendar.getCalendar();
128 if (pcal == null){
129 pcal = principalCalendar.getLeaveCalObj();
130 if(pcal == null){
131 return pcal;
132 }
133 }
134 } else {
135 pcal = principalCalendar.getLeaveCalObj();
136 if(pcal == null){
137 return pcal;
138 }
139 }
140 }
141
142 return pcal;
143 }
144
145 @Override
146 public Calendar getCalendarByPrincipalIdAndDate(String principalId, Date asOfDate, boolean findLeaveCal) {
147 Calendar pcal = null;
148 List<Job> currentJobs = TkServiceLocator.getJobService().getJobs(principalId, asOfDate);
149 if(currentJobs.size() < 1){
150 return pcal;
151 }
152 Job job = currentJobs.get(0);
153 if (principalId == null || job == null) {
154 return pcal;
155 } else {
156 PayType payType = job.getPayTypeObj();
157 if (payType == null) {
158 throw new RuntimeException("No paytype setup for "+principalId + " job number: "+job.getJobNumber());
159 }
160
161 PrincipalHRAttributes principalCalendar = TkServiceLocator.getPrincipalHRAttributeService().getPrincipalCalendar(principalId, asOfDate);
162 if(principalCalendar == null){
163 throw new RuntimeException("No principal hr attribute setup for "+principalId);
164 }
165 if(!findLeaveCal) {
166 pcal = principalCalendar.getCalendar();
167 if (pcal == null){
168 pcal = principalCalendar.getLeaveCalObj();
169 if(pcal == null){
170 return pcal;
171 }
172 }
173 } else {
174 pcal = principalCalendar.getLeaveCalObj();
175 if(pcal == null){
176 return pcal;
177 }
178 }
179 }
180
181 return pcal;
182 }
183
184 @Override
185 public CalendarEntries getCurrentCalendarDatesForLeaveCalendar(
186 String principalId, Date currentDate) {
187 CalendarEntries pcd = null;
188 Calendar calendar = getCalendarByPrincipalIdAndDate(principalId, currentDate, true);
189 if(calendar != null) {
190 pcd = TkServiceLocator.getCalendarEntriesService().getCurrentCalendarEntriesByCalendarId(calendar.getHrCalendarId(), currentDate);
191 if(pcd != null) {
192 pcd.setCalendarObj(calendar);
193 }
194 }
195 return pcd;
196 }
197
198 @Override
199 public CalendarEntries getCurrentCalendarDatesForLeaveCalendar(String principalId, Date beginDate, Date endDate) {
200 CalendarEntries pcd = null;
201 Calendar calendar = getCalendarByPrincipalIdAndDate(principalId, beginDate, endDate, true);
202 if(calendar != null) {
203 pcd = TkServiceLocator.getCalendarEntriesService().getCalendarEntriesByCalendarIdAndDateRange(calendar.getHrCalendarId(), beginDate, endDate);
204 if(pcd != null) {
205 pcd.setCalendarObj(calendar);
206 }
207 }
208 return pcd;
209 }
210
211 @Override
212 public List<Calendar> getCalendars(String calendarName, String calendarTypes, String flsaBeginDay, String flsaBeginTime) {
213 return calendarDao.getCalendars(calendarName, calendarTypes, flsaBeginDay, flsaBeginTime);
214 }
215
216 }