/*
* 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.service.impl;
import static org.kuali.kfs.sys.fixture.UserNameFixture.khuntley;
import static org.kuali.kfs.sys.fixture.UserNameFixture.wklykins;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.joda.time.DateTime;
import org.joda.time.DateTimeUtils;
import org.kuali.kfs.coa.businessobject.AccountingPeriod;
import org.kuali.kfs.coa.service.AccountService;
import org.kuali.kfs.coa.service.AccountingPeriodService;
import org.kuali.kfs.integration.cg.ContractsAndGrantsBillingAward;
import org.kuali.kfs.integration.cg.ContractsAndGrantsBillingAwardAccount;
import org.kuali.kfs.module.ar.ArConstants;
import org.kuali.kfs.module.ar.ArKeyConstants;
import org.kuali.kfs.module.ar.batch.service.VerifyBillingFrequencyService;
import org.kuali.kfs.module.ar.businessobject.*;
import org.kuali.kfs.module.ar.document.ContractsGrantsInvoiceDocument;
import org.kuali.kfs.module.ar.document.service.ContractsGrantsBillingAwardVerificationService;
import org.kuali.kfs.module.ar.document.service.ContractsGrantsInvoiceDocumentService;
import org.kuali.kfs.module.ar.fixture.ARAwardAccountFixture;
import org.kuali.kfs.module.ar.fixture.ARAwardFixture;
import org.kuali.kfs.module.ar.fixture.ARAwardOrganizationFixture;
import org.kuali.kfs.module.ar.fixture.InvoiceBillFixture;
import org.kuali.kfs.module.ar.fixture.InvoiceMilestoneFixture;
import org.kuali.kfs.module.ar.fixture.OrganizationAccountingDefaultFixture;
import org.kuali.kfs.module.ar.service.ContractsGrantsInvoiceCreateDocumentService;
import org.kuali.kfs.module.cg.businessobject.Award;
import org.kuali.kfs.module.cg.businessobject.AwardAccount;
import org.kuali.kfs.module.cg.businessobject.AwardOrganization;
import org.kuali.kfs.sys.ConfigureContext;
import org.kuali.kfs.sys.context.KualiTestBase;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.kfs.sys.document.service.FinancialSystemDocumentService;
import org.kuali.rice.core.api.config.property.ConfigurationService;
import org.kuali.rice.core.api.datetime.DateTimeService;
import org.kuali.rice.kew.api.exception.WorkflowException;
import org.kuali.rice.krad.service.BusinessObjectService;
import org.kuali.rice.krad.service.DocumentService;
import org.kuali.rice.krad.util.ErrorMessage;
@ConfigureContext(session = khuntley)
public class ContractsGrantsInvoiceCreateDocumentServiceImplTest extends KualiTestBase {
private ContractsGrantsInvoiceCreateDocumentServiceImpl contractsGrantsInvoiceCreateDocumentServiceImpl;
protected ConfigurationService configurationService;
protected ContractsGrantsInvoiceDocumentService contractsGrantsInvoiceDocumentService;
protected VerifyBillingFrequencyService verifyBillingFrequencyService;
protected FinancialSystemDocumentService financialSystemDocumentService;
protected BusinessObjectService businessObjectService;
protected DateTimeService dateTimeService;
protected DocumentService documentService;
protected AccountingPeriodService accountingPeriodService;
protected AccountService accountService;
protected ContractsGrantsBillingAwardVerificationService contractsGrantsBillingAwardVerificationService;
@Override
public void setUp() throws Exception {
super.setUp();
configurationService = SpringContext.getBean(ConfigurationService.class);
contractsGrantsInvoiceDocumentService = SpringContext.getBean(ContractsGrantsInvoiceDocumentService.class);
verifyBillingFrequencyService = SpringContext.getBean(VerifyBillingFrequencyService.class);
financialSystemDocumentService = SpringContext.getBean(FinancialSystemDocumentService.class);
businessObjectService = SpringContext.getBean(BusinessObjectService.class);
dateTimeService = SpringContext.getBean(DateTimeService.class);
documentService = SpringContext.getBean(DocumentService.class);
accountingPeriodService = SpringContext.getBean(AccountingPeriodService.class);
accountService = SpringContext.getBean(AccountService.class);
contractsGrantsBillingAwardVerificationService = SpringContext.getBean(ContractsGrantsBillingAwardVerificationService.class);
contractsGrantsInvoiceCreateDocumentServiceImpl = new ContractsGrantsInvoiceCreateDocumentServiceImpl();
contractsGrantsInvoiceCreateDocumentServiceImpl.setConfigurationService(configurationService);
contractsGrantsInvoiceCreateDocumentServiceImpl.setContractsGrantsInvoiceDocumentService(contractsGrantsInvoiceDocumentService);
contractsGrantsInvoiceCreateDocumentServiceImpl.setVerifyBillingFrequencyService(verifyBillingFrequencyService);
contractsGrantsInvoiceCreateDocumentServiceImpl.setFinancialSystemDocumentService(financialSystemDocumentService);
contractsGrantsInvoiceCreateDocumentServiceImpl.setBusinessObjectService(businessObjectService);
contractsGrantsInvoiceCreateDocumentServiceImpl.setAccountService(accountService);
contractsGrantsInvoiceCreateDocumentServiceImpl.setContractsGrantsBillingAwardVerificationService(contractsGrantsBillingAwardVerificationService);
}
public void testPerformAwardValidationStartDateMissing() {
List<ContractsAndGrantsBillingAward> awards = new ArrayList<ContractsAndGrantsBillingAward>();
ContractsAndGrantsBillingAward award = ARAwardFixture.CG_AWARD1.createAward();
((Award)award).setAwardBeginningDate(null);
awards.add(award);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(award).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_START_DATE_MISSING_ERROR)));
}
public void testPerformAwardValidationInvalidBillingFrequency() {
List<ContractsAndGrantsBillingAward> awards = new ArrayList<ContractsAndGrantsBillingAward>();
ContractsAndGrantsBillingAward award = ARAwardFixture.CG_AWARD1.createAward();
awards.add(award);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(award).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_BILLING_FREQUENCY_MISSING_ERROR)));
}
public void testPerformAwardValidationInvalidBillingPeriod() {
List<ContractsAndGrantsBillingAward> awards = new ArrayList<ContractsAndGrantsBillingAward>();
ContractsAndGrantsBillingAward award = ARAwardFixture.CG_AWARD_MONTHLY_INVALID_DATES.createAward();
((Award)award).setAwardBeginningDate(new Date(DateTimeUtils.currentTimeMillis()));
awards.add(award);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(award).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_INVALID_BILLING_PERIOD)));
}
public void testPerformAwardValidationValidAward() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should be empty.", invalidGroup.size() == 0);
assertTrue("qualifiedAwards should contain one award.", qualifiedAwards.size() == 1);
assertTrue("qualifiedAwards should contain our initial award.", qualifiedAwards.get(0).equals(awards.get(0)));
}
public void testPerformAwardValidationAwardInvoicingSuspended() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
((Award)awards.get(0)).setExcludedFromInvoicing(true);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_EXCLUDED_FROM_INVOICING)));
}
public void testPerformAwardValidationInactiveAward() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
((Award)awards.get(0)).setActive(false);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_INACTIVE_ERROR)));
}
public void testPerformAwardValidationSuspendedAndInactiveAward() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
((Award)awards.get(0)).setActive(false);
((Award)awards.get(0)).setExcludedFromInvoicing(true);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_EXCLUDED_FROM_INVOICING)));
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(1).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_INACTIVE_ERROR)));
}
public void testPerformAwardValidationTwoInvalidAwards() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
List<ContractsAndGrantsBillingAward> awards2 = setupAwards();
((Award)awards.get(0)).setActive(false);
((Award)awards2.get(0)).setExcludedFromInvoicing(true);
awards.addAll(awards2);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 2);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our first award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_INACTIVE_ERROR)));
assertTrue("invalidGroup should contain our second award with the error message we're expecting.", invalidGroup.get(awards.get(1)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_EXCLUDED_FROM_INVOICING)));
}
public void testPerformAwardValidationOneValidOneInvalidAward() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
List<ContractsAndGrantsBillingAward> awards2 = setupAwards();
((Award)awards2.get(0)).setExcludedFromInvoicing(true);
awards.addAll(awards2);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertEquals("invalidGroup should contain one award.", 1, invalidGroup.size());
assertEquals("qualifiedAwards should contain one award.", 1, qualifiedAwards.size());
assertTrue("qualifiedAwards should contain our initial award.", qualifiedAwards.get(0).equals(awards.get(0)));
assertTrue("invalidGroup should contain our second award with the error message we're expecting.", invalidGroup.get(awards.get(1)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_EXCLUDED_FROM_INVOICING)));
}
public void testPerformAwardValidationMissingAwardInvoicingOption() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
((Award)awards.get(0)).setInvoicingOptionCode(null);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_INVOICING_OPTION_MISSING_ERROR)));
}
public void testPerformAwardValidationInvalidPredeterminedBillingFrequency() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
Award award = ((Award)awards.get(0));
award.setBillingFrequencyCode(ArConstants.PREDETERMINED_BILLING_SCHEDULE_CODE);
AwardAccount awardAccount_2 = ARAwardAccountFixture.AWD_ACCT_WITH_CCA_2.createAwardAccount();
awardAccount_2.refreshReferenceObject("account");
award.getAwardAccounts().add(awardAccount_2);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_SINGLE_ACCOUNT_ERROR)));
}
public void testPerformAwardValidationInvalidMilestoneBillingFrequency() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
Award award = ((Award)awards.get(0));
award.setBillingFrequencyCode(ArConstants.MILESTONE_BILLING_SCHEDULE_CODE);
AwardAccount awardAccount_2 = ARAwardAccountFixture.AWD_ACCT_WITH_CCA_2.createAwardAccount();
awardAccount_2.refreshReferenceObject("account");
award.getAwardAccounts().add(awardAccount_2);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_SINGLE_ACCOUNT_ERROR)));
}
public void testPerformAwardValidationNoActiveAccounts() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
((Award)awards.get(0)).getAwardAccounts().clear();
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_NO_ACTIVE_ACCOUNTS_ASSIGNED_ERROR)));
}
public void testPerformAwardValidationExpiredAccount() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
List<ContractsAndGrantsBillingAwardAccount> awardAccounts = ((Award)awards.get(0)).getActiveAwardAccounts();
for (ContractsAndGrantsBillingAwardAccount awardAccount: awardAccounts) {
((AwardAccount)awardAccount).getAccount().setAccountExpirationDate(new Date(DateTime.now().minusDays(1).toDate().getTime()));
}
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
StringBuilder errorMessage = new StringBuilder();
errorMessage.append(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_CONAINS_EXPIRED_ACCOUNTS_ERROR));
for (ContractsAndGrantsBillingAwardAccount awardAccount: awardAccounts) {
errorMessage.append(" (expired account: " + ((AwardAccount)awardAccount).getAccount().getAccountNumber() + " expiration date " + ((AwardAccount)awardAccount).getAccount().getAccountExpirationDate() + ") ");
}
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(errorMessage.toString()));
}
public void testPerformAwardValidationExpiredAccounts() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
List<AwardAccount> awardAccounts = ((Award)awards.get(0)).getAwardAccounts();
AwardAccount awardAccount_2 = ARAwardAccountFixture.AWD_ACCT_WITH_CCA_2.createAwardAccount();
awardAccount_2.refreshReferenceObject("account");
awardAccounts.add(awardAccount_2);
for (AwardAccount awardAccount: awardAccounts) {
awardAccount.getAccount().setAccountExpirationDate(new Date(DateTime.now().minusDays(1).toDate().getTime()));
}
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
StringBuilder errorMessage = new StringBuilder();
errorMessage.append(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_CONAINS_EXPIRED_ACCOUNTS_ERROR));
for (ContractsAndGrantsBillingAwardAccount awardAccount: awardAccounts) {
errorMessage.append(" (expired account: " + ((AwardAccount)awardAccount).getAccount().getAccountNumber() + " expiration date " + ((AwardAccount)awardAccount).getAccount().getAccountExpirationDate() + ") ");
}
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(errorMessage.toString()));
}
public void testPerformAwardValidationAwardFinalInvoiceAlreadyBilled() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
List<AwardAccount> awardAccounts = ((Award)awards.get(0)).getAwardAccounts();
for (AwardAccount awardAccount: awardAccounts) {
awardAccount.setFinalBilledIndicator(true);
}
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_FINAL_BILLED_ERROR)));
}
public void testPerformAwardValidationAwardFinalInvoiceAlreadyBilledTwoAccounts() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
List<AwardAccount> awardAccounts = ((Award)awards.get(0)).getAwardAccounts();
AwardAccount awardAccount_2 = ARAwardAccountFixture.AWD_ACCT_WITH_CCA_2.createAwardAccount();
awardAccount_2.refreshReferenceObject("account");
awardAccounts.add(awardAccount_2);
for (AwardAccount awardAccount: awardAccounts) {
awardAccount.setFinalBilledIndicator(true);
}
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_FINAL_BILLED_ERROR)));
}
public void testPerformAwardValidationAwardFinalInvoicePartiallyBilled() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
List<AwardAccount> awardAccounts = ((Award)awards.get(0)).getAwardAccounts();
for (AwardAccount awardAccount: awardAccounts) {
awardAccount.setFinalBilledIndicator(true);
}
AwardAccount awardAccount_2 = ARAwardAccountFixture.AWD_ACCT_WITH_CCA_2.createAwardAccount();
awardAccount_2.refreshReferenceObject("account");
awardAccounts.add(awardAccount_2);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_FINAL_BILLED_ERROR)));
}
public void testPerformAwardValidationNoValidMilestonesToInvoice() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
((Award)awards.get(0)).setBillingFrequencyCode(ArConstants.MILESTONE_BILLING_SCHEDULE_CODE);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_NO_VALID_MILESTONES)));
}
public void testPerformAwardValidationNoValidBillsToInvoice() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
((Award)awards.get(0)).setBillingFrequencyCode(ArConstants.PREDETERMINED_BILLING_SCHEDULE_CODE);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_NO_VALID_BILLS)));
}
public void testPerformAwardValidationOneValidOneInvalidAwardAccounts() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
AwardAccount awardAccount_2 = ARAwardAccountFixture.AWD_ACCT_WITH_CCA_2.createAwardAccount();
awardAccount_2.setCurrentLastBilledDate(new Date(System.currentTimeMillis()));
awardAccount_2.refreshReferenceObject("account");
((Award)awards.get(0)).getAwardAccounts().add(awardAccount_2);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should be empty", invalidGroup.size() == 0);
assertTrue("qualifiedAwards should contain one award.", qualifiedAwards.size() == 1);
}
public void testPerformAwardValidationAgencyHasNoMatchingCustomer() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
((Award)awards.get(0)).getAgency().setCustomerNumber(null);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_AGENCY_NO_CUSTOMER_RECORD)));
}
@ConfigureContext(session = wklykins)
public void testPerformAwardValidationNoValidAwardAccounts() throws WorkflowException {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
Award award = ((Award)awards.get(0));
List<ErrorMessage> errorMessages = new ArrayList<ErrorMessage>();
ContractsGrantsInvoiceDocument cgInvoice = SpringContext.getBean(ContractsGrantsInvoiceCreateDocumentService.class).createCGInvoiceDocumentByAwardInfo(award, award.getActiveAwardAccounts(), "BL", "PSY", errorMessages, null, null);
documentService.saveDocument(cgInvoice);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_NO_VALID_ACCOUNTS)));
}
@ConfigureContext(session = wklykins)
public void testPerformAwardValidAwardAccountsValidationMilestone() throws WorkflowException {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
Award award = ((Award)awards.get(0));
award.setBillingFrequencyCode(ArConstants.MILESTONE_BILLING_SCHEDULE_CODE);
List<ErrorMessage> errorMessages = new ArrayList<ErrorMessage>();
ContractsGrantsInvoiceDocument cgInvoice = SpringContext.getBean(ContractsGrantsInvoiceCreateDocumentService.class).createCGInvoiceDocumentByAwardInfo(award, award.getActiveAwardAccounts(), "BL", "PSY", errorMessages, null, null);
documentService.saveDocument(cgInvoice);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_NO_VALID_MILESTONES)));
}
@ConfigureContext(session = wklykins)
public void testPerformAwardValidAwardAccountsValidationPredeterminedBilling() throws WorkflowException {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
Award award = ((Award)awards.get(0));
award.setBillingFrequencyCode(ArConstants.PREDETERMINED_BILLING_SCHEDULE_CODE);
List<ErrorMessage> errorMessages = new ArrayList<ErrorMessage>();
ContractsGrantsInvoiceDocument cgInvoice = SpringContext.getBean(ContractsGrantsInvoiceCreateDocumentService.class).createCGInvoiceDocumentByAwardInfo(award, award.getActiveAwardAccounts(), "BL", "PSY", errorMessages, null, null);
documentService.saveDocument(cgInvoice);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_NO_VALID_BILLS)));
}
public void testPerformAwardValidationNoContractControlAccountsByCCA() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
((Award)awards.get(0)).setInvoicingOptionCode(ArConstants.INV_CONTRACT_CONTROL_ACCOUNT);
List<AwardAccount> awardAccounts = ((Award)awards.get(0)).getAwardAccounts();
for (AwardAccount awardAccount: awardAccounts) {
awardAccount.getAccount().setContractControlAccount(null);
}
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertEquals("invalidGroup should contain our initial award with the error message we're expecting.", configurationService.getPropertyValueAsString(ArKeyConstants.AwardConstants.ERROR_NO_CTRL_ACCT).replace("{0}", awards.get(0).getInvoicingOptionDescription()), invalidGroup.get(awards.get(0)).get(0));
}
public void testPerformAwardValidationNoContractControlAccountsByAward() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
((Award)awards.get(0)).setInvoicingOptionCode(ArConstants.INV_AWARD);
List<AwardAccount> awardAccounts = ((Award)awards.get(0)).getAwardAccounts();
for (AwardAccount awardAccount: awardAccounts) {
awardAccount.getAccount().setContractControlAccount(null);
}
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertEquals("invalidGroup should contain our initial award with the error message we're expecting.", configurationService.getPropertyValueAsString(ArKeyConstants.AwardConstants.ERROR_NO_CTRL_ACCT).replace("{0}", awards.get(0).getInvoicingOptionDescription()), invalidGroup.get(awards.get(0)).get(0));
}
public void testPerformAwardValidationMultipleContractControlAccountsByAward() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
((Award)awards.get(0)).setInvoicingOptionCode(ArConstants.INV_AWARD);
AwardAccount awardAccount_2 = ARAwardAccountFixture.AWD_ACCT_WITH_CCA_3.createAwardAccount();
awardAccount_2.refreshReferenceObject("account");
((Award)awards.get(0)).getAwardAccounts().add(awardAccount_2);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.AwardConstants.ERROR_MULTIPLE_CTRL_ACCT).replace("{0}", awards.get(0).getInvoicingOptionDescription())));
}
public void testPerformAwardValidationNoSysInfo() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
Award award = ((Award)awards.get(0));
award.getAwardOrganizations().clear();
AwardOrganization awardOrganization = ARAwardOrganizationFixture.AWD_ORG2.createAwardOrganization();
award.getAwardOrganizations().add(awardOrganization);
OrganizationAccountingDefault orgAcctDefault = OrganizationAccountingDefaultFixture.BASE_OAD.createOrganizationAccountingDefault();
businessObjectService.save(orgAcctDefault);
OrganizationOptions organizationOptions = new OrganizationOptions();
organizationOptions.setChartOfAccountsCode(orgAcctDefault.getChartOfAccountsCode());
organizationOptions.setOrganizationCode(orgAcctDefault.getOrganizationCode());
organizationOptions.setProcessingChartOfAccountCode(orgAcctDefault.getChartOfAccountsCode());
organizationOptions.setProcessingOrganizationCode(orgAcctDefault.getOrganizationCode());
businessObjectService.save(organizationOptions);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_SYS_INFO_OADF_NOT_SETUP)));
}
public void testPerformAwardValidationNoOrgAccountingDefault() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
Award award = ((Award)awards.get(0));
award.getAwardOrganizations().clear();
AwardOrganization awardOrganization = ARAwardOrganizationFixture.AWD_ORG3.createAwardOrganization();
award.getAwardOrganizations().add(awardOrganization);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_SYS_INFO_OADF_NOT_SETUP)));
}
public void testPerformAwardValidationNoSysInfoOrOrgAccountingDefault() {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
Award award = ((Award)awards.get(0));
award.getAwardOrganizations().clear();
AwardOrganization awardOrganization = ARAwardOrganizationFixture.AWD_ORG4.createAwardOrganization();
award.getAwardOrganizations().add(awardOrganization);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_SYS_INFO_OADF_NOT_SETUP)));
}
@ConfigureContext(session = wklykins)
public void testPerformAwardValidationInvoicesInProgressMilestone() throws WorkflowException {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
Award award = ((Award)awards.get(0));
award.setBillingFrequencyCode(ArConstants.MILESTONE_BILLING_SCHEDULE_CODE);
List<ErrorMessage> errorMessages = new ArrayList<ErrorMessage>();
ContractsGrantsInvoiceDocument cgInvoice = SpringContext.getBean(ContractsGrantsInvoiceCreateDocumentService.class).createCGInvoiceDocumentByAwardInfo(award, award.getActiveAwardAccounts(), "BL", "PSY", errorMessages, null, null);
documentService.saveDocument(cgInvoice);
setupMilestones(cgInvoice);
documentService.saveDocument(cgInvoice);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_NO_VALID_ACCOUNTS)));
}
@ConfigureContext(session = wklykins)
public void testPerformAwardValidationInvoicesInProgressPredeterminedBilling() throws WorkflowException {
List<ContractsAndGrantsBillingAward> awards = setupAwards();
Award award = ((Award)awards.get(0));
award.setBillingFrequencyCode(ArConstants.PREDETERMINED_BILLING_SCHEDULE_CODE);
List<ErrorMessage> errorMessages = new ArrayList<ErrorMessage>();
ContractsGrantsInvoiceDocument cgInvoice = SpringContext.getBean(ContractsGrantsInvoiceCreateDocumentService.class).createCGInvoiceDocumentByAwardInfo(award, award.getActiveAwardAccounts(), "BL", "PSY", errorMessages, null, null);
documentService.saveDocument(cgInvoice);
setupBills(cgInvoice);
documentService.saveDocument(cgInvoice);
Map<ContractsAndGrantsBillingAward, List<String>> invalidGroup = new HashMap<ContractsAndGrantsBillingAward, List<String>>();
List<ContractsAndGrantsBillingAward> qualifiedAwards = new ArrayList<ContractsAndGrantsBillingAward>();
contractsGrantsInvoiceCreateDocumentServiceImpl.performAwardValidation(awards, invalidGroup, qualifiedAwards);
assertTrue("invalidGroup should contain one award.", invalidGroup.size() == 1);
assertTrue("qualifiedAwards should be empty.", qualifiedAwards.size() == 0);
assertTrue("invalidGroup should contain our initial award with the error message we're expecting.", invalidGroup.get(awards.get(0)).get(0).equals(configurationService.getPropertyValueAsString(ArKeyConstants.CGINVOICE_CREATION_AWARD_NO_VALID_ACCOUNTS)));
}
protected List<ContractsAndGrantsBillingAward> setupAwards() {
List<ContractsAndGrantsBillingAward> awards = new ArrayList<ContractsAndGrantsBillingAward>();
ContractsAndGrantsBillingAward award = ARAwardFixture.CG_AWARD_MONTHLY_BILLED_DATE_VALID.createAward();
award = ARAwardFixture.CG_AWARD_MONTHLY_BILLED_DATE_VALID.setAgencyFromFixture((Award) award);
award.getActiveAwardAccounts().clear();
AwardAccount awardAccount_1 = ARAwardAccountFixture.AWD_ACCT_WITH_CCA_1.createAwardAccount();
awardAccount_1.refreshReferenceObject("account");
List<AwardAccount> awardAccounts = new ArrayList<AwardAccount>();
awardAccounts.add(awardAccount_1);
((Award)award).setAwardAccounts(awardAccounts);
award = ARAwardFixture.CG_AWARD_MONTHLY_BILLED_DATE_VALID.setAwardOrganizationFromFixture((Award) award);
awards.add(award);
return awards;
}
protected void setupMilestones(ContractsGrantsInvoiceDocument document) {
List<InvoiceMilestone> invoiceMilestones = new ArrayList<InvoiceMilestone>();
InvoiceMilestone invMilestone_1 = InvoiceMilestoneFixture.INV_MLSTN_2.createInvoiceMilestone();
invMilestone_1.setDocumentNumber(document.getDocumentNumber());
Timestamp ts = new Timestamp(new java.util.Date().getTime());
java.sql.Date today = new java.sql.Date(ts.getTime());
AccountingPeriod currPeriod = accountingPeriodService.getByDate(today);
BillingPeriod billingPeriod = verifyBillingFrequencyService.getStartDateAndEndDateOfPreviousBillingPeriod(document.getInvoiceGeneralDetail().getAward(), currPeriod);
Date invoiceDate = billingPeriod.getEndDate();
Date completionDate = new Date(new DateTime(invoiceDate.getTime()).minusDays(1).toDate().getTime());
invMilestone_1.setMilestoneActualCompletionDate(completionDate);
businessObjectService.save(invMilestone_1);
invoiceMilestones.add(invMilestone_1);
document.setInvoiceMilestones(invoiceMilestones);
Milestone milestone = new Milestone();
milestone.setProposalNumber(document.getInvoiceGeneralDetail().getProposalNumber());
milestone.setMilestoneNumber(invMilestone_1.getMilestoneNumber());
milestone.setMilestoneIdentifier(invMilestone_1.getMilestoneIdentifier());
milestone.setMilestoneDescription(invMilestone_1.getMilestoneDescription());
milestone.setMilestoneAmount(invMilestone_1.getMilestoneAmount());
milestone.setMilestoneActualCompletionDate(invMilestone_1.getMilestoneActualCompletionDate());
milestone.setMilestoneExpectedCompletionDate(completionDate);
milestone.setBilled(false);
milestone.setAward(document.getInvoiceGeneralDetail().getAward());
milestone.setActive(true);
MilestoneSchedule milestoneSchedule = new MilestoneSchedule();
milestoneSchedule.setProposalNumber(document.getInvoiceGeneralDetail().getProposalNumber());
List<Milestone> milestones = new ArrayList<Milestone>();
milestones.add(milestone);
milestoneSchedule.setMilestones(milestones);
businessObjectService.save(milestoneSchedule);
businessObjectService.save(milestone);
}
protected void setupBills(ContractsGrantsInvoiceDocument document) {
List<InvoiceBill> invoiceBills = new ArrayList<InvoiceBill>();
InvoiceBill invBill_1 = InvoiceBillFixture.INV_BILL_2.createInvoiceBill();
invBill_1.setDocumentNumber(document.getDocumentNumber());
Timestamp ts = new Timestamp(new java.util.Date().getTime());
java.sql.Date today = new java.sql.Date(ts.getTime());
AccountingPeriod currPeriod = accountingPeriodService.getByDate(today);
BillingPeriod billingPeriod = verifyBillingFrequencyService.getStartDateAndEndDateOfPreviousBillingPeriod(document.getInvoiceGeneralDetail().getAward(), currPeriod);
Date invoiceDate = billingPeriod.getEndDate();
Date billDate = new Date(new DateTime(invoiceDate.getTime()).minusDays(1).toDate().getTime());
invBill_1.setBillDate(billDate);
businessObjectService.save(invBill_1);
invoiceBills.add(invBill_1);
document.setInvoiceBills(invoiceBills);
Bill bill = new Bill();
bill.setProposalNumber(document.getInvoiceGeneralDetail().getProposalNumber());
bill.setBillNumber(invBill_1.getBillNumber());
bill.setBillDescription(invBill_1.getBillDescription());
bill.setBillIdentifier(invBill_1.getBillIdentifier());
bill.setBillDate(invBill_1.getBillDate());
bill.setEstimatedAmount(invBill_1.getEstimatedAmount());
bill.setBilled(false);
bill.setAward(document.getInvoiceGeneralDetail().getAward());
bill.setActive(true);
PredeterminedBillingSchedule predeterminedBillingSchedule = new PredeterminedBillingSchedule();
predeterminedBillingSchedule.setProposalNumber(document.getInvoiceGeneralDetail().getProposalNumber());
List<Bill> bills = new ArrayList<Bill>();
bills.add(bill);
predeterminedBillingSchedule.setBills(bills);
businessObjectService.save(predeterminedBillingSchedule);
businessObjectService.save(bill);
}
}