Unpick sales order through code in Ax 2009
Below job is to unpick sales order two lines and remove reservations.
InventTrans InventTrans;
TmpInventTransWMS tmpinventTransWMS;
InventMovement movement;
InventTransWMS_Pick inventTranspick;
InventTransId conInventTransId;
Qty conVariantQty;
WMSOrderTrans wmsOrderTrans;
SEMKITSALESTRANS SEMKITSALESTRANS;
//Remove any existing reservations
InventTrans inventTransReserve ;
InventMovement inventMovement ;
InventUpd_Reservation inventUpd_Reservation ;
;
while select SEMKITSALESTRANS
where SEMKITSALESTRANS.SalesId == 'SO-0014445'
&& (SEMKITSALESTRANS.LineNum == 7 || SEMKITSALESTRANS.LineNum == 8)
{
conInventTransId = SEMKITSALESTRANS.InventTransId;
conVariantQty = SEMKITSALESTRANS.KitQty;
//pick or unpick
InventTrans = InventTrans::findTransId(conInventTransId);
select wmsOrderTrans
where wmsOrderTrans.inventTransId == conInventTransId;
if(inventTrans.RecId && inventTrans.StatusIssue == StatusIssue::Picked)
{
if (wmsOrderTrans.RecId)
{
ttsbegin;
InventTrans.selectForUpdate(true);
InventTrans.TransChildType = InventTransChildType::WMSOrder;
InventTrans.TransChildRefId = wmsOrderTrans.orderId;
InventTrans.update();
ttscommit;
}
movement = null;
if (wmsOrderTrans.RecId)
{
movement = InventMovement::construct(wmsOrderTrans);
}
else
{
movement = InventMovement::construct(SEMKITSALESTRANS);
}
inventTranspick = new InventTransWMS_Pick(movement,tmpInventTransWMS);
tmpInventTransWMS = null;
tmpInventTransWMS.initFromInventTrans(inventTrans);
tmpInventTransWMS.InventQty = -1 * conVariantQty; //minus qty unpick, plus qty pick
tmpInventTransWMS.insert();
inventTransWMS_pick::updateInvent(inventTransPick, tmpInventTransWMS);
}
inventTransReserve = InventTrans::findTransId(conInventTransId);
if(inventTransReserve.RecId && inventTransReserve.StatusIssue == StatusIssue::ReservPhysical)
{
Inventmovement = inventTransReserve.inventmovement(true);
inventUpd_Reservation = InventUpd_Reservation::newInventDim(inventmovement,inventTransReserve.inventDim(), -1 * inventTransReserve.Qty ,false);
inventUpd_Reservation.updatenow();
}
InventTrans = InventTrans::findTransId(conInventTransId);
if (wmsOrderTrans.RecId && (InventTrans.RecId && InventTrans.StatusIssue != StatusIssue::ReservPhysical))
{
ttsbegin;
wmsOrderTrans.selectForUpdate(true);
wmsOrderTrans.isReserved=noyes::No;
wmsOrderTrans.update();
ttscommit;
}
}
InventTrans InventTrans;
TmpInventTransWMS tmpinventTransWMS;
InventMovement movement;
InventTransWMS_Pick inventTranspick;
InventTransId conInventTransId;
Qty conVariantQty;
WMSOrderTrans wmsOrderTrans;
SEMKITSALESTRANS SEMKITSALESTRANS;
//Remove any existing reservations
InventTrans inventTransReserve ;
InventMovement inventMovement ;
InventUpd_Reservation inventUpd_Reservation ;
;
while select SEMKITSALESTRANS
where SEMKITSALESTRANS.SalesId == 'SO-0014445'
&& (SEMKITSALESTRANS.LineNum == 7 || SEMKITSALESTRANS.LineNum == 8)
{
conInventTransId = SEMKITSALESTRANS.InventTransId;
conVariantQty = SEMKITSALESTRANS.KitQty;
//pick or unpick
InventTrans = InventTrans::findTransId(conInventTransId);
select wmsOrderTrans
where wmsOrderTrans.inventTransId == conInventTransId;
if(inventTrans.RecId && inventTrans.StatusIssue == StatusIssue::Picked)
{
if (wmsOrderTrans.RecId)
{
ttsbegin;
InventTrans.selectForUpdate(true);
InventTrans.TransChildType = InventTransChildType::WMSOrder;
InventTrans.TransChildRefId = wmsOrderTrans.orderId;
InventTrans.update();
ttscommit;
}
movement = null;
if (wmsOrderTrans.RecId)
{
movement = InventMovement::construct(wmsOrderTrans);
}
else
{
movement = InventMovement::construct(SEMKITSALESTRANS);
}
inventTranspick = new InventTransWMS_Pick(movement,tmpInventTransWMS);
tmpInventTransWMS = null;
tmpInventTransWMS.initFromInventTrans(inventTrans);
tmpInventTransWMS.InventQty = -1 * conVariantQty; //minus qty unpick, plus qty pick
tmpInventTransWMS.insert();
inventTransWMS_pick::updateInvent(inventTransPick, tmpInventTransWMS);
}
inventTransReserve = InventTrans::findTransId(conInventTransId);
if(inventTransReserve.RecId && inventTransReserve.StatusIssue == StatusIssue::ReservPhysical)
{
Inventmovement = inventTransReserve.inventmovement(true);
inventUpd_Reservation = InventUpd_Reservation::newInventDim(inventmovement,inventTransReserve.inventDim(), -1 * inventTransReserve.Qty ,false);
inventUpd_Reservation.updatenow();
}
InventTrans = InventTrans::findTransId(conInventTransId);
if (wmsOrderTrans.RecId && (InventTrans.RecId && InventTrans.StatusIssue != StatusIssue::ReservPhysical))
{
ttsbegin;
wmsOrderTrans.selectForUpdate(true);
wmsOrderTrans.isReserved=noyes::No;
wmsOrderTrans.update();
ttscommit;
}
}
How to unpick all quantity above code is working only for partial quantity, please help me out
ReplyDelete