public NW_GeneralResponse CreatePartialInvoice(PurchId PurchId, ProductReceiptId PackingSlipId, Num InvoiceNum, TransDate InvoiceDate) { VendPackingSlipJour vendPackingSlipJour; PurchFormLetter purchFormLetter; PurchTable purchTable; PurchLine purchLine; VendPackingSlipTrans vendPackingSlipTrans; VendInvoiceInfoTable vendInvoiceInfoTable, vendInvoiceInfoTable2, vendInvoiceInfoTable3; VendInvoiceInfoLine vendInvoiceInfoLine; VendInvoiceInfoSubTable vendInvoiceInfoSubTable; VendInvoiceInfoSubLine vendInvoiceInfoSubLine; InvoiceId invoiceId; TransDate _invoiceDate; VendInvoiceJour vendInvoiceJour; InventTrans inventTransQty; str Log; boolean Result; List Errors; NW_GeneralResponse Response = new NW_GeneralResponse(); ; changecompany('shc') { select vendPackingSlipJour where vendPackingSlipJour.PurchId == PurchId && vendPackingSlipJour.PackingSlipId == PackingSlipId; while select vendInvoiceInfoTable2 where vendInvoiceInfoTable2.InvoiceAccount == vendPackingSlipJour.InvoiceAccount && vendInvoiceInfoTable2.PurchId == PurchId { if(vendInvoiceInfoTable2.packingSlipId(vendInvoiceInfoTable2) == PackingSlipId) { Result = false; Response.ParmResult(Result); Response.ParmMsg("You have already Invoice with this Product Receipt."); Response.ParmErrors(Errors); return Response; } } ttsBegin; if(vendPackingSlipJour.PackingSlipId) { invoiceId = InvoiceNum; //strFmt("INV-%1", vendPackingSlipJour.PackingSlipId); _invoiceDate = InvoiceDate;//DateTimeUtil::getSystemDate(DateTimeUtil::getUserPreferredTimeZone()); purchTable = vendPackingSlipJour.purchTable(); //Generate Pending Invoice Header vendInvoiceInfoTable.clear(); vendInvoiceInfoTable.initValue(); vendInvoiceInfoTable.initFromPurchTable(purchTable); vendInvoiceInfoTable.ParmId = FormletterParmData::getNewParmId(); vendInvoiceInfoTable.DocumentOrigin = DocumentOrigin::Manual; vendInvoiceInfoTable.CurrencyCode = purchTable.CurrencyCode; vendInvoiceInfoTable.DeliveryName = purchTable.DeliveryName; vendInvoiceInfoTable.Num = invoiceId; vendInvoiceInfoTable.PurchName = purchTable.PurchName; vendInvoiceInfoTable.VendInvoiceSaveStatus = VendInvoiceSaveStatus::Pending; vendInvoiceInfoTable.TransDate = _invoiceDate; vendInvoiceInfoTable.DocumentDate = _invoiceDate; vendInvoiceInfoTable.LastMatchVariance = LastMatchVarianceOptions::OK; vendInvoiceInfoTable.ParmJobStatus = ParmJobStatus::Waiting; vendInvoiceInfoTable.DefaultDimension = vendInvoiceInfoTable.copyDimension(purchTable.DefaultDimension); vendInvoiceInfoTable.defaultRow(purchTable); vendInvoiceInfoTable.insert(); //Generate Vend Invoice Info reference if(vendInvoiceInfoTable) { vendInvoiceInfoSubTable.clear(); vendInvoiceInfoSubTable.initValue(); vendInvoiceInfoSubTable.defaultRow(); vendInvoiceInfoSubTable.ParmId = vendInvoiceInfoTable.ParmId; vendInvoiceInfoSubTable.OrigPurchId = vendInvoiceInfoTable.PurchId; vendInvoiceInfoSubTable.PurchName = vendInvoiceInfoTable.PurchName; vendInvoiceInfoSubTable.TableRefId = vendInvoiceInfoTable.TableRefId; vendInvoiceInfoSubTable.insert(); } //select all packing slip line while select vendPackingSlipTrans where vendPackingSlipTrans.PackingSlipId == vendPackingSlipJour.PackingSlipId && vendPackingSlipTrans.VendPackingSlipJour == vendPackingSlipJour.RecId { //Generate Pending Invoice Line purchLine = vendPackingSlipTrans.purchLine(); vendInvoiceInfoLine.clear(); vendInvoiceInfoLine.initValue(); // vendInvoiceInfoLine.defaultRow(null,purchLine); vendInvoiceInfoLine.initFromPurchLine(purchLine); vendInvoiceInfoLine.DeliveryName = vendInvoiceInfoTable.DeliveryName; vendInvoiceInfoLine.ParmId = vendInvoiceInfoTable.ParmId; vendInvoiceInfoLine.TableRefId = vendInvoiceInfoTable.TableRefId; vendInvoiceInfoLine.currencyCode = vendInvoiceInfoTable.CurrencyCode; vendInvoiceInfoLine.LineNum = any2int(purchLine.LineNumber); vendInvoiceInfoLine.InvoiceAccount = vendInvoiceInfoTable.InvoiceAccount; vendInvoiceInfoLine.InventDimId = vendPackingSlipTrans.InventDimId; vendInvoiceInfoLine.OrderAccount = vendInvoiceInfoTable.OrderAccount; vendInvoiceInfoLine.ItemId = vendPackingSlipTrans.ItemId; vendInvoiceInfoLine.InventTransId = vendPackingSlipTrans.InventTransId; vendInvoiceInfoLine.DocumentOrigin = DocumentOrigin::Manual; vendInvoiceInfoLine.ReceiveNow = vendPackingSlipTrans.Qty; vendInvoiceInfoLine.modifiedReceiveNow(); vendInvoiceInfoLine.PurchPrice = purchLine.PurchPrice; vendInvoiceInfoLine.InventNow = vendInvoiceInfoLine.ReceiveNow; if(purchLine.PurchQty != 0) { vendInvoiceInfoLine.LineAmount = (purchLine.LineAmount / purchLine.PurchQty) * vendInvoiceInfoLine.ReceiveNow; } vendInvoiceInfoLine.DefaultDimension = purchLine.DefaultDimension; vendInvoiceInfoLine.insert(); //Generate Vend Invoice Info reference from packing slip if(vendInvoiceInfoLine.RecId) { vendInvoiceInfoSubLine.clear(); vendInvoiceInfoSubLine.initValue(); vendInvoiceInfoSubLine.defaultRow(); vendInvoiceInfoSubLine.ParmId = vendInvoiceInfoTable.ParmId; vendInvoiceInfoSubLine.LineRefRecId = vendInvoiceInfoLine.RecId; vendInvoiceInfoSubLine.ReceiveNow = vendInvoiceInfoLine.ReceiveNow; vendInvoiceInfoSubLine.InventNow = vendInvoiceInfoLine.InventNow ; vendInvoiceInfoSubLine.JournalRefRecId = vendPackingSlipTrans.RecId; vendInvoiceInfoSubLine.JournalRefTableId = vendPackingSlipTrans.TableId; vendInvoiceInfoSubLine.DocumentId = vendPackingSlipTrans.PackingSlipId; vendInvoiceInfoSubLine.insert(); } } ttsCommit; Response.ParmResult(true); Response.ParmMsg(strFmt("Invoice %1 has been Created for Purchase order %2 with Product Receipt %3",invoiceId, purchTable.PurchId, PackingSlipId)); //Posting pending invoice invoice //purchFormLetter = PurchFormLetter_Invoice::newFromSavedInvoice(vendInvoiceInfoTable); //purchFormLetter.update(vendInvoiceInfoTable.purchTable(),vendInvoiceInfoTable.Num); } else { Response.ParmResult(false); Response.ParmMsg(strFmt("Can't found Product Receipt %1", PackingSlipId)); } return Response; } }