/*
* 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.cab;
import java.util.List;
import org.kuali.kfs.gl.businessobject.Entry;
import org.kuali.kfs.module.cab.businessobject.GlAccountLineGroup;
import org.kuali.kfs.sys.KFSConstants;
import org.kuali.kfs.sys.context.KualiTestBase;
import org.kuali.rice.core.api.util.type.KualiDecimal;
public class GlAccountLineGroupTest extends KualiTestBase {
@Override
protected void setUp() throws Exception {
}
public void testCombineEntry() throws Exception {
GlAccountLineGroup first = createAccountLineGroup(2008, "BL", "BL002323", "--", "7000", null, "01", "1001", null, "D", new KualiDecimal(100));
Entry second = createEntry(2008, "BL", "BL002323", "--", "7000", null, "01", "1001", null, "D", new KualiDecimal(200));
assertTrue(first.equals(new GlAccountLineGroup(second)));
first.combineEntry(second);
assertEquals("D", first.getTargetEntry().getTransactionDebitCreditCode());
assertEquals(new KualiDecimal(300), first.getTargetEntry().getTransactionLedgerEntryAmount());
assertEquals(new KualiDecimal(300), first.getAmount());
Entry third = createEntry(2008, "BL", "BL002323", "--", "7000", null, "01", "1001", null, "C", new KualiDecimal(200));
assertTrue(first.equals(new GlAccountLineGroup(third)));
first.combineEntry(third);
assertEquals("D", first.getTargetEntry().getTransactionDebitCreditCode());
assertEquals(new KualiDecimal(100), first.getTargetEntry().getTransactionLedgerEntryAmount());
assertEquals(new KualiDecimal(100), first.getAmount());
Entry fourth = createEntry(2008, "BL", "BL002323", "--", "7000", null, "01", "1001", null, "C", new KualiDecimal(200));
assertTrue(first.equals(new GlAccountLineGroup(fourth)));
first.combineEntry(fourth);
assertEquals("C", first.getTargetEntry().getTransactionDebitCreditCode());
assertEquals(new KualiDecimal(100), first.getTargetEntry().getTransactionLedgerEntryAmount());
assertEquals(new KualiDecimal(-100), first.getAmount());
Entry fifth = createEntry(2008, "BL", "BL002323", "--", "7000", null, "01", "1001", null, "D", new KualiDecimal(200));
assertTrue(first.equals(new GlAccountLineGroup(fifth)));
first.combineEntry(fifth);
assertEquals("D", first.getTargetEntry().getTransactionDebitCreditCode());
assertEquals(new KualiDecimal(100), first.getTargetEntry().getTransactionLedgerEntryAmount());
assertEquals(new KualiDecimal(100), first.getAmount());
List<Entry> sourceEntries = first.getSourceEntries();
assertEquals(5, sourceEntries.size());
KualiDecimal srcAmount = KualiDecimal.ZERO;
for (Entry entry : sourceEntries) {
if (KFSConstants.GL_CREDIT_CODE.equals(entry.getTransactionDebitCreditCode())) {
srcAmount = srcAmount.add(entry.getTransactionLedgerEntryAmount().negated());
}
else {
srcAmount = srcAmount.add(entry.getTransactionLedgerEntryAmount());
}
}
assertEquals(new KualiDecimal(100), srcAmount);
assertTrue(first.getAmount().equals(srcAmount));
}
private GlAccountLineGroup createAccountLineGroup(Integer i, String chartCode, String acctNum, String subAcctNum, String objCd, String subObjCd, String fiscalPrd, String docNum, String refDocNum, String dbtCrdtCode, KualiDecimal amount) {
Entry entry = createEntry(i, chartCode, acctNum, subAcctNum, objCd, subObjCd, fiscalPrd, docNum, refDocNum, dbtCrdtCode, amount);
GlAccountLineGroup first = new GlAccountLineGroup(entry);
return first;
}
private Entry createEntry(Integer i, String chartCode, String acctNum, String subAcctNum, String objCd, String subObjCd, String fiscalPrd, String docNum, String refDocNum, String dbtCrdtCode, KualiDecimal amount) {
Entry entry = new Entry();
entry.setUniversityFiscalYear(i);
entry.setChartOfAccountsCode(chartCode);
entry.setAccountNumber(acctNum);
entry.setSubAccountNumber(subAcctNum);
entry.setFinancialObjectCode(objCd);
entry.setFinancialSubObjectCode(subObjCd);
entry.setUniversityFiscalPeriodCode(fiscalPrd);
entry.setDocumentNumber(docNum);
entry.setReferenceFinancialDocumentNumber(refDocNum);
entry.setTransactionDebitCreditCode(dbtCrdtCode);
entry.setTransactionLedgerEntryAmount(amount);
return entry;
}
}