/* * 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.purap.service; import static org.kuali.kfs.sys.fixture.UserNameFixture.appleton; import static org.kuali.kfs.sys.fixture.UserNameFixture.kfs; import static org.kuali.kfs.sys.fixture.UserNameFixture.parke; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.kuali.kfs.module.purap.PurapConstants; import org.kuali.kfs.module.purap.PurapConstants.PurapDocTypeCodes; import org.kuali.kfs.module.purap.businessobject.PurApAccountingLine; import org.kuali.kfs.module.purap.businessobject.PurApItem; import org.kuali.kfs.module.purap.businessobject.PurApSummaryItem; import org.kuali.kfs.module.purap.businessobject.RequisitionItem; import org.kuali.kfs.module.purap.document.PaymentRequestDocument; import org.kuali.kfs.module.purap.document.PurchasingAccountsPayableDocument; import org.kuali.kfs.module.purap.document.RequisitionDocument; import org.kuali.kfs.module.purap.document.VendorCreditMemoDocument; import org.kuali.kfs.module.purap.document.service.PurapService; import org.kuali.kfs.module.purap.fixture.PurapAccountingServiceFixture; import org.kuali.kfs.module.purap.fixture.RequisitionDocumentFixture; import org.kuali.kfs.module.purap.util.SummaryAccount; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.businessobject.SourceAccountingLine; import org.kuali.kfs.sys.context.KualiTestBase; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.rice.core.api.util.type.KualiDecimal; import org.kuali.rice.coreservice.framework.parameter.ParameterService; import org.kuali.rice.krad.util.GlobalVariables; @ConfigureContext(session = kfs) public class PurapAccountingServiceTest extends KualiTestBase { private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PurapAccountingServiceTest.class); private PurapAccountingService purapAccountingService; private PurapService purapService; private ParameterService parameterService; @Override protected void setUp() throws Exception { super.setUp(); if(purapAccountingService == null) { purapAccountingService = SpringContext.getBean(PurapAccountingService.class); } if(purapService == null) { purapService = SpringContext.getBean(PurapService.class); } if(parameterService == null) { parameterService = SpringContext.getBean(ParameterService.class); } } @Override protected void tearDown() throws Exception { super.tearDown(); } /* * Tests of generateAccountDistributionForProration(List<SourceAccountingLine> accounts, KualiDecimal totalAmount, Integer percentScale, Class clazz) */ /** * Used by tests of generateAccountDistributionForProration and related methods to make comparisons between * the percentages given by the resulting distributed accounts and the percentages that we think should be * correct for those lines. * * @param distributedAccounts A List of the PurApAccountingLines that result from the distribution to be tested. * @param correctPercents A List of percents we think should be correct, in BigDecimal format */ private void comparePercentages(List<PurApAccountingLine> distributedAccounts, List<BigDecimal> correctPercents) { for(int i = 0; i < distributedAccounts.size(); i++) { PurApAccountingLine line = distributedAccounts.get(i); BigDecimal percent = line.getAccountLinePercent(); assertTrue(percent.floatValue() == correctPercents.get(i).floatValue()); } } public void testGenerateAccountDistributionForProration_OneAcctGood() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.PREQ_PRORATION_ONE_ACCOUNT; List<PurApAccountingLine> distributedAccounts = purapAccountingService.generateAccountDistributionForProration( fixture.getSourceAccountingLineList(), fixture.getTotalAmount(), fixture.getPercentScale(), fixture.getAccountClass()); List<BigDecimal> correctPercents = new ArrayList<BigDecimal>(); correctPercents.add(0,new BigDecimal("100")); assertEquals(distributedAccounts.size(),correctPercents.size()); comparePercentages(distributedAccounts, correctPercents); } public void testGenerateAccountDistributionForProration_TwoAcctGood() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.PREQ_PRORATION_TWO_ACCOUNTS; List<PurApAccountingLine> distributedAccounts = purapAccountingService.generateAccountDistributionForProration( fixture.getSourceAccountingLineList(), fixture.getTotalAmount(), fixture.getPercentScale(), fixture.getAccountClass()); List<BigDecimal> correctPercents = new ArrayList<BigDecimal>(); correctPercents.add(0,new BigDecimal("50")); correctPercents.add(1,new BigDecimal("50")); assertEquals(distributedAccounts.size(),correctPercents.size()); comparePercentages(distributedAccounts, correctPercents); } public void testGenerateAccountDistributionForProration_ThreeAccountGood() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.PREQ_PRORATION_THIRDS; List<PurApAccountingLine> distributedAccounts = purapAccountingService.generateAccountDistributionForProration( fixture.getSourceAccountingLineList(), fixture.getTotalAmount(), fixture.getPercentScale(), fixture.getAccountClass()); List<BigDecimal> correctPercents = new ArrayList<BigDecimal>(); correctPercents.add(0,new BigDecimal("33")); correctPercents.add(1,new BigDecimal("33")); correctPercents.add(2,new BigDecimal("34")); assertEquals(distributedAccounts.size(),correctPercents.size()); comparePercentages(distributedAccounts, correctPercents); } /* * Tests of generateAccountDistributionForProrationWithZeroTotal(PurchasingAccountsPayableDocument purapdoc) */ @ConfigureContext(session = appleton, shouldCommitTransactions=true) public void testGenerateAccountDistributionForProrationWithZeroTotal_OneAcct() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.PREQ_PRORATION_ONE_ACCOUNT_ZERO_TOTAL; PurchasingAccountsPayableDocument preq = fixture.generatePaymentRequestDocument_OneItem(); List<PurApAccountingLine> distributedAccounts = null; try { distributedAccounts = purapAccountingService.generateAccountDistributionForProrationWithZeroTotal(preq); } catch (RuntimeException re) { fail(re.toString()); } List<BigDecimal> correctPercents = new ArrayList<BigDecimal>(); correctPercents.add(0,new BigDecimal("100")); assertEquals(distributedAccounts.size(),correctPercents.size()); comparePercentages(distributedAccounts, correctPercents); } @ConfigureContext(session = appleton, shouldCommitTransactions=true) public void testGenerateAccountDistributionForProrationWithZeroTotal_TwoAcct() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.PREQ_PRORATION_TWO_ACCOUNTS_ZERO_TOTAL; PurchasingAccountsPayableDocument preq = fixture.generatePaymentRequestDocument_OneItem(); List<PurApAccountingLine> distributedAccounts = null; try { distributedAccounts = purapAccountingService.generateAccountDistributionForProrationWithZeroTotal(preq); } catch (RuntimeException re) { fail(re.toString()); } List<BigDecimal> correctPercents = new ArrayList<BigDecimal>(); correctPercents.add(0,new BigDecimal("50")); correctPercents.add(1,new BigDecimal("50")); assertEquals(distributedAccounts.size(),correctPercents.size()); comparePercentages(distributedAccounts, correctPercents); } @ConfigureContext(session = appleton, shouldCommitTransactions=true) public void testGenerateAccountDistributionForProrationWithZeroTotal_ThreeAccount() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.PREQ_PRORATION_THIRDS_ZERO_TOTAL; PurchasingAccountsPayableDocument preq = fixture.generatePaymentRequestDocument_OneItem(); List<PurApAccountingLine> distributedAccounts = null; try { distributedAccounts = purapAccountingService.generateAccountDistributionForProrationWithZeroTotal(preq); } catch (RuntimeException re) { fail(re.toString()); } List<BigDecimal> correctPercents = new ArrayList<BigDecimal>(); correctPercents.add(0,new BigDecimal("33.33")); correctPercents.add(1,new BigDecimal("33.33")); correctPercents.add(2,new BigDecimal("33.34")); assertEquals(distributedAccounts.size(),correctPercents.size()); comparePercentages(distributedAccounts, correctPercents); } /* * Tests of generateSummaryAccounts(PurchasingAccountsPayableDocument document) */ /** * Used by tests of generateSummaryAccounts and related methods to marshall the comparisons of the accounts * and items of the generated summary accounts. * * @param fixture The PurapAccountingServiceFixture * @param document A PurchasingAccountsPayableDocument generated from the fixture. */ private void makePerAccountComparisons(PurapAccountingServiceFixture fixture, PurchasingAccountsPayableDocument doc) { int itemCount = doc.getItems().size(); List<SummaryAccount> accounts = purapAccountingService.generateSummaryAccounts(doc); List<SourceAccountingLine> originalSourceAccounts = fixture.getSourceAccountingLineList(); assertEquals(accounts.size(),originalSourceAccounts.size()); for(int i = 0; i < originalSourceAccounts.size(); i++) { SummaryAccount account = accounts.get(i); SourceAccountingLine sourceAccount = account.getAccount(); compareSourceAccounts(sourceAccount, originalSourceAccounts.get(i)); List<PurApSummaryItem> summaryItems = account.getItems(); assertTrue(summaryItems.size() <= itemCount); } } /** * Compares SourceAccounts to see whether those fields which are displayed in the SummaryAccount tab are * faithfully represented, with the exception of the Amount, which changes. * * @param sourceAccount The generated SourceAccountingLine * @param correctSourceAccount The SourceAccountingLine which we think should contain correct values */ private void compareSourceAccounts(SourceAccountingLine sourceAccount, SourceAccountingLine correctSourceAccount) { Map source = sourceAccount.getValuesMap(); Map correct = correctSourceAccount.getValuesMap(); assertEquals(source.get("chartOfAccountsCode"),correct.get("chartOfAccountsCode")); assertEquals(source.get("accountNumber"),correct.get("accountNumber")); assertEquals(source.get("subAccountNumber"),correct.get("subAccountNumber")); assertEquals(source.get("financialObjectCode"),correct.get("financialObjectCode")); assertEquals(source.get("financialSubObjectCode"),correct.get("financialSubObjectCode")); assertEquals(source.get("projectCode"),correct.get("projectCode")); assertEquals(source.get("organizationReferenceId"),correct.get("organizationReferenceId")); assertEquals(source.get("organizationDocumentNumber"),correct.get("organizationDocumentNumber")); } @ConfigureContext(session = parke, shouldCommitTransactions=true) public void testGenerateSummaryAccounts_OneRequisitionAccountOneItemWithPositiveTotal() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_PRORATION_ONE_ACCOUNT; PurchasingAccountsPayableDocument doc = fixture.generateRequisitionDocument_OneItem(); makePerAccountComparisons(fixture, doc); } @ConfigureContext(session = parke, shouldCommitTransactions=true) public void testGenerateSummaryAccounts_OneRequisitionAccountTwoItemsWithPositiveTotal() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_PRORATION_ONE_ACCOUNT; PurchasingAccountsPayableDocument doc = fixture.generateRequisitionDocument_TwoItems(); makePerAccountComparisons(fixture, doc); } /*public void testGenerateSummaryAccounts_TwoRequisitionAccountsTwoItems_OneEach_WithPositiveTotal() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_PRORATION_TWO_ACCOUNTS; PurchasingAccountsPayableDocument doc = fixture.generateRequisitionDocument_TwoItems(); //TODO: Failing. Needs work. makePerAccountComparisons(fixture, doc); }*/ @ConfigureContext(session = appleton, shouldCommitTransactions=true) public void testGenerateSummaryAccounts_OnePREQAccountOneItemWithPositiveTotal() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.PREQ_PRORATION_ONE_ACCOUNT; PurchasingAccountsPayableDocument doc = fixture.generatePaymentRequestDocument_OneItem(); makePerAccountComparisons(fixture, doc); } @ConfigureContext(session = appleton, shouldCommitTransactions=true) public void testGenerateSummaryAccounts_OnePREQAccountTwoItemsWithPositiveTotal() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.PREQ_PRORATION_ONE_ACCOUNT; PurchasingAccountsPayableDocument doc = fixture.generatePaymentRequestDocument_TwoItems(); makePerAccountComparisons(fixture, doc); } /* * Tests of generateSummaryAccountsWithNoZeroTotals(PurchasingAccountsPayableDocument document) */ /* * Tests of generateSummaryAccountsWithNoZeroTotalsNoUseTax(PurchasingAccountsPayableDocument document) */ /* * Tests of generateSummary(List<PurApItem> items) */ /** * Asserts that, for each original source account, there is exactly one source account in the summary, regardless * of whether there is more than one instance of this account in the original. * * @param sourceLines The List<SourceAccountingLine> from after the summary * @param originalSourceAccounts The original List<SourceAccountingLine> */ private void checkAccountConsolidation(List<SourceAccountingLine> sourceLines, List<SourceAccountingLine> originalSourceAccounts) { for(int i = 0; i < sourceLines.size(); i++) { SourceAccountingLine originalSourceAccount = originalSourceAccounts.get(i); boolean containsOneAccount = false; for( SourceAccountingLine sourceAccount : sourceLines ) { if ( StringUtils.equals(sourceAccount.getAccountNumber(), originalSourceAccount.getAccountNumber())) { if (containsOneAccount == false) { containsOneAccount = true; } else { fail(); } } } assertTrue(containsOneAccount); } } public void testGenerateSummary_OneItem_OneAccount() { //TestUtils.setSystemParameter(Document.class,PurapParameterConstants.ENABLE_SALES_TAX_IND,"Y"); PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_SUMMARY_ONE_ITEM_ONE_ACCOUNT; List<SourceAccountingLine> originalSourceAccounts = fixture.getSourceAccountingLineList(); List<PurApItem> items = fixture.getItems(); List<SourceAccountingLine> sourceLines = purapAccountingService.generateSummary(items); assertEquals(sourceLines.size(),originalSourceAccounts.size()); checkAccountConsolidation(sourceLines,originalSourceAccounts); } public void testGenerateSummary_OneItem_TwoAccounts() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_SUMMARY_ONE_ITEM_TWO_ACCOUNTS; List<SourceAccountingLine> originalSourceAccounts = fixture.getSourceAccountingLineList(); List<PurApItem> items = fixture.getItems(); List<SourceAccountingLine> sourceLines = purapAccountingService.generateSummary(items); assertEquals(sourceLines.size(),originalSourceAccounts.size()); checkAccountConsolidation(sourceLines,originalSourceAccounts); } public void testGenerateSummary_TwoItems_OneAccount() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_SUMMARY_TWO_ITEMS_ONE_ACCOUNT; List<SourceAccountingLine> originalSourceAccounts = fixture.getSourceAccountingLineList(); List<PurApItem> items = fixture.getItems(); List<SourceAccountingLine> sourceLines = purapAccountingService.generateSummary(items); assertEquals(sourceLines.size(),originalSourceAccounts.size()); checkAccountConsolidation(sourceLines,originalSourceAccounts); } /* * Tests of generateSummaryWithNoZeroTotals(List<PurApItem> items) */ public void testGenerateSummaryWithNoZeroTotals_OneItem_OneAccount() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_SUMMARY_ONE_ITEM_ONE_ACCOUNT; List<SourceAccountingLine> originalSourceAccounts = fixture.getSourceAccountingLineList(); List<PurApItem> items = fixture.getItems(); List<SourceAccountingLine> sourceLines = purapAccountingService.generateSummaryWithNoZeroTotals(items); assertEquals(sourceLines.size(),originalSourceAccounts.size()); checkAccountConsolidation(sourceLines,originalSourceAccounts); } public void testGenerateSummaryWithNoZeroTotals_OneItem_TwoAccounts() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_SUMMARY_ONE_ITEM_TWO_ACCOUNTS; List<SourceAccountingLine> originalSourceAccounts = fixture.getSourceAccountingLineList(); List<PurApItem> items = fixture.getItems(); List<SourceAccountingLine> sourceLines = purapAccountingService.generateSummaryWithNoZeroTotals(items); assertEquals(sourceLines.size(),originalSourceAccounts.size()); checkAccountConsolidation(sourceLines,originalSourceAccounts); } public void testGenerateSummaryWithNoZeroTotals_TwoItems_OneAccount() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_SUMMARY_TWO_ITEMS_ONE_ACCOUNT; List<SourceAccountingLine> originalSourceAccounts = fixture.getSourceAccountingLineList(); List<PurApItem> items = fixture.getItems(); List<SourceAccountingLine> sourceLines = purapAccountingService.generateSummaryWithNoZeroTotals(items); assertEquals(sourceLines.size(),originalSourceAccounts.size()); checkAccountConsolidation(sourceLines,originalSourceAccounts); } /* * Tests of generateSummaryWithNoZeroTotalsNoUseTax(List<PurApItem> items) */ public void testGenerateSummaryWithNoZeroTotalsNoUseTax_OneItem_OneAccount() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_SUMMARY_ONE_ITEM_ONE_ACCOUNT; List<SourceAccountingLine> originalSourceAccounts = fixture.getSourceAccountingLineList(); List<PurApItem> items = fixture.getItems(); GlobalVariables.getUserSession().setBackdoorUser("parke"); RequisitionDocumentFixture reqFixture = RequisitionDocumentFixture.REQ_ONLY_REQUIRED_FIELDS; RequisitionDocument req = reqFixture.createRequisitionDocument(); GlobalVariables.getUserSession().setBackdoorUser("kfs"); for(PurApItem item : items) { item.setPurapDocument(req); } List<SourceAccountingLine> sourceLines = purapAccountingService.generateSummaryWithNoZeroTotalsNoUseTax(items); assertEquals(sourceLines.size(),originalSourceAccounts.size()); checkAccountConsolidation(sourceLines,originalSourceAccounts); } public void testGenerateSummaryWithNoZeroTotalsNoUseTax_OneItem_TwoAccounts() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_SUMMARY_ONE_ITEM_TWO_ACCOUNTS; List<SourceAccountingLine> originalSourceAccounts = fixture.getSourceAccountingLineList(); List<PurApItem> items = fixture.getItems(); GlobalVariables.getUserSession().setBackdoorUser("parke"); RequisitionDocumentFixture reqFixture = RequisitionDocumentFixture.REQ_ONLY_REQUIRED_FIELDS; RequisitionDocument req = reqFixture.createRequisitionDocument(); GlobalVariables.getUserSession().setBackdoorUser("kfs"); for(PurApItem item : items) { item.setPurapDocument(req); } List<SourceAccountingLine> sourceLines = purapAccountingService.generateSummaryWithNoZeroTotalsNoUseTax(items); assertEquals(sourceLines.size(),originalSourceAccounts.size()); checkAccountConsolidation(sourceLines,originalSourceAccounts); } public void testGenerateSummaryWithNoZeroTotalsNoUseTax_TwoItems_OneAccount() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_SUMMARY_TWO_ITEMS_ONE_ACCOUNT; List<SourceAccountingLine> originalSourceAccounts = fixture.getSourceAccountingLineList(); List<PurApItem> items = fixture.getItems(); GlobalVariables.getUserSession().setBackdoorUser("parke"); RequisitionDocumentFixture reqFixture = RequisitionDocumentFixture.REQ_ONLY_REQUIRED_FIELDS; RequisitionDocument req = reqFixture.createRequisitionDocument(); GlobalVariables.getUserSession().setBackdoorUser("kfs"); for(PurApItem item : items) { item.setPurapDocument(req); } List<SourceAccountingLine> sourceLines = purapAccountingService.generateSummaryWithNoZeroTotalsNoUseTax(items); assertEquals(sourceLines.size(),originalSourceAccounts.size()); checkAccountConsolidation(sourceLines,originalSourceAccounts); } /* * Tests of generateSummaryWithNoZeroTotalsUsingAlternateAmount(List<PurApItem> items) */ public void testGenerateSummaryWithNoZeroTotalsUsingAlternateAmount_OneItem_OneAccount() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_SUMMARY_ONE_ITEM_ONE_ACCOUNT; List<SourceAccountingLine> originalSourceAccounts = fixture.getSourceAccountingLineList(); List<PurApItem> items = fixture.getItems(); GlobalVariables.getUserSession().setBackdoorUser("parke"); RequisitionDocumentFixture reqFixture = RequisitionDocumentFixture.REQ_ONLY_REQUIRED_FIELDS; RequisitionDocument req = reqFixture.createRequisitionDocument(); GlobalVariables.getUserSession().setBackdoorUser("kfs"); for(PurApItem item : items) { item.setPurapDocument(req); } List<SourceAccountingLine> sourceLines = purapAccountingService.generateSummaryWithNoZeroTotalsUsingAlternateAmount(items); assertEquals(sourceLines.size(),originalSourceAccounts.size()); checkAccountConsolidation(sourceLines,originalSourceAccounts); } public void testGenerateSummaryWithNoZeroTotalsUsingAlternateAmount_OneItem_TwoAccounts() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_SUMMARY_ONE_ITEM_TWO_ACCOUNTS; List<SourceAccountingLine> originalSourceAccounts = fixture.getSourceAccountingLineList(); List<PurApItem> items = fixture.getItems(); GlobalVariables.getUserSession().setBackdoorUser("parke"); RequisitionDocumentFixture reqFixture = RequisitionDocumentFixture.REQ_ONLY_REQUIRED_FIELDS; RequisitionDocument req = reqFixture.createRequisitionDocument(); GlobalVariables.getUserSession().setBackdoorUser("kfs"); for(PurApItem item : items) { item.setPurapDocument(req); } List<SourceAccountingLine> sourceLines = purapAccountingService.generateSummaryWithNoZeroTotalsUsingAlternateAmount(items); assertEquals(sourceLines.size(),originalSourceAccounts.size()); checkAccountConsolidation(sourceLines,originalSourceAccounts); } public void testGenerateSummaryWithNoZeroTotalsUsingAlternateAmount_TwoItems_OneAccount() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_SUMMARY_TWO_ITEMS_ONE_ACCOUNT; List<SourceAccountingLine> originalSourceAccounts = fixture.getSourceAccountingLineList(); List<PurApItem> items = fixture.getItems(); GlobalVariables.getUserSession().setBackdoorUser("parke"); RequisitionDocumentFixture reqFixture = RequisitionDocumentFixture.REQ_ONLY_REQUIRED_FIELDS; RequisitionDocument req = reqFixture.createRequisitionDocument(); GlobalVariables.getUserSession().setBackdoorUser("kfs"); for(PurApItem item : items) { item.setPurapDocument(req); } List<SourceAccountingLine> sourceLines = purapAccountingService.generateSummaryWithNoZeroTotalsUsingAlternateAmount(items); assertEquals(sourceLines.size(),originalSourceAccounts.size()); checkAccountConsolidation(sourceLines,originalSourceAccounts); } /* * Tests of generateSummaryExcludeItemTypes(List<PurApItem> items, Set excludedItemTypeCodes) */ /* * Tests of generateSummaryExcludeItemTypesAndNoZeroTotals(List<PurApItem> items, Set excludedItemTypeCodes) */ /* * Tests of generateSummaryIncludeItemTypesAndNoZeroTotals(List<PurApItem> items, Set includedItemTypeCodes) */ /* * Tests of updateAccountAmounts(PurchasingAccountsPayableDocument document) */ @ConfigureContext(session = appleton) public void testUpdateAccountAmounts_BeforeFullEntry_PercentToAmount() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.PREQ_PRORATION_THIRDS; PurchasingAccountsPayableDocument preq = fixture.generatePaymentRequestDocument_OneItem(); purapAccountingService.updateAccountAmounts(preq); assertFalse(preq.getItems().get(0).getTotalAmount().isZero()); } @ConfigureContext(session = appleton) public void testUpdateAccountAmounts_BeforeFullEntry_AmountNotToPercent() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.PREQ_PRORATION_THIRDS; PurchasingAccountsPayableDocument preq = fixture.generatePaymentRequestDocument_OneItem(); purapAccountingService.updateAccountAmounts(preq); PurApItem item = preq.getItems().get(0); int i = 0; boolean orResult = false; for (PurApAccountingLine correctLine : fixture.getPurApAccountingLineList()) { PurApAccountingLine line = item.getSourceAccountingLines().get(i++); if(!line.getAccountLinePercent().equals(correctLine.getAccountLinePercent())) { orResult = true; break; } } assertFalse(orResult); } @ConfigureContext(session = appleton) public void testUpdateAccountAmounts_AfterFullEntry_AmountToPercent() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.PREQ_PRORATION_THIRDS; PurchasingAccountsPayableDocument preq = fixture.generatePaymentRequestDocument_OneItem(); preq.setApplicationDocumentStatus(PurapConstants.PaymentRequestStatuses.APPDOC_DEPARTMENT_APPROVED); purapAccountingService.updateAccountAmounts(preq); PurApItem item = preq.getItems().get(0); int i = 0; for (PurApAccountingLine correctLine : fixture.getPurApAccountingLineList()) { PurApAccountingLine line = item.getSourceAccountingLines().get(i++); assertTrue(line.getAccountLinePercent().equals(correctLine.getAccountLinePercent())); } } @ConfigureContext(session = appleton) public void testUpdateAccountAmounts_AfterFullEntry_PercentNotToAmount() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.PREQ_PRORATION_THIRDS; PurchasingAccountsPayableDocument preq = fixture.generatePaymentRequestDocument_OneItem(); preq.setApplicationDocumentStatus(PurapConstants.PaymentRequestStatuses.APPDOC_DEPARTMENT_APPROVED); preq.getItems().get(0).setExtendedPrice(KualiDecimal.ZERO); purapAccountingService.updateAccountAmounts(preq); assertTrue(preq.getItems().get(0).getTotalAmount().isZero()); } /* * Tests of updateItemAccountAmounts(PurApItem item) */ @ConfigureContext(session = parke) public void testUpdateItemAccountAmounts_OneAccount() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_PRORATION_ONE_ACCOUNT; RequisitionDocument req = fixture.generateRequisitionDocument_OneItem(); RequisitionItem item = (RequisitionItem)req.getItems().get(0); KualiDecimal total = item.getTotalAmount(); purapAccountingService.updateItemAccountAmounts(item); PurApAccountingLine line = item.getSourceAccountingLines().get(0); assertTrue(line.getAmount().compareTo(total) == 0); } @ConfigureContext(session = parke) public void testUpdateItemAccountAmounts_TwoAccounts() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_PRORATION_TWO_ACCOUNTS; RequisitionDocument req = fixture.generateRequisitionDocument_OneItem(); RequisitionItem item = (RequisitionItem)req.getItems().get(0); KualiDecimal total = item.getTotalAmount(); purapAccountingService.updateItemAccountAmounts(item); PurApAccountingLine line = item.getSourceAccountingLines().get(0); assertTrue(line.getAmount().compareTo(total.divide(new KualiDecimal(2))) == 0); } @ConfigureContext(session = parke) public void testUpdateItemAccountAmounts_ThreeAccounts() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.REQ_PRORATION_THIRDS; RequisitionDocument req = fixture.generateRequisitionDocument_OneItem(); RequisitionItem item = (RequisitionItem)req.getItems().get(0); KualiDecimal total = item.getTotalAmount(); purapAccountingService.updateItemAccountAmounts(item); PurApAccountingLine line1 = item.getSourceAccountingLines().get(0); assertTrue(line1.getAmount().compareTo(total.divide(new KualiDecimal(3))) == 0); } /* * Tests of deleteSummaryAccounts(Integer purapDocumentIdentifier) */ @ConfigureContext(session = appleton, shouldCommitTransactions=true) public void testDeleteSummaryAccounts_PaymentRequest() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.PREQ_PRORATION_ONE_ACCOUNT; PaymentRequestDocument preq = fixture.generatePaymentRequestDocument_OneItem(); List<SummaryAccount> summaryAccounts = purapAccountingService.generateSummaryAccounts(preq); assertNotNull(summaryAccounts); purapAccountingService.deleteSummaryAccounts(preq.getPurapDocumentIdentifier(), PurapDocTypeCodes.PAYMENT_REQUEST_DOCUMENT); assertNull(purapAccountingService.getAccountsPayableSummaryAccounts(preq.getPurapDocumentIdentifier(), PurapDocTypeCodes.PAYMENT_REQUEST_DOCUMENT)); } @ConfigureContext(session = appleton, shouldCommitTransactions=true) public void testDeleteSummaryAccounts_CreditMemo() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.CREDIT_MEMO_ONE_ACCOUNT; VendorCreditMemoDocument vcm = fixture.generateVendorCreditMemoDocument_OneItem(); List<SummaryAccount> summaryAccounts = purapAccountingService.generateSummaryAccounts(vcm); assertNotNull(summaryAccounts); purapAccountingService.deleteSummaryAccounts(vcm.getPurapDocumentIdentifier(), PurapDocTypeCodes.PAYMENT_REQUEST_DOCUMENT); assertNull(purapAccountingService.getAccountsPayableSummaryAccounts(vcm.getPurapDocumentIdentifier(), PurapDocTypeCodes.PAYMENT_REQUEST_DOCUMENT)); } /* * Tests of generateSourceAccountsForVendorRemit(PurchasingAccountsPayableDocument document) */ /* * Tests of convertMoneyToPercent(PaymentRequestDocument pr) */ /*@ConfigureContext(session = appleton) public void testConvertMoneyToPercent_OneItem_OneAccount() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.PREQ_PRORATION_ONE_ACCOUNT; PaymentRequestDocument preq = fixture.generatePaymentRequestDocument_OneItem(); ((PurchasingAccountsPayableDocument)preq).getItems().get(0).setExtendedPrice(new KualiDecimal(32)); purapAccountingService.convertMoneyToPercent(preq); PurchasingAccountsPayableDocument doc = (PurchasingAccountsPayableDocument)preq; BigDecimal percent = doc.getItems().get(0).getSourceAccountingLines().get(0).getAccountLinePercent(); try { assertTrue(percent.compareTo(new BigDecimal(100)) == 0); } catch (ArithmeticException ae) { fail("The conversion is not exact." + ae.toString()); } }*/ /*@ConfigureContext(session = appleton) public void testConvertMoneyToPercent_OneItem_TwoAccounts() { PurapAccountingServiceFixture fixture = PurapAccountingServiceFixture.PREQ_PRORATION_TWO_ACCOUNTS; PaymentRequestDocument preq = fixture.generatePaymentRequestDocument_OneItem(); purapAccountingService.convertMoneyToPercent(preq); PurchasingAccountsPayableDocument doc = (PurchasingAccountsPayableDocument)preq; BigDecimal percent = doc.getItems().get(0).getSourceAccountingLines().get(0).getAccountLinePercent(); try { assertTrue(percent.compareTo(new BigDecimal(50)) == 0); } catch (ArithmeticException ae) { fail("The conversion is not exact." + ae.toString()); } }*/ /* * Tests of generateUseTaxAccount(PurchasingAccountsPayableDocument document) */ }