Wednesday, May 28, 2025

Manually remove Sales Order reservations via WHSReservation class

Salesline                   salesline;
InventTransOrigin    inventTransOrigin;
InventTrans              inventTrans;

while select salesline
    where salesline.SalesId     == 'YOURSALESID'
    &&  salesline.SalesStatus == SalesStatus::BackOrder
    //&&  salesline.LineNum == 'YOURLINENUM'
join inventTransOrigin
    where InventTransOrigin.inventTransid == salesline.InventTransId
join inventTrans
    where inventTrans.inventTransOrigin == inventTransOrigin.RecId
      && (inventTrans.StatusIssue       == StatusIssue::ReservOrdered ||
               inventTrans.StatusIssue       == StatusIssue::ReservPhysical)
{
    WHSRemoveReservationParameters tempParams = WHSRemoveReservationParameters::construct();

    tempParams.parmInventTransId(salesline.InventTransId);
    tempParams.parmItemId(salesLine.ItemId);
    tempParams.parmInventDimId(inventTrans.InventDimId);
    tempParams.parmQty(-inventTrans.Qty);
    tempParams.parmSourceType(InventTransType::Sales);
    tempParams.parmSourceRefId(salesline.SalesId);
    tempParams.parmSourceTransId('');
    tempParams.parmRemoveReservedPhysical(true);
    tempParams.parmSkipStatusValidation(true);    

    WHSReservation::staticRemoveReservationForParams(tempParams);

    info(strFmt("Reservations removed for sales order %1, line %2, item %3",salesline.SalesId,salesline.LineNum,salesline.itemid));

}