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;
}
}
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter