Wednesday 25 October 2017

Sales line Picking list using X++;

Sales line Picking list using X++;

public static void RetailCWItemSalesLinePick(SalesLine salesLine)
        {
            TmpInventTransWMS       tmpinventTransWMS;
            InventTrans             inventTrans;
            InventTransWMS_Pick     inventTransWMS_Pick;
            Query                   inventTransQuery;
            QueryBuildDataSource    qbdsInventTrans;
            QueryBuildRange         qbRange;
            InventTransChildType    inventTransChildType;
            InventTransChildRefId   inventTransChildRefId;
            ItemFreeTxt             rangeStr;
            counter                 inventTransChildTypeInt;
            InventMovement          inventMovement;
            InventTransOriginId     inventTransOriginId;
   
            inventTransQuery = new Query();
   
            qbdsInventTrans = inventTransQuery.addDataSource(tableNum(inventTrans));
            qbdsInventTrans.addRange(fieldNum(InventTrans,StatusReceipt)).value(SysQuery::value(StatusReceipt::None));
            qbdsInventTrans.addRange(fieldNum(InventTrans,StatusIssue)).value(SysQuery::range(StatusIssue::Picked,StatusIssue::OnOrder));
   
            inventMovement      = InventTransWMS_Pick::inventMovement(salesLine);
            inventTransOriginId = inventMovement.inventTransOriginId();
   
            if (inventMovement)
            {
                if (inventMovement.transChildType())
                {
                    inventTransChildType  = inventMovement.transChildType();
                    inventTransChildRefId = inventMovement.transChildRefId();
                }
                else
                {
                    inventTransChildType  = InventTransChildType::None;
                    inventTransChildRefId = '';
                }
            }
            inventTransChildTypeInt = inventTransChildType; // Avoid query problems with special characters in enum label.
            //range over all loaded movements
            qbRange = qbdsInventTrans.addRange(fieldNum(InventTrans,InventTransOrigin));
            rangeStr = strFmt('((%1.%2 == %3) && (%4.%5 == %6)',
                            qbdsInventTrans.name(),
                            fieldStr(InventTrans,InventTransOrigin),
                            queryValue(inventTransOriginId),
                            qbdsInventTrans.name(),
                            fieldStr(InventTrans,TransChildType),
                            inventTransChildTypeInt);

            if (inventTransChildRefId)
            {
                rangeStr = rangeStr + strFmt(' && (%1.%2 == \"%3\"))',
                            qbdsInventTrans.name(),
                            fieldStr(InventTrans,TransChildRefId),
                            queryValue(inventTransChildRefId));
            }
            else
            {
                // To avoid 2 times double quotes for the childRefId.
                rangeStr = rangeStr + strFmt(' && (%1.%2 == \"\"))',
                            qbdsInventTrans.name(),
                            fieldStr(InventTrans,TransChildRefId));
            }
            qbRange.value(rangeStr);
   
            ttsBegin;
            inventTransWMS_Pick = InventTransWMS_Pick::newStandard(tmpinventTransWMS,inventTransQuery);
            inventTrans         = InventTrans::findTransId(salesLine.InventTransId);
   
            inventTransWMS_Pick.createFromInventTrans(inventTrans);
            tmpinventTransWMS   = inventTransWMS_Pick.parmTmpInventTransWMS();
   
            select firstOnly forUpdate tmpinventTransWMS where tmpinventTransWMS.InventTrans == inventTrans.RecId;
            tmpinventTransWMS.InventQty = salesLine.RemainInventPhysical;
            tmpinventTransWMS.update();
            inventTransWMS_Pick.writeTmpInventTransWMS(tmpinventTransWMS);
   
            inventTransWMS_Pick.updateInvent();
   
            ttsCommit;


        }