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 }