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.EndowmentSourceTransactionLine;
019    import org.kuali.kfs.module.endow.businessobject.EndowmentTransactionLine;
020    import org.kuali.kfs.module.endow.document.EndowmentTaxLotLinesDocumentBase;
021    import org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument;
022    import org.kuali.kfs.module.endow.document.LiabilityIncreaseDocument;
023    import org.kuali.kfs.module.endow.document.service.LiabilityDocumentService;
024    import org.kuali.kfs.sys.context.SpringContext;
025    import org.kuali.rice.kns.document.Document;
026    import org.kuali.rice.kns.util.GlobalVariables;
027    
028    public class LiabilityIncreaseDocumentRules extends EndowmentTransactionLinesDocumentBaseRules {
029    
030    
031        /**
032         * @see org.kuali.kfs.module.endow.document.validation.AddTransactionLineRule#processAddTransactionLineRules(org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument,
033         *      org.kuali.kfs.module.endow.businessobject.EndowmentTransactionLine)
034         */
035        @Override
036        public boolean processAddTransactionLineRules(EndowmentTransactionLinesDocument transLineDocument, EndowmentTransactionLine line) {
037            boolean isValid = true;
038    
039            String ERROR_PREFIX = getErrorPrefix(line, -1);
040    
041            isValid &= validateSecurity(isValid, (LiabilityIncreaseDocument) transLineDocument, false);
042    
043            isValid &= validateRegistration(isValid, (LiabilityIncreaseDocument) transLineDocument, false);
044    
045            if (isValid) {
046                isValid &= super.processAddTransactionLineRules(transLineDocument, line);
047            }
048    
049            if (!isValid)
050                return isValid;
051    
052            LiabilityDocumentService taxLotsService = SpringContext.getBean(LiabilityDocumentService.class);
053            LiabilityIncreaseDocument liabilityIncreaseDocument = (LiabilityIncreaseDocument) transLineDocument;
054            boolean isSource = line instanceof EndowmentSourceTransactionLine ? true : false;
055            taxLotsService.updateLiabilityIncreaseTransactionLineTaxLots(isSource, (EndowmentTaxLotLinesDocumentBase) liabilityIncreaseDocument, line);
056    
057            return GlobalVariables.getMessageMap().getErrorCount() == 0;
058        }
059    
060        /**
061         * This method validates the Tx line but from Liability Increase perspective.
062         * 
063         * @param endowmentTransactionLinesDocumentBase
064         * @param line
065         * @param index
066         * @return
067         */
068        protected boolean validateTransactionLine(EndowmentTransactionLinesDocument endowmentTransactionLinesDocument, EndowmentTransactionLine line, int index) {
069            boolean isValid = true;
070    
071            isValid &= super.validateTransactionLine(endowmentTransactionLinesDocument, line, index);
072    
073            if (isValid) {
074                // Obtain Prefix for Error fields in UI.
075                String ERROR_PREFIX = getErrorPrefix(line, index);
076    
077                // Ensure for cash Tx do not have a Etran.
078                isValid &= checkCashTransactionEndowmentCode(endowmentTransactionLinesDocument, line, ERROR_PREFIX);
079    
080                if (endowmentTransactionLinesDocument.isErrorCorrectedDocument()) {
081                    // Validate Amount is Less than Zero.
082                    isValid &= validateTransactionAmountLessThanZero(line, ERROR_PREFIX);
083    
084                    // Validate Units is Less than Zero.
085                    isValid &= validateTransactionUnitsLessThanZero(line, ERROR_PREFIX);
086                }
087                else {
088                    // Validate Amount is Greater than Zero.
089                    isValid &= validateTransactionAmountGreaterThanZero(line, ERROR_PREFIX);
090    
091                    // Validate Units is Greater than Zero.
092                    isValid &= validateTransactionUnitsGreaterThanZero(line, ERROR_PREFIX);
093                }
094    
095                // Validates Units & Amount are equal.
096                isValid &= validateTransactionUnitsAmountEqual(line, ERROR_PREFIX);
097            }
098    
099            return GlobalVariables.getMessageMap().getErrorCount() == 0;
100        }
101    
102        /**
103         * @see org.kuali.rice.kns.rules.DocumentRuleBase#processCustomRouteDocumentBusinessRules(org.kuali.rice.kns.document.Document)
104         */
105        @Override
106        protected boolean processCustomRouteDocumentBusinessRules(Document document) {
107            boolean isValid = super.processCustomRouteDocumentBusinessRules(document);
108    
109            LiabilityIncreaseDocument liabilityIncreaseDocument = (LiabilityIncreaseDocument) document;
110    
111            if (isValid) {
112                // Validate Security
113                isValid &= validateSecurity(isValid, liabilityIncreaseDocument, false);
114    
115                // Validate Registration code.
116                isValid &= validateRegistration(isValid, liabilityIncreaseDocument, false);
117    
118                if (!isValid)
119                    return isValid;
120    
121                // Empty out the Source Tx Line in weird case they got entered.
122                liabilityIncreaseDocument.getSourceTransactionLines().clear();
123    
124                // Validate atleast one Tx was entered.
125                if (!transactionLineSizeGreaterThanZero(liabilityIncreaseDocument, false))
126                    return false;
127    
128                isValid &= super.processCustomSaveDocumentBusinessRules(document);
129            }
130    
131            return GlobalVariables.getMessageMap().getErrorCount() == 0;
132        }
133    
134    }