/*
* 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.coa.businessobject;
import static org.kuali.kfs.sys.fixture.UserNameFixture.khuntley;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.kuali.kfs.sys.ConfigureContext;
import org.kuali.kfs.sys.KFSConstants;
import org.kuali.kfs.sys.context.KualiTestBase;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.kfs.sys.util.KfsDateUtils;
import org.kuali.rice.core.api.util.type.KualiDecimal;
import org.kuali.rice.kew.api.exception.WorkflowException;
import org.kuali.rice.kns.document.MaintenanceDocument;
import org.kuali.rice.kns.maintenance.Maintainable;
import org.kuali.rice.krad.bo.GlobalBusinessObject;
import org.kuali.rice.krad.bo.PersistableBusinessObject;
import org.kuali.rice.krad.service.DocumentService;
@ConfigureContext(session = khuntley)
public class DelegateGlobalTest extends KualiTestBase {
private static final String GLOBAL_DELEGATE_TYPENAME = "GDLG";
private static final Log LOG = LogFactory.getLog(DelegateGlobalTest.class);
private static final java.sql.Date START_DATE_1 = KfsDateUtils.newDate(2006, 6, 1);
private static final java.sql.Date START_DATE_2 = KfsDateUtils.newDate(2006, 5, 1);
private static final String DELEGATE_ID_1 = "4287701175"; // AFGORMAN BL-UDIV
private static final String DELEGATE_ID_2 = "1571201547"; // BBURGER BL-VPIT
private static final String DELEGATE_ID_3 = "1872708343"; // cswinson BL-VPGA
private static final KualiDecimal FROM_AMOUNT_1 = KualiDecimal.ZERO;
private static final KualiDecimal FROM_AMOUNT_2 = KualiDecimal.ZERO;
private static final KualiDecimal FROM_AMOUNT_3 = new KualiDecimal(1000);
private static final KualiDecimal TO_AMOUNT_1 = KualiDecimal.ZERO;
private static final KualiDecimal TO_AMOUNT_2 = new KualiDecimal(10000);
private static final KualiDecimal TO_AMOUNT_3 = new KualiDecimal(5000);
private static final String DOC_TYPE_ALL = KFSConstants.ROOT_DOCUMENT_TYPE;
private static final String DOC_TYPE_ACCT = "ACCT";
private static final String DOC_TYPE_CR = "CR";
private static final String DOC_TYPE_TF = "TF";
private static final String COA1 = "BL";
private static final String ACCOUNT1 = "1031400";
private static final String ACCOUNT2 = "1031420";
private static final String ACCOUNT3 = "1031467";
private static final String ACCOUNT_BAD = "1031421";
public void testApplyGlobalChanges_Empty() throws WorkflowException {
MaintenanceDocument document;
document = (MaintenanceDocument) SpringContext.getBean(DocumentService.class).getNewDocument(GLOBAL_DELEGATE_TYPENAME);
document.getDocumentHeader().setDocumentDescription("blah");
// get local references to the Maintainable and the BO
Maintainable newMaintainable = document.getNewMaintainableObject();
AccountDelegateGlobal bo = (AccountDelegateGlobal) newMaintainable.getBusinessObject();
List<AccountDelegateGlobalDetail> changeDocuments = new ArrayList();
bo.setDelegateGlobals(changeDocuments);
List<AccountGlobalDetail> accountDetails = new ArrayList();
bo.setAccountGlobalDetails(accountDetails);
GlobalBusinessObject gbo = (GlobalBusinessObject) bo;
List<PersistableBusinessObject> persistables = gbo.generateGlobalChangesToPersist();
assertTrue("Global Changes returned should be an empty list.", persistables.isEmpty());
}
@SuppressWarnings("deprecation")
public void testApplyGlobalChanges1() throws WorkflowException {
MaintenanceDocument document;
document = (MaintenanceDocument) SpringContext.getBean(DocumentService.class).getNewDocument(GLOBAL_DELEGATE_TYPENAME);
document.getDocumentHeader().setDocumentDescription("blah");
// get local references to the Maintainable and the BO
Maintainable newMaintainable = document.getNewMaintainableObject();
AccountDelegateGlobal bo = (AccountDelegateGlobal) newMaintainable.getBusinessObject();
String finDocNumber = document.getDocumentHeader().getDocumentNumber();
// create the lists
List<AccountDelegateGlobalDetail> changeDocuments = new ArrayList();
List<AccountGlobalDetail> accountDetails = new ArrayList();
// add a delegate change document
AccountDelegateGlobalDetail change = new AccountDelegateGlobalDetail();
change.setDocumentNumber(finDocNumber);
change.setAccountDelegatePrimaryRoutingIndicator(true);
change.setAccountDelegateStartDate(START_DATE_1);
change.setAccountDelegateUniversalId(DELEGATE_ID_1);
change.setApprovalFromThisAmount(FROM_AMOUNT_1);
change.setApprovalToThisAmount(TO_AMOUNT_1);
change.setFinancialDocumentTypeCode(DOC_TYPE_ALL);
changeDocuments.add(change);
bo.setDelegateGlobals(changeDocuments);
// add account change detail records
AccountGlobalDetail account;
account = new AccountGlobalDetail();
account.setDocumentNumber(finDocNumber);
account.setChartOfAccountsCode(COA1);
account.setAccountNumber(ACCOUNT1);
accountDetails.add(account);
account = new AccountGlobalDetail();
account.setDocumentNumber(finDocNumber);
account.setChartOfAccountsCode(COA1);
account.setAccountNumber(ACCOUNT2);
accountDetails.add(account);
account = new AccountGlobalDetail();
account.setDocumentNumber(finDocNumber);
account.setChartOfAccountsCode(COA1);
account.setAccountNumber(ACCOUNT3);
accountDetails.add(account);
bo.setAccountGlobalDetails(accountDetails);
GlobalBusinessObject gbo = (GlobalBusinessObject) bo;
List<PersistableBusinessObject> persistables = gbo.generateGlobalChangesToPersist();
assertFalse("The list should not be empty.", persistables.isEmpty());
assertEquals("There should be three output records.", 3, persistables.size());
}
@SuppressWarnings("deprecation")
public void testApplyGlobalChanges2() throws WorkflowException {
MaintenanceDocument document;
document = (MaintenanceDocument) SpringContext.getBean(DocumentService.class).getNewDocument(GLOBAL_DELEGATE_TYPENAME);
document.getDocumentHeader().setDocumentDescription("blah");
// get local references to the Maintainable and the BO
Maintainable newMaintainable = document.getNewMaintainableObject();
AccountDelegateGlobal bo = (AccountDelegateGlobal) newMaintainable.getBusinessObject();
String finDocNumber = document.getDocumentHeader().getDocumentNumber();
// create the lists
List<AccountDelegateGlobalDetail> changeDocuments = new ArrayList();
List<AccountGlobalDetail> accountDetails = new ArrayList();
// add a delegate change document
AccountDelegateGlobalDetail change;
change = new AccountDelegateGlobalDetail();
change.setDocumentNumber(finDocNumber);
change.setAccountDelegatePrimaryRoutingIndicator(true);
change.setAccountDelegateStartDate(START_DATE_1);
change.setAccountDelegateUniversalId(DELEGATE_ID_1);
change.setApprovalFromThisAmount(FROM_AMOUNT_1);
change.setApprovalToThisAmount(TO_AMOUNT_1);
change.setFinancialDocumentTypeCode(DOC_TYPE_ALL);
changeDocuments.add(change);
change = new AccountDelegateGlobalDetail();
change.setDocumentNumber(finDocNumber);
change.setAccountDelegatePrimaryRoutingIndicator(true);
change.setAccountDelegateStartDate(START_DATE_2);
change.setAccountDelegateUniversalId(DELEGATE_ID_2);
change.setApprovalFromThisAmount(FROM_AMOUNT_3);
change.setApprovalToThisAmount(TO_AMOUNT_3);
change.setFinancialDocumentTypeCode(DOC_TYPE_ACCT);
changeDocuments.add(change);
bo.setDelegateGlobals(changeDocuments);
// add account change detail records
AccountGlobalDetail account;
account = new AccountGlobalDetail();
account.setDocumentNumber(finDocNumber);
account.setChartOfAccountsCode(COA1);
account.setAccountNumber(ACCOUNT1);
accountDetails.add(account);
account = new AccountGlobalDetail();
account.setDocumentNumber(finDocNumber);
account.setChartOfAccountsCode(COA1);
account.setAccountNumber(ACCOUNT2);
accountDetails.add(account);
account = new AccountGlobalDetail();
account.setDocumentNumber(finDocNumber);
account.setChartOfAccountsCode(COA1);
account.setAccountNumber(ACCOUNT3);
accountDetails.add(account);
bo.setAccountGlobalDetails(accountDetails);
GlobalBusinessObject gbo = (GlobalBusinessObject) bo;
List<PersistableBusinessObject> persistables = gbo.generateGlobalChangesToPersist();
assertFalse("The list should not be empty.", persistables.isEmpty());
assertEquals("There should be six output records.", 6, persistables.size());
}
@SuppressWarnings("deprecation")
public void testApplyGlobalChanges3() throws WorkflowException {
MaintenanceDocument document;
document = (MaintenanceDocument) SpringContext.getBean(DocumentService.class).getNewDocument(GLOBAL_DELEGATE_TYPENAME);
document.getDocumentHeader().setDocumentDescription("blah");
// get local references to the Maintainable and the BO
Maintainable newMaintainable = document.getNewMaintainableObject();
AccountDelegateGlobal bo = (AccountDelegateGlobal) newMaintainable.getBusinessObject();
String finDocNumber = document.getDocumentHeader().getDocumentNumber();
// create the lists
List<AccountDelegateGlobalDetail> changeDocuments = new ArrayList();
List<AccountGlobalDetail> accountDetails = new ArrayList();
// add a delegate change document
AccountDelegateGlobalDetail change = new AccountDelegateGlobalDetail();
change.setDocumentNumber(finDocNumber);
change.setAccountDelegatePrimaryRoutingIndicator(true);
change.setAccountDelegateStartDate(START_DATE_1);
change.setAccountDelegateUniversalId(DELEGATE_ID_1);
change.setApprovalFromThisAmount(FROM_AMOUNT_1);
change.setApprovalToThisAmount(TO_AMOUNT_1);
change.setFinancialDocumentTypeCode(DOC_TYPE_ALL);
changeDocuments.add(change);
bo.setDelegateGlobals(changeDocuments);
// add account change detail records
AccountGlobalDetail account;
account = new AccountGlobalDetail();
account.setDocumentNumber(finDocNumber);
account.setChartOfAccountsCode(COA1);
account.setAccountNumber(ACCOUNT1);
accountDetails.add(account);
account = new AccountGlobalDetail();
account.setDocumentNumber(finDocNumber);
account.setChartOfAccountsCode(COA1);
account.setAccountNumber(ACCOUNT2);
accountDetails.add(account);
account = new AccountGlobalDetail();
account.setDocumentNumber(finDocNumber);
account.setChartOfAccountsCode(COA1);
account.setAccountNumber(ACCOUNT_BAD);
accountDetails.add(account);
bo.setAccountGlobalDetails(accountDetails);
GlobalBusinessObject gbo = (GlobalBusinessObject) bo;
boolean errorHappened = false;
try {
List<PersistableBusinessObject> persistables = gbo.generateGlobalChangesToPersist();
}
catch (RuntimeException e) {
errorHappened = true;
}
assertTrue("The expected error should have occurred.", errorHappened);
}
}