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.purap.document.validation.impl;
017    
018    import org.kuali.kfs.coa.businessobject.Chart;
019    import org.kuali.kfs.coa.businessobject.Organization;
020    import org.kuali.kfs.coa.service.ChartService;
021    import org.kuali.kfs.coa.service.OrganizationService;
022    import org.kuali.kfs.module.purap.PurapKeyConstants;
023    import org.kuali.kfs.module.purap.businessobject.OrganizationParameter;
024    import org.kuali.kfs.sys.KFSPropertyConstants;
025    import org.kuali.kfs.sys.context.SpringContext;
026    import org.kuali.rice.kns.document.MaintenanceDocument;
027    import org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase;
028    import org.kuali.rice.kns.service.BusinessObjectService;
029    import org.kuali.rice.kns.util.GlobalVariables;
030    import org.kuali.rice.kns.util.MessageMap;
031    import org.kuali.rice.kns.util.ObjectUtils;
032    
033    /**
034     * Business rule(s) applicable to Organization Parameter maintenance document.
035     */
036    public class OrganizationParameterRule extends MaintenanceDocumentRuleBase {
037    
038        protected OrganizationParameter newOrganizationParameter;
039        protected BusinessObjectService boService;
040    
041        /**
042         * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#setupConvenienceObjects()
043         */
044        @Override
045        public void setupConvenienceObjects() {
046            // setup newDelegateChange convenience objects, make sure all possible sub-objects are populated
047            newOrganizationParameter = (OrganizationParameter) super.getNewBo();
048            boService = (BusinessObjectService) super.getBoService();
049            super.setupConvenienceObjects();
050        }
051    
052        /**
053         * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#processCustomApproveDocumentBusinessRules(org.kuali.rice.kns.document.MaintenanceDocument)
054         */
055        protected boolean processCustomApproveDocumentBusinessRules(MaintenanceDocument document) {
056            LOG.info("processCustomApproveDocumentBusinessRules called");
057            this.setupConvenienceObjects();
058            boolean success = true;
059            success &= this.checkChartOfAccountsCode();
060            success &= this.checkOrganizationCode();
061            return success && super.processCustomApproveDocumentBusinessRules(document);
062        }
063    
064        /**
065         * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#processCustomRouteDocumentBusinessRules(org.kuali.rice.kns.document.MaintenanceDocument)
066         */
067        protected boolean processCustomRouteDocumentBusinessRules(MaintenanceDocument document) {
068            LOG.info("processCustomRouteDocumentBusinessRules called");
069            this.setupConvenienceObjects();
070            boolean success = true;
071            success &= this.checkChartOfAccountsCode();
072            success &= this.checkOrganizationCode();
073            return success && super.processCustomRouteDocumentBusinessRules(document);
074        }
075    
076        /**
077         * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#processCustomSaveDocumentBusinessRules(org.kuali.rice.kns.document.MaintenanceDocument)
078         */
079        protected boolean processCustomSaveDocumentBusinessRules(MaintenanceDocument document) {
080            LOG.info("processCustomSaveDocumentBusinessRules called");
081            this.setupConvenienceObjects();
082            boolean success = true;
083            success &= this.checkChartOfAccountsCode();
084            success &= this.checkOrganizationCode();
085            return success && super.processCustomSaveDocumentBusinessRules(document);
086        }
087    
088        /**
089         * Validate chart of accounts code
090         * 
091         * @return Boolean indicating if validation succeeded
092         */
093        protected boolean checkChartOfAccountsCode() {
094            LOG.info("checkChartOfAccountsCode called");
095            MessageMap errorMap = GlobalVariables.getMessageMap();
096            boolean success = true;
097            Chart chart = SpringContext.getBean(ChartService.class).getByPrimaryId(newOrganizationParameter.getChartOfAccountsCode());
098            if (ObjectUtils.isNull(chart)) {
099                success &= false;
100                errorMap.putError(KFSPropertyConstants.DOCUMENT + "." + KFSPropertyConstants.NEW_MAINTAINABLE_OBJECT + "." + KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, PurapKeyConstants.ERROR_INVALID_CHART_OF_ACCOUNTS_CODE);
101            }
102            return success;
103        }
104    
105        /**
106         * Validate organization code
107         * 
108         * @return Boolean indicating if validation succeeded
109         */
110        protected boolean checkOrganizationCode() {
111            LOG.info("checkOrganizationCode called");
112            MessageMap errorMap = GlobalVariables.getMessageMap();
113            boolean success = true;
114            Organization org = SpringContext.getBean(OrganizationService.class).getByPrimaryId(newOrganizationParameter.getChartOfAccountsCode(), newOrganizationParameter.getOrganizationCode());
115            if (ObjectUtils.isNull(org)) {
116                success &= false;
117                errorMap.putError(KFSPropertyConstants.DOCUMENT + "." + KFSPropertyConstants.NEW_MAINTAINABLE_OBJECT + "." + KFSPropertyConstants.ORGANIZATION_CODE, PurapKeyConstants.ERROR_INVALID_ORGANIZATION_CODE);
118            }
119            return success;
120        }
121    
122    }