Beispiel #1
0
 /**
  *  After Delete
  *	@param success success
  *	@return success
  */
 protected override bool AfterDelete(bool success)
 {
     if (success)
     {
         //	Get Order and decrease invoices
         MInvoiceLine iLine          = new MInvoiceLine(GetCtx(), GetC_InvoiceLine_ID(), Get_TrxName());
         int          C_OrderLine_ID = iLine.GetC_OrderLine_ID();
         if (C_OrderLine_ID == 0)
         {
             MInOutLine ioLine = new MInOutLine(GetCtx(), GetM_InOutLine_ID(), Get_TrxName());
             C_OrderLine_ID = ioLine.GetC_OrderLine_ID();
         }
         //	No Order Found
         if (C_OrderLine_ID == 0)
         {
             return(success);
         }
         //	Find MatchPO
         MMatchPO[] mPO = MMatchPO.Get(GetCtx(), C_OrderLine_ID, GetC_InvoiceLine_ID(), Get_TrxName());
         for (int i = 0; i < mPO.Length; i++)
         {
             if (mPO[i].GetM_InOutLine_ID() == 0)
             {
                 mPO[i].Delete(true);
             }
             else
             {
                 mPO[i].SetC_InvoiceLine_ID(null);
                 mPO[i].Save();
             }
         }
     }
     return(success);
 }
Beispiel #2
0
 /// <summary>
 /// Invoice Line Constructor
 /// </summary>
 /// <param name="iLine">invoice line</param>
 /// <param name="dateTrx">optional date</param>
 /// <param name="qty">matched quantity</param>
 public MMatchPO(MInvoiceLine iLine, DateTime?dateTrx, Decimal qty)
     : this(iLine.GetCtx(), 0, iLine.Get_Trx())
 {
     SetClientOrg(iLine);
     SetC_InvoiceLine_ID(iLine);
     if (iLine.GetC_OrderLine_ID() != 0)
     {
         SetC_OrderLine_ID(iLine.GetC_OrderLine_ID());
     }
     if (dateTrx != null)
     {
         SetDateTrx(dateTrx);
     }
     SetM_Product_ID(iLine.GetM_Product_ID());
     SetM_AttributeSetInstance_ID(iLine.GetM_AttributeSetInstance_ID());
     SetQty(qty);
     SetProcessed(true);         //	auto
 }
Beispiel #3
0
        /**
         *  Set Invoice Line.
         *  Does not set Quantity!
         *	@param iLine invoice line
         *	@param M_Locator_ID locator
         *	@param Qty qty only fo find suitable locator
         */
        public void SetInvoiceLine(MInvoiceLine iLine, int M_Locator_ID, Decimal Qty)
        {
            SetC_OrderLine_ID(iLine.GetC_OrderLine_ID());
            SetLine(iLine.GetLine());
            SetC_UOM_ID(iLine.GetC_UOM_ID());
            int M_Product_ID = iLine.GetM_Product_ID();

            if (M_Product_ID == 0)
            {
                Set_ValueNoCheck("M_Product_ID", null);
                Set_ValueNoCheck("M_Locator_ID", null);
                Set_ValueNoCheck("M_AttributeSetInstance_ID", null);
            }
            else
            {
                SetM_Product_ID(M_Product_ID);
                SetM_AttributeSetInstance_ID(iLine.GetM_AttributeSetInstance_ID());
                if (M_Locator_ID == 0)
                {
                    SetM_Locator_ID(Qty);       //	requires warehouse, product, asi
                }
                else
                {
                    SetM_Locator_ID(M_Locator_ID);
                }
            }
            SetC_Charge_ID(iLine.GetC_Charge_ID());
            SetDescription(iLine.GetDescription());
            SetIsDescription(iLine.IsDescription());
            //
            SetC_Project_ID(iLine.GetC_Project_ID());
            SetC_ProjectPhase_ID(iLine.GetC_ProjectPhase_ID());
            SetC_ProjectTask_ID(iLine.GetC_ProjectTask_ID());
            SetC_Activity_ID(iLine.GetC_Activity_ID());
            SetC_Campaign_ID(iLine.GetC_Campaign_ID());
            SetAD_OrgTrx_ID(iLine.GetAD_OrgTrx_ID());
            SetUser1_ID(iLine.GetUser1_ID());
            SetUser2_ID(iLine.GetUser2_ID());
        }
