/** * 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); }
/// <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 }
/** * 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()); }
/// <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); }
/** * 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); }