How to post receive inventory transfer order

boolean postInventTransferOrderReceive()
{
    inventTransferParmTable         inventTransferParmTable;
    InventTransferMultiReceive      inventTransferMultiReceive;
    YIP_InventTransferSectionDetails table, lastReceDetails, updateRemainStatus;
    Num                             parmId;
    boolean                         ret = true;
    inventTransferJour              inventTransferJour;
    InventTransferJourLine          inventTransferJourLine;
    inventJournalTable              inventJournalTable;
    str                             errorMsg, voucherId;
    inventTransferLine              inventTransferLine, inventTransferLineUpd;
    qty                             packQty, qtyOver, qtyUnOver, minQty, maxQty, qtyActReceived,qtyLoss;
    percent                         subOverPct;
    int                             lastSectionId = YIP_InventTranferSection::getLastSectionId(this.TransferId);
    int                             fixRate;
    ;

    fixRate = YIP_InventItemCoal::exist(this.ItemId) == true ? 100 : 10;
    select count(recId) from lastReceDetails
            where lastReceDetails.InventTransId == this.InventTransId   &&
                  lastReceDetails.SectionId     == lastSectionId        &&
                  lastReceDetails.VoucherId     == "";
    if (lastReceDetails.RecId == 1)
    {
        inventTransferLine = this.inventTransferLine();
        /*
        select minof(TransferStatus) from table where table.InventTransId   == this.InventTransId;
        if (table.TransferStatus != InventTransferStatus::Received)
            throw checkFailed(strfmt("当前转移批次[%1]所有分段明细状态必须为[%2].",this.InventTransId,InventTransferStatus::Received));
            */
        packQty         = inventTransferLine.YIP_getQtyReceivedSection();
        qtyActReceived  = inventTransferLine.YIP_getQtyReceivedSection();//YIP_QtyActReceived;

        qtyOver     = packQty * inventTransferLine.OverDeliveryPct / fixRate;//超交
        qtyUnOver   = packQty * inventTransferLine.UnderDeliveryPct / fixRate;//欠交
        minQty      = packQty - qtyUnOver;
        maxQty      = packQty + qtyOver;

        subOverPct  = (qtyActReceived - packQty) / (packQty ? packQty : 1) * fixRate;

        if (subOverPct > inventTransferLine.OverDeliveryPct)
            throw checkFailed(strfmt("@SYS24920",subOverPct,inventTransferLine.OverDeliveryPct));

        subOverPct  = (packQty - qtyActReceived) / (packQty ? packQty : 1) * fixRate;

        if (subOverPct > inventTransferLine.UnderDeliveryPct)
            throw checkFailed(strfmt("@SYS24921",subOverPct, inventTransferLine.UnderDeliveryPct));

    }
    qtyActReceived = this.QtyReceive;
    if (!box::yesNo(strfmt("您确认要过账接收吗[实际收货数量(%1)]?", num2str(qtyActReceived, 1, 2, 1, 2)),
        dialogButton::No, "接收过账"))
        return false;
    try
    {
        ttsbegin;
        inventTransferLine = this.inventTransferLine(true);
        if (lastReceDetails.RecId == 1)
        {
            inventTransferLine.QtyReceiveNow    = inventTransferLine.YIP_QtyDelivery - inventTransferLine.YIP_QtyActReceived;
            inventTransferLine.YIP_QtyActReceived= inventTransferLine.YIP_getQtyReceivedSection();
        }
        else
        {
            inventTransferLine.QtyReceiveNow    = this.QtyReceive;
            inventTransferLine.YIP_QtyActReceived += this.QtyReceive;
        }
        inventTransferLine.doUpdate();

        inventTransferMultiReceive  = InventTransferMultiReceive::construct();
        parmId                      = runBaseMultiParm::getSysParmId();
        inventTransferParmTable.clear();
        inventTransferParmTable.initValue();
        inventTransferParmTable.ParmId          = parmId;
        inventTransferParmTable.TransferId      = this.TransferId;
        inventTransferParmTable.UpdateType      = InventTransferUpdateType::Receive;
        inventTransferParmTable.ReceiveUpdateQty= InventTransferReceiveUpdateQty::ReceiveNow;
        inventTransferParmTable.EditLines       = true;
        inventTransferParmTable.ExplodeLines    = true;
        inventTransferParmTable.UpdatedBy       = emplTable::userId2EmplId(curUserId());
        inventTransferParmTable.YIP_RefInventTransId    = inventTransferLine.InventTransIdReceive;
        //inventTransferParmTable.AutoReceiveQty  = NoYes::No;
        inventTransferParmTable.insert();

        //Receive
        inventTransferMultiReceive.runUpdate(inventTransferParmTable);

        if (lastReceDetails.RecId == 1)
        {
            qtyLoss = inventTransferLine.YIP_getQtyReceivedSection() - inventTransferLine.YIP_getQtyShippedSection();
            if (qtyLoss)
            {
                // update loss rate
                inventJournalTable = this.createPLInventJournalTrans(true);
                inventTransferLineUpd = this.inventTransferLine(true);
                if (inventTransferLineUpd)
                {
                    inventTransferLineUpd.YIP_LossRate  = (- qtyLoss / inventTransferLineUpd.YIP_QtyDelivery) * fixRate;
                    inventTransferLineUpd.YIP_LossProfitJournal = inventJournalTable.JournalId;
                    inventTransferLineUpd.doUpdate();
                }
            }
        }
        // update section details status
        table = YIP_InventTransferSectionDetails::findRecId(this.RecId, true);
        if (table)
        {
            select firstonly inventTransferJour
                where inventTransferJour.YIP_ParmId == inventTransferParmTable.ParmId;
            if (inventTransferJour)
            {
                table.TransferStatus    = InventTransferStatus::Received;
                table.VoucherId         = inventTransferJour.VoucherId;
                table.RemainStatus      = InventTransferRemainStatus::None;
                table.LossRate          = (table.QtyDelivery - table.QtyReceive) / table.QtyDelivery * fixRate;
                table.write();
            }
            if (lastReceDetails.RecId == 1)
            {
                update_recordset updateRemainStatus
                    setting RemainStatus = InventTransferRemainStatus::None
                    where updateRemainStatus.InventTransId  == this.InventTransId &&
                          updateRemainStatus.RemainStatus   != InventTransferRemainStatus::None;
            }
        }

        ttscommit;
    }
    catch
    {
        ret = false;
        ttsabort;
        errorMsg = aifUtil::getClrErrorMessage();
        if (errorMsg)
            error(errorMsg);
        error("catch exception.");
    }

    return ret;
}



转载于:https://my.oschina.net/fandyx/blog/362627

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值