View Javadoc

1   /**
2    * Copyright 2004-2013 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.hr.time.clock.web;
17  
18  import org.joda.time.DateTime;
19  import org.joda.time.DateTimeZone;
20  import org.kuali.hr.time.assignment.Assignment;
21  import org.kuali.hr.time.clocklog.ClockLog;
22  import org.kuali.hr.time.collection.rule.TimeCollectionRule;
23  import org.kuali.hr.time.service.base.TkServiceLocator;
24  import org.kuali.hr.time.timeblock.TimeBlock;
25  import org.kuali.hr.time.timesheet.TimesheetDocument;
26  import org.kuali.hr.time.timesheet.web.TimesheetActionForm;
27  import org.kuali.hr.time.util.TKUser;
28  import org.kuali.hr.time.util.TKUtils;
29  import org.kuali.hr.time.util.TkConstants;
30  
31  import java.sql.Timestamp;
32  import java.util.*;
33  
34  public class ClockActionForm extends TimesheetActionForm {
35  
36      /**
37       *
38       */
39      private static final long serialVersionUID = -3843074202863670372L;
40  
41      private String currentServerTime;
42      private String currentClockAction;
43      private String lastClockAction;
44      // do we still need nextClockAction?
45      private String nextClockAction;
46      private Timestamp lastClockTimestamp;
47      private Date lastClockTimeWithZone;
48  
49      private String lastClockHours;
50      private ClockLog clockLog;
51      private TimeBlock timeBlock;
52      private boolean showLunchButton;
53      private boolean showDistributeButton;
54      private boolean showMissedPunchButton;
55      private Map<String, List<TimeBlock>> timeBlocksMap;
56      private List<String> assignDescriptionsList;
57  
58      private List<String> distributeAssignList;
59      private LinkedHashMap<String, String> desList;
60  
61      private String editTimeBlockId;
62      private TimeBlock currentTimeBlock;
63      private String currentAssignmentDescription;
64      private String currentAssignmentKey;
65      private String tbId;
66      private String tsDocId;
67  
68      private String newAssignDesCol;
69      private String newBDCol;
70      private String newBTCol;
71      private String newEDCol;
72      private String newETCol;
73      private String newHrsCol;
74  	private String errorMessage;
75  
76  
77   // this is for the ajax call
78  	private String outputString;
79  	
80      public String getTargetUserTimezone() {
81          return TkServiceLocator.getTimezoneService().getUserTimezone(TKUser.getCurrentTargetPerson().getPrincipalId());
82      }
83  
84      public Date getLastClockTimeWithZone() {
85          return lastClockTimeWithZone;
86      }
87  
88      public void setLastClockTimeWithZone(Date lastClockTimeWithZone) {
89          this.lastClockTimeWithZone = lastClockTimeWithZone;
90      }
91  
92      public String getErrorMessage() {
93  		return errorMessage;
94  	}
95  
96  	public void setErrorMessage(String errorMessage) {
97  		this.errorMessage = errorMessage;
98  	}
99  
100 	public String getOutputString() {
101 		return outputString;
102 	}
103 
104 	public void setOutputString(String outputString) {
105 		this.outputString = outputString;
106 	}
107     /** This map is used to determine whether or not lunch buttons will render
108      * for the selected assignment. The key of this map should be the same key
109      * as what is selected in the assignment drop down selection. */
110     private Map<String,Boolean> assignmentLunchMap;
111 
112     public Map<String, Boolean> getAssignmentLunchMap() {
113         return assignmentLunchMap;
114     }
115 
116     public void setAssignmentLunchMap(Map<String,Boolean> assignmentLunchMap) {
117         this.assignmentLunchMap = assignmentLunchMap;
118     }
119 
120     public String getCurrentServerTime() {
121 		return currentServerTime;
122 	}
123 
124 	public void setCurrentServerTime(String currentServerTime) {
125 		this.currentServerTime = currentServerTime;
126 	}
127 	
128 	public String getUserSystemOffsetServerTime(){
129 		DateTime dt = new DateTime(TKUtils.getCurrentDate().getTime()+getUserTimezoneOffset());
130 		return String.valueOf(dt.getMillis());
131 	}
132 	
133 	public Long getUserTimezoneOffset(){
134 		DateTimeZone dtz = TkServiceLocator.getTimezoneService().getUserTimezoneWithFallback();
135 		return TkServiceLocator.getTimezoneService().getTimezoneOffsetFromServerTime(dtz);
136 	}
137 
138     public String getCurrentClockAction() {
139         return currentClockAction;
140     }
141 
142     public void setCurrentClockAction(String currentClockAction) {
143         this.currentClockAction = currentClockAction;
144     }
145 
146 	public String getNextClockAction() {
147 		return nextClockAction;
148 	}
149 
150 	public void setNextClockAction(String nextClockAction) {
151 		this.nextClockAction = nextClockAction;
152 	}
153 
154 	public Timestamp getLastClockTimestamp() {
155 		return lastClockTimestamp;
156 	}
157 
158 	public void setLastClockTimestamp(Timestamp lastClockTimestamp) {
159 		this.lastClockTimestamp = lastClockTimestamp;
160 	}
161 
162 	public ClockLog getClockLog() {
163 		return clockLog;
164 	}
165 
166 	public void setClockLog(ClockLog clockLog) {
167 		this.clockLog = clockLog;
168 	}
169 
170 	public String getLastClockHours() {
171 		return lastClockHours;
172 	}
173 
174 	public void setLastClockHours(String lastClockHours) {
175 		this.lastClockHours = lastClockHours;
176 	}
177 
178 	public TimeBlock getTimeBlock() {
179 		return timeBlock;
180 	}
181 
182 	public void setTimeBlock(TimeBlock timeBlock) {
183 		this.timeBlock = timeBlock;
184 	}
185 
186 	public String getLastClockAction() {
187 		return lastClockAction;
188 	}
189 
190 	public void setLastClockAction(String lastClockAction) {
191 		this.lastClockAction = lastClockAction;
192 	}
193 
194 	public TimeBlock getCurrentTimeBlock() {
195 		if(currentTimeBlock == null && this.getEditTimeBlockId() != null) {
196 			this.setCurrentTimeBlock(TkServiceLocator.getTimeBlockService().getTimeBlock(this.getEditTimeBlockId()));
197 		}
198 		return currentTimeBlock;
199 	}
200 
201 	public void setCurrentTimeBlock(TimeBlock currentTimeBlock) {
202 		this.currentTimeBlock = currentTimeBlock;
203 	}
204 
205     public String getCurrentAssignmentDescription() {
206     	if(currentAssignmentDescription == null && this.getCurrentTimeBlock() != null) {
207     		Assignment assignment = TkServiceLocator.getAssignmentService().getAssignment(this.getTimesheetDocument(), this.getCurrentTimeBlock().getAssignmentKey());
208     		if(assignment != null) {
209     			this.setCurrentAssignmentDescription(assignment.getAssignmentDescription());
210     		}
211     	}
212 		return currentAssignmentDescription;
213 	}
214 
215 	public void setCurrentAssignmentDescription(String currentAssignmentDescription) {
216 		this.currentAssignmentDescription = currentAssignmentDescription;
217 	}
218 
219 	/**
220      * Accounts for presence of Department Lunch Rule and System Lunch Rule.
221      *
222      * This method is dependent on assignmentLunchMap being populated with
223      * proper keys/values.
224      *
225      * @return true if lunch buttons should be displayed, false otherwise.
226      */
227     public boolean isShowLunchButton() {
228         if (showLunchButton) {
229             if (this.assignmentLunchMap != null) {
230                 Boolean val = this.assignmentLunchMap.get(this.getSelectedAssignment());
231                 return (showLunchButton && val != null && !val);
232             } else {
233                 return showLunchButton;
234             }
235         } else {
236             return false;
237         }
238     }
239 
240     /**
241      * @param showLunchButton true if system lunch rule is set.
242      */
243     public void setShowLunchButton(boolean showLunchButton) {
244         this.showLunchButton = showLunchButton;
245     }
246 
247     /**
248      *
249      * This method is dependent on hrsDistributionF flag of TimeCollectionRule
250      *
251      * @return true if Distribute TimeBlock button should be displayed, false otherwise.
252      */
253     public boolean isShowDistributeButton() {
254     	return showDistributeButton;
255     }
256 
257     public void setShowDistrubuteButton(boolean showDistrubuteButton) {
258         this.showDistributeButton = showDistrubuteButton;
259     }
260 
261 	public void setSelectedAssignment(String selectedAssignment) {
262 		super.setSelectedAssignment(selectedAssignment);
263 		this.isShowDistributeButton();
264 	}
265 
266 	public List<String> getAssignDescriptionsList() {
267 		if(assignDescriptionsList == null && this.getTimeBlocksMap() != null) {
268 			List<String> list1= new ArrayList<String>();
269 			 for(String aString : getTimeBlocksMap().keySet()) {
270 				 list1.add(aString);
271 			 }
272 			 this.setAssignDescriptionsList(list1);
273 		}
274 		return assignDescriptionsList;
275 	}
276 
277 	public void setAssignDescriptionsList(List<String> assignDescriptionsList) {
278 		this.assignDescriptionsList = assignDescriptionsList;
279 	}
280 
281 	public String getEditTimeBlockId() {
282 		return editTimeBlockId;
283 	}
284 
285 	public void setEditTimeBlockId(String editTimeBlockId) {
286 		this.editTimeBlockId = editTimeBlockId;
287 	}
288 
289 	public void findTimeBlocksToDistribute() {
290 		 String pId = this.getPrincipalId();
291 		 if(pId != null) {
292 			 TimesheetDocument td = this.getTimesheetDocument();
293 			 if(td != null && !td.getDocumentHeader().getDocumentStatus().equals(TkConstants.ROUTE_STATUS.FINAL)) {
294 				 List<TimeBlock> tbList = new ArrayList<TimeBlock>();
295 				 if(td != null) {
296 					 for(TimeBlock tbTemp : td.getTimeBlocks()) {
297 						 if(tbTemp.getClockLogCreated()) {
298 							 tbList.add(tbTemp);
299 						 }
300 					 }
301 				 }
302 				 List<Assignment> assignmentList = TkServiceLocator.getAssignmentService().getAssignments(pId, null);
303 				 List<String> aList = new ArrayList<String>();
304 				 Map<String, List<TimeBlock>> tbMap = new HashMap<String, List<TimeBlock>>();
305 				 Map<String, String> map2 = new HashMap<String, String>();
306 				 LinkedHashMap<String, String> desMap = new LinkedHashMap<String, String>();  // for populating assignment dropdown list when click Edit button
307 
308 				 for(Assignment assignment : assignmentList) {
309 					TimeCollectionRule rule = TkServiceLocator.getTimeCollectionRuleService().getTimeCollectionRule(assignment.getJob().getDept(), assignment.getWorkArea(), assignment.getEffectiveDate());
310 					if(rule.isHrsDistributionF() && rule.isClockUserFl()) {
311 						aList.add(assignment.getAssignmentDescription()+ "=" + assignment.getTkAssignmentId().toString());
312 						desMap.put(assignment.getTkAssignmentId().toString(), assignment.getAssignmentDescription());
313 
314 						for(TimeBlock tb: tbList){
315 							if(assignment.getWorkArea().equals(tb.getWorkArea())) {
316 								List<TimeBlock> tempList = tbMap.get(assignment.getAssignmentDescription());
317 								if(tempList == null) {
318 									tempList = new ArrayList<TimeBlock>();
319 								}
320 								tempList.add(tb);
321 								Collections.sort(tempList);
322 								tbMap.put(assignment.getAssignmentDescription(), tempList);
323 								map2.put(assignment.getAssignmentDescription(),assignment.getTkAssignmentId().toString() );
324 							}
325 						}
326 					}
327 				 }
328 
329 				 this.setTimeBlocksMap(tbMap);
330 				 this.setDesList(desMap);
331 
332 				 List<String> list1= new ArrayList<String>();
333 				 for(String aString : tbMap.keySet()) {
334 					 list1.add(aString);
335 				 }
336 
337 				 //remove duplicate
338 				 HashSet h = new HashSet(aList);
339 				 aList.clear();
340 				 aList.addAll(h);
341 				 Collections.sort(aList);
342 				 this.setAssignDescriptionsList(list1);
343 				 this.setDistributeAssignList(aList);
344 			 }
345 		 }
346 
347 	}
348 
349 	public String getCurrentAssignmentKey() {
350 		return currentAssignmentKey;
351 	}
352 
353 	public void setCurrentAssignmentKey(String currentAssignmentKey) {
354 		this.currentAssignmentKey = currentAssignmentKey;
355 	}
356 
357 	public String getTbId() {
358 		return tbId;
359 	}
360 
361 	public void setTbId(String tbId) {
362 		this.tbId = tbId;
363 	}
364 	public String getNewAssignDesCol() {
365 		return newAssignDesCol;
366 	}
367 
368 	public void setNewAssignDesCol(String newAssignDesCol) {
369 		this.newAssignDesCol = newAssignDesCol;
370 	}
371 
372 	public String getNewBDCol() {
373 		return newBDCol;
374 	}
375 
376 	public void setNewBDCol(String newBDCol) {
377 		this.newBDCol = newBDCol;
378 	}
379 
380 	public String getNewBTCol() {
381 		return newBTCol;
382 	}
383 
384 	public void setNewBTCol(String newBTCol) {
385 		this.newBTCol = newBTCol;
386 	}
387 
388 	public String getNewEDCol() {
389 		return newEDCol;
390 	}
391 
392 	public void setNewEDCol(String newEDCol) {
393 		this.newEDCol = newEDCol;
394 	}
395 
396 	public String getNewETCol() {
397 		return newETCol;
398 	}
399 
400 	public void setNewETCol(String newETCol) {
401 		this.newETCol = newETCol;
402 	}
403 
404 	public String getNewHrsCol() {
405 		return newHrsCol;
406 	}
407 
408 	public void setNewHrsCol(String newHrsCol) {
409 		this.newHrsCol = newHrsCol;
410 	}
411 
412 	public Map<String, List<TimeBlock>> getTimeBlocksMap() {
413 		if(timeBlocksMap == null ) {
414 			this.findTimeBlocksToDistribute();
415 		}
416 		return timeBlocksMap;
417 	}
418 
419 	public void setTimeBlocksMap(Map<String, List<TimeBlock>> timeBlocksMap) {
420 		this.timeBlocksMap = timeBlocksMap;
421 	}
422 
423 	public List<String> getDistributeAssignList() {
424 		return distributeAssignList;
425 	}
426 
427 	public void setDistributeAssignList(List<String> distributeAssignList) {
428 		this.distributeAssignList = distributeAssignList;
429 	}
430 
431 	public LinkedHashMap<String, String> getDesList() {
432 		return desList;
433 	}
434 
435 	public void setDesList(LinkedHashMap<String, String> desList) {
436 		this.desList = desList;
437 	}
438 
439 	public String getTsDocId() {
440 		return tsDocId;
441 	}
442 
443 	public void setTsDocId(String tsDocId) {
444 		this.tsDocId = tsDocId;
445 	}
446 
447 	public boolean isShowMissedPunchButton() {
448 		return showMissedPunchButton;
449 	}
450 
451 	public void setShowMissedPunchButton(boolean showMissedPunchButton) {
452 		this.showMissedPunchButton = showMissedPunchButton;
453 	}
454 	
455 }