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.job.service;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.kuali.hr.job.Job;
020 import org.kuali.hr.job.dao.JobDao;
021 import org.kuali.hr.time.paytype.PayType;
022 import org.kuali.hr.time.service.base.TkServiceLocator;
023 import org.kuali.rice.kim.api.identity.Person;
024 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
025
026 import java.math.BigDecimal;
027 import java.util.*;
028
029 /**
030 * Represents an implementation of {@link JobService}.
031 */
032 public class JobServiceImpl implements JobService {
033
034 private JobDao jobDao;
035
036 @Override
037 public void saveOrUpdate(Job job) {
038 jobDao.saveOrUpdate(job);
039 }
040
041 @Override
042 public void saveOrUpdate(List<Job> jobList) {
043 jobDao.saveOrUpdate(jobList);
044 }
045
046 public void setJobDao(JobDao jobDao) {
047 this.jobDao = jobDao;
048 }
049
050 @Override
051 public List<Job> getJobs(String principalId, Date asOfDate) {
052 List<Job> jobs = jobDao.getJobs(principalId, asOfDate);
053
054 for (Job job : jobs) {
055 PayType payType = TkServiceLocator.getPayTypeService().getPayType(
056 job.getHrPayType(), asOfDate);
057 job.setPayTypeObj(payType);
058 }
059
060 return jobs;
061 }
062
063 @Override
064 public Job getJob(String principalId, Long jobNumber, Date asOfDate) {
065 return getJob(principalId, jobNumber, asOfDate, true);
066 }
067
068 public Job getPrimaryJob(String principalId, Date payPeriodEndDate) {
069 return jobDao.getPrimaryJob(principalId, payPeriodEndDate);
070 }
071
072 @Override
073 public Job getJob(String principalId, Long jobNumber, Date asOfDate,
074 boolean chkDetails) {
075 Job job = jobDao.getJob(principalId, jobNumber, asOfDate);
076 if (job == null && chkDetails) {
077 return null;
078 //throw new RuntimeException("No job for principal : " + principalId
079 // + " Job Number: " + jobNumber);
080 }
081 if (chkDetails) {
082 String hrPayType = job.getHrPayType();
083 if (StringUtils.isBlank(hrPayType)) {
084 throw new RuntimeException("No pay type for this job!");
085 }
086 PayType payType = TkServiceLocator.getPayTypeService().getPayType(
087 hrPayType, asOfDate);
088 if (payType == null)
089 throw new RuntimeException("No paytypes defined for this job!");
090 job.setPayTypeObj(payType);
091 }
092 return job;
093 }
094
095 @Override
096 public List<Job> getActiveJobsForPosition(String positionNbr, Date asOfDate) {
097 return jobDao.getActiveJobsForPosition(positionNbr, asOfDate);
098 }
099
100 @Override
101 public List<Job> getActiveJobsForPayType(String hrPayType, Date asOfDate) {
102 return jobDao.getActiveJobsForPayType(hrPayType, asOfDate);
103 }
104
105 @Override
106 public Job getJob(String hrJobId) {
107 return jobDao.getJob(hrJobId);
108 }
109
110 @Override
111 public Job getMaxJob(String principalId) {
112 return jobDao.getMaxJob(principalId);
113 }
114
115 @Override
116 public List<Job> getJobs(String principalId, String firstName, String lastName, String jobNumber,
117 String dept, String positionNbr, String payType,
118 java.sql.Date fromEffdt, java.sql.Date toEffdt, String active, String showHistory) {
119
120 if (StringUtils.isNotEmpty(firstName) || StringUtils.isNotEmpty(lastName)) {
121 Map<String, String> fields = new HashMap<String, String>();
122 fields.put("firstName", firstName);
123 fields.put("lastName", lastName);
124 List<Person> people = KimApiServiceLocator.getPersonService().findPeople(fields);
125
126 List<Job> jobs = new ArrayList<Job>();
127 for (Person p : people) {
128 List<Job> jobsForPerson = jobDao.getJobs(p.getPrincipalId(), jobNumber, dept, positionNbr, payType, fromEffdt, toEffdt, active, showHistory);
129 jobs.addAll(jobsForPerson);
130 }
131
132 return jobs;
133 }
134
135 return jobDao.getJobs(principalId, jobNumber, dept, positionNbr, payType, fromEffdt, toEffdt, active, showHistory);
136 }
137
138 public int getJobCount(String principalId, Long jobNumber, String dept) {
139 return jobDao.getJobCount(principalId, jobNumber, dept);
140 }
141
142 @Override
143 public List<Job> getActiveLeaveJobs(String principalId, Date asOfDate) {
144 return jobDao.getActiveLeaveJobs(principalId, asOfDate);
145 }
146
147 @Override
148 public BigDecimal getFteSumForJobs(List<Job> jobs) {
149 BigDecimal fteSum = new BigDecimal(0);
150 for(Job aJob : jobs) {
151 fteSum = fteSum.add(aJob.getFte());
152 }
153 return fteSum;
154
155 }
156
157 @Override
158 public BigDecimal getFteSumForAllActiveLeaveEligibleJobs(String principalId, Date asOfDate) {
159 BigDecimal fteSum = new BigDecimal(0);
160 List<Job> lmEligibleJobs = jobDao.getActiveLeaveJobs(principalId, asOfDate);
161 for(Job job : lmEligibleJobs) {
162 fteSum = fteSum.add(job.getFte());
163 }
164 return fteSum;
165 }
166
167 @Override
168 public BigDecimal getStandardHoursSumForJobs(List<Job> jobs) {
169 BigDecimal hoursSum = new BigDecimal(0);
170 for(Job aJob : jobs) {
171 hoursSum = hoursSum.add(aJob.getStandardHours());
172 }
173 return hoursSum;
174 }
175
176 @Override
177 public List<Job> getAllActiveLeaveJobs(String principalId, Date asOfDate) {
178 return jobDao.getAllActiveLeaveJobs(principalId, asOfDate);
179 }
180
181 public List<Job> getInactiveLeaveJobs(Long jobNumber, Date startDate, Date endDate) {
182 return jobDao.getInactiveLeaveJobs(jobNumber, startDate, endDate);
183 }
184
185 @Override
186 public List<Job> getAllInActiveLeaveJobsInRange(String principalId, Date startDate, Date endDate) {
187 return jobDao.getAllInActiveLeaveJobsInRange(principalId, startDate, endDate);
188 }
189
190 @Override
191 public Job getMaxTimestampJob(String principalId) {
192 return jobDao.getMaxTimestampJob(principalId);
193 }
194
195 }