Friday, September 18, 2015

Ship Transfer Order automatically when picked

Recently, I had a requirement to ship transfer automatically when picked, but almost everything on the internet talked about automating the whole process.

This is the code I wrote, this work brilliantly with Tasklet and as long as this is added just after the MOB_postPickOrder.process() after the
case #PickWMSPickRouteOrderPrefix : // WMS Pick Order, picking Transfer Order will automatically ship it. Just pass wmsOrderTrans.inventTransRefId as a parameter to the following function.

static void PostInventTransferOrderShip(Args _args)
{
    inventTransferParmUpdate    inventTransferParmUpdate;
    ParmId                      parmID;
    InventTransferTable         inventTransferTable;
    InventTransferParmTable     inventTransferParmTable;
    InventTransferMultiShip     inventTransferMultiShip;

    select inventTransferTable
        where inventTransferTable.TransferId == "WHATEVER TRANSFER ORDER";

    parmId = RunBaseMultiParm::getSysParmId();
    inventTransferParmTable.clear();

    inventTransferParmUpdate.ParmId = parmID;
    inventTransferParmUpdate.insert();
    inventTransferParmTable.initValue();
    inventTransferParmTable.ParmId = parmId;
    inventTransferParmTable.TransferId = inventTransferTable.TransferId;
    inventTransferParmTable.ShipUpdateQty = InventTransferShipUpdateQty::All;
    inventTransferParmTable.EditLines = NoYes::Yes;
    inventTransferParmTable.AutoReceiveQty = NoYes::No;
    inventTransferParmTable.UpdateType = InventTransferUpdateType::Shipment;
    inventTransferParmTable.insert();
    //Transfer Order created above should have status as shipped
    inventTransferMultiShip = InventTransferMultiShip::construct();
    inventTransferMultiShip.runUpdate(inventTransferParmTable);
}