001: /*
002: * Copyright 2006-2007 The Kuali Foundation.
003: *
004: * Licensed under the Educational Community License, Version 1.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/ecl1.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.module.chart.rules;
017:
018: import org.kuali.core.document.MaintenanceDocument;
019: import org.kuali.core.maintenance.rules.MaintenanceDocumentRuleBase;
020: import org.kuali.core.util.ObjectUtils;
021: import org.kuali.kfs.KFSKeyConstants;
022: import org.kuali.module.chart.bo.Account;
023: import org.kuali.module.chart.bo.SubObjCd;
024:
025: public class SubObjCdRule extends MaintenanceDocumentRuleBase {
026:
027: private static final String ACCOUNT_ORG_RULE_KEY = "SubObjectCode.AccountOrgsAllowingClosedAccounts";
028:
029: private SubObjCd oldSubObjectCode;
030: private SubObjCd newSubObjectCode;
031:
032: public SubObjCdRule() {
033: super ();
034: }
035:
036: /**
037: * This performs rules checks on document approve
038: * <ul>
039: * <li>{@link SubObjCdRule#checkExistenceAndActive()}</li>
040: * </ul>
041: * This rule fails on business rule failures
042: * @see org.kuali.core.maintenance.rules.MaintenanceDocumentRuleBase#processCustomApproveDocumentBusinessRules(org.kuali.core.document.MaintenanceDocument)
043: */
044: protected boolean processCustomApproveDocumentBusinessRules(
045: MaintenanceDocument document) {
046:
047: LOG
048: .info("Entering processCustomApproveDocumentBusinessRules()");
049:
050: // check that all sub-objects whose keys are specified have matching objects in the db
051: checkExistenceAndActive();
052:
053: return true;
054: }
055:
056: /**
057: * This performs rules checks on document route
058: * <ul>
059: * <li>{@link SubObjCdRule#checkExistenceAndActive()}</li>
060: * </ul>
061: * This rule fails on business rule failures
062: * @see org.kuali.core.maintenance.rules.MaintenanceDocumentRuleBase#processCustomRouteDocumentBusinessRules(org.kuali.core.document.MaintenanceDocument)
063: */
064: protected boolean processCustomRouteDocumentBusinessRules(
065: MaintenanceDocument document) {
066:
067: boolean success = true;
068:
069: LOG.info("Entering processCustomRouteDocumentBusinessRules()");
070:
071: // check that all sub-objects whose keys are specified have matching objects in the db
072: success &= checkExistenceAndActive();
073:
074: return success;
075: }
076:
077: /**
078: * This performs rules checks on document save
079: * <ul>
080: * <li>{@link SubObjCdRule#checkExistenceAndActive()}</li>
081: * </ul>
082: * This rule does not fail on business rule failures
083: * @see org.kuali.core.maintenance.rules.MaintenanceDocumentRuleBase#processCustomSaveDocumentBusinessRules(org.kuali.core.document.MaintenanceDocument)
084: */
085: protected boolean processCustomSaveDocumentBusinessRules(
086: MaintenanceDocument document) {
087:
088: boolean success = true;
089:
090: LOG.info("Entering processCustomSaveDocumentBusinessRules()");
091:
092: // check that all sub-objects whose keys are specified have matching objects in the db
093: success &= checkExistenceAndActive();
094:
095: return success;
096: }
097:
098: /**
099: * This method sets the convenience objects like newSubObjectCode and oldSubObjectCode, so you have short and easy handles to the new and
100: * old objects contained in the maintenance document. It also calls the BusinessObjectBase.refresh(), which will attempt to load
101: * all sub-objects from the DB by their primary keys, if available.
102: *
103: * @param document - the maintenanceDocument being evaluated
104: */
105: public void setupConvenienceObjects() {
106:
107: // setup oldAccount convenience objects, make sure all possible sub-objects are populated
108: oldSubObjectCode = (SubObjCd) super .getOldBo();
109:
110: // setup newAccount convenience objects, make sure all possible sub-objects are populated
111: newSubObjectCode = (SubObjCd) super .getNewBo();
112: }
113:
114: /**
115: *
116: * This checks that the account on the sub object code is not closed
117: * @return false if the account is closed
118: */
119: protected boolean checkExistenceAndActive() {
120:
121: LOG.info("Entering checkExistenceAndActive()");
122: boolean success = true;
123:
124: // disallow closed accounts unless in certain orgs
125: if (ObjectUtils.isNotNull(newSubObjectCode.getAccount())) {
126: Account account = newSubObjectCode.getAccount();
127:
128: // if the account is closed
129: if (account.isAccountClosedIndicator()) {
130: putFieldError(
131: "accountNumber",
132: KFSKeyConstants.ERROR_DOCUMENT_SUBOBJECTMAINT_ACCOUNT_MAY_NOT_BE_CLOSED);
133: success &= false;
134: }
135: }
136: return success;
137: }
138:
139: }
|