/// <summary> /// Load Invoice Line /// </summary> /// <param name="invoice">invoice</param> /// <returns>DocLine Array</returns> private DocLine[] LoadLines(MInvoice invoice) { List <DocLine> list = new List <DocLine>(); // MInvoiceLine[] lines = invoice.GetLines(false); for (int i = 0; i < lines.Length; i++) { MInvoiceLine line = lines[i]; if (line.IsDescription()) { continue; } DocLine docLine = new DocLine(line, this); // Qty Decimal Qty = line.GetQtyInvoiced(); bool cm = GetDocumentType().Equals(MDocBaseType.DOCBASETYPE_ARCREDITMEMO) || GetDocumentType().Equals(MDocBaseType.DOCBASETYPE_APCREDITMEMO); docLine.SetQty(cm ? Decimal.Negate(Qty) : Qty, invoice.IsSOTrx()); // Decimal LineNetAmt = line.GetLineNetAmt(); Decimal PriceList = line.GetPriceList(); int C_Tax_ID = docLine.GetC_Tax_ID(); // Correct included Tax if (IsTaxIncluded() && C_Tax_ID != 0) { MTax tax = MTax.Get(GetCtx(), C_Tax_ID); if (!tax.IsZeroTax()) { Decimal LineNetAmtTax = tax.CalculateTax(LineNetAmt, true, GetStdPercision()); log.Fine("LineNetAmt=" + LineNetAmt + " - Tax=" + LineNetAmtTax); LineNetAmt = Decimal.Subtract(LineNetAmt, LineNetAmtTax); for (int t = 0; t < _taxes.Length; t++) { if (_taxes[t].GetC_Tax_ID() == C_Tax_ID) { _taxes[t].AddIncludedTax(LineNetAmtTax); break; } } Decimal PriceListTax = tax.CalculateTax(PriceList, true, GetStdPercision()); PriceList = Decimal.Subtract(PriceList, PriceListTax); } } // correct included Tax docLine.SetAmount(LineNetAmt, PriceList, Qty); // qty for discount calc if (docLine.IsItem()) { _allLinesService = false; } else { _allLinesItem = false; } // log.Fine(docLine.ToString()); list.Add(docLine); } // Convert to Array DocLine[] dls = new DocLine[list.Count]; dls = list.ToArray(); // Included Tax - make sure that no difference if (IsTaxIncluded()) { for (int i = 0; i < _taxes.Length; i++) { if (_taxes[i].IsIncludedTaxDifference()) { Decimal diff = _taxes[i].GetIncludedTaxDifference(); for (int j = 0; j < dls.Length; j++) { if (dls[j].GetC_Tax_ID() == _taxes[i].GetC_Tax_ID()) { dls[j].SetLineNetAmtDifference(diff); break; } } // for all lines } // tax difference } // for all taxes } // Included Tax difference // Return Array return(dls); }
/// <summary> /// Get Commitments /// </summary> /// <param name="doc">document</param> /// <param name="maxQty">Qty invoiced/matched</param> /// <param name="C_InvoiceLine_ID">invoice line</param> /// <returns>commitments (order lines)</returns> protected static DocLine[] GetCommitments(Doc doc, Decimal maxQty, int C_InvoiceLine_ID) { int precision = -1; // List <DocLine> list = new List <DocLine>(); String sql = "SELECT * FROM C_OrderLine ol " + "WHERE EXISTS " + "(SELECT * FROM C_InvoiceLine il " + "WHERE il.C_OrderLine_ID=ol.C_OrderLine_ID" + " AND il.C_InvoiceLine_ID=" + C_InvoiceLine_ID + ")" + " OR EXISTS " + "(SELECT * FROM M_MatchPO po " + "WHERE po.C_OrderLine_ID=ol.C_OrderLine_ID" + " AND po.C_InvoiceLine_ID=" + C_InvoiceLine_ID + ")"; IDataReader idr = null; try { idr = DataBase.DB.ExecuteReader(sql, null, null); while (idr.Read()) { if (Env.Signum(maxQty) == 0) { continue; } MOrderLine line = new MOrderLine(doc.GetCtx(), idr, null); DocLine docLine = new DocLine(line, doc); // Currency if (precision == -1) { doc.SetC_Currency_ID(docLine.GetC_Currency_ID()); precision = MCurrency.GetStdPrecision(doc.GetCtx(), docLine.GetC_Currency_ID()); } // Qty Decimal Qty = Math.Max(line.GetQtyOrdered(), maxQty); docLine.SetQty(Qty, false); // Decimal PriceActual = line.GetPriceActual(); Decimal PriceCost = line.GetPriceCost(); Decimal?LineNetAmt = null; if (Env.Signum(PriceCost) != 0) { LineNetAmt = Decimal.Multiply(Qty, PriceCost); } else if (Qty.Equals(maxQty)) { LineNetAmt = line.GetLineNetAmt(); } else { LineNetAmt = Decimal.Multiply(Qty, PriceActual); } maxQty = Decimal.Subtract(maxQty, Qty); docLine.SetAmount(LineNetAmt); // DR Decimal PriceList = line.GetPriceList(); int C_Tax_ID = docLine.GetC_Tax_ID(); // Correct included Tax if (C_Tax_ID != 0 && line.GetParent().IsTaxIncluded()) { MTax tax = MTax.Get(doc.GetCtx(), C_Tax_ID); if (!tax.IsZeroTax()) { Decimal LineNetAmtTax = tax.CalculateTax(LineNetAmt.Value, true, precision); _log.Fine("LineNetAmt=" + LineNetAmt + " - Tax=" + LineNetAmtTax); LineNetAmt = Decimal.Subtract(LineNetAmt.Value, LineNetAmtTax); Decimal PriceListTax = tax.CalculateTax(PriceList, true, precision); PriceList = Decimal.Subtract(PriceList, PriceListTax); } } // correct included Tax docLine.SetAmount(LineNetAmt, PriceList, Qty); list.Add(docLine); } idr.Close(); } catch (Exception e) { if (idr != null) { idr.Close(); idr = null; } _log.Log(Level.SEVERE, sql, e); } // Return Array DocLine[] dl = new DocLine[list.Count]; dl = list.ToArray(); return(dl); }
/// <summary> /// Load Invoice Line /// </summary> /// <param name="order">order</param> /// <returns>DocLine Array</returns> private DocLine[] LoadLines(MOrder order) { List <DocLine> list = new List <DocLine>(); MOrderLine[] lines = order.GetLines(); for (int i = 0; i < lines.Length; i++) { MOrderLine line = lines[i]; DocLine docLine = new DocLine(line, this); Decimal Qty = line.GetQtyOrdered(); docLine.SetQty(Qty, order.IsSOTrx()); // // Decimal PriceActual = line.getPriceActual(); Decimal?PriceCost = null; if (GetDocumentType().Equals(MDocBaseType.DOCBASETYPE_PURCHASEORDER)) // PO { PriceCost = line.GetPriceCost(); } Decimal?LineNetAmt = null; if (PriceCost != null && Env.Signum(PriceCost.Value) != 0) { LineNetAmt = Decimal.Multiply(Qty, PriceCost.Value); } else { LineNetAmt = line.GetLineNetAmt(); } docLine.SetAmount(LineNetAmt); // DR Decimal PriceList = line.GetPriceList(); int C_Tax_ID = docLine.GetC_Tax_ID(); // Correct included Tax if (IsTaxIncluded() && C_Tax_ID != 0) { MTax tax = MTax.Get(GetCtx(), C_Tax_ID); if (!tax.IsZeroTax()) { Decimal LineNetAmtTax = tax.CalculateTax(LineNetAmt.Value, true, GetStdPrecision()); log.Fine("LineNetAmt=" + LineNetAmt + " - Tax=" + LineNetAmtTax); LineNetAmt = Decimal.Subtract(LineNetAmt.Value, LineNetAmtTax); for (int t = 0; t < _taxes.Length; t++) { if (_taxes[t].GetC_Tax_ID() == C_Tax_ID) { _taxes[t].AddIncludedTax(LineNetAmtTax); break; } } Decimal PriceListTax = tax.CalculateTax(PriceList, true, GetStdPrecision()); PriceList = Decimal.Subtract(PriceList, PriceListTax); } } // correct included Tax docLine.SetAmount(LineNetAmt, PriceList, Qty); list.Add(docLine); } // Return Array DocLine[] dl = new DocLine[list.Count]; dl = list.ToArray(); return(dl); }
/// <summary> /// Set Document Info /// </summary> /// <param name="doc">document</param> /// <param name="docLine">doc line</param> public void SetDocumentInfo(Doc doc, DocLine docLine) { _doc = doc; _docLine = docLine; // reset SetAD_Org_ID(0); SetC_SalesRegion_ID(0); // Client if (GetAD_Client_ID() == 0) { SetAD_Client_ID(_doc.GetAD_Client_ID()); } // Date Trx SetDateTrx(_doc.GetDateDoc()); if (_docLine != null && _docLine.GetDateDoc() != null) { SetDateTrx(_docLine.GetDateDoc()); } // Date Acct SetDateAcct(_doc.GetDateAcct()); if (_docLine != null && _docLine.GetDateAcct() != null) { SetDateAcct(_docLine.GetDateAcct()); } // Period, Tax if (_docLine != null && _docLine.GetC_Period_ID() != 0) { SetC_Period_ID(_docLine.GetC_Period_ID()); } else { SetC_Period_ID(_doc.GetC_Period_ID()); } if (_docLine != null) { SetC_Tax_ID(_docLine.GetC_Tax_ID()); } // Description StringBuilder description = new StringBuilder(_doc.GetDocumentNo()); if (_docLine != null) { description.Append(" #").Append(_docLine.GetLine()); if (_docLine.GetDescription() != null) { description.Append(" (").Append(_docLine.GetDescription()).Append(")"); } else if (_doc.GetDescription() != null && _doc.GetDescription().Length > 0) { description.Append(" (").Append(_doc.GetDescription()).Append(")"); } } else if (_doc.GetDescription() != null && _doc.GetDescription().Length > 0) { description.Append(" (").Append(_doc.GetDescription()).Append(")"); } SetDescription(description.ToString()); // Journal Info SetGL_Budget_ID(_doc.GetGL_Budget_ID()); SetGL_Category_ID(_doc.GetGL_Category_ID()); // Product if (_docLine != null) { SetM_Product_ID(_docLine.GetM_Product_ID()); } if (GetM_Product_ID() == 0) { SetM_Product_ID(_doc.GetM_Product_ID()); } // UOM if (_docLine != null) { SetC_UOM_ID(_docLine.GetC_UOM_ID()); } // Qty if (Get_Value("Qty") == null) // not previously set { SetQty(_doc.GetQty()); // neg = outgoing if (_docLine != null) { SetQty(_docLine.GetQty()); } } // Loc From (maybe set earlier) if (GetC_LocFrom_ID() == 0 && _docLine != null) { SetC_LocFrom_ID(_docLine.GetC_LocFrom_ID()); } if (GetC_LocFrom_ID() == 0) { SetC_LocFrom_ID(_doc.GetC_LocFrom_ID()); } // Loc To (maybe set earlier) if (GetC_LocTo_ID() == 0 && _docLine != null) { SetC_LocTo_ID(_docLine.GetC_LocTo_ID()); } if (GetC_LocTo_ID() == 0) { SetC_LocTo_ID(_doc.GetC_LocTo_ID()); } // BPartner if (_docLine != null) { SetC_BPartner_ID(_docLine.GetC_BPartner_ID()); } if (GetC_BPartner_ID() == 0) { SetC_BPartner_ID(_doc.GetC_BPartner_ID()); } // Sales Region from BPLocation/Sales Rep // Trx Org if (_docLine != null) { SetAD_OrgTrx_ID(_docLine.GetAD_OrgTrx_ID()); } if (GetAD_OrgTrx_ID() == 0) { SetAD_OrgTrx_ID(_doc.GetAD_OrgTrx_ID()); } // Project if (_docLine != null) { SetC_Project_ID(_docLine.GetC_Project_ID()); } if (GetC_Project_ID() == 0) { SetC_Project_ID(_doc.GetC_Project_ID()); } // Campaign if (_docLine != null) { SetC_Campaign_ID(_docLine.GetC_Campaign_ID()); } if (GetC_Campaign_ID() == 0) { SetC_Campaign_ID(_doc.GetC_Campaign_ID()); } // Activity if (_docLine != null) { SetC_Activity_ID(_docLine.GetC_Activity_ID()); } if (GetC_Activity_ID() == 0) { SetC_Activity_ID(_doc.GetC_Activity_ID()); } // User List 1 if (_docLine != null) { SetUser1_ID(_docLine.GetUser1_ID()); } if (GetUser1_ID() == 0) { SetUser1_ID(_doc.GetUser1_ID()); } // User List 2 if (_docLine != null) { SetUser2_ID(_docLine.GetUser2_ID()); } if (GetUser2_ID() == 0) { SetUser2_ID(_doc.GetUser2_ID()); } // References in setAccount }