Wednesday, 12 June 2019

Create and post Transfer order in D365 custom service

public class BW_TransferJournalService
{
    [
        SysEntryPointAttribute(true),
        AifCollectionTypeAttribute('_transferJournalContractList',Types::Class,classStr(BW_TransferJournalContract)),
        AifCollectionTypeAttribute('return',Types::String)
    ]
    public str cerateTransferJournal(   List                    _transferJournalContractList,
                                        InventLocationIdFrom    _fromLoction,
                                        InventLocationIdTo      _toLocation,
                                        str                     _pgRequestNum)
    {
        InventTransferTable             inventTransferTable;
        InventTransferLine              inventTransferLine;
        InventJournalNameId             inventJournalName;
        InventDim                       inventDim;
        JournalCheckPost                journalCheckPost;
        Str1260                         msg, msgPost;
        BW_TransferJournalContract      transferJournalContract;
        ListEnumerator                  listEnumerator  = _transferJournalContractList.getEnumerator();
        numberSeq                       numberSeq;
        NumberSequenceReference         numberSequenceReference;
        InventTransferUpd               inventTransferUpd;

        try
        {
            ttsBegin;
            if (!_transferJournalContractList.empty())
            {
                inventTransferTable.clear();
                inventTransferTable.initValue();
                numberSequenceReference                     =   InventParameters::numRefTransferId();
                numberSeq                                   =   numberSeq::newGetNumFromCode(numberSequenceReference.numberSequenceTable().NumberSequence);
                inventTransferTable.TransferId              =   numberSeq.num();
                inventTransferTable.InventLocationIdFrom    =   _fromLoction;
                inventTransferTable.modifiedField(fieldNum(InventTransferTable, InventLocationIdFrom));
                inventTransferTable.InventLocationIdTo      =   _toLocation;
                inventTransferTable.modifiedField(fieldNum(InventTransferTable, InventLocationIdTo));
                inventTransferTable.TransferStatus          =   InventTransferStatus::Created;
                inventTransferTable.InventLocationIdTransit =   InventLocation::find(inventTransferTable.InventLocationIdFrom).InventLocationIdTransit;
                inventTransferTable.BW_PGRequestNum         =   _pgRequestNum;
                inventTransferTable.BW_RequestorId          =   curUserId();
                inventTransferTable.initFromAddress();
                inventTransferTable.initToAddress();
                inventTransferTable.initDeliveryMode();
                inventTransferTable.insert();

                while (listEnumerator.moveNext())
                {
                    transferJournalContract = listEnumerator.current();
                    ttsbegin;
                    inventTransferLine.clear();
                    inventTransferLine.initValue();
                    inventTransferLine.initFromInventTransferTable(inventTransferTable, NoYes::Yes);
                    inventTransFerLine.TransferId       =   inventTransferTable.TransferId;
                    inventTransFerLine.LineNum          =   InventTransferLine::lastLineNum(inventTransferTable.TransferId) + 1;
                    inventTransferLine.ItemId           =   transferJournalContract.parmItemId();
                    inventTransferLine.initFromInventTable(InventTable::find(transferJournalContract.parmItemId()));
                    inventTransferLine.QtyTransfer      =   transferJournalContract.parmTransferQty();
                    inventTransferLine.QtyRemainReceive =   transferJournalContract.parmTransferQty();
                    inventTransferLine.QtyRemainShip    =   transferJournalContract.parmTransferQty();
                    inventTransferLine.QtyShipNow       =   0;
                    inventTransferLine.QtyReceiveNow    =   0;
                    inventTransferLine.RemainStatus     =   InventTransferRemainStatus::Shipping;

                    inventDim = InventDim::findOrCreateBlank();
                    inventDim.initProductDimensionsFromInventTable(InventTable::find(transferJournalContract.parmItemId()));
                    inventTransferLine.InventDimId = inventDim::findOrCreate(inventDim).inventDimId;
                    inventTransferLine.initFromInventTransferTable(InventTransferTable::find(inventTransferTable.TransferId), true);
                 
                    InventMovement::bufferSetRemainQty(inventTransferLine,InventMovSubType::None);
                    InventMovement::bufferSetRemainQty(inventTransferLine,InventMovSubType::TransferOrderTransitFrom);

                    if (inventTransferLine.validateWrite())
                    {
                        inventTransferLine.insert();
                    }
                    ttscommit;
                }
                msg = strFmt("%1", "1|"+" "+inventTransferTable.TransferId);
            }
            else
            {
                throw error('Error:Empty contract');
            }
            ttsCommit;
        }
        catch
        {
            msg = "0|"+" "+infolog.text(infologLine());
            infolog.clear();
        }
        return msg;
    }

