001 /**
002 * Copyright 2004-2012 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.kuali.hr.job.Job;
022 import org.kuali.hr.time.calendar.Calendar;
023 import org.kuali.hr.time.calendar.CalendarEntries;
024 import org.kuali.hr.time.calendar.dao.CalendarDao;
025 import org.kuali.hr.time.paytype.PayType;
026 import org.kuali.hr.time.principal.PrincipalHRAttributes;
027 import org.kuali.hr.time.service.base.TkServiceLocator;
028
029 public class CalendarServiceImpl implements CalendarService {
030
031 private CalendarDao calendarDao;
032
033 public void setCalendarDao(CalendarDao calendarDao) {
034 this.calendarDao = calendarDao;
035 }
036
037 @Override
038 public Calendar getCalendar(String hrCalendarId) {
039 return calendarDao.getCalendar(hrCalendarId);
040 }
041
042 @Override
043 public Calendar getCalendarByGroup(String calendarName) {
044 return calendarDao.getCalendarByGroup(calendarName);
045 }
046
047 @Override
048 public CalendarEntries getCalendarDatesByPayEndDate(String principalId, Date payEndDate, String calendarType) {
049 CalendarEntries pcd = null;
050
051 Calendar calendar = getCalendar(principalId, payEndDate, false);
052 pcd = TkServiceLocator.getCalendarEntriesService().getCalendarEntriesByIdAndPeriodEndDate(calendar.getHrCalendarId(), payEndDate);
053 pcd.setCalendarObj(calendar);
054
055 return pcd;
056 }
057
058 @Override
059 public CalendarEntries getCurrentCalendarDates(String principalId, Date currentDate) {
060 CalendarEntries pcd = null;
061 Calendar calendar = getCalendarByPrincipalIdAndDate(principalId, currentDate);
062 if(calendar != null) {
063 pcd = TkServiceLocator.getCalendarEntriesService().getCurrentCalendarEntriesByCalendarId(calendar.getHrCalendarId(), currentDate);
064 if(pcd != null) {
065 pcd.setCalendarObj(calendar);
066 }
067 }
068 return pcd;
069 }
070
071 /**
072 * Helper method common to the CalendarEntry search methods above.
073 * @param principalId Principal ID to lookup
074 * @param date A date, Principal Calendars are EffDt/Timestamped, so we can any current date.
075 * @return A Calendar
076 */
077 private Calendar getCalendar(String principalId, Date date, boolean findLeaveCal) {
078 Calendar pcal = null;
079
080 List<Job> currentJobs = TkServiceLocator.getJobService().getJobs(principalId, date);
081 if(currentJobs.size() < 1){
082 throw new RuntimeException("No jobs found for principal id "+principalId);
083 }
084 Job job = currentJobs.get(0);
085
086 if (principalId == null || job == null) {
087 throw new RuntimeException("Null parameters passed to getPayEndDate");
088 } else {
089 PayType payType = job.getPayTypeObj();
090 if (payType == null)
091 throw new RuntimeException("Null pay type on Job in getPayEndDate");
092 PrincipalHRAttributes principalCalendar = TkServiceLocator.getPrincipalHRAttributeService().getPrincipalCalendar(principalId, date);
093 if(principalCalendar == null){
094 throw new RuntimeException("Null principal calendar for principalid "+principalId);
095 }
096 pcal = principalCalendar.getCalendar();
097 if(pcal == null){
098 throw new RuntimeException("Null principal calendar for principalId " + principalId);
099 }
100 }
101
102 return pcal;
103 }
104
105 @Override
106 public CalendarEntries getPreviousCalendarEntry(String tkCalendarId, Date beginDateCurrentCalendar){
107 return calendarDao.getPreviousCalendarEntry(tkCalendarId, beginDateCurrentCalendar);
108 }
109
110 @Override
111 public Calendar getCalendarByPrincipalIdAndDate(String principalId, Date asOfDate) {
112 Calendar pcal = null;
113 List<Job> currentJobs = TkServiceLocator.getJobService().getJobs(principalId, asOfDate);
114 if(currentJobs.size() < 1){
115 return pcal;
116 }
117 Job job = currentJobs.get(0);
118 if (principalId == null || job == null) {
119 return pcal;
120 } else {
121 PayType payType = job.getPayTypeObj();
122 if (payType == null) {
123 throw new RuntimeException("No paytype setup for "+principalId + " job number: "+job.getJobNumber());
124 }
125 PrincipalHRAttributes principalCalendar = TkServiceLocator.getPrincipalHRAttributeService().getPrincipalCalendar(principalId, asOfDate);
126 if(principalCalendar == null){
127 throw new RuntimeException("No principal hr attribute setup for "+principalId);
128 }
129 pcal = principalCalendar.getCalendar();
130 if (pcal == null){
131 return pcal;
132 }
133 }
134
135 return pcal;
136 }
137
138 }