1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.kpme.tklm.time.approval.summaryrow;
17  
18  import java.io.Serializable;
19  import java.math.BigDecimal;
20  import java.util.ArrayList;
21  import java.util.HashMap;
22  import java.util.List;
23  import java.util.Map;
24  import java.util.Set;
25  
26  import org.apache.commons.lang.StringUtils;
27  import org.kuali.kpme.core.util.HrConstants;
28  import org.kuali.kpme.core.util.HrContext;
29  import org.kuali.kpme.tklm.api.time.approval.summaryrow.ApprovalTimeSummaryRowContract;
30  import org.kuali.kpme.tklm.time.service.TkServiceLocator;
31  import org.kuali.kpme.tklm.time.timeblock.TimeBlock;
32  import org.kuali.kpme.tklm.time.timesheet.TimesheetDocument;
33  import org.kuali.kpme.tklm.time.timesummary.TimeSummary;
34  import org.kuali.rice.kew.api.KewApiConstants;
35  import org.kuali.rice.kew.api.KewApiServiceLocator;
36  import org.kuali.rice.kew.api.action.ActionRequest;
37  import org.kuali.rice.kew.api.document.DocumentStatus;
38  import org.kuali.rice.kew.api.note.Note;
39  import org.kuali.rice.kew.doctype.SecuritySession;
40  import org.kuali.rice.kew.routeheader.DocumentRouteHeaderValue;
41  import org.kuali.rice.kew.service.KEWServiceLocator;
42  import org.kuali.rice.kim.api.identity.principal.Principal;
43  import org.kuali.rice.kim.api.services.KimApiServiceLocator;
44  
45  public class ApprovalTimeSummaryRow implements Comparable<ApprovalTimeSummaryRow>, Serializable, ApprovalTimeSummaryRowContract {
46  
47  	private static final long serialVersionUID = -2005933528843934641L;
48  	private String name;
49  	private List<TimeBlock> lstTimeBlocks = new ArrayList<TimeBlock>();
50      
51      private Map<String, Map<String, BigDecimal>> approverHoursByAssignment;
52      
53      private Map<String, Map<String, BigDecimal>> otherHoursByAssignment;
54      
55      private Map<String,String> assignmentDescriptions; 
56  
57  	private String approvalStatus;
58  	private String approvalStatusMessage;
59  	private String documentId;
60      private Map<String, String> roleNames;
61  	private Map<String,BigDecimal> hoursToPayLabelMap = new HashMap<String,BigDecimal>();
62      private Map<String,BigDecimal> hoursToFlsaPayLabelMap = new HashMap<String,BigDecimal>();
63  	private String clockStatusMessage;
64      private String payCalendarGroup;
65      private List<Note> notes = new ArrayList<Note>();
66      private List<String> warnings = new ArrayList<String>();
67      private Set<String> workAreas;
68      private String principalId;
69      private Boolean clockedInOverThreshold = Boolean.FALSE;    
70      private String selected = "off";
71      private TimeSummary timeSummary;
72      private BigDecimal periodTotal = BigDecimal.ZERO;
73      private String outputString;
74      private String color;
75      
76      private Map<String, BigDecimal> weekTotalMap;
77      
78      public String getApprovalStatusMessage() {
79  		return approvalStatusMessage;
80  	}
81  
82  	public void setApprovalStatusMessage(String approvalStatusMessage) {
83  		this.approvalStatusMessage = approvalStatusMessage;
84  	}
85  
86  	public Map<String, String> getAssignmentDescriptions() {
87          return assignmentDescriptions;
88      }
89  
90      public void setAssignmentDescriptions(Map<String, String> assignmentDescriptions) {
91          this.assignmentDescriptions = assignmentDescriptions;
92      }
93  
94      public Map<String, Map<String, BigDecimal>> getApproverHoursByAssignment() {
95          return approverHoursByAssignment;
96      }
97  
98      public void setApproverHoursByAssignment(Map<String, Map<String, BigDecimal>> approverHoursByAssignment) {
99          this.approverHoursByAssignment = approverHoursByAssignment;
100     }
101 
102     public Map<String, Map<String, BigDecimal>> getOtherHoursByAssignment() {
103         return otherHoursByAssignment;
104     }
105 
106     public void setOtherHoursByAssignment(Map<String, Map<String, BigDecimal>> otherHoursByAssignment) {
107         this.otherHoursByAssignment = otherHoursByAssignment;
108     }
109 
110     public String getName() {
111 		return name;
112 	}
113     public void setName(String name) {
114 		this.name = name;
115 	}
116     public List<TimeBlock> getLstTimeBlocks() {
117 		return lstTimeBlocks;
118 	}
119 	public void setLstTimeBlocks(List<TimeBlock> lstTimeBlocks) {
120 		this.lstTimeBlocks = lstTimeBlocks;
121 	}
122 	public String getApprovalStatus() {
123 		return approvalStatus;
124 	}
125 	public void setApprovalStatus(String approvalStatus) {
126 		this.approvalStatus = approvalStatus;
127 	}
128 	public void setDocumentId(String documentId) {
129 		this.documentId = documentId;
130 	}
131 	public String getDocumentId() {
132 		return documentId;
133 	}
134 	public void setHoursToPayLabelMap(Map<String,BigDecimal> hoursToPayLabelMap) {
135 		this.hoursToPayLabelMap = hoursToPayLabelMap;
136 	}
137 	public Map<String,BigDecimal> getHoursToPayLabelMap() {
138 		return hoursToPayLabelMap;
139 	}
140     public void setHoursToFlsaPayLabelMap(Map<String,BigDecimal> hoursToFlsaPayLabelMap) {
141         this.hoursToFlsaPayLabelMap = hoursToFlsaPayLabelMap;
142     }
143     public Map<String,BigDecimal> getHoursToFlsaPayLabelMap() {
144         return hoursToFlsaPayLabelMap;
145     }
146 	public void setClockStatusMessage(String clockStatusMessage) {
147 		this.clockStatusMessage = clockStatusMessage;
148 	}
149 	public String getClockStatusMessage() {
150 		return clockStatusMessage;
151 	}
152 
153     public String getPayCalendarGroup() {
154         return payCalendarGroup;
155     }
156 
157     public void setPayCalendarGroup(String payCalendarGroup) {
158         this.payCalendarGroup = payCalendarGroup;
159     }
160 
161     
162 
163 
164 
165     public boolean isRoutable() {
166         return StringUtils.equals(getApprovalStatus(), HrConstants.ROUTE_STATUS.INITIATED);
167     }
168 
169     
170 
171 
172 
173     public boolean isApprovable() {
174     	boolean isApprovable = false;
175 
176     	if (DocumentStatus.ENROUTE.getLabel().equals(getApprovalStatus())) {
177     		TimesheetDocument timesheetDocument = TkServiceLocator.getTimesheetService().getTimesheetDocument(getDocumentId());
178     		if (timesheetDocument != null) {
179     			String timesheetPrincipalId = timesheetDocument.getPrincipalId();
180     			String approverPrincipalId = HrContext.getPrincipalId();
181 
182     			if (!StringUtils.equals(timesheetPrincipalId, approverPrincipalId) && TkServiceLocator.getTimesheetService().isReadyToApprove(timesheetDocument)) {
183     				DocumentRouteHeaderValue routeHeader = TkServiceLocator.getTimeApproveService().getRouteHeader(getDocumentId());
184     				boolean authorized = KEWServiceLocator.getDocumentSecurityService().routeLogAuthorized(approverPrincipalId, routeHeader, new SecuritySession(approverPrincipalId));
185     				if (authorized) {
186     					List<String> approverPrincipalIds = KEWServiceLocator.getActionRequestService().getPrincipalIdsWithPendingActionRequestByActionRequestedAndDocId(KewApiConstants.ACTION_REQUEST_APPROVE_REQ, getDocumentId());
187     					if (approverPrincipalIds.contains(approverPrincipalId)) {
188     						isApprovable = true;
189     					}
190     				}
191     			}
192     		}
193     	}
194     	
195         return isApprovable;
196     }
197 
198     
199 
200 
201 
202 
203 
204     public String getTimesheetUserTargetURLParams() {
205         StringBuffer link = new StringBuffer();
206 
207         link.append("methodToCall=changeTargetPerson");
208         link.append("&documentId=").append(this.getDocumentId());
209         Principal person = KimApiServiceLocator.getIdentityService().getPrincipal(this.getPrincipalId());
210         link.append("&principalName=").append(person.getPrincipalName());
211 
212         return link.toString();
213     }
214 
215     public List<Note> getNotes() {
216         return notes;
217     }
218 
219     public void setNotes(List<Note> notes) {
220         this.notes = notes;
221     }
222 
223     public List<String> getWarnings() {
224         return warnings;
225     }
226 
227     public void setWarnings(List<String> warnings) {
228         this.warnings = warnings;
229     }
230 
231     public Set<String> getWorkAreas() {
232         return workAreas;
233     }
234 
235     public void setWorkAreas(Set<String> workAreas) {
236         this.workAreas = workAreas;
237     }
238 
239     public String getPrincipalId() {
240         return principalId;
241     }
242 
243     public void setPrincipalId(String principalId) {
244         this.principalId = principalId;
245     }
246 	public Boolean getClockedInOverThreshold() {
247 		return clockedInOverThreshold;
248 	}
249 	public void setClockedInOverThreshold(Boolean clockedInOverThreshold) {
250 		this.clockedInOverThreshold = clockedInOverThreshold;
251 	}
252 	public String getSelected() {
253 		return selected;
254 	}
255 
256 	public void setSelected(String selected) {
257 		this.selected = selected;
258 	}
259 
260     public TimeSummary getTimeSummary() {
261         return timeSummary;
262     }
263 
264     public void setTimeSummary(TimeSummary timeSummary) {
265         this.timeSummary = timeSummary;
266     }
267 
268     public BigDecimal getPeriodTotal() {
269         return periodTotal;
270     }
271 
272     public void setPeriodTotal(BigDecimal periodTotal) {
273         this.periodTotal = periodTotal;
274     }
275     
276     public int compareTo(ApprovalTimeSummaryRow row) {
277         return name.compareToIgnoreCase(row.getName());
278     }
279 
280 	
281 
282 
283 	public String getOutputString() {
284 		return outputString;
285 	}
286 
287 	
288 
289 
290 	public void setOutputString(String outputString) {
291 		this.outputString = outputString;
292 	}
293 
294 	
295 
296 
297 	public String getColor() {
298 		return color;
299 	}
300 
301 	
302 
303 
304 	public void setColor(String color) {
305 		this.color = color;
306 	}
307 
308 	
309 
310 
311 	public Map<String, BigDecimal> getWeekTotalMap() {
312 		return weekTotalMap;
313 	}
314 
315 	
316 
317 
318 	public void setWeekTotalMap(Map<String, BigDecimal> weekTotalMap) {
319 		this.weekTotalMap = weekTotalMap;
320 	}
321 
322     public Map<String, String> getRoleNames() {
323     	
324         if (StringUtils.isNotBlank(documentId)) {
325             List<ActionRequest> actionRequests = KewApiServiceLocator.getWorkflowDocumentService().getPendingActionRequests(documentId);
326             Map<String, String> roleNames = new HashMap<String, String>();
327             for (ActionRequest ar : actionRequests) {
328                 roleNames.put(ar.getPrincipalId(), ar.getQualifiedRoleNameLabel());
329             }
330             this.setRoleNames(roleNames);
331         }
332         return roleNames;
333     }
334 
335     public void setRoleNames(Map<String, String> roleNames) {
336         this.roleNames = roleNames;
337     }
338 
339     public String getRoleName() {
340         return getRoleNames().get(HrContext.getPrincipalId());
341     }
342 	
343 }