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.assignment;
017
018 import java.sql.Date;
019 import java.sql.Timestamp;
020 import java.util.LinkedList;
021 import java.util.List;
022
023 import org.apache.commons.lang.builder.EqualsBuilder;
024 import org.apache.commons.lang.builder.HashCodeBuilder;
025 import org.kuali.hr.core.KPMEConstants;
026 import org.kuali.hr.job.Job;
027 import org.kuali.hr.time.HrBusinessObject;
028 import org.kuali.hr.time.collection.rule.TimeCollectionRule;
029 import org.kuali.hr.time.dept.lunch.DeptLunchRule;
030 import org.kuali.hr.time.service.base.TkServiceLocator;
031 import org.kuali.hr.time.task.Task;
032 import org.kuali.hr.time.util.TKUtils;
033 import org.kuali.hr.time.workarea.WorkArea;
034 import org.kuali.rice.kim.api.identity.Person;
035 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
036
037 public class Assignment extends HrBusinessObject {
038 public static final String CACHE_NAME = KPMEConstants.APPLICATION_NAMESPACE_CODE + "/" + "Assignment";
039 /**
040 *
041 */
042 private static final long serialVersionUID = -3408305833805778653L;
043 //database id
044 private String tkAssignmentId;
045 private String principalId;
046 private Long jobNumber;
047 private String hrJobId;
048 private Job job;
049 private Long workArea;
050 //private Long tkWorkAreaId;
051 private Long task;
052 private String dept;
053 private TimeCollectionRule timeCollectionRule;
054 private DeptLunchRule deptLunchRule;
055 private WorkArea workAreaObj;
056 private Boolean history;
057 private String assignmentKey;
058
059 private Person principal;
060
061 private Task taskObj;
062
063 private String calGroup;
064
065 private List<AssignmentAccount> assignmentAccounts = new LinkedList<AssignmentAccount>();
066
067 public List<AssignmentAccount> getAssignmentAccounts() {
068 return assignmentAccounts;
069 }
070
071 public void setAssignmentAccounts(List<AssignmentAccount> assignmentAccounts) {
072 this.assignmentAccounts = assignmentAccounts;
073 }
074
075 public Assignment(){}
076
077 public Assignment(String principalId, Long jobNumber, Date effectiveDate,
078 String earnCode, Long workAreaId, Long taskId) {
079 this.principalId = principalId;
080 this.jobNumber = jobNumber;
081 this.effectiveDate = effectiveDate;
082 this.workArea = workAreaId;
083 this.task = taskId;
084 }
085
086 public String getPrincipalId() {
087 return principalId;
088 }
089
090 public void setPrincipalId(String principalId) {
091 this.principalId = principalId;
092 this.setPrincipal(KimApiServiceLocator.getPersonService().getPerson(this.principalId));
093 }
094
095 public String getName() {
096 if (principal == null) {
097 principal = KimApiServiceLocator.getPersonService().getPerson(this.principalId);
098 }
099 return (principal != null) ? principal.getName() : "";
100 }
101
102 public Job getJob() {
103 if(job == null && this.getJobNumber() != null) {
104 this.setJob(TkServiceLocator.getJobService().getJob(this.getPrincipalId(), this.getJobNumber(), this.getEffectiveDate()));
105 }
106 return job;
107 }
108
109 public void setJob(Job job) {
110 this.job = job;
111 }
112
113 public Long getJobNumber() {
114 return jobNumber;
115 }
116
117 public void setJobNumber(Long jobNumber) {
118 this.jobNumber = jobNumber;
119 }
120
121 public String getHrJobId() {
122 return hrJobId;
123 }
124
125 public void setHrJobId(String hrJobId) {
126 this.hrJobId = hrJobId;
127 }
128
129 public Date getEffectiveDate() {
130 return effectiveDate;
131 }
132
133 public void setEffectiveDate(Date effectiveDate) {
134 this.effectiveDate = effectiveDate;
135 }
136
137 public boolean isActive() {
138 return active;
139 }
140
141 public void setActive(boolean active) {
142 this.active = active;
143 }
144
145 /**
146 * Provides us with the text to display to the user for clock actions on
147 * this assignment.
148 *
149 * @return
150 */
151 public String getClockText() {
152 StringBuilder sb = new StringBuilder("example assignment clock text");
153
154 return sb.toString();
155 }
156
157 public String getTkAssignmentId() {
158 return tkAssignmentId;
159
160 }
161 public void setTkAssignmentId(String tkAssignmentId) {
162 this.tkAssignmentId = tkAssignmentId;
163 }
164
165 public Timestamp getTimestamp() {
166 return timestamp;
167 }
168
169 public void setTimestamp(Timestamp timestamp) {
170 this.timestamp = timestamp;
171 }
172
173 public void setWorkArea(Long workArea) {
174 this.workArea = workArea;
175 }
176
177 public void setTask(Long task) {
178 this.task = task;
179 }
180
181 public String getDept() {
182 if(this.getJobNumber()!= null) {
183 if(this.getJob() == null || !this.getJobNumber().equals(this.getJob().getJobNumber())) {
184 if(this.getEffectiveDate()!=null){
185 this.setJob(TkServiceLocator.getJobService().getJob(this.getPrincipalId(), this.getJobNumber(), this.getEffectiveDate(), false));
186 }else{
187 this.setJob(TkServiceLocator.getJobService().getJob(this.getPrincipalId(), this.getJobNumber(), TKUtils.getCurrentDate(), false));
188 }
189 }
190 setDept((this.getJob() != null) ? this.getJob().getDept() : "");
191 }
192 return dept;
193 }
194
195 public void setDept(String dept) {
196 this.dept = dept;
197 }
198
199 public WorkArea getWorkAreaObj() {
200 if(workAreaObj == null && workArea != null) {
201 this.setWorkAreaObj(TkServiceLocator.getWorkAreaService().getWorkArea(this.getWorkArea(), this.getEffectiveDate()));
202 }
203 return workAreaObj;
204 }
205
206 public void setWorkAreaObj(WorkArea workAreaObj) {
207 this.workAreaObj = workAreaObj;
208 }
209
210 public Long getWorkArea() {
211 return workArea;
212 }
213
214 public Long getTask() {
215 if(task == null) {
216 return new Long(0); // default task to 0 if task not provided
217 }
218 return task;
219 }
220
221 public void setTimeCollectionRule(TimeCollectionRule timeCollectionRule) {
222 this.timeCollectionRule = timeCollectionRule;
223 }
224
225 public TimeCollectionRule getTimeCollectionRule() {
226 return timeCollectionRule;
227 }
228
229 public boolean isSynchronous() {
230 return timeCollectionRule.isClockUserFl();
231 }
232
233 public DeptLunchRule getDeptLunchRule() {
234 return deptLunchRule;
235 }
236
237 public void setDeptLunchRule(DeptLunchRule deptLunchRule) {
238 this.deptLunchRule = deptLunchRule;
239 }
240
241 public String getAssignmentDescription() {
242 return TKUtils.getAssignmentString(this);
243 }
244
245 public Person getPrincipal() {
246 return principal;
247 }
248
249 public void setPrincipal(Person principal) {
250 this.principal = principal;
251 }
252
253 public Task getTaskObj() {
254 return taskObj;
255 }
256
257 public void setTaskObj(Task taskObj) {
258 this.taskObj = taskObj;
259 }
260
261 /*public Long getTkWorkAreaId() {
262 return tkWorkAreaId;
263 }
264
265 public void setTkWorkAreaId(Long tkWorkAreaId) {
266 this.tkWorkAreaId = tkWorkAreaId;
267 }*/
268 public Boolean getHistory() {
269 return history;
270 }
271 public void setHistory(Boolean history) {
272 this.history = history;
273 }
274
275 @Override
276 public String getUniqueKey() {
277 String jobKey = getPrincipalId()+"_"+getJobNumber()+"_"+getWorkArea()+"_"+
278 (getTask() != null ? getTask().toString() : "");
279 return jobKey;
280
281 }
282
283 @Override
284 public String getId() {
285 return getTkAssignmentId();
286 }
287
288 @Override
289 public void setId(String id) {
290 setTkAssignmentId(id);
291 }
292
293 @Override
294 public boolean equals(Object obj) {
295 if (obj == null)
296 return false;
297 if (obj == this)
298 return true;
299 if (obj.getClass() != getClass())
300 return false;
301
302 Assignment rhs = (Assignment)obj;
303 return new EqualsBuilder().append(principalId, rhs.principalId).append(jobNumber, rhs.jobNumber)
304 .append(workArea, rhs.workArea).append(task, rhs.task).isEquals();
305 }
306
307 @Override
308 public int hashCode() {
309 return new HashCodeBuilder(17, 781).append(principalId).append(jobNumber).append(workArea).append(task).toHashCode();
310 }
311
312 public String getCalGroup() {
313 return calGroup;
314 }
315
316 public void setCalGroup(String calGroup) {
317 this.calGroup = calGroup;
318 }
319
320 public String getAssignmentKey() {
321 return new AssignmentDescriptionKey(this).toAssignmentKeyString();
322 }
323 }