001 /* 002 * Copyright 2011 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.kfs.module.ld.document.validation.impl; 017 018 import static org.kuali.kfs.sys.KFSConstants.GENERIC_CODE_PROPERTY_NAME; 019 import static org.kuali.kfs.sys.KFSPropertyConstants.REFERENCE_NUMBER; 020 import static org.kuali.kfs.sys.KFSPropertyConstants.REFERENCE_ORIGIN_CODE; 021 import static org.kuali.kfs.sys.KFSPropertyConstants.REFERENCE_TYPE_CODE; 022 023 import java.util.Collection; 024 import java.util.HashMap; 025 import java.util.Map; 026 027 import org.apache.commons.lang.StringUtils; 028 import org.kuali.kfs.coa.businessobject.BalanceType; 029 import org.kuali.kfs.module.ld.LaborConstants; 030 import org.kuali.kfs.module.ld.LaborKeyConstants; 031 import org.kuali.kfs.sys.document.service.AccountingDocumentRuleHelperService; 032 import org.kuali.kfs.sys.KFSConstants; 033 import org.kuali.kfs.sys.KFSKeyConstants; 034 import org.kuali.kfs.sys.KFSPropertyConstants; 035 import org.kuali.kfs.sys.ObjectUtil; 036 import org.kuali.kfs.sys.businessobject.AccountingLine; 037 import org.kuali.kfs.sys.context.SpringContext; 038 import org.kuali.rice.kns.datadictionary.BusinessObjectEntry; 039 import org.kuali.rice.kns.service.BusinessObjectService; 040 import org.kuali.rice.kns.service.DataDictionaryService; 041 import org.kuali.rice.kim.service.PersonService; 042 import org.kuali.rice.kns.util.GlobalVariables; 043 import org.kuali.kfs.sys.document.validation.GenericValidation; 044 import org.kuali.kfs.sys.document.validation.event.AttributedDocumentEvent; 045 046 /** 047 * Validates that a labor journal voucher document's accounting lines have valid encumbrance code 048 */ 049 public class LaborJournalVoucherExternalEncumbranceValidation extends GenericValidation { 050 private AccountingLine accountingLineForValidation; 051 052 /** 053 * Validates that the accounting line in the labor journal voucher document for valid encumbrance code 054 * @see org.kuali.kfs.validation.Validation#validate(java.lang.Object[]) 055 */ 056 public boolean validate(AttributedDocumentEvent event) { 057 boolean result = true; 058 059 AccountingLine accountingLineForValidation = getAccountingLineForValidation() ; 060 if (!externalEncumbranceSpecificBusinessRulesValid(accountingLineForValidation)) { 061 result = false ; 062 } 063 return result ; 064 } 065 066 /** 067 * Checks whether employee id exists 068 * 069 * @param accountingLineForValidation laborJournalVoucherDetail line will be checked for valid encumbrance code 070 * @return True if accountingLineForValidation has the valid encumbrance code, false otherwise. 071 */ 072 protected boolean externalEncumbranceSpecificBusinessRulesValid(AccountingLine accountingLineForValidation) { 073 boolean externalEncumbranceValid = true ; 074 075 accountingLineForValidation.refreshReferenceObject(KFSPropertyConstants.BALANCE_TYP); 076 BalanceType balanceTyp = accountingLineForValidation.getBalanceTyp(); 077 AccountingDocumentRuleHelperService journalVoucherRuleUtil = SpringContext.getBean(AccountingDocumentRuleHelperService.class) ; 078 if (!journalVoucherRuleUtil.isValidBalanceType(balanceTyp, GENERIC_CODE_PROPERTY_NAME)) { 079 externalEncumbranceValid = false ; 080 } 081 else if (balanceTyp.isFinBalanceTypeEncumIndicator() && KFSConstants.ENCUMB_UPDT_DOCUMENT_CD.equals(accountingLineForValidation.getEncumbranceUpdateCode())) { 082 externalEncumbranceValid = this.isRequiredReferenceFieldsValid(accountingLineForValidation); 083 } 084 085 return externalEncumbranceValid ; 086 } 087 088 /** 089 * This method checks that values exist in the three reference fields that are required if the balance type is set to EXTERNAL 090 * ENCUMBRANCE. 091 * 092 * @param accountingLine The accounting line being validated. 093 * @return True if all of the required external encumbrance reference fields are valid, false otherwise. 094 */ 095 protected boolean isRequiredReferenceFieldsValid(AccountingLine accountingLine) { 096 boolean valid = true; 097 098 if (StringUtils.isEmpty(accountingLine.getReferenceOriginCode())) { 099 valid = false; 100 } 101 if (StringUtils.isEmpty(accountingLine.getReferenceNumber())) { 102 valid = false; 103 } 104 if (StringUtils.isEmpty(accountingLine.getReferenceTypeCode())) { 105 valid = false; 106 } 107 return valid; 108 } 109 110 /** 111 * Gets the accountingLineForValidation attribute. 112 * @return Returns the accountingLineForValidation. 113 */ 114 public AccountingLine getAccountingLineForValidation() { 115 return accountingLineForValidation; 116 } 117 118 /** 119 * Sets the accountingLineForValidation attribute value. 120 * @param accountingLineForValidation The accountingLineForValidation to set. 121 */ 122 public void setAccountingLineForValidation(AccountingLine accountingLineForValidation) { 123 this.accountingLineForValidation = accountingLineForValidation; 124 } 125 }