Beispiel #4
0
        /// <summary>
        /// Before Save
        /// </summary>
        /// <param name="newRecord">new</param>
        /// <returns>true</returns>
        protected override bool BeforeSave(bool newRecord)
        {
            //	Set Trx Date
            if (GetDateTrx() == null)
            {
                SetDateTrx(DateTime.Now);
            }
            //	Set Acct Date
            if (GetDateAcct() == null)
            {
                DateTime?ts = GetNewerDateAcct();
                if (ts == null)
                {
                    ts = GetDateTrx();
                }
                SetDateAcct((DateTime?)ts);
            }
            //	Set ASI from Receipt
            if (GetM_AttributeSetInstance_ID() == 0 && GetM_InOutLine_ID() != 0)
            {
                MInOutLine iol = new MInOutLine(GetCtx(), GetM_InOutLine_ID(), Get_Trx());
                SetM_AttributeSetInstance_ID(iol.GetM_AttributeSetInstance_ID());
            }

            //	Find OrderLine
            if (GetC_OrderLine_ID() == 0)
            {
                MInvoiceLine il = null;
                if (GetC_InvoiceLine_ID() != 0)
                {
                    il = GetInvoiceLine();
                    if (il.GetC_OrderLine_ID() != 0)
                    {
                        SetC_OrderLine_ID(il.GetC_OrderLine_ID());
                    }
                }       //	get from invoice
                if (GetC_OrderLine_ID() == 0 && GetM_InOutLine_ID() != 0)
                {
                    MInOutLine iol = new MInOutLine(GetCtx(), GetM_InOutLine_ID(), Get_Trx());
                    if (iol.GetC_OrderLine_ID() != 0)
                    {
                        SetC_OrderLine_ID(iol.GetC_OrderLine_ID());
                        if (il != null)
                        {
                            il.SetC_OrderLine_ID(iol.GetC_OrderLine_ID());
                            il.Save();
                        }
                    }
                } //	get from shipment
            }     //	find order line

            //	Price Match Approval
            if (GetC_OrderLine_ID() != 0 &&
                GetC_InvoiceLine_ID() != 0 &&
                (newRecord ||
                 Is_ValueChanged("C_OrderLine_ID") || Is_ValueChanged("C_InvoiceLine_ID")))
            {
                Decimal poPrice    = GetOrderLine().GetPriceActual();
                Decimal invPrice   = GetInvoiceLine().GetPriceActual();
                Decimal difference = Decimal.Subtract(poPrice, invPrice);
                if (Math.Sign(difference) != 0)
                {
                    difference = Decimal.Multiply(difference, GetQty());
                    SetPriceMatchDifference(difference);
                    //	Approval
                    //MBPGroup group = MBPGroup.getOfBPartner(GetCtx(), GetOrderLine().GetC_BPartner_ID());
                    Decimal mt = 0; //group.getPriceMatchTolerance();
                    if (Math.Sign(mt) != 0)
                    {
                        Decimal poAmt        = Decimal.Multiply(poPrice, GetQty());
                        Decimal maxTolerance = Decimal.Multiply(poAmt, mt);
                        //maxTolerance = Math.Abs(maxTolerance)
                        //    .divide(Env.ONEHUNDRED, 2, Decimal.ROUND_HALF_UP);
                        maxTolerance = Decimal.Divide(Math.Abs(maxTolerance), Env.ONEHUNDRED);
                        difference   = Math.Abs(difference);
                        bool ok = difference.CompareTo(maxTolerance) <= 0;
                        //log.config("Difference=" + GetPriceMatchDifference()
                        //    + ", Max=" + maxTolerance + " => " + ok);
                        SetIsApproved(ok);
                    }
                }
                else
                {
                    SetPriceMatchDifference(difference);
                    SetIsApproved(true);
                }
            }

            return(true);
        }
