public MVAMFGMWrkOdrTrnsctionLine(Ctx ctx, int VAMFG_M_WrkOdrTrnsctionLine_ID, Trx trx)
            : base(ctx, VAMFG_M_WrkOdrTrnsctionLine_ID, trx)
        {
            //base(ctx, M_WorkOrderTransactionLine_ID, trx);

            MVAMFGMWrkOdrTransaction wot = new MVAMFGMWrkOdrTransaction(ctx, GetVAMFG_M_WrkOdrTransaction_ID(), trx);

            SetClientOrg(wot);

            //  New
            if (VAMFG_M_WrkOdrTrnsctionLine_ID == 0)
            {
                base.SetProcessed(false);
            }
        }
        }       //	addDescription

        /// <summary>
        /// Before Delete
        ///</summary>
        /// <returns> true of it can be deleted</returns>
        protected override Boolean BeforeDelete()
        {
            MVAMFGMWrkOdrTransaction workOrderTxn = new MVAMFGMWrkOdrTransaction(GetCtx(), GetVAMFG_M_WrkOdrTransaction_ID(), Get_TrxName());

            if (workOrderTxn.IsProcessed())
            {
                return(false);
            }

            if (IsProcessed())
            {
                return(false);
            }

            return(true);
        }       //	beforeDelete
        protected override Boolean AfterDelete(bool success)
        {
            Tuple <String, String, String> mInfo = null;

            if (Env.HasModulePrefix("GOM01_", out mInfo))
            {
                string  qry = "SELECT SUM(GOM01_ActualQuantity) FROM VAMFG_M_WrkOdrTrnsctionLine WHERE VAMFG_M_WrkOdrTransaction_ID = " + GetVAMFG_M_WrkOdrTransaction_ID();
                decimal qty = VAdvantage.Utility.Util.GetValueOfDecimal(DB.ExecuteScalar(qry, null, Get_TrxName()));
                MVAMFGMWrkOdrTransaction wrk = new MVAMFGMWrkOdrTransaction(GetCtx(), GetVAMFG_M_WrkOdrTransaction_ID(), Get_TrxName());
                wrk.SetGOM01_ActualQuantity(qty);
                if (!wrk.Save())
                {
                    //Error
                    log.SaveError("Error", Msg.Translate(GetCtx(), "Error while saving Production Execution"));
                    return(false);
                }
            }
            return(true);
        }
        }       //	setM_Product_ID

        /// <summary>
        /// This sets the required (not null) columns besides the ones that are standard across all POs.
        /// </summary>
        ///  <param name="workOrderTransactionID">workOrderTransactionID</param>
        ///  <param name="productID">productID</param>
        /// <param name="uomID"> qty</param>
        /// <param name="qty"></param>
        /// <param name="operationID"></param>
        /// <param name="basisType"></param>
        public void SetRequiredColumns(int workOrderTransactionID, int productID, int AttributeSet_ID, int uomID, Decimal qty, int operationID, String basisType)
        {
            SetVAMFG_M_WrkOdrTransaction_ID(workOrderTransactionID);

            if (uomID > 0)
            {
                SetM_Product_ID(productID);
                // set Attributeset Instance ID also on work order transaction line
                // added by vivek on 16/12/2017 assigned by pradeep
                SetM_AttributeSetInstance_ID(AttributeSet_ID);
                SetC_UOM_ID(uomID);
            }
            else
            {
                SetM_Product_ID(productID, true);
                // set Attributeset Instance ID also on work order transaction line
                // added by vivek on 16/12/2017 assigned by pradeep
                SetM_AttributeSetInstance_ID(AttributeSet_ID);
            }
            //setQtyEntered(qty.setScale(MUOM.GetPrecision(GetCtx(), GetC_UOM_ID()), BigDecimal.ROUND_HALF_UP));
            SetVAMFG_QtyEntered(Decimal.Round((qty), VAdvantage.Model.MUOM.GetPrecision(GetCtx(), GetC_UOM_ID())));
            SetVAMFG_M_WorkOrderOperation_ID(operationID);
            SetBasisType(basisType);
            // set BP details while creating component Txn lines  added by vivek on 04/01/2018
            MVAMFGMWrkOdrTransaction wot = new MVAMFGMWrkOdrTransaction(GetCtx(), workOrderTransactionID, Get_TrxName());

            SetC_BPartner_ID(wot.GetC_BPartner_ID());
            SetC_BPartner_Location_ID(wot.GetC_BPartner_Location_ID());
            SetAD_User_ID(wot.GetAD_User_ID());

            VAdvantage.Model.MRole role = VAdvantage.Model.MRole.GetDefault(GetCtx(), false);
            String sql = "SELECT COALESCE(MAX(VAMFG_Line),0)+10 AS DefaultValue FROM VAMFG_M_WrkOdrTrnsctionLine WHERE VAMFG_M_WrkOdrTransaction_ID=@param1";

            sql = role.AddAccessSQL(sql, "VAMFG_M_WrkOdrTrnsctionLine", VAdvantage.Model.MRole.SQL_NOTQUALIFIED, VAdvantage.Model.MRole.SQL_RO);
            //PreparedStatement pstmt = DB.prepareStatement(sql, (Trx) null);
            //ResultSet rs = null;
            SqlParameter[] param = null;
            IDataReader    idr   = null;
            DataTable      dt    = new DataTable();

            try
            {
                param    = new SqlParameter[1];
                param[0] = new SqlParameter("@param1", workOrderTransactionID);
                idr      = DB.ExecuteReader(sql, param, null);
                if (idr.Read())
                {
                    SetVAMFG_Line(VAdvantage.Utility.Util.GetValueOfInt(idr[0]));
                }
                if (idr != null)
                {
                    idr.Close();
                    idr = null;
                }
                //pstmt.setInt(1, workOrderTransactionID);
                //rs = pstmt.executeQuery();

                //if (rs.next())
                //{
                //    setLine(rs.getInt(1));
                //}
                //rs.close();
                //pstmt.close();
            }
            catch
            {
                if (idr != null)
                {
                    idr.Close();
                    idr = null;
                }
                log.Log(Level.SEVERE, sql);
            }
        } // setRequiredColumns
        }       //	beforeDelete

        /// <summary>
        /// Is used to save record pn production execution line
        /// </summary>
        /// <param name="newRecord">newRecord</param>
        /// <returns>TRUE if success</returns>
        protected override Boolean BeforeSave(bool newRecord)
        {
            if (GetVAMFG_Line() < 0)
            {
                log.SaveError("Error", Msg.ParseTranslation(GetCtx(), "@Line@ < 0"));
                return(false);
            }

            MVAMFGMWrkOdrTransaction wot = new MVAMFGMWrkOdrTransaction(GetCtx(), GetVAMFG_M_WrkOdrTransaction_ID(), Get_TrxName());
            string _sql = "Select Sum(GOM01_ActualQuantity) as QtyEntered From VAMFG_M_WrkOdrTrnsctionLine Where VAMFG_M_WrkOdrTransaction_ID=" + GetVAMFG_M_WrkOdrTransaction_ID() + " AND M_Product_ID=" + GetM_Product_ID() + ""
                          + " AND M_AttributeSetInstance_ID=" + GetM_AttributeSetInstance_ID();
            decimal Qty = Util.GetValueOfDecimal(DB.ExecuteScalar(_sql));

            if (Qty > 0)
            {
                Qty = Qty + GetGOM01_ActualQuantity();
                string qry = "SELECT currentqty FROM M_Transaction WHERE M_Transaction_ID = (SELECT MAX(M_Transaction_ID)   FROM M_Transaction  WHERE movementdate = " +
                             " (SELECT MAX(movementdate) FROM M_Transaction WHERE movementdate <= " + GlobalVariable.TO_DATE(wot.GetVAMFG_DateTrx(), true) + " AND  M_Product_ID = " + GetM_Product_ID() + " AND M_Locator_ID = " + GetM_Locator_ID() +
                             " AND M_AttributeSetInstance_ID = " + GetM_AttributeSetInstance_ID() + ") AND  M_Product_ID = " + GetM_Product_ID() + " AND M_Locator_ID = " + GetM_Locator_ID() +
                             " AND M_AttributeSetInstance_ID = " + GetM_AttributeSetInstance_ID() + ") AND AD_Org_ID = " + GetAD_Org_ID() + " AND  M_Product_ID = " + GetM_Product_ID() +
                             " AND M_Locator_ID = " + GetM_Locator_ID() + " AND M_AttributeSetInstance_ID = " + GetM_AttributeSetInstance_ID();
                decimal CurrentQty = VAdvantage.Utility.Util.GetValueOfDecimal(DB.ExecuteScalar(qry));
                if (CurrentQty < Qty)
                {
                    log.SaveError("Error", Msg.Translate(GetCtx(), "Insufficient qty in warehouse for the product"));
                    return(false);
                }
            }

            // get current cost from product cost on new record and when product changed
            // currency conversion also required if order has different currency with base currency
            if ((newRecord || (Is_ValueChanged("M_Product_ID"))) && GetM_Product_ID() > 0)
            {
                decimal currentcostprice = MCost.GetproductCosts(GetAD_Client_ID(), GetAD_Org_ID(), GetM_Product_ID(), VAdvantage.Utility.Util.GetValueOfInt(GetM_AttributeSetInstance_ID()), Get_TrxName());
                decimal currentQty       = GetCurrentQtyFromMCost(GetAD_Client_ID(), GetAD_Org_ID(), GetM_Product_ID(), VAdvantage.Utility.Util.GetValueOfInt(GetM_AttributeSetInstance_ID()), Get_TrxName());
                bool    isGomel          = Env.IsModuleInstalled("GOM01_");
                //MVAMFGMWrkOdrTransaction wot = new MVAMFGMWrkOdrTransaction(GetCtx(), GetVAMFG_M_WrkOdrTransaction_ID(), Get_TrxName());
                if (wot.GetVAMFG_Description() != null && wot.GetVAMFG_Description().Contains("{->"))
                {
                    // not to set cuurent cost price on reversal because its already filed during creation of line
                }
                else if (isGomel && Get_ColumnIndex("GOM01_ActualQuantity") > 0 && GetGOM01_ActualQuantity() <= currentQty)
                {
                    SetCurrentCostPrice(currentcostprice);
                }
                else if (!isGomel) // if gomel module is not available, then update currenct cost price on save
                {
                    SetCurrentCostPrice(currentcostprice);
                }
            }

            if (Is_ValueChanged("VAMFG_QtyEntered"))
            {
                //BigDecimal qtyEntered = GetVAMFG_QtyEntered().setScale(MUOM.getPrecision(getCtx(), getC_UOM_ID()), BigDecimal.ROUND_HALF_UP);
                Decimal qtyEntered = Decimal.Round((GetVAMFG_QtyEntered()), VAdvantage.Model.MUOM.GetPrecision(GetCtx(), GetC_UOM_ID()));
                if (qtyEntered.CompareTo(GetVAMFG_QtyEntered()) != 0)
                {
                    log.Fine("Corrected QtyEntered Scale UOM=" + GetC_UOM_ID()
                             + "; QtyEntered =" + GetVAMFG_QtyEntered() + "->" + qtyEntered);
                    SetVAMFG_QtyEntered(qtyEntered);
                }
            }

            return(true);
        }