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.kra.routingform.document;
017:
018: import java.util.HashMap;
019: import java.util.Map;
020:
021: import org.kuali.core.authorization.AuthorizationConstants;
022: import org.kuali.core.bo.user.UniversalUser;
023: import org.kuali.core.document.Document;
024: import org.kuali.core.document.authorization.DocumentActionFlags;
025: import org.kuali.core.service.KualiConfigurationService;
026: import org.kuali.core.util.GlobalVariables;
027: import org.kuali.core.workflow.service.KualiWorkflowDocument;
028: import org.kuali.kfs.context.SpringContext;
029: import org.kuali.module.kra.KraConstants;
030: import org.kuali.module.kra.KraKeyConstants;
031: import org.kuali.module.kra.document.ResearchDocument;
032: import org.kuali.module.kra.document.ResearchDocumentAuthorizer;
033: import org.kuali.module.kra.routingform.bo.RoutingFormPersonnel;
034: import org.kuali.module.kra.service.ResearchDocumentPermissionsService;
035: import org.kuali.workflow.KualiWorkflowUtils;
036:
037: public class RoutingFormDocumentAuthorizer extends
038: ResearchDocumentAuthorizer {
039:
040: @Override
041: public Map getEditMode(Document d, UniversalUser u) {
042:
043: Map editModes = new HashMap();
044:
045: KualiConfigurationService kualiConfigurationService = SpringContext
046: .getBean(KualiConfigurationService.class);
047: ResearchDocumentPermissionsService permissionsService = SpringContext
048: .getBean(ResearchDocumentPermissionsService.class);
049: RoutingFormDocument routingFormDocument = (RoutingFormDocument) d;
050: String permissionCode = AuthorizationConstants.EditMode.UNVIEWABLE;
051: KualiWorkflowDocument workflowDocument = routingFormDocument
052: .getDocumentHeader().getWorkflowDocument();
053:
054: // Check initiator
055: if (workflowDocument.getInitiatorNetworkId().equalsIgnoreCase(
056: u.getPersonUserIdentifier())) {
057: if (workflowDocument.stateIsEnroute()) {
058: permissionCode = getPermissionCodeByPrecedence(
059: permissionCode,
060: AuthorizationConstants.EditMode.VIEW_ONLY);
061: } else {
062: permissionCode = getPermissionCodeByPrecedence(
063: permissionCode,
064: AuthorizationConstants.EditMode.FULL_ENTRY);
065: }
066: return this .finalizeEditMode(routingFormDocument,
067: permissionCode);
068: }
069:
070: // Check personnel
071: for (RoutingFormPersonnel person : routingFormDocument
072: .getRoutingFormPersonnel()) {
073: if (u.getPersonUniversalIdentifier().equals(
074: person.getPersonUniversalIdentifier())) {
075: person.refresh();
076: String role = person.getPersonRole()
077: .getPersonRoleCode();
078: if (KraConstants.PROJECT_DIRECTOR_CODE.equals(role)
079: || KraConstants.CO_PROJECT_DIRECTOR_CODE
080: .equals(role)) {
081: if (workflowDocument.getRouteHeader()
082: .getDocRouteLevel() > KraConstants.projectDirectorRouteLevel) {
083: permissionCode = getPermissionCodeByPrecedence(
084: permissionCode,
085: AuthorizationConstants.EditMode.VIEW_ONLY);
086: } else {
087: permissionCode = getPermissionCodeByPrecedence(
088: permissionCode,
089: AuthorizationConstants.EditMode.FULL_ENTRY);
090: }
091:
092: return this .finalizeEditMode(routingFormDocument,
093: permissionCode);
094: }
095: if (KraConstants.CONTACT_PERSON_ADMINISTRATIVE_CODE
096: .equals(role)
097: || KraConstants.CONTACT_PERSON_PROPOSAL_CODE
098: .equals(role)) {
099: permissionCode = getPermissionCodeByPrecedence(
100: permissionCode,
101: AuthorizationConstants.EditMode.VIEW_ONLY);
102: }
103: }
104: }
105:
106: // Org approvers are view-only
107: if (permissionsService.isUserInOrgHierarchy(routingFormDocument
108: .buildProjectDirectorReportXml(true),
109: KualiWorkflowUtils.KRA_ROUTING_FORM_DOC_TYPE, u
110: .getPersonUniversalIdentifier())) {
111: permissionCode = getPermissionCodeByPrecedence(
112: permissionCode,
113: AuthorizationConstants.EditMode.VIEW_ONLY);
114: }
115:
116: if (permissionsService.isUserInOrgHierarchy(routingFormDocument
117: .buildCostShareOrgReportXml(true),
118: KualiWorkflowUtils.KRA_ROUTING_FORM_DOC_TYPE, u
119: .getPersonUniversalIdentifier())) {
120: permissionCode = getPermissionCodeByPrecedence(
121: permissionCode,
122: AuthorizationConstants.EditMode.VIEW_ONLY);
123: }
124:
125: if (permissionsService.isUserInOrgHierarchy(routingFormDocument
126: .buildOtherOrgReportXml(true),
127: KualiWorkflowUtils.KRA_ROUTING_FORM_DOC_TYPE, u
128: .getPersonUniversalIdentifier())) {
129: permissionCode = getPermissionCodeByPrecedence(
130: permissionCode,
131: AuthorizationConstants.EditMode.VIEW_ONLY);
132: }
133:
134: permissionCode = getPermissionCodeByPrecedence(permissionCode,
135: getAdHocEditMode(routingFormDocument, u));
136:
137: return this .finalizeEditMode(routingFormDocument,
138: permissionCode);
139: }
140:
141: /**
142: * Overriding to check for Budget Overwrite Mode. It was being bypassed in most cases.
143: *
144: * @see org.kuali.module.kra.document.ResearchDocumentAuthorizer#finalizeEditMode(org.kuali.module.kra.document.ResearchDocument,
145: * java.lang.String)
146: */
147: @Override
148: protected Map finalizeEditMode(ResearchDocument researchDocument,
149: String permissionCode) {
150: // TODO Auto-generated method stub
151: Map editModes = super .finalizeEditMode(researchDocument,
152: permissionCode);
153:
154: RoutingFormDocument rfd = (RoutingFormDocument) researchDocument;
155: if (rfd.getRoutingFormBudgetNumber() != null) {
156: editModes.put(
157: KraConstants.AuthorizationConstants.BUDGET_LINKED,
158: "TRUE");
159: if (!GlobalVariables.getMessageList().contains(
160: KraKeyConstants.BUDGET_OVERRIDE))
161: GlobalVariables.getMessageList().add(0,
162: KraKeyConstants.BUDGET_OVERRIDE);
163: }
164:
165: return editModes;
166: }
167:
168: public DocumentActionFlags getDocumentActionFlags(
169: Document document, UniversalUser user) {
170:
171: DocumentActionFlags flags = super .getDocumentActionFlags(
172: document, user);
173: RoutingFormDocument routingFormDocument = (RoutingFormDocument) document;
174:
175: flags.setCanAcknowledge(false);
176:
177: if (!flags.getCanRoute()
178: && routingFormDocument.isUserProjectDirector(user
179: .getPersonUniversalIdentifier())
180: && routingFormDocument.getDocumentHeader()
181: .getWorkflowDocument().stateIsSaved()) {
182: flags.setCanRoute(true);
183: }
184: // flags.setCanApprove(false);
185: flags.setCanBlanketApprove(false);
186: flags.setCanCancel(false);
187: // flags.setCanDisapprove(false);
188: flags.setCanFYI(false);
189: flags.setCanClose(false);
190: flags.setCanSave(true);
191:
192: return flags;
193: }
194: }
|