/* * 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.service.impl; import java.sql.Timestamp; import java.util.List; import org.apache.commons.lang.StringUtils; 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.EquipmentLoanOrReturnService; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.rice.core.api.datetime.DateTimeService; import org.kuali.rice.krad.bo.PersistableBusinessObject; import org.kuali.rice.krad.service.BusinessObjectService; import org.kuali.rice.krad.util.ObjectUtils; public class EquipmentLoanOrReturnServiceImpl implements EquipmentLoanOrReturnService { private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(EquipmentLoanOrReturnServiceImpl.class); private BusinessObjectService businessObjectService; /** * @see org.kuali.kfs.module.cam.document.service.EquipmentLoanOrReturnService#processApprovedEquipmentLoanOrReturn(org.kuali.module.cams.document.EquipmentLoanOrReturn) * This method is called when the work flow document is reached its final approval * <ol> * <li>Gets the latest equipmentLoanOrReturn details from DB</li> * <li>Save asset data changes</li> * <li>Save borrower's location changes </li> * <li>Save store at location changes</li> * </ol> */ public void processApprovedEquipmentLoanOrReturn(EquipmentLoanOrReturnDocument document) { Asset updateAsset = new Asset(); updateAsset.setCapitalAssetNumber(document.getCapitalAssetNumber()); updateAsset = (Asset) getBusinessObjectService().retrieve(updateAsset); updateAsset.setExpectedReturnDate(document.getExpectedReturnDate()); updateAsset.setLoanDate(document.getLoanDate()); updateAsset.setLoanReturnDate(document.getLoanReturnDate()); updateBorrowerLocation(document, updateAsset); updateStoreAtLocation(document, updateAsset); updateAsset.setLastInventoryDate(new Timestamp(SpringContext.getBean(DateTimeService.class).getCurrentSqlDate().getTime())); getBusinessObjectService().save((PersistableBusinessObject) updateAsset); } /** * @see org.kuali.kfs.module.cam.document.service.EquipmentLoanOrReturnService#setEquipmentLoanInfo(org.kuali.kfs.module.cam.businessobject.Asset) */ public void setEquipmentLoanInfo(Asset asset) { if (asset.getExpectedReturnDate() != null && asset.getLoanReturnDate() == null) { // find borrower and storage address and set those values asset.refreshReferenceObject(CamsPropertyConstants.Asset.ASSET_LOCATIONS); List<AssetLocation> assetLocations = asset.getAssetLocations(); if (ObjectUtils.isNotNull(assetLocations)) { for (AssetLocation assetLocation : assetLocations) { if (CamsConstants.AssetLocationTypeCode.BORROWER.equals(assetLocation.getAssetLocationTypeCode())) { asset.setBorrowerLocation(assetLocation); } if (CamsConstants.AssetLocationTypeCode.BORROWER_STORAGE.equals(assetLocation.getAssetLocationTypeCode())) { asset.setBorrowerStorageLocation(assetLocation); } } } } } /** * @see org.kuali.kfs.module.cam.document.service.EquipmentLoanOrReturnService#updateBorrowerLocation(org.kuali.module.cams.document.EquipmentLoanOrReturn) */ protected void updateBorrowerLocation(EquipmentLoanOrReturnDocument document, Asset updateAsset) { AssetLocation borrowerLocation = new AssetLocation(); borrowerLocation.setCapitalAssetNumber(updateAsset.getCapitalAssetNumber()); borrowerLocation.setAssetLocationTypeCode(CamsConstants.AssetLocationTypeCode.BORROWER); borrowerLocation = (AssetLocation) getBusinessObjectService().retrieve(borrowerLocation); if (ObjectUtils.isNull(document.getLoanReturnDate())) { if (borrowerLocation == null) { borrowerLocation = new AssetLocation(); borrowerLocation.setCapitalAssetNumber(updateAsset.getCapitalAssetNumber()); borrowerLocation.setAssetLocationTypeCode(CamsConstants.AssetLocationTypeCode.BORROWER); updateAsset.getAssetLocations().add(borrowerLocation); } borrowerLocation.setAssetLocationContactName(document.getBorrowerPerson().getPrincipalName()); borrowerLocation.setAssetLocationContactIdentifier(document.getBorrowerUniversalIdentifier()); borrowerLocation.setAssetLocationInstitutionName(document.getBorrowerPerson().getPrimaryDepartmentCode()); borrowerLocation.setAssetLocationPhoneNumber(document.getBorrowerPhoneNumber()); borrowerLocation.setAssetLocationStreetAddress(document.getBorrowerAddress()); borrowerLocation.setAssetLocationCityName(document.getBorrowerCityName()); borrowerLocation.setAssetLocationStateCode(document.getBorrowerStateCode()); borrowerLocation.setAssetLocationCountryCode(document.getBorrowerCountryCode()); borrowerLocation.setAssetLocationZipCode(document.getBorrowerZipCode()); getBusinessObjectService().save(borrowerLocation); } else { if (borrowerLocation != null) { updateAsset.getAssetLocations().remove(borrowerLocation); getBusinessObjectService().delete(borrowerLocation); } } } /** * @see org.kuali.kfs.module.cam.document.service.EquipmentLoanOrReturnService#updateStoreAtLocation(org.kuali.module.cams.document.EquipmentLoanOrReturn) */ protected void updateStoreAtLocation(EquipmentLoanOrReturnDocument document, Asset updateAsset) { AssetLocation storeAtLocation = new AssetLocation(); storeAtLocation.setCapitalAssetNumber(updateAsset.getCapitalAssetNumber()); storeAtLocation.setAssetLocationTypeCode(CamsConstants.AssetLocationTypeCode.BORROWER_STORAGE); storeAtLocation = (AssetLocation) getBusinessObjectService().retrieve(storeAtLocation); if (ObjectUtils.isNull(document.getLoanReturnDate()) && StringUtils.isNotBlank(document.getBorrowerStorageAddress())) { if (storeAtLocation == null) { storeAtLocation = new AssetLocation(); storeAtLocation.setCapitalAssetNumber(updateAsset.getCapitalAssetNumber()); storeAtLocation.setAssetLocationTypeCode(CamsConstants.AssetLocationTypeCode.BORROWER_STORAGE); updateAsset.getAssetLocations().add(storeAtLocation); } storeAtLocation.setAssetLocationContactName(document.getBorrowerPerson().getPrincipalName()); storeAtLocation.setAssetLocationContactIdentifier(document.getBorrowerUniversalIdentifier()); storeAtLocation.setAssetLocationInstitutionName(document.getBorrowerPerson().getPrimaryDepartmentCode()); storeAtLocation.setAssetLocationPhoneNumber(document.getBorrowerStoragePhoneNumber()); storeAtLocation.setAssetLocationStreetAddress(document.getBorrowerStorageAddress()); storeAtLocation.setAssetLocationCityName(document.getBorrowerStorageCityName()); storeAtLocation.setAssetLocationStateCode(document.getBorrowerStorageStateCode()); storeAtLocation.setAssetLocationCountryCode(document.getBorrowerStorageCountryCode()); storeAtLocation.setAssetLocationZipCode(document.getBorrowerStorageZipCode()); getBusinessObjectService().save((PersistableBusinessObject) storeAtLocation); } else { if (storeAtLocation != null) { updateAsset.getAssetLocations().remove(storeAtLocation); getBusinessObjectService().delete((PersistableBusinessObject) storeAtLocation); } } } public BusinessObjectService getBusinessObjectService() { return businessObjectService; } public void setBusinessObjectService(BusinessObjectService businessObjectService) { this.businessObjectService = businessObjectService; } }