/* * 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.gl.report; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.kuali.kfs.gl.businessobject.OriginEntryInformation; import org.kuali.kfs.gl.businessobject.PosterOutputSummaryBalanceTypeFiscalYearAndPeriodTotal; import org.kuali.kfs.gl.businessobject.PosterOutputSummaryBalanceTypeFiscalYearTotal; import org.kuali.kfs.gl.businessobject.PosterOutputSummaryBalanceTypeTotal; import org.kuali.kfs.gl.businessobject.PosterOutputSummaryEntry; import org.kuali.kfs.gl.businessobject.PosterOutputSummaryTotal; import org.kuali.kfs.gl.businessobject.Transaction; import org.kuali.kfs.gl.service.PosterOutputSummaryService; import org.kuali.kfs.sys.KFSKeyConstants; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.service.ReportWriterService; import org.kuali.rice.core.api.config.property.ConfigurationService; /** * A class which builds up the data and then reports the PosterOutputSummary report */ public class PosterOutputSummaryReport { private Map<String, PosterOutputSummaryEntry> posterOutputSummaryEntries; private PosterOutputSummaryTotal posterOutputSummaryTotal; private PosterOutputSummaryService posterOutputSummaryService; /** * Constructs a PosterOutputSummaryReport */ public PosterOutputSummaryReport() { posterOutputSummaryTotal = new PosterOutputSummaryTotal(); posterOutputSummaryEntries = new LinkedHashMap<String, PosterOutputSummaryEntry>(); } /** * Summarizes a transaction for this report * @param transaction the transaction to summarize */ public void summarize(Transaction transaction) { getPosterOutputSummaryService().summarize(transaction, posterOutputSummaryEntries); } /** * Summarizes an origin entry for this report * @param originEntry the origin entry to summarize */ public void summarize(OriginEntryInformation originEntry) { getPosterOutputSummaryService().summarize(originEntry, posterOutputSummaryEntries); } /** * Writes the report to the given reportWriterService * @param reportWriterService the reportWriterService to write the report to */ public void writeReport(ReportWriterService reportWriterService) { List<PosterOutputSummaryEntry> entries = new ArrayList<PosterOutputSummaryEntry>(posterOutputSummaryEntries.values()); if (entries.size() > 0) { Collections.sort(entries, getPosterOutputSummaryService().getEntryComparator()); final ConfigurationService configurationService = SpringContext.getBean(ConfigurationService.class); String currentBalanceTypeCode = entries.get(0).getBalanceTypeCode(); PosterOutputSummaryBalanceTypeTotal balanceTypeTotal = new PosterOutputSummaryBalanceTypeTotal(currentBalanceTypeCode); Integer currentFiscalYear = entries.get(0).getUniversityFiscalYear(); PosterOutputSummaryBalanceTypeFiscalYearTotal balanceTypeFiscalYearTotal = new PosterOutputSummaryBalanceTypeFiscalYearTotal(currentBalanceTypeCode, currentFiscalYear); String currentFiscalPeriod = entries.get(0).getFiscalPeriodCode(); PosterOutputSummaryBalanceTypeFiscalYearAndPeriodTotal balanceTypeFiscalYearAndPeriodTotal = new PosterOutputSummaryBalanceTypeFiscalYearAndPeriodTotal(currentBalanceTypeCode, currentFiscalYear, currentFiscalPeriod); final String titleMessage = configurationService.getPropertyValueAsString(KFSKeyConstants.MESSAGE_REPORT_POSTER_OUTPUT_SUMMARY_TITLE_LINE); String formattedTitle = MessageFormat.format(titleMessage, entries.get(0).getUniversityFiscalYear().toString(), entries.get(0).getBalanceTypeCode()); reportWriterService.writeFormattedMessageLine(formattedTitle); reportWriterService.writeTableHeader(entries.get(0)); for (PosterOutputSummaryEntry entry : entries) { if (!entry.getBalanceTypeCode().equals(currentBalanceTypeCode)) { reportWriterService.writeTableRow(balanceTypeFiscalYearAndPeriodTotal); reportWriterService.writeTableRow(balanceTypeFiscalYearTotal); reportWriterService.writeTableRow(balanceTypeTotal); balanceTypeFiscalYearAndPeriodTotal = new PosterOutputSummaryBalanceTypeFiscalYearAndPeriodTotal(entry.getBalanceTypeCode(), entry.getUniversityFiscalYear(), entry.getFiscalPeriodCode()); balanceTypeFiscalYearTotal = new PosterOutputSummaryBalanceTypeFiscalYearTotal(entry.getBalanceTypeCode(), entry.getUniversityFiscalYear()); balanceTypeTotal = new PosterOutputSummaryBalanceTypeTotal(entry.getBalanceTypeCode()); currentBalanceTypeCode = entry.getBalanceTypeCode(); currentFiscalYear = entry.getUniversityFiscalYear(); currentFiscalPeriod = entry.getFiscalPeriodCode(); // new top-level header for balance types reportWriterService.pageBreak(); formattedTitle = MessageFormat.format(titleMessage, currentFiscalYear.toString(), currentBalanceTypeCode); reportWriterService.writeFormattedMessageLine(formattedTitle); reportWriterService.writeTableHeader(entry); } else if (!entry.getUniversityFiscalYear().equals(currentFiscalYear)) { reportWriterService.writeTableRow(balanceTypeFiscalYearAndPeriodTotal); reportWriterService.writeTableRow(balanceTypeFiscalYearTotal); balanceTypeFiscalYearAndPeriodTotal = new PosterOutputSummaryBalanceTypeFiscalYearAndPeriodTotal(entry.getBalanceTypeCode(), entry.getUniversityFiscalYear(), entry.getFiscalPeriodCode()); balanceTypeFiscalYearTotal = new PosterOutputSummaryBalanceTypeFiscalYearTotal(entry.getBalanceTypeCode(), entry.getUniversityFiscalYear()); currentFiscalYear = entry.getUniversityFiscalYear(); currentFiscalPeriod = entry.getFiscalPeriodCode(); } else if (!entry.getFiscalPeriodCode().equals(currentFiscalPeriod)) { reportWriterService.writeTableRow(balanceTypeFiscalYearAndPeriodTotal); balanceTypeFiscalYearAndPeriodTotal = new PosterOutputSummaryBalanceTypeFiscalYearAndPeriodTotal(entry.getBalanceTypeCode(), entry.getUniversityFiscalYear(), entry.getFiscalPeriodCode()); currentFiscalPeriod = entry.getFiscalPeriodCode(); } reportWriterService.writeTableRow(entry); balanceTypeFiscalYearAndPeriodTotal.addAmount(entry); balanceTypeFiscalYearTotal.addAmount(entry); balanceTypeTotal.addAmount(entry); posterOutputSummaryTotal.addAmount(entry); } reportWriterService.writeTableRow(balanceTypeFiscalYearAndPeriodTotal); reportWriterService.writeTableRow(balanceTypeFiscalYearTotal); reportWriterService.writeTableRow(balanceTypeTotal); reportWriterService.writeNewLines(1); reportWriterService.writeTableRow(posterOutputSummaryTotal); } } /** * @return an implementation of the PosterOutputSummaryService */ public PosterOutputSummaryService getPosterOutputSummaryService() { if (posterOutputSummaryService == null) { posterOutputSummaryService = SpringContext.getBean(PosterOutputSummaryService.class); } return posterOutputSummaryService; } }