/* * 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 javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.kuali.kfs.module.cam.CamsKeyConstants; import org.kuali.kfs.module.cam.CamsPropertyConstants; import org.kuali.kfs.module.cam.businessobject.Asset; import org.kuali.kfs.module.cam.businessobject.AssetPayment; import org.kuali.kfs.module.cam.document.AssetTransferDocument; import org.kuali.kfs.module.cam.document.service.AssetLocationService; import org.kuali.kfs.module.cam.document.service.AssetPaymentService; import org.kuali.kfs.module.cam.document.service.PaymentSummaryService; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.document.web.struts.FinancialSystemTransactionalDocumentActionBase; import org.kuali.rice.kew.api.KewApiConstants; import org.kuali.rice.kim.api.identity.Person; import org.kuali.rice.kns.util.KNSGlobalVariables; import org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase; import org.kuali.rice.krad.util.ErrorMessage; import org.kuali.rice.krad.util.MessageMap; public class AssetTransferAction extends FinancialSystemTransactionalDocumentActionBase { protected static final Logger LOG = Logger.getLogger(AssetTransferAction.class); /** * This method had to override because asset 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); // refresh asset information AssetTransferForm assetTransferForm = (AssetTransferForm) form; AssetTransferDocument assetTransferDocument = (AssetTransferDocument) assetTransferForm.getDocument(); handleRequestFromLookup(request, assetTransferForm, assetTransferDocument); handleRequestFromWorkflow(assetTransferForm, assetTransferDocument); Asset asset = assetTransferDocument.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); // populate old asset fields for historic retaining on document String command = assetTransferForm.getCommand(); if (KewApiConstants.INITIATE_COMMAND.equals(command)) { assetTransferDocument.setOldOrganizationOwnerChartOfAccountsCode(asset.getOrganizationOwnerChartOfAccountsCode()); assetTransferDocument.setOldOrganizationOwnerAccountNumber(asset.getOrganizationOwnerAccountNumber()); } this.refresh(mapping, form, request, response); return docHandlerForward; } /** * This method handles when request is from a work flow document search * * @param assetTransferForm Form * @param assetTransferDocument Document * @param service BusinessObjectService * @return Asset */ protected void handleRequestFromWorkflow(AssetTransferForm assetTransferForm, AssetTransferDocument assetTransferDocument) { LOG.debug("Start- Handle request from workflow"); if (assetTransferForm.getDocId() != null) { assetTransferDocument.refreshReferenceObject(CamsPropertyConstants.AssetTransferDocument.ASSET); org.kuali.rice.kim.api.identity.PersonService personService = SpringContext.getBean(org.kuali.rice.kim.api.identity.PersonService.class); Person person = personService.getPerson(assetTransferDocument.getRepresentativeUniversalIdentifier()); if (person != null) { assetTransferDocument.setAssetRepresentative(person); } else { LOG.error("org.kuali.rice.kim.api.identity.PersonService returned null for uuid " + assetTransferDocument.getRepresentativeUniversalIdentifier()); } } } /** * This method handles the request coming from asset lookup screen * * @param request Request * @param assetTransferForm Current form * @param assetTransferDocument Document * @param service Business Object Service * @param asset Asset * @return Asset */ protected void handleRequestFromLookup(HttpServletRequest request, AssetTransferForm assetTransferForm, AssetTransferDocument assetTransferDocument) { LOG.debug("Start - Handle request from asset lookup screen"); if (assetTransferForm.getDocId() == null) { String capitalAssetNumber = request.getParameter(CAPITAL_ASSET_NUMBER); assetTransferDocument.setCapitalAssetNumber(Long.valueOf(capitalAssetNumber)); assetTransferDocument.refreshReferenceObject(CamsPropertyConstants.AssetTransferDocument.ASSET); } } /** * Since the organization fields are view only we need to make sure they are in sync with the data entry fields. * * @see org.kuali.rice.kns.web.struts.action.KualiDocumentActionBase#refresh(org.apache.struts.action.ActionMapping, * org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ @Override public ActionForward refresh(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ((KualiDocumentFormBase) form).setMessageMapFromPreviousRequest(new MessageMap()); ActionForward actionForward = super.refresh(mapping, form, request, response); AssetTransferDocument assetTransferDocument = ((AssetTransferForm) form).getAssetTransferDocument(); assetTransferDocument.refreshReferenceObject(CamsPropertyConstants.AssetTransferDocument.ORGANIZATION_OWNER_ACCOUNT); assetTransferDocument.refreshReferenceObject(CamsPropertyConstants.AssetTransferDocument.OLD_ORGANIZATION_OWNER_ACCOUNT); return actionForward; } /** * Route the document */ @Override public ActionForward route(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ActionForward actionForward = super.route(mapping, form, request, response); allPaymentsFederalOwnedMessage(form); return actionForward; } protected void allPaymentsFederalOwnedMessage(ActionForm form) { boolean allPaymentsFederalOwned = true; AssetTransferDocument assetTransferDocument = ((AssetTransferForm) form).getAssetTransferDocument(); for (AssetPayment assetPayment : assetTransferDocument.getAsset().getAssetPayments()) { if (!getAssetPaymentService().isPaymentFederalOwned(assetPayment)) { allPaymentsFederalOwned = false; } } // display a message for asset not generating ledger entries when it is federally owned if (allPaymentsFederalOwned) { KNSGlobalVariables.getMessageList().add(0, new ErrorMessage(CamsKeyConstants.Transfer.MESSAGE_NO_LEDGER_ENTRY_REQUIRED_TRANSFER)); } } protected AssetPaymentService getAssetPaymentService() { return SpringContext.getBean(AssetPaymentService.class); } }