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.module.ar.document.authorization;
017
018 import java.util.ArrayList;
019 import java.util.List;
020 import java.util.Set;
021
022 import org.kuali.kfs.module.ar.ArConstants;
023 import org.kuali.kfs.module.ar.ArPropertyConstants;
024 import org.kuali.kfs.module.ar.businessobject.OrganizationOptions;
025 import org.kuali.kfs.sys.KFSConstants;
026 import org.kuali.kfs.sys.context.SpringContext;
027 import org.kuali.kfs.sys.document.authorization.FinancialSystemMaintenanceDocumentPresentationControllerBase;
028 import org.kuali.kfs.sys.service.impl.KfsParameterConstants;
029 import org.kuali.rice.kim.bo.Person;
030 import org.kuali.rice.kim.service.KIMServiceLocator;
031 import org.kuali.rice.kim.service.RoleManagementService;
032 import org.kuali.rice.kns.document.MaintenanceDocument;
033 import org.kuali.rice.kns.service.ParameterService;
034 import org.kuali.rice.kns.util.GlobalVariables;
035
036 public class OrganizationOptionsPresentationController extends FinancialSystemMaintenanceDocumentPresentationControllerBase {
037
038 protected static final String ACCOUNTS_RECEIVABLE_MANAGER_ROLE_NAME = "Accounts Receivable Manager";
039
040 @Override
041 public Set<String> getConditionallyReadOnlySectionIds(MaintenanceDocument document) {
042 Set<String> readOnlySectionIds = super.getConditionallyReadOnlySectionIds(document);
043 setRemitToAddressSectionEditable(readOnlySectionIds);
044 return readOnlySectionIds;
045 }
046
047 @Override
048 public Set<String> getConditionallyReadOnlyPropertyNames(MaintenanceDocument document) {
049 Set<String> readOnlyPropertyNames = super.getConditionallyReadOnlyPropertyNames(document);
050 setRemitToNameEditable(readOnlyPropertyNames);
051 setOrgPostalZipCodeEditable(readOnlyPropertyNames);
052 setBillingOrgFieldsEditable(readOnlyPropertyNames, document);
053 setProcessingOrgFieldsEditable(readOnlyPropertyNames, document);
054 return readOnlyPropertyNames;
055 }
056
057 /**
058 *
059 * Billing Chart/Org are always read-only on an edit. Always.
060 *
061 * They are editable on an Add, but only if KIM lets you in on an Add,
062 * but thats handled elsewhere.
063 *
064 * @param readOnlyPropertyNames
065 * @param document
066 */
067 protected void setBillingOrgFieldsEditable(Set<String> readOnlyPropertyNames, MaintenanceDocument document) {
068 if (document.isEdit()) {
069 readOnlyPropertyNames.add(ArPropertyConstants.OrganizationOptionsFields.CHART_OF_ACCOUNTS_CODE);
070 readOnlyPropertyNames.add(ArPropertyConstants.OrganizationOptionsFields.ORGANIZATION_CODE);
071 }
072 }
073
074 /**
075 * Sets the processing Chart/Org code editable
076 *
077 * @param readOnlyPropertyNames
078 * @param document
079 */
080 protected void setProcessingOrgFieldsEditable(Set<String> readOnlyPropertyNames, MaintenanceDocument document) {
081
082 if (document.isEdit()) {
083
084 RoleManagementService rms = KIMServiceLocator.getRoleManagementService();
085
086 Person user = GlobalVariables.getUserSession().getPerson();
087 String principalId = user.getPrincipalId();
088
089 List<String> roleIds = new ArrayList<String>();
090 roleIds.add(rms.getRoleIdByName(KFSConstants.ParameterNamespaces.KFS, ACCOUNTS_RECEIVABLE_MANAGER_ROLE_NAME));
091
092 // editable only for the AR Manager role
093 if (!rms.principalHasRole(principalId, roleIds, null)) {
094 readOnlyPropertyNames.add(ArPropertyConstants.OrganizationOptionsFields.PROCESSING_CHART_OF_ACCOUNTS_CODE);
095 readOnlyPropertyNames.add(ArPropertyConstants.OrganizationOptionsFields.PROCESSING_ORGANIZATION_CODE);
096 }
097 }
098 }
099
100 /**
101 *
102 * Sets the Remit-To Name (ie, OrgCheckPayableToName) to read only if thats how the system parameters are
103 * configured, otherwise leave it read/write.
104 *
105 * @param readOnlyPropertyNames
106 */
107 protected void setRemitToNameEditable(Set<String> readOnlyPropertyNames) {
108 ParameterService service = SpringContext.getBean(ParameterService.class);
109 String nameEditable = service.getParameterValue(OrganizationOptions.class, ArConstants.REMIT_TO_NAME_EDITABLE_IND);
110 if ("N".equalsIgnoreCase(nameEditable)) {
111 readOnlyPropertyNames.add(ArPropertyConstants.OrganizationOptionsFields.ORGANIZATION_CHECK_PAYABLE_TO_NAME);
112 }
113 }
114
115 /**
116 *
117 * Sets the OrgPostalZipCode to readonly if thats what the system parameters say, otherwise leave it
118 * read/write.
119 *
120 * @param readOnlyPropertyNames
121 */
122 protected void setOrgPostalZipCodeEditable(Set<String> readOnlyPropertyNames) {
123 ParameterService service = SpringContext.getBean(ParameterService.class);
124 if (!service.getIndicatorParameter(KfsParameterConstants.ACCOUNTS_RECEIVABLE_DOCUMENT.class, ArConstants.ENABLE_SALES_TAX_IND) ){
125 readOnlyPropertyNames.add(ArPropertyConstants.OrganizationOptionsFields.ORGANIZATION_POSTAL_ZIP_CODE);
126 }
127 }
128
129 /**
130 *
131 * Sets the whole Remit-To Address section to read-only if thats what the system parameter says, otherwise leave
132 * it read/wrtie.
133 *
134 * @param readOnlySectionIds
135 */
136 protected void setRemitToAddressSectionEditable(Set<String> readOnlySectionIds) {
137 ParameterService service = SpringContext.getBean(ParameterService.class);
138 String addressEditable = service.getParameterValue(OrganizationOptions.class, ArConstants.REMIT_TO_ADDRESS_EDITABLE_IND);
139 if ("N".equalsIgnoreCase(addressEditable)) {
140 readOnlySectionIds.add(ArConstants.OrganizationOptionsSections.EDIT_ORGANIZATION_REMIT_TO_ADDRESS);
141 }
142 }
143
144 }