001 /*
002 * Copyright 2011 The Kuali Foundation.
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.kfs.gl.report;
017
018 import java.text.MessageFormat;
019 import java.util.ArrayList;
020 import java.util.Collections;
021 import java.util.LinkedHashMap;
022 import java.util.List;
023 import java.util.Map;
024
025 import org.kuali.kfs.gl.businessobject.OriginEntryInformation;
026 import org.kuali.kfs.gl.businessobject.PosterOutputSummaryBalanceTypeFiscalYearAndPeriodTotal;
027 import org.kuali.kfs.gl.businessobject.PosterOutputSummaryBalanceTypeFiscalYearTotal;
028 import org.kuali.kfs.gl.businessobject.PosterOutputSummaryBalanceTypeTotal;
029 import org.kuali.kfs.gl.businessobject.PosterOutputSummaryEntry;
030 import org.kuali.kfs.gl.businessobject.PosterOutputSummaryTotal;
031 import org.kuali.kfs.gl.businessobject.Transaction;
032 import org.kuali.kfs.gl.service.PosterOutputSummaryService;
033 import org.kuali.kfs.sys.KFSKeyConstants;
034 import org.kuali.kfs.sys.context.SpringContext;
035 import org.kuali.kfs.sys.service.ReportWriterService;
036 import org.kuali.rice.kns.service.KualiConfigurationService;
037
038 /**
039 * A class which builds up the data and then reports the PosterOutputSummary report
040 */
041 public class PosterOutputSummaryReport {
042 private Map<String, PosterOutputSummaryEntry> posterOutputSummaryEntries;
043 private PosterOutputSummaryTotal posterOutputSummaryTotal;
044 private PosterOutputSummaryService posterOutputSummaryService;
045
046 /**
047 * Constructs a PosterOutputSummaryReport
048 */
049 public PosterOutputSummaryReport() {
050 posterOutputSummaryTotal = new PosterOutputSummaryTotal();
051 posterOutputSummaryEntries = new LinkedHashMap<String, PosterOutputSummaryEntry>();
052 }
053
054 /**
055 * Summarizes a transaction for this report
056 * @param transaction the transaction to summarize
057 */
058 public void summarize(Transaction transaction) {
059 getPosterOutputSummaryService().summarize(transaction, posterOutputSummaryEntries);
060 }
061
062 /**
063 * Summarizes an origin entry for this report
064 * @param originEntry the origin entry to summarize
065 */
066 public void summarize(OriginEntryInformation originEntry) {
067 getPosterOutputSummaryService().summarize(originEntry, posterOutputSummaryEntries);
068 }
069
070 /**
071 * Writes the report to the given reportWriterService
072 * @param reportWriterService the reportWriterService to write the report to
073 */
074 public void writeReport(ReportWriterService reportWriterService) {
075 List<PosterOutputSummaryEntry> entries = new ArrayList<PosterOutputSummaryEntry>(posterOutputSummaryEntries.values());
076
077 if (entries.size() > 0) {
078 Collections.sort(entries, getPosterOutputSummaryService().getEntryComparator());
079 final KualiConfigurationService configurationService = SpringContext.getBean(KualiConfigurationService.class);
080
081 String currentBalanceTypeCode = entries.get(0).getBalanceTypeCode();
082 PosterOutputSummaryBalanceTypeTotal balanceTypeTotal = new PosterOutputSummaryBalanceTypeTotal(currentBalanceTypeCode);
083 Integer currentFiscalYear = entries.get(0).getUniversityFiscalYear();
084 PosterOutputSummaryBalanceTypeFiscalYearTotal balanceTypeFiscalYearTotal = new PosterOutputSummaryBalanceTypeFiscalYearTotal(currentBalanceTypeCode, currentFiscalYear);
085 String currentFiscalPeriod = entries.get(0).getFiscalPeriodCode();
086 PosterOutputSummaryBalanceTypeFiscalYearAndPeriodTotal balanceTypeFiscalYearAndPeriodTotal = new PosterOutputSummaryBalanceTypeFiscalYearAndPeriodTotal(currentBalanceTypeCode, currentFiscalYear, currentFiscalPeriod);
087
088 final String titleMessage = configurationService.getPropertyString(KFSKeyConstants.MESSAGE_REPORT_POSTER_OUTPUT_SUMMARY_TITLE_LINE);
089 String formattedTitle = MessageFormat.format(titleMessage, entries.get(0).getUniversityFiscalYear().toString(), entries.get(0).getBalanceTypeCode());
090
091 reportWriterService.writeFormattedMessageLine(formattedTitle);
092 reportWriterService.writeTableHeader(entries.get(0));
093
094 for (PosterOutputSummaryEntry entry : entries) {
095 if (!entry.getBalanceTypeCode().equals(currentBalanceTypeCode)) {
096 reportWriterService.writeTableRow(balanceTypeFiscalYearAndPeriodTotal);
097 reportWriterService.writeTableRow(balanceTypeFiscalYearTotal);
098 reportWriterService.writeTableRow(balanceTypeTotal);
099
100 balanceTypeFiscalYearAndPeriodTotal = new PosterOutputSummaryBalanceTypeFiscalYearAndPeriodTotal(entry.getBalanceTypeCode(), entry.getUniversityFiscalYear(), entry.getFiscalPeriodCode());
101 balanceTypeFiscalYearTotal = new PosterOutputSummaryBalanceTypeFiscalYearTotal(entry.getBalanceTypeCode(), entry.getUniversityFiscalYear());
102 balanceTypeTotal = new PosterOutputSummaryBalanceTypeTotal(entry.getBalanceTypeCode());
103 currentBalanceTypeCode = entry.getBalanceTypeCode();
104 currentFiscalYear = entry.getUniversityFiscalYear();
105 currentFiscalPeriod = entry.getFiscalPeriodCode();
106
107 // new top-level header for balance types
108 reportWriterService.pageBreak();
109 formattedTitle = MessageFormat.format(titleMessage, currentFiscalYear.toString(), currentBalanceTypeCode);
110 reportWriterService.writeFormattedMessageLine(formattedTitle);
111 reportWriterService.writeTableHeader(entry);
112 } else if (!entry.getUniversityFiscalYear().equals(currentFiscalYear)) {
113 reportWriterService.writeTableRow(balanceTypeFiscalYearAndPeriodTotal);
114 reportWriterService.writeTableRow(balanceTypeFiscalYearTotal);
115
116 balanceTypeFiscalYearAndPeriodTotal = new PosterOutputSummaryBalanceTypeFiscalYearAndPeriodTotal(entry.getBalanceTypeCode(), entry.getUniversityFiscalYear(), entry.getFiscalPeriodCode());
117 balanceTypeFiscalYearTotal = new PosterOutputSummaryBalanceTypeFiscalYearTotal(entry.getBalanceTypeCode(), entry.getUniversityFiscalYear());
118 currentFiscalYear = entry.getUniversityFiscalYear();
119 currentFiscalPeriod = entry.getFiscalPeriodCode();
120 } else if (!entry.getFiscalPeriodCode().equals(currentFiscalPeriod)) {
121 reportWriterService.writeTableRow(balanceTypeFiscalYearAndPeriodTotal);
122
123 balanceTypeFiscalYearAndPeriodTotal = new PosterOutputSummaryBalanceTypeFiscalYearAndPeriodTotal(entry.getBalanceTypeCode(), entry.getUniversityFiscalYear(), entry.getFiscalPeriodCode());
124 currentFiscalPeriod = entry.getFiscalPeriodCode();
125 }
126
127 reportWriterService.writeTableRow(entry);
128 balanceTypeFiscalYearAndPeriodTotal.addAmount(entry);
129 balanceTypeFiscalYearTotal.addAmount(entry);
130 balanceTypeTotal.addAmount(entry);
131 posterOutputSummaryTotal.addAmount(entry);
132 }
133
134 reportWriterService.writeTableRow(balanceTypeFiscalYearAndPeriodTotal);
135 reportWriterService.writeTableRow(balanceTypeFiscalYearTotal);
136 reportWriterService.writeTableRow(balanceTypeTotal);
137 reportWriterService.writeNewLines(1);
138 reportWriterService.writeTableRow(posterOutputSummaryTotal);
139 }
140 }
141
142 /**
143 * @return an implementation of the PosterOutputSummaryService
144 */
145 public PosterOutputSummaryService getPosterOutputSummaryService() {
146 if (posterOutputSummaryService == null) {
147 posterOutputSummaryService = SpringContext.getBean(PosterOutputSummaryService.class);
148 }
149
150 return posterOutputSummaryService;
151 }
152 }