001 /**
002 * Copyright 2004-2012 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.earncode.validation;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.kuali.hr.time.earncode.EarnCode;
020 import org.kuali.hr.time.service.base.TkServiceLocator;
021 import org.kuali.hr.time.timeblock.TimeBlock;
022 import org.kuali.hr.time.util.TkConstants;
023 import org.kuali.hr.time.util.ValidationUtils;
024 import org.kuali.rice.kns.document.MaintenanceDocument;
025 import org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase;
026
027 import java.math.BigDecimal;
028 import java.sql.Date;
029 import java.util.List;
030
031 public class EarnCodeValidation extends MaintenanceDocumentRuleBase{
032
033 @Override
034 protected boolean processCustomRouteDocumentBusinessRules(MaintenanceDocument document) {
035 EarnCode earnCode = (EarnCode)this.getNewBo();
036 EarnCode oldEarnCode = (EarnCode)this.getOldBo();
037 if ((StringUtils.equals(oldEarnCode.getEarnCode(), TkConstants.LUNCH_EARN_CODE)
038 || StringUtils.equals(oldEarnCode.getEarnCode(), TkConstants.HOLIDAY_EARN_CODE))
039 && !earnCode.isActive()) {
040 this.putFieldError("active", "earncode.inactivate.locked", earnCode
041 .getEarnCode());
042 }
043 //if earn code is not designated how to record then throw error
044 if (earnCode.getHrEarnCodeId() == null) {
045 if (ValidationUtils.validateEarnCode(earnCode.getEarnCode(), null)) {
046 // If there IS an earn code, ie, it is valid, we need to report
047 // an error as earn codes must be unique.
048 this.putFieldError("earnCode", "earncode.earncode.unique");
049 return false;
050 }
051 }
052
053 // if(earnCode.getRecordAmount() == false &&
054 // earnCode.getRecordHours() == false &&
055 // earnCode.getRecordTime() == false){
056 // this.putFieldError("recordTime", "earncode.record.not.specified");
057 // return false;
058 // }
059 // //confirm that only one of the check boxes is checked
060 // //if more than one are true then throw an error
061 // if(earnCode.getRecordAmount() && earnCode.getRecordHours() && earnCode.getRecordTime()){
062 // this.putFieldError("recordTime", "earncode.record.unique");
063 // return false;
064 // }
065 // boolean result = earnCode.getRecordAmount() ^ earnCode.getRecordHours() ^ earnCode.getRecordTime();
066 // if(!result){
067 // this.putFieldError("recordTime", "earncode.record.unique");
068 // return false;
069 // }
070
071 //check if the effective date of the accrual category is prior to effective date of the earn code
072 //accrual category is an optional field
073 if(StringUtils.isNotEmpty(earnCode.getAccrualCategory())){
074 if (!ValidationUtils.validateAccrualCategory(earnCode.getAccrualCategory(), earnCode.getEffectiveDate())) {
075 this.putFieldError("accrualCategory", "earncode.accrualCategory.invalid", earnCode.getAccrualCategory());
076 return false;
077 }
078 }
079
080 // check if there's a newer version of the Earn Code
081 int count = TkServiceLocator.getEarnCodeService().getNewerEarnCodeCount(earnCode.getEarnCode(), earnCode.getEffectiveDate());
082 if(count > 0) {
083 this.putFieldError("effectiveDate", "earncode.effectiveDate.newer.exists");
084 return false;
085 }
086
087 // //check if the ovtEarnCode and InflateMinHours is equal to 0
088 // if((earnCode.getRecordAmount() || earnCode.getOvtEarnCode()) && earnCode.getInflateMinHours().compareTo(new BigDecimal(0))!=0){
089 // this.putFieldError("inflateMinHours", "earncode.inflateminhours.should.be.zero");
090 // return false;
091 // }
092 //
093 // //check if the RecordAmount and AccrualCategory has no value
094 // if(earnCode.getRecordAmount() && StringUtils.isNotBlank(earnCode.getAccrualCategory())){
095 // this.putFieldError("accrualCategory", "earncode.accrualcategory.should.be.blank");
096 // return false;
097 // }
098 //
099 // //check if the RecordAmount and InflateFactor is equal to 1
100 // if(earnCode.getRecordAmount() && (earnCode.getInflateFactor().compareTo(new BigDecimal(1))!=0)){
101 // this.putFieldError("inflateFactor", "earncode.inflatefactor.should.be.one");
102 // return false;
103 // }
104
105 // kpme-937 can not inactivation of a earn code if it used in active timeblocks
106 List<TimeBlock> latestEndTimestampTimeBlocks = TkServiceLocator.getTimeBlockService().getLatestEndTimestamp();
107
108 if ( !earnCode.isActive() && earnCode.getEffectiveDate().before(latestEndTimestampTimeBlocks.get(0).getEndDate()) ){
109 List<TimeBlock> activeTimeBlocks = TkServiceLocator.getTimeBlockService().getTimeBlocksWithEarnCode(earnCode.getEarnCode(), earnCode.getEffectiveDate());
110 if(activeTimeBlocks != null && !activeTimeBlocks.isEmpty()) {
111 this.putFieldError("earnCode", "earncode.earncode.inactivate", earnCode.getEarnCode());
112 return false;
113 }
114 }
115
116 return true;
117 }
118
119 }