/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.module.cam.document.web.struts; import static org.kuali.kfs.module.cam.CamsPropertyConstants.Asset.CAPITAL_ASSET_NUMBER; import java.util.HashMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.kuali.kfs.module.cam.CamsConstants; import org.kuali.kfs.module.cam.CamsPropertyConstants; import org.kuali.kfs.module.cam.businessobject.Asset; import org.kuali.kfs.module.cam.businessobject.AssetLocation; import org.kuali.kfs.module.cam.document.EquipmentLoanOrReturnDocument; import org.kuali.kfs.module.cam.document.service.AssetLocationService; import org.kuali.kfs.module.cam.document.service.PaymentSummaryService; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.rice.core.api.datetime.DateTimeService; import org.kuali.rice.kns.web.struts.action.KualiTransactionalDocumentActionBase; import org.kuali.rice.krad.service.BusinessObjectService; public class EquipmentLoanOrReturnAction extends KualiTransactionalDocumentActionBase { protected static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(EquipmentLoanOrReturnAction.class); /** * This method had to override because equipmentLoanOrReturn information has to be refreshed before display * * @see org.kuali.rice.kns.web.struts.action.KualiDocumentActionBase#docHandler(org.apache.struts.action.ActionMapping, * org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ @Override public ActionForward docHandler(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ActionForward docHandlerForward = super.docHandler(mapping, form, request, response); EquipmentLoanOrReturnForm equipmentLoanOrReturnForm = (EquipmentLoanOrReturnForm) form; EquipmentLoanOrReturnDocument equipmentLoanOrReturnDocument = (EquipmentLoanOrReturnDocument) equipmentLoanOrReturnForm.getDocument(); BusinessObjectService service = SpringContext.getBean(BusinessObjectService.class); Asset asset = equipmentLoanOrReturnDocument.getAsset(); asset = handleRequestFromLookup(request, equipmentLoanOrReturnForm, equipmentLoanOrReturnDocument, service, asset); asset = handleRequestFromWorkflow(equipmentLoanOrReturnForm, equipmentLoanOrReturnDocument, service); asset = equipmentLoanOrReturnDocument.getAsset(); asset.refreshReferenceObject(CamsPropertyConstants.Asset.ASSET_LOCATIONS); asset.refreshReferenceObject(CamsPropertyConstants.Asset.ASSET_PAYMENTS); SpringContext.getBean(AssetLocationService.class).setOffCampusLocation(asset); SpringContext.getBean(PaymentSummaryService.class).calculateAndSetPaymentSummary(asset); return docHandlerForward; } /** * This method handles when request is from a work flow document search * * @param equipmentLoanOrReturnForm Form * @param equipmentLoanOrReturnDocument Document * @param service BusinessObjectService * @return Asset */ protected Asset handleRequestFromWorkflow(EquipmentLoanOrReturnForm equipmentLoanOrReturnForm, EquipmentLoanOrReturnDocument equipmentLoanOrReturnDocument, BusinessObjectService businessObjectService) { Asset newAsset = new Asset(); if (equipmentLoanOrReturnForm.getDocId() != null) { newAsset.setCapitalAssetNumber(equipmentLoanOrReturnDocument.getCapitalAssetNumber()); newAsset = (Asset) businessObjectService.retrieve(newAsset); equipmentLoanOrReturnDocument.setAsset(newAsset); } return newAsset; } /** * This method handles the request coming from asset lookup screen * * @param request Request * @param equipmentLoanOrReturnForm Current form * @param equipmentLoanOrReturnDocument Document * @param service Business Object Service * @param asset Asset * @return Asset */ protected Asset handleRequestFromLookup(HttpServletRequest request, EquipmentLoanOrReturnForm equipmentLoanOrReturnForm, EquipmentLoanOrReturnDocument equipmentLoanOrReturnDocument, BusinessObjectService businessObjectService, Asset asset) { Asset newAsset = asset; if (equipmentLoanOrReturnForm.getDocId() == null && asset == null) { newAsset = new Asset(); HashMap<String, Object> keys = new HashMap<String, Object>(); String capitalAssetNumber = request.getParameter(CAPITAL_ASSET_NUMBER); keys.put(CAPITAL_ASSET_NUMBER, capitalAssetNumber); newAsset = (Asset) businessObjectService.findByPrimaryKey(Asset.class, keys); // set document status equipmentLoanOrReturnDocument.setNewLoan(true); equipmentLoanOrReturnDocument.setReturnLoan(false); if (newAsset != null) { // populate equipmentLoanOrReturn info when loan type is renew or return loan if (!request.getParameter(CamsConstants.AssetActions.LOAN_TYPE).equals(CamsConstants.AssetActions.LOAN)) { populateEquipmentLoanOrReturnDocument(equipmentLoanOrReturnDocument, newAsset); equipmentLoanOrReturnDocument.setNewLoan(false); } // populate loan return date when loan type is return loan if (request.getParameter(CamsConstants.AssetActions.LOAN_TYPE).equals(CamsConstants.AssetActions.LOAN_RETURN)) { equipmentLoanOrReturnDocument.setLoanReturnDate(SpringContext.getBean(DateTimeService.class).getCurrentSqlDate()); equipmentLoanOrReturnDocument.setReturnLoan(true); } // reset loan date and expect return date for renew loan if (request.getParameter(CamsConstants.AssetActions.LOAN_TYPE).equals(CamsConstants.AssetActions.LOAN_RENEW)) { equipmentLoanOrReturnDocument.setLoanDate(SpringContext.getBean(DateTimeService.class).getCurrentSqlDate()); equipmentLoanOrReturnDocument.setExpectedReturnDate(null); } equipmentLoanOrReturnDocument.setCapitalAssetNumber(newAsset.getCapitalAssetNumber()); equipmentLoanOrReturnDocument.setAsset(newAsset); } } return newAsset; } /** * This method populate equipmentloanOrReturn document from asset and asset location * * @param equipmentLoanOrReturnDocument EquipmentLoanOrReturnDocument * @param newAsset Asset * @return */ protected void populateEquipmentLoanOrReturnDocument(EquipmentLoanOrReturnDocument equipmentLoanOrReturnDocument, Asset newAsset) { equipmentLoanOrReturnDocument.setLoanDate(newAsset.getLoanDate()); equipmentLoanOrReturnDocument.setLoanReturnDate(newAsset.getLoanReturnDate()); equipmentLoanOrReturnDocument.setExpectedReturnDate(newAsset.getExpectedReturnDate()); // populate borrower address AssetLocation borrowerLocation = new AssetLocation(); borrowerLocation.setCapitalAssetNumber(newAsset.getCapitalAssetNumber()); borrowerLocation.setAssetLocationTypeCode(CamsConstants.AssetLocationTypeCode.BORROWER); borrowerLocation = (AssetLocation) SpringContext.getBean(BusinessObjectService.class).retrieve(borrowerLocation); if (borrowerLocation != null) { equipmentLoanOrReturnDocument.setBorrowerUniversalIdentifier(borrowerLocation.getAssetLocationContactIdentifier()); equipmentLoanOrReturnDocument.setBorrowerAddress(borrowerLocation.getAssetLocationStreetAddress()); equipmentLoanOrReturnDocument.setBorrowerCityName(borrowerLocation.getAssetLocationCityName()); equipmentLoanOrReturnDocument.setBorrowerStateCode(borrowerLocation.getAssetLocationStateCode()); equipmentLoanOrReturnDocument.setBorrowerZipCode(borrowerLocation.getAssetLocationZipCode()); equipmentLoanOrReturnDocument.setBorrowerCountryCode(borrowerLocation.getAssetLocationCountryCode()); equipmentLoanOrReturnDocument.setBorrowerPhoneNumber(borrowerLocation.getAssetLocationPhoneNumber()); } // populate stored at address AssetLocation storeAtLocation = new AssetLocation(); storeAtLocation.setCapitalAssetNumber(newAsset.getCapitalAssetNumber()); storeAtLocation.setAssetLocationTypeCode(CamsConstants.AssetLocationTypeCode.BORROWER_STORAGE); storeAtLocation = (AssetLocation) SpringContext.getBean(BusinessObjectService.class).retrieve(storeAtLocation); if (storeAtLocation != null) { equipmentLoanOrReturnDocument.setBorrowerStorageAddress(storeAtLocation.getAssetLocationStreetAddress()); equipmentLoanOrReturnDocument.setBorrowerStorageCityName(storeAtLocation.getAssetLocationCityName()); equipmentLoanOrReturnDocument.setBorrowerStorageStateCode(storeAtLocation.getAssetLocationStateCode()); equipmentLoanOrReturnDocument.setBorrowerStorageZipCode(storeAtLocation.getAssetLocationZipCode()); equipmentLoanOrReturnDocument.setBorrowerStorageCountryCode(storeAtLocation.getAssetLocationCountryCode()); equipmentLoanOrReturnDocument.setBorrowerStoragePhoneNumber(storeAtLocation.getAssetLocationPhoneNumber()); } } }