X++ Code to Create Purchase order automatically when physical inventory of a item
Requirement:
Class1: In this we will create PO If the Physical Inventory of a item numbers is zero (0) then we have to create Purchase Order for the items whose physical inventory is zero.
class BASVendorMasterDialogBox extends RunBase
{
DialogField fieldAccount;
DialogFIeld fieldName;
VendAccount vendAccount;
VendTable vendTable;
SalesTable salestableSelected,salestable;
Object Dialog()
{
Dialog dialog;
dialog = super();
// Set a title fordialog
dialog.caption( 'Vendor Account Form');
// Add a new field to Dialog
fieldAccount = dialog.addField(extendedTypeStr(vendAccount), 'Vendor Account' );
return dialog;
}
public boolean getFromDialog()
{
// Retrieve values from Dialog
vendAccount =fieldAccount.value();
return super();
}
public void run(SalesTable _salesTable = salestable)
{
salestable = _salesTable;
SalesLine salesLine;
PurchPurchaseOrderHeaderV2Entity purchPurchaseOrder;
PurchPurchaseOrderLineV2Entity purchPurchaseOrderLine;
container itemNumbers;
InventSum inventSum;
InventDim inventDim;
//Set Dialog field value to find CustTable
vendTable = VendTable::find(vendAccount);
while select ItemId from salesLine where salesLine.SalesId==salestable.SalesId
{
itemNumbers+=salesLine.ItemId;
}
str purchid;
//Header creation
for(int i=1;i<=conLen(itemNumbers);i++)
{
while select * from inventDim join salesLine where salesLine.INVENTDIMID==inventDim.INVENTDIMID
join PHYSICALINVENT ,INVENTLOCATIONID,INVENTSITEID from inventSum where inventSum.INVENTDIMID==inventDim.INVENTDIMID
&& inventSum.ItemId==salesLine.ItemId
&& salesLine.SALESID==salesTable.SalesId && salesLine.ITEMID==conPeek(itemNumbers,i)
&& inventSum.PhysicalInvent <= 0
{
purchPurchaseOrder.initValue();
purchPurchaseOrder.OrderVendorAccountNumber=vendTable.AccountNum;
purchPurchaseOrder.insert();
purchid = purchPurchaseOrder.PurchaseOrderNumber;
}
}
for(int i=1;i<=conLen(itemNumbers);i++)
{
while select * from inventDim join salesLine where salesLine.INVENTDIMID==inventDim.INVENTDIMID
join PHYSICALINVENT ,INVENTLOCATIONID,INVENTSITEID from inventSum where inventSum.INVENTDIMID==inventDim.INVENTDIMID
&& inventSum.ItemId==salesLine.ItemId
&& salesLine.SALESID==salesTable.SalesId && salesLine.ITEMID==conPeek(itemNumbers,i)
&& inventSum.PhysicalInvent <= 0
{
//Line creation
purchPurchaseOrderLine.initValue();
purchPurchaseOrderLine.PurchaseOrderNumber=purchid;
purchPurchaseOrderLine.ItemNumber=conPeek(itemNumbers,i);
purchPurchaseOrderLine.ReceivingSiteId=inventSum.InventSiteId;
purchPurchaseOrderLine.ReceivingWarehouseId=inventSum.inventLocationId;
purchPurchaseOrderLine.OrderedPurchaseQuantity=salesLine.SalesQty;
purchPurchaseOrderLine.insert();
purchPurchaseOrderLine.clear();
}
}
info(strFmt("Purchase Order number is %1",purchPurchaseOrder.PurchaseOrderNumber));
}
public static void main(Args _args)
{
BASVendorMasterDialogBox vendorAccountDialog = new BASVendorMasterDialogBox();
SalesTable salestableSelected =_args.record();
if(vendorAccountDialog.prompt())
{
vendorAccountDialog.run(salestableSelected);
}
}
}
Second Class : In this we will confirm the purchase order and post the product receipt and invoice Number.
class BASProductReceiptDialogBox extends RunBase
{
DialogField fieldAccount;
DialogFIeld productReceiptField, invoiceNumberField;
DlvDate divDate;
ProductReceiptId productReceipt;
VendInvoiceId vendInvoiceId;
PurchTable purchtable;
Object Dialog()
{
Dialog dialog;
dialog = super();
// Set a title fordialog
dialog.caption( 'Product Receipt and Invoice Box');
// Add a new field to Dialog
fieldAccount = dialog.addField(extendedTypeStr(DlvDate), 'Invoice Date' );
productReceiptField = dialog.addField(extendedTypeStr(ProductReceiptId), 'ProductReceiptId' );
invoiceNumberField = dialog.addField(extendedTypeStr(VendInvoiceId), 'InvoiceReceiptId' );
return dialog;
}
public boolean getFromDialog()
{
// Retrieve values from Dialog
divDate =fieldAccount.value();
productReceipt=productReceiptField.value();
vendInvoiceId=invoiceNumberField.value();
return super();
}
public void run(PurchTable _purchtable=purchtable)
{
purchtable = _purchtable; // get the selected purchid from purchtable
PurchFormLetter purchFormLetter; // It is a class which is used to update the purchase order
PurchId purchId = purchtable.PurchId;
purchTable = PurchTable::find(purchId);
//confirm the PO
purchFormLetter = purchFormLetter::construct(DocumentStatus::PurchaseOrder); // constructing the PO of documentstatus PO
//PurchFormLetter class is used to confirm the purchase order and for posting the product receipt and for invoicing the purchase order.
purchFormLetter.update(purchtable , strFmt(purchtable.PurchId)); // confirming the purchid
// Post product receipt
purchFormLetter = PurchFormLetter::construct(DocumentStatus::PackingSlip); // constructing the PO of documentstatus of packingslip
purchFormLetter.update(purchTable, strFmt(productReceipt));
info("Product Receipt Posted Successfully");
;
// posting invoice
purchFormLetter = PurchFormLetter::construct(DocumentStatus::Invoice);
purchFormLetter.update(purchTable, strFmt(vendInvoiceId),
DateTimeUtil::date(divDate));
info("Invoice Posted Successfully");
info(strFmt("%1,%2,%3",divDate,productReceipt,vendInvoiceId));
}
public static void main(Args _args)
{
BASProductReceiptDialogBox productReceiptDialog = new BASProductReceiptDialogBox();
PurchTable purchTable=_args.record();
if(productReceiptDialog.prompt())
{
productReceiptDialog.run(purchTable);
}
}
}

Comments
Post a Comment