/*
* 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.batch.service.impl;
import java.util.Iterator;
import org.kuali.kfs.gl.businessobject.OriginEntryFull;
import org.kuali.kfs.sys.KFSConstants;
import org.kuali.rice.core.api.util.type.KualiDecimal;
/**
* This class holds information about the sums of a list of origin entries. This information includes
* total credit amount, debit amount, other amount, number of credit entries, number of debit entries,
* and number of "other" entries
*/
public class OriginEntryTotals {
protected KualiDecimal creditAmount;
protected KualiDecimal debitAmount;
protected KualiDecimal otherAmount;
protected int numCreditEntries;
protected int numDebitEntries;
protected int numOtherEntries;
public OriginEntryTotals() {
creditAmount = KualiDecimal.ZERO;
debitAmount = KualiDecimal.ZERO;
otherAmount = KualiDecimal.ZERO;
numCreditEntries = 0;
numDebitEntries = 0;
numOtherEntries = 0;
}
/**
* Gets the creditAmount attribute.
*
* @return Returns the creditAmount.
*/
public KualiDecimal getCreditAmount() {
return creditAmount;
}
/**
* Sets the creditAmount attribute value.
*
* @param creditAmount The creditAmount to set.
*/
public void setCreditAmount(KualiDecimal creditAmount) {
this.creditAmount = creditAmount;
}
/**
* Gets the debitAmount attribute.
*
* @return Returns the debitAmount.
*/
public KualiDecimal getDebitAmount() {
return debitAmount;
}
/**
* Sets the debitAmount attribute value.
*
* @param debitAmount The debitAmount to set.
*/
public void setDebitAmount(KualiDecimal debitAmount) {
this.debitAmount = debitAmount;
}
/**
* Gets the numCreditEntries attribute.
*
* @return Returns the numCreditEntries.
*/
public int getNumCreditEntries() {
return numCreditEntries;
}
/**
* Sets the numCreditEntries attribute value.
*
* @param numCreditEntries The numCreditEntries to set.
*/
public void setNumCreditEntries(int numCreditEntries) {
this.numCreditEntries = numCreditEntries;
}
/**
* Gets the numDebitEntries attribute.
*
* @return Returns the numDebitEntries.
*/
public int getNumDebitEntries() {
return numDebitEntries;
}
/**
* Sets the numDebitEntries attribute value.
*
* @param numDebitEntries The numDebitEntries to set.
*/
public void setNumDebitEntries(int numDebitEntries) {
this.numDebitEntries = numDebitEntries;
}
/**
* Gets the numOtherEntries attribute.
*
* @return Returns the numOtherEntries.
*/
public int getNumOtherEntries() {
return numOtherEntries;
}
/**
* Sets the numOtherEntries attribute value.
*
* @param numOtherEntries The numOtherEntries to set.
*/
public void setNumOtherEntries(int numOtherEntries) {
this.numOtherEntries = numOtherEntries;
}
/**
* Gets the otherAmount attribute.
*
* @return Returns the otherAmount.
*/
public KualiDecimal getOtherAmount() {
return otherAmount;
}
/**
* Sets the otherAmount attribute value.
*
* @param otherAmount The otherAmount to set.
*/
public void setOtherAmount(KualiDecimal otherAmount) {
this.otherAmount = otherAmount;
}
/**
* This method adds amount from origin entries and increments number totals for the appropriate type
* (i.e. credit, debit, or other).
*
* @param entries
*/
public void addToTotals(Iterator<OriginEntryFull> entries) {
while (entries.hasNext()) {
OriginEntryFull originEntry = entries.next();
if (KFSConstants.GL_CREDIT_CODE.equals(originEntry.getTransactionDebitCreditCode())) {
creditAmount = creditAmount.add(originEntry.getTransactionLedgerEntryAmount());
numCreditEntries++;
}
else if (KFSConstants.GL_DEBIT_CODE.equals(originEntry.getTransactionDebitCreditCode())) {
debitAmount = debitAmount.add(originEntry.getTransactionLedgerEntryAmount());
numDebitEntries++;
}
else {
otherAmount = otherAmount.add(originEntry.getTransactionLedgerEntryAmount());
numOtherEntries++;
;
}
}
}
/**
* This method adds amount from origin entry and increments number totals for the appropriate type (i.e. credit, debit, or
* other).
*
* @param entry
*/
public void addToTotals(OriginEntryFull originEntry) {
if (KFSConstants.GL_CREDIT_CODE.equals(originEntry.getTransactionDebitCreditCode())) {
creditAmount = creditAmount.add(originEntry.getTransactionLedgerEntryAmount());
numCreditEntries++;
}
else if (KFSConstants.GL_DEBIT_CODE.equals(originEntry.getTransactionDebitCreditCode())) {
debitAmount = debitAmount.add(originEntry.getTransactionLedgerEntryAmount());
numDebitEntries++;
}
else {
otherAmount = otherAmount.add(originEntry.getTransactionLedgerEntryAmount());
numOtherEntries++;
}
}
/**
* Adds up the values in the parameter totals object to the corresponding fields in this object
*
* @param anotherTotals another OriginEntryTotals to add to this OriginEntryTotals totals
*/
public void incorporateTotals(OriginEntryTotals anotherTotals) {
creditAmount = creditAmount.add(anotherTotals.creditAmount);
debitAmount = debitAmount.add(anotherTotals.debitAmount);
otherAmount = otherAmount.add(anotherTotals.otherAmount);
numCreditEntries += anotherTotals.numCreditEntries;
numDebitEntries += anotherTotals.numDebitEntries;
numOtherEntries += anotherTotals.numOtherEntries;
}
}