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.service;
017
018 import java.util.Collection;
019 import java.util.HashMap;
020 import java.util.Map;
021
022 import org.apache.commons.lang.StringUtils;
023 import org.kuali.hr.job.Job;
024 import org.kuali.hr.time.HrBusinessObject;
025 import org.kuali.hr.time.assignment.Assignment;
026 import org.kuali.hr.time.assignment.AssignmentAccount;
027 import org.kuali.hr.time.paytype.PayType;
028 import org.kuali.hr.time.service.base.TkServiceLocator;
029 import org.kuali.hr.time.util.HrBusinessObjectMaintainableImpl;
030 import org.kuali.kfs.coa.businessobject.Account;
031 import org.kuali.rice.kim.api.identity.Person;
032 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
033 import org.kuali.rice.kns.document.MaintenanceDocument;
034 import org.kuali.rice.kns.service.KNSServiceLocator;
035 import org.kuali.rice.krad.bo.PersistableBusinessObject;
036 import org.kuali.rice.krad.service.KRADServiceLocator;
037
038 /**
039 * Override the Maintenance page behavior for Assignment object
040 *
041 *
042 */
043 public class AssignmentMaintainableServiceImpl extends HrBusinessObjectMaintainableImpl {
044
045 /**
046 *
047 */
048 private static final long serialVersionUID = 1L;
049
050 @Override
051 public Map populateBusinessObject(Map<String, String> fieldValues,
052 MaintenanceDocument maintenanceDocument, String methodToCall) {
053 if (fieldValues.containsKey("principalId")
054 && StringUtils.isNotEmpty(fieldValues.get("principalId"))) {
055 Person p = KimApiServiceLocator.getPersonService().getPerson(
056 fieldValues.get("principalId"));
057 if (p != null) {
058 fieldValues.put("name", p.getName());
059 } else {
060 fieldValues.put("name", "");
061 }
062 }
063
064 // KPME-1139
065 // Commented due to KPME-1226
066 /* if (!fieldValues.containsKey("effectiveDate")) {
067 fieldValues.put("effectiveDate", new DateTime().toString(TkConstants.DT_BASIC_DATE_FORMAT));
068 }*/
069
070 return super.populateBusinessObject(fieldValues, maintenanceDocument,
071 methodToCall);
072 }
073
074 @Override
075 public Map<String, String> populateNewCollectionLines(
076 Map<String, String> fieldValues,
077 MaintenanceDocument maintenanceDocument, String methodToCall) {
078 if (fieldValues.containsKey("assignmentAccounts.accountNbr")
079 && StringUtils.isNotEmpty(fieldValues
080 .get("assignmentAccounts.accountNbr"))) {
081 Map<String, String> fields = new HashMap<String, String>();
082 fields.put("accountNumber", fieldValues
083 .get("assignmentAccounts.accountNbr"));
084 Collection account = KRADServiceLocator.getBusinessObjectService()
085 .findMatching(Account.class, fields);
086 if (account.size() > 0) {
087 Account acc = (Account) account.iterator().next();
088 fieldValues.put("assignmentAccounts.finCoaCd", acc
089 .getChartOfAccountsCode());
090 }
091 }
092 if ( !fieldValues.containsKey("assignmentAccounts.earnCode")
093 || StringUtils.isEmpty(fieldValues.get("assignmentAccounts.earnCode"))) {
094 Assignment assignment = (Assignment) maintenanceDocument.getDocumentBusinessObject();
095 if(assignment != null
096 && assignment.getPrincipalId() != null
097 && assignment.getJobNumber() != null
098 && assignment.getEffectiveDate() != null) {
099 Job job = TkServiceLocator.getJobService().getJob(assignment.getPrincipalId(), assignment.getJobNumber(), assignment.getEffectiveDate(), false);
100 if(job != null) {
101 PayType payType = TkServiceLocator.getPayTypeService().getPayType(job.getHrPayType(), assignment.getEffectiveDate());
102 fieldValues.put("assignmentAccounts.earnCode", (payType != null) ? payType.getRegEarnCode() : "");
103 }
104 }
105 }
106
107 return super.populateNewCollectionLines(fieldValues,
108 maintenanceDocument, methodToCall);
109 }
110
111 @Override
112 public void processAfterEdit(MaintenanceDocument document,
113 Map<String, String[]> parameters) {
114 Assignment aOld = (Assignment) document.getOldMaintainableObject()
115 .getBusinessObject();
116 Assignment aNew = (Assignment) document.getNewMaintainableObject()
117 .getBusinessObject();
118 super.processAfterEdit(document, parameters);
119 }
120
121
122 @Override
123 protected void setNewCollectionLineDefaultValues(String arg0,
124 PersistableBusinessObject arg1) {
125 if(arg1 instanceof AssignmentAccount){
126 AssignmentAccount assignmentAccount = (AssignmentAccount)arg1;
127 Assignment assignment = (Assignment) this.getBusinessObject();
128 assignmentAccount.setActive(assignment.isActive());
129 }
130 super.setNewCollectionLineDefaultValues(arg0, arg1);
131 }
132
133 @Override
134 public HrBusinessObject getObjectById(String id) {
135 return TkServiceLocator.getAssignmentService().getAssignment(id);
136 }
137
138 @Override
139 public void customSaveLogic(HrBusinessObject hrObj) {
140 Assignment assignment = (Assignment)hrObj;
141 for (AssignmentAccount assignAcct : assignment.getAssignmentAccounts()) {
142 if(!isOldBusinessObjectInDocument()){ //prevents duplicate object on edit
143 assignAcct.setTkAssignAcctId(null);
144 }
145 assignAcct.setTkAssignmentId(assignment.getTkAssignmentId());
146 }
147 }
148
149 }