close

1. 加新work user:

image

 

2. 用 broswer 開warehouse mobile

Warehouse management > Work > Work Process

image

 

3. Menu Setting

image

Menu Items :

image

4. Extension on menu item to create new layoyt:

PO Receive Demo:

[WHSWorkExecuteMode(WHSWorkExecuteMode::DEMO_POReceive)]

class DEMO_WHSWorkExecuteDisplayPOReceive extends WHSWorkExecuteDisplay

{

    #DEMO_WHSRF_Extension

    int             qty;



/*

    boolean addedMessage;

    //boolean confirmation = true;



    container displayForm(container _con, str _buttonClicked = '')

    {

        container   ret = connull();

        container   con = _con;

        int         hasError    = 0;

        int         hasInfo     = 0;



        pass = WHSRFPassthrough::create(conPeek(_con, #PassthroughInfo));

        hasError = this.hasError(_con);



        // Remove the error message in the next step

        if (hasError)

        {

            con = conDel(con, #ControlsStart, 1);

        }



        hasInfo = this.DEMO_hasInformation(_con);



        // Remove the info message in the next step

        if (hasInfo)

        {

            con = conDel(con, #ControlsStart, 1);

        }



        // Return button

        if (_buttonClicked == #RFReturn)

        {

            if (step == DEMO_WHSPOReceiveStep::SelectItemId)

            {

                step    = DEMO_WHSPOReceiveStep::SelectItemArrivalJour;

                pass.remove(#DEMO_InventJournalId);

                pass.remove(#ItemId);

            }

            else if (step == DEMO_WHSPOReceiveStep::ScanSerialNum)

            {

                step    = DEMO_WHSPOReceiveStep::SelectItemId;               

                pass.remove(#ItemId);

                pass.remove(#SerialId);

            }

            else if (step == DEMO_WHSPOReceiveStep::InquireSN)

            {

                // When return back from inquire, clear all stored data

                container conData = conPeek(con, 4);

                conData = conPoke(conData, #data, "");

                con     = conPoke(con, 4, conData);



                if (pass.exists(#InventTransRecId))

                {

                    pass.remove(#SerialId);

                    step    = DEMO_WHSPOReceiveStep::ScanSerialNum;

                }

                else

                {

                    pass.remove(#ItemId);

                    step    = DEMO_WHSPOReceiveStep::SelectItemId;

                }               

            }

            //Changed by 9158 at 1415 on 20190114  -  begin

            else if (step == DEMO_WHSPOReceiveStep::Confirmation)

            {

                pass.remove(#ItemId);

                //confirmation = false;

                pass.remove(#confirmation);

                step    = DEMO_WHSPOReceiveStep::SelectItemId;



            }

            //Changed by 9158 at 1415 on 20190114  -  end

            else

            {

                throw Error ("Invalid step.");

            }

        }



        // Inquire mode

        if (_buttonClicked == #RFInquireSN)

        {

            step    = DEMO_WHSPOReceiveStep::InquireSN;

        }



        switch (step)

        {

            case DEMO_WHSPOReceiveStep::SelectItemArrivalJour:

                ret = this.getItemArrivalJourStep(ret);

                break;



            case DEMO_WHSPOReceiveStep::SelectItemId:

                if (!pass.exists(#DEMO_InventJournalId))

                {

                    if (strLRTrim(conPeek(conPeek(con, 4), #data)) != "")

                    {

                        pass.insert(#DEMO_InventJournalId, conPeek(conPeek(con, 4), #data));

                    }

                    else

                    {

                        step = DEMO_WHSPOReceiveStep::SelectItemArrivalJour;

                    }

                }

                else

                {

                    if (strLRTrim(conPeek(conPeek(con, 4), #data)) != "")

                    {

                        pass.insert(#ItemId, conPeek(conPeek(con, 4), #data));

                    }                     

                   

                }



                /*

                if (pass.exists(#ItemId) && pass.exists(#DEMO_InventJournalId))

                {

                    WMSJournalTrans     wMSJournalTrans;

                    InventTransOrigin   inventTransOrigin;

                    InventTrans         inventTrans;



                    str         itemIdStr   = pass.lookupStr(#ItemId);

                    container   tempCon     = str2con(itemIdStr, #InfoSeparator, false);



                    ItemId      itemId      = strLRTrim(conPeek(tempCon, 1));

                            

                    // Suggest the line by item ID

                    select firstonly wMSJournalTrans

                        where   wMSJournalTrans.journalId   == pass.lookupStr(#DEMO_InventJournalId)

                        &&      wMSJournalTrans.ItemId      == itemId

                    join inventTransOrigin

                        where   inventTransOrigin.InventTransId == wMSJournalTrans.inventTransId

                    join inventTrans

                        where   inventTrans.inventTransOrigin       == inventTransOrigin.RecId

                        &&     (inventTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::None

                            ||  inventTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::RequireSNScan);

                   

                    if (wMSJournalTrans)

                    {

                        ret = this.inventTransSplit(wMSJournalTrans, ret);

                    }

                    else

                    {

                        pass.remove(#ItemId);

                        ret += [this.buildControl(#RFLabel, #RFError, "All qty is scanned.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];

                    }

                   

                }



                if (step == DEMO_WHSPOReceiveStep::SelectItemId)

                {

                    ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));

                }

                else if (step == DEMO_WHSPOReceiveStep::ScanSerialNum)

                {

                    ret = this.getInventSerialIdStep(ret);

                }



                if (step == DEMO_WHSPOReceiveStep::SelectItemArrivalJour)

                {

                    ret = this.getItemArrivalJourStep(ret);

                }

                //Changed by 9158 at 1415 on 20190114  -  begin

                else if (step == DEMO_WHSPOReceiveStep::Confirmation)

                {

                    ret = this.getConfirmationStep(ret, pass.lookupStr(#DEMO_InventJournalId), #itemId);

                }



                break;

                */



               

                if (!pass.exists(#ItemId) && pass.exists(#DEMO_InventJournalId))

                {

                    ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));

                }



                if (step == DEMO_WHSPOReceiveStep::SelectItemArrivalJour)

                {

                    ret = this.getItemArrivalJourStep(ret);

                }



                else if (!pass.exists(#Confirmation))

                {

                    ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));

                }



