use of org.kuali.kfs.module.purap.document.service.LogicContainer in project cu-kfs by CU-CommunityApps.
the class CuReceivingServiceImpl method spawnPoAmendmentForUnorderedItems.
protected void spawnPoAmendmentForUnorderedItems(ReceivingDocument receivingDocument, PurchaseOrderDocument po) {
// if receiving line document
if (receivingDocument instanceof LineItemReceivingDocument) {
LineItemReceivingDocument rlDoc = (LineItemReceivingDocument) receivingDocument;
// if a new item has been added spawn a purchase order amendment
if (hasNewUnorderedItem((LineItemReceivingDocument) receivingDocument)) {
String newSessionUserId = KFSConstants.SYSTEM_USER;
try {
LogicContainer logicToRun = new LogicContainer() {
@Override
public Object runLogic(Object[] objects) throws Exception {
LineItemReceivingDocument rlDoc = (LineItemReceivingDocument) objects[0];
String poDocNumber = (String) objects[1];
// create a PO amendment
PurchaseOrderAmendmentDocument amendmentPo = (PurchaseOrderAmendmentDocument) purchaseOrderService.createAndSavePotentialChangeDocument(poDocNumber, PurchaseOrderDocTypes.PURCHASE_ORDER_AMENDMENT_DOCUMENT, PurchaseOrderStatuses.APPDOC_AMENDMENT);
// KFSPTS-1769, KFSUPGRADE-339
((CuPurchaseOrderAmendmentDocument) amendmentPo).setSpawnPoa(true);
// add new lines to amendement
addUnorderedItemsToAmendment(amendmentPo, rlDoc);
// route amendment
documentService.routeDocument(amendmentPo, null, null);
// add note to amendment po document
String note = "Purchase Order Amendment " + amendmentPo.getPurapDocumentIdentifier() + " (document id " + amendmentPo.getDocumentNumber() + ") created for new unordered line items due to Receiving (document id " + rlDoc.getDocumentNumber() + ")";
Note noteObj = documentService.createNoteFromDocument(amendmentPo, note);
amendmentPo.addNote(noteObj);
noteService.save(noteObj);
return null;
}
};
purapService.performLogicWithFakedUserSession(newSessionUserId, logicToRun, new Object[] { rlDoc, po.getDocumentNumber() });
} catch (WorkflowException e) {
String errorMsg = "Workflow Exception caught: " + e.getLocalizedMessage();
throw new RuntimeException(errorMsg, e);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}
Aggregations