/*
* 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.document;
import static org.kuali.kfs.sys.document.AccountingDocumentTestUtils.testGetNewDocument_byDocumentClass;
import static org.kuali.kfs.sys.fixture.UserNameFixture.appleton;
import static org.kuali.kfs.sys.fixture.UserNameFixture.rjweiss;
import static org.kuali.kfs.sys.fixture.UserNameFixture.rorenfro;
import java.util.ArrayList;
import java.util.List;
import org.kuali.kfs.module.purap.businessobject.AccountsPayableItem;
import org.kuali.kfs.module.purap.businessobject.CreditMemoItem;
import org.kuali.kfs.module.purap.document.service.CreditMemoService;
import org.kuali.kfs.module.purap.fixture.CreditMemoDocumentFixture;
import org.kuali.kfs.module.purap.fixture.CreditMemoItemFixture;
import org.kuali.kfs.sys.ConfigureContext;
import org.kuali.kfs.sys.DocumentTestUtils;
import org.kuali.kfs.sys.context.KualiTestBase;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.kfs.sys.document.AccountingDocumentTestUtils;
import org.kuali.kfs.sys.document.workflow.WorkflowTestUtils;
import org.kuali.kfs.sys.fixture.UserNameFixture;
import org.kuali.rice.core.api.util.type.KualiDecimal;
import org.kuali.rice.kew.api.document.DocumentStatus;
import org.kuali.rice.kns.service.TransactionalDocumentDictionaryService;
import org.kuali.rice.krad.service.DocumentService;
/**
* This class is used to create and test populated CreditMemo Documents of various kinds.
*/
@ConfigureContext(session = appleton)
public class CreditMemoDocumentTest extends KualiTestBase {
public static final Class<VendorCreditMemoDocument> DOCUMENT_CLASS = VendorCreditMemoDocument.class;
private static final String ACCOUNT_REVIEW = "Account Review";
private RequisitionDocument requisitionDocument = null;
private VendorCreditMemoDocument creditMemoDocument = null;
@Override
protected void setUp() throws Exception {
super.setUp();
}
@Override
protected void tearDown() throws Exception {
creditMemoDocument = null;
super.tearDown();
}
private List<CreditMemoItemFixture> getItemParametersFromFixtures() {
List<CreditMemoItemFixture> list = new ArrayList<CreditMemoItemFixture>();
list.add(CreditMemoItemFixture.CM_ITEM_NO_APO);
return list;
}
private int getExpectedPrePeCount() {
return 0;
}
public final void testAddItem() throws Exception {
List<AccountsPayableItem> items = new ArrayList<AccountsPayableItem>();
items.add(CreditMemoItemFixture.CM_ITEM_NO_APO.createCreditMemoItem());
int expectedItemTotal = items.size();
AccountsPayableDocumentTestUtils.testAddItem(DocumentTestUtils.createDocument(SpringContext.getBean(DocumentService.class), DOCUMENT_CLASS), items, expectedItemTotal);
}
public final void testGetNewDocument() throws Exception {
testGetNewDocument_byDocumentClass(DOCUMENT_CLASS, SpringContext.getBean(DocumentService.class));
}
@ConfigureContext(session = appleton, shouldCommitTransactions=true)
public final void testConvertIntoErrorCorrection() throws Exception {
creditMemoDocument = buildSimpleDocument();
AccountingDocumentTestUtils.testConvertIntoErrorCorrection(creditMemoDocument, getExpectedPrePeCount(), SpringContext.getBean(DocumentService.class), SpringContext.getBean(TransactionalDocumentDictionaryService.class));
}
@ConfigureContext(session = appleton, shouldCommitTransactions=true)
public final void testSaveDocument() throws Exception {
creditMemoDocument = buildSimpleDocument();
creditMemoDocument.setAccountsPayableProcessorIdentifier("khuntley");
//creditMemoDocument.setPurchaseOrderIdentifier(createAPORequisition());
AccountingDocumentTestUtils.testSaveDocument(creditMemoDocument, SpringContext.getBean(DocumentService.class));
}
@ConfigureContext(session = appleton, shouldCommitTransactions=true)
public final VendorCreditMemoDocument routeDocument(PaymentRequestDocument preqDocument) throws Exception {
creditMemoDocument = buildSimpleDocument();
creditMemoDocument.setPaymentRequestDocument(preqDocument);
creditMemoDocument.setPurchaseOrderIdentifier(preqDocument.getPurchaseOrderIdentifier());
CreditMemoItem cmItem = (CreditMemoItem) creditMemoDocument.getItem(0);
cmItem.setPreqInvoicedTotalQuantity(new KualiDecimal(1));
cmItem.setItemQuantity(new KualiDecimal(1));
cmItem.setPreqTotalAmount(new KualiDecimal(1));
SpringContext.getBean(CreditMemoService.class).calculateCreditMemo(creditMemoDocument);
creditMemoDocument.prepareForSave();
DocumentService documentService = SpringContext.getBean(DocumentService.class);
assertFalse(DocumentStatus.ENROUTE.equals(creditMemoDocument.getDocumentHeader().getWorkflowDocument().getStatus()));
AccountingDocumentTestUtils.routeDocument(creditMemoDocument, "saving copy source docu ament", null, documentService);
WorkflowTestUtils.waitForDocumentApproval(creditMemoDocument.getDocumentNumber());
return creditMemoDocument;
}
/*
@ConfigureContext(session = appleton, shouldCommitTransactions=true)
public final void testRouteDocumentToFinal() throws Exception {
// To pass validation, the Credit Memo must be associated with another PO or PREQ.
PurchaseOrderDocumentTest poDocTest = new PurchaseOrderDocumentTest();
PurchaseOrderDocument po = poDocTest.buildSimpleDocument();
po.refreshNonUpdateableReferences();
AccountingDocumentTestUtils.saveDocument(po,SpringContext.getBean(DocumentService.class));
String poId = po.getDocumentNumber();
po = (PurchaseOrderDocument)SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(poId);
Integer purchaseOrderIdentifier = po.getPurapDocumentIdentifier();
// Create and save the Credit Memo.
creditMemoDocument = buildSimpleDocument();
creditMemoDocument.setPurchaseOrderIdentifier(purchaseOrderIdentifier);
CreditMemoItem creditMemoItem = (CreditMemoItem)creditMemoDocument.getItemByLineNumber(1);
creditMemoItem.setPoExtendedPrice(new KualiDecimal(1.00));
creditMemoItem.setPoInvoicedTotalQuantity(creditMemoItem.getItemQuantity());
creditMemoDocument.prepareForSave();
AccountingDocumentTestUtils.saveDocument(creditMemoDocument, SpringContext.getBean(DocumentService.class));
// Process and Calculate.
//SpringContext.getBean(AccountsPayableService.class).updateItemList(creditMemoDocument);
SpringContext.getBean(CreditMemoCreateService.class).populateDocumentAfterInit(creditMemoDocument);
SpringContext.getBean(CreditMemoService.class).calculateCreditMemo(creditMemoDocument);
assertFalse(DocumentStatus.ENROUTE.equals(creditMemoDocument.getDocumentHeader().getWorkflowDocument().getStatus()));
// Route and test.
AccountingDocumentTestUtils.routeDocument(creditMemoDocument, "routing document", null, SpringContext.getBean(DocumentService.class));
WorkflowTestUtils.waitForStatusChange(creditMemoDocument.getDocumentHeader().getWorkflowDocument(), KewApiConstants.ROUTE_HEADER_FINAL_CD);
final String docId = creditMemoDocument.getDocumentNumber();
creditMemoDocument = (CreditMemoDocument) SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(docId);
assertTrue("Document should now be final.", creditMemoDocument.getDocumentHeader().getWorkflowDocument().isFinal());
}
*/
public VendorCreditMemoDocument buildSimpleDocument() throws Exception {
return CreditMemoDocumentFixture.CM_ONLY_REQUIRED_FIELDS.createCreditMemoDocument();
}
private UserNameFixture getInitialUserName() {
return rjweiss;
}
protected UserNameFixture getTestUserName() {
return rorenfro;
}
/*
private Integer createAPORequisition() throws Exception {
requisitionDocument = RequisitionDocumentFixture.REQ_APO_VALID.createRequisitionDocument();
final String docId = requisitionDocument.getDocumentNumber();
AccountingDocumentTestUtils.routeDocument(requisitionDocument, SpringContext.getBean(DocumentService.class));
WorkflowTestUtils.waitForNodeChange(requisitionDocument.getDocumentHeader().getWorkflowDocument(), ACCOUNT_REVIEW);
changeCurrentUser(rorenfro);
requisitionDocument = (RequisitionDocument) SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(docId);
SpringContext.getBean(DocumentService.class).approveDocument(requisitionDocument, "Test approving as rorenfro", null);
WorkflowTestUtils.waitForStatusChange(requisitionDocument.getDocumentHeader().getWorkflowDocument(), KewApiConstants.ROUTE_HEADER_FINAL_CD);
changeCurrentUser(khuntley);
requisitionDocument = (RequisitionDocument) SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(docId);
//assertTrue("Document should now be final.", requisitionDocument.getDocumentHeader().getWorkflowDocument().isFinal());
// get related POs, if count = 1 then all is well
Integer linkIdentifier = requisitionDocument.getAccountsPayablePurchasingDocumentLinkIdentifier();
List<PurchaseOrderView> relatedPOs = SpringContext.getBean(PurapService.class).getRelatedViews(PurchaseOrderView.class, linkIdentifier);
Integer POId = relatedPOs.get(0).getPurapDocumentIdentifier();
assertNotNull(relatedPOs);
assertTrue(relatedPOs.size() > 0);
return POId;
}
*/
}