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 }