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.cam.document.authorization;
017
018 import java.util.Arrays;
019 import java.util.List;
020 import java.util.Set;
021
022 import org.kuali.kfs.module.cam.CamsConstants;
023 import org.kuali.kfs.module.cam.CamsPropertyConstants;
024 import org.kuali.kfs.module.cam.businessobject.Asset;
025 import org.kuali.kfs.module.cam.document.service.AssetService;
026 import org.kuali.kfs.sys.context.SpringContext;
027 import org.kuali.kfs.sys.document.authorization.FinancialSystemMaintenanceDocumentPresentationControllerBase;
028 import org.kuali.rice.kns.bo.BusinessObject;
029 import org.kuali.rice.kns.document.Document;
030 import org.kuali.rice.kns.document.MaintenanceDocument;
031 import org.kuali.rice.kns.service.DocumentHelperService;
032 import org.kuali.rice.kns.service.ParameterService;
033 import org.kuali.rice.kns.util.GlobalVariables;
034 import org.kuali.rice.kns.workflow.service.KualiWorkflowDocument;
035
036 /**
037 * Presentation Controller for Asset Maintenance Documents
038 */
039 public class AssetPresentationController extends FinancialSystemMaintenanceDocumentPresentationControllerBase {
040
041 @Override
042 public Set<String> getConditionallyHiddenPropertyNames(BusinessObject businessObject) {
043 Set<String> fields = super.getConditionallyHiddenPropertyNames(businessObject);
044
045 MaintenanceDocument document = (MaintenanceDocument) businessObject;
046
047 if (SpringContext.getBean(AssetService.class).isAssetFabrication(document)) {
048 fields.addAll(Arrays.asList(CamsConstants.Asset.EDIT_DETAIL_INFORMATION_FIELDS));
049 fields.addAll(Arrays.asList(CamsConstants.Asset.EDIT_ORGANIZATION_INFORMATION_FIELDS));
050 }
051
052 // Hide payment sequence numbers
053 Asset asset = (Asset) document.getNewMaintainableObject().getBusinessObject();
054 int size = asset.getAssetPayments().size();
055 for (int i = 0; i < size; i++) {
056 fields.add(CamsPropertyConstants.Asset.ASSET_PAYMENTS + "[" + i + "]." + CamsPropertyConstants.AssetPayment.PAYMENT_SEQ_NUMBER);
057 fields.add(CamsPropertyConstants.Asset.ASSET_PAYMENTS + "[" + i + "]." + CamsPropertyConstants.AssetPayment.CAPITAL_ASSET_NUMBER);
058 }
059
060 if (!CamsConstants.AssetRetirementReasonCode.MERGED.equals(asset.getRetirementReasonCode())) {
061 // hide merge target capital asset number
062 fields.add(CamsPropertyConstants.Asset.RETIREMENT_INFO_MERGED_TARGET);
063 }
064
065 return fields;
066 }
067
068 @Override
069 public Set<String> getConditionallyReadOnlyPropertyNames(MaintenanceDocument document) {
070 Set<String> fields = super.getConditionallyReadOnlyPropertyNames(document);
071
072 if (SpringContext.getBean(AssetService.class).isAssetFabrication(document)) {
073 fields.add(CamsPropertyConstants.Asset.ASSET_INVENTORY_STATUS);
074 fields.add(CamsPropertyConstants.Asset.VENDOR_NAME);
075 fields.add(CamsPropertyConstants.Asset.ACQUISITION_TYPE_CODE);
076 }
077 else {
078 // acquisition type code is read-only during edit
079 fields.add(CamsPropertyConstants.Asset.ACQUISITION_TYPE_CODE);
080 // fabrication fields are read-only
081 fields.addAll(Arrays.asList(CamsConstants.Asset.FABRICATION_INFORMATION_FIELDS));
082 }
083
084 Asset asset = (Asset) document.getNewMaintainableObject().getBusinessObject();
085 // if tag was created in a prior fiscal year, set tag number, asset type code and description as view only
086 if (SpringContext.getBean(AssetService.class).isAssetTaggedInPriorFiscalYear(asset)) {
087 AssetAuthorizer documentAuthorizer = (AssetAuthorizer) SpringContext.getBean(DocumentHelperService.class).getDocumentAuthorizer(document);
088 boolean isAuthorized = documentAuthorizer.isAuthorized(document, CamsConstants.CAM_MODULE_CODE, CamsConstants.PermissionNames.EDIT_WHEN_TAGGED_PRIOR_FISCAL_YEAR, GlobalVariables.getUserSession().getPerson().getPrincipalId());
089 if (!isAuthorized) {
090 fields.addAll(SpringContext.getBean(ParameterService.class).getParameterValues(Asset.class, CamsConstants.Parameters.EDITABLE_FIELDS_WHEN_TAGGED_PRIOR_FISCAL_YEAR));
091 }
092 }
093
094 return fields;
095 }
096
097 @Override
098 public Set<String> getConditionallyHiddenSectionIds(BusinessObject businessObject) {
099 Set<String> fields = super.getConditionallyHiddenSectionIds(businessObject);
100
101 MaintenanceDocument document = (MaintenanceDocument) businessObject;
102 Asset asset = (Asset) document.getNewMaintainableObject().getBusinessObject();
103
104 if (asset.getAssetPayments().size() > CamsConstants.Asset.ASSET_MAXIMUM_NUMBER_OF_PAYMENT_DISPLAY) {
105 // Hide the payment section if there are more then CamsConstants.ASSET_MAXIMUM_NUMBER_OF_PAYMENT_DISPLAY
106 fields.add(CamsConstants.Asset.SECTION_ID_PAYMENT_INFORMATION);
107 }
108
109 if (SpringContext.getBean(AssetService.class).isAssetFabrication(document)) {
110 // fabrication request asset creation. Hide sections that are only applicable to asset edit. For fields
111 // that are to be hidden for asset edit, see AssetAuthorizer.addMaintenanceDocumentRestrictions
112 fields.add(CamsConstants.Asset.SECTION_ID_LAND_INFORMATION);
113 fields.add(CamsConstants.Asset.SECTION_ID_PAYMENT_INFORMATION);
114 fields.add(CamsConstants.Asset.SECTION_ID_PAYMENT_LOOKUP);
115 fields.add(CamsConstants.Asset.SECTION_ID_DOCUMENT_LOOKUP);
116 fields.add(CamsConstants.Asset.SECTION_ID_DEPRECIATION_INFORMATION);
117 fields.add(CamsConstants.Asset.SECTION_ID_HISTORY);
118 fields.add(CamsConstants.Asset.SECTION_ID_RETIREMENT_INFORMATION);
119 fields.add(CamsConstants.Asset.SECTION_ID_EQUIPMENT_LOAN_INFORMATION);
120 fields.add(CamsConstants.Asset.SECTION_ID_WARRENTY);
121 fields.add(CamsConstants.Asset.SECTION_ID_REPAIR_HISTORY);
122 fields.add(CamsConstants.Asset.SECTION_ID_COMPONENTS);
123 fields.add(CamsConstants.Asset.SECTION_ID_MERGE_HISTORY);
124 }
125 else {
126 // Asset edit
127 if (asset.getEstimatedFabricationCompletionDate() == null) {
128 // hide fabrication only if asset is not fabricated through CAMS
129 fields.add(CamsConstants.Asset.SECTION_ID_FABRICATION_INFORMATION);
130 }
131
132 if (!SpringContext.getBean(AssetService.class).isAssetRetired(asset)) {
133 // if asset is not retired, hide retirement information
134 fields.add(CamsConstants.Asset.SECTION_ID_RETIREMENT_INFORMATION);
135 }
136
137 if (asset.getExpectedReturnDate() == null || asset.getLoanReturnDate() != null) {
138 // If asset is not loaned, hide the section
139 fields.add(CamsConstants.Asset.SECTION_ID_LOAN_INFORMATION);
140 }
141 if (asset.getSeparateHistory() == null) {
142 // If asset is not separated, hide the section
143 fields.add(CamsConstants.Asset.SECTION_ID_HISTORY);
144 }
145 }
146
147 return fields;
148 }
149
150
151 @Override
152 protected boolean canEdit(Document document) {
153 AssetService assetService = SpringContext.getBean(AssetService.class);
154
155 // for fabrication document, disallow edit when document routing to the 'Management' FYI users.
156 if (assetService.isAssetFabrication((MaintenanceDocument) document)) {
157 KualiWorkflowDocument workflowDocument = (KualiWorkflowDocument) document.getDocumentHeader().getWorkflowDocument();
158 if (workflowDocument.stateIsEnroute()) {
159 List<String> nodeNames = assetService.getCurrentRouteLevels(workflowDocument);
160
161 if (nodeNames.contains(CamsConstants.RouteLevelNames.MANAGEMENT) && !workflowDocument.isApprovalRequested()) {
162 return false;
163 }
164 }
165 }
166 // for retired asset, disable edit.
167 MaintenanceDocument maitDocument = (MaintenanceDocument) document;
168 Asset asset = (Asset) maitDocument.getOldMaintainableObject().getBusinessObject();
169 return !getAssetService().isAssetRetired(asset) & super.canEdit(document);
170 }
171
172
173 @Override
174 protected boolean canBlanketApprove(Document document) {
175 return true;
176 }
177
178 @Override
179 protected boolean canRoute(Document document) {
180 MaintenanceDocument maitDocument = (MaintenanceDocument) document;
181 Asset asset = (Asset) maitDocument.getOldMaintainableObject().getBusinessObject();
182 return !getAssetService().isAssetRetired(asset) & super.canRoute(document);
183 }
184
185 @Override
186 protected boolean canSave(Document document) {
187 MaintenanceDocument maitDocument = (MaintenanceDocument) document;
188 Asset asset = (Asset) maitDocument.getOldMaintainableObject().getBusinessObject();
189 return !getAssetService().isAssetRetired(asset) & super.canSave(document);
190 }
191
192 protected AssetService getAssetService() {
193 return SpringContext.getBean(AssetService.class);
194 }
195 }