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.businessobject.inquiry;
017
018 import java.util.HashMap;
019 import java.util.List;
020 import java.util.Map;
021 import java.util.Properties;
022
023 import org.kuali.kfs.coa.businessobject.Organization;
024 import org.kuali.kfs.module.cam.CamsConstants;
025 import org.kuali.kfs.module.cam.CamsPropertyConstants;
026 import org.kuali.kfs.module.cam.businessobject.Asset;
027 import org.kuali.kfs.module.cam.document.service.AssetLocationService;
028 import org.kuali.kfs.module.cam.document.service.AssetService;
029 import org.kuali.kfs.module.cam.document.service.EquipmentLoanOrReturnService;
030 import org.kuali.kfs.module.cam.document.service.PaymentSummaryService;
031 import org.kuali.kfs.module.cam.document.service.RetirementInfoService;
032 import org.kuali.kfs.sys.KFSConstants;
033 import org.kuali.kfs.sys.KFSPropertyConstants;
034 import org.kuali.kfs.sys.businessobject.inquiry.KfsInquirableImpl;
035 import org.kuali.kfs.sys.context.SpringContext;
036 import org.kuali.rice.kns.bo.BusinessObject;
037 import org.kuali.rice.kns.lookup.HtmlData;
038 import org.kuali.rice.kns.util.KNSConstants;
039 import org.kuali.rice.kns.util.ObjectUtils;
040 import org.kuali.rice.kns.util.UrlFactory;
041 import org.kuali.rice.kns.web.ui.Section;
042
043 public class AssetInquirableImpl extends KfsInquirableImpl {
044 protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(AssetInquirableImpl.class);
045
046 /**
047 * Executes service methods to populate appropriate data in the Asset BO.
048 *
049 * @see org.kuali.rice.kns.inquiry.KualiInquirableImpl#getBusinessObject(java.util.Map)
050 */
051 @Override
052 public BusinessObject getBusinessObject(Map fieldValues) {
053 Asset asset = (Asset) super.getBusinessObject(fieldValues);
054
055 if (ObjectUtils.isNotNull(asset)) {
056 // Identifies the latest location information
057 AssetLocationService assetlocationService = SpringContext.getBean(AssetLocationService.class);
058 assetlocationService.setOffCampusLocation(asset);
059
060 // Calculates payment summary and depreciation summary based on available payment records
061 PaymentSummaryService paymentSummaryService = SpringContext.getBean(PaymentSummaryService.class);
062 paymentSummaryService.calculateAndSetPaymentSummary(asset);
063
064 // Identifies the merge history and separation history based on asset disposition records
065 AssetService assetService = SpringContext.getBean(AssetService.class);
066 assetService.setSeparateHistory(asset);
067
068 // Finds out the latest retirement info, is asset is currently retired.
069 RetirementInfoService retirementInfoService = SpringContext.getBean(RetirementInfoService.class);
070 retirementInfoService.setRetirementInfo(asset);
071 retirementInfoService.setMergeHistory(asset);
072
073 // Finds out the latest equipment loan or return information if available
074 EquipmentLoanOrReturnService equipmentLoanOrReturnService = SpringContext.getBean(EquipmentLoanOrReturnService.class);
075 equipmentLoanOrReturnService.setEquipmentLoanInfo(asset);
076 }
077
078 return asset;
079 }
080
081 /**
082 * Hide payments if there are more then the allowable number.
083 *
084 * @see org.kuali.rice.kns.inquiry.KualiInquirableImpl#getSections(org.kuali.rice.kns.bo.BusinessObject)
085 */
086 @Override
087 public List<Section> getSections(BusinessObject businessObject) {
088 List<Section> sections = super.getSections(businessObject);
089
090 // sectionToRemove is hoky but it looks like that section.setHidden doesn't work on inquirable. And to avoid
091 // ConcurrentModificationException we do this
092 Section sectionToRemove = null;
093
094 Asset asset = (Asset) businessObject;
095 for (Section section : sections) {
096 if (CamsConstants.Asset.SECTION_ID_PAYMENT_INFORMATION.equals(section.getSectionId()) && asset.getAssetPayments().size() > CamsConstants.Asset.ASSET_MAXIMUM_NUMBER_OF_PAYMENT_DISPLAY) {
097 // Hide the payment section if there are more then CamsConstants.ASSET_MAXIMUM_NUMBER_OF_PAYMENT_DISPLAY
098 // section.setHidden(true);
099 sectionToRemove = section;
100 }
101 }
102
103 if (sectionToRemove != null) {
104 sections.remove(sectionToRemove);
105 }
106 return sections;
107 }
108
109 @Override
110 public HtmlData getInquiryUrl(BusinessObject businessObject, String attributeName, boolean forceInquiry) {
111 if (CamsPropertyConstants.Asset.ORGANIZATION_CODE.equals(attributeName) && businessObject instanceof Asset) {
112 Asset asset = (Asset) businessObject;
113 Properties parameters = new Properties();
114 parameters.put(KNSConstants.DISPATCH_REQUEST_PARAMETER, KFSConstants.START_METHOD);
115 parameters.put(KNSConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, Organization.class.getName());
116 parameters.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, asset.getOrganizationOwnerAccount().getChartOfAccountsCode());
117 parameters.put(KFSPropertyConstants.ORGANIZATION_CODE, asset.getOrganizationOwnerAccount().getOrganizationCode());
118
119 Map<String, String> fieldList = new HashMap<String, String>();
120 fieldList.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, asset.getOrganizationOwnerAccount().getChartOfAccountsCode());
121 fieldList.put(KFSPropertyConstants.ORGANIZATION_CODE, asset.getOrganizationOwnerAccount().getOrganizationCode());
122 return getHyperLink(Organization.class, fieldList, UrlFactory.parameterizeUrl(KNSConstants.INQUIRY_ACTION, parameters));
123 }
124 return super.getInquiryUrl(businessObject, attributeName, forceInquiry);
125 }
126 }