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.endow.document.validation.impl; 017 018 import org.apache.commons.lang.StringUtils; 019 import org.kuali.kfs.module.endow.EndowConstants; 020 import org.kuali.kfs.module.endow.businessobject.EndowmentTransactionLine; 021 import org.kuali.kfs.module.endow.document.EndowmentToGLTransferOfFundsDocument; 022 import org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument; 023 import org.kuali.kfs.module.endow.document.service.EndowmentTransactionLinesDocumentService; 024 import org.kuali.kfs.sys.context.SpringContext; 025 import org.kuali.rice.kns.document.Document; 026 027 public class EndowmentToGLTransferOfFundsDocumentRules extends EndowmentAccountingLinesDocumentBaseRules { 028 029 /** 030 * @see org.kuali.kfs.module.endow.document.validation.impl.EndowmentTransactionLinesDocumentBaseRules#validateTransactionLine(org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument, 031 * org.kuali.kfs.module.endow.businessobject.EndowmentTransactionLine, int) 032 */ 033 @Override 034 protected boolean validateTransactionLine(EndowmentTransactionLinesDocument endowmentTransactionLinesDocument, EndowmentTransactionLine line, int index) { 035 boolean isValid = super.validateTransactionLine(endowmentTransactionLinesDocument, line, index); 036 // Obtain Prefix for Error fields in UI. 037 String ERROR_PREFIX = getErrorPrefix(line, index); 038 039 if (isValid) { 040 041 // Is Etran code empty 042 if (isEndowmentTransactionCodeEmpty(line, ERROR_PREFIX)) 043 return false; 044 045 // Validate ETran code 046 if (!validateEndowmentTransactionCode(line, ERROR_PREFIX)) 047 return false; 048 049 // Validate ETran code as E or I 050 isValid &= validateEndowmentTransactionTypeCode(endowmentTransactionLinesDocument, line, ERROR_PREFIX); 051 052 // Validate if a KEMID can have a principal transaction when IP indicator is P 053 if (!canKEMIDHaveAPrincipalTransaction(line, ERROR_PREFIX)) 054 return false; 055 056 // Validate if the chart is matched between the KEMID and EtranCode 057 isValid &= validateChartMatch(line, ERROR_PREFIX); 058 059 // Validate Amount is Greater than Zero. 060 isValid &= validateTransactionAmountGreaterThanZero(line, ERROR_PREFIX); 061 062 // Set Corpus Indicator 063 line.setCorpusIndicator(SpringContext.getBean(EndowmentTransactionLinesDocumentService.class).getCorpusIndicatorValueforAnEndowmentTransactionLine(line.getKemid(), line.getEtranCode(), line.getTransactionIPIndicatorCode())); 064 065 if (isValid) { 066 if (EndowConstants.TRANSACTION_LINE_TYPE_SOURCE.equalsIgnoreCase(line.getTransactionLineTypeCode())) { 067 checkWhetherReducePermanentlyRestrictedFund(line, ERROR_PREFIX); 068 checkWhetherHaveSufficientFundsForCashBasedTransaction(line, ERROR_PREFIX); 069 } 070 } 071 } 072 073 return isValid; 074 } 075 076 /** 077 * @see org.kuali.rice.kns.rules.DocumentRuleBase#processCustomRouteDocumentBusinessRules(org.kuali.rice.kns.document.Document) 078 */ 079 @Override 080 protected boolean processCustomRouteDocumentBusinessRules(Document document) { 081 boolean isValid = super.processCustomRouteDocumentBusinessRules(document); 082 EndowmentToGLTransferOfFundsDocument transferOfFundsDocument = (EndowmentToGLTransferOfFundsDocument) document; 083 084 // if security is not empty validate that security is valid 085 if (StringUtils.isNotBlank(transferOfFundsDocument.getSourceTransactionSecurity().getSecurityID())) { 086 // Validates Security Code. 087 if (!validateSecurityCode(transferOfFundsDocument, true)) 088 return false; 089 090 // Checks if Security is Active 091 isValid &= isSecurityActive(transferOfFundsDocument, true); 092 } 093 094 // if registration code is not empty validate that registration code are valid 095 if (StringUtils.isNotBlank(transferOfFundsDocument.getSourceTransactionSecurity().getRegistrationCode())) { 096 // Validate Registration code. 097 if (!validateRegistrationCode(transferOfFundsDocument, true)) 098 return false; 099 100 // Checks if registration code is active 101 isValid &= isRegistrationCodeActive(transferOfFundsDocument, true); 102 } 103 104 // validate the document has at least one source transaction line 105 if (!transactionLineSizeGreaterThanZero(transferOfFundsDocument, true)) 106 return false; 107 108 // validate that the document has at least one target accounting line 109 if (!validateAccountingLinesSizeGreaterThanZero(transferOfFundsDocument, false)) { 110 return false; 111 } 112 113 return isValid; 114 } 115 116 }