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.batch; 017 018 import org.apache.log4j.Logger; 019 import org.joda.time.DateTime; 020 import org.kuali.hr.lm.accrual.service.AccrualService; 021 import org.kuali.hr.lm.leavecalendar.service.LeaveCalendarServiceImpl; 022 import org.kuali.hr.lm.leaveplan.LeavePlan; 023 import org.kuali.hr.lm.leaveplan.service.LeavePlanService; 024 import org.kuali.hr.time.assignment.Assignment; 025 import org.kuali.hr.time.assignment.service.AssignmentService; 026 import org.kuali.hr.time.principal.PrincipalHRAttributes; 027 import org.kuali.hr.time.principal.service.PrincipalHRAttributesService; 028 import org.kuali.hr.time.util.TKUtils; 029 import org.kuali.hr.time.util.TkConstants; 030 import org.kuali.rice.core.api.config.property.ConfigContext; 031 import org.kuali.rice.kim.api.identity.principal.Principal; 032 import org.kuali.rice.kim.api.services.KimApiServiceLocator; 033 import org.quartz.Job; 034 import org.quartz.JobExecutionContext; 035 import org.quartz.JobExecutionException; 036 037 import java.sql.Date; 038 import java.util.List; 039 040 public class AccrualJob implements Job { 041 042 private static final Logger LOG = Logger.getLogger(LeaveCalendarServiceImpl.class); 043 044 private static AccrualService ACCRUAL_SERVICE; 045 private static AssignmentService ASSIGNMENT_SERVICE; 046 private static LeavePlanService LEAVE_PLAN_SERVICE; 047 private static PrincipalHRAttributesService PRINCIPAL_HR_ATTRIBUTES_SERVICE; 048 049 @Override 050 public void execute(JobExecutionContext context) throws JobExecutionException { 051 String batchUserPrincipalId = getBatchUserPrincipalId(); 052 053 if (batchUserPrincipalId != null) { 054 Date asOfDate = TKUtils.getCurrentDate(); 055 List<Assignment> assignments = getAssignmentService().getActiveAssignments(asOfDate); 056 057 for (Assignment assignment : assignments) { 058 if (assignment.getJob().isEligibleForLeave()) { 059 String principalId = assignment.getPrincipalId(); 060 061 PrincipalHRAttributes principalHRAttributes = getPrincipalHRAttributesService().getPrincipalCalendar(principalId, asOfDate); 062 if (principalHRAttributes != null) { 063 LeavePlan leavePlan = getLeavePlanService().getLeavePlan(principalHRAttributes.getLeavePlan(), principalHRAttributes.getEffectiveDate()); 064 if (leavePlan != null) { 065 DateTime endDate = new DateTime(asOfDate).plusMonths(Integer.parseInt(leavePlan.getPlanningMonths())); 066 getAccrualService().runAccrual(principalId, new java.sql.Date(asOfDate.getTime()), new java.sql.Date(endDate.toDate().getTime()), true, batchUserPrincipalId); 067 } 068 } 069 } 070 } 071 } else { 072 String principalName = ConfigContext.getCurrentContextConfig().getProperty(TkConstants.BATCH_USER_PRINCIPAL_NAME); 073 LOG.error("Could not run batch jobs due to missing batch user " + principalName); 074 } 075 } 076 077 public static AccrualService getAccrualService() { 078 return ACCRUAL_SERVICE; 079 } 080 081 public static void setAccrualService(AccrualService accrualService) { 082 ACCRUAL_SERVICE = accrualService; 083 } 084 085 public static AssignmentService getAssignmentService() { 086 return ASSIGNMENT_SERVICE; 087 } 088 089 public static void setAssignmentService(AssignmentService assignmentService) { 090 ASSIGNMENT_SERVICE = assignmentService; 091 } 092 093 public static LeavePlanService getLeavePlanService() { 094 return LEAVE_PLAN_SERVICE; 095 } 096 097 public static void setLeavePlanService(LeavePlanService leavePlanService) { 098 LEAVE_PLAN_SERVICE = leavePlanService; 099 } 100 101 public static PrincipalHRAttributesService getPrincipalHRAttributesService() { 102 return PRINCIPAL_HR_ATTRIBUTES_SERVICE; 103 } 104 105 public static void setPrincipalHRAttributesService(PrincipalHRAttributesService principalHRAttributesService) { 106 PRINCIPAL_HR_ATTRIBUTES_SERVICE = principalHRAttributesService; 107 } 108 109 private String getBatchUserPrincipalId() { 110 String principalName = ConfigContext.getCurrentContextConfig().getProperty(TkConstants.BATCH_USER_PRINCIPAL_NAME); 111 Principal principal = KimApiServiceLocator.getIdentityService().getPrincipalByPrincipalName(principalName); 112 return principal == null ? null : principal.getPrincipalId(); 113 } 114 115 }