/*
* 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.util.Iterator;
import org.kuali.kfs.gl.businessobject.Transaction;
import org.kuali.kfs.sys.KFSConstants;
import org.kuali.kfs.sys.service.ReportWriterService;
import org.kuali.rice.core.api.util.type.KualiDecimal;
/**
* This class prints out a transaction listing report. This is different from a transaction report in that this lists all the
* transactions and a total amount. The transaction report shows the primary key from transactions and a list of messages for each
* one.
*/
public class TransactionListingReport {
private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(TransactionListingReport.class);
protected int transactionCount;
protected KualiDecimal debitTotal;
protected KualiDecimal creditTotal;
protected KualiDecimal budgetTotal;
public TransactionListingReport() {
super();
transactionCount = 0;
debitTotal = KualiDecimal.ZERO;
creditTotal = KualiDecimal.ZERO;
budgetTotal = KualiDecimal.ZERO;
}
/**
* This will write a transaction to the report. It collects data in order for this to be a listing, hence it is the developers responsibility
* to call generateStatistics after printing the listing.
*
* @param reportWriterService destination report
* @param transaction Transaction to be printed
*/
public void generateReport(ReportWriterService reportWriterService, Transaction transaction) {
LOG.debug("generateReport() started");
if (transaction != null) {
if (transactionCount == 0) {
reportWriterService.writeTableHeader(transaction);
}
reportWriterService.writeTableRow(transaction);
if (KFSConstants.GL_DEBIT_CODE.equals(transaction.getTransactionDebitCreditCode())) {
debitTotal = debitTotal.add(transaction.getTransactionLedgerEntryAmount());
}
if (KFSConstants.GL_CREDIT_CODE.equals(transaction.getTransactionDebitCreditCode())) {
creditTotal = creditTotal.add(transaction.getTransactionLedgerEntryAmount());
}
if (!KFSConstants.GL_CREDIT_CODE.equals(transaction.getTransactionDebitCreditCode()) && !KFSConstants.GL_DEBIT_CODE.equals(transaction.getTransactionDebitCreditCode())) {
budgetTotal = budgetTotal.add(transaction.getTransactionLedgerEntryAmount());
}
transactionCount++;
}
}
/**
* Writes the statistics to the report that were collected by this class
*
* @param reportWriterService destination report
*/
public void generateStatistics(ReportWriterService reportWriterService) {
LOG.debug("generateStatistics() started");
reportWriterService.writeStatisticLine("Total Transactions %,9d", transactionCount);
reportWriterService.writeStatisticLine("Total Debit Amount %,9.2f", debitTotal.doubleValue());
reportWriterService.writeStatisticLine("Total Credit Amount %,9.2f", creditTotal.doubleValue());
reportWriterService.writeStatisticLine("Total Budget Amount %,9.2f", budgetTotal.doubleValue());
}
/**
* This will generate a report on the transactions passed to it
*
* @param reportWriterService destination report
* @param transactions Transactions sorted properly
*/
public void generateReport(ReportWriterService reportWriterService, Iterator<? extends Transaction> transactions) {
LOG.debug("generateReport() started");
if (transactions != null) {
while (transactions.hasNext()) {
Transaction tran = (Transaction) transactions.next();
this.generateReport(reportWriterService, tran);
}
}
this.generateStatistics(reportWriterService);
}
}