/* * 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.service; import static org.kuali.kfs.sys.fixture.UserNameFixture.appleton; import static org.kuali.kfs.sys.fixture.UserNameFixture.parke; import java.io.ByteArrayOutputStream; import java.util.List; import org.apache.commons.lang.StringUtils; import org.kuali.kfs.module.purap.PurapConstants; import org.kuali.kfs.module.purap.PurapConstants.PaymentRequestStatuses; import org.kuali.kfs.module.purap.PurapConstants.PurchaseOrderDocTypes; import org.kuali.kfs.module.purap.PurapConstants.PurchaseOrderStatuses; import org.kuali.kfs.module.purap.businessobject.PurchaseOrderItem; import org.kuali.kfs.module.purap.businessobject.PurchaseOrderVendorQuote; import org.kuali.kfs.module.purap.businessobject.RequisitionItem; import org.kuali.kfs.module.purap.document.PaymentRequestDocument; import org.kuali.kfs.module.purap.document.PaymentRequestDocumentTest; import org.kuali.kfs.module.purap.document.PurchaseOrderDocument; import org.kuali.kfs.module.purap.document.RequisitionDocument; import org.kuali.kfs.module.purap.fixture.PaymentRequestDocumentFixture; import org.kuali.kfs.module.purap.fixture.PurchaseOrderDocumentFixture; import org.kuali.kfs.module.purap.fixture.PurchaseOrderDocumentWithCommodityCodeFixture; import org.kuali.kfs.module.purap.fixture.PurchaseOrderVendorQuoteFixture; import org.kuali.kfs.module.purap.fixture.RequisitionDocumentFixture; import org.kuali.kfs.module.purap.service.PurapAccountingService; 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.AccountingDocumentTestUtils; import org.kuali.kfs.sys.document.workflow.WorkflowTestUtils; import org.kuali.kfs.vnd.businessobject.ContractManager; import org.kuali.kfs.vnd.businessobject.VendorCommodityCode; import org.kuali.kfs.vnd.businessobject.VendorContract; import org.kuali.kfs.vnd.businessobject.VendorDetail; import org.kuali.kfs.vnd.document.service.VendorService; import org.kuali.rice.core.api.datetime.DateTimeService; import org.kuali.rice.core.api.util.type.KualiDecimal; import org.kuali.rice.kew.api.document.DocumentStatus; import org.kuali.rice.kew.api.exception.WorkflowException; import org.kuali.rice.krad.exception.ValidationException; import org.kuali.rice.krad.service.DocumentService; import org.kuali.rice.krad.service.SequenceAccessorService; @ConfigureContext(session = parke, shouldCommitTransactions=true) public class PurchaseOrderServiceTest extends KualiTestBase { private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PurchaseOrderServiceTest.class); protected DocumentService docService; protected PurchaseOrderService poService; private PurapAccountingService purapAccountingService; @Override protected void setUp() throws Exception { super.setUp(); if (null == docService) { docService = SpringContext.getBean(DocumentService.class); } if (null == poService) { poService = SpringContext.getBean(PurchaseOrderService.class); } if(purapAccountingService == null) { purapAccountingService = SpringContext.getBean(PurapAccountingService.class); } } public final void testPurchaseOrderRetransmit() throws Exception { // Create and save a minimally-populated basic PO document for each test. PurchaseOrderDocument po = PurchaseOrderDocumentFixture.PO_ONLY_REQUIRED_FIELDS_MULTI_ITEMS.createPurchaseOrderDocument(); po.setApplicationDocumentStatus(PurchaseOrderStatuses.APPDOC_OPEN); po.refreshNonUpdateableReferences(); po.prepareForSave(); AccountingDocumentTestUtils.saveDocument(po, docService); PurchaseOrderDocument poRetrans = null; try { poRetrans = poService.createAndSavePotentialChangeDocument( po.getDocumentNumber(), PurchaseOrderDocTypes.PURCHASE_ORDER_RETRANSMIT_DOCUMENT, PurchaseOrderStatuses.APPDOC_PENDING_RETRANSMIT); po = poService.getPurchaseOrderByDocumentNumber(po.getDocumentNumber()); } catch (ValidationException ve) { fail( "Validation errors creating PO retransmit document: " + dumpMessageMapErrors() ); } assertMatchRetransmit(po, poRetrans); ((PurchaseOrderItem)poRetrans.getItem(0)).setItemSelectedForRetransmitIndicator(true); ByteArrayOutputStream baosPDF = new ByteArrayOutputStream(); try { poService.retransmitPurchaseOrderPDF(poRetrans, baosPDF); assertTrue(baosPDF.size()>0); } catch (ValidationException e) { fail("Caught ValidationException while trying to retransmit PO with doc id " + po.getDocumentNumber() + "\n" + dumpMessageMapErrors() ); } finally { if (baosPDF != null) { baosPDF.reset(); } } } public final void testPurchaseOrderPrint() throws Exception { PurchaseOrderDocument po = PurchaseOrderDocumentFixture.PO_ONLY_REQUIRED_FIELDS_MULTI_ITEMS.createPurchaseOrderDocument(); po.setApplicationDocumentStatus(PurchaseOrderStatuses.APPDOC_OPEN); po.refreshNonUpdateableReferences(); po.prepareForSave(); AccountingDocumentTestUtils.saveDocument(po, docService); ByteArrayOutputStream baosPDF = new ByteArrayOutputStream(); try { poService.performPrintPurchaseOrderPDFOnly(po.getDocumentNumber(), baosPDF); assertTrue(baosPDF.size()>0); } catch (ValidationException e) { fail("Caught ValidationException while trying to retransmit PO with doc id " + po.getDocumentNumber() + "\n" + dumpMessageMapErrors() ); } finally { if (baosPDF != null) { baosPDF.reset(); } } } public final void testGetInternalPurchasingDollarLimit() { PurchaseOrderDocument po = PurchaseOrderDocumentFixture.PO_WITH_VENDOR_CONTRACT.createPurchaseOrderDocument(); VendorContract contract = new VendorContract(); Integer contrID = po.getVendorContractGeneratedIdentifier(); KualiDecimal contrAPOLimit = new KualiDecimal(120000.00); contract.setVendorContractGeneratedIdentifier(contrID); contract.setOrganizationAutomaticPurchaseOrderLimit(contrAPOLimit); ContractManager manager = new ContractManager(); Integer mngrCode = po.getContractManagerCode(); manager.setContractManagerCode(mngrCode); KualiDecimal mngrDDLimit = new KualiDecimal(100000.00); manager.setContractManagerDelegationDollarLimit(mngrDDLimit); VendorService vdService = SpringContext.getBean(VendorService.class); String chartCode = po.getChartOfAccountsCode(); String orgCode = po.getOrganizationCode(); KualiDecimal contrDLimit = vdService.getApoLimitFromContract(contrID, chartCode, orgCode); KualiDecimal result; // contract == null & manager != null po.setVendorContractGeneratedIdentifier(null); po.setVendorContract(null); po.setContractManager(manager); result = poService.getInternalPurchasingDollarLimit(po); assertEquals(result, mngrDDLimit); // contract != null & manager == null po.setVendorContractGeneratedIdentifier(contrID); po.setVendorContract(contract); po.setContractManagerCode(null); po.setContractManager(null); result = poService.getInternalPurchasingDollarLimit(po); assertEquals(result, contrDLimit); // contract != null & manager != null, and contract limit > manager limit po.setVendorContractGeneratedIdentifier(contrID); po.setVendorContract(contract); po.setContractManagerCode(mngrCode); po.setContractManager(manager); po.setContractManagerCode(mngrCode); result = poService.getInternalPurchasingDollarLimit(po); assertEquals(result, contrDLimit); // contract != null & manager != null, and contract limit < manager limit KualiDecimal mngrDDLimit1 = new KualiDecimal(150000.00); manager.setContractManagerDelegationDollarLimit(mngrDDLimit1); result = poService.getInternalPurchasingDollarLimit(po); assertEquals(result, mngrDDLimit1); } /** * Matches an existing Purchase Order Document with a retransmitted PO Document newly generated from it; * Fails the assertion if any of the copied persistent fields don't match. */ public static void assertMatchRetransmit(PurchaseOrderDocument doc1, PurchaseOrderDocument doc2) { // match posting year if (StringUtils.isNotBlank(doc1.getPostingPeriodCode()) && StringUtils.isNotBlank(doc2.getPostingPeriodCode())) { assertEquals(doc1.getPostingPeriodCode(), doc2.getPostingPeriodCode()); } assertEquals(doc1.getPostingYear(), doc2.getPostingYear()); // match important fields in PO assertEquals(doc1.getVendorHeaderGeneratedIdentifier(), doc2.getVendorHeaderGeneratedIdentifier()); assertEquals(doc1.getVendorDetailAssignedIdentifier(), doc2.getVendorDetailAssignedIdentifier()); assertEquals(doc1.getVendorName(), doc2.getVendorName()); assertEquals(doc1.getVendorNumber(), doc2.getVendorNumber()); assertEquals(doc1.getChartOfAccountsCode(), doc2.getChartOfAccountsCode()); assertEquals(doc1.getOrganizationCode(), doc2.getOrganizationCode()); assertEquals(doc1.getDeliveryCampusCode(), doc2.getDeliveryCampusCode()); assertEquals(doc1.getDeliveryRequiredDate(), doc2.getDeliveryRequiredDate()); assertEquals(doc1.getRequestorPersonName(), doc2.getRequestorPersonName()); assertEquals(doc1.getContractManagerCode(), doc2.getContractManagerCode()); assertEquals(doc1.getVendorContractName(), doc2.getVendorContractName()); assertEquals(doc1.getPurchaseOrderAutomaticIndicator(), doc2.getPurchaseOrderAutomaticIndicator()); assertEquals(doc1.getPurchaseOrderTransmissionMethodCode(), doc2.getPurchaseOrderTransmissionMethodCode()); assertEquals(doc1.getRequisitionIdentifier(), doc2.getRequisitionIdentifier()); assertEquals(doc1.getPurchaseOrderPreviousIdentifier(), doc2.getPurchaseOrderPreviousIdentifier()); assertEquals(doc1.getPurchaseOrderCreateTimestamp(), doc2.getPurchaseOrderCreateTimestamp()); } /** * Tests that the PurchaseOrderService would attempt to update vendor with missing commodity codes. * */ public void testUpdateVendorCommodityCode() { PurchaseOrderDocument po = PurchaseOrderDocumentWithCommodityCodeFixture.PO_VALID_ACTIVE_COMMODITY_CODE_WITH_VENDOR_COMMODITY_CODE.createPurchaseOrderDocument(); VendorDetail updatedVendor = poService.updateVendorWithMissingCommodityCodesIfNecessary(po); assertFalse(updatedVendor == null); if (updatedVendor != null) { boolean foundMatching = false; for (VendorCommodityCode vcc : updatedVendor.getVendorCommodities()) { if (vcc.getPurchasingCommodityCode().equals(((PurchaseOrderItem) po.getItem(0)).getPurchasingCommodityCode())) { foundMatching = true; break; } } assertTrue(foundMatching); } } /** * Tests that the PurchaseOrderService would create an Automatic Purchase Order document. * * @throws Exception */ public void testCreateAutomaticPurchaseOrderDocument() throws Exception { RequisitionDocument req = RequisitionDocumentFixture.REQ_APO_VALID.createRequisitionDocument(); routeRequisition(req); String docId = req.getDocumentNumber(); poService.createAutomaticPurchaseOrderDocument(req); RequisitionDocument requisitionDocument = (RequisitionDocument) SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(docId); String poDocId = requisitionDocument.getRelatedViews().getRelatedPurchaseOrderViews().get(0).getDocumentNumber(); PurchaseOrderDocument purchaseOrderDocument = (PurchaseOrderDocument)SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(poDocId); assertTrue(purchaseOrderDocument.getPurchaseOrderAutomaticIndicator()); assertEquals(purchaseOrderDocument.getContractManagerCode(), new Integer(99)); } /** * Tests that the PurchaseOrderService would create a Purchase Order document with * status In Process. * * @throws Exception */ public void testCreatePurchaseOrderDocument() throws Exception { RequisitionDocument req = RequisitionDocumentFixture.REQ_NO_APO_VALID.createRequisitionDocument(); routeRequisition(req); String docId = req.getDocumentNumber(); Integer contractManagerCode = new Integer(12); poService.createPurchaseOrderDocument(req, "parke", contractManagerCode); RequisitionDocument requisitionDocument = (RequisitionDocument) SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(docId); String poDocId = requisitionDocument.getRelatedViews().getRelatedPurchaseOrderViews().get(0).getDocumentNumber(); PurchaseOrderDocument purchaseOrderDocument = (PurchaseOrderDocument)SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(poDocId); assertEquals(purchaseOrderDocument.getApplicationDocumentStatus(),PurapConstants.PurchaseOrderStatuses.APPDOC_IN_PROCESS); assertEquals(purchaseOrderDocument.getContractManagerCode(), contractManagerCode); } protected void routeRequisition( RequisitionDocument req ) { try { AccountingDocumentTestUtils.routeDocument(req, SpringContext.getBean(DocumentService.class)); } catch ( ValidationException ex ) { fail( "Validation problems routing document: " + dumpMessageMapErrors() + "\n" + req ); } catch (WorkflowException ex) { fail( "Error routing document: " + ex.getMessage() ); } } protected void routePurchaseOrder( PurchaseOrderDocument poDoc ) throws Exception { try { AccountingDocumentTestUtils.testRouteDocument(poDoc, SpringContext.getBean(DocumentService.class)); } catch ( ValidationException ex ) { fail( "Validation problems routing document: " + dumpMessageMapErrors() ); } catch (WorkflowException ex) { fail( "Error routing document: " + ex.getMessage() ); } } // JHK: Commenting out test - something in the test suite is causing this test to lock up // on the document header for an hour on Oracle only // /** // * Tests that the PurchaseOrderService would create and save potential change document. // * // * @throws Exception // */ // public void testCreateAndSavePotentialChangeDocument() throws Exception { // //Need to create a requisition first to be used to create an APO // RequisitionDocument req = RequisitionDocumentFixture.REQ_APO_VALID.createRequisitionDocument(); // routeRequisition(req); // String docId = req.getDocumentNumber(); // // //Create an APO using the requisition we created earlier in this method // poService.createAutomaticPurchaseOrderDocument(req); // RequisitionDocument requisitionDocument = (RequisitionDocument) SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(docId); // String poDocId = requisitionDocument.getRelatedViews().getRelatedPurchaseOrderViews().get(0).getDocumentNumber(); // PurchaseOrderDocument purchaseOrderDocument = (PurchaseOrderDocument)SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(poDocId); // // //Test the pending action indicator and status codes after invoking // //the createAndSavePotentialChangeDocument method. // PurchaseOrderDocument newDocument = poService.createAndSavePotentialChangeDocument(poDocId, PurapConstants.PurchaseOrderDocTypes.PURCHASE_ORDER_AMENDMENT_DOCUMENT, PurchaseOrderStatuses.APPDOC_AMENDMENT); // assertEquals (newDocument.getApplicationDocumentStatus(), PurchaseOrderStatuses.APPDOC_CHANGE_IN_PROCESS); // PurchaseOrderDocument oldDocument = (PurchaseOrderDocument)SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(poDocId); // assertTrue(oldDocument.isPendingActionIndicator()); // assertEquals(oldDocument.getApplicationDocumentStatus(), PurchaseOrderStatuses.APPDOC_AMENDMENT); // } /** * Tests that the PurchaseOrderService would create and route potential change document. * * @throws Exception */ public void testCreateAndRoutePotentialChangeDocument() throws Exception { //Need to create a requisition first to be used to create an APO RequisitionDocument req = RequisitionDocumentFixture.REQ_ALTERNATE_APO.createRequisitionDocument(); // this is a bit of a hack since a previous change to the RequisitionAccountingLineFixture.addTo method // doesn't work well with uneven amounts that aren't a 50/50 split between accounting lines // in this case 239.99 is split 120.00 and 119.99 // might want to revisit the RequisitionAccountingLineFixture.addTo change and the fixture amount problems // it previously fixed at some point for(RequisitionItem item : (List<RequisitionItem>)req.getItems()) { purapAccountingService.updateItemAccountAmounts(item); } routeRequisition(req); String docId = req.getDocumentNumber(); //Create an APO using the requisition we created earlier in this method poService.createAutomaticPurchaseOrderDocument(req); RequisitionDocument requisitionDocument = (RequisitionDocument) SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(docId); String poDocId = requisitionDocument.getRelatedViews().getRelatedPurchaseOrderViews().get(0).getDocumentNumber(); PurchaseOrderDocument purchaseOrderDocument = (PurchaseOrderDocument)SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(poDocId); WorkflowTestUtils.waitForDocumentApproval(purchaseOrderDocument.getDocumentNumber()); //Test the status codes after invoking //the createAndRoutePotentialChangeDocument method. PurchaseOrderDocument newDocument = poService.createAndRoutePotentialChangeDocument(poDocId, PurapConstants.PurchaseOrderDocTypes.PURCHASE_ORDER_VOID_DOCUMENT, "", null, PurchaseOrderStatuses.APPDOC_PENDING_VOID); PurchaseOrderDocument oldDocument = (PurchaseOrderDocument)SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(poDocId); assertEquals(oldDocument.getApplicationDocumentStatus(), PurchaseOrderStatuses.APPDOC_RETIRED_VERSION); } /** * Tests that the PurchaseOrderService would print purchase order quote requests list pdf. * * @throws Exception */ public void testPrintPurchaseOrderQuoteRequestsListPDF() throws Exception { PurchaseOrderDocument po = PurchaseOrderDocumentFixture.PO_ONLY_REQUIRED_FIELDS_MULTI_ITEMS.createPurchaseOrderDocument(); po.setApplicationDocumentStatus(PurchaseOrderStatuses.APPDOC_OPEN); po.refreshNonUpdateableReferences(); po.prepareForSave(); AccountingDocumentTestUtils.saveDocument(po, docService); ByteArrayOutputStream baosPDF = new ByteArrayOutputStream(); try { DateTimeService dtService = SpringContext.getBean(DateTimeService.class); poService.printPurchaseOrderQuoteRequestsListPDF(po.getDocumentNumber(), baosPDF); assertTrue(baosPDF.size()>0); } catch (ValidationException e) { LOG.warn("Caught ValidationException while trying to retransmit PO with doc id " + po.getDocumentNumber()); } finally { if (baosPDF != null) { baosPDF.reset(); } } } /** * Tests that the PurchaseOrderService would print purchase order quote pdf. * * @throws Exception */ public void testPrintPurchaseOrderQuotePDF() throws Exception { PurchaseOrderDocument po = PurchaseOrderDocumentFixture.PO_ONLY_REQUIRED_FIELDS_MULTI_ITEMS.createPurchaseOrderDocument(); po.setApplicationDocumentStatus(PurchaseOrderStatuses.APPDOC_OPEN); po.refreshNonUpdateableReferences(); po.prepareForSave(); AccountingDocumentTestUtils.saveDocument(po, docService); PurchaseOrderVendorQuote vendorQuote = PurchaseOrderVendorQuoteFixture.BASIC_VENDOR_QUOTE_1.createPurchaseOrderVendorQuote(); vendorQuote.setDocumentNumber(po.getDocumentNumber()); ByteArrayOutputStream baosPDF = new ByteArrayOutputStream(); try { poService.printPurchaseOrderQuotePDF(po, vendorQuote, baosPDF); assertTrue(baosPDF.size()>0); LOG.error("Attn From testPrintPurchaseOrderQuotePDF"); LOG.error("baosPDF.size is : " + baosPDF.size()); LOG.error("----------------------------------------"); } catch (Exception e) { LOG.warn("Caught ValidationException while trying to print PO quote pdf with doc id " + po.getDocumentNumber()); } finally { if (baosPDF != null) { baosPDF.reset(); } } } /** * Tests that the PurchaseOrderService would performPurchaseOrderFirstTransmitViaPrinting * * * @throws Exception */ public void testPerformPurchaseOrderFirstTransmitViaPrinting() throws Exception { PurchaseOrderDocument po = PurchaseOrderDocumentFixture.PO_ONLY_REQUIRED_FIELDS_MULTI_ITEMS.createPurchaseOrderDocument(); po.setApplicationDocumentStatus(PurchaseOrderStatuses.APPDOC_OPEN); po.refreshNonUpdateableReferences(); po.prepareForSave(); AccountingDocumentTestUtils.saveDocument(po, docService); ByteArrayOutputStream baosPDF = new ByteArrayOutputStream(); try { DateTimeService dtService = SpringContext.getBean(DateTimeService.class); StringBuffer sbFilename = new StringBuffer(); sbFilename.append("PURAP_PO_QUOTE_REQUEST_LIST"); sbFilename.append(po.getPurapDocumentIdentifier()); sbFilename.append("_"); sbFilename.append(dtService.getCurrentDate().getTime()); sbFilename.append(".pdf"); poService.performPurchaseOrderFirstTransmitViaPrinting(po.getDocumentNumber(), baosPDF); assertTrue(baosPDF.size()>0); } catch (ValidationException e) { LOG.warn("Caught ValidationException while trying to retransmit PO with doc id " + po.getDocumentNumber()); } finally { if (baosPDF != null) { baosPDF.reset(); } } } /** * Tests that the PurchaseOrderService would performPurchaseOrderPreviewPrinting * * @throws Exception */ public void testPerformPurchaseOrderPreviewPrinting() throws Exception { PurchaseOrderDocument po = PurchaseOrderDocumentFixture.PO_ONLY_REQUIRED_FIELDS_MULTI_ITEMS.createPurchaseOrderDocument(); po.setApplicationDocumentStatus(PurchaseOrderStatuses.APPDOC_OPEN); po.refreshNonUpdateableReferences(); po.prepareForSave(); AccountingDocumentTestUtils.saveDocument(po, docService); ByteArrayOutputStream baosPDF = new ByteArrayOutputStream(); try { DateTimeService dtService = SpringContext.getBean(DateTimeService.class); StringBuffer sbFilename = new StringBuffer(); sbFilename.append("PURAP_PO_QUOTE_REQUEST_LIST"); sbFilename.append(po.getPurapDocumentIdentifier()); sbFilename.append("_"); sbFilename.append(dtService.getCurrentDate().getTime()); sbFilename.append(".pdf"); poService.performPurchaseOrderPreviewPrinting(po.getDocumentNumber(), baosPDF); assertTrue(baosPDF.size()>0); } catch (ValidationException e) { LOG.warn("Caught ValidationException while trying to retransmit PO with doc id " + po.getDocumentNumber()); } finally { if (baosPDF != null) { baosPDF.reset(); } } } /** * Tests that the PurchaseOrderService would performPrintPurchaseOrderPDFOnly * * @throws Exception */ public void testPerformPrintPurchaseOrderPDFOnly() throws Exception { PurchaseOrderDocument po = PurchaseOrderDocumentFixture.PO_ONLY_REQUIRED_FIELDS_MULTI_ITEMS.createPurchaseOrderDocument(); po.setApplicationDocumentStatus(PurchaseOrderStatuses.APPDOC_OPEN); po.refreshNonUpdateableReferences(); po.prepareForSave(); AccountingDocumentTestUtils.saveDocument(po, docService); ByteArrayOutputStream baosPDF = new ByteArrayOutputStream(); try { DateTimeService dtService = SpringContext.getBean(DateTimeService.class); StringBuffer sbFilename = new StringBuffer(); sbFilename.append("PURAP_PO_QUOTE_REQUEST_LIST"); sbFilename.append(po.getPurapDocumentIdentifier()); sbFilename.append("_"); sbFilename.append(dtService.getCurrentDate().getTime()); sbFilename.append(".pdf"); poService.performPrintPurchaseOrderPDFOnly(po.getDocumentNumber(), baosPDF); assertTrue(baosPDF.size()>0); } catch (ValidationException e) { LOG.warn("Caught ValidationException while trying to retransmit PO with doc id " + po.getDocumentNumber()); } finally { if (baosPDF != null) { baosPDF.reset(); } } } /** * Tests that the PurchaseOrderService would do the completePurchaseOrder * for non B2B purchase orders. * * @throws Exception */ public void testCompletePurchaseOrder_NonB2B() throws Exception { PurchaseOrderDocument po = PurchaseOrderDocumentFixture.PO_ONLY_REQUIRED_FIELDS_MULTI_ITEMS.createPurchaseOrderDocument(); po.setApplicationDocumentStatus(PurchaseOrderStatuses.APPDOC_IN_PROCESS); po.refreshNonUpdateableReferences(); po.prepareForSave(); AccountingDocumentTestUtils.saveDocument(po, docService); poService.completePurchaseOrder(po); assertEquals(po.getApplicationDocumentStatus(), PurchaseOrderStatuses.APPDOC_OPEN); assertTrue(po.isPurchaseOrderCurrentIndicator()); assertNotNull(po.getPurchaseOrderInitialOpenTimestamp()); } /** * Tests that the PurchaseOrderService would do the completePurchaseOrder * for B2B purchase orders. * * @throws Exception */ public void testCompletePurchaseOrder_B2B() throws Exception { RequisitionDocument requisitionDocument = RequisitionDocumentFixture.REQ_B2B_WITH_PO_VENDOR.createRequisitionDocument(); final String docId = requisitionDocument.getDocumentNumber(); routeRequisition(requisitionDocument); poService.createAutomaticPurchaseOrderDocument(requisitionDocument); requisitionDocument = (RequisitionDocument) SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(docId); String poDocId = requisitionDocument.getRelatedViews().getRelatedPurchaseOrderViews().get(0).getDocumentNumber(); PurchaseOrderDocument purchaseOrderDocument = (PurchaseOrderDocument)SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(poDocId); WorkflowTestUtils.waitForDocumentApproval(purchaseOrderDocument.getDocumentNumber()); poService.completePurchaseOrder(purchaseOrderDocument); assertEquals(purchaseOrderDocument.getApplicationDocumentStatus(), PurchaseOrderStatuses.APPDOC_OPEN); assertTrue(purchaseOrderDocument.isPurchaseOrderCurrentIndicator()); assertNotNull(purchaseOrderDocument.getPurchaseOrderInitialOpenTimestamp()); } /** * This is not quite ready yet. Got some XML parsing error. */ // @ConfigureContext(session = parke, shouldCommitTransactions = true) // public void testRetransmitB2BPurchaseOrder() throws Exception { // RequisitionDocument requisitionDocument = RequisitionDocumentFixture.REQ_B2B_WITH_PO_VENDOR.createRequisitionDocument(); // final String docId = requisitionDocument.getDocumentNumber(); // AccountingDocumentTestUtils.routeDocument(requisitionDocument, SpringContext.getBean(DocumentService.class)); // poService.createAutomaticPurchaseOrderDocument(requisitionDocument); // requisitionDocument = (RequisitionDocument) SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(docId); // String poDocId = requisitionDocument.getRelatedViews().getRelatedPurchaseOrderViews().get(0).getDocumentNumber(); // PurchaseOrderDocument purchaseOrderDocument = (PurchaseOrderDocument)SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(poDocId); // WorkflowTestUtils.waitForStatusChange(purchaseOrderDocument.getDocumentHeader().getWorkflowDocument(), KewApiConstants.ROUTE_HEADER_FINAL_CD); // poService.completePurchaseOrder(purchaseOrderDocument); // // poService.retransmitB2BPurchaseOrder(purchaseOrderDocument); // assertTrue(KNSGlobalVariables.getMessageList().contains(PurapKeyConstants.B2B_PO_RETRANSMIT_SUCCESS)); // } public void testIsPurchaseOrderOpenForProcessing_HappyPath() throws Exception { //Create and route a basic PO to Open status. PurchaseOrderDocument poDocument = PurchaseOrderDocumentFixture.PO_ONLY_REQUIRED_FIELDS.createPurchaseOrderDocument(); poDocument.prepareForSave(); assertFalse(DocumentStatus.ENROUTE.equals(poDocument.getDocumentHeader().getWorkflowDocument().getStatus())); routePurchaseOrder(poDocument); WorkflowTestUtils.waitForDocumentApproval(poDocument.getDocumentNumber()); assertTrue(poService.isPurchaseOrderOpenForProcessing(poDocument.getPurapDocumentIdentifier())); } @ConfigureContext(session = appleton, shouldCommitTransactions=true) public void testIsPurchaseOrderOpenForProcessing_With_PREQ() throws Exception { PaymentRequestDocumentTest preqDocTest = new PaymentRequestDocumentTest(); PurchaseOrderDocument purchaseOrderDocument = preqDocTest.createPurchaseOrderDocument(PurchaseOrderDocumentFixture.PO_APPROVAL_REQUIRED, true, new Integer(SpringContext.getBean(SequenceAccessorService.class).getNextAvailableSequenceNumber("AP_PUR_DOC_LNK_ID").toString())); PaymentRequestDocument paymentRequestDocument = preqDocTest.createPaymentRequestDocument(PaymentRequestDocumentFixture.PREQ_APPROVAL_REQUIRED, purchaseOrderDocument, true, new KualiDecimal[] {new KualiDecimal(100)}); paymentRequestDocument.setAccountsPayablePurchasingDocumentLinkIdentifier(purchaseOrderDocument.getAccountsPayablePurchasingDocumentLinkIdentifier()); paymentRequestDocument.setApplicationDocumentStatus(PaymentRequestStatuses.APPDOC_IN_PROCESS); docService.saveDocument(paymentRequestDocument); assertFalse(poService.isPurchaseOrderOpenForProcessing(purchaseOrderDocument)); } //testCreateAndSavePurchaseOrderSplitDocument() - this method is being tested in PurchaseOrderChangeDocumentTest.java //testRetransmitPurchaseOrderPDF() - this method is being tested in the testPurchaseOrderRetransmit. //testCompletePurchaseOrder() - this method is being tested in the testCompletePurchaseOrder_B2B and testCompletePurchaseOrder_NonB2B. }