001: /*
002: * Copyright 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.financial.rules;
017:
018: import org.apache.commons.lang.StringUtils;
019: import org.kuali.core.bo.user.UniversalUser;
020: import org.kuali.core.document.MaintenanceDocument;
021: import org.kuali.core.maintenance.rules.MaintenanceDocumentRuleBase;
022: import org.kuali.core.util.GlobalVariables;
023: import org.kuali.core.util.ObjectUtils;
024: import org.kuali.kfs.KFSKeyConstants;
025: import org.kuali.module.financial.bo.FinancialUser;
026:
027: /**
028: * This class provides rules for the financial user maintenance document
029: */
030: public class FinancialUserRule extends MaintenanceDocumentRuleBase {
031:
032: private FinancialUser oldUser;
033: private FinancialUser newUser;
034:
035: /**
036: * Returns true if there are no problems routing financial user maintenance document
037: *
038: * @param document submitted financial user maintenance document
039: * @return true if there are no problems routing financial user maintenance document
040: *
041: * @see org.kuali.core.maintenance.rules.MaintenanceDocumentRuleBase#processCustomRouteDocumentBusinessRules(org.kuali.core.document.MaintenanceDocument)
042: */
043: protected boolean processCustomRouteDocumentBusinessRules(
044: MaintenanceDocument document) {
045: boolean success = true;
046: setupConvenienceObjects(document);
047: GlobalVariables.getErrorMap().addToErrorPath(
048: "document.newMaintainableObject");
049: GlobalVariables.getErrorMap().addToErrorPath(
050: "moduleUsers(financial)");
051: success &= checkGeneralRules(document);
052: GlobalVariables.getErrorMap().removeFromErrorPath(
053: "moduleUsers(financial)");
054: GlobalVariables.getErrorMap().removeFromErrorPath(
055: "document.newMaintainableObject");
056: return success;
057: }
058:
059: /**
060: * Always returns true, generates add errors if there are any
061: *
062: * @param document submitted financial user maintenance document
063: * @return true
064: *
065: * @see org.kuali.core.maintenance.rules.MaintenanceDocumentRuleBase#processCustomSaveDocumentBusinessRules(org.kuali.core.document.MaintenanceDocument)
066: */
067: protected boolean processCustomSaveDocumentBusinessRules(
068: MaintenanceDocument document) {
069: boolean success = true;
070: setupConvenienceObjects(document);
071: GlobalVariables.getErrorMap().addToErrorPath(
072: "document.newMaintainableObject");
073: GlobalVariables.getErrorMap().addToErrorPath(
074: "moduleUsers(financial)");
075: success &= checkGeneralRules(document);
076: GlobalVariables.getErrorMap().removeFromErrorPath(
077: "moduleUsers(financial)");
078: GlobalVariables.getErrorMap().removeFromErrorPath(
079: "document.newMaintainableObject");
080: // save always succeeds even if there are rule violations
081: return true;
082: }
083:
084: /**
085: * This method sets the convenience objects like newAccount and oldAccount, so you have short and easy handles to the new and
086: * old objects contained in the maintenance document. It also calls the BusinessObjectBase.refresh(), which will attempt to load
087: * all sub-objects from the DB by their primary keys, if available.
088: *
089: * @param document - the maintenanceDocument being evaluated
090: */
091: private void setupConvenienceObjects(MaintenanceDocument document) {
092:
093: // setup oldAccount convenience objects, make sure all possible sub-objects are populated
094: oldUser = (FinancialUser) ((UniversalUser) document
095: .getOldMaintainableObject().getBusinessObject())
096: .getModuleUser(FinancialUser.MODULE_ID);
097: oldUser.refresh();
098:
099: // setup newAccount convenience objects, make sure all possible sub-objects are populated
100: newUser = (FinancialUser) ((UniversalUser) document
101: .getNewMaintainableObject().getBusinessObject())
102: .getModuleUser(FinancialUser.MODULE_ID);
103: newUser.refresh();
104: }
105:
106: /**
107: * Returns true if user is NOT active or if the user is active, the chart code and organization must be entered and valid
108: *
109: * @param document submitted financial user maintenance document
110: * @return if user is NOT active or if the user is active, the chart code and organization must be entered and valid
111: */
112: private boolean checkGeneralRules(MaintenanceDocument document) {
113: boolean success = true;
114:
115: // only run these rules if the new user will be active
116: if (newUser.isActive()) {
117:
118: // chart code (fin_coa_cd) must be entered and valid (nf_duser-350)
119: if (StringUtils.isNotEmpty(newUser
120: .getUserChartOfAccountsCode())) {
121: if (ObjectUtils
122: .isNull(newUser.getUserChartOfAccounts())) {
123: success = false;
124: GlobalVariables
125: .getErrorMap()
126: .putError(
127: "userChartOfAccountsCode",
128: KFSKeyConstants.ERROR_DOCUMENT_KUALIUSERMAINT_INVALID_CODE,
129: new String[] { ddService
130: .getAttributeErrorLabel(
131: newUser.getClass(),
132: "userChartOfAccountsCode") });
133: }
134: }
135:
136: // (90-113) organization must be entered and valid (nf_duser-376)
137: if (StringUtils.isNotEmpty(newUser
138: .getUserOrganizationCode())) {
139: if (ObjectUtils.isNull(newUser.getUserOrganization())) {
140: success = false;
141: GlobalVariables
142: .getErrorMap()
143: .putError(
144: "userOrganizationCode",
145: KFSKeyConstants.ERROR_DOCUMENT_KUALIUSERMAINT_INVALID_CODE,
146: new String[] { ddService
147: .getAttributeErrorLabel(
148: newUser.getClass(),
149: "userOrganizationCode") });
150: }
151: }
152: }
153:
154: return success;
155: }
156:
157: }
|