The TestSalesReturnOrderLineRegister
Class in X++
The TestSalesReturnOrderLineRegister
class serves as an entry point to the product registration process, specialized for the sales return order process. It handles the return disposition code and manages sales return order specifics, such as creating inventory transactions.
Code Overview
class TestSalesReturnOrderLineRegister extends TradeOrderLineRegister
{
ReturnDispositionCodeId returnDispositionCodeId;
DialogField dialogDispositionCodeId;
SalesLine salesLine;
boolean reverseInventTrans;
boolean recreateReservationLine;
boolean inRegistration;
public boolean init()
{
boolean ret = super();
salesLine = salesPurchLine;
return ret;
}
public void run()
{
this.runPreSuper();
super();
this.runPostSuper();
}
public void runPostSuper()
{
salesLine = SalesLine::findInventTransId(salesLine.InventTransId, true);
if (inRegistration)
{
if (salesLine.ReturnStatus == ReturnStatusLine::Awaiting)
{
if (reverseInventTrans && !salesLine.ReturnAllowReservation)
{
SalesLine::changeReturnOrderType(salesLine.InventTransId, null, true);
salesLine = SalesLine::findInventTransId(salesLine.InventTransId, true);
}
if (salesLine.ReturnDispositionCodeId)
{
salesLine.ReturnDispositionCodeId = '';
salesLine.update();
}
}
}
else
{
if (salesLine.ReturnStatus == ReturnStatusLine::Registered && recreateReservationLine)
{
salesLine.createReturnReservationLine();
salesLine = SalesLine::findInventTransId(salesLine.InventTransId, true);
}
}
}
}
Calling the TestSalesReturnOrderLineRegister
Class
public void registerReturnSOLine(SalesId _salesId, ReturnDispositionCodeId _dispositionCode)
{
TradeOrderLineRegister tradeOrderlineRegister;
TestSalesReturnOrderLineRegister salesReturnOrderLineRegister;
InventTransWMS_Register inventTransWMS_register;
TmpInventTransWMS TmpInventTransWMS;
SalesLine salesLine;
InventTrans inventTrans;
InventTransOrigin inventTransOrigin;
returnDispositionCode returnDispositionCode;
Args args = new Args();
while select forUpdate salesLine where salesLine.SalesId == _returnSOTable.SalesId
{
args.record(salesLine);
tradeOrderLineRegister = TestSalesReturnOrderLineRegister::construct();
tradeOrderLineRegister.parmArgs(args);
tradeOrderLineRegister.init();
salesReturnOrderLineRegister = tradeOrderLineRegister;
salesReturnOrderLineRegister.runPreSuper();
select firstOnly returnDispositionCode
where returnDispositionCode.DispositionAction == DispositionAction::Credit;
salesLine.ReturnDispositionCodeId = returnDispositionCode.DispositionCodeId;
salesLine.update();
select firstOnly crossCompany inventTrans
join RecId, InventTransId from inventTransOrigin
where inventTransOrigin.InventTransId == salesLine.InventTransId
&& inventTrans.InventTransOrigin == inventTransOrigin.RecId;
inventTransWMS_register = inventTransWMS_register::newStandard(tmpInventTransWMS);
tmpInventTransWMS.clear();
tmpInventTransWMS.initFromInventTrans(inventTrans);
tmpInventTransWMS.InventDimId = inventTrans.InventDimId;
tmpInventTransWMS.insert();
inventTransWMS_register.writeTmpInventTransWMS(tmpInventTransWMS, inventTrans, inventTrans.inventDim());
if (!inventTransWMS_register.updateInvent(salesLine))
{
throw error("Error during registration of sales line.");
}
}
}
No comments:
Post a Comment