Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        /// <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
        }