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            if (calendar == null) {
067                return null;
068            }
069            CalendarEntries calendarEntry = TkServiceLocator.getCalendarEntriesService().getCalendarEntriesByIdAndPeriodEndDate(calendar.getHrCalendarId(), payEndDate);
070            
071            if(ObjectUtils.isNotNull(calendarEntry)) {
072                    calendarEntry.setCalendarObj(calendar);
073            }
074            
075            return calendarEntry;
076        }
077    
078            @Override
079            public CalendarEntries getCurrentCalendarDates(String principalId, Date currentDate) {
080                    CalendarEntries pcd = null;
081            Calendar calendar = getCalendarByPrincipalIdAndDate(principalId, currentDate, false);
082            if(calendar != null) {
083                        pcd = TkServiceLocator.getCalendarEntriesService().getCurrentCalendarEntriesByCalendarId(calendar.getHrCalendarId(), currentDate);
084                        if(pcd != null) {
085                            pcd.setCalendarObj(calendar);
086                        }
087            }
088                    return pcd;
089            }
090    
091        @Override
092        public CalendarEntries getCurrentCalendarDates(String principalId, Date beginDate, Date endDate) {
093            CalendarEntries pcd = null;
094            Calendar calendar = getCalendarByPrincipalIdAndDate(principalId, beginDate, endDate, false);
095            if(calendar != null) {
096                pcd = TkServiceLocator.getCalendarEntriesService().getCalendarEntriesByCalendarIdAndDateRange(calendar.getHrCalendarId(), beginDate, endDate);
097                if(pcd != null) {
098                    pcd.setCalendarObj(calendar);
099                }
100            }
101            return pcd;
102        }
103    
104        @Override
105            public CalendarEntries getPreviousCalendarEntry(String tkCalendarId, Date beginDateCurrentCalendar){
106                    return calendarDao.getPreviousCalendarEntry(tkCalendarId, beginDateCurrentCalendar);
107            }
108    
109        @Override
110        public Calendar getCalendarByPrincipalIdAndDate(String principalId, Date beginDate, Date endDate, boolean findLeaveCal) {
111            Calendar pcal = null;
112            List<Job> currentJobs = TkServiceLocator.getJobService().getJobs(principalId, endDate);
113            if(currentJobs.size() < 1){
114                return pcal;
115            }
116            Job job = currentJobs.get(0);
117            if (principalId == null || job == null) {
118                return pcal;
119            } else {
120                PayType payType = job.getPayTypeObj();
121                if (payType == null)  {
122                    throw new RuntimeException("No paytype setup for "+principalId + " job number: "+job.getJobNumber());
123                }
124    
125                PrincipalHRAttributes principalCalendar = TkServiceLocator.getPrincipalHRAttributeService().getPrincipalCalendar(principalId, beginDate);
126                if(principalCalendar == null){
127                    return null;
128                    //throw new RuntimeException("No principal hr attribute setup for "+principalId);
129                }
130                if(!findLeaveCal) {
131                    pcal = principalCalendar.getCalendar();
132                    if (pcal == null){
133                        pcal = principalCalendar.getLeaveCalObj();
134                        if(pcal == null){
135                            return pcal;
136                        }
137                    }
138                } else {
139                    pcal = principalCalendar.getLeaveCalObj();
140                    if(pcal == null){
141                        return pcal;
142                    }
143                }
144            }
145    
146            return pcal;
147        }
148    
149            @Override
150            public Calendar getCalendarByPrincipalIdAndDate(String principalId, Date asOfDate, boolean findLeaveCal) {
151                    Calendar pcal = null;
152            List<Job> currentJobs = TkServiceLocator.getJobService().getJobs(principalId, asOfDate);
153            if(currentJobs.size() < 1){
154               return pcal;
155            }
156            Job job = currentJobs.get(0);
157            if (principalId == null || job == null) {
158                return pcal;
159            } else {
160                PayType payType = job.getPayTypeObj();
161                if (payType == null)  {
162                    throw new RuntimeException("No paytype setup for "+principalId + " job number: "+job.getJobNumber());
163                }
164    
165                PrincipalHRAttributes principalCalendar = TkServiceLocator.getPrincipalHRAttributeService().getPrincipalCalendar(principalId, asOfDate);
166                if(principalCalendar == null){
167                    throw new RuntimeException("No principal hr attribute setup for "+principalId);
168                }
169                if(!findLeaveCal) {
170                    pcal = principalCalendar.getCalendar();
171                    if (pcal == null){
172                            pcal = principalCalendar.getLeaveCalObj();
173                            if(pcal == null){
174                                    return pcal;
175                            }
176                    }
177                } else {
178                            pcal = principalCalendar.getLeaveCalObj();
179                            if(pcal == null){
180                                    return pcal;
181                            }
182                }
183            }
184    
185            return pcal;
186            }
187    
188            @Override
189            public CalendarEntries getCurrentCalendarDatesForLeaveCalendar(
190                            String principalId, Date currentDate) {
191                    CalendarEntries pcd = null;
192            Calendar calendar = getCalendarByPrincipalIdAndDate(principalId, currentDate, true);
193            if(calendar != null) {
194                        pcd = TkServiceLocator.getCalendarEntriesService().getCurrentCalendarEntriesByCalendarId(calendar.getHrCalendarId(), currentDate);
195                        if(pcd != null) {
196                            pcd.setCalendarObj(calendar);
197                        }
198            }
199                    return pcd;
200            }
201    
202        @Override
203        public CalendarEntries getCurrentCalendarDatesForLeaveCalendar(String principalId, Date beginDate, Date endDate) {
204            CalendarEntries pcd = null;
205            Calendar calendar = getCalendarByPrincipalIdAndDate(principalId, beginDate, endDate, true);
206            if(calendar != null) {
207                pcd = TkServiceLocator.getCalendarEntriesService().getCalendarEntriesByCalendarIdAndDateRange(calendar.getHrCalendarId(), beginDate, endDate);
208                if(pcd != null) {
209                    pcd.setCalendarObj(calendar);
210                }
211            }
212            return pcd;
213        }
214    
215        @Override
216        public List<Calendar> getCalendars(String calendarName, String calendarTypes, String flsaBeginDay, String flsaBeginTime) {
217            return  calendarDao.getCalendars(calendarName, calendarTypes, flsaBeginDay, flsaBeginTime);
218        }
219    
220    }