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.lookup; 017 018 import java.util.ArrayList; 019 import java.util.HashMap; 020 import java.util.List; 021 import java.util.Map; 022 import java.util.Properties; 023 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.businessobject.AssetPayment; 028 import org.kuali.kfs.module.cam.document.authorization.AssetAuthorizer; 029 import org.kuali.kfs.module.cam.document.authorization.AssetPaymentDocumentAuthorizer; 030 import org.kuali.kfs.sys.KFSConstants; 031 import org.kuali.kfs.sys.KFSPropertyConstants; 032 import org.kuali.kfs.sys.context.SpringContext; 033 import org.kuali.kfs.sys.document.authorization.FinancialSystemMaintenanceDocumentAuthorizerBase; 034 import org.kuali.rice.kns.bo.BusinessObject; 035 import org.kuali.rice.kns.lookup.HtmlData; 036 import org.kuali.rice.kns.lookup.KualiLookupableHelperServiceImpl; 037 import org.kuali.rice.kns.lookup.HtmlData.AnchorHtmlData; 038 import org.kuali.rice.kns.service.BusinessObjectService; 039 import org.kuali.rice.kns.service.DocumentHelperService; 040 import org.kuali.rice.kns.util.GlobalVariables; 041 import org.kuali.rice.kns.util.KNSConstants; 042 import org.kuali.rice.kns.util.ObjectUtils; 043 import org.kuali.rice.kns.util.UrlFactory; 044 045 /** 046 * This class overrides the base getActionUrls method for Asset Payment. Even though it's a payment lookup screen we are maintaining 047 * assets. 048 */ 049 public class AssetPaymentLookupableHelperServiceImpl extends AssetLookupableHelperServiceImpl { 050 051 private BusinessObjectService businessObjectService; 052 053 /** 054 * @see org.kuali.rice.kns.lookup.AbstractLookupableHelperServiceImpl#getCustomActionUrls(org.kuali.rice.kns.bo.BusinessObject, 055 * List pkNames) 056 */ 057 @Override 058 public List<HtmlData> getCustomActionUrls(BusinessObject businessObject, List pkNames) { 059 AssetPayment assetPayment = (AssetPayment) businessObject; 060 061 // Same thing but we're maintaining assets, not asset payments. 062 Map<String, Object> primaryKeys = new HashMap<String, Object>(); 063 primaryKeys.put(CamsPropertyConstants.Asset.CAPITAL_ASSET_NUMBER, assetPayment.getCapitalAssetNumber()); 064 Asset asset = (Asset) businessObjectService.findByPrimaryKey(Asset.class, primaryKeys); 065 066 List assetPrimaryKey = new ArrayList(); 067 assetPrimaryKey.add(CamsPropertyConstants.Asset.CAPITAL_ASSET_NUMBER); 068 069 List<HtmlData> anchorHtmlDataList = new ArrayList<HtmlData>(); 070 071 // For retired asset, all action link will be hidden. 072 if (assetService.isAssetRetired(asset)) { 073 anchorHtmlDataList.add(super.getViewAssetUrl(asset)); 074 } 075 else { 076 anchorHtmlDataList.add(this.getAssetUrl(asset)); 077 anchorHtmlDataList.add(super.getLoanUrl(asset)); 078 anchorHtmlDataList.add(super.getMergeUrl(asset)); 079 anchorHtmlDataList.add(this.getSeparateUrl(assetPayment)); 080 anchorHtmlDataList.add(super.getTransferUrl(asset)); 081 anchorHtmlDataList.add(this.getPaymentUrl(asset)); 082 } 083 return anchorHtmlDataList; 084 } 085 086 /** 087 * Returns the url for any drill down links within the lookup. Override so that documentNumber is not an inquiry if it doesn't exist. 088 * @see org.kuali.rice.kns.lookup.Lookupable#getInquiryUrl(org.kuali.rice.kns.bo.BusinessObject, java.lang.String) 089 */ 090 @Override 091 public HtmlData getInquiryUrl(BusinessObject businessObject, String propertyName) { 092 if (KFSPropertyConstants.DOCUMENT_NUMBER.equals(propertyName)) { 093 AssetPayment assetPayment = (AssetPayment) businessObject; 094 095 if (ObjectUtils.isNull(assetPayment.getDocumentHeader())) { 096 // If the document isn't found, don't show the inquirable 097 return new AnchorHtmlData(KFSConstants.EMPTY_STRING, KFSConstants.EMPTY_STRING); 098 } 099 } 100 return super.getInquiryUrl(businessObject, propertyName); 101 } 102 103 protected HtmlData getPaymentUrl(Asset asset) { 104 AssetPaymentDocumentAuthorizer assetPaymentAuhorizer =new AssetPaymentDocumentAuthorizer(); 105 boolean isAuhtorize = assetPaymentAuhorizer.canInitiate(CamsConstants.DocumentTypeName.ASSET_PAYMENT, GlobalVariables.getUserSession().getPerson()); 106 107 if (assetService.isCapitalAsset(asset) && isAuhtorize) { 108 Properties parameters = new Properties(); 109 parameters.put(KFSConstants.DISPATCH_REQUEST_PARAMETER, KNSConstants.DOC_HANDLER_METHOD); 110 parameters.put(CamsPropertyConstants.AssetPaymentDocument.CAPITAL_ASSET_NUMBER, asset.getCapitalAssetNumber().toString()); 111 parameters.put(KFSConstants.PARAMETER_COMMAND, "initiate"); 112 parameters.put(KFSConstants.DOCUMENT_TYPE_NAME, CamsConstants.DocumentTypeName.ASSET_PAYMENT); 113 114 String href = UrlFactory.parameterizeUrl(CamsConstants.StrutsActions.ONE_UP + CamsConstants.StrutsActions.PAYMENT, parameters); 115 116 return new AnchorHtmlData(href, KNSConstants.DOC_HANDLER_METHOD, CamsConstants.AssetActions.PAYMENT); 117 } else { 118 return new AnchorHtmlData("", "", ""); 119 } 120 } 121 122 123 protected HtmlData getSeparateUrl(AssetPayment assetPayment) { 124 Asset asset = assetPayment.getAsset(); 125 126 FinancialSystemMaintenanceDocumentAuthorizerBase documentAuthorizer = (FinancialSystemMaintenanceDocumentAuthorizerBase) SpringContext.getBean(DocumentHelperService.class).getDocumentAuthorizer(CamsConstants.DocumentTypeName.ASSET_ADD_GLOBAL); 127 boolean isAuthorized = documentAuthorizer.isAuthorized(asset, CamsConstants.CAM_MODULE_CODE, CamsConstants.PermissionNames.SEPARATE, GlobalVariables.getUserSession().getPerson().getPrincipalId()); 128 129 if (isAuthorized) { 130 Properties parameters = getSeparateParameters(assetPayment.getAsset()); 131 parameters.put(CamsPropertyConstants.AssetGlobal.SEPERATE_SOURCE_PAYMENT_SEQUENCE_NUMBER, assetPayment.getPaymentSequenceNumber().toString()); 132 String href = UrlFactory.parameterizeUrl(KFSConstants.MAINTENANCE_ACTION, parameters); 133 return new AnchorHtmlData(href, KFSConstants.MAINTENANCE_NEW_METHOD_TO_CALL, CamsConstants.AssetActions.SEPARATE); 134 } else { 135 return new AnchorHtmlData("", "", ""); 136 } 137 } 138 139 protected HtmlData getAssetUrl(Asset asset) { 140 AssetAuthorizer assetAuthorizer = new AssetAuthorizer(); 141 boolean isAuthorized = assetAuthorizer.canMaintain(asset, GlobalVariables.getUserSession().getPerson()); 142 143 if (isAuthorized) { 144 Properties parameters = new Properties(); 145 parameters.put(KFSConstants.DISPATCH_REQUEST_PARAMETER, KFSConstants.MAINTENANCE_EDIT_METHOD_TO_CALL); 146 parameters.put(CamsPropertyConstants.AssetPaymentDocument.CAPITAL_ASSET_NUMBER, asset.getCapitalAssetNumber().toString()); 147 parameters.put(KNSConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, Asset.class.getName()); 148 149 String href = UrlFactory.parameterizeUrl(KFSConstants.MAINTENANCE_ACTION, parameters); 150 return new AnchorHtmlData(href, KFSConstants.MAINTENANCE_EDIT_METHOD_TO_CALL, KFSConstants.MAINTENANCE_EDIT_METHOD_TO_CALL); 151 } else { 152 return new AnchorHtmlData("", "", ""); 153 } 154 } 155 156 /** 157 * Gets the businessObjectService attribute. 158 * 159 * @return Returns the businessObjectService. 160 */ 161 public BusinessObjectService getBusinessObjectService() { 162 return businessObjectService; 163 } 164 165 /** 166 * Sets the businessObjectService attribute value. 167 * 168 * @param businessObjectService The businessObjectService to set. 169 */ 170 public void setBusinessObjectService(BusinessObjectService businessObjectService) { 171 this.businessObjectService = businessObjectService; 172 } 173 }