/* * 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.ar.document.web.struts; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.kuali.kfs.integration.cg.ContractsAndGrantsBillingAward; import org.kuali.kfs.module.ar.ArConstants; import org.kuali.kfs.module.ar.businessobject.ContractsGrantsCollectionActivityInvoiceDetail; import org.kuali.kfs.module.ar.document.ContractsGrantsCollectionActivityDocument; import org.kuali.kfs.module.ar.document.ContractsGrantsInvoiceDocument; import org.kuali.kfs.module.ar.document.service.ContractsGrantsCollectionActivityDocumentService; import org.kuali.kfs.sys.KFSConstants; import org.kuali.kfs.sys.KFSPropertyConstants; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.document.web.struts.FinancialSystemTransactionalDocumentActionBase; import org.kuali.kfs.sys.service.SegmentedLookupResultsService; import org.kuali.rice.core.api.datetime.DateTimeService; import org.kuali.rice.kew.api.exception.WorkflowException; import org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase; import org.kuali.rice.krad.bo.PersistableBusinessObject; import org.kuali.rice.krad.service.BusinessObjectService; import org.kuali.rice.krad.util.GlobalVariables; import org.kuali.rice.krad.util.ObjectUtils; /** * Action file for Collection Activity Document. */ public class ContractsGrantsCollectionActivityDocumentAction extends FinancialSystemTransactionalDocumentActionBase { protected static transient ContractsGrantsCollectionActivityDocumentService contractsGrantsCollectionActivityDocumentService; protected static transient BusinessObjectService businessObjectService; protected static transient SegmentedLookupResultsService segmentedLookupResultsService; protected static transient DateTimeService dateTimeService; private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ContractsGrantsCollectionActivityDocumentAction.class); /** * @see org.kuali.rice.kns.web.struts.action.KualiDocumentActionBase#createDocument(org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase) */ @Override protected void createDocument(KualiDocumentFormBase kualiDocumentFormBase) throws WorkflowException { super.createDocument(kualiDocumentFormBase); final ContractsGrantsCollectionActivityDocumentForm cgCollectionActivityForm = (ContractsGrantsCollectionActivityDocumentForm) kualiDocumentFormBase; final ContractsGrantsCollectionActivityDocument document = cgCollectionActivityForm.getCollectionActivityDocument(); document.setActivityDate(getDateTimeService().getCurrentSqlDate()); if (!StringUtils.isBlank(cgCollectionActivityForm.getSelectedProposalNumber())) { document.setProposalNumber(Long.parseLong(cgCollectionActivityForm.getSelectedProposalNumber())); refreshAward(document); } } /** * This method deletes an invoice from the list. * * @param mapping action mapping * @param form action form * @param request * @param response * @return action forward * @throws Exception */ public ActionForward deleteInvoice(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ContractsGrantsCollectionActivityDocumentForm colActDocForm = (ContractsGrantsCollectionActivityDocumentForm) form; ContractsGrantsCollectionActivityDocument colActDoc = colActDocForm.getCollectionActivityDocument(); int indexOfLineToDelete = getLineToDelete(request); colActDoc.deleteInvoiceDetail(indexOfLineToDelete); return mapping.findForward(KFSConstants.MAPPING_BASIC); } @Override public ActionForward refresh(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { super.refresh(mapping, form, request, response); ContractsGrantsCollectionActivityDocumentForm collectionActivityDocumentForm = (ContractsGrantsCollectionActivityDocumentForm) form; ContractsGrantsCollectionActivityDocument colActDoc = collectionActivityDocumentForm.getCollectionActivityDocument(); Collection<PersistableBusinessObject> rawValues = null; // If multiple asset lookup was used to select the assets, then.... if (StringUtils.equals(KFSConstants.MULTIPLE_VALUE, collectionActivityDocumentForm.getRefreshCaller())) { String lookupResultsSequenceNumber = collectionActivityDocumentForm.getLookupResultsSequenceNumber(); refreshInvoices(colActDoc, lookupResultsSequenceNumber); } if (StringUtils.equals(ArConstants.AWARD_LOOKUP_IMPL, collectionActivityDocumentForm.getRefreshCaller())) { refreshAward(colActDoc); } return mapping.findForward(KFSConstants.MAPPING_BASIC); } /** * Refreshes the multi-value lookup invoices * @param colActDoc the documet the invoice information should appear on * @param lookupResultsSequenceNumber the sequence number of the invoices returned from the lookup * @throws Exception if the invoices from the lookup cannot be retrieved for some reason */ protected void refreshInvoices(ContractsGrantsCollectionActivityDocument colActDoc, String lookupResultsSequenceNumber) throws Exception { Set<String> selectedIds = getSegmentedLookupResultsService().retrieveSetOfSelectedObjectIds(lookupResultsSequenceNumber, GlobalVariables.getUserSession().getPerson().getPrincipalId()); if (ObjectUtils.isNotNull(selectedIds) && CollectionUtils.isNotEmpty(selectedIds)) { for (String invoiceDocumentNumber: selectedIds) { Map<String, String> criteria = new HashMap<String, String>(); criteria.put(KFSPropertyConstants.DOCUMENT_NUMBER, invoiceDocumentNumber); ContractsGrantsInvoiceDocument cgInvoiceDocument = getBusinessObjectService().findByPrimaryKey(ContractsGrantsInvoiceDocument.class, criteria); if (ObjectUtils.isNotNull(cgInvoiceDocument)) { ContractsGrantsCollectionActivityInvoiceDetail invoiceDetail = new ContractsGrantsCollectionActivityInvoiceDetail(); invoiceDetail.setBillingPeriod(cgInvoiceDocument.getInvoiceGeneralDetail().getBillingPeriod()); invoiceDetail.setBillingDate(cgInvoiceDocument.getBillingDate()); invoiceDetail.setInvoiceNumber(cgInvoiceDocument.getDocumentNumber()); invoiceDetail.setDocumentNumber(colActDoc.getDocumentNumber()); if (!colActDoc.getInvoiceDetails().contains(invoiceDetail)) { colActDoc.getInvoiceDetails().add(invoiceDetail); } } } } } /** * Refreshes information on the C&G Collection Activity document related to the award * @param colActDoc the collection activity document */ protected void refreshAward(ContractsGrantsCollectionActivityDocument colActDoc) { if (ObjectUtils.isNotNull(colActDoc.getProposalNumber())) { ContractsAndGrantsBillingAward award = getContractsGrantsCollectionActivityDocumentService().retrieveAwardByProposalNumber(colActDoc.getProposalNumber()); if (ObjectUtils.isNotNull(award)) { colActDoc.setAgencyNumber(award.getAgencyNumber()); colActDoc.setAgencyName(award.getAgency().getFullName()); if (ObjectUtils.isNotNull(award.getAgency().getCustomer())) { colActDoc.setCustomerNumber(award.getAgency().getCustomer().getCustomerNumber()); colActDoc.setCustomerName(award.getAgency().getCustomer().getCustomerName()); } } else { colActDoc.setAgencyNumber("Award not found"); colActDoc.setAgencyName(KFSConstants.EMPTY_STRING); colActDoc.setCustomerNumber(KFSConstants.EMPTY_STRING); colActDoc.setCustomerName(KFSConstants.EMPTY_STRING); } } } public static ContractsGrantsCollectionActivityDocumentService getContractsGrantsCollectionActivityDocumentService() { if (contractsGrantsCollectionActivityDocumentService == null) { contractsGrantsCollectionActivityDocumentService = SpringContext.getBean(ContractsGrantsCollectionActivityDocumentService.class); } return contractsGrantsCollectionActivityDocumentService; } public static SegmentedLookupResultsService getSegmentedLookupResultsService() { if (segmentedLookupResultsService == null) { segmentedLookupResultsService = SpringContext.getBean(SegmentedLookupResultsService.class); } return segmentedLookupResultsService; } public static DateTimeService getDateTimeService() { if (dateTimeService == null) { dateTimeService = SpringContext.getBean(DateTimeService.class); } return dateTimeService; } }