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.HashSet; 019 import java.util.Set; 020 021 import org.kuali.kfs.module.cam.CamsConstants; 022 import org.kuali.kfs.module.cam.CamsPropertyConstants; 023 import org.kuali.kfs.module.cam.businessobject.AssetGlobal; 024 import org.kuali.kfs.module.cam.businessobject.AssetGlobalDetail; 025 import org.kuali.kfs.module.cam.businessobject.AssetPaymentDetail; 026 import org.kuali.kfs.module.cam.document.service.AssetGlobalService; 027 import org.kuali.kfs.sys.KFSConstants; 028 import org.kuali.kfs.sys.context.SpringContext; 029 import org.kuali.kfs.sys.document.authorization.FinancialSystemMaintenanceDocumentPresentationControllerBase; 030 import org.kuali.rice.kns.bo.BusinessObject; 031 import org.kuali.rice.kns.datadictionary.MaintainableCollectionDefinition; 032 import org.kuali.rice.kns.document.MaintenanceDocument; 033 import org.kuali.rice.kns.service.MaintenanceDocumentDictionaryService; 034 035 /** 036 * Presentation Controller for Asset Global Maintenance Documents 037 */ 038 public class AssetGlobalPresentationController extends FinancialSystemMaintenanceDocumentPresentationControllerBase { 039 040 @Override 041 public Set<String> getConditionallyHiddenPropertyNames(BusinessObject businessObject) { 042 Set<String> fields = super.getConditionallyHiddenPropertyNames(businessObject); 043 MaintenanceDocument document = (MaintenanceDocument) businessObject; 044 AssetGlobal assetGlobal = (AssetGlobal) document.getNewMaintainableObject().getBusinessObject(); 045 MaintainableCollectionDefinition maintCollDef = SpringContext.getBean(MaintenanceDocumentDictionaryService.class).getMaintainableCollection("AA", "assetPaymentDetails"); 046 boolean isAssetSeparate = SpringContext.getBean(AssetGlobalService.class).isAssetSeparate(assetGlobal); 047 048 if (assetGlobal.isCapitalAssetBuilderOriginIndicator() || isAssetSeparate) { 049 // do not include payment add section within the payment details collection 050 maintCollDef.setIncludeAddLine(false); 051 // No update could be made to payment if it's created from CAB. Here, disable delete button if payment already added into 052 // collection. 053 for (AssetPaymentDetail payment : assetGlobal.getAssetPaymentDetails()) { 054 payment.setNewCollectionRecord(false); 055 } 056 } 057 else { 058 // conversely allow add during any other case. This is important because the attribute is set on the DD and the DD is 059 // only loaded on project startup. Hence setting is important to avoid state related bugs 060 maintCollDef.setIncludeAddLine(true); 061 } 062 063 AssetGlobalService assetGlobalService = SpringContext.getBean(AssetGlobalService.class); 064 if (!assetGlobalService.isAssetSeparateByPayment(assetGlobal)) { 065 // Show payment sequence number field only if a separate by payment was selected 066 fields.add(CamsPropertyConstants.AssetGlobal.SEPERATE_SOURCE_PAYMENT_SEQUENCE_NUMBER); 067 } 068 069 if (!isAssetSeparate) { 070 fields.addAll(getAssetGlobalLocationHiddenFields(assetGlobal)); 071 072 if (assetGlobalService.existsInGroup(assetGlobalService.getNonNewAcquisitionCodeGroup(), assetGlobal.getAcquisitionTypeCode())) { 073 // Fields in the add section 074 fields.add(KFSConstants.ADD_PREFIX + "." + CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "." + CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_POSTING_DATE); 075 fields.add(KFSConstants.ADD_PREFIX + "." + CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "." + CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_NUMBER); 076 fields.add(KFSConstants.ADD_PREFIX + "." + CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "." + CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_TYPE_CODE); 077 fields.add(KFSConstants.ADD_PREFIX + "." + CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "." + CamsPropertyConstants.AssetPaymentDetail.ORIGINATION_CODE); 078 079 // Hiding some fields when the status of the document is not final. 080 if (!document.getDocumentHeader().getWorkflowDocument().stateIsFinal()) { 081 fields.addAll(getAssetGlobalPaymentsHiddenFields(assetGlobal)); 082 } 083 } 084 } 085 // if no separate asset is added, hide the button 086 if (isAssetSeparate && (assetGlobal.getAssetSharedDetails().isEmpty() || assetGlobal.getAssetSharedDetails().get(0).getAssetGlobalUniqueDetails().isEmpty())) { 087 fields.add("calculateEqualSourceAmountsButton"); 088 } 089 090 091 092 return fields; 093 } 094 095 @Override 096 public Set<String> getConditionallyReadOnlyPropertyNames(MaintenanceDocument document) { 097 Set<String> fields = super.getConditionallyReadOnlyPropertyNames(document); 098 099 AssetGlobal assetGlobal = (AssetGlobal) document.getNewMaintainableObject().getBusinessObject(); 100 101 // "Asset Separate" document functionality 102 if (SpringContext.getBean(AssetGlobalService.class).isAssetSeparate(assetGlobal)) { 103 fields.addAll(getAssetGlobalDetailsReadOnlyFields()); 104 fields.addAll(getAssetGlobalPaymentsReadOnlyFields(assetGlobal)); 105 } 106 else if (assetGlobal.isCapitalAssetBuilderOriginIndicator()) { 107 // If asset global document is created from CAB, disallow add payment to collection. 108 fields.addAll(getAssetGlobalPaymentsReadOnlyFields(assetGlobal)); 109 } 110 111 return fields; 112 } 113 114 @Override 115 public Set<String> getConditionallyHiddenSectionIds(BusinessObject businessObject) { 116 Set<String> fields = super.getConditionallyHiddenSectionIds(businessObject); 117 118 MaintenanceDocument document = (MaintenanceDocument) businessObject; 119 AssetGlobal assetGlobal = (AssetGlobal) document.getNewMaintainableObject().getBusinessObject(); 120 121 // hide "Asset Information", "Recalculate Total Amount" tabs if not "Asset Separate" doc 122 if (!SpringContext.getBean(AssetGlobalService.class).isAssetSeparate(assetGlobal)) { 123 fields.add(CamsConstants.AssetGlobal.SECTION_ID_ASSET_INFORMATION); 124 fields.add(CamsConstants.AssetGlobal.SECTION_ID_RECALCULATE_SEPARATE_SOURCE_AMOUNT); 125 } 126 127 return fields; 128 } 129 130 /** 131 * @param assetGlobal 132 * @return Asset Location fields with index that are present on AssetGlobal. Includes add line. Useful for hiding them. 133 */ 134 protected Set<String> getAssetGlobalLocationHiddenFields(AssetGlobal assetGlobal) { 135 Set<String> fields = new HashSet<String>(); 136 137 // hide it for the add line 138 int i = 0; 139 for (AssetGlobalDetail assetSharedDetail : assetGlobal.getAssetSharedDetails()) { 140 fields.add(KFSConstants.ADD_PREFIX + "." + CamsPropertyConstants.AssetGlobal.ASSET_SHARED_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetGlobalDetail.ASSET_UNIQUE_DETAILS + "." + CamsPropertyConstants.AssetGlobalDetail.REPRESENTATIVE_UNIVERSAL_IDENTIFIER); // representativeUniversalIdentifier 141 fields.add(KFSConstants.ADD_PREFIX + "." + CamsPropertyConstants.AssetGlobal.ASSET_SHARED_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetGlobalDetail.ASSET_UNIQUE_DETAILS + "." + CamsPropertyConstants.AssetGlobalDetail.CAPITAL_ASSET_TYPE_CODE); // capitalAssetTypeCode 142 fields.add(KFSConstants.ADD_PREFIX + "." + CamsPropertyConstants.AssetGlobal.ASSET_SHARED_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetGlobalDetail.ASSET_UNIQUE_DETAILS + "." + CamsPropertyConstants.AssetGlobalDetail.CAPITAL_ASSET_DESCRIPTION); // capitalAssetDescription 143 fields.add(KFSConstants.ADD_PREFIX + "." + CamsPropertyConstants.AssetGlobal.ASSET_SHARED_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetGlobalDetail.ASSET_UNIQUE_DETAILS + "." + CamsPropertyConstants.AssetGlobalDetail.MANUFACTURER_NAME); // manufacturerName 144 fields.add(KFSConstants.ADD_PREFIX + "." + CamsPropertyConstants.AssetGlobal.ASSET_SHARED_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetGlobalDetail.ASSET_UNIQUE_DETAILS + "." + CamsPropertyConstants.AssetGlobalDetail.ORGANIZATION_TEXT); // organizationText 145 fields.add(KFSConstants.ADD_PREFIX + "." + CamsPropertyConstants.AssetGlobal.ASSET_SHARED_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetGlobalDetail.ASSET_UNIQUE_DETAILS + "." + CamsPropertyConstants.AssetGlobalDetail.MANUFACTURER_MODEL_NUMBER); // manufacturerModelNumber 146 fields.add(KFSConstants.ADD_PREFIX + "." + CamsPropertyConstants.AssetGlobal.ASSET_SHARED_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetGlobalDetail.ASSET_UNIQUE_DETAILS + "." + CamsPropertyConstants.AssetGlobalDetail.SEPARATE_SOURCE_AMOUNT); // separateSourceAmount 147 // (Long) 148 149 // hide it for the existing lines 150 int j = 0; 151 for (AssetGlobalDetail assetGlobalUniqueDetail : assetSharedDetail.getAssetGlobalUniqueDetails()) { 152 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_SHARED_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetGlobalDetail.ASSET_UNIQUE_DETAILS + "[" + j + "]." + CamsPropertyConstants.AssetGlobalDetail.REPRESENTATIVE_UNIVERSAL_IDENTIFIER); // representativeUniversalIdentifier 153 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_SHARED_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetGlobalDetail.ASSET_UNIQUE_DETAILS + "[" + j + "]." + CamsPropertyConstants.AssetGlobalDetail.CAPITAL_ASSET_TYPE_CODE); // capitalAssetTypeCode 154 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_SHARED_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetGlobalDetail.ASSET_UNIQUE_DETAILS + "[" + j + "]." + CamsPropertyConstants.AssetGlobalDetail.CAPITAL_ASSET_DESCRIPTION); // capitalAssetDescription 155 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_SHARED_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetGlobalDetail.ASSET_UNIQUE_DETAILS + "[" + j + "]." + CamsPropertyConstants.AssetGlobalDetail.MANUFACTURER_NAME); // manufacturerName 156 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_SHARED_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetGlobalDetail.ASSET_UNIQUE_DETAILS + "[" + j + "]." + CamsPropertyConstants.AssetGlobalDetail.ORGANIZATION_TEXT); // organizationText 157 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_SHARED_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetGlobalDetail.ASSET_UNIQUE_DETAILS + "[" + j + "]." + CamsPropertyConstants.AssetGlobalDetail.MANUFACTURER_MODEL_NUMBER); // manufacturerModelNumber 158 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_SHARED_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetGlobalDetail.ASSET_UNIQUE_DETAILS + "[" + j + "]." + CamsPropertyConstants.AssetGlobalDetail.SEPARATE_SOURCE_AMOUNT); // separateSourceAmount 159 // (Long) 160 j++; 161 } 162 163 i++; 164 } 165 166 return fields; 167 } 168 169 /** 170 * @param assetGlobal 171 * @return posting year and fiscal month on every payment. Useful for hiding them. 172 */ 173 protected Set<String> getAssetGlobalPaymentsHiddenFields(AssetGlobal assetGlobal) { 174 Set<String> fields = new HashSet<String>(); 175 176 int i = 0; 177 for (AssetPaymentDetail assetPaymentDetail : assetGlobal.getAssetPaymentDetails()) { 178 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_POSTING_DATE); 179 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_NUMBER); 180 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_TYPE_CODE); 181 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.ORIGINATION_CODE); 182 i++; 183 } 184 185 return fields; 186 } 187 188 /** 189 * @return Asset Global Detail fields that should be read only 190 */ 191 protected Set<String> getAssetGlobalDetailsReadOnlyFields() { 192 Set<String> fields = new HashSet<String>(); 193 194 fields.add(CamsPropertyConstants.Asset.ORGANIZATION_OWNER_CHART_OF_ACCOUNTS_CODE); 195 fields.add(CamsPropertyConstants.Asset.ORGANIZATION_OWNER_ACCOUNT_NUMBER); 196 fields.add(CamsPropertyConstants.Asset.ORGANIZATION_CODE); 197 fields.add(CamsPropertyConstants.Asset.AGENCY_NUMBER); // owner 198 fields.add(CamsPropertyConstants.Asset.ACQUISITION_TYPE_CODE); 199 fields.add(CamsPropertyConstants.Asset.INVENTORY_STATUS_CODE); 200 fields.add(CamsPropertyConstants.Asset.CONDITION_CODE); 201 fields.add(CamsPropertyConstants.AssetGlobal.CAPITAL_ASSET_DESCRIPTION); 202 fields.add(CamsPropertyConstants.Asset.CAPITAL_ASSET_TYPE_CODE); 203 fields.add(CamsPropertyConstants.Asset.VENDOR_NAME); 204 fields.add(CamsPropertyConstants.Asset.MANUFACTURER_NAME); 205 fields.add(CamsPropertyConstants.Asset.MANUFACTURER_MODEL_NUMBER); 206 fields.add(CamsPropertyConstants.AssetGlobal.ORGANIZATION_TEXT); 207 fields.add(CamsPropertyConstants.Asset.REP_USER_AUTH_ID); 208 fields.add(CamsPropertyConstants.Asset.LAST_INVENTORY_DATE); 209 fields.add(CamsPropertyConstants.Asset.CREATE_DATE); 210 fields.add(CamsPropertyConstants.Asset.ASSET_DATE_OF_SERVICE); 211 fields.add(CamsPropertyConstants.AssetGlobal.CAPITAL_ASSET_DEPRECIATION_DATE); 212 fields.add(CamsPropertyConstants.Asset.LAND_COUNTRY_NAME); 213 fields.add(CamsPropertyConstants.Asset.LAND_ACREAGE_SIZE); 214 fields.add(CamsPropertyConstants.Asset.LAND_PARCEL_NUMBER); 215 216 return fields; 217 } 218 219 /** 220 * @param assetGlobal 221 * @return Asset Global Payment lines with index that should be set to read only. 222 */ 223 protected Set<String> getAssetGlobalPaymentsReadOnlyFields(AssetGlobal assetGlobal) { 224 Set<String> fields = new HashSet<String>(); 225 226 // set all payment detail fields to read only. 227 int i = 0; 228 for (AssetPaymentDetail assetPaymentDetail : assetGlobal.getAssetPaymentDetails()) { 229 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.SEQUENCE_NUMBER); 230 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.CHART_OF_ACCOUNTS_CODE); 231 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.ACCOUNT_NUMBER); 232 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.SUB_ACCOUNT_NUMBER); 233 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.FINANCIAL_OBJECT_CODE); 234 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.SUB_OBJECT_CODE); 235 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.PROJECT_CODE); 236 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.ORGANIZATION_REFERENCE_ID); 237 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_NUMBER); 238 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_TYPE_CODE); 239 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.PURCHASE_ORDER); 240 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.REQUISITION_NUMBER); 241 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_POSTING_DATE); 242 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_POSTING_FISCAL_YEAR); 243 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_POSTING_FISCAL_MONTH); 244 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.AMOUNT); 245 fields.add(CamsPropertyConstants.AssetGlobal.ASSET_PAYMENT_DETAILS + "[" + i + "]." + CamsPropertyConstants.AssetPaymentDetail.ORIGINATION_CODE); 246 247 i++; 248 } 249 250 return fields; 251 } 252 }