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.service.impl;
017    
018    import java.util.HashMap;
019    import java.util.Map;
020    
021    import org.apache.commons.lang.StringUtils;
022    import org.kuali.kfs.module.endow.EndowConstants;
023    import org.kuali.kfs.module.endow.EndowPropertyConstants;
024    import org.kuali.kfs.module.endow.businessobject.KEMID;
025    import org.kuali.kfs.module.endow.businessobject.EndowmentTransactionCode;
026    import org.kuali.kfs.module.endow.document.service.EndowmentTransactionLinesDocumentService;
027    import org.kuali.kfs.module.endow.document.service.KEMIDService;
028    import org.kuali.kfs.module.endow.document.service.EndowmentTransactionCodeService;
029    import org.kuali.rice.kns.service.BusinessObjectService;
030    
031    public class EndowmentTransactionLinesDocumentServiceImpl extends EndowmentTransactionDocumentServiceImpl implements EndowmentTransactionLinesDocumentService {
032    
033        private KEMIDService kemidService;
034        private EndowmentTransactionCodeService endowmentTransactionCodeService;
035        
036        /**
037         * @see org.kuali.kfs.module.endow.document.service.EndowmentTransactionLinesDocumentService#getCorpusIndicatorValueforAnEndowmentTransactionLine(java.lang.String, java.lang.String, java.lang.String)
038         * 
039         * Get the value of CorpusIndicator based on the following rule:
040         * If the KEMID is a true endowment (the END_KEMID_T: TYP_CD has an END_TYP_T: PRIN_RESTR_CD where the END_TYP_RESTR_CD_T: PERM is equal to Yes,)
041         * AND if the ETRAN code record has the END_ETRAN_CD_T: CORPUS_IND set to Yes, 
042         * then transaction lines where the END_TRAN_LN_T: TRAN_IP_IND_CD is equal to P will affect the corpus value for the KEMID.  
043         * Upon adding the transaction line, the END_TRAN_LN_T: CORPUS_IND for the transaction line will be set to Yes.
044         */
045        public boolean getCorpusIndicatorValueforAnEndowmentTransactionLine(String kemid, String etranCode, String ipIndicator) {
046            boolean corpusIndicator = false;
047            EndowmentTransactionCode theEtranCodeObj = null;
048            if (ipIndicator.equalsIgnoreCase(EndowConstants.IncomePrincipalIndicator.PRINCIPAL)){
049                if (kemidService.isTrueEndowment(kemid)){
050                    theEtranCodeObj = endowmentTransactionCodeService.getByPrimaryKey(etranCode);
051                    if (theEtranCodeObj.isCorpusIndicator()){
052                        corpusIndicator = true;
053                    }
054                }
055            }        
056            return corpusIndicator;
057        }
058        
059        /**
060         * @see org.kuali.kfs.module.endow.document.service.EndowmentTransactionLinesDocumentService#canKEMIDHaveAPrincipalActivity(java.lang.String, java.lang.String)
061         * 
062         * IF the END _TRAN_LN_T: TRAN_IP_IND_CD for the transaction line is equal to P, then the KEMID must have a type code (END_KEMID_T: TYP_CD) 
063         * that does not have the END_TYPE_T: TYP_PRIN_RESTR_CD equal to NA which implies that the KEMID cannot have any activity in Principal. 
064         * This would guarantee that the KEMID has an active general ledger account with the Income/Principal indicator equal to "P".
065         */
066        public boolean canKEMIDHaveAPrincipalActivity (String kemid, String ipIndicator){
067            boolean canHaveAPrincipalActivity = true;
068            KEMID theKemidObj = null;
069            if (ipIndicator.equalsIgnoreCase(EndowConstants.IncomePrincipalIndicator.PRINCIPAL)){
070                theKemidObj = kemidService.getByPrimaryKey(kemid);
071                if (theKemidObj.getPrincipalRestrictionCode().equalsIgnoreCase(EndowConstants.TypeRestrictionPresetValueCodes.NOT_APPLICABLE_TYPE_RESTRICTION_CODE)){
072                    canHaveAPrincipalActivity = false;
073                }
074            }
075            return canHaveAPrincipalActivity;
076        }
077    
078        
079        /**
080         * Gets the kemidService.
081         * 
082         * @return kemidService
083         */
084        public KEMIDService getKemidService(){
085            return kemidService;
086        }
087        
088        /**
089         * Sets the kemidService.
090         * 
091         * @param kemidService
092         */
093        public void setKemidService (KEMIDService kemidService){
094            this.kemidService = kemidService; 
095        }
096        
097        /**
098         * Gets the endowmentTransactionCodeService.
099         * 
100         * @return endowmentTransactionCodeService
101         */
102        public EndowmentTransactionCodeService getEndowmentTransactionCodeService(){
103            return endowmentTransactionCodeService;
104        }
105        
106        /**
107         * Sets the endowmentTransactionCodeService.
108         * 
109         * @param endowmentTransactionCodeService
110         */
111        public void setEndowmentTransactionCodeService (EndowmentTransactionCodeService endowmentTransactionCodeService){
112            this.endowmentTransactionCodeService = endowmentTransactionCodeService; 
113        }
114    
115    
116    
117    
118    }