Beispiel #5
0
        /**
         *  Find/Create PO(Inv) Match
         *	@param iLine invoice line
         *	@param sLine receipt line
         *	@param dateTrx date
         *	@param qty qty
         *	@return Match Record
         */
        public static MMatchPO Create(MInvoiceLine iLine, MInOutLine sLine, DateTime?dateTrx, Decimal qty)
        {
            Trx trxName        = null;
            Ctx ctx            = null;
            int C_OrderLine_ID = 0;

            if (iLine != null)
            {
                trxName        = iLine.Get_Trx();
                ctx            = iLine.GetCtx();
                C_OrderLine_ID = iLine.GetC_OrderLine_ID();
            }
            if (sLine != null)
            {
                trxName        = sLine.Get_Trx();
                ctx            = sLine.GetCtx();
                C_OrderLine_ID = sLine.GetC_OrderLine_ID();
            }

            MMatchPO retValue = null;
            String   sql      = "SELECT * FROM M_MatchPO WHERE C_OrderLine_ID=" + C_OrderLine_ID;
            //		ArrayList list = new ArrayList();
            DataSet ds = null;

            try
            {
                ds = DataBase.DB.ExecuteDataset(sql, null, trxName);
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    MMatchPO mpo = new MMatchPO(ctx, dr, trxName);
                    if (qty.CompareTo(mpo.GetQty()) == 0)
                    {
                        if (iLine != null)
                        {
                            if (mpo.GetC_InvoiceLine_ID() == 0 ||
                                mpo.GetC_InvoiceLine_ID() == iLine.GetC_InvoiceLine_ID())
                            {
                                mpo.SetC_InvoiceLine_ID(iLine);
                                if (iLine.GetM_AttributeSetInstance_ID() != 0)
                                {
                                    if (mpo.GetM_AttributeSetInstance_ID() == 0)
                                    {
                                        mpo.SetM_AttributeSetInstance_ID(iLine.GetM_AttributeSetInstance_ID());
                                    }
                                    else if (mpo.GetM_AttributeSetInstance_ID() != iLine.GetM_AttributeSetInstance_ID())
                                    {
                                        continue;
                                    }
                                }
                            }
                            else
                            {
                                continue;
                            }
                        }
                        if (sLine != null)
                        {
                            if (mpo.GetM_InOutLine_ID() == 0 ||
                                mpo.GetM_InOutLine_ID() == sLine.GetM_InOutLine_ID())
                            {
                                mpo.SetM_InOutLine_ID(sLine.GetM_InOutLine_ID());
                                if (sLine.GetM_AttributeSetInstance_ID() != 0)
                                {
                                    if (mpo.GetM_AttributeSetInstance_ID() == 0)
                                    {
                                        mpo.SetM_AttributeSetInstance_ID(sLine.GetM_AttributeSetInstance_ID());
                                    }
                                    else if (mpo.GetM_AttributeSetInstance_ID() != sLine.GetM_AttributeSetInstance_ID())
                                    {
                                        continue;
                                    }
                                }
                            }
                            else
                            {
                                continue;
                            }
                        }
                        retValue = mpo;
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                s_log.Log(Level.SEVERE, sql, e);
            }
            //	Create New
            if (retValue == null)
            {
                if (sLine != null)
                {
                    retValue = new MMatchPO(sLine, dateTrx, qty);
                    if (iLine != null)
                    {
                        retValue.SetC_InvoiceLine_ID(iLine);
                    }
                }
                else if (iLine != null)
                {
                    retValue = new MMatchPO(iLine, dateTrx, qty);
                }
            }
            return(retValue);
        }