AX 2012 : Post consolidation of sales invoice


public void postSalesInvoice(SalesId _sumSalesId,PackingSlipId _consolidatedPackingSlipId,SalesInvoiceId _ppSalesInvoiceId = "",InvoiceDate _ppInvoiceDate = systemDateGet())
{
SalesFormLetter salesFormLetter;
SalesFormletterParmData salesFormletterParmData;
SalesParmUpdate salesParmUpdate;
SalesParmTable salesParmTable;
SalesParmLine salesParmLine;
SalesTable salesTable;
CustPackingSlipTrans custPackingSlipTrans;
// To identify the postiing results

salesFormletterParmData = SalesFormletterParmData::newData(DocumentStatus::Invoice,VersioningUpdateType::Initial);
salesFormletterParmData.parmOnlyCreateParmUpdate(true);

salesFormletterParmData.createData(false);
salesParmUpdate = salesFormletterParmData.parmParmUpdate();
salesParmUpdate.selectForUpdate(true);

salesParmUpdate.InvoiceIdOCP = _ppSalesInvoiceId;
salesParmUpdate.doUpdate();
salesTable = SalesTable::find(_sumSalesId);
// Set SalesParmTable table

salesParmTable.clear();
salesParmTable.initValue();
salesParmTable.initFromSalesTable(salesTable);
salesParmTable.Transdate = _ppInvoiceDate;
salesParmTable.Ordering = DocumentStatus::Invoice;
salesParmTable.ParmJobStatus = ParmJobStatus::Waiting;
salesParmTable.ParmId = salesParmUpdate.ParmId;
salesParmTable.insert();
// Set SalesParmLine table

if(salesParmTable.RecId)
{
while select custPackingSlipTrans

where custPackingSlipTrans.PackingSlipId == _consolidatedPackingSlipId
{
salesParmLine.initFromSalesLine(custPackingSlipTrans.salesLine());
salesParmLine.ItemId = custPackingSlipTrans.ItemId;
salesParmLine.DeliverNow = custPackingSlipTrans.Qty;
salesParmLine.ParmId = salesParmTable.ParmId;
salesParmLine.TableRefId = salesParmTable.TableRefId;
salesParmLine.setQty(DocumentStatus::Invoice, false, true);

salesParmLine.setLineAmount();
if(salesParmLine.validateWrite())

{
salesParmLine.insert();
}
}
salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice);
salesFormLetter.transDate(_ppInvoiceDate);
salesFormLetter.proforma(false);

salesFormLetter.specQty(SalesUpdate::PackingSlip);
salesFormLetter.salesTable(salesTable);
salesFormLetter.reArrange(false);

salesFormLetter.parmId(salesParmTable.ParmId);
salesFormLetter.salesParmUpdate(salesFormletterParmData.parmParmUpdate());
salesFormLetter.run();
}
}

Comments