public void vRetornaValores(out System.Collections.ArrayList arlProdutoOrdem, out System.Collections.ArrayList arlProdutosPrecoUnitario, out System.Collections.ArrayList arlProdutosQuantidade)
        {
            if (!m_bDataLoaded)
            {
                bCarregaDados();
            }
            arlProdutoOrdem          = new System.Collections.ArrayList();
            arlProdutosPrecoUnitario = new System.Collections.ArrayList();
            arlProdutosQuantidade    = new System.Collections.ArrayList();

            // Calc Fatura
            if (m_sortLstProdutosFatura == null)
            {
                bCalculaProdutosFatura();
            }
            if (m_bFaturaOutput)
            {
                // Fatura
                for (int i = 0; i < m_sortLstProdutosFatura.Count; i++)
                {
                    clsProdutoData cls_DataProduct = (clsProdutoData)m_sortLstProdutosFatura.GetByIndex(i);
                    arlProdutoOrdem.Add(cls_DataProduct.IdOrdem);
                    arlProdutosPrecoUnitario.Add(cls_DataProduct.PrecoUnitario);
                    arlProdutosQuantidade.Add(cls_DataProduct.Quantidade);
                }
            }
            else
            {
                // Calc EXW
                if (m_sortLstProdutosEXW == null)
                {
                    bCalculaProdutosExw();
                }
                // Calc Retorno
                if (m_sortLstProdutosRetorno == null)
                {
                    bCalculaProdutosRetorno();
                }
                // Retorno
                for (int i = 0; i < m_sortLstProdutosRetorno.Count; i++)
                {
                    clsProdutoData cls_DataProduct = (clsProdutoData)m_sortLstProdutosRetorno.GetByIndex(i);
                    arlProdutoOrdem.Add(cls_DataProduct.IdOrdem);
                    arlProdutosPrecoUnitario.Add(cls_DataProduct.PrecoUnitario);
                    arlProdutosQuantidade.Add(cls_DataProduct.Quantidade);
                }
            }
        }
        private bool bCalculaProdutosExw()
        {
            bool   bRetorno  = false;
            double dSubTotal = 0;

            m_sortLstProdutosEXW = new System.Collections.SortedList();

            // Copiando os Produtos da Fatura Comercial
            for (int i = 0; i < m_sortLstProdutosFatura.Count; i++)
            {
                clsProdutoData cls_DataProduto = (clsProdutoData)m_sortLstProdutosFatura.GetByIndex(i);
                dSubTotal = System.Math.Round(dSubTotal + System.Math.Round(cls_DataProduto.PrecoUnitario * cls_DataProduto.Quantidade, 2), 2);
                m_sortLstProdutosEXW.Add(cls_DataProduto.IdOrdem, cls_DataProduto.Clone());
            }
            return(bRetorno);
        }
        public void vRetornaValores(int nIdOrdemProduto, out double dPrecoUnitario, out double dQuantidade)
        {
            dPrecoUnitario = 0;
            dQuantidade    = 0;

            if (!m_bDataLoaded)
            {
                bCarregaDados();
            }

            // Calc Fatura
            if (m_sortLstProdutosFatura == null)
            {
                bCalculaProdutosFatura();
            }
            if (m_bFaturaOutput)
            {
                // Fatura
                if (m_sortLstProdutosFatura.ContainsKey(nIdOrdemProduto))
                {
                    clsProdutoData cls_DataProduct = (clsProdutoData)m_sortLstProdutosFatura[nIdOrdemProduto];
                    dPrecoUnitario = cls_DataProduct.PrecoUnitario;
                    dQuantidade    = cls_DataProduct.Quantidade;
                }
            }
            else
            {
                // Calc EXW
                if (m_sortLstProdutosEXW == null)
                {
                    bCalculaProdutosExw();
                }
                // Calc Retorno
                if (m_sortLstProdutosRetorno == null)
                {
                    bCalculaProdutosRetorno();
                }
                // Retorno
                if (m_sortLstProdutosRetorno.ContainsKey(nIdOrdemProduto))
                {
                    clsProdutoData cls_DataProduct = (clsProdutoData)m_sortLstProdutosRetorno[nIdOrdemProduto];
                    dPrecoUnitario = cls_DataProduct.PrecoUnitario;
                    dQuantidade    = cls_DataProduct.Quantidade;
                }
            }
        }
        private bool bCalculaProdutosRetorno()
        {
            bool   bRetorno = false;
            double dSubTotal = 0, dValorTotalProdutosRestante = 0, dValorTotalProdutos = 0;

            m_sortLstProdutosRetorno = new System.Collections.SortedList();

            // Copiando os Produtos do EXW
            for (int i = 0; i < m_sortLstProdutosEXW.Count; i++)
            {
                clsProdutoData cls_DataProduto = (clsProdutoData)m_sortLstProdutosEXW.GetByIndex(i);
                dSubTotal = System.Math.Round(dSubTotal + System.Math.Round(cls_DataProduto.PrecoUnitario * cls_DataProduto.Quantidade, 2), 2);
                m_sortLstProdutosRetorno.Add(cls_DataProduto.IdOrdem, cls_DataProduto.Clone());
            }

            // Calculando o Valor Total
            switch (m_enumIncotermRetorno)
            {
            case mdlConstantes.Incoterm.EXW:
                dValorTotalProdutos = dSubTotal;
                break;

            case mdlConstantes.Incoterm.FCA:
            case mdlConstantes.Incoterm.FAS:
            case mdlConstantes.Incoterm.FOB:
                dValorTotalProdutos = dSubTotal + m_dFreteInterno + m_dOutros;
                break;

            case mdlConstantes.Incoterm.CFR:
            case mdlConstantes.Incoterm.CPT:
                dValorTotalProdutos = dSubTotal + m_dFreteInterno + m_dFreteInternacional;
                break;

            case mdlConstantes.Incoterm.CIF:
            case mdlConstantes.Incoterm.CIP:
                dValorTotalProdutos = dSubTotal + m_dFreteInterno + m_dFreteInternacional + m_dSeguro;
                break;

            case mdlConstantes.Incoterm.DAF:
            case mdlConstantes.Incoterm.DDP:
            case mdlConstantes.Incoterm.DDU:
            case mdlConstantes.Incoterm.DEQ:
            case mdlConstantes.Incoterm.DES:
                dValorTotalProdutos = dSubTotal + m_dFreteInterno + m_dFreteInternacional + m_dSeguro + m_dOutros;
                break;
            }
            if (!m_bRatiarDesconto)
            {
                dValorTotalProdutos = dValorTotalProdutos - m_dDesconto;
            }
            dValorTotalProdutosRestante = dValorTotalProdutos;

            // Inserindo os Produtos Principais
            double dPrecoUnitarioProduto = 0, dSubTotalProduto = 0;

            for (int nCont = 0; nCont < m_sortLstProdutosRetorno.Count; nCont++)
            {
                clsProdutoData cls_ProdutoData = (clsProdutoData)m_sortLstProdutosRetorno.GetByIndex(nCont);
                CalculaPrecoUnitario(cls_ProdutoData.PrecoUnitario, out dPrecoUnitarioProduto, cls_ProdutoData.Quantidade, dSubTotal, dValorTotalProdutos, ref dValorTotalProdutosRestante, nCont == (m_sortLstProdutosFatura.Count - 1));
                dSubTotalProduto = (dPrecoUnitarioProduto * cls_ProdutoData.Quantidade);
                cls_ProdutoData.PrecoUnitario = dPrecoUnitarioProduto;
            }

            return(bRetorno);
        }
        private bool bCalculaProdutosFatura()
        {
            bool   bRetorno = false;
            double dSubTotal = 0, dValorTotalProdutosRestante = 0, dValorTotalProdutos = 0;

            m_sortLstProdutosFatura = new System.Collections.SortedList();
            // Inserindo os Produtos da Fatura com o preco unitario lancado
            switch (m_enumDataSource)
            {
            case DataSource.FaturaCotacao:
                foreach (mdlDataBaseAccess.Tabelas.XsdTbProdutosFaturaCotacao.tbProdutosFaturaCotacaoRow dtrwProdutoFaturaCotacao in m_typDatSetProdutosFaturaCotacao.tbProdutosFaturaCotacao.Rows)
                {
                    if ((dtrwProdutoFaturaCotacao.IsnIdOrdemProdutoParentNull()) || (dtrwProdutoFaturaCotacao.nIdOrdemProdutoParent != 0))
                    {
                        continue;
                    }
                    clsProdutoData clsDataProduto = new clsProdutoData(dtrwProdutoFaturaCotacao.idOrdem, dtrwProdutoFaturaCotacao.dQuantidade, dtrwProdutoFaturaCotacao.dPrecoUnitario);
                    dSubTotal = System.Math.Round(dSubTotal + System.Math.Round(dtrwProdutoFaturaCotacao.dPrecoUnitario * dtrwProdutoFaturaCotacao.dQuantidade, 2), 2);
                    m_sortLstProdutosFatura.Add(dtrwProdutoFaturaCotacao.idOrdem, clsDataProduto);
                }
                break;

            case DataSource.FaturaProforma:
                foreach (mdlDataBaseAccess.Tabelas.XsdTbProdutosFaturaProforma.tbProdutosFaturaProformaRow dtrwProdutoFaturaProforma in m_typDatSetProdutosFaturaProforma.tbProdutosFaturaProforma.Rows)
                {
                    if ((dtrwProdutoFaturaProforma.IsnIdOrdemProdutoParentNull()) || (dtrwProdutoFaturaProforma.nIdOrdemProdutoParent != 0))
                    {
                        continue;
                    }
                    clsProdutoData clsDataProduto = new clsProdutoData(dtrwProdutoFaturaProforma.idOrdem, dtrwProdutoFaturaProforma.dQuantidade, dtrwProdutoFaturaProforma.dPrecoUnitario);
                    dSubTotal = System.Math.Round(dSubTotal + System.Math.Round(dtrwProdutoFaturaProforma.dPrecoUnitario * dtrwProdutoFaturaProforma.dQuantidade, 2), 2);
                    m_sortLstProdutosFatura.Add(dtrwProdutoFaturaProforma.idOrdem, clsDataProduto);
                }
                break;

            case DataSource.FaturaComercial:
                foreach (mdlDataBaseAccess.Tabelas.XsdTbProdutosFaturaComercial.tbProdutosFaturaComercialRow dtrwProdutoFaturaComercial in m_typDatSetProdutosFaturaComercial.tbProdutosFaturaComercial.Rows)
                {
                    if ((dtrwProdutoFaturaComercial.IsnIdOrdemProdutoParentNull()) || (dtrwProdutoFaturaComercial.nIdOrdemProdutoParent != 0))
                    {
                        continue;
                    }
                    clsProdutoData clsDataProduto    = new clsProdutoData(dtrwProdutoFaturaComercial.idOrdem, dtrwProdutoFaturaComercial.dQuantidade, dtrwProdutoFaturaComercial.dPrecoUnitario);
                    decimal        dcSubTotalCurrent = (decimal)System.Math.Round(dtrwProdutoFaturaComercial.dPrecoUnitario * dtrwProdutoFaturaComercial.dQuantidade, 2);
                    dSubTotal = dSubTotal + System.Math.Round(dtrwProdutoFaturaComercial.dPrecoUnitario * dtrwProdutoFaturaComercial.dQuantidade, 2);
                    m_sortLstProdutosFatura.Add(dtrwProdutoFaturaComercial.idOrdem, clsDataProduto);
                }
                break;
            }

            // Total Despesas
            double dValorTotalDespesas = m_dFreteInterno + m_dFreteInternacional + m_dSeguro + m_dOutros;

            // Rateio
            if (m_bCalculos)
            {
                if (m_bRatiar)
                {
                    dValorTotalProdutos = dSubTotal;
                    if (m_bRatiarDesconto)
                    {
                        dValorTotalProdutosRestante = dSubTotal + m_dDesconto;
                    }
                    else
                    {
                        dValorTotalProdutosRestante = dSubTotal - m_dDesconto;
                    }
                    dValorTotalProdutosRestante = dValorTotalProdutosRestante - dValorTotalDespesas;
                    if (dValorTotalProdutosRestante < 0)
                    {
                        dValorTotalProdutosRestante = 0;
                    }
                    dValorTotalProdutos = dValorTotalProdutosRestante;
                    m_dTotalFatura      = dValorTotalProdutos + dValorTotalDespesas - m_dDesconto;
                }
                else
                {
                    dValorTotalProdutos = dSubTotal;
                    if (m_bRatiarDesconto)
                    {
                        dValorTotalProdutosRestante = dSubTotal - m_dDesconto;
                    }
                    else
                    {
                        dValorTotalProdutosRestante = dSubTotal;
                    }
                    m_dTotalFatura      = dValorTotalProdutos + dValorTotalDespesas - m_dDesconto;
                    dValorTotalProdutos = dValorTotalProdutosRestante;
                }
            }
            else
            {
                dValorTotalProdutos         = dSubTotal;
                dValorTotalProdutosRestante = dSubTotal;
                m_dTotalFatura = dValorTotalProdutos;
            }

            // Inserindo os Produtos Principais
            double dPrecoUnitarioProduto = 0, dSubTotalProduto = 0;

            for (int nCont = 0; nCont < m_sortLstProdutosFatura.Count; nCont++)
            {
                clsProdutoData cls_ProdutoData = (clsProdutoData)m_sortLstProdutosFatura.GetByIndex(nCont);
                if (m_bRatiar || m_bRatiarDesconto)                 // Com Rateio
                {
                    CalculaPrecoUnitario(cls_ProdutoData.PrecoUnitario, out dPrecoUnitarioProduto, cls_ProdutoData.Quantidade, dSubTotal, dValorTotalProdutos, ref dValorTotalProdutosRestante, nCont == (m_sortLstProdutosFatura.Count - 1));
                    dSubTotalProduto = (dPrecoUnitarioProduto * cls_ProdutoData.Quantidade);
                    cls_ProdutoData.PrecoUnitario = dPrecoUnitarioProduto;
                }
                else
                {                       // Sem Rateio
                    dPrecoUnitarioProduto = cls_ProdutoData.PrecoUnitario;
                    dSubTotalProduto      = (dPrecoUnitarioProduto * cls_ProdutoData.Quantidade);
                }
            }
            bRetorno = true;
            return(bRetorno);
        }