/*
* 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.ar.document;
import static org.kuali.kfs.sys.fixture.UserNameFixture.khuntley;
import static org.kuali.kfs.sys.fixture.UserNameFixture.wklykins;
import java.sql.Date;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.kuali.kfs.coa.service.AccountingPeriodService;
import org.kuali.kfs.coa.service.ObjectCodeService;
import org.kuali.kfs.integration.cg.ContractAndGrantsProposal;
import org.kuali.kfs.integration.cg.ContractsAndGrantsBillingAward;
import org.kuali.kfs.integration.cg.ContractsAndGrantsBillingAwardAccount;
import org.kuali.kfs.module.ar.ArKeyConstants;
import org.kuali.kfs.module.ar.ArPropertyConstants;
import org.kuali.kfs.module.ar.businessobject.AwardAccountObjectCodeTotalBilled;
import org.kuali.kfs.module.ar.businessobject.ContractsGrantsInvoiceDetail;
import org.kuali.kfs.module.ar.businessobject.CostCategory;
import org.kuali.kfs.module.ar.businessobject.CostCategoryObjectCode;
import org.kuali.kfs.module.ar.businessobject.InvoiceAccountDetail;
import org.kuali.kfs.module.ar.businessobject.InvoiceGeneralDetail;
import org.kuali.kfs.module.ar.dataaccess.AwardAccountObjectCodeTotalBilledDao;
import org.kuali.kfs.module.ar.document.service.ContractsGrantsInvoiceDocumentService;
import org.kuali.kfs.module.ar.document.service.impl.ContractsGrantsInvoiceDocumentServiceImpl;
import org.kuali.kfs.module.ar.fixture.ARAwardAccountFixture;
import org.kuali.kfs.module.ar.fixture.ARAwardFixture;
import org.kuali.kfs.module.ar.fixture.ARProposalFixture;
import org.kuali.kfs.module.ar.fixture.ContractsGrantsInvoiceDetailFixture;
import org.kuali.kfs.module.ar.fixture.ContractsGrantsInvoiceDocumentFixture;
import org.kuali.kfs.module.ar.fixture.InvoiceAccountDetailFixture;
import org.kuali.kfs.module.ar.fixture.InvoiceGeneralDetailFixture;
import org.kuali.kfs.module.ar.service.CostCategoryService;
import org.kuali.kfs.module.ar.service.impl.ContractsGrantsInvoiceCreateDocumentServiceImpl;
import org.kuali.kfs.module.cg.businessobject.Award;
import org.kuali.kfs.module.cg.businessobject.AwardAccount;
import org.kuali.kfs.module.cg.businessobject.Proposal;
import org.kuali.kfs.sys.ConfigureContext;
import org.kuali.kfs.sys.KFSPropertyConstants;
import org.kuali.kfs.sys.context.KualiTestBase;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.kfs.sys.service.OptionsService;
import org.kuali.kfs.sys.service.UniversityDateService;
import org.kuali.kfs.sys.util.ReflectionMap;
import org.kuali.rice.core.api.datetime.DateTimeService;
import org.kuali.rice.core.api.util.type.KualiDecimal;
import org.kuali.rice.krad.service.BusinessObjectService;
import org.kuali.rice.krad.service.DocumentService;
import org.kuali.rice.krad.service.KualiModuleService;
import org.kuali.rice.krad.util.ObjectUtils;
/**
* This class tests the ContractsGrantsInvoiceDocument class
*/
@ConfigureContext(session = khuntley)
public class ContractsGrantsInvoiceDocumentTest extends KualiTestBase {
private BusinessObjectService businessObjectService;
public CostCategory category;
public ContractsGrantsInvoiceDocument contractsGrantsInvoiceDocument;
public ContractsGrantsInvoiceDocumentServiceImpl contractsGrantsInvoiceDocumentServiceImpl;
ContractsGrantsInvoiceCreateDocumentServiceImpl contractsGrantsInvoiceCreateDocumentServiceImpl;
@Override
protected void setUp() throws Exception {
super.setUp();
businessObjectService = SpringContext.getBean(BusinessObjectService.class);
contractsGrantsInvoiceDocumentServiceImpl = new ContractsGrantsInvoiceDocumentServiceImpl();
contractsGrantsInvoiceDocumentServiceImpl.setBusinessObjectService(businessObjectService);
contractsGrantsInvoiceDocumentServiceImpl.setObjectCodeService(SpringContext.getBean(ObjectCodeService.class));
contractsGrantsInvoiceDocumentServiceImpl.setUniversityDateService(SpringContext.getBean(UniversityDateService.class));
contractsGrantsInvoiceDocumentServiceImpl.setOptionsService(SpringContext.getBean(OptionsService.class));
contractsGrantsInvoiceCreateDocumentServiceImpl = new ContractsGrantsInvoiceCreateDocumentServiceImpl();
contractsGrantsInvoiceCreateDocumentServiceImpl.setAccountingPeriodService(SpringContext.getBean(AccountingPeriodService.class));
contractsGrantsInvoiceCreateDocumentServiceImpl.setAwardAccountObjectCodeTotalBilledDao(SpringContext.getBean(AwardAccountObjectCodeTotalBilledDao.class));
contractsGrantsInvoiceCreateDocumentServiceImpl.setBusinessObjectService(businessObjectService);
contractsGrantsInvoiceCreateDocumentServiceImpl.setDateTimeService(SpringContext.getBean(DateTimeService.class));
contractsGrantsInvoiceCreateDocumentServiceImpl.setUniversityDateService(SpringContext.getBean(UniversityDateService.class));
contractsGrantsInvoiceCreateDocumentServiceImpl.setContractsGrantsInvoiceDocumentService(contractsGrantsInvoiceDocumentServiceImpl);
contractsGrantsInvoiceCreateDocumentServiceImpl.setCostCategoryService(SpringContext.getBean(CostCategoryService.class));
contractsGrantsInvoiceCreateDocumentServiceImpl.setOptionsService(SpringContext.getBean(OptionsService.class));
category = new CostCategory();
category.setCategoryCode("testCode");
category.setCategoryName("testName");
CostCategoryObjectCode costCategoryObjectCode = new CostCategoryObjectCode();
costCategoryObjectCode.setCategoryCode("testCode");
costCategoryObjectCode.setChartOfAccountsCode("BL");
costCategoryObjectCode.setFinancialObjectCode("5000");
category.setObjectCodes(new ArrayList<CostCategoryObjectCode>());
category.getObjectCodes().add(costCategoryObjectCode);
contractsGrantsInvoiceDocument = new ContractsGrantsInvoiceDocument();
}
@ConfigureContext(session = wklykins)
public void testUpdateLastBilledDate() {
ContractsGrantsInvoiceDocumentService contractsGrantsInvoiceDocumentService = SpringContext.getBean(ContractsGrantsInvoiceDocumentService.class);
DocumentService documentService = SpringContext.getBean(DocumentService.class);
ContractsGrantsInvoiceDocument contractsGrantsInvoiceDocument_1 = ContractsGrantsInvoiceDocumentFixture.CG_INV_DOC1.createContractsGrantsInvoiceDocument(documentService);
ContractsGrantsInvoiceDocument contractsGrantsInvoiceDocument_2 = ContractsGrantsInvoiceDocumentFixture.CG_INV_DOC1.createContractsGrantsInvoiceDocument(documentService);
ContractAndGrantsProposal proposal = ARProposalFixture.CG_PRPSL1.createProposal();
ContractsAndGrantsBillingAward award = ARAwardFixture.CG_AWARD1.createAward();
award.getActiveAwardAccounts().clear();
ContractsAndGrantsBillingAwardAccount awardAccount_1 = ARAwardAccountFixture.AWD_ACCT_1.createAwardAccount();
ContractsAndGrantsBillingAwardAccount awardAccount_2 = ARAwardAccountFixture.AWD_ACCT_2.createAwardAccount();
List<ContractsAndGrantsBillingAwardAccount> awardAccounts = new ArrayList<ContractsAndGrantsBillingAwardAccount>();
awardAccounts.add(awardAccount_1);
awardAccounts.add(awardAccount_2);
setAwardAccountsToAward(award.getProposalNumber(), awardAccounts);
InvoiceAccountDetail invoiceAccountDetail_1 = InvoiceAccountDetailFixture.INV_ACCT_DTL3.createInvoiceAccountDetail();
List<InvoiceAccountDetail> accountDetails = new ArrayList<InvoiceAccountDetail>();
accountDetails.add(invoiceAccountDetail_1);
contractsGrantsInvoiceDocument_1.setAccountDetails(accountDetails);
accountDetails = new ArrayList<InvoiceAccountDetail>();
InvoiceAccountDetail invoiceAccountDetail_2 = InvoiceAccountDetailFixture.INV_ACCT_DTL4.createInvoiceAccountDetail();
accountDetails.add(invoiceAccountDetail_2);
contractsGrantsInvoiceDocument_2.setAccountDetails(accountDetails);
InvoiceGeneralDetail invoiceGeneralDetail_1 = InvoiceGeneralDetailFixture.INV_GNRL_DTL3.createInvoiceGeneralDetail();
InvoiceGeneralDetail invoiceGeneralDetail_2 = InvoiceGeneralDetailFixture.INV_GNRL_DTL3.createInvoiceGeneralDetail();
invoiceGeneralDetail_1.setAward(award);
invoiceGeneralDetail_2.setAward(award);
// To set last Billed Date to invoice and check if they are being set to award Accounts and award properly.
Date lastBilledDate_1 = Date.valueOf("2011-10-26");
Date lastBilledDate_2 = Date.valueOf("2011-10-27");
invoiceGeneralDetail_1.setLastBilledDate(lastBilledDate_1);
invoiceGeneralDetail_2.setLastBilledDate(lastBilledDate_2);
contractsGrantsInvoiceDocument_1.setInvoiceGeneralDetail(invoiceGeneralDetail_1);
contractsGrantsInvoiceDocument_2.setInvoiceGeneralDetail(invoiceGeneralDetail_2);
// Now there are two invoices, to check combinations of invoices, when one by one go to final and corrected.
// 1. invoice 1 is set to final.
contractsGrantsInvoiceDocument_1.getInvoiceGeneralDetail().setFinalBillIndicator(true);
contractsGrantsInvoiceDocumentService.updateLastBilledDate(contractsGrantsInvoiceDocument_1);
// Now to retrieve the Award Account and check the values.
Map<String, Object> mapKey = new HashMap<String, Object>();
mapKey.put(KFSPropertyConstants.ACCOUNT_NUMBER, awardAccount_1.getAccountNumber());
mapKey.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, awardAccount_1.getChartOfAccountsCode());
mapKey.put(KFSPropertyConstants.PROPOSAL_NUMBER, awardAccount_1.getProposalNumber());
ContractsAndGrantsBillingAwardAccount awdAcct_1 = SpringContext.getBean(KualiModuleService.class).getResponsibleModuleService(ContractsAndGrantsBillingAwardAccount.class).getExternalizableBusinessObject(ContractsAndGrantsBillingAwardAccount.class, mapKey);
mapKey.put(KFSPropertyConstants.ACCOUNT_NUMBER, awardAccount_2.getAccountNumber());
mapKey.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, awardAccount_2.getChartOfAccountsCode());
ContractsAndGrantsBillingAwardAccount awdAcct_2 = SpringContext.getBean(KualiModuleService.class).getResponsibleModuleService(ContractsAndGrantsBillingAwardAccount.class).getExternalizableBusinessObject(ContractsAndGrantsBillingAwardAccount.class, mapKey);
assertEquals(lastBilledDate_1, awdAcct_1.getCurrentLastBilledDate());
assertEquals(null, awdAcct_2.getCurrentLastBilledDate());
assertEquals(null, award.getLastBilledDate());
// 2. invoice 2 is set to final.
contractsGrantsInvoiceDocument_2.getInvoiceGeneralDetail().setFinalBillIndicator(true);
contractsGrantsInvoiceDocumentService.updateLastBilledDate(contractsGrantsInvoiceDocument_2);
mapKey = new HashMap<String, Object>();
mapKey.put(KFSPropertyConstants.ACCOUNT_NUMBER, awardAccount_1.getAccountNumber());
mapKey.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, awardAccount_1.getChartOfAccountsCode());
mapKey.put(KFSPropertyConstants.PROPOSAL_NUMBER, awardAccount_1.getProposalNumber());
awdAcct_1 = SpringContext.getBean(KualiModuleService.class).getResponsibleModuleService(ContractsAndGrantsBillingAwardAccount.class).getExternalizableBusinessObject(ContractsAndGrantsBillingAwardAccount.class, mapKey);
mapKey.put(KFSPropertyConstants.ACCOUNT_NUMBER, awardAccount_2.getAccountNumber());
mapKey.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, awardAccount_2.getChartOfAccountsCode());
awdAcct_2 = SpringContext.getBean(KualiModuleService.class).getResponsibleModuleService(ContractsAndGrantsBillingAwardAccount.class).getExternalizableBusinessObject(ContractsAndGrantsBillingAwardAccount.class, mapKey);
assertEquals(lastBilledDate_1, awdAcct_1.getCurrentLastBilledDate());
assertEquals(lastBilledDate_2, awdAcct_2.getCurrentLastBilledDate());
mapKey.clear();
mapKey.put(KFSPropertyConstants.PROPOSAL_NUMBER, award.getProposalNumber());
contractsGrantsInvoiceDocument_2.getInvoiceGeneralDetail().setAward(null);
award = SpringContext.getBean(KualiModuleService.class).getResponsibleModuleService(ContractsAndGrantsBillingAward.class).getExternalizableBusinessObject(ContractsAndGrantsBillingAward.class, mapKey);
assertEquals(lastBilledDate_1, award.getLastBilledDate());
// 3. invoice 1 or 2 is corrected.
contractsGrantsInvoiceDocument_1.getInvoiceGeneralDetail().setFinalBillIndicator(true);
contractsGrantsInvoiceDocument_1.getFinancialSystemDocumentHeader().setFinancialDocumentInErrorNumber(contractsGrantsInvoiceDocument_2.getDocumentNumber());
contractsGrantsInvoiceDocument_1.isInvoiceReversal();
contractsGrantsInvoiceDocumentService.updateLastBilledDate(contractsGrantsInvoiceDocument_1);
mapKey = new HashMap<String, Object>();
mapKey.put(KFSPropertyConstants.ACCOUNT_NUMBER, awardAccount_1.getAccountNumber());
mapKey.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, awardAccount_1.getChartOfAccountsCode());
mapKey.put(KFSPropertyConstants.PROPOSAL_NUMBER, awardAccount_1.getProposalNumber());
awdAcct_1 = SpringContext.getBean(KualiModuleService.class).getResponsibleModuleService(ContractsAndGrantsBillingAwardAccount.class).getExternalizableBusinessObject(ContractsAndGrantsBillingAwardAccount.class, mapKey);
mapKey.put(KFSPropertyConstants.ACCOUNT_NUMBER, awardAccount_2.getAccountNumber());
mapKey.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, awardAccount_2.getChartOfAccountsCode());
awdAcct_2 = SpringContext.getBean(KualiModuleService.class).getResponsibleModuleService(ContractsAndGrantsBillingAwardAccount.class).getExternalizableBusinessObject(ContractsAndGrantsBillingAwardAccount.class, mapKey);
assertEquals(null, awdAcct_1.getCurrentLastBilledDate());
assertEquals(lastBilledDate_2, awdAcct_2.getCurrentLastBilledDate());
mapKey.clear();
mapKey.put(KFSPropertyConstants.PROPOSAL_NUMBER, award.getProposalNumber());
award = SpringContext.getBean(KualiModuleService.class).getResponsibleModuleService(ContractsAndGrantsBillingAward.class).getExternalizableBusinessObject(ContractsAndGrantsBillingAward.class, mapKey);
assertEquals(null, award.getLastBilledDate());
}
/**
* This method sets values to Award respective to junit testing
*
* @param proposalNumber
* @param fieldValues
*/
private void setAwardAccountsToAward(Long proposalNumber, List<ContractsAndGrantsBillingAwardAccount> awardAccounts) {
// Award and proposal is being saved
Proposal proposal = businessObjectService.findBySinglePrimaryKey(Proposal.class, proposalNumber);
if (ObjectUtils.isNull(proposal)) {
proposal = new Proposal();
proposal.setProposalNumber(proposalNumber);
}
businessObjectService.save(proposal);
Award award = businessObjectService.findBySinglePrimaryKey(Award.class, proposalNumber);
if (ObjectUtils.isNull(award)) {
award = new Award();
award.setProposalNumber(proposalNumber);
}
businessObjectService.save(award);
List<AwardAccount> awdAccts = new ArrayList<AwardAccount>();
for (ContractsAndGrantsBillingAwardAccount awardAccount : awardAccounts) {
Map<String, Object> mapKey = new HashMap<String, Object>();
mapKey.put(KFSPropertyConstants.ACCOUNT_NUMBER, awardAccount.getAccountNumber());
mapKey.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, awardAccount.getChartOfAccountsCode());
mapKey.put(KFSPropertyConstants.PROPOSAL_NUMBER, awardAccount.getProposalNumber());
AwardAccount awdAcct = businessObjectService.findByPrimaryKey(AwardAccount.class, mapKey);
if (ObjectUtils.isNull(awdAcct)) {
awdAcct = new AwardAccount();
awdAcct.setAccountNumber(awardAccount.getAccountNumber());
awdAcct.setChartOfAccountsCode(awardAccount.getChartOfAccountsCode());
awdAcct.setProposalNumber(awardAccount.getProposalNumber());
}
businessObjectService.save(awdAcct);
awdAccts.add(awdAcct);
}
award.setAwardAccounts(awdAccts);
}
public void testInvoiceDetails() {
ContractsAndGrantsBillingAward award = ARAwardFixture.CG_AWARD1.createAward();
InvoiceGeneralDetail invoiceGeneralDetail = new InvoiceGeneralDetail();
invoiceGeneralDetail.setAward(award);
invoiceGeneralDetail.setProposalNumber(award.getProposalNumber());
contractsGrantsInvoiceDocument.setInvoiceGeneralDetail(invoiceGeneralDetail);
ContractsGrantsInvoiceDetail invoiceDetail_1 = ContractsGrantsInvoiceDetailFixture.INV_DTL4.createInvoiceDetail();
ContractsGrantsInvoiceDetail invoiceDetail_2 = ContractsGrantsInvoiceDetailFixture.INV_DTL5.createInvoiceDetail();
ContractsGrantsInvoiceDetail invoiceDetail_3 = ContractsGrantsInvoiceDetailFixture.INV_DTL6.createInvoiceDetail();
List<ContractsGrantsInvoiceDetail> invoiceDetails = new ArrayList<ContractsGrantsInvoiceDetail>();
invoiceDetails.add(invoiceDetail_1);
invoiceDetails.add(invoiceDetail_2);
invoiceDetails.add(invoiceDetail_3);
contractsGrantsInvoiceDocument.setInvoiceDetails(invoiceDetails);
// setup various invoice detail collections on invoice document
List<ContractsGrantsInvoiceDetail> generatedInvoiceDetails = contractsGrantsInvoiceCreateDocumentServiceImpl.generateValuesForCategories(contractsGrantsInvoiceDocument.getDocumentNumber(), contractsGrantsInvoiceDocument.getInvoiceDetailAccountObjectCodes(), new HashMap<String, KualiDecimal>(), new ArrayList<AwardAccountObjectCodeTotalBilled>());
contractsGrantsInvoiceDocument.getInvoiceDetails().addAll(generatedInvoiceDetails);
// all
List<ContractsGrantsInvoiceDetail> allInvoiceDetails = contractsGrantsInvoiceDocument.getInvoiceDetails();
// non-totals
List<ContractsGrantsInvoiceDetail> invoiceDetailsWithoutIdc = contractsGrantsInvoiceDocument.getDirectCostInvoiceDetails();
List<ContractsGrantsInvoiceDetail> invoiceDetailsIdcOnly = contractsGrantsInvoiceDocument.getIndirectCostInvoiceDetails();
List<ContractsGrantsInvoiceDetail> invoiceDetailsWithIdc = contractsGrantsInvoiceDocument.getInvoiceDetails();
// totals
ContractsGrantsInvoiceDetail totalCostInvoiceDetail = contractsGrantsInvoiceDocument.getTotalCostInvoiceDetail();
ContractsGrantsInvoiceDetail totalDirectCostInvoiceDetail = contractsGrantsInvoiceDocument.getTotalDirectCostInvoiceDetail();
ContractsGrantsInvoiceDetail totalInDirectCostInvoiceDetail = contractsGrantsInvoiceDocument.getTotalIndirectCostInvoiceDetail();
// non-totals
assertEquals(12, allInvoiceDetails.size());
assertEquals(11, invoiceDetailsWithoutIdc.size());
assertEquals(1, invoiceDetailsIdcOnly.size());
assertEquals(12, invoiceDetailsWithIdc.size());
// totals
assertNotNull(totalCostInvoiceDetail);
assertEquals(new KualiDecimal(960.00), totalCostInvoiceDetail.getTotalBudget());
assertEquals(new KualiDecimal(1020.00), totalCostInvoiceDetail.getCumulativeExpenditures());
assertEquals(new KualiDecimal(-60.00), totalCostInvoiceDetail.getBudgetRemaining());
assertEquals(new KualiDecimal(0.00), totalCostInvoiceDetail.getTotalPreviouslyBilled());
assertEquals(new KualiDecimal(0.00), totalCostInvoiceDetail.getTotalAmountBilledToDate());
assertEquals(new KualiDecimal(960.00), totalCostInvoiceDetail.getAmountRemainingToBill());
assertNotNull(totalDirectCostInvoiceDetail);
assertEquals(new KualiDecimal(640.00), totalDirectCostInvoiceDetail.getTotalBudget());
assertEquals(new KualiDecimal(680.00), totalDirectCostInvoiceDetail.getCumulativeExpenditures());
assertEquals(new KualiDecimal(-40.00), totalDirectCostInvoiceDetail.getBudgetRemaining());
assertEquals(new KualiDecimal(0.00), totalDirectCostInvoiceDetail.getTotalPreviouslyBilled());
assertEquals(new KualiDecimal(0.00), totalDirectCostInvoiceDetail.getTotalAmountBilledToDate());
assertEquals(new KualiDecimal(640.00), totalDirectCostInvoiceDetail.getAmountRemainingToBill());
assertNotNull(totalInDirectCostInvoiceDetail);
assertEquals(new KualiDecimal(320.00), totalInDirectCostInvoiceDetail.getTotalBudget());
assertEquals(new KualiDecimal(340.00), totalInDirectCostInvoiceDetail.getCumulativeExpenditures());
assertEquals(new KualiDecimal(-20.00), totalInDirectCostInvoiceDetail.getBudgetRemaining());
assertEquals(new KualiDecimal(0.00), totalInDirectCostInvoiceDetail.getTotalPreviouslyBilled());
assertEquals(new KualiDecimal(0.00), totalInDirectCostInvoiceDetail.getTotalAmountBilledToDate());
assertEquals(new KualiDecimal(320.00), totalInDirectCostInvoiceDetail.getAmountRemainingToBill());
}
public void testCheckAwardContractControlAccounts_ValidNoInvoicingOption() throws Exception {
ContractsAndGrantsBillingAward award = ARAwardFixture.CG_AWARD1.createAward();
List<String> errorString = contractsGrantsInvoiceDocumentServiceImpl.checkAwardContractControlAccounts(award);
assertNotNull(errorString);
assertEquals(0, errorString.size());
}
public void testCheckAwardContractControlAccounts_ValidInvoicingByAccount() throws Exception {
ContractsAndGrantsBillingAward award = ARAwardFixture.CG_AWARD_INV_ACCOUNT.createAward();
refreshAccounts(award);
List<String> errorString = contractsGrantsInvoiceDocumentServiceImpl.checkAwardContractControlAccounts(award);
assertNotNull(errorString);
assertEquals(0, errorString.size());
}
public void testCheckAwardContractControlAccounts_ValidInvoicingByContractControlAccount() throws Exception {
ContractsAndGrantsBillingAward award = ARAwardFixture.CG_AWARD_INV_CCA.createAward();
award.getActiveAwardAccounts().clear();
AwardAccount awardAccount_1 = ARAwardAccountFixture.AWD_ACCT_WITH_CCA_1.createAwardAccount();
AwardAccount awardAccount_2 = ARAwardAccountFixture.AWD_ACCT_WITH_CCA_2.createAwardAccount();
List<AwardAccount> awardAccounts = new ArrayList<AwardAccount>();
awardAccounts.add(awardAccount_1);
awardAccounts.add(awardAccount_2);
((Award)award).setAwardAccounts(awardAccounts);
refreshAccounts(award);
List<String> errorString = contractsGrantsInvoiceDocumentServiceImpl.checkAwardContractControlAccounts(award);
assertNotNull(errorString);
assertEquals(0, errorString.size());
}
public void testCheckAwardContractControlAccounts_InvalidInvoicingByContractControlAccountNoCCA() throws Exception {
ContractsAndGrantsBillingAward award = ARAwardFixture.CG_AWARD_INV_CCA.createAward();
refreshAccounts(award);
List<String> errorString = contractsGrantsInvoiceDocumentServiceImpl.checkAwardContractControlAccounts(award);
assertNotNull(errorString);
assertEquals(2, errorString.size());
assertTrue(errorString.contains(ArKeyConstants.AwardConstants.ERROR_NO_CTRL_ACCT));
assertTrue(errorString.contains(award.getInvoicingOptionDescription()));
}
public void testCheckAwardContractControlAccounts_ValidInvoicingByAward() throws Exception {
ContractsAndGrantsBillingAward award = ARAwardFixture.CG_AWARD_INV_AWARD.createAward();
award.getActiveAwardAccounts().clear();
AwardAccount awardAccount_1 = ARAwardAccountFixture.AWD_ACCT_WITH_CCA_1.createAwardAccount();
AwardAccount awardAccount_2 = ARAwardAccountFixture.AWD_ACCT_WITH_CCA_2.createAwardAccount();
List<AwardAccount> awardAccounts = new ArrayList<AwardAccount>();
awardAccounts.add(awardAccount_1);
awardAccounts.add(awardAccount_2);
((Award)award).setAwardAccounts(awardAccounts);
refreshAccounts(award);
List<String> errorString = contractsGrantsInvoiceDocumentServiceImpl.checkAwardContractControlAccounts(award);
assertNotNull(errorString);
assertEquals(0, errorString.size());
}
public void testCheckAwardContractControlAccounts_InvalidInvoicingByAwardNoCCA() throws Exception {
ContractsAndGrantsBillingAward award = ARAwardFixture.CG_AWARD_INV_AWARD.createAward();
refreshAccounts(award);
List<String> errorString = contractsGrantsInvoiceDocumentServiceImpl.checkAwardContractControlAccounts(award);
assertNotNull(errorString);
assertEquals(2, errorString.size());
assertTrue(errorString.contains(ArKeyConstants.AwardConstants.ERROR_NO_CTRL_ACCT));
assertTrue(errorString.contains(award.getInvoicingOptionDescription()));
}
public void testCheckAwardContractControlAccounts_InvalidInvoicingByAwardMultipleCCAs() throws Exception {
ContractsAndGrantsBillingAward award = ARAwardFixture.CG_AWARD_INV_AWARD.createAward();
award.getActiveAwardAccounts().clear();
AwardAccount awardAccount_1 = ARAwardAccountFixture.AWD_ACCT_WITH_CCA_1.createAwardAccount();
AwardAccount awardAccount_2 = ARAwardAccountFixture.AWD_ACCT_WITH_CCA_3.createAwardAccount();
List<AwardAccount> awardAccounts = new ArrayList<AwardAccount>();
awardAccounts.add(awardAccount_1);
awardAccounts.add(awardAccount_2);
((Award)award).setAwardAccounts(awardAccounts);
refreshAccounts(award);
List<String> errorString = contractsGrantsInvoiceDocumentServiceImpl.checkAwardContractControlAccounts(award);
assertNotNull(errorString);
assertEquals(2, errorString.size());
assertTrue(errorString.contains(ArKeyConstants.AwardConstants.ERROR_MULTIPLE_CTRL_ACCT));
assertTrue(errorString.contains(award.getInvoicingOptionDescription()));
}
private void refreshAccounts(ContractsAndGrantsBillingAward award) {
List<ContractsAndGrantsBillingAwardAccount> awardAccounts = award.getActiveAwardAccounts();
for (ContractsAndGrantsBillingAwardAccount awardAccount: awardAccounts) {
((AwardAccount)awardAccount).refreshReferenceObject("account");
}
}
public void testBeanMapVersionOfDocument() {
ContractsGrantsInvoiceDocument cinvDoc = new ContractsGrantsInvoiceDocument();
InvoiceGeneralDetail invoiceGeneralDetail = InvoiceGeneralDetailFixture.INV_GNRL_DTL1.createInvoiceGeneralDetail();
invoiceGeneralDetail.setProposalNumber(new Long(80075L));
cinvDoc.setInvoiceGeneralDetail(invoiceGeneralDetail);
InvoiceAccountDetail invoiceAccountDetail = InvoiceAccountDetailFixture.INV_ACCT_DTL1.createInvoiceAccountDetail();
List<InvoiceAccountDetail> accountDetails = new ArrayList<>();
accountDetails.add(invoiceAccountDetail);
cinvDoc.setAccountDetails(accountDetails);
Map<String, Object> map = new ReflectionMap(cinvDoc);
assertEquals(new Long(80075L), map.get(ArPropertyConstants.ContractsGrantsInvoiceDocumentFields.PROPOSAL_NUMBER));
assertEquals("MILE", map.get(ArPropertyConstants.INVOICE_GENERAL_DETAIL+"." + ArPropertyConstants.BILLING_FREQUENCY_CODE));
assertEquals("9000000", map.get("accountDetails[0]."+KFSPropertyConstants.ACCOUNT_NUMBER));
assertNull(map.get("zebra"));
assertNull(map.get(ArPropertyConstants.INVOICE_GENERAL_DETAIL+".zebra"));
assertNull(map.get("accountDetails[2]."+KFSPropertyConstants.ACCOUNT_NUMBER));
}
}