/* * 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.tem.document.web.struts; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.kuali.kfs.module.tem.businessobject.TravelAdvance; import org.kuali.kfs.module.tem.document.TaxableRamificationDocument; import org.kuali.kfs.module.tem.document.TravelAuthorizationDocument; import org.kuali.kfs.module.tem.document.service.TravelDocumentService; import org.kuali.kfs.sys.DynamicCollectionComparator; import org.kuali.kfs.sys.DynamicCollectionComparator.SortOrder; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.document.web.struts.FinancialSystemTransactionalDocumentActionBase; import org.kuali.rice.kew.api.exception.WorkflowException; import org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase; import org.kuali.rice.krad.bo.Note; import org.kuali.rice.krad.document.Document; import org.kuali.rice.krad.service.DocumentService; import org.kuali.rice.krad.service.NoteService; import org.kuali.rice.krad.util.ObjectUtils; public class TaxableRamificationAction extends FinancialSystemTransactionalDocumentActionBase { private final static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(TaxableRamificationAction.class); /** * @see org.kuali.rice.kns.web.struts.action.KualiDocumentActionBase#loadDocument(org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase) */ @Override protected void loadDocument(KualiDocumentFormBase kualiDocumentFormBase) throws WorkflowException { super.loadDocument(kualiDocumentFormBase); TaxableRamificationForm taxRamificationForm = (TaxableRamificationForm) kualiDocumentFormBase; this.refreshRelatedDocuments(taxRamificationForm); this.refreshRelatedDocumentNotes(taxRamificationForm); } /** * refresh the related documents */ protected void refreshRelatedDocuments(TaxableRamificationForm taxRamificationForm) { Map<String, List<Document>> relatedDocuments = taxRamificationForm.getRelatedDocuments(); if (ObjectUtils.isNotNull(relatedDocuments) && !relatedDocuments.isEmpty()) { return; } try { TaxableRamificationDocument taxRamificationDocument = taxRamificationForm.getTaxableRamificationDocument(); TravelAdvance travelAdvance = taxRamificationDocument.getTravelAdvance(); if (ObjectUtils.isNotNull(travelAdvance)) { String travelDocumentNumber = travelAdvance.getDocumentNumber(); relatedDocuments = getTravelDocumentService().getDocumentsRelatedTo(travelDocumentNumber); this.addTravelAuthorizationDocumentToRelated(relatedDocuments, travelAdvance); taxRamificationForm.setRelatedDocuments(relatedDocuments); } } catch (WorkflowException ex) { LOG.error("Failed to get related documents" + ex); throw new RuntimeException("Failed to get related documents", ex); } } /** * add the related travel authorization document to the related document list */ protected void addTravelAuthorizationDocumentToRelated(Map<String, List<Document>> relatedDocuments, TravelAdvance travelAdvance) throws WorkflowException{ String travelDocumentNumber = travelAdvance.getDocumentNumber(); Document travelAuthorizationDocument = SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(travelDocumentNumber); String docTypeName = getDataDictionaryService().getDocumentTypeNameByClass(TravelAuthorizationDocument.class); List<Document> documents = relatedDocuments.get(docTypeName); if (documents == null) { documents = new ArrayList<Document>(); } documents.add(travelAuthorizationDocument); relatedDocuments.put(docTypeName, documents); } /** * refresh the related document notes */ protected void refreshRelatedDocumentNotes(TaxableRamificationForm taxRamificationForm) { Map<String, List<Document>> relatedDocuments = taxRamificationForm.getRelatedDocuments(); if (ObjectUtils.isNull(relatedDocuments) || relatedDocuments.isEmpty()) { return; } Map<String, List<Note>> relatedDocumentNotes = taxRamificationForm.getRelatedDocumentNotes(); if (ObjectUtils.isNotNull(relatedDocumentNotes) && !relatedDocumentNotes.isEmpty()) { return; } relatedDocumentNotes = new HashMap<String, List<Note>>(); for (List<Document> documents : relatedDocuments.values()) { for (Document document : documents) { List<Note> listOfNotes = SpringContext.getBean(NoteService.class).getByRemoteObjectId(document.getDocumentHeader().getObjectId()); DynamicCollectionComparator.sort(listOfNotes, SortOrder.DESC, "noteIdentifier"); relatedDocumentNotes.put(document.getDocumentNumber(), listOfNotes); } } taxRamificationForm.setRelatedDocumentNotes(relatedDocumentNotes); } // get travel document service protected TravelDocumentService getTravelDocumentService() { return SpringContext.getBean(TravelDocumentService.class); } }