SalesTable createReturnOrderHeader(
CustAccount _custAcct,
ReturnReasonCodeId _returnReasonCodeId,
str _emplId = '',
SalesId _salesId = '',
SalesId _ROSalesId = '')
{
SalesTable prevSalesTable,
newSalesTable,
ROSalesTable;
SalesParameters salesParameters;
ReturnPeriodOfValidity periodofValid;
// create the sales order header for the return order
salesParameters = SalesParameters::find();
periodofValid = salesParameters.ReturnPeriodOfValidity;
ROSalesTable = SalesTable::find(_ROSalesId);
if(!ROSalesTable)
{
// Initialize from Invoiced SO
if(_salesId)
{
prevSalesTable = SalesTable::find(_salesId);
newSalesTable.initReturnFromSalesTable(prevSalesTable);
newSalesTable.CustAccount = prevSalesTable.CustAccount;
}
// Create new Return Order
else
{
newSalesTable.CustAccount = _custAcct;
newSalesTable.SalesId = NumberSeq::newGetNum(SalesParameters::numRefSalesId()).num();
newSalesTable.ReturnItemNum = NumberSeq::newGetNum(SalesParameters::numRefReturnItemNum()).num();
newSalesTable.SalesType = SalesType::ReturnItem;
newSalesTable.ReturnStatus = ReturnStatusHeader::Created;
newSalesTable.DeliveryDateControlType = SalesDeliveryDateControlType::None;
newSalesTable.ShippingDateRequested = today() + periodofValid;
}
newSalesTable.initFromCustTable();
// periodofValid derive from Sales Parameter
if(periodofValid)
{
newSalesTable.ReturnDeadline = today() + periodofValid;
}
else
{
newSalesTable.ReturnDeadline = today();
}
//Reason Code
newSalesTable.ReturnReasonCodeId = _returnReasonCodeId;
newSalesTable.SalesType = SalesType::ReturnItem;
if (newSalesTable.validateWrite())
{
newSalesTable.insert();
// return the new Return Order
return newSalesTable;
}
}
//return the existing RO
return ROSalesTable;
}
public void createReturnOrderLine(
ItemId _itemId,
Qty _qty,
SalesTable _returnOrder,
SalesId _originalSalesId= '',
EcoResItemSizeName _inventSizeId = '',
EcoResItemColorName _inventColorId = '',
EcoResItemConfigurationName _configId = '',
EcoResItemStyleName _inventStyleId = '',
InventBatchID _inventBatchId = '',
InventSerialId _inventSerialId = ''
)
{
CustInvoiceTrans custInvoiceTrans;
SalesLine salesLine;
CustInvoiceJour custInvoiceJour;
InventDim inventDim,
pvInventDim;
ttsbegin;
if(_originalSalesId)
{
// Need to populate all the necessary fields for the new salesline
// using the existing invoice and the new sales order
select custInvoiceJour
where custInvoiceJour.RefNum == RefNum::SalesOrder
&&custInvoiceJour.SalesId == _originalSalesId;
if(custInvoiceJour)
{
select * from custInvoiceTrans
where custInvoiceTrans.SalesId == custInvoiceJour.SalesId
&& custInvoiceTrans.InvoiceId == custInvoiceJour.InvoiceId
&& custInvoiceTrans.ItemId == _itemid
&& custInvoiceTrans.InvoiceDate == custInvoiceJour.InvoiceDate
&& custInvoiceTrans.numberSequenceGroup == custInvoiceJour.numberSequenceGroup
join inventDim
where inventDim.inventDimId == custInvoiceTrans.InventDimId
&& ((_inventBatchId == '') || (inventDim.inventBatchId == _inventBatchId))
&& ((_inventSerialId == '') || (inventDim.inventSerialId == _inventSerialId))
&& ((_configId == '') || (inventDim.configId == _configId))
&& ((_inventColorId == '') || (inventDim.InventColorId == _inventColorId))
&& ((_inventSizeid == '') || (inventDim.InventSizeId == _inventSizeid))
&& ((_inventStyleId == '') || (inventDim.InventStyleId == _inventStyleId));
salesLine.initFromCustInvoiceTrans(custInvoiceTrans);
salesLine.InventTransIdReturn = custInvoiceTrans.InventTransId;
salesLine.InventDimId = custInvoiceTrans.InventDimId;
}
}
salesLine.initFromSalesTable(_returnOrder);
salesLine.ItemId = _itemId;
salesLine.SalesUnit = InventTableModule::find(_itemId, ModuleInventPurchSales::Invent).UnitId;
salesLine.LineAmount = salesLine.returnLineAmount();
salesLine.SalesQty = 0;
// find inventDim
inventDim.data(InventDim::find(salesLine.InventDimId));
inventDim.InventSizeId = _inventSizeId;
inventDim.InventColorId = _inventColorId;
inventDim.configId = _configId;
inventDim.InventStyleId = _inventStyleId;
inventDim.inventBatchId = _inventBatchId;
inventDim.inventSerialId= _inventSerialId;
pvInventDim = inventDim::findOrCreate(inventDim);
salesLine.InventDimId = pvInventDim.inventDimId;
salesLine.createLine(true, false, true, false, false, false, false, false);
salesLine.ExpectedRetQty= -_qty;
salesLine.update();
ttscommit;
}
To find original SalesId if return order lines exist: select firstOnly RecId, ReferenceId from inventTransOrigin
where inventTransOrigin.InventTransId == tradeInventTransIdReturn
&&inventTransOrigin.ReferenceCategory == InventTransType::Sales;
if (inventTransOrigin)
{
originalSalesId = inventTransOrigin.ReferenceId;
}
If you found value in what I share, I've set up a Buy Me a Coffee page as a way to show your support.
Buy Me a CoffeeNo comments. Be the first one to comment on this post.
DaxOnline.org is free platform that allows you to quickly store and reuse snippets, notes, articles related to Dynamics 365 FO.
Authors are allowed to set their own "buy me a coffee" link.
Join us.