close

1. 建立一個全新的 CLASS 而且 overrides TradeOrderLineRegister


public class DSalesReturnOrderLineregister extends TradeOrderLineRegister
{
    ReturnDispositionCodeId returnDispositionCodeId;
    DialogField             dialogDispositionCodeId;
    SalesLine               salesLine;

    boolean             reverseInventTrans;
    boolean             recreateReservationLine;
    boolean             inRegistration;

    #DEFINE.CurrentVersion(1)
        #LOCALMACRO.CurrentList
            returnDispositionCodeId
        #ENDMACRO
}

2. 把相關的methods 都加到CLASS 內

public boolean init()
{
    boolean ret;

    ret = super();

    salesLine = salesPurchLine;

    return ret;
}

/// <summary>
/// Contains the code that does the actual job of the class.
/// </summary>
public void run()
{
    this.runPreSuper();
    super();
    this.runPostSuper();
}

public void runPostSuper()
{
    salesLine = SalesLine::findInventTransId(salesLine.InventTransId, true);

    if (inRegistration)
    {
        if (salesLine.ReturnStatus == ReturnStatusLine::Awaiting)
        {   //The registration form was closed without register anything.

            if (reverseInventTrans
                && !salesLine.ReturnAllowReservation)
            {
                SalesLine::changeReturnOrderType(salesLine.InventTransId, null, true);
                salesLine = SalesLine::findInventTransId(salesLine.InventTransId, true);
            }

            if (salesLine.ReturnDispositionCodeId)
            {
                salesLine.ReturnDispositionCodeId = '';
                salesLine.update();
            }
        }
    }
    else
    {
        if (salesLine.ReturnStatus == ReturnStatusLine::Registered)
        {   //The registration form was closed without cancel anything.
            if (recreateReservationLine)
            {
                salesLine.createReturnReservationLine();
                salesLine = SalesLine::findInventTransId(salesLine.InventTransId, true);
            }
        }

    }
}

/// <summary>
/// Contains logic to be executed before the call to the <c>super</c> class in the <c>run</c> method
/// </summary>
public void runPreSuper()
{
    InventTransOriginId salesLineInventTransOriginId;
    InventTransOriginId reservationLineInventTransOriginId;
    SalesLine           reservationLine;

    if (salesLine.ReturnStatus == ReturnStatusLine::Awaiting)
    {
        inRegistration = true;

        if (!salesLine.ReturnAllowReservation
            &&  salesPurchLine.isStocked())
        {
            SalesLine::changeReturnOrderType(salesLine.InventTransId);
            salesLine = SalesLine::findInventTransId(salesLine.InventTransId, true);
            reverseInventTrans = true;
        }

        salesLine.ReturnDispositionCodeId = returnDispositionCodeId;
        salesLine.update();

        //Resetting the args.record() in order to ensure the disposition code is passed to the later update process.
        args.record().data(salesLine);
    }
    else
    if (salesLine.ReturnStatus == ReturnStatusLine::Registered)
    {

        select forupdate firstonly reservationLine where reservationLine.InventRefTransId == salesLine.InventTransId;
        if (reservationLine
            || salesLine.qtyMarked())
        {
            if ((salesLine.returnDispositionCode().DispositionAction == DispositionAction::ReplaceScrap
                || salesLine.returnDispositionCode().DispositionAction == DispositionAction::ReturnToCust
                || salesLine.returnDispositionCode().DispositionAction == DispositionAction::Scrap))
            {
                if (reservationLine.SalesQty == reservationLine.RemainSalesPhysical)
                {
                    reservationLineInventTransOriginId = InventTransOriginSalesLine::findInventTransOriginId(reservationLine.DataAreaId, reservationLine.InventTransId);
                    salesLineInventTransOriginId       = InventTransOriginSalesLine::findInventTransOriginId(salesLine.DataAreaId, salesLine.InventTransId);
                    InventTransOrigin::deleteMarking(salesLineInventTransOriginId, reservationLineInventTransOriginId, -salesLine.QtyOrdered);
                    reservationLine.delete();
                    recreateReservationLine = true;
                }
            }
            else
            {
                throw error("@SYS332911");
            }
        }
    }
}

/// <summary>
///     Validates the dialog input.
/// </summary>
/// <param name="calledFrom">
///     An object type.
/// </param>
/// <returns>
///     true if appropriate values are entered to the dialog; otherwise, false.
/// </returns>
public boolean validate(Object calledFrom = null)
{
    boolean ret;

    ret = super(calledFrom);

    if (ret && !returnDispositionCodeId)
    {
        return checkFailed(strfmt("@SYS332910"));
    }

    return ret;
}

static DSalesReturnOrderLineregister construct()
{
    return new DSalesReturnOrderLineregister();
}

3. 在自己原本的程式中加入以下method 用來 return order registration

public void  returnOrderRegistrationProcess()
{
TradeOrderLineRegister                      tradeOrderlineRegister;
DSalesReturnOrderLineRegister         salesReturnOrderLineRegister;
InventTransWMS_Register                 inventTransWMS_register;
TmpInventTransWMS                         TmpInventTransWMS;
SalesLine                                             salesLine;

Args                                    args = new Args();

select forUpdate salesLine
                        where salesLine.SalesId == "sales Id"
                        && salesLine.LineNum == "line number";

args.record(salesLine);

tradeOrderLineRegister =DSNSalesReturnOrderLineRegister::construct();
tradeOrderLineRegister.parmArgs(args);
tradeOrderLineRegister.init();
salesReturnOrderLineRegister = tradeOrderLineRegister;
salesReturnOrderLineRegister.runPreSuper();

//update returnDisposioncode
salesLine.ReturnDispositionCodeId = "your disposion code";
salesLine.update();

select firstOnly crossCompany inventTrans
                        join RecId,InventTransId from inventTransOrigin
                            where inventTransOrigin.InventTransId == salesLine.InventTransId
                            && inventTrans.InventTransOrigin == inventTransOrigin.RecId;

                    inventTransWMS_register = inventTransWMS_register::newStandard(tmpInventTransWMS);
                    tmpInventTransWMS.clear();
                    tmpInventTransWMS.initFromInventTrans(inventTrans);
                    tmpInventTransWMS.InventDimId = inventTrans.InventDimId;
                    tmpInventTransWMS.insert();
                    inventTransWMS_register.writeTmpInventTransWMS(tmpInventTransWMS,
                                                                        inventTrans,
                                                                        inventTrans.inventDim());
                    inventTransWMS_register.updateInvent(salesLine); 
}

arrow
arrow

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