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.pdp.document.validation.impl;
017    
018    import org.kuali.kfs.pdp.PdpConstants;
019    import org.kuali.kfs.pdp.businessobject.ACHBank;
020    import org.kuali.kfs.sys.KFSKeyConstants;
021    import org.kuali.rice.kns.document.MaintenanceDocument;
022    import org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase;
023    import org.kuali.rice.kns.util.ObjectUtils;
024    
025    public class AchBankRule extends MaintenanceDocumentRuleBase {
026    
027        protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ACHBank.class);
028    
029        protected ACHBank oldAchBank;
030        protected ACHBank newAchBank;
031    
032        /**
033         * This method sets the convenience objects like newAccount and oldAccount, so you have short and easy handles to the new and
034         * old objects contained in the maintenance document. It also calls the BusinessObjectBase.refresh(), which will attempt to load
035         * all sub-objects from the DB by their primary keys, if available.
036         * 
037         * @param document - the maintenanceDocument being evaluated
038         */
039        public void setupConvenienceObjects() {
040    
041            LOG.info("setupConvenienceObjects called");
042    
043            // setup oldAchBank convenience objects, make sure all possible sub-objects are populated
044            oldAchBank = (ACHBank) super.getOldBo();
045    
046            // setup newAchBank convenience objects, make sure all possible sub-objects are populated
047            newAchBank = (ACHBank) super.getNewBo();
048        }
049    
050        protected boolean processCustomSaveDocumentBusinessRules(MaintenanceDocument document) {
051    
052            LOG.info("processCustomSaveDocumentBusinessRules called");
053            // call the route rules to report all of the messages, but ignore the result
054            processCustomRouteDocumentBusinessRules(document);
055            
056            // Save always succeeds, even if there are business rule failures
057            return true;
058        }
059    
060        protected boolean processCustomRouteDocumentBusinessRules(MaintenanceDocument document) {
061    
062            boolean validEntry = true;
063    
064            LOG.info("processCustomRouteDocumentBusinessRules called");
065            setupConvenienceObjects();
066    
067            String officeCode = newAchBank.getBankOfficeCode();
068            if ((ObjectUtils.isNotNull(officeCode)) && !officeCode.equals(PdpConstants.AchBankOfficeCodes.AchBankOfficeCode_O) && !officeCode.equals(PdpConstants.AchBankOfficeCodes.AchBankOfficeCode_B)) {
069                putFieldError("bankOfficeCode", KFSKeyConstants.ERROR_DOCUMENT_ACHBANKMAINT_INVALID_OFFICE_CODE);
070                validEntry = false;
071            }
072    
073            String typeCode = newAchBank.getBankTypeCode();
074            if ((typeCode != null) && !typeCode.equals(PdpConstants.AchBankTypeCodes.AchBankTypeCode_0) && !typeCode.equals(PdpConstants.AchBankTypeCodes.AchBankTypeCode_1) && !typeCode.equals(PdpConstants.AchBankTypeCodes.AchBankTypeCode_2)) {
075                putFieldError("bankTypeCode", KFSKeyConstants.ERROR_DOCUMENT_ACHBANKMAINT_INVALID_TYPE_CODE);
076                validEntry = false;
077            }
078    
079            String bankInstitutionStatusCode = newAchBank.getBankInstitutionStatusCode();
080            if ((ObjectUtils.isNotNull(bankInstitutionStatusCode) ) && !bankInstitutionStatusCode.equals(PdpConstants.ACH_BANK_INSTITUTION_CODE_DEFAULT)) {
081                putFieldError("bankInstitutionStatusCode", KFSKeyConstants.ERROR_DOCUMENT_ACHBANKMAINT_INVALID_INST_STATUS_CODE);
082                validEntry = false;
083            }
084    
085            String bankDataViewCode = newAchBank.getBankDataViewCode();
086            if ((ObjectUtils.isNotNull(bankDataViewCode) ) && !bankDataViewCode.equals(PdpConstants.ACH_BANK_DATA_VIEW_CODE_DEFAULT)) {
087                putFieldError("bankDataViewCode", KFSKeyConstants.ERROR_DOCUMENT_ACHBANKMAINT_INVALID_DATA_VIEW_CODE);
088                validEntry = false;
089            }
090    
091            return validEntry;
092        }
093       
094    }