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.approval.web;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.kuali.hr.lm.leaveblock.LeaveBlock;
020 import org.kuali.hr.lm.leavecalendar.LeaveCalendarDocument;
021 import org.kuali.hr.time.service.base.TkServiceLocator;
022 import org.kuali.hr.time.util.TKContext;
023 import org.kuali.hr.time.util.TkConstants;
024 import org.kuali.rice.kew.api.KewApiConstants;
025 import org.kuali.rice.kew.api.document.DocumentStatus;
026 import org.kuali.rice.kew.api.note.Note;
027 import org.kuali.rice.kew.doctype.SecuritySession;
028 import org.kuali.rice.kew.routeheader.DocumentRouteHeaderValue;
029 import org.kuali.rice.kew.service.KEWServiceLocator;
030 import org.kuali.rice.kim.api.identity.principal.Principal;
031 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
032
033 import java.io.Serializable;
034 import java.math.BigDecimal;
035 import java.util.*;
036
037 public class ApprovalLeaveSummaryRow implements Comparable<ApprovalLeaveSummaryRow>, Serializable {
038 private String name;
039 private String principalId;
040 private String documentId;
041 private List<String> warnings = new ArrayList<String>();
042 private String selected = "off";
043 private String approvalStatus;
044
045 private List<Note> notes = new ArrayList<Note>();
046 private Boolean moreThanOneCalendar = Boolean.FALSE;
047 private String lastApproveMessage;
048 private List<LeaveBlock> leaveBlockList = new ArrayList<LeaveBlock>();
049 private Map<Date, Map<String, BigDecimal>> earnCodeLeaveHours = new LinkedHashMap<Date, Map<String, BigDecimal>>();
050 private Boolean exemptEmployee;
051
052 public boolean isApprovable() {
053 boolean isApprovable = false;
054
055 if (DocumentStatus.ENROUTE.getLabel().equals(getApprovalStatus())) {
056 LeaveCalendarDocument leaveCalendarDocument = TkServiceLocator.getLeaveCalendarService().getLeaveCalendarDocument(getDocumentId());
057 if (leaveCalendarDocument != null) {
058 String leaveCalendarPrincipalId = leaveCalendarDocument.getPrincipalId();
059 String approverPrincipalId = TKContext.getPrincipalId();
060
061 if (!StringUtils.equals(leaveCalendarPrincipalId, approverPrincipalId) && TkServiceLocator.getLeaveCalendarService().isReadyToApprove(leaveCalendarDocument)) {
062 DocumentRouteHeaderValue routeHeader = TkServiceLocator.getTimeApproveService().getRouteHeader(getDocumentId());
063 boolean authorized = KEWServiceLocator.getDocumentSecurityService().routeLogAuthorized(approverPrincipalId, routeHeader, new SecuritySession(approverPrincipalId));
064 if (authorized) {
065 List<String> approverPrincipalIds = KEWServiceLocator.getActionRequestService().getPrincipalIdsWithPendingActionRequestByActionRequestedAndDocId(KewApiConstants.ACTION_REQUEST_APPROVE_REQ, getDocumentId());
066 if (approverPrincipalIds.contains(approverPrincipalId)) {
067 isApprovable = true;
068 }
069 }
070 }
071 }
072 }
073
074 return isApprovable;
075 }
076
077
078 public int compareTo(ApprovalLeaveSummaryRow row) {
079 return name.compareToIgnoreCase(row.getName());
080 }
081
082 public String getName() {
083 return name;
084 }
085
086 public void setName(String name) {
087 this.name = name;
088 }
089
090 public String getPrincipalId() {
091 return principalId;
092 }
093
094 public void setPrincipalId(String principalId) {
095 this.principalId = principalId;
096 }
097
098 public String getUserTargetURLParams() {
099 StringBuffer link = new StringBuffer();
100
101 link.append("methodToCall=changeTargetPerson");
102 link.append("&documentId=").append(this.getDocumentId());
103 Principal person = KimApiServiceLocator.getIdentityService().getPrincipal(this.getPrincipalId());
104 link.append("&principalName=").append(person.getPrincipalName());
105
106 return link.toString();
107 }
108
109 public List<LeaveBlock> getLeaveBlockList() {
110 return leaveBlockList;
111 }
112
113 public void setLeaveBlockList(List<LeaveBlock> leaveBlockList) {
114 this.leaveBlockList = leaveBlockList;
115 }
116
117 public String getDocumentId() {
118 return documentId;
119 }
120
121 public void setDocumentId(String documentId) {
122 this.documentId = documentId;
123 }
124
125 public List<String> getWarnings() {
126 return warnings;
127 }
128
129 public void setWarnings(List<String> warnings) {
130 this.warnings = warnings;
131 }
132
133 public String getSelected() {
134 return selected;
135 }
136
137 public void setSelected(String selected) {
138 this.selected = selected;
139 }
140
141 public List<Note> getNotes() {
142 return notes;
143 }
144
145 public void setNotes(List<Note> notes) {
146 this.notes = notes;
147 }
148
149 public String getLastApproveMessage() {
150 return lastApproveMessage;
151 }
152
153 public void setLastApproveMessage(String lastApproveMessage) {
154 this.lastApproveMessage = lastApproveMessage;
155 }
156
157 public String getApprovalStatus() {
158 return approvalStatus;
159 }
160
161 public void setApprovalStatus(String approvalStatus) {
162 this.approvalStatus = approvalStatus;
163 }
164
165 public Map<Date, Map<String, BigDecimal>> getEarnCodeLeaveHours() {
166 return earnCodeLeaveHours;
167 }
168
169 public void setEarnCodeLeaveHours(Map<Date, Map<String, BigDecimal>> earnCodeLeaveHours) {
170 this.earnCodeLeaveHours = earnCodeLeaveHours;
171 }
172
173 public Boolean getMoreThanOneCalendar() {
174 return moreThanOneCalendar;
175 }
176
177
178 public void setMoreThanOneCalendar(Boolean moreThanOneCalendar) {
179 this.moreThanOneCalendar = moreThanOneCalendar;
180 }
181
182
183 public Boolean getExemptEmployee() {
184 if(this.exemptEmployee == null) {
185 this.exemptEmployee = TkServiceLocator.getLeaveApprovalService().isActiveAssignmentFoundOnJobFlsaStatus(this.principalId,TkConstants.FLSA_STATUS_EXEMPT, true);
186 }
187 return exemptEmployee;
188 }
189
190
191 public void setExemptEmployee(Boolean exemptEmployee) {
192 this.exemptEmployee = exemptEmployee;
193 }
194
195
196 }