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.EndowKeyConstants;
021 import org.kuali.kfs.module.endow.EndowPropertyConstants;
022 import org.kuali.kfs.module.endow.businessobject.EndowmentTransactionLine;
023 import org.kuali.kfs.module.endow.businessobject.EndowmentTransactionSecurity;
024 import org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument;
025 import org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocumentBase;
026 import org.kuali.kfs.module.endow.document.EndowmentTransactionalDocument;
027 import org.kuali.kfs.module.endow.document.service.EndowmentTransactionLinesDocumentService;
028 import org.kuali.kfs.sys.context.SpringContext;
029 import org.kuali.rice.kns.document.Document;
030 import org.kuali.rice.kns.util.GlobalVariables;
031
032 public class CashDocumentBaseRules extends EndowmentTransactionLinesDocumentBaseRules {
033
034 protected boolean isSecurityCodeEmpty(EndowmentTransactionalDocument document, boolean isSource) {
035 EndowmentTransactionSecurity tranSecurity = getEndowmentTransactionSecurity(document, isSource);
036
037 if (StringUtils.isEmpty(tranSecurity.getSecurityID()))
038 return true;
039 else
040 return false;
041
042 }
043
044 /**
045 * @see org.kuali.kfs.module.endow.document.validation.impl.EndowmentTransactionLinesDocumentBaseRules#processAddTransactionLineRules(org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument,
046 * org.kuali.kfs.module.endow.businessobject.EndowmentTransactionLine)
047 */
048 @Override
049 public boolean processAddTransactionLineRules(EndowmentTransactionLinesDocument document, EndowmentTransactionLine line) {
050
051 boolean isValid = super.processAddTransactionLineRules(document, line);
052 isValid &= !GlobalVariables.getMessageMap().hasErrors();
053
054 if (isValid) {
055 isValid &= validateCashTransactionLine(document, line, -1);
056 }
057
058 return isValid;
059
060 }
061
062 /**
063 * This method should be overridden by children rule classes as a hook to implement document specific business rule checks for
064 * the general validating a transaction line.
065 *
066 * @param line
067 * @param index
068 * @return boolean True if the rules checks passed, false otherwise.
069 */
070 protected boolean validateCashTransactionLine(EndowmentTransactionLinesDocument document, EndowmentTransactionLine line, int index) {
071 boolean isValid = true;
072
073 if (isValid) {
074 // Obtain Prefix for Error fields in UI.
075 String ERROR_PREFIX = getErrorPrefix(line, index);
076
077 // Is Etran code empty
078 if (isEndowmentTransactionCodeEmpty(line, ERROR_PREFIX))
079 return false;
080
081 // Validate ETran code
082 if (!validateEndowmentTransactionCode(line, ERROR_PREFIX))
083 return false;
084
085 // Validate ETran code as E or I
086 isValid &= validateEndowmentTransactionTypeCode(document, line, ERROR_PREFIX);
087
088 // Validate if a KEMID can have a principal transaction when IP indicator is P
089 if (!canKEMIDHaveAPrincipalTransaction(line, ERROR_PREFIX))
090 return false;
091
092 // Validate if the chart is matched between the KEMID and EtranCode
093 isValid &= validateChartMatch(line, ERROR_PREFIX);
094
095 if (document.isErrorCorrectedDocument()) {
096 // Validate Amount is Less than Zero.
097 isValid &= validateTransactionAmountLessThanZero(line, ERROR_PREFIX);
098 }
099 else {
100 // Validate Amount is Greater than Zero.
101 isValid &= validateTransactionAmountGreaterThanZero(line, ERROR_PREFIX);
102 }
103
104
105 // Set Corpus Indicator
106 line.setCorpusIndicator(SpringContext.getBean(EndowmentTransactionLinesDocumentService.class).getCorpusIndicatorValueforAnEndowmentTransactionLine(line.getKemid(), line.getEtranCode(), line.getTransactionIPIndicatorCode()));
107 }
108
109 return GlobalVariables.getMessageMap().getErrorCount() == 0;
110 }
111
112 /**
113 * This method...
114 * @param endowmentTransactionLinesDocument
115 * @param line
116 * @param prefix
117 * @return
118 */
119 protected boolean validateEtranTypeBasedOnDocSource(EndowmentTransactionLinesDocument endowmentTransactionLinesDocument, EndowmentTransactionLine line, String prefix) {
120 // when created from batch allow ASSET etran type too
121 if (EndowConstants.TransactionSourceTypeCode.AUTOMATED.equalsIgnoreCase(endowmentTransactionLinesDocument.getTransactionSourceTypeCode())) {
122 if (line.getEtranCodeObj().getEndowmentTransactionTypeCode().equalsIgnoreCase(EndowConstants.EndowmentTransactionTypeCodes.INCOME_TYPE_CODE) || line.getEtranCodeObj().getEndowmentTransactionTypeCode().equalsIgnoreCase(EndowConstants.EndowmentTransactionTypeCodes.EXPENSE_TYPE_CODE) || line.getEtranCodeObj().getEndowmentTransactionTypeCode().equalsIgnoreCase(EndowConstants.EndowmentTransactionTypeCodes.ASSET_TYPE_CODE))
123 return true;
124 else {
125 putFieldError(prefix + EndowPropertyConstants.TRANSACTION_LINE_ENDOWMENT_TRANSACTION_CODE, EndowKeyConstants.EndowmentTransactionDocumentConstants.ERROR_ENDOWMENT_TRANSACTION_TYPE_CODE_VALIDITY_INCOME_EXPENSE_ASSET);
126 return false;
127 }
128 }
129 else
130 return super.validateEndowmentTransactionTypeCode(endowmentTransactionLinesDocument, line, prefix);
131 }
132 }