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.coa.document.validation.impl;
017
018 import org.kuali.kfs.coa.businessobject.OffsetDefinition;
019 import org.kuali.kfs.sys.KFSConstants;
020 import org.kuali.kfs.sys.KFSKeyConstants;
021 import org.kuali.kfs.sys.context.SpringContext;
022 import org.kuali.rice.kns.document.MaintenanceDocument;
023 import org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase;
024 import org.kuali.rice.kns.service.ParameterEvaluator;
025 import org.kuali.rice.kns.service.ParameterService;
026 import org.kuali.rice.kns.util.ObjectUtils;
027
028 /**
029 *
030 * This class implements the business rules for {@link OffsetDefinition}
031 */
032 public class OffsetDefinitionRule extends MaintenanceDocumentRuleBase {
033 protected OffsetDefinition oldDefinition;
034 protected OffsetDefinition newDefinition;
035
036
037 /**
038 * This method sets the convenience objects like newDefinition and oldDefinition, so you have short and easy handles to the new and
039 * old objects contained in the maintenance document. It also calls the BusinessObjectBase.refresh(), which will attempt to load
040 * all sub-objects from the DB by their primary keys, if available.
041 * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#setupConvenienceObjects()
042 */
043 @Override
044 public void setupConvenienceObjects() {
045
046 // setup oldAccount convenience objects, make sure all possible sub-objects are populated
047 oldDefinition = (OffsetDefinition) super.getOldBo();
048
049 // setup newAccount convenience objects, make sure all possible sub-objects are populated
050 newDefinition = (OffsetDefinition) super.getNewBo();
051 }
052
053 /**
054 * This performs rules checks on document save
055 * <ul>
056 * <li>{@link OffsetDefinitionRule#checkDocTypeActiveFinancialObjCode(MaintenanceDocument)}</li>
057 * </ul>
058 * This rule does not fail on business rule failures
059 * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#processCustomSaveDocumentBusinessRules(org.kuali.rice.kns.document.MaintenanceDocument)
060 */
061 @Override
062 protected boolean processCustomSaveDocumentBusinessRules(MaintenanceDocument document) {
063 return checkDocTypeActiveFinancialObjCode(document);
064 }
065
066 /**
067 * This performs rules checks on document route
068 * <ul>
069 * <li>{@link OffsetDefinitionRule#checkDocTypeActiveFinancialObjCode(MaintenanceDocument)}</li>
070 * </ul>
071 * This rule fails on business rule failures
072 * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#processCustomRouteDocumentBusinessRules(org.kuali.rice.kns.document.MaintenanceDocument)
073 */
074 @Override
075 protected boolean processCustomRouteDocumentBusinessRules(MaintenanceDocument document) {
076 return checkDocTypeActiveFinancialObjCode(document);
077 }
078
079 /**
080 *
081 * This checks that the doctype used for this {@link OffsetDefinition} is valid and active
082 * @param document
083 * @return false if the {@link org.kuali.rice.kns.bo.Parameter} evaluation fails and the financial object code is either null or inactive
084 */
085 protected boolean checkDocTypeActiveFinancialObjCode(MaintenanceDocument document) {
086 boolean success = true;
087 ParameterEvaluator evaluator = SpringContext.getBean(ParameterService.class).getParameterEvaluator(OffsetDefinition.class, KFSConstants.ChartApcParms.DOCTYPE_AND_OBJ_CODE_ACTIVE, newDefinition.getFinancialDocumentTypeCode());
088 if (!evaluator.evaluationSucceeds()) {
089 if ((ObjectUtils.isNotNull(newDefinition.getFinancialObject()) && !newDefinition.getFinancialObject().isFinancialObjectActiveCode()) || ObjectUtils.isNull(newDefinition.getFinancialObject())) {
090 putFieldError("financialObjectCode", KFSKeyConstants.ERROR_DOCUMENT_OFFSETDEFMAINT_INACTIVE_OBJ_CODE_FOR_DOCTYPE, new String[] { newDefinition.getFinancialObjectCode(), evaluator.getParameterValuesForMessage() });
091 success &= false;
092 }
093
094 }
095 return success;
096 }
097 }