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.kuali.kfs.module.endow.businessobject.EndowmentTransactionLine;
019    import org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument;
020    import org.kuali.kfs.module.endow.document.GLToEndowmentTransferOfFundsDocument;
021    import org.kuali.kfs.module.endow.document.service.EndowmentTransactionLinesDocumentService;
022    import org.kuali.kfs.sys.context.SpringContext;
023    import org.kuali.rice.kns.document.Document;
024    
025    public class GLToEndowmentTransferOfFundsDocumentRules extends EndowmentAccountingLinesDocumentBaseRules {
026    
027        /**
028         * @see org.kuali.kfs.module.endow.document.validation.impl.EndowmentTransactionLinesDocumentBaseRules#validateTransactionLine(org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument,
029         *      org.kuali.kfs.module.endow.businessobject.EndowmentTransactionLine, int)
030         */
031        @Override
032        protected boolean validateTransactionLine(EndowmentTransactionLinesDocument endowmentTransactionLinesDocument, EndowmentTransactionLine line, int index) {
033            boolean isValid = super.validateTransactionLine(endowmentTransactionLinesDocument, line, index);
034            // Obtain Prefix for Error fields in UI.
035            String ERROR_PREFIX = getErrorPrefix(line, index);
036    
037            if (isValid) {
038    
039                // Is Etran code empty
040                if (isEndowmentTransactionCodeEmpty(line, ERROR_PREFIX))
041                    return false;
042    
043                // Validate ETran code
044                if (!validateEndowmentTransactionCode(line, ERROR_PREFIX))
045                    return false;
046    
047                // Validate ETran code as E or I
048                isValid &= validateEndowmentTransactionTypeCode(endowmentTransactionLinesDocument, line, ERROR_PREFIX);
049    
050                // Validate if a KEMID can have a principal transaction when IP indicator is P
051                if (!canKEMIDHaveAPrincipalTransaction(line, ERROR_PREFIX))
052                    return false;
053    
054                // Validate if the chart is matched between the KEMID and EtranCode
055                isValid &= validateChartMatch(line, ERROR_PREFIX);
056    
057                // Validate Amount is Greater than Zero.
058                isValid &= validateTransactionAmountGreaterThanZero(line, ERROR_PREFIX);
059    
060                // Set Corpus Indicator
061                line.setCorpusIndicator(SpringContext.getBean(EndowmentTransactionLinesDocumentService.class).getCorpusIndicatorValueforAnEndowmentTransactionLine(line.getKemid(), line.getEtranCode(), line.getTransactionIPIndicatorCode()));
062    
063            }
064    
065            return isValid;
066        }
067    
068        /**
069         * @see org.kuali.rice.kns.rules.DocumentRuleBase#processCustomRouteDocumentBusinessRules(org.kuali.rice.kns.document.Document)
070         */
071        @Override
072        protected boolean processCustomRouteDocumentBusinessRules(Document document) {
073            boolean isValid = super.processCustomRouteDocumentBusinessRules(document);
074            GLToEndowmentTransferOfFundsDocument transferOfFundsDocument = (GLToEndowmentTransferOfFundsDocument) document;
075    
076            // validate the document has at least one target transaction line
077            if (!transactionLineSizeGreaterThanZero(transferOfFundsDocument, false))
078                return false;
079    
080            // validate that the document has at least one source accounting line
081            if (!validateAccountingLinesSizeGreaterThanZero(transferOfFundsDocument, true)) {
082                return false;
083            }
084    
085            return isValid;
086        }
087    
088    }