class TEST_POPackingSlip
{
public static void main(Args _args)
{
PurchFormLetter purchFormLetter, purchFormLetterInvoice;
PurchFormletterParmData purchFormLetterParmData;
PurchParmUpdate purchParmUpdate;
PurchParmTable purchParmTable;
PurchParmLine purchParmLine;
TEST_POPartialLinesTmp poPartialLinesTmp;
PurchId purchId = 'purchaseOrderNum';
PurchTable purchTable = PurchTable::find(purchId);
PurchLine purchLine;
Num packingSlipId = purchTable.PurchId;
boolean isPackingslip = false;
ttsBegin;
if(purchTable.DocumentState != VersioningDocumentState::Confirmed)
{
purchFormLetter = PurchFormLetter::construct(DocumentStatus::PurchaseOrder);
purchFormLetter.update(purchTable, strFmt("%1", purchTable.PurchId));
Info(strFmt('Purchase order confirmed %1 ', purchTable.PurchId));
}
//partial quantity packingslip
try
{
purchFormLetterParmData = PurchFormletterParmData::newData(DocumentStatus::PackingSlip,VersioningUpdateType::Initial);
purchFormLetterParmData.parmOnlyCreateParmUpdate(true);
purchFormLetterParmData.createData(false);
purchParmUpdate = purchFormLetterParmData.parmParmUpdate();
purchParmTable.clear();
purchParmTable.TransDate = SystemDateGet();
purchParmTable.Ordering = DocumentStatus::PackingSlip;
purchParmTable.ParmJobStatus = ParmJobStatus::Waiting;
purchParmTable.Num = packingSlipId;
purchParmTable.PurchId = purchTable.PurchId;
purchParmTable.PurchName = purchTable.PurchName;
purchParmTable.DeliveryName = purchTable.DeliveryName;
purchParmTable.DeliveryPostalAddress = purchTable.DeliveryPostalAddress;
purchParmTable.OrderAccount = purchTable.OrderAccount;
purchParmTable.CurrencyCode = purchTable.CurrencyCode;
purchParmTable.InvoiceAccount = purchTable.InvoiceAccount;
purchParmTable.ParmId = purchParmUpdate.ParmId;
purchParmTable.insert();
while select purchLine where purchLine.PurchId == purchId//purchTable.PurchId
{
select poPartialLinesTmp where poPartialLinesTmp.PurchId == purchLine.purchId && poPartialLinesTmp.ItemId == purchLine.ItemId;
if(poPartialLinesTmp)
{
purchParmLine.InitFromPurchLine(purchLine);
purchParmLine.ReceiveNow = poPartialLinesTmp.Qty;
purchParmLine.ParmId = purchParmTable.ParmId;
purchParmLine.TableRefId = purchParmTable.TableRefId;
purchParmLine.setQty(DocumentStatus::PackingSlip, false, true);
purchParmLine.setLineAmount();
purchParmLine.insert();
isPackingslip = true;
}
else
{
continue;
}
}
if(isPackingslip == true)
{
purchFormLetter = PurchFormLetter::construct(DocumentStatus::PackingSlip);
purchFormLetter.transDate(systemDateGet());
purchFormLetter.proforma(false);
purchFormLetter.specQty(PurchUpdate::All);
purchFormLetter.purchTable(purchTable);
purchFormLetter.parmParmTableNum(purchParmTable.ParmId);
purchFormLetter.parmId(purchParmTable.ParmId);
purchFormLetter.purchParmUpdate(purchFormLetterParmData.parmParmUpdate());
purchFormLetter.run();
Info(strFmt('Packingslip crated for purchase order %1', purchTable.PurchId));
//for Invoice
TEST_PurchInvoice purchInvoice = new TEST_PurchInvoice();
purchInvoice.poInvoice(purchTable.PurchId);
}
ttsCommit;
}
catch
{
info(infolog.text());
}
}
}
---For Invoice
class TEST_PurchInvoice
{
public static void main(Args _args)
{
TEST_PurchInvoice purchInvoice = new TEST_PurchInvoice();
purchInvoice.poInvoice("purchId");
}
public void poInvoice(PurchId _purchId)
{
PurchFormLetter purchFormLetter;
PurchTable purchTable = PurchTable::find(_purchId);
PurchLine purchLine;
VendPackingSlipJour vendPackingSlipJour;
VendPackingSlipTrans vendPackingSlipTrans;
VendInvoiceInfoTable vendInvoiceInfoTable;
VendInvoiceInfoLine vendInvoiceInfoLine;
VendInvoiceInfoSubTable vendInvoiceInfoSubTable;
VendInvoiceInfoSubLine vendInvoiceInfoSubLine;
InvoiceId invoiceId;
TransDate invoiceDate;
VendInvoiceJour vendInvoiceJour;
InventTrans inventTransQty;
str errorLog;
boolean isInvoiced;
InvoiceId invoiceIdLocal;
select vendPackingSlipJour where vendPackingSlipJour.PurchId == purchTable.PurchId;
ttsBegin;
if(vendPackingSlipJour.PackingSlipId)
{
invoiceId = strFmt("INV_%1", vendPackingSlipJour.PackingSlipId);
invoiceDate = DateTimeUtil::getSystemDate(DateTimeUtil::getUserPreferredTimeZone());
purchTable = vendPackingSlipJour.purchTable();
vendInvoiceInfoTable.clear();
vendInvoiceInfoTable.initValue();
vendInvoiceInfoTable.initFromPurchTable(purchTable);
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();
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();
}
while select vendPackingSlipTrans
where vendPackingSlipTrans.PackingSlipId == vendPackingSlipJour.PackingSlipId
&& vendPackingSlipTrans.VendPackingSlipJour == vendPackingSlipJour.RecId
{
purchLine = vendPackingSlipTrans.purchLine();
vendInvoiceInfoLine.clear();
vendInvoiceInfoLine.initValue();
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.PurchPrice = purchLine.PurchPrice;
vendInvoiceInfoLine.InventNow = vendInvoiceInfoLine.ReceiveNow;
vendInvoiceInfoLine.DocumentOrigin = DocumentOrigin::Manual;
vendInvoiceInfoLine.ReceiveNow = vendPackingSlipTrans.Qty;
vendInvoiceInfoLine.modifiedReceiveNow();
if(purchLine.PurchQty != 0)
{
vendInvoiceInfoLine.LineAmount = (purchLine.LineAmount / purchLine.PurchQty) * vendInvoiceInfoLine.ReceiveNow;
}
vendInvoiceInfoLine.DefaultDimension = purchLine.DefaultDimension;
vendInvoiceInfoLine.insert();
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();
}
}
purchFormLetter = PurchFormLetter_Invoice::newFromSavedInvoice(vendInvoiceInfoTable);
purchFormLetter.update(vendInvoiceInfoTable.purchTable(),vendInvoiceInfoTable.Num);
}
ttsCommit;
PurchTable purchTableLocal = PurchTable::find(purchTable.PurchId);
PurchTable purchTableUpdate;
if (purchTableLocal.DocumentStatus == DocumentStatus::Invoice)
{
info(strFmt("Purchase order invoiced %1 ",purchTableLocal.PurchId));
isInvoiced = true;
}
if(isInvoiced == true)
{
while select vendInvoiceJour where vendInvoiceJour.PurchId == purchTable.PurchId
{
invoiceIdLocal += vendInvoiceJour.InvoiceId+', ';
}
select forupdate purchTableUpdate where purchTableUpdate.PurchId == purchTableLocal.PurchId;
if(purchTableUpdate)
{
ttsbegin;
purchTableUpdate.Invoiced = invoiceIdLocal;
purchTableUpdate.doUpdate();
ttscommit;
}
}
}
}
No comments:
Post a Comment