                if (pass.exists(#ItemId) && pass.exists(#DEMO_InventJournalId) && pass.exists(#Confirmation))

                {

                    str         itemIdStr   = pass.lookupStr(#ItemId);

                    container   tempCon     = str2con(itemIdStr, #InfoSeparator, false);



                    ItemId      itemId      = strLRTrim(conPeek(tempCon, 1));

                   

                    ret = this.getConfirmationStep(ret, pass.lookupStr(#DEMO_InventJournalId), itemId);

                }

                //Changed by 9158 at 1415 on 20190114  -  end

                break;



            case DEMO_WHSPOReceiveStep::ScanSerialNum:

                pass.insert(#SerialId, conPeek(conPeek(con, 4), #data));

                ret = this.inventTransUpdate(pass.lookupInt64(#InventTransRecId), pass.lookupStr(#SerialId), ret);



                // Return to select item

                step = DEMO_WHSPOReceiveStep::SelectItemId;

                ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));

                break;



            //Changed by 9158 at 1415 on 20190114  -  begin

            case DEMO_WHSPOReceiveStep::Confirmation:               

                //pass.insert(#DEMO_InventJournalId, conPeek(conPeek(con, 4), #data));

//                pass.insert(#ItemId, conPeek(conPeek(con, 4), #data));



                if (pass.exists(#ItemId) && pass.exists(#DEMO_InventJournalId))

                {

                    WMSJournalTrans     wMSJournalTrans;

                    InventTransOrigin   inventTransOrigin;

                    InventTrans         inventTrans;



                    str         itemIdStr   = pass.lookupStr(#ItemId);

                    container   tempCon     = str2con(itemIdStr, #InfoSeparator, false);



                    ItemId      itemId      = strLRTrim(conPeek(tempCon, 1));

                            

                    // Suggest the line by item ID

                    select firstonly wMSJournalTrans

                        where   wMSJournalTrans.journalId   == pass.lookupStr(#DEMO_InventJournalId)

                        &&      wMSJournalTrans.ItemId      == itemId

                    join inventTransOrigin

                        where   inventTransOrigin.InventTransId == wMSJournalTrans.inventTransId

                    join inventTrans

                        where   inventTrans.inventTransOrigin       == inventTransOrigin.RecId

                        &&     (inventTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::None

                            ||  inventTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::RequireSNScan);

                    

                    if (wMSJournalTrans)

                    {

                        ret = this.inventTransSplit(wMSJournalTrans, ret);

                    }

                    else

                    {

                        pass.remove(#ItemId);

                        //ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];

                        ret += [this.buildControl(#RFLabel, #RFError, "All qty is scanned.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];

                        step = DEMO_WHSPOReceiveStep::SelectItemId;

                    }

                   

                }



                if (step == DEMO_WHSPOReceiveStep::SelectItemId)

                {

                    ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));

                }

                else if (step == DEMO_WHSPOReceiveStep::ScanSerialNum)

                {

                    ret = this.getInventSerialIdStep(ret);

                }



                if (step == DEMO_WHSPOReceiveStep::SelectItemArrivalJour)

                {

                    ret = this.getItemArrivalJourStep(ret);

                }

                

               



                break;

            //Changed by 9158 at 1415 on 20190114  -  end



            case DEMO_WHSPOReceiveStep::InquireSN:

                if (!pass.exists(#ItemId))

                {

                    pass.insert(#ItemId, conPeek(conPeek(con, 4), #data));

                }



                str         itemIdStr   = pass.lookupStr(#ItemId);

                container   tempCon     = str2con(itemIdStr, #InfoSeparator, false);

                ItemId      itemId      = strLRTrim(conPeek(tempCon, 1));



                str SNInfo = this.getSerialNumberInfo(itemId);



                ret += [this.buildControl(#RFLabel, #SNInfoHeader, 'Scanned serial number', 1, SNInfo, #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Default, extendedTypeNum(WHSRFQuantityInformation))];

                ret += [this.buildControl(#RFLabel, #SNInfo, SNInfo, 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Default, extendedTypeNum(WHSRFQuantityInformation))];

                ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];

                ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];

                break;



            default:

                break;

        }



        ret = this.updateModeStepPass(ret, WHSWorkExecuteMode::DEMO_POReceive, step, pass);



        return ret;

    }



    protected str getSerialNumberInfo(ItemId _itemId)

    {

        str                 ret;

        WMSJournalTrans     wMSJournalTrans;

        InventTransOrigin   inventTransOrig;

        InventTrans         inventTrans;

        InventDim           inventDim;

        int                 i;



        while select wMSJournalTrans

            where   wMSJournalTrans.journalId       == pass.lookupStr(#DEMO_InventJournalId)

            &&      wMSJournalTrans.itemId          == _itemId

        join inventTransOrig

            where   inventTransOrig.InventTransId   == wMSJournalTrans.inventTransId

        join inventTrans

            where   inventTrans.InventTransOrigin       == inventTransOrig.RecId

            &&      inventTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::RequireSNScanEnded

        join inventDim

            group by InventSerialId

            where   inventDim.inventDimId           == inventTrans.inventDimId

            &&      inventDim.InventSerialId        != ""

        {

            i++;



            if (!ret)

            {

                ret = strFmt("%1 %2 %3", i, #InfoSeparator, inventDim.InventSerialId);

            }

            else

            {

                ret += strFmt("\n%1 %2 %3", i, #InfoSeparator, inventDim.InventSerialId);

            }

        }



        return ret;

    }



    protected container getInventSerialIdStep(container _ret)

    {

        _ret = this.buildGetInventSerialId(_ret);



        return _ret;

    }



    protected container buildGetInventSerialId(container _con)

    {

        container ret = _con;



        ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSPOReceiveStep::ScanSerialNum), 1, '', #WHSRFUndefinedDataType, '', 0)];

        ret += [this.buildControl(#RFText, #SerialId, "Serial number", 1, '', extendedTypeNum(InventSerialId), '', 0)];

        ret += [this.buildControl(#RFButton, #RFOK, "@SYS301992", 1, '', #WHSRFUndefinedDataType, '', 1)];

        ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];

        ret += [this.buildControl(#RFButton, #RFPrintSN, "Print SN", 1, '', #WHSRFUndefinedDataType, '', 0)];

        ret += [this.buildControl(#RFButton, #RFInquireSN, "Inquire", 1, '', #WHSRFUndefinedDataType, '', 0)];

        ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];



        return ret;

    }



    protected container getItemIdStep(container _ret, WMSJournalId _journalId)

    {

        _ret = this.buildGetItemIdList(_ret, _journalId);       



        pass.insert(#Confirmation, 'Confirmation');

        return _ret;

    }



    protected container buildGetItemIdList(container _con, WMSJournalId _journalId)

    {

        container   ret = _con;

        str         elements;



        elements    = this.buildItemIdList(_journalId);



        if (pass.exists(#WorkComplete))

        {

            if (!addedMessage)

            {

                ret = this.addErrorLabel(ret, strFmt("The arrival journal '%1' is completed.", pass.lookupStr(#DEMO_InventJournalId)), WHSRFColorText::Success);

            }



            pass.remove(#WorkComplete);

            pass.remove(#DEMO_InventJournalId);



            step = DEMO_WHSPOReceiveStep::SelectItemArrivalJour;

        }

        else

        {

            ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSPOReceiveStep::SelectItemId), 1, '', #WHSRFUndefinedDataType, '', 0)];

            ret += [this.buildControl(#RFCombobox, #ItemId, "@SYS330532", 1, elements, #WHSRFUndefinedDataType, '', 0)];

            ret += [this.buildControl(#RFButton, #RFOK, "@SYS301992", 1, '', #WHSRFUndefinedDataType, '', 1)];

            ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];

            ret += [this.buildControl(#RFButton, #RFInquireSN, "Inquire", 1, '', #WHSRFUndefinedDataType, '', 0)];

            ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];



            step = DEMO_WHSPOReceiveStep::SelectItemId;



        }

        return ret;

    }



    protected str buildItemIdList(WMSJournalId _journalId)

    {

        WMSJournalTrans     wMSJournalTrans;

        InventTransOrigin   inventTransOrigin;

        InventTrans         inventTrans;

        InventDim           inventDim;

        boolean             first = true;

        boolean             hasLine;

        str                 elements;





        while select wMSJournalTrans

            where   wMSJournalTrans.journalId       == _journalId

        {

            select sum(Qty) from inventTrans

                where   inventTrans.StatusReceipt           == StatusReceipt::Ordered

                &&     (inventTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::None

                    ||  inventTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::RequireSNScan)

            join inventDim

                where   inventDim.inventDimId       == inventTrans.inventDimId

            join inventTransOrigin

                where   inventTransOrigin.RecId         == inventTrans.InventTransOrigin

                &&      inventTransOrigin.InventTransId == wMSJournalTrans.inventTransId;

           

            if (first)

            {

                first   = false;

            }

            else

            {

                elements    += '||';

            }



            //Changed by 9158 at 1415 on 20190114  -  begin

            //Original

            //elements    += strFmt("%1 %2 %3\nQTY %4 of %5", wMSJournalTrans.itemId, #InfoSeparator, InventTable::find(wMSJournalTrans.itemId).defaultProductName(), wMSJournalTrans.qty - inventTrans.qty, wMSJournalTrans.qty);

            elements    += strFmt("%1 %2 %3\nQTY %4 of %5", wMSJournalTrans.itemId, #InfoSeparator, InventTable::find(wMSJournalTrans.itemId).NameAlias, real2int(wMSJournalTrans.qty - inventTrans.qty), real2int(wMSJournalTrans.qty));

            //Changed by 9158 at 1415 on 20190114  -  end



            if (inventTrans.qty > 0)

            {

                hasLine = true;

            }

        }



        if (!hasLine)

        {

            pass.insert(#WorkComplete, "@SYS17748");

        }



        return elements;

    }



// Added by 9158  -- begin

    protected container getConfirmationStep(container _ret, WMSJournalId _journalId, ItemId _itemID)

    {

        _ret = this.buildGetConfirmationList(_ret, _journalId, _itemID);



        return _ret;

    }



    protected container buildGetConfirmationList(container _con, WMSJournalId _journalId, ItemId _itemID)

    {

        container   ret = _con;

        str         elements;



        elements    = this.buildConfirmationList(_journalId, _itemID);



        {

            ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSPOReceiveStep::Confirmation), 1, '', #WHSRFUndefinedDataType, '', 0)];

            ret += [this.buildControl(#RFLabel,  #ItemId, elements, 1, '', #WHSRFUndefinedDataType, '', 0)];

            ret += [this.buildControl(#RFButton, #RFOK, "@SYS301992", 1, '', #WHSRFUndefinedDataType, '', 1)];

            ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];

            ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];



            step = DEMO_WHSPOReceiveStep::Confirmation;

        }



        return ret;

    }



    protected str buildConfirmationList(WMSJournalId _journalId, ItemId _itemID)

    {

        WMSJournalTrans     wMSJournalTrans;

        InventTransOrigin   inventTransOrigin;

        InventTrans         inventTrans;

        InventDim           inventDim;

        boolean             first = true;

        boolean             hasLine;

        str                 elements;

        str                 productName;

        str                 fullProductName;



        Select wMSJournalTrans

            where   wMSJournalTrans.journalId       == _journalId

            &&      wMSJournalTrans.itemId          == _itemID;

        {

            select sum(Qty) from inventTrans

                where   inventTrans.StatusReceipt           == StatusReceipt::Ordered

                &&     (inventTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::None

                    ||  inventTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::RequireSNScan)

            join inventDim

                where   inventDim.inventDimId       == inventTrans.inventDimId

            join inventTransOrigin

                where   inventTransOrigin.RecId         == inventTrans.InventTransOrigin

                &&      inventTransOrigin.InventTransId == wMSJournalTrans.inventTransId;

           

            if (first)

            {

                first   = false;

            }

            else

            {

                elements    += '||';

            }

/*

            productName    = InventTable::find(wMSJournalTrans.itemId).defaultProductName();

            if (strLen(productName) > 20)

            {

                productName = subStr(productName, 0, 20) + '\n' + subStr(productName, 21, 20)+ '\n' + subStr(productName, 41, 20);

            }

*/           



            elements    += strFmt("%1 \n%2\nQTY %3 of %4", wMSJournalTrans.itemId, InventTable::find(wMSJournalTrans.itemId).defaultProductName(), real2int(wMSJournalTrans.qty - inventTrans.qty), real2int(wMSJournalTrans.qty));



            if (inventTrans.qty > 0)

            {

                hasLine = true;

            }

        }





        return elements;

    }



// Added by 9158  -- end

    protected container inventTransSplit(WMSJournalTrans _wMSJournalTrans, container _con)

    {

        int                             startInfologLine;

        InventTransOrigin               inventTransOrigin;

        InventDim                       inventDim;

        InventTable                     inventTable;

        InventNumGroup                  inventNumGroup;

        EcoResTrackingDimensionGroup    ecoResTrackingDimensionGroup;

        InventTrans                     inventTransCopy, inventTransNew;



        try

        {

            ttsbegin;



            startInfologLine = infologLine() + 1;



            select firstonly forupdate inventTransCopy

                where   inventTransCopy.Qty                     > 0

                &&      inventTransCopy.StatusReceipt           == StatusReceipt::Ordered

                &&     (inventTransCopy.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::None

                    ||  inventTransCopy.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::RequireSNScan)

            join inventTransOrigin

                where   inventTransOrigin.RecId             == inventTransCopy.InventTransOrigin

                &&      inventTransOrigin.InventTransId     == _wMSJournalTrans.InventTransId

            join inventDim

                where   inventDim.inventDimId               == inventTransCopy.inventDimId;



            if (inventTransCopy.Qty > 1)

            {

                inventTransCopy.updateSplit(1, 0, true);

            }



            // Update the serial number

            inventTransNew  = inventTransCopy;

            inventTransNew.selectForUpdate(true);

            inventTable     = InventTable::find(inventTransNew.ItemId);



            ecoResTrackingDimensionGroup    = ecoResTrackingDimensionGroup::find(inventTable.trackingDimensionGroup());



            if (ecoResTrackingDimensionGroup.IsSerialNumberControlEnabled)

            {

                if (inventTable.SerialNumGroupId)

                {

                    inventNumGroup              = InventNumGroup::find(inventTable.SerialNumGroupId);



                    if (inventNumGroup.NumberSequenceTable && inventNumGroup.PerQty == 1)

                    {

                        inventTransNew.DEMO_WHSPOReceiveStatus   = DEMO_WHSPOReceiveStatus::RequireSNAuto;



                        inventDim                   = inventTransNew.inventDim();

                        inventDim.inventSerialId    = inventNumGroup.buildNumberParameters(_wMSJournalTrans.transDate, _wMSJournalTrans.inventTransRefId, _wMSJournalTrans.inventTransId, extendedTypeNum(InventSerialId));

                       

                        if (inventDim.inventSerialId)

                        {

                            InventSerial::findOrCreate(inventDim.inventSerialId, _wMSJournalTrans.itemId);

                        }

                        else

                        {

                            throw error (strFmt("Cannot generate serial number for item '%1'.", _wMSJournalTrans.itemId));

                        }



                        inventDim                   = InventDim::findOrCreate(inventDim);

                        inventTransNew.inventDimId  = inventDim.inventDimId;

                        step                        = DEMO_WHSPOReceiveStep::SelectItemId;

                    }

                    else

                    {

                        inventTransNew.DEMO_WHSPOReceiveStatus   = DEMO_WHSPOReceiveStatus::RequireSNScan;

                        step                                    = DEMO_WHSPOReceiveStep::ScanSerialNum;

                        pass.insert(#InventTransRecId, inventTransNew.RecId);

                    }

                }

                else

                {

                    throw error(strFmt("Serial number group has not been setup in item '%1'.", inventTransNew.ItemId));

                }

            }

            else

            {

                inventTransNew.DEMO_WHSPOReceiveStatus   = DEMO_WHSPOReceiveStatus::NotRequire;

                step                                    = DEMO_WHSPOReceiveStep::SelectItemId;

                _con = this.addErrorLabel(_con, strFmt("Serial number is not required.", inventDim.inventSerialId), WHSRFColorText::Success);

                addedMessage    = true;

            }

           

            inventTransNew.update();



            if (inventTransNew.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNAuto)

            {

                _con = this.addErrorLabel(_con, strFmt("Serial number '%1' assigned.", inventDim.inventSerialId), WHSRFColorText::Success);

                addedMessage    = true;

            }



            ttscommit;

        }

        catch

        {

            error ("Failed to assigne serial number.");

            _con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);

        }



        return _con;

    }



    protected container inventTransUpdate(RecId _inventTransRecId, InventSerialId _inventSerialId, container _con)

    {

        InventDim   inventDim;

        int         startInfologLine;



        try

        {

            ttsbegin;



            startInfologLine = infologLine() + 1;



            InventTrans inventTrans = InventTrans::findRecId(_inventTransRecId, true);

            inventDim                   = inventTrans.inventDim();

            inventDim.inventSerialId    = _inventSerialId;

            InventSerial::findOrCreate(inventDim.inventSerialId, inventTrans.ItemId);

            inventTrans.inventDimId     = InventDim::findOrCreate(inventDim).inventDimId;

            inventTrans.DEMO_WHSPOReceiveStatus  = DEMO_WHSPOReceiveStatus::RequireSNScanEnded;

            inventTrans.update();



            ttscommit;



            pass.remove(#InventTransRecId);

            pass.remove(#SerialId);



            _con = this.addErrorLabel(_con, strFmt("Serial number '%1' assigned.", inventDim.inventSerialId), WHSRFColorText::Success);

            addedMessage    = true;

        }

        catch

        {

            error (strFmt("Failed to assigne serial number '%1'.", _inventSerialId));

            _con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);

            addedMessage    = true;

        }



        return _con;

    }



    protected container getItemArrivalJourStep(container _ret)

    {

        _ret = this.buildGetItemArrivalJourList(_ret);

        step = DEMO_WHSPOReceiveStep::SelectItemId;



        return _ret;

    }



    protected container buildGetItemArrivalJourList(container _con)

    {

        container   ret = _con;

        str         elements;



        elements    = this.buildItemArrivalJourList(true);



        ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSPOReceiveStep::SelectItemArrivalJour), 1, '', #WHSRFUndefinedDataType, '', 0)];

        ret += [this.buildControl(#RFCombobox, #DEMO_InventJournalId, DEMO_WHSFieldInventJournalId::getDisplayName(), 1, elements, #WHSRFUndefinedDataType, '', 0)];

        ret += [this.buildControl(#RFButton, #RFOK, "@SYS301992", 1, '', #WHSRFUndefinedDataType, '', 1)];

        ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];



        return ret;

    }



    protected str buildItemArrivalJourList(boolean _showBlank)

    {

        WMSJournalTable     wMSJournalTable;

        boolean             first = true;

        str                 elements;



        if (_showBlank)

        {

            first   = false;

        }



        while select wMSJournalTable

            where   wMSJournalTable.JournalType == WMSJournalType::Reception

            &&      wMSJournalTable.posted      == NoYes::No

        {

            if (first)

            {

                first   = false;

            }

            else

            {

                elements    += '||';

            }



            elements    += wMSJournalTable.journalId;

        }



        return elements;

    }

*/boolean addedMessage;







        protected container getItemIdStep(container _ret, WMSJournalId _journalId)

    {

        _ret = this.buildGetItemIdList(_ret, _journalId);

        //step = DEMO_WHSPOReceiveStep::SelectItemId;



        return _ret;

    }



    protected container buildGetItemIdList(container _con, WMSJournalId _journalId)

    {

        container   ret = _con;

        container   IdList;

        str         elements;



        IdList    = this.buildItemIdList(_journalId);



        if (pass.exists(#WorkComplete))

        {

            WMSJournalTable wmsJournalTable;



            update_recordset wmsJournalTable setting DEMO_WHSWorkCompleted = NoYes::Yes

                where   wmsJournalTable.journalId ==  _journalId;



            if (!addedMessage)

            {

                ret = this.addErrorLabel(ret, strFmt("The arrival journal '%1' is completed.", pass.lookupStr(#DEMO_InventJournalId)), WHSRFColorText::Success);

            }



            pass.remove(#WorkComplete);

            pass.remove(#DEMO_InventJournalId);

            // return back to main page

            //ret += [this.buildControl(#RFButton, #RFOK, "@SYS301992", 1, '', #WHSRFUndefinedDataType, '', 1)];

            step = DEMO_WHSPOReceiveStep::SelectItemArrivalJour;

        }

        else

        {

            ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSPOReceiveStep::SelectItemId), 1, '', #WHSRFUndefinedDataType, '', 0)];

            //ret += this.buildItemIdList(_journalId);

            ret += IdList;

            ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];

            ret += [this.buildControl(#RFButton, #RFInquireSN, "Inquire", 1, '', #WHSRFUndefinedDataType, '', 0)];

            ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];

            step = DEMO_WHSPOReceiveStep::SelectItemId;

        }



        return ret;

    }



    private container buildItemIdList(WMSJournalId _journalId)

    {

        WMSJournalTrans     wMSJournalTrans;     

        boolean             hasLine;

        container           ret;

        str                 elements, scannedStr;

        Qty                                                                                availQty;



        while select wMSJournalTrans

            group by ItemId

            where   wMSJournalTrans.journalId       == _journalId

        {

         

            InventTable inventTable = InventTable::find(wMSJournalTrans.itemId);



            [scannedStr, availQty] = this.getScannedQtyCon(wMSJournalTrans.itemId, _journalId);



            elements = strFmt("%1 %2 %3\nEAN: %4\n%5", wMSJournalTrans.itemId, #InfoSeparator , inventTable.NameAlias, inventTable.DEMO_EANCode, scannedStr);



            ret += [this.buildControl(#RFButton,  wMSJournalTrans.itemId, wMSJournalTrans.itemId, 1, '', extendedTypeNum(ItemId), '', 0, true, '', WHSRFColorText::Default )];

        //    ret += [this.buildControl(#RFButton, #RFPrintBN, strFmt("Print BN - %1", wMSJournalTrans.itemId), 1, '', #WHSRFUndefinedDataType, '', 0)];

            ret += [this.buildControl(#RFLabel,  wMSJournalTrans.itemId , elements, 0, '', extendedTypeNum(ItemId), '', 0, true, '', WHSRFColorText::Default )];

          

          



            if (availQty > 0)

            {

                hasLine = true;

            }

        }



        if (!hasLine)

        {

            pass.insert(#WorkComplete, "@SYS17748");

        }



        return ret;

    }



    private container getItemArrivalJour(container _ret)

    {

        if (!WHSParameters::find().DEMO_DefaultPrinterName)

        {

            error ("Default printer has not been setup.");

            _ret = this.addErrorLabelFromInfolog(_ret, infologLine() + 1, WHSRFColorText::Error);

        }

       

        _ret = this.buildGetItemArrivalJour(_ret);

        step = DEMO_WHSPOReceiveStep::SelectItemId;



        return _ret;

    }



    container buildGetItemArrivalJour(container _con)

    {

        container ret = _con;



        //ret += [this.buildControl(#RFLabel, #Scan, 'Scan a Journal', 1, '', #WHSRFUndefinedDataType, '', 0)];

        ret = this.buildItemArrivalJourList(ret);

        ret += [this.buildControl(#RFButton, #RFCancel, "@SYS50163", 1, '', #WHSRFUndefinedDataType, '', 0)];

  

        return ret;

    }



    private container buildItemArrivalJourList(container _con)

    {

        WMSJournalTable     wMSJournalTable;

        container ret = _con;



        ret += [this.buildControl(#RFLabel, #Scan, 'Select a Journal', 1, '', #WHSRFUndefinedDataType, '', 0)];

        while select wMSJournalTable order by wMSJournalTable.journalId desc

            where   wMSJournalTable.JournalType             == WMSJournalType::Reception

            &&      wMSJournalTable.posted                  == NoYes::No

            &&      wMSJournalTable.DEMO_WHSWorkCompleted    == NoYes::No

        {

            ret += [this.buildControl(#RFButton, wMSJournalTable.journalId , wMSJournalTable.journalId, 1, '', #WHSRFUndefinedDatatype, '', 1)];

            ret += [this.buildControl(#RFLabel, wMSJournalTable.journalId , '', 0, '', #WHSRFUndefinedDataType, '', 0)];



        }



        return ret;

    }



    container displayForm(container _con, str _buttonClicked = '')

    {

        container   ret = connull();

        container   con = _con;

        int         hasError    = 0;

        int         hasInfo     = 0;



        str btnclick = _buttonClicked;



        pass = WHSRFPassthrough::create(conPeek(_con, #PassthroughInfo));

        hasError = this.hasError(_con);



        // Remove the error message in the next step

        if (hasError)

        {

            con = conDel(con, #ControlsStart, 1);

        }



        hasInfo = this.DEMO_hasInformation(_con);



        // Remove the info message in the next step

        if (hasInfo)

        {

            con = conDel(con, #ControlsStart, 1);

        }



        // Return button

        if (_buttonClicked == #RFReturn)

        {

            if (step == DEMO_WHSPOReceiveStep::SelectItemId)

            {

                step    = DEMO_WHSPOReceiveStep::SelectItemArrivalJour;

                pass.remove(#DEMO_InventJournalId);

                pass.remove(#ItemId);

            }

            else if (step == DEMO_WHSPOReceiveStep::ScanSerialNum)

            {

                step    = DEMO_WHSPOReceiveStep::SelectItemId;

                pass.remove(#ItemId);

                pass.remove(#SerialId);

            }

            else if (step == DEMO_WHSPOReceiveStep::InquireSN)

            {

                // When return back from inquire, clear all stored data

                container conData = conPeek(con, 4);

                conData = conPoke(conData, #data, "");

                con     = conPoke(con, 4, conData);



                if (pass.exists(#WMSJournalRecId))

                {

                    pass.remove(#SerialId);

                    step    = DEMO_WHSPOReceiveStep::ScanSerialNum;

                }

                else

                {

                    pass.remove(#ItemId);

                    step    = DEMO_WHSPOReceiveStep::SelectItemId;

                }

            }

        }



        // Print SN

        //Added by 9158 on 20190418  --  begin

        if (_buttonClicked == #RFPrintSN)

        {

            ret = this.printSN(ret);

        }

        //Added by 9158 on 20190418  --  end



        // Print BN

        //Added by 9158 on 20190418  --  begin

        //if (_buttonClicked == #RFPrintBN)

        //{

        //    // itemId

        //    pass.remove(#ItemId);

        //    for(int i = 0; i < conlen(con); i++)

        //    {

        //        str tmp = conPeek(conPeek(con, i), 3);

        //        if(match(strFmt("<%1",tmp),"Print BN"))

        //        {

        //            pass.insert(#ItemId, strDel(tmp,1,11));

        //        }

        //    }



        //    if(pass.exists(#ItemId))

        //    {

        //       ItemId _itemId = pass.lookupStr(#ItemId);

        //        ret = this.printBN(ret, _itemId);

        //    }

        //}

        //Added by 9158 on 20190418  --  end



        /*

        if (_buttonClicked == #RFPrintSN)

        {

            if (pass.exists(#DEMO_InventJournalId))

            {

                //Modified by 9158 on 20190417 for printing barcode  --  begin

                /*

                InventJournalId     curJournalId = pass.lookupStr(#DEMO_InventJournalId);

                WMSJournalTable     WMSJournalTable = WMSJournalTable::find(curJournalId);



                #define.ReportName('WMSJournalTrans.Report')

                WMSJournalTransController WMSJournalTransController = new WMSJournalTransController();

                

                Args args = new Args();

                args.record(WMSJournalTable);

                args.menuItemType(MenuItemType::Output);

                args.menuItemName(menuItemOutputStr(WMSJournalTrans));



                WMSJournalTransController.parmReportName(#ReportName);

                WMSJournalTransController.parmArgs(args);

                WMSJournalTransController.parmShowDialog(false);               

                WMSJournalTransController.parmLoadFromSysLastValue(false);

                WMSJournalTransController.DEMO_doPrePromptModifyContract();



                // Set printer

                SRSPrintDestinationSettings printerSettings = WMSJournalTransController.parmReportContract().parmPrintSettings();

                printerSettings.printMediumType(SRSPrintMediumType::Printer);

                printerSettings.printerName(WHSParameters::find().DEMO_DefaultPrinterName);



               

                WMSJournalTransController.runOperation();

                */

                /*

                str  finalStr = "^XA\n ^FX Left section\n ^CFA,30\n ^FO50,50^FDSKU^F \n    ^CFA,40\n ^FO50,100^FD%THK001%^FS \n      ^BY3,2,100\n     ^FO50,170^BC^FD%1111111111%^FS\n       ^CFA,50\n     ^FO50,350^FD%THK001%^FS\n" +



                    "^FX Right section\n  ^CFA,40\n   ^FO450,100^FD%5%^FS ^CFA,20\n    ^FO500,200^FD%2%^FS\n   ^FO500,250^FD%PACK%^FS\n     ^FO500,350^FD%04/17/2019%^FS\n      ^XZ";





                WhsDocumentRouting::printLabelToPrinter(WHSParameters::find().DEMO_DefaultPrinterName, finalStr);

                */

                InventJournalId     curJournalId = pass.lookupStr(#DEMO_InventJournalId);

                WMSJournalTable     WMSJournalTable = WMSJournalTable::find(curJournalId);

                WMSJournalTrans     wMSJournalTrans;



                #define.ReportName('Print barcode')

                DEMO_ZPLDocumentPrint zplPrint = new DEMO_ZPLDocumentPrint();

                DEMO_ZPLDocumentLabel zplLabel;

                ;



                //zplPrint.initMenuFields();



                while select wMSJournalTrans

                    where wMSJournalTrans.JournalId==WMSJournalTable.JournalId

                {

                    zplLabel.ItemId     = wMSJournalTrans.itemId;

                    zplLabel.Barcode    = '111111';

                    zplLabel.ItemName   = 'Test';

                    zplLabel.Price      =1;

                    zplLabel.PackQty    =1;

                    zplLabel.Location   ='TEST';

                    zplLabel.PrintDate  =Today();

                    zplLabel.insert();

                }



                while select zplLabel

                {

                    zplPrint.printDocument(WHSParameters::find().DEMO_DefaultPrinterName,"1",zplLabel);

                }



                //Modified by 9158 on 20190417 for printing barcode  --  end

               

                ret = this.addErrorLabel(_con, strFmt("SN is printed to %1.", WHSParameters::find().DEMO_DefaultPrinterName), WHSRFColorText::Success);

                addedMessage    = true;

            }

        }

*/

        switch (step)

        {

            case DEMO_WHSPOReceiveStep::SelectItemArrivalJour:

                ret = this.getItemArrivalJour(ret);

                break;



            case DEMO_WHSPOReceiveStep::SelectItemId:

                if (!pass.exists(#DEMO_InventJournalId))

                {

                    for(int i = 0; i < conlen(con); i++)

                    {

                        if(conPeek(conPeek(con, i), 3) == _buttonClicked)

                        {

                            pass.insert(#DEMO_InventJournalId,_buttonClicked);

                        }

                       

                    }

                }

                else

                {

                    // itemId

                    for(int i = 0; i < conlen(con); i++)

                    {

                        if(conPeek(conPeek(con, i), 3) == _buttonClicked)

                        {

                            pass.insert(#ItemId, _buttonClicked);

                        }

                    }      

                }



                if(!pass.exists(#DEMO_InventJournalId))

                {

                    step = DEMO_WHSPOReceiveStep::SelectItemArrivalJour;

                }



                if (pass.exists(#ItemId) && pass.exists(#DEMO_InventJournalId))

                {

                    // direct go to do somethings (getConfirmationStep)

                    WMSJournalTrans     wMSJournalTrans;       

                    InventTable         inventTable;

                    InventNumGroup                  inventNumGroup;

                    EcoResTrackingDimensionGroup    ecoResTrackingDimensionGroup;



                    str         itemIdStr   = pass.lookupStr(#ItemId);

                    container   tempCon     = str2con(itemIdStr, #InfoSeparator, false);



                    ItemId      itemId      = strLRTrim(conPeek(tempCon, 1));

                            

                    // Suggest the line by item ID

                    select firstonly wMSJournalTrans

                        where   wMSJournalTrans.journalId               == pass.lookupStr(#DEMO_InventJournalId)

                        &&      wMSJournalTrans.ItemId                  == itemId              

                        &&     (wMSJournalTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::None

                            ||  wMSJournalTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::RequireSNScan);

                   

                    //Added by 9158 on 20190228  --  begin

                    inventTable     = InventTable::find(wMSJournalTrans.ItemId);



                    ecoResTrackingDimensionGroup    = ecoResTrackingDimensionGroup::find(inventTable.trackingDimensionGroup());



                    if (ecoResTrackingDimensionGroup.IsSerialNumberControlEnabled)

                    {

                        if (inventTable.SerialNumGroupId)

                        {

                            inventNumGroup              = InventNumGroup::find(inventTable.SerialNumGroupId);



                            if (inventNumGroup.NumberSequenceTable && inventNumGroup.PerQty == 1)

                            {

                                wMSJournalTrans.DEMO_WHSPOReceiveStatus   = DEMO_WHSPOReceiveStatus::RequireSNAuto;



                            }

                            else

                            {

                                wMSJournalTrans.DEMO_WHSPOReceiveStatus   = DEMO_WHSPOReceiveStatus::RequireSNScan;

                            }

                        }

                    }

                    else

                    {

                        wMSJournalTrans.DEMO_WHSPOReceiveStatus   = DEMO_WHSPOReceiveStatus::NotRequire;

                    }

                    //Added by 9158 on 20190228  --  end

                    if (wMSJournalTrans)

                    {

                        //Changed by 9158 on 20190222  --  begin

                        if (wMSJournalTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::RequireSNAuto)

                        {

                            qty = real2int(wMSJournalTrans.Qty);



                            while(qty>0)

                            {

                               ret = this.wmsJournalTransSplit(wMSJournalTrans, ret);

                               qty--;

                            }

                        }

                        else

                        {

                            ret = this.wmsJournalTransSplit(wMSJournalTrans, ret);

                        }

                        //Changed by 9158 on 20190222  --  end

                        //WMSJournalTrans wmsJournalTransCheck;

                        //select firstonly RecId from wmsJournalTransCheck

                        //    where   wmsJournalTransCheck.journalId              == wMSJournalTrans.journalId

                        //    &&      wmsJournalTransCheck.itemId                 == wMSJournalTrans.itemId

                        //    &&     (wmsJournalTransCheck.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::None

                        //        ||  wmsJournalTransCheck.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan);



                        //if (!wmsJournalTransCheck)

                        //{

                        //    _con = this.printSN(_con, wMSJournalTrans.itemId);

                        //}



                        // updated by Joanne changed from print SN to print BN

                        WMSJournalTrans wmsJournalTransCheck;

                        select firstonly RecId from wmsJournalTransCheck

                            where   wmsJournalTransCheck.journalId              == wMSJournalTrans.journalId

                            &&      wmsJournalTransCheck.itemId                 == wMSJournalTrans.itemId

                            //&&     (wmsJournalTransCheck.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::NotRequire

                            //||  wmsJournalTransCheck.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireBNScan);

                            ;

                        if (wmsJournalTransCheck)

                        {

                            if(InventTable::find(wMSJournalTrans.ItemId).DGS_BigLabel)

                            {

                                // don't print if it is biglabel

                                ret += [this.buildControl(#RFLabel, #RFError, "Dont print big label item.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];



                            }

                            else

                            {

                                // print label

                                _con = this.printBN(_con, wMSJournalTrans.itemId, wMSJournalTrans.journalId);

                                ret += [this.buildControl(#RFLabel, #RFError, "print label.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];

                            }                         

                        }

                        else

                        {

                            ret += [this.buildControl(#RFLabel, #RFError, "No print records found.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];

                        }

                    }

                    else

                    {

                        pass.remove(#ItemId);

                        //ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];

                        ret += [this.buildControl(#RFLabel, #RFError, "All qty is scanned.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];

                        //ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];

                        step = DEMO_WHSPOReceiveStep::SelectItemId;

                    }

                }

                if (step == DEMO_WHSPOReceiveStep::SelectItemId)

                {

                    ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));

                }

                else if (step == DEMO_WHSPOReceiveStep::ScanSerialNum)

                {

                    ret = this.getInventSerialIdStep(ret);

                }

                /*

                if (!pass.exists(#ItemId) && pass.exists(#DEMO_InventJournalId))

                {

                    ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));

                }

*/

                if (step == DEMO_WHSPOReceiveStep::SelectItemArrivalJour)

                {

                    ret = this.getItemArrivalJour(ret);

                }





               

                break;



            case DEMO_WHSPOReceiveStep::ScanSerialNum:

                pass.insert(#SerialId, conPeek(conPeek(con, 4), #data));



                if (pass.lookupStr(#SerialId))

                {

                    ret = this.wmsJournalTransUpdate(pass.lookupInt64(#WMSJournalRecId), pass.lookupStr(#DEMO_InventJournalId), pass.lookupStr(#SerialId), ret);

                }



                //Added by 9158 on 20190314  -Stay in scan page while still have Qty-  begin

          

                // Return to select item

                //step = DEMO_WHSPOReceiveStep::SelectItemId;

                //ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));



                if (pass.exists(#ItemId) && pass.exists(#DEMO_InventJournalId))

                {

                    // direct go to do somethings (getConfirmationStep)

                    WMSJournalTrans     wMSJournalTrans;                   

                    InventTable         inventTable;

                    InventNumGroup                  inventNumGroup;

                    EcoResTrackingDimensionGroup    ecoResTrackingDimensionGroup;



                    str         itemIdStr   = pass.lookupStr(#ItemId);

                    container   tempCon     = str2con(itemIdStr, #InfoSeparator, false);



                    ItemId      itemId      = strLRTrim(conPeek(tempCon, 1));

                            

                    // Suggest the line by item ID

                    select firstonly wMSJournalTrans

                        where   wMSJournalTrans.journalId               == pass.lookupStr(#DEMO_InventJournalId)

                        &&      wMSJournalTrans.ItemId                  == itemId

                        &&     (wMSJournalTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::None

                            ||  wMSJournalTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::RequireSNScan);

                   

                    inventTable     = InventTable::find(wMSJournalTrans.ItemId);



                    if (wMSJournalTrans)

                    {

                        ret = this.wmsJournalTransSplit(wMSJournalTrans, ret);

                    }

                    else

                    {

                        pass.remove(#ItemId);

                        //ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];

                        ret += [this.buildControl(#RFLabel, #RFError, "All qty is scanned.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];

                        //ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];

                        step = DEMO_WHSPOReceiveStep::SelectItemId;

                    }

                }



                if (step == DEMO_WHSPOReceiveStep::SelectItemId)

                {

                    ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));

                }

                else if (step == DEMO_WHSPOReceiveStep::ScanSerialNum)

                {

                    ret = this.getInventSerialIdStep(ret);

                }



                //Added by 9158 on 20190314  -Stay in scan page while still have Qty-  end





                //Added by 9158 on 20190301  --  begin

                if (step == DEMO_WHSPOReceiveStep::SelectItemArrivalJour)

                {

                    ret = this.getItemArrivalJour(ret);

                }

                //Added by 9158 on 20190301  --  end

                break;



            case DEMO_WHSPOReceiveStep::InquireSN:

                if (!pass.exists(#ItemId))

                {

                    pass.insert(#ItemId, conPeek(conPeek(con, 4), #data));

                }



                str         itemIdStr   = pass.lookupStr(#ItemId);

                container   tempCon     = str2con(itemIdStr, #InfoSeparator, false);

                ItemId      itemId      = strLRTrim(conPeek(tempCon, 1));



                str SNInfo = this.getSerialNumberInfo(itemId);



                ret += [this.buildControl(#RFLabel, #SNInfoHeader, 'Scanned serial number', 1, SNInfo, #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Default, extendedTypeNum(WHSRFQuantityInformation))];

                ret += [this.buildControl(#RFLabel, #SNInfo, SNInfo, 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Default, extendedTypeNum(WHSRFQuantityInformation))];

                ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];

                ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];

                break;





            default:

                break;

        }



        ret = this.updateModeStepPass(ret, WHSWorkExecuteMode::DEMO_POReceive, step, pass);



        return ret;

    }



     protected str getSerialNumberInfo(ItemId _itemId)

    {

        str                 ret;

        WMSJournalTrans     wMSJournalTrans;   

        InventDim           inventDim;

        int                 i;



        while select wMSJournalTrans

            where   wMSJournalTrans.journalId               == pass.lookupStr(#DEMO_InventJournalId)

            &&      wMSJournalTrans.itemId                  == _itemId

            &&      wMSJournalTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::RequireSNScanEnded

        join inventDim

            group by InventSerialId

            where   inventDim.inventDimId           == wMSJournalTrans.inventDimId

            &&      inventDim.InventSerialId        != ""

        {

            i++;



            if (!ret)

            {

                ret = strFmt("%1 %2 %3", i, #InfoSeparator, inventDim.InventSerialId);

            }

            else

            {

                ret += strFmt("\n%1 %2 %3", i, #InfoSeparator, inventDim.InventSerialId);

            }

        }



        return ret;

    }



    protected container printSN(container _con, ItemId _itemId = "")

    {

        container ret = _con;



        if (pass.exists(#DEMO_InventJournalId))

        {

            InventJournalId         curJournalId = pass.lookupStr(#DEMO_InventJournalId);

            WMSJournalTable         WMSJournalTable = WMSJournalTable::find(curJournalId);

            WMSJournalTrans         wMSJournalTrans;



            DEMO_ZPLDocumentPrint    zplPrint = new DEMO_ZPLDocumentPrint();

            DEMO_ZPLDocumentLabel    zplLabel;

            int                     i;

            InventDim               inventDim;

            InventTable             inventTable

            ;



            //zplPrint.initMenuFields();

            while select wMSJournalTrans

                where   wMSJournalTrans.JournalId == WMSJournalTable.JournalId

                &&     (_itemId == "" || wMSJournalTrans.itemId == _itemId)

            join inventDim

                where   inventDim.inventDimId           == wMSJournalTrans.inventDimId

                &&      inventDim.inventSerialId

            {

                //Qty journalTransQty             = wMSJournalTrans.qty;

                //for (i = 1; i <= journalTransQty; i++)

                //{

                zplLabel.ItemId     = wMSJournalTrans.itemId;

                zplLabel.Barcode    = inventDim.inventSerialId;

                zplLabel.ItemName   = InventTable::find(wMSJournalTrans.ItemId).itemName();

                zplLabel.Price      =1;

                zplLabel.PackQty    =2;

                zplLabel.Location   =inventDim.wMSLocationId;

                zplLabel.PrintDate  =Today();

                zplLabel.insert();



                zplPrint.printDocument(WHSParameters::find().DEMO_DefaultPrinterName,"1",zplLabel);

                //}

            }



            //Modified by 9158 on 20190417 for printing barcode  --  end

           

            ret             = this.addErrorLabel(_con, strFmt("SN is printed to %1.", WHSParameters::find().DEMO_DefaultPrinterName), WHSRFColorText::Success);

            addedMessage    = true;



            if (_itemId == "")

            {

                step    = DEMO_WHSSNInquireStep::SelectItemId;

            }

        }



        return ret;

    }



    protected container wmsJournalTransSplit(WMSJournalTrans _wMSJournalTrans, container _con)

    {

        int                             startInfologLine;

        InventDim                       inventDim, inventDim_Update;

        InventTable                     inventTable;

        InventNumGroup                  inventNumGroup;

        InventBatch                     inventBatch;

        EcoResTrackingDimensionGroup    ecoResTrackingDimensionGroup;

        WMSJournalTrans                 wMSJournalTransNew;

        WMSJournalTable                 wMSJournalTable;

        InventBatchExpDate              expDate;



        try

        {

            ttsbegin;



            startInfologLine = infologLine() + 1;



            if (_wMSJournalTrans.Qty > 1)

            {

                if (_wMSJournalTrans.DEMO_WHSPOReceiveStatus != DEMO_WHSPOReceiveStatus::NotRequire)

                {

                    _wMSJournalTrans.selectForUpdate(true);

                    _wMSJournalTrans.qty        -= 1;

                    _wMSJournalTrans.update();



                    buf2Buf(_wMSJournalTrans, wMSJournalTransNew);

                    wMSJournalTransNew.lineNum  = 0;

                    wMSJournalTransNew.qty      = 1;

                    wMSJournalTransNew.insert();

                }

                else

                {

                    wMSJournalTransNew  = _wMSJournalTrans;

                }

            }

            else

            {

                wMSJournalTransNew  = _wMSJournalTrans;

            }

   

            wMSJournalTransNew.selectForUpdate(true);

            inventTable     = InventTable::find(wMSJournalTransNew.ItemId);



            ecoResTrackingDimensionGroup    = ecoResTrackingDimensionGroup::find(inventTable.trackingDimensionGroup());



            if (ecoResTrackingDimensionGroup.IsSerialNumberControlEnabled)

            {

                if (inventTable.SerialNumGroupId)

                {

                    inventNumGroup              = InventNumGroup::find(inventTable.SerialNumGroupId);



                    if (inventNumGroup.NumberSequenceTable && inventNumGroup.PerQty == 1)

                    {

                        wMSJournalTransNew.DEMO_WHSPOReceiveStatus   = DEMO_WHSPOReceiveStatus::RequireSNAuto;



                        inventDim                   = wMSJournalTransNew.inventDim();

                        inventDim.inventSerialId    = inventNumGroup.buildNumberParameters(_wMSJournalTrans.transDate, _wMSJournalTrans.inventTransRefId, _wMSJournalTrans.inventTransId, extendedTypeNum(InventSerialId));

                       

                        if (inventDim.inventSerialId)

                        {

                            InventSerial::findOrCreate(inventDim.inventSerialId, _wMSJournalTrans.itemId);

                        }

                        else

                        {

                            throw error (strFmt("Cannot generate serial number for item '%1'.", _wMSJournalTrans.itemId));

                        }



                        inventDim   = InventDim::findOrCreate(inventDim);

                       

                        if (!inventDim.inventBatchId)

                        {

                            expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);

                            if (expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))

                            {

                                expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);

                            }

                            InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);

                     

                            inventDim.inventBatchId         = wMSJournalTable.inventTransRefId;

                        }

              

                        wMSJournalTransNew.inventDimId  = InventDim::findOrCreate(inventDim).inventDimId;

                        step                        = DEMO_WHSPOReceiveStep::SelectItemId;

                    }

                    else

                    {

                        wMSJournalTransNew.DEMO_WHSPOReceiveStatus   = DEMO_WHSPOReceiveStatus::RequireSNScan;

                        inventDim                                   = wMSJournalTransNew.inventDim();



                        if(!inventDim.inventBatchId)

                        {                        

                            expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);

                            if(expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))

                                    expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);

                            InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);

               

                            inventDim.inventBatchId         = wMSJournalTable.inventTransRefId;

                            wMSJournalTransNew.inventDimId  = InventDim::findOrCreate(inventDim).inventDimId;

                        }

           

                        step = DEMO_WHSPOReceiveStep::ScanSerialNum;

                        pass.insert(#WMSJournalRecId, wMSJournalTransNew.RecId);

                    }

                }

                else

                {

                    throw error(strFmt("Serial number group has not been setup in item '%1'.", wMSJournalTransNew.ItemId));

                }



                wMSJournalTransNew.update();

            }

            else

            {

                wMSJournalTransNew.DEMO_WHSPOReceiveStatus   = DEMO_WHSPOReceiveStatus::NotRequire;

                inventDim                                   = wMSJournalTransNew.inventDim();



                if (!inventDim.inventBatchId)

                {

                    expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);

                    if(expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))

                                    expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);

                    InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);

           

                    inventDim.inventBatchId         = wMSJournalTable.inventTransRefId;

                    wMSJournalTransNew.inventDimId  = InventDim::findOrCreate(inventDim).inventDimId;

                }



                step                                = DEMO_WHSPOReceiveStep::SelectItemId;

               

                wMSJournalTransNew.update();



                _con = this.addErrorLabel(_con, strFmt("%1. Serial number is not required.", conPeek(this.getScannedQtyCon(wMSJournalTransNew.itemId, wMSJournalTransNew.journalId), 1)), WHSRFColorText::Success);

                addedMessage    = true;

            }

           

            if (wMSJournalTransNew.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNAuto && qty == 1)

            {

                _con = this.addErrorLabel(_con, strFmt("%1. Serial number assigned.", conPeek(this.getScannedQtyCon(wMSJournalTransNew.itemId, wMSJournalTransNew.journalId), 1)), WHSRFColorText::Success);

                addedMessage    = true;

            }

  

            ttscommit;

        }

        catch

        {

            error ("Failed to assigne serial number.");

            _con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);

        }

        return _con;

    }



    /* remove by 7899

    protected container inventTransSplit(WMSJournalTrans _wMSJournalTrans, container _con)

    {

        int                             startInfologLine;

        InventTransOrigin               inventTransOrigin;

        InventDim                       inventDim, inventDim_Update;

        InventTable                     inventTable;

        InventNumGroup                  inventNumGroup;

        InventBatch                     inventBatch;

        EcoResTrackingDimensionGroup    ecoResTrackingDimensionGroup;

        InventTrans                     inventTransCopy, inventTransNew;

        WMSJournalTrans                 wMSJournalTrans;

        WMSJournalTable                 wMSJournalTable;

        InventBatchExpDate              expDate;



        try

        {

            ttsbegin;



            startInfologLine = infologLine() + 1;



            select firstonly forupdate inventTransCopy

                where   inventTransCopy.Qty                     > 0

                &&      inventTransCopy.StatusReceipt           == StatusReceipt::Ordered

                &&     (inventTransCopy.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::None

                    ||  inventTransCopy.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::RequireSNScan)

            join inventTransOrigin

                where   inventTransOrigin.RecId             == inventTransCopy.InventTransOrigin

                &&      inventTransOrigin.InventTransId     == _wMSJournalTrans.InventTransId

            join inventDim

                where   inventDim.inventDimId               == inventTransCopy.inventDimId;



            select  wMSJournalTrans

                        where   wMSJournalTrans.journalId   == pass.lookupStr(#DEMO_InventJournalId)

                &&      wMSJournalTrans.ItemId      == inventTransCopy.itemId;

            select  wMSJournalTable

                        where   wMSJournalTable.journalId   == wMSJournalTrans.journalId;



            //Changed by 9158 on 20190228  --  begin

            if (inventTransCopy.Qty > 1)

            {

                if(inventTransCompare.DEMO_WHSPOReceiveStatus!=DEMO_WHSPOReceiveStatus::NotRequire)

                {

                    inventTransCopy.updateSplit(1, 0, true);

                }

/*                else

                {

                    inventTransCopy.updateSplit(inventTransCopy.Qty, 0, true);

                }

*/            }

            //Changed by 9158 on 20190228  --  end

                // Update the serial number

                inventTransNew  = inventTransCopy;

                inventTransNew.selectForUpdate(true);

                inventTable     = InventTable::find(inventTransNew.ItemId);



                ecoResTrackingDimensionGroup    = ecoResTrackingDimensionGroup::find(inventTable.trackingDimensionGroup());



                if (ecoResTrackingDimensionGroup.IsSerialNumberControlEnabled)

                {

                    if (inventTable.SerialNumGroupId)

                    {

                        inventNumGroup              = InventNumGroup::find(inventTable.SerialNumGroupId);



                        if (inventNumGroup.NumberSequenceTable && inventNumGroup.PerQty == 1)

                        {

                            inventTransNew.DEMO_WHSPOReceiveStatus   = DEMO_WHSPOReceiveStatus::RequireSNAuto;



                            inventDim                   = inventTransNew.inventDim();

                            inventDim.inventSerialId    = inventNumGroup.buildNumberParameters(_wMSJournalTrans.transDate, _wMSJournalTrans.inventTransRefId, _wMSJournalTrans.inventTransId, extendedTypeNum(InventSerialId));

                       

                            if (inventDim.inventSerialId)

                            {

                                InventSerial::findOrCreate(inventDim.inventSerialId, _wMSJournalTrans.itemId);

                            }

                            else

                            {

                                throw error (strFmt("Cannot generate serial number for item '%1'.", _wMSJournalTrans.itemId));

                            }



                            inventDim                   = InventDim::findOrCreate(inventDim);

                            //Changed by 9158 on 20190313  --  begin

                            if(!inventDim.inventBatchId)

                            {

                                InventDim inventDimNew = inventTransNew.inventDim();

                                //Added by 9158 on 20190322  -Update location & License Plate & expDate-  begin

                                select inventDim_Update

                                    where inventDim_Update.inventDimId == _wMSJournalTrans.inventDimId;

                                inventDimNew.wMSLocationId      = inventDim_Update.wMSLocationId;

                                inventDimNew.LicensePlateId     = inventDim_Update.LicensePlateId;

                                expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);

                                if(expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))

                                    expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);

                                InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);

                            //Added by 9158 on 20190322  -Update location & License Plate & expDate-  end

                                inventDimNew.inventBatchId = wMSJournalTable.inventTransRefId;

                                inventTransNew.inventDimId = InventDim::findOrCreate(inventDimNew).inventDimId;

                            }

                            //Changed by 9158 on 20190313  --  end

                            inventTransNew.inventDimId  = inventDim.inventDimId;

                            step                        = DEMO_WHSPOReceiveStep::SelectItemId;

                        }

                        else

                        {

                            inventTransNew.DEMO_WHSPOReceiveStatus   = DEMO_WHSPOReceiveStatus::RequireSNScan;



                            //Changed by 9158 on 20190313  --  begin

                            if(!inventDim.inventBatchId)

                            {

                                InventDim inventDimNew = inventTransNew.inventDim();

                            //Added by 9158 on 20190322  -Update location & License Plate & expDate-  begin

                                select inventDim_Update

                                    where inventDim_Update.inventDimId == _wMSJournalTrans.inventDimId;

                                inventDimNew.wMSLocationId      = inventDim_Update.wMSLocationId;

                                inventDimNew.LicensePlateId     = inventDim_Update.LicensePlateId;

                                expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);

                                if(expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))

                                    expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);

                                InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);

                            //Added by 9158 on 20190322  -Update location & License Plate & expDate-  end

                                inventDimNew.inventBatchId = wMSJournalTable.inventTransRefId;

                                inventTransNew.inventDimId = InventDim::findOrCreate(inventDimNew).inventDimId;

                            }

                            //Changed by 9158 on 20190313  --  end

                            step                                    = DEMO_WHSPOReceiveStep::ScanSerialNum;

                            pass.insert(#InventTransRecId, inventTransNew.RecId);

                        }

                    }

                    else

                    {

                        throw error(strFmt("Serial number group has not been setup in item '%1'.", inventTransNew.ItemId));

                    }

                }

                else

                {

                    inventTransNew.DEMO_WHSPOReceiveStatus   = DEMO_WHSPOReceiveStatus::NotRequire;

                    //Changed by 9158 on 20190313  --  begin

                    if(!inventDim.inventBatchId)

                    {

                        InventDim inventDimNew = inventTransNew.inventDim();

                    //Added by 9158 on 20190322  -Update location & License Plate & expDate-  begin

                        select inventDim_Update

                                    where inventDim_Update.inventDimId == _wMSJournalTrans.inventDimId;

                        inventDimNew.wMSLocationId      = inventDim_Update.wMSLocationId;

                        inventDimNew.LicensePlateId     = inventDim_Update.LicensePlateId;

                        expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);

                        if(expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))

                                    expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);

                        InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);

                    //Added by 9158 on 20190322  -Update location & License Plate & expDate-  end

                        inventDimNew.inventBatchId = wMSJournalTable.inventTransRefId;

                        inventTransNew.inventDimId = InventDim::findOrCreate(inventDimNew).inventDimId;

                    }

                    //Changed by 9158 on 20190313  --  end

                    step                                    = DEMO_WHSPOReceiveStep::SelectItemId;

                    //Modified by 9158 on 20190222  --  begin

                    _con = this.addErrorLabel(_con, strFmt("Serial number is not required.", inventDim.inventSerialId), WHSRFColorText::Success);

                        addedMessage    = true;

                    //Modified by 9158 on 20190222  --  end

                }

           

                inventTransNew.update();

                //Modified by 9158 on 20190222  --  begin

                if (inventTransNew.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNAuto && qty==1)

                {

                    _con = this.addErrorLabel(_con, strFmt("Serial number assigned."), WHSRFColorText::Success);

                    addedMessage    = true;

                }

               

                ttscommit;

                //Modified by 9158 on 20190222  --  end                         

            }

            catch

            {

                error ("Failed to assigne serial number.");

                _con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);

            }

        return _con;

    }



    protected container inventTransUpdate(RecId _inventTransRecId, InventSerialId _inventSerialId, container _con)

    {

        InventTransOrigin   inventTransOrigin_checkSerialNo;

        InventTrans         inventTrans_checkSerialNo;

        InventDim           inventDim, inventDim_checkSerialNo;

        int                 startInfologLine;

        boolean             invalid;



        try

        {

            InventTrans inventTrans = InventTrans::findRecId(_inventTransRecId, true);



            if (inventTrans.Qty > 0)

            {

                select sum(Qty) from inventTrans_checkSerialNo

                    where   (inventTrans_checkSerialNo.Qty >=0               

                            ||

                            (inventTrans_checkSerialNo.Qty <0 && (inventTrans_checkSerialNo.StatusIssue  == StatusIssue::Deducted ||

                                                                  inventTrans_checkSerialNo.StatusIssue  == StatusIssue::Picked)

                            )

                            )

                join inventDim_checkSerialNo

                    where   inventDim_checkSerialNo.inventSerialId  == _inventSerialId

                    &&      inventDim_checkSerialNo.inventDimId     == inventTrans_checkSerialNo.inventDimId

                join inventTransOrigin_checkSerialNo

                    where   inventTransOrigin_checkSerialNo.RecId               == inventTrans_checkSerialNo.InventTransOrigin

                    &&      inventTransOrigin_checkSerialNo.ReferenceCategory   == InventTransType::Purch;



                if (inventTrans_checkSerialNo.Qty > 0)

                {

                    invalid = true;

                }

            }



            if (invalid)

            {

                error (strFmt("Serial number '%1' already exists.", _inventSerialId));

                _con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);

                addedMessage    = true;

            }

            else

            {

                ttsbegin;



                startInfologLine = infologLine() + 1;

                         

                inventDim                   = inventTrans.inventDim();

                inventDim.inventSerialId    = _inventSerialId;

                InventSerial::findOrCreate(inventDim.inventSerialId, inventTrans.ItemId);

                inventTrans.inventDimId     = InventDim::findOrCreate(inventDim).inventDimId;

                inventTrans.DEMO_WHSPOReceiveStatus  = DEMO_WHSPOReceiveStatus::RequireSNScanEnded;

                inventTrans.update();



                ttscommit;

                pass.remove(#InventTransRecId);

                pass.remove(#SerialId);

                _con = this.addErrorLabel(_con, strFmt("Serial number '%1' assigned.", inventDim.inventSerialId), WHSRFColorText::Success);

                addedMessage    = true;

            }

        }

        catch

        {

            error (strFmt("Failed to assigne serial number '%1'.", _inventSerialId));

            _con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);

            addedMessage    = true;

        }



        return _con;

    }

    */



    protected container wmsJournalTransUpdate(RecId _wmsJournalTransRecId, InventJournalId _journalId, InventSerialId _inventSerialId, container _con)

    {

        WMSJournalTrans     wmsJournalTrans, wmsJournalTrans_checkSerialNo;

        WMSJournalTable     wmsJournalTable_checkSerialNo;

        InventDim           inventDim, inventDim_checkSerialNo;

        InventTrans         inventTrans_checkSerialNo;

        InventTransOrigin   inventTransOrigin_checkSerialNo;

        int                 startInfologLine;

        boolean             invalid;



        try

        {

            select firstonly forupdate wmsJournalTrans

                where   wmsJournalTrans.journalId   == _journalId

                &&      wmsJournalTrans.RecId       == _wmsJournalTransRecId;



            if (wmsJournalTrans.Qty > 0)

            {

                // Posted qty with same serial number

                select sum(Qty) from inventTrans_checkSerialNo

                    where   (inventTrans_checkSerialNo.Qty >=0

                            ||

                            (inventTrans_checkSerialNo.Qty <0 && (inventTrans_checkSerialNo.StatusIssue  == StatusIssue::Deducted ||

                                                                  inventTrans_checkSerialNo.StatusIssue  == StatusIssue::Picked)

                            )

                            )

                join inventDim_checkSerialNo

                    where   inventDim_checkSerialNo.inventSerialId  == _inventSerialId

                    &&      inventDim_checkSerialNo.inventDimId     == inventTrans_checkSerialNo.inventDimId

                join inventTransOrigin_checkSerialNo

                    where   inventTransOrigin_checkSerialNo.RecId               == inventTrans_checkSerialNo.InventTransOrigin

                    &&      inventTransOrigin_checkSerialNo.ReferenceCategory   == InventTransType::Purch;



                // non-posted qty with same serial number

                select sum(Qty) from wmsJournalTrans_checkSerialNo

                    where   wmsJournalTrans_checkSerialNo.journalId == wmsJournalTrans.journalId

                    &&      wmsJournalTrans_checkSerialNo.itemId    == wmsJournalTrans.itemId

                join inventDim_checkSerialNo

                    where   inventDim_checkSerialNo.inventSerialId  == _inventSerialId

                    &&      inventDim_checkSerialNo.inventDimId     == wmsJournalTrans_checkSerialNo.inventDimId;



                if (inventTrans_checkSerialNo.Qty + wmsJournalTrans_checkSerialNo.qty > 0)

                {

                    invalid = true;

                }

            }



            if (invalid)

            {

                error (strFmt("Serial number '%1' already exists.", _inventSerialId));

                _con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);

                addedMessage    = true;

            }

            else

            {

                ttsbegin;



                startInfologLine = infologLine() + 1;

                         

                inventDim                   = wmsJournalTrans.inventDim();

                inventDim.inventSerialId    = _inventSerialId;

                InventSerial::findOrCreate(inventDim.inventSerialId, wmsJournalTrans.ItemId);

                wmsJournalTrans.inventDimId             = InventDim::findOrCreate(inventDim).inventDimId;

                wmsJournalTrans.DEMO_WHSPOReceiveStatus  = DEMO_WHSPOReceiveStatus::RequireSNScanEnded;

                wmsJournalTrans.update();

                

                ttscommit;

                pass.remove(#WMSJournalRecId);

                pass.remove(#SerialId);

                _con = this.addErrorLabel(_con, strFmt("%1. Serial number '%2' assigned.", conPeek(this.getScannedQtyCon(wmsJournalTrans.itemId, wmsJournalTrans.journalId), 1), inventDim.inventSerialId), WHSRFColorText::Success);

                addedMessage    = true;



                WMSJournalTrans wmsJournalTransCheck;

                select firstonly RecId from wmsJournalTransCheck

                    where   wmsJournalTransCheck.journalId              == wmsJournalTrans.journalId

                    &&      wmsJournalTransCheck.itemId                 == wmsJournalTrans.itemId

                    &&     (wmsJournalTransCheck.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::None

                        ||  wmsJournalTransCheck.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan);



                if (!wmsJournalTransCheck)

                {

                    _con = this.printSN(_con, wmsJournalTrans.itemId);

                }

            }

        }

        catch

        {

            error (strFmt("Failed to assigne serial number '%1'.", _inventSerialId));

            _con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);

            addedMessage    = true;

        }



        return _con;

    }



    protected container getInventSerialIdStep(container _ret)

    {

        _ret = this.buildGetInventSerialId(_ret);



        return _ret;

    }



    protected container buildGetInventSerialId(container _con)

    {

        container ret = _con;



        ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSPOReceiveStep::ScanSerialNum), 1, '', #WHSRFUndefinedDataType, '', 0)];

        ret += [this.buildControl(#RFText, #SerialId, "Serial number", 1, '', extendedTypeNum(InventSerialId), '', 0)];

        ret += [this.buildControl(#RFButton, #RFOK, "@SYS301992", 1, '', #WHSRFUndefinedDataType, '', 1)];

        ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];

        ret += [this.buildControl(#RFButton, #RFPrintSN, "Print SN", 1, '', #WHSRFUndefinedDataType, '', 0)];

        ret += [this.buildControl(#RFButton, #RFInquireSN, "Inquire", 1, '', #WHSRFUndefinedDataType, '', 0)];

        ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];



        return ret;

    }



    protected container getScannedQtyCon(ItemId _itemId, InventJournalId _journalId)

    {

        WMSJournalTrans wMSJournalTransAvail, wMSJournalTransSum;



        select sum(Qty) from wMSJournalTransSum

            where   wMSJournalTransSum.journalId    == _journalId

            &&      wMSJournalTransSum.itemId       == _itemId;



        select sum(Qty) from wMSJournalTransAvail

            where   wMSJournalTransAvail.journalId              == _journalId

            &&      wMSJournalTransAvail.itemId                 == _itemId

            &&     (wMSJournalTransAvail.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::None

                ||  wMSJournalTransAvail.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan);



        return [strFmt("QTY %1 of %2", real2int(wMSJournalTransSum.qty - wMSJournalTransAvail.qty), real2int(wMSJournalTransSum.qty)), wMSJournalTransAvail.Qty];

    }



    // Added Print BN , joanne, 20200528



    protected container printBN(container _con, ItemId _itemId, InventJournalId   curJournalId)

    {

        container ret = _con;

        //if (pass.exists(#DEMO_InventJournalId))

        //{

          //  InventJournalId         curJournalId = pass.lookupStr(#DEMO_InventJournalId);          

            WMSJournalTable         WMSJournalTable = WMSJournalTable::find(curJournalId);

            WMSJournalTrans         wMSJournalTrans;



            DEMO_ZPLDocumentPrint    zplPrint = new DEMO_ZPLDocumentPrint();

            DEMO_ZPLDocumentLabel    zplLabel;

            int                     i;

            InventDim               inventDim;

            InventTable             inventTable;



            WHSLayoutId             layoutId;

            WHSParameters           wHSParameters   = WHSParameters::find();



            ;



            //zplPrint.initMenuFields();

            while select wMSJournalTrans

                where   wMSJournalTrans.JournalId == WMSJournalTable.JournalId

                &&     (_itemId == "" || wMSJournalTrans.itemId == _itemId)

            join inventDim

                where   inventDim.inventDimId           == wMSJournalTrans.inventDimId

                &&      inventDim.inventBatchId

            {

                Qty journalTransQty             = wMSJournalTrans.qty;

                for (i = 1; i <= journalTransQty; i++)

                {

                    zplLabel.ItemId     = wMSJournalTrans.itemId;

                    zplLabel.Barcode    = inventDim.inventBatchId;

                    zplLabel.ItemName   = InventTable::find(wMSJournalTrans.ItemId).itemName();

                    zplLabel.Price      =1;

                    zplLabel.PackQty    =2;

                    zplLabel.Location   =inventDim.wMSLocationId;

                    zplLabel.PrintDate  =Today();

                    zplLabel.insert();



                    if(wHSParameters.DEMO_POBatchLayoutId)

                        layoutId = wHSParameters.DEMO_POBatchLayoutId;

                    else

                        layoutId = "1";



                    zplPrint.printDocument(wHSParameters.DEMO_DefaultPrinterName,layoutId,zplLabel);

                }

            }



            //Modified by 9158 on 20190417 for printing barcode  --  end

           

            ret             = this.addErrorLabel(_con, strFmt("BN (item:%2) is printed to %1.", WHSParameters::find().DEMO_DefaultPrinterName, _itemId), WHSRFColorText::Success);

            addedMessage    = true;



        //}



        return ret;

    }

    // Added Print BN , joanne, 20200528 -end



}



//------------------------------------





Print Serial Number Demo:



[WHSWorkExecuteMode(WHSWorkExecuteMode::DEMO_SNInquire)]
class DEMO_WHSWorkExecuteDisplaySNInquire extends WHSWorkExecuteDisplay
{
    #DEMO_WHSRF_Extension

    int             qty;
    boolean         addedMessage;

    
    protected container getDeleteSNStep(container _ret)
    {
        str         itemIdStr   = pass.lookupStr(#ItemId);
        container   tempCon     = str2con(itemIdStr, #InfoSeparator, false);
        ItemId      itemId      = strLRTrim(conPeek(tempCon, 1));

        str elements = this.getSerialNumberInfo(itemId, true);

        _ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSSNInquireStep::DeleteSN), 1, '', #WHSRFUndefinedDataType, '', 0)];
        _ret += [this.buildControl(#RFCombobox, #SerialId, "@SYS477", 1, elements, #WHSRFUndefinedDataType, '', 0)];
        _ret += [this.buildControl(#RFButton, #RFOK, "@SYS301992", 1, '', #WHSRFUndefinedDataType, '', 1)];
        _ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
        _ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];

        return _ret;
    }

    protected container getAddSNStep(container _ret)
    {
        // direct go to do somethings (getConfirmationStep)
        WMSJournalTrans                 wMSJournalTrans;  
        InventTable                     inventTable;
        InventNumGroup                  inventNumGroup;
        EcoResTrackingDimensionGroup    ecoResTrackingDimensionGroup;

        str         itemIdStr   = pass.lookupStr(#ItemId);
        container   tempCon     = str2con(itemIdStr, #InfoSeparator, false);
        ItemId      itemId      = strLRTrim(conPeek(tempCon, 1));
                             
        // Suggest the line by item ID
        select firstonly wMSJournalTrans
            where   wMSJournalTrans.journalId   == pass.lookupStr(#DEMO_InventJournalId)
            &&      wMSJournalTrans.ItemId      == itemId
            &&     (wMSJournalTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::None
                ||  wMSJournalTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::RequireSNScan);

        inventTable     = InventTable::find(itemId);

        ecoResTrackingDimensionGroup    = ecoResTrackingDimensionGroup::find(inventTable.trackingDimensionGroup());

        if (ecoResTrackingDimensionGroup.IsSerialNumberControlEnabled)
        {
            if (inventTable.SerialNumGroupId)
            {
                inventNumGroup              = InventNumGroup::find(inventTable.SerialNumGroupId);

                if (!(inventNumGroup.NumberSequenceTable && inventNumGroup.PerQty == 1))
                {
                    wMSJournalTrans.DEMO_WHSPOReceiveStatus   = DEMO_WHSPOReceiveStatus::RequireSNScan;
                }
            }
        }

        if (wMSJournalTrans)
        {
            if (wMSJournalTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::RequireSNScan)
            {
                _ret = this.wmsJournalTransSplit(wMSJournalTrans, _ret);
            }
            else
            {                
                _ret += [this.buildControl(#RFLabel, #RFError, "It is not necessary to scan SN.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];
                _ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
            }
        }
        else
        {
            _ret += [this.buildControl(#RFLabel, #RFError, "All qty is scanned.", 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Error)];
            _ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
        }

        return _ret;
    }

    protected container getItemIdStep(container _ret, WMSJournalId _journalId)
    {
        _ret = this.buildGetItemIdList(_ret, _journalId);
        return _ret;
    }

    protected container buildGetItemIdList(container _con, WMSJournalId _journalId)
    {
        container   ret = _con;
        container   IdList;
        str         elements;

        IdList    = this.buildItemIdList(_journalId);

        ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSSNInquireStep::SelectItemId), 1, '', #WHSRFUndefinedDataType, '', 0)];
        ret += IdList;
        ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
        ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];
        //Added by 9158 on 20190418  --  begin
        //ret += [this.buildControl(#RFButton, #RFPrintSN, "Print SN", 1, '', #WHSRFUndefinedDataType, '', 0)];
        //step = DEMO_WHSSNInquireStep::SelectItemId;     
        //Added by 9158 on 20190418  --  end

        return ret;
    }

    private container buildItemIdList(WMSJournalId _journalId)
    {
        WMSJournalTrans     wMSJournalTrans, wMSJournalTransAvail, wMSJournalTransSum;
        InventDim           inventDim;
        container           ret;
        str                 elements;


        while select wMSJournalTrans
            group by ItemId
            where   wMSJournalTrans.journalId       == _journalId
        {
            select sum(Qty) from wMSJournalTransSum
                where   wMSJournalTransSum.journalId    == _journalId
                &&      wMSJournalTransSum.itemId       == wMSJournalTrans.itemId;

            select sum(Qty) from wMSJournalTransAvail
                where   wMSJournalTransAvail.journalId              == _journalId
                &&      wMSJournalTransAvail.itemId                 == wMSJournalTrans.itemId
                &&     (wMSJournalTransAvail.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::None
                    ||  wMSJournalTransAvail.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScan);

            InventTable inventTable = InventTable::find(wMSJournalTrans.itemId);

            elements = strFmt("%1 %2 %3\nEAN: %4\nQTY %5 of %6", wMSJournalTrans.itemId, #InfoSeparator , inventTable.NameAlias, inventTable.DEMO_EANCode, real2int(wMSJournalTransSum.qty - wMSJournalTransAvail.qty), real2int(wMSJournalTransSum.qty));

            ret += [this.buildControl(#RFButton,  wMSJournalTrans.itemId, wMSJournalTrans.itemId, 1, '', extendedTypeNum(ItemId), '', 0, true, '', WHSRFColorText::Default )];
            ret += [this.buildControl(#RFLabel,  wMSJournalTrans.itemId , elements, 0, '', extendedTypeNum(ItemId), '', 0, true, '', WHSRFColorText::Default )];
        }

        return ret;
    }

    protected container getSNInquireStep(container _ret)
    {
        str         itemIdStr   = pass.lookupStr(#ItemId);
        container   tempCon     = str2con(itemIdStr, #InfoSeparator, false);
        ItemId      itemId      = strLRTrim(conPeek(tempCon, 1));

        str SNInfo = this.getSerialNumberInfo(itemId);

        _ret += [this.buildControl(#RFLabel, #SNInfoHeader, 'Scanned serial number', 1, SNInfo, #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Default, extendedTypeNum(WHSRFQuantityInformation))];
        _ret += [this.buildControl(#RFLabel, #SNInfo, SNInfo, 1, '', #WHSRFUndefinedDataType, '', 0, true, '', WHSRFColorText::Default, extendedTypeNum(WHSRFQuantityInformation))];
        _ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
        _ret += [this.buildControl(#RFButton, "RFAdd", "@SYS2318", 1, '', #WHSRFUndefinedDataType, '', 0)];
        _ret += [this.buildControl(#RFButton, "RFDelete", "@SYS10308", 1, '', #WHSRFUndefinedDataType, '', 0)];
        //Added by 9158 on 20190426  --  begin
        _ret += [this.buildControl(#RFButton, #RFPrintSN, "Print SN", 1, '', #WHSRFUndefinedDataType, '', 0)];
        _ret += [this.buildControl(#RFButton, #RFPrintBN, "Print BN", 1, '', #WHSRFUndefinedDataType, '', 0)];
        //Added by 9158 on 20190426  --  end
        _ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];

        return _ret;
    }

    private container getItemArrivalJourStep(container _ret)
    {
        _ret = this.buildGetItemArrivalJour(_ret);
        step = DEMO_WHSSNInquireStep::SelectItemId;
 
        return _ret;
    }

    container buildGetItemArrivalJour(container _con)
    {
        container ret = _con;
 
        ret = this.buildItemArrivalJourList(ret);
        ret += [this.buildControl(#RFButton, #RFCancel, "@SYS50163", 1, '', #WHSRFUndefinedDataType, '', 0)];
   
        return ret;
    }

    private container buildItemArrivalJourList(container _con)
    {
        WMSJournalTable     wMSJournalTable;
        container ret = _con;

        ret += [this.buildControl(#RFLabel, #Scan, 'Scan a Journal', 1, '', #WHSRFUndefinedDataType, '', 0)];

        while select wMSJournalTable  order by wMSJournalTable.journalId desc
            where   wMSJournalTable.JournalType == WMSJournalType::Reception
            &&      wMSJournalTable.posted      == NoYes::No
        {
            ret += [this.buildControl(#RFButton, wMSJournalTable.journalId , wMSJournalTable.journalId, 1, '', #WHSRFUndefinedDatatype, '', 1)];
            ret += [this.buildControl(#RFLabel, wMSJournalTable.journalId , '', 0, '', #WHSRFUndefinedDataType, '', 0)];

        }

        return ret;
    }

    container displayForm(container _con, str _buttonClicked = '')
    {
        container   ret = connull();
        container   con = _con;
        int         hasError    = 0;
        int         hasInfo     = 0;
 
        str btnclick = _buttonClicked;

        pass = WHSRFPassthrough::create(conPeek(_con, #PassthroughInfo));
        hasError = this.hasError(_con);

        // Remove the error message in the next step
        if (hasError)
        {
            con = conDel(con, #ControlsStart, 1);
        }

        hasInfo = this.DEMO_hasInformation(_con);

        // Remove the info message in the next step
        if (hasInfo)
        {
            con = conDel(con, #ControlsStart, 1);
        }
 
        // Return button
        if (_buttonClicked == #RFReturn)
        {
            if (step == DEMO_WHSSNInquireStep::SelectItemId)
            {
                step    = DEMO_WHSSNInquireStep::SelectItemArrivalJour;
                pass.remove(#DEMO_InventJournalId);
                pass.remove(#ItemId);
            }
            else if (step == DEMO_WHSSNInquireStep::ScanSerialNum)
            {
                step    = DEMO_WHSSNInquireStep::InquireSN;
                pass.remove(#SerialId);
                pass.remove(#WMSJournalRecId);
            }
            else if (step == DEMO_WHSSNInquireStep::InquireSN)
            {
                // When return back from inquire, clear all stored data
                container conData = conPeek(con, 4);
                conData = conPoke(conData, #data, "");
                con     = conPoke(con, 4, conData);

                if (pass.exists(#WMSJournalRecId))
                {
                    pass.remove(#SerialId);
                    step    = DEMO_WHSSNInquireStep::ScanSerialNum;
                }
                else
                {
                    pass.remove(#ItemId);
                    step    = DEMO_WHSSNInquireStep::SelectItemId;
                }
            }
            else if (step == DEMO_WHSSNInquireStep::AddSN)
            {
                step    = DEMO_WHSSNInquireStep::InquireSN;
                pass.remove(#SerialId);
                pass.remove(#WMSJournalRecId);
            }
            else if (step == DEMO_WHSSNInquireStep::DeleteSN)
            {
                step    = DEMO_WHSSNInquireStep::InquireSN;
                pass.remove(#SerialIdDel);
                pass.remove(#WMSJournalRecId);
            }
        }
        else if (_buttonClicked == "RFAdd")
        {
            step = DEMO_WHSSNInquireStep::AddSN;
        }
        else if (_buttonClicked == "RFDelete")
        {
            step = DEMO_WHSSNInquireStep::DeleteSN;
        }

        //Added by 9158 on 20190418  --  begin
        if (_buttonClicked == #RFPrintSN)
        {
            if (pass.exists(#DEMO_InventJournalId))
            {
                
                InventJournalId         curJournalId = pass.lookupStr(#DEMO_InventJournalId);
                WMSJournalTable         WMSJournalTable = WMSJournalTable::find(curJournalId);
                WMSJournalTrans         wMSJournalTrans;

                DEMO_ZPLDocumentPrint    zplPrint = new DEMO_ZPLDocumentPrint();
                DEMO_ZPLDocumentLabel    zplLabel;
                int                     i;    
                InventDim               inventDim;
                InventTable             inventTable;

                WHSLayoutId             layoutId;
                EcoResTrackingDimensionGroupItem        ecoResTrackingDimensionGroupItem;
                EcoResTrackingDimensionGroup            ecoResTrackingDimensionGroup;
                EcoResTrackingDimensionGroupFldSetup    ecoResTrackingDimensionGroupFldSetup;
                boolean                 batchEnabled;
                boolean                 serialEnabled;
                str                     fieldName;
                //Added on 20191022 by 9158  - begin
                WHSParameters           wHSParameters   = WHSParameters::find();
                //Added on 20191022 by 9158  - end
                ;

                //zplPrint.initMenuFields();
                while select wMSJournalTrans
                    where wMSJournalTrans.JournalId     == WMSJournalTable.JournalId
                join inventDim
                    where   inventDim.inventDimId       == wMSJournalTrans.inventDimId
                    &&      inventDim.inventSerialId
                {
                    select ecoResTrackingDimensionGroupItem
                        where ecoResTrackingDimensionGroupItem.ItemId == wMSJournalTrans.itemId
                    join ecoResTrackingDimensionGroup
                        where ecoResTrackingDimensionGroup.recId == ecoResTrackingDimensionGroupItem.TrackingDimensionGroup;
                    
                    while select ecoResTrackingDimensionGroupFldSetup
                        where ecoResTrackingDimensionGroupFldSetup.TrackingDimensionGroup == ecoResTrackingDimensionGroup.recId
                    {
                        fieldName   = ecoResTrackingDimensionGroupFldSetup.fieldName();
                        if(fieldName == 'Serial number' && ecoResTrackingDimensionGroupFldSetup.IsActive==NoYes::Yes)
                        {
                            serialEnabled = true;
                        }
                        else if(fieldName == 'Batch number' && ecoResTrackingDimensionGroupFldSetup.IsActive==NoYes::Yes)
                        {                            
                            batchEnabled = true;
                        }
                    }

                    if(serialEnabled == true)
                    {
                        //Added by 9158 on 20191022  --  begin
                        //Original
                        //layoutId = "PO SN";
                        layoutId = wHSParameters.DEMO_POSNLayoutId;
                        //Added by 9158 on 20191022  --  end
                    }
                    else if(batchEnabled == true)
                    {
                        //Added by 9158 on 20191022  --  begin
                        //Original
                        //layoutId = "PO Batch";
                        // Added by Joanne on 20200304 - begin -add big label
                        if(InventTable::find(wMSJournalTrans.ItemId).DGS_BigLabel)
                        {
                            layoutId = wHSParameters.DEMO_POBigLabelLayoutId;
                        }
                        else
                        {
                            layoutId = wHSParameters.DEMO_POBatchLayoutId;
                        }
                        //Added by 9158 on 20191022  --  end
                    }
                        zplLabel.ItemId     = wMSJournalTrans.itemId;
                        zplLabel.Barcode    = inventDim.inventSerialId;
                        zplLabel.ItemName   = InventTable::find(wMSJournalTrans.ItemId).itemName();
                        zplLabel.Price      = 0;
                        zplLabel.PackQty    = 0;
                        zplLabel.Location   = inventDim.wMSLocationId;
                        zplLabel.PrintDate  =  DatetimeUtil::date(today());
                        //Added on 20190429 by 9158 for MOD066  --  begin
                        zplLabel.ProNum         = wMSJournalTrans.InventTable().DEMO_ShortCode;
                        zplLabel.InventBatchId  = inventDim.InventBatchId;
                        zplLabel.InventSerialId = inventDim.InventSerialId;
                        //Added on 20190429 by 9158 for MOD066  --  end
                        zplLabel.insert();

                        zplPrint.printDocument(WHSParameters::find().DEMO_DefaultPrinterName, layoutId,zplLabel);
                    //}
                }

                _con    = conNull();

                //Modified by 9158 on 20190417 for printing barcode  --  end
                
                ret = this.addErrorLabel(_con, strFmt("SN is printed to %1.", WHSParameters::find().DEMO_DefaultPrinterName), WHSRFColorText::Success);
                addedMessage    = true;
                step    = DEMO_WHSSNInquireStep::SelectItemId;
            }
        }
        //Added by 9158 on 20190418  --  end

        if (_buttonClicked == #RFPrintBN)
        {
            if (pass.exists(#DEMO_InventJournalId))
            {
                
                InventJournalId         curJournalId = pass.lookupStr(#DEMO_InventJournalId);
                WMSJournalTable         WMSJournalTable = WMSJournalTable::find(curJournalId);
                WMSJournalTrans         wMSJournalTrans;

                DEMO_ZPLDocumentPrint    zplPrint = new DEMO_ZPLDocumentPrint();
                DEMO_ZPLDocumentLabel    zplLabel;
                int                     i;
                InventDim               inventDim;
                InventTable             inventTable;

                WHSLayoutId             layoutId;
                EcoResTrackingDimensionGroupItem        ecoResTrackingDimensionGroupItem;
                EcoResTrackingDimensionGroup            ecoResTrackingDimensionGroup;
                EcoResTrackingDimensionGroupFldSetup    ecoResTrackingDimensionGroupFldSetup;
                boolean                 batchEnabled;
                boolean                 serialEnabled;
                str                     fieldName;
                //Added on 20191022 by 9158  - begin
                WHSParameters           wHSParameters   = WHSParameters::find();
                //Added on 20191022 by 9158  - end
                ;

                //zplPrint.initMenuFields();
                while select wMSJournalTrans
                    where wMSJournalTrans.JournalId     == WMSJournalTable.JournalId
                join inventDim
                    where   inventDim.inventDimId       == wMSJournalTrans.inventDimId
                    &&      inventDim.inventBatchId
                {
                    select ecoResTrackingDimensionGroupItem
                        where ecoResTrackingDimensionGroupItem.ItemId == wMSJournalTrans.itemId
                    join ecoResTrackingDimensionGroup
                        where ecoResTrackingDimensionGroup.recId == ecoResTrackingDimensionGroupItem.TrackingDimensionGroup;
                    
                    while select ecoResTrackingDimensionGroupFldSetup
                        where ecoResTrackingDimensionGroupFldSetup.TrackingDimensionGroup == ecoResTrackingDimensionGroup.recId
                    {
                        fieldName   = ecoResTrackingDimensionGroupFldSetup.fieldName();
                        if(fieldName == 'Batch number' && ecoResTrackingDimensionGroupFldSetup.IsActive==NoYes::Yes)
                        {
                            batchEnabled = true;
                        }
                    }

                    if(batchEnabled == true)
                    {
                        //Added by 9158 on 20191022  --  begin
                        //Original
                        //layoutId = "PO Batch";
                        // Added by Joanne on 20200304 - begin -add big label
                        if(InventTable::find(wMSJournalTrans.ItemId).DGS_BigLabel)
                        {
                            layoutId = wHSParameters.DEMO_POBigLabelLayoutId;
                        }
                        else
                        {
                            layoutId = wHSParameters.DEMO_POBatchLayoutId;
                        }
                        //Added by 9158 on 20191022  --  end
                    }
                    Qty journalTransQty             = wMSJournalTrans.qty;
                    for (i = 1; i <= journalTransQty; i++)
                    {
                        zplLabel.ItemId     = wMSJournalTrans.itemId;
                        zplLabel.Barcode    = inventDim.InventBatchId;
                        zplLabel.ItemName   = InventTable::find(wMSJournalTrans.ItemId).itemName();
                        zplLabel.Price      = 0;
                        zplLabel.PackQty    = 0;
                        zplLabel.Location   = inventDim.wMSLocationId;
                        zplLabel.PrintDate  =  DatetimeUtil::date(today());
                        //Added on 20190429 by 9158 for MOD066  --  begin
                        zplLabel.ProNum         = wMSJournalTrans.InventTable().DEMO_ShortCode;
                        zplLabel.InventBatchId  = inventDim.InventBatchId;
                        //Added on 20190429 by 9158 for MOD066  --  end
                        zplLabel.insert();

                        zplPrint.printDocument(WHSParameters::find().DEMO_DefaultPrinterName, layoutId,zplLabel);
                    }
                }

                _con    = conNull();

                //Modified by 9158 on 20190417 for printing barcode  --  end
                
                ret = this.addErrorLabel(_con, strFmt("SN is printed to %1.", WHSParameters::find().DEMO_DefaultPrinterName), WHSRFColorText::Success);
                addedMessage    = true;
                step    = DEMO_WHSSNInquireStep::SelectItemId;
            }
        }

        switch (step)
        {
            case DEMO_WHSSNInquireStep::SelectItemArrivalJour:
                ret = this.getItemArrivalJourStep(ret);
                break;
 
            case DEMO_WHSSNInquireStep::SelectItemId:
                if (!pass.exists(#DEMO_InventJournalId))
                {
                    for(int i = 0; i < conlen(con); i++)
                    {
                        if(conPeek(conPeek(con, i), 3) == _buttonClicked)
                        {
                            pass.insert(#DEMO_InventJournalId,_buttonClicked);
                        }
                    }
                }
                else
                {
                    // itemId
                    for(int i = 0; i < conlen(con); i++)
                    {
                        if(conPeek(conPeek(con, i), 3) == _buttonClicked)
                        {
                            pass.insert(#ItemId, _buttonClicked);
                        }
                    }
                }

                if (!pass.exists(#DEMO_InventJournalId))
                {
                    step = DEMO_WHSSNInquireStep::SelectItemArrivalJour;
                }

                if (pass.exists(#ItemId) && pass.exists(#DEMO_InventJournalId))
                {
                    step = DEMO_WHSSNInquireStep::InquireSN;
                }

                if (step == DEMO_WHSSNInquireStep::SelectItemId)
                {
                    ret = this.getItemIdStep(ret, pass.lookupStr(#DEMO_InventJournalId));
                }
                else if (step == DEMO_WHSSNInquireStep::ScanSerialNum)
                {
                    ret = this.getInventSerialIdStep(ret);
                }

                if (step == DEMO_WHSSNInquireStep::SelectItemArrivalJour)
                {
                    ret = this.getItemArrivalJourStep(ret);
                }

                if (step == DEMO_WHSSNInquireStep::InquireSN)
                {
                    ret = this.getSNInquireStep(ret);
                }

                break;

            case DEMO_WHSSNInquireStep::ScanSerialNum:
                if (conPeek(conPeek(con, 4), #data))
                {
                    pass.insert(#SerialId, conPeek(conPeek(con, 4), #data));
                }

                if (pass.exists(#SerialId))
                {
                    ret = this.wmsJournalTransUpdate(pass.lookupInt64(#WMSJournalRecId), pass.lookupStr(#DEMO_InventJournalId), pass.lookupStr(#SerialId), ret);
                }

                if (step == DEMO_WHSSNInquireStep::InquireSN)
                {
                    ret = this.getSNInquireStep(ret);
                }
                else if (step == DEMO_WHSSNInquireStep::selectItemId)
                {
                    ret = this.getItemIdStep(ret, pass.lookupstr(#DEMO_InventJournalId));
                }
                else if (step == DEMO_WHSSNInquireStep::scanSerialNum)
                {
                    ret = this.getInventSerialIdStep(ret);
                }

                if (step == DEMO_WHSSNInquireStep::selectItemArrivalJour)
                {
                    ret = this.getItemArrivalJourStep(ret);
                }

                if (step == DEMO_WHSSNInquireStep::AddSN)
                {
                    ret = this.getAddSNStep(ret);

                    if (step == DEMO_WHSSNInquireStep::ScanSerialNum)
                    {
                        ret = this.getInventSerialIdStep(ret);
                    }
                }

                break;

            case DEMO_WHSSNInquireStep::InquireSN:
                ret = this.getSNInquireStep(ret);
                break;

            case DEMO_WHSSNInquireStep::AddSN:
                ret = this.getAddSNStep(ret);

                if (step == DEMO_WHSSNInquireStep::ScanSerialNum)
                {
                    ret = this.getInventSerialIdStep(ret);
                }
                break;

            case DEMO_WHSSNInquireStep::DeleteSN:
                if (!pass.exists(#SerialIdDel))
                {
                    if (strLRTrim(conPeek(conPeek(con, 4), #data)) != "")
                    {
                        //Changed on 20191018 by 9158 - begin
                        //Original
                        //InventSerialId serialIdDel = conPeek(conPeek(con, 4), #data);
                        str serialIdDel = conPeek(conPeek(con, 4), #data);
                        //Changed on 20191018 by 9158 - end
                        serialIdDel = strLRTrim(conPeek(str2con(serialIdDel, #InfoSeparator, false), 2));
                        //Added on 20191018 by 9158 - begin
                        //Original
                        serialIdDel = subStr(serialIdDel,1,20);
                        //Added on 20191018 by 9158 - end

                        pass.insert(#SerialIdDel, serialIdDel);
                    }
                }

                if (pass.exists(#SerialIdDel))
                {
                    str         itemIdStr   = pass.lookupStr(#ItemId);
                    container   tempCon     = str2con(itemIdStr, #InfoSeparator, false);

                    ItemId      itemId      = strLRTrim(conPeek(tempCon, 1));

                    ret = this.deleteSN(ret, pass.lookupStr(#DEMO_InventJournalId), itemId, pass.lookupStr(#SerialIdDel));

                    pass.remove(#SerialIdDel);
                }

                ret = this.getDeleteSNStep(ret);
                break;

            default:
                break;
        }
 
        ret = this.updateModeStepPass(ret, WHSWorkExecuteMode::DEMO_SNInquire, step, pass);
 
        return ret;
    }

    protected container deleteSN(container _ret, InventJournalId _journalId, ItemId _itemId, InventSerialId _serialId)
    {
        WMSJournalTrans     wMSJournalTrans;
        InventDim           inventDim;
        int                 i;

        ttsbegin;

        select firstOnly forupdate wMSJournalTrans
            where   wMSJournalTrans.journalId               == _journalId
            &&      wMSJournalTrans.itemId                  == _itemId
            &&      wMSJournalTrans.DEMO_WHSPOReceiveStatus  == DEMO_WHSPOReceiveStatus::RequireSNScanEnded
        join inventDim
            where   inventDim.inventDimId           == wMSJournalTrans.inventDimId
            &&      inventDim.InventSerialId        == _serialId;
        
        if (wMSJournalTrans && inventDim)
        {
            inventDim.inventSerialId                = "";
            wMSJournalTrans.inventDimId             = inventDim::findOrCreate(inventDim).inventDimId;
            wMSJournalTrans.DEMO_WHSPOReceiveStatus  = DEMO_WHSPOReceiveStatus::RequireSNScan;
            wMSJournalTrans.doUpdate();

            InventSerial inventSerial;
            delete_from inventSerial
                where   inventSerial.InventSerialId == _serialId
                &&      inventSerial.ItemId         == _itemId;
            
            _ret = this.addErrorLabel(_ret, strFmt("Serial number '%1' is deleted.", _serialId), WHSRFColorText::Success);
            addedMessage    = true;
        }

        ttscommit;

        return _ret;
    }

    protected str getSerialNumberInfo(ItemId _itemId, boolean _lookup = false)
    {
        str                 ret;
        WMSJournalTrans     wMSJournalTrans;
        InventDim           inventDim;
        int                 i;

        if (_lookup)
        {
            ret = "   ";
        }

        while select wMSJournalTrans
            order by CreatedDateTime DESC
            where   wMSJournalTrans.journalId       == pass.lookupStr(#DEMO_InventJournalId)
            &&      wMSJournalTrans.itemId          == _itemId        
            &&      (!_lookup || wMSJournalTrans.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNScanEnded)
        join inventDim     
            where   inventDim.inventDimId           == wMSJournalTrans.inventDimId
            &&      inventDim.InventSerialId        != ""
        {
            i++;
            
            if (!ret)
            {
                ret = strFmt("%1 %2 %3", wMSJournalTrans.DEMO_WHSPOReceiveStatus, #InfoSeparator, inventDim.InventSerialId);
            }
            else
            {
                if (_lookup)
                {
                    ret += strFmt("||%1 %2 %3", wMSJournalTrans.DEMO_WHSPOReceiveStatus, #InfoSeparator, inventDim.InventSerialId);
                }
                else
                {
                    ret += strFmt("\n%1 %2 %3", wMSJournalTrans.DEMO_WHSPOReceiveStatus, #InfoSeparator, inventDim.InventSerialId);
                }
            }
        }

        return ret;
    }

    protected container wmsJournalTransSplit(WMSJournalTrans _wMSJournalTrans, container _con)
    {
        int                             startInfologLine;
        InventDim                       inventDim, inventDim_Update;
        InventTable                     inventTable;
        InventNumGroup                  inventNumGroup;
        InventBatch                     inventBatch;
        EcoResTrackingDimensionGroup    ecoResTrackingDimensionGroup;
        WMSJournalTrans                 wMSJournalTransNew;
        WMSJournalTable                 wMSJournalTable;
        InventBatchExpDate              expDate;

        try
        {
            ttsbegin;

            startInfologLine = infologLine() + 1;

            if (_wMSJournalTrans.Qty > 1)
            {
                if (_wMSJournalTrans.DEMO_WHSPOReceiveStatus != DEMO_WHSPOReceiveStatus::NotRequire)
                {
                    _wMSJournalTrans.selectForUpdate(true);
                    _wMSJournalTrans.qty        -= 1;
                    _wMSJournalTrans.update();

                    buf2Buf(_wMSJournalTrans, wMSJournalTransNew);
                    wMSJournalTransNew.lineNum  = 0;
                    wMSJournalTransNew.qty      = 1;
                    wMSJournalTransNew.insert();
                }
            }
            else
            {
                wMSJournalTransNew  = _wMSJournalTrans;
            }
    
            wMSJournalTransNew.selectForUpdate(true);
            inventTable     = InventTable::find(wMSJournalTransNew.ItemId);

            ecoResTrackingDimensionGroup    = ecoResTrackingDimensionGroup::find(inventTable.trackingDimensionGroup());

            if (ecoResTrackingDimensionGroup.IsSerialNumberControlEnabled)
            {
                if (inventTable.SerialNumGroupId)
                {
                    inventNumGroup              = InventNumGroup::find(inventTable.SerialNumGroupId);

                    if (inventNumGroup.NumberSequenceTable && inventNumGroup.PerQty == 1)
                    {
                        wMSJournalTransNew.DEMO_WHSPOReceiveStatus   = DEMO_WHSPOReceiveStatus::RequireSNAuto;

                        inventDim                   = wMSJournalTransNew.inventDim();
                        inventDim.inventSerialId    = inventNumGroup.buildNumberParameters(_wMSJournalTrans.transDate, _wMSJournalTrans.inventTransRefId, _wMSJournalTrans.inventTransId, extendedTypeNum(InventSerialId));
                        
                        if (inventDim.inventSerialId)
                        {
                            InventSerial::findOrCreate(inventDim.inventSerialId, _wMSJournalTrans.itemId);
                        }
                        else
                        {
                            throw error (strFmt("Cannot generate serial number for item '%1'.", _wMSJournalTrans.itemId));
                        }

                        inventDim   = InventDim::findOrCreate(inventDim);
                        
                        if (!inventDim.inventBatchId)
                        {
                            expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);
                            if (expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))
                            {
                                expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);
                            }
                            InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);
                      
                            inventDim.inventBatchId         = wMSJournalTable.inventTransRefId;
                            wMSJournalTransNew.inventDimId  = InventDim::findOrCreate(inventDim).inventDimId;
                        }
               
                        step                        = DEMO_WHSPOReceiveStep::SelectItemId;
                    }
                    else
                    {
                        wMSJournalTransNew.DEMO_WHSPOReceiveStatus   = DEMO_WHSPOReceiveStatus::RequireSNScan;
                        inventDim                                   = wMSJournalTransNew.inventDim();

                        if(!inventDim.inventBatchId)
                        {
                            expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);
                            if(expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))
                                    expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);
                            InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);
                
                            inventDim.inventBatchId         = wMSJournalTable.inventTransRefId;
                            wMSJournalTransNew.inventDimId  = InventDim::findOrCreate(inventDim).inventDimId;
                        }
            
                        step = DEMO_WHSPOReceiveStep::ScanSerialNum;
                        pass.insert(#WMSJournalRecId, wMSJournalTransNew.RecId);
                    }
                }
                else
                {
                    throw error(strFmt("Serial number group has not been setup in item '%1'.", wMSJournalTransNew.ItemId));
                }
            }
            else
            {
                wMSJournalTransNew.DEMO_WHSPOReceiveStatus   = DEMO_WHSPOReceiveStatus::NotRequire;
                inventDim                                   = wMSJournalTransNew.inventDim();

                if (!inventDim.inventBatchId)
                {
                    expDate = str2Date(strFmt("%1/%2/%3", mthOfYr(inventNumGroup.DEMO_ExpirationMonth), dayOfMth(today()), year(inventNumGroup.DEMO_ExpirationMonth)), 213);
                    if(expDate > endMth(inventNumGroup.DEMO_ExpirationMonth))
                                    expDate = endMth(inventNumGroup.DEMO_ExpirationMonth);
                    InventBatch::findOrCreate(wMSJournalTable.inventTransRefId, _wMSJournalTrans.itemId, expDate);
            
                    inventDim.inventBatchId         = wMSJournalTable.inventTransRefId;
                    wMSJournalTransNew.inventDimId  = InventDim::findOrCreate(inventDim).inventDimId;
                }

                step                                = DEMO_WHSPOReceiveStep::SelectItemId;
                
                _con = this.addErrorLabel(_con, strFmt("Serial number is not required.", inventDim.inventSerialId), WHSRFColorText::Success);
                addedMessage    = true;
            }
            
            wMSJournalTransNew.update();
      
            if (wMSJournalTransNew.DEMO_WHSPOReceiveStatus == DEMO_WHSPOReceiveStatus::RequireSNAuto && qty == 1)
            {
                _con = this.addErrorLabel(_con, strFmt("Serial number assigned."), WHSRFColorText::Success);
                addedMessage    = true;
            }
                
            ttscommit;
        }
        catch
        {
            error ("Failed to assigne serial number.");
            _con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);
        }
        return _con;
    }

    protected container wmsJournalTransUpdate(RecId _wmsJournalTransRecId, InventJournalId _journalId, InventSerialId _inventSerialId, container _con)
    {
        WMSJournalTrans     wmsJournalTrans, wmsJournalTrans_checkSerialNo;
        WMSJournalTable     wmsJournalTable_checkSerialNo;
        InventTransOrigin   inventTransOrigin_checkSerialNo;
        InventTrans         inventTrans_checkSerialNo;
        InventDim           inventDim, inventDim_checkSerialNo;
        int                 startInfologLine;
        boolean             invalid;

        try
        {
            select firstonly forupdate wmsJournalTrans
                where   wmsJournalTrans.journalId   == _journalId
                &&      wmsJournalTrans.RecId       == _wmsJournalTransRecId;

            if (wmsJournalTrans.Qty > 0)
            {
                // Posted qty with same serial number
                select sum(Qty) from inventTrans_checkSerialNo
                    where   (inventTrans_checkSerialNo.Qty >=0
                            ||
                            (inventTrans_checkSerialNo.Qty <0 && (inventTrans_checkSerialNo.StatusIssue  == StatusIssue::Deducted ||
                                                                  inventTrans_checkSerialNo.StatusIssue  == StatusIssue::Picked)
                            )
                            )
                join inventDim_checkSerialNo
                    where   inventDim_checkSerialNo.inventSerialId  == _inventSerialId
                    &&      inventDim_checkSerialNo.inventDimId     == inventTrans_checkSerialNo.inventDimId
                join inventTransOrigin_checkSerialNo
                    where   inventTransOrigin_checkSerialNo.RecId               == inventTrans_checkSerialNo.InventTransOrigin
                    &&      inventTransOrigin_checkSerialNo.ReferenceCategory   == InventTransType::Purch;

                // non-posted qty with same serial number
                select sum(Qty) from wmsJournalTrans_checkSerialNo
                    where   wmsJournalTrans_checkSerialNo.journalId == wmsJournalTrans.journalId
                    &&      wmsJournalTrans_checkSerialNo.itemId    == wmsJournalTrans.itemId
                join inventDim_checkSerialNo
                    where   inventDim_checkSerialNo.inventSerialId  == _inventSerialId
                    &&      inventDim_checkSerialNo.inventDimId     == wmsJournalTrans_checkSerialNo.inventDimId;

                if (inventTrans_checkSerialNo.Qty + wmsJournalTrans_checkSerialNo.qty > 0)
                {
                    invalid = true;
                }
            }

            if (invalid)
            {
                error (strFmt("Serial number '%1' already exists.", _inventSerialId));
                _con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);
                addedMessage    = true;
            }
            else
            {
                ttsbegin;

                startInfologLine = infologLine() + 1;

                inventDim                   = wmsJournalTrans.inventDim();
                inventDim.inventSerialId    = _inventSerialId;
                InventSerial::findOrCreate(inventDim.inventSerialId, wmsJournalTrans.ItemId);
                wmsJournalTrans.inventDimId             = InventDim::findOrCreate(inventDim).inventDimId;
                wmsJournalTrans.DEMO_WHSPOReceiveStatus  = DEMO_WHSPOReceiveStatus::RequireSNScanEnded;
                wmsJournalTrans.update();

                ttscommit;

                pass.remove(#WMSJournalRecId);
                pass.remove(#SerialId);
                _con = this.addErrorLabel(_con, strFmt("Serial number '%1' assigned.", inventDim.inventSerialId), WHSRFColorText::Success);
                addedMessage    = true;

                step = DEMO_WHSSNInquireStep::AddSN;
            }
        }
        catch
        {
            error (strFmt("Failed to assign serial number '%1'.", _inventSerialId));
            _con = this.addErrorLabelFromInfolog(_con, startInfologLine, WHSRFColorText::Error);
            addedMessage    = true;
        }

        return _con;
    }

    protected container getInventSerialIdStep(container _ret)
    {
        _ret = this.buildGetInventSerialId(_ret);
 
        return _ret;
    }

    protected container buildGetInventSerialId(container _con)
    {
        container ret = _con;

        ret += [this.buildControl(#RFLabel, #Enter, enum2Str(DEMO_WHSSNInquireStep::ScanSerialNum), 1, '', #WHSRFUndefinedDataType, '', 0)];
        ret += [this.buildControl(#RFText, #SerialId, "Serial number", 1, '', extendedTypeNum(InventSerialId), '', 0)];
        ret += [this.buildControl(#RFButton, #RFOK, "@SYS301992", 1, '', #WHSRFUndefinedDataType, '', 1)];
        ret += [this.buildControl(#RFButton, #RFCancel, "@SYS12778", 1, '', #WHSRFUndefinedDataType, '', 0)];
        ret += [this.buildControl(#RFButton, #RFReturn, "@SYS16512", 1, '', #WHSRFUndefinedDataType, '', 0)];

        return ret;
    }

}


//------------------------

 

 

arrow
arrow
    全站熱搜

    lionlionchopper 發表在 痞客邦 留言(0) 人氣()