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