001 /** 002 * Copyright 2004-2012 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.missedpunch; 017 018 import java.util.HashMap; 019 import java.util.List; 020 import java.util.Set; 021 022 import javax.servlet.http.HttpServletRequest; 023 import javax.servlet.http.HttpServletResponse; 024 025 import org.apache.commons.lang.StringUtils; 026 import org.apache.struts.action.ActionForm; 027 import org.apache.struts.action.ActionForward; 028 import org.apache.struts.action.ActionMapping; 029 import org.kuali.hr.time.assignment.AssignmentDescriptionKey; 030 import org.kuali.hr.time.clocklog.ClockLog; 031 import org.kuali.hr.time.clocklog.TkClockActionValuesFinder; 032 import org.kuali.hr.time.service.base.TkServiceLocator; 033 import org.kuali.hr.time.timesheet.TimesheetDocument; 034 import org.kuali.hr.time.util.TKContext; 035 import org.kuali.hr.time.util.TKUser; 036 import org.kuali.hr.time.util.TkConstants; 037 import org.kuali.rice.core.api.util.ConcreteKeyValue; 038 import org.kuali.rice.core.api.util.KeyValue; 039 import org.kuali.rice.kim.api.identity.Person; 040 import org.kuali.rice.kim.api.services.KimApiServiceLocator; 041 import org.kuali.rice.kns.web.struts.action.KualiTransactionalDocumentActionBase; 042 043 public class MissedPunchAction extends KualiTransactionalDocumentActionBase { 044 045 @Override 046 public ActionForward docHandler(ActionMapping mapping, ActionForm form, 047 HttpServletRequest request, HttpServletResponse response) 048 throws Exception { 049 ActionForward act = super.docHandler(mapping, form, request, response); 050 MissedPunchForm mpForm = (MissedPunchForm) form; 051 MissedPunchDocument mpDoc = (MissedPunchDocument) mpForm.getDocument(); 052 mpForm.setDocId(mpDoc.getTimesheetDocumentId()); 053 054 if (StringUtils.equals(request.getParameter("command"), "initiate")) { 055 String tdocId = request.getParameter("tdocid"); 056 TimesheetDocument timesheetDocument = TkServiceLocator.getTimesheetService().getTimesheetDocument(tdocId); 057 mpForm.setDocNum(mpDoc.getDocumentNumber()); 058 mpDoc.setPrincipalId(timesheetDocument.getPrincipalId()); 059 mpDoc.setTimesheetDocumentId(tdocId); 060 // set default document description 061 if(StringUtils.isEmpty(mpDoc.getDocumentHeader().getDocumentDescription())) { 062 mpDoc.getDocumentHeader().setDocumentDescription("Missed Punch: " + timesheetDocument.getPrincipalId()); 063 } 064 065 ClockLog lastClock = TkServiceLocator.getClockLogService().getLastClockLog(TKUser.getCurrentTargetPerson().getPrincipalId()); 066 if(lastClock != null) { 067 MissedPunchDocument lastDoc = TkServiceLocator.getMissedPunchService().getMissedPunchByClockLogId(lastClock.getTkClockLogId()); 068 if(lastDoc != null) { // last action was a missed punch 069 mpDoc.setAssignment(lastDoc.getAssignment()); 070 } else { // last action was not a missed punch 071 AssignmentDescriptionKey adk = new AssignmentDescriptionKey(lastClock.getJobNumber().toString(), lastClock.getWorkArea().toString(), lastClock.getTask().toString()); 072 mpDoc.setAssignment(adk.toAssignmentKeyString()); 073 } 074 } 075 } 076 if (StringUtils.equals(request.getParameter("command"), "displayDocSearchView") 077 || StringUtils.equals(request.getParameter("command"), "displayActionListView") ) { 078 Person p = KimApiServiceLocator.getPersonService().getPerson(mpDoc.getPrincipalId()); 079 TKContext.getUser().setTargetPerson(p); 080 mpForm.setDocId(mpDoc.getDocumentNumber()); 081 } 082 083 mpForm.setAssignmentReadOnly(false); 084 TkClockActionValuesFinder finder = new TkClockActionValuesFinder(); 085 List<KeyValue> keyLabels = (List<KeyValue>) finder.getKeyValues(); 086 if(keyLabels.size() == 2){ 087 // && !mpForm.getDocumentActions().containsKey(KNSConstants.KUALI_ACTION_CAN_EDIT)) { 088 Set<String> actions = TkConstants.CLOCK_ACTION_TRANSITION_MAP.get(TkConstants.CLOCK_IN); 089 boolean flag = true; 090 for (String entry : actions) { 091 if(!keyLabels.contains(new ConcreteKeyValue(entry, TkConstants.CLOCK_ACTION_STRINGS.get(entry)))) { 092 flag = false; 093 } 094 } 095 if(flag) { 096 mpForm.setAssignmentReadOnly(true); 097 } 098 } else if(keyLabels.size() == 1){ 099 Set<String> actions = TkConstants.CLOCK_ACTION_TRANSITION_MAP.get(TkConstants.LUNCH_IN); 100 boolean flag = true; 101 for (String entry : actions) { 102 if(!keyLabels.contains(new ConcreteKeyValue(entry, TkConstants.CLOCK_ACTION_STRINGS.get(entry)))) { 103 flag = false; 104 } 105 } 106 if(flag) { 107 mpForm.setAssignmentReadOnly(true); 108 } 109 } 110 111 return act; 112 } 113 114 @Override 115 public ActionForward route(ActionMapping mapping, ActionForm form, 116 HttpServletRequest request, HttpServletResponse response) 117 throws Exception { 118 MissedPunchForm mpForm = (MissedPunchForm) form; 119 mpForm.setEditingMode(new HashMap()); 120 MissedPunchDocument mpDoc = (MissedPunchDocument) mpForm.getDocument(); 121 mpDoc.setDocumentStatus("R"); 122 request.setAttribute(TkConstants.DOCUMENT_ID_REQUEST_NAME, mpDoc.getDocumentNumber()); 123 request.setAttribute(TkConstants.TIMESHEET_DOCUMENT_ID_REQUEST_NAME, mpDoc.getTimesheetDocumentId()); 124 ActionForward fwd = super.route(mapping, mpForm, request, response); 125 mpForm.setDocId(mpDoc.getDocumentNumber()); 126 mpForm.setAssignmentReadOnly(true); 127 return fwd; 128 129 } 130 131 @Override 132 public ActionForward approve(ActionMapping mapping, ActionForm form, 133 HttpServletRequest request, HttpServletResponse response) 134 throws Exception { 135 MissedPunchForm mpForm = (MissedPunchForm) form; 136 MissedPunchDocument mpDoc = (MissedPunchDocument) mpForm.getDocument(); 137 mpDoc.setDocumentStatus("A"); 138 mpForm.setAssignmentReadOnly(true); 139 request.setAttribute(TkConstants.DOCUMENT_ID_REQUEST_NAME, mpDoc.getDocumentNumber()); 140 request.setAttribute(TkConstants.TIMESHEET_DOCUMENT_ID_REQUEST_NAME, mpDoc.getTimesheetDocumentId()); 141 TkServiceLocator.getMissedPunchService().updateClockLogAndTimeBlockIfNecessary(mpDoc); 142 ActionForward fwd = super.approve(mapping, form, request, response); 143 return fwd; 144 } 145 146 @Override 147 public ActionForward reload(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 148 MissedPunchForm mpForm = (MissedPunchForm) form; 149 MissedPunchDocument mpDoc = (MissedPunchDocument) mpForm.getDocument(); 150 request.setAttribute(TkConstants.DOCUMENT_ID_REQUEST_NAME, mpDoc.getDocumentNumber()); 151 request.setAttribute(TkConstants.TIMESHEET_DOCUMENT_ID_REQUEST_NAME, mpDoc.getTimesheetDocumentId()); 152 return super.reload(mapping, form, request, response); 153 } 154 155 156 }