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.kuali.hr.time.assignment.Assignment;
020 import org.kuali.hr.time.assignment.AssignmentDescriptionKey;
021 import org.kuali.hr.time.calendar.Calendar;
022 import org.kuali.hr.time.calendar.CalendarEntries;
023 import org.kuali.hr.time.clocklog.ClockLog;
024 import org.kuali.hr.time.service.base.TkServiceLocator;
025 import org.kuali.hr.time.timesheet.TimesheetDocument;
026 import org.kuali.hr.time.util.TkConstants;
027 import org.kuali.hr.time.workflow.TimesheetDocumentHeader;
028 import org.kuali.rice.core.api.config.property.ConfigContext;
029 import org.kuali.rice.kim.api.identity.principal.Principal;
030 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
031 import org.quartz.Job;
032 import org.quartz.JobDataMap;
033 import org.quartz.JobExecutionContext;
034 import org.quartz.JobExecutionException;
035
036 import java.sql.Timestamp;
037 import java.util.Date;
038
039 public class EndPayPeriodJob implements Job {
040
041 private static final Logger LOG = Logger.getLogger(EndPayPeriodJob.class);
042
043 public void execute(JobExecutionContext context) throws JobExecutionException {
044 String batchUserPrincipalId = getBatchUserPrincipalId();
045
046 if (batchUserPrincipalId != null) {
047 JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
048
049 String hrCalendarEntriesId = jobDataMap.getString("hrCalendarEntriesId");
050 String tkClockLogId = jobDataMap.getString("tkClockLogId");
051
052 CalendarEntries calendarEntry = TkServiceLocator.getCalendarEntriesService().getCalendarEntries(hrCalendarEntriesId);
053 Calendar calendar = TkServiceLocator.getCalendarService().getCalendar(calendarEntry.getHrCalendarId());
054 calendarEntry.setCalendarObj(calendar);
055
056 Date beginPeriodDateTime = calendarEntry.getBeginPeriodDateTime();
057 Date endPeriodDateTime = calendarEntry.getEndPeriodDateTime();
058 ClockLog openClockLog = TkServiceLocator.getClockLogService().getClockLog(tkClockLogId);
059 String ipAddress = openClockLog.getIpAddress();
060 String principalId = openClockLog.getPrincipalId();
061
062 TimesheetDocumentHeader timesheetDocumentHeader = TkServiceLocator.getTimesheetDocumentHeaderService().getDocumentHeader(principalId, beginPeriodDateTime, endPeriodDateTime);
063 if (timesheetDocumentHeader != null) {
064 TimesheetDocument timesheetDocument = TkServiceLocator.getTimesheetService().getTimesheetDocument(timesheetDocumentHeader.getDocumentId());
065 String assignmentKey = new AssignmentDescriptionKey(openClockLog.getJobNumber(), openClockLog.getWorkArea(), openClockLog.getTask()).toAssignmentKeyString();
066 Assignment assignment = TkServiceLocator.getAssignmentService().getAssignment(timesheetDocument, assignmentKey);
067
068 TkServiceLocator.getClockLogService().processClockLog(new Timestamp(endPeriodDateTime.getTime()), assignment, calendarEntry, ipAddress,
069 new java.sql.Date(endPeriodDateTime.getTime()), timesheetDocument, TkConstants.CLOCK_OUT, principalId, batchUserPrincipalId);
070 TkServiceLocator.getClockLogService().processClockLog(new Timestamp(beginPeriodDateTime.getTime()), assignment, calendarEntry, ipAddress,
071 new java.sql.Date(beginPeriodDateTime.getTime()), timesheetDocument, TkConstants.CLOCK_IN, principalId, batchUserPrincipalId);
072 }
073 } else {
074 String principalName = ConfigContext.getCurrentContextConfig().getProperty(TkConstants.BATCH_USER_PRINCIPAL_NAME);
075 LOG.error("Could not run batch jobs due to missing batch user " + principalName);
076 }
077 }
078
079 private String getBatchUserPrincipalId() {
080 String principalName = ConfigContext.getCurrentContextConfig().getProperty(TkConstants.BATCH_USER_PRINCIPAL_NAME);
081 Principal principal = KimApiServiceLocator.getIdentityService().getPrincipalByPrincipalName(principalName);
082 return principal == null ? null : principal.getPrincipalId();
083 }
084
085 }