    [
        SysEntryPointAttribute(true),
        AifCollectionTypeAttribute('return',Types::Class,classStr(BW_TransferOrderDetailsContract))
    ]
    public List getTransferOrderDetails(JournalId     _transferId)
    {
        InventTransferTable             inventTransferTable;
        InventTransferLine              inventTransferLine;
        List                            detailsList  =   new List(Types::Class);
        str                             valueCentre, subValueCentre, unitCode;
        InventTable                     inventTable;
        InventTableModule               inventTableModule;
        Str1260                         msg;
        AmountMST                       purchPrice, salesPrice;
     
        if (_transferId)
        {
            while select inventTransferTable
                join  inventTransferLine
                where inventTransferTable.TransferId  ==  _transferId
                && inventTransferLine.TransferId ==  inventTransferTable.TransferId
            {
                if(inventTransferLine)
                {
                    BW_TransferOrderDetailsContract       transferOrderDetailsContract  = new   BW_TransferOrderDetailsContract();
                 
                    transferOrderDetailsContract.parmItemId(inventTransferLine.ItemId);
                    transferOrderDetailsContract.parmQty(inventTransferLine.QtyTransfer);
                    transferOrderDetailsContract.parmFromSerialNum(inventTransferLine.BW_FromSerialNum);
                    transferOrderDetailsContract.parmToSerialNum(inventTransferLine.BW_ToSerialNum);
                    transferOrderDetailsContract.parmBatchNum(inventTransferLine.BW_BatchNum);
                    transferOrderDetailsContract.parmExpDateOfStock(inventTransferLine.BW_ExpDateOfStock);
                    transferOrderDetailsContract.parmMessage("1");
                    detailsList.addEnd(transferOrderDetailsContract);
                }
                else
                {
                    BW_TransferOrderDetailsContract       transferOrderDetailsContract  = new   BW_TransferOrderDetailsContract();
                    msg = "0| Transfer order Line/Lines not available in database";
                    transferOrderDetailsContract.parmMessage(msg);
                    detailsList.addEnd(transferOrderDetailsContract);
                }
            }
        }
        else
        {
            BW_TransferOrderDetailsContract       transferOrderDetailsContract  = new   BW_TransferOrderDetailsContract();
            msg = "0| Transfer order is not available in database";
            transferOrderDetailsContract.parmMessage(msg);
            detailsList.addEnd(transferOrderDetailsContract);
        }
        return detailsList;
    }

    /*-----------------------------Posting transfer Order---------------------------------------------------*/
    [
        SysEntryPointAttribute(true),
        AifCollectionTypeAttribute('return',Types::String)
    ]
    public str postTransferOrder(InventTransferId   _transferId)
    {
        InventTransferTable             inventTransferTable;
        InventTransferUpd               inventTransferUpd;
        InventTransferParmTable         inventTransferParmTable;
        Str1260                         msg, msgPost;

        try
        {
            ttsBegin;
            if (_transferId)
            {
                select inventTransferTable where inventTransferTable.TransferId ==  _transferId;

                if(inventTransferTable.TransferStatus   !=   InventTransferStatus::Received)
                {
                    inventTransferParmTable.TransferId      = inventTransferTable.TransferId;
                    inventTransferParmTable.EditLines       = true;
                    inventTransferParmTable.AutoReceiveQty  = true;
                    inventTransferParmTable.ExplodeLines    = true;
                    inventTransferParmTable.UpdateType      = InventTransferUpdateType::Shipment;
                    inventTransferParmTable.TransDate       = systemDateGet();
                    inventTransferParmTable.ShipUpdateQty   = InventTransferShipUpdateQty::All;
                    //inventTransferParmTable.insert();
                    inventTransferUpd = InventTransferUpdShip::newParmBuffer(inventTransferParmTable);
                    inventTransferUpd.run();
                    msg = strFmt("1| Transfer order - %1 is posted", _transferId);
                }
                else
                {
                    msg = strFmt("0| Transfer order - %1 is already Received", _transferId);
                }
             
            }
            else
            {
                throw error('0| Error: Transfer order not available');
            }
            ttsCommit;
        }
        catch
        {
            msg = "0|"+" "+infolog.text(infologLine());
            infolog.clear();
        }
        return msg;
    }

}

No comments:

Post a Comment