Example #1
0
        /// <summary>
        /// Recupera o item de rentabilidade para o produto do pedido.
        /// </summary>
        /// <param name="sessao"></param>
        /// <param name="produtoPedido"></param>
        /// <returns></returns>
        private IItemRentabilidade ObterItemProdutoPedido(GDA.GDASession sessao, Data.Model.ProdutosPedidoEspelho produtoPedido)
        {
            var prazoMedio = CalcularPrazoMedioPedido(sessao, produtoPedido.IdPedido);
            var filhos     = Data.DAL.ProdutosPedidoEspelhoDAO.Instance.ObterFilhosComposicao(sessao, produtoPedido.IdProdPed);

            var produtos = Data.DAL.ProdutoDAO.Instance.ObterProdutos(sessao,
                                                                      filhos.Select(f => f.IdProd).Concat(new uint[] { produtoPedido.IdProd }).Distinct());

            return(ObterItemProdutoPedido(sessao, produtoPedido, prazoMedio, produtos, filhos));
        }
Example #2
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="produtoPedido"></param>
 /// <param name="loja"></param>
 /// <param name="cliente"></param>
 /// <param name="naturezaOperacao"></param>
 /// <param name="produto"></param>
 /// <param name="mva"></param>
 /// <param name="descontoRateadoImpostos"></param>
 /// <param name="provedorCodValorFiscal"></param>
 public ProdutoPedidoEspelhoItemImposto(
     Data.Model.ProdutosPedidoEspelho produtoPedido,
     Global.Negocios.Entidades.Loja loja,
     Global.Negocios.Entidades.Cliente cliente,
     Entidades.NaturezaOperacao naturezaOperacao,
     Global.Negocios.Entidades.Produto produto,
     float mva, decimal descontoRateadoImpostos,
     IProvedorCodValorFiscal provedorCodValorFiscal)
 {
     ProdutoPedido    = produtoPedido;
     Loja             = loja;
     Cliente          = cliente;
     NaturezaOperacao = naturezaOperacao;
     Produto          = produto;
     Mva = mva;
     DescontoRateadoImpostos = descontoRateadoImpostos;
     ProvedorCodValorFiscal  = provedorCodValorFiscal;
 }
Example #3
0
        /// <summary>
        /// Executa o calculo da rentabilidade para o produto do tipo principal.
        /// </summary>
        /// <param name="sessao"></param>
        /// <param name="instancia">Instância do produto.</param>
        /// <returns></returns>
        Data.ICalculoRentabilidadeResultado Data.ICalculadoraRentabilidade <Data.Model.ProdutosPedidoEspelho> .Calcular(GDA.GDASession sessao, Data.Model.ProdutosPedidoEspelho instancia)
        {
            if (!CalculoHabilitado)
            {
                return(CriarResultadoNaoExecutado());
            }

            var item = ObterItemProdutoPedido(sessao, instancia);

            return(Calcular(item));
        }
Example #4
0
 /// <summary>
 /// Recupera o item com base no produto do pedido.
 /// </summary>
 /// <param name="sessao"></param>
 /// <param name="referencia"></param>
 /// <returns></returns>
 IItemRentabilidade IProvedorItemRentabilidade <Data.Model.ProdutosPedidoEspelho> .ObterItem(GDA.GDASession sessao, Data.Model.ProdutosPedidoEspelho referencia)
 {
     return(ObterItemProdutoPedido(sessao, referencia));
 }
Example #5
0
 /// <summary>
 /// Recupera o item com base no produto do pedido.
 /// </summary>
 /// <param name="referencia"></param>
 /// <returns></returns>
 IItemRentabilidade IProvedorItemRentabilidade <Data.Model.ProdutosPedidoEspelho> .ObterItem(Data.Model.ProdutosPedidoEspelho referencia)
 {
     using (var sessao = new GDA.GDASession())
         return(ObterItemProdutoPedido(sessao, referencia));
 }
Example #6
0
        /// <summary>
        /// Recupera um item de rentabilidade para o produto pedido informado.
        /// </summary>
        /// <param name="sessao"></param>
        /// <param name="produtoPedido"></param>
        /// <param name="prazoMedio"></param>
        /// <param name="produtos"></param>
        /// <param name="produtosPedidoFilhos">Relação dos produtos do pedidos filhos do produto informado.</param>
        /// <returns></returns>
        private IItemRentabilidade <Data.Model.ProdutosPedidoEspelho> ObterItemProdutoPedido(
            GDA.GDASession sessao, Data.Model.ProdutosPedidoEspelho produtoPedido,
            int prazoMedio, IEnumerable <Data.Model.Produto> produtos,
            IEnumerable <Data.Model.ProdutosPedidoEspelho> produtosPedidoFilhos)
        {
            var registros = new Lazy <IList <Data.Model.ProdutoPedidoEspelhoRentabilidade> >(
                () => Data.DAL.ProdutoPedidoEspelhoRentabilidadeDAO.Instance.ObterPorProdutoPedido(sessao, produtoPedido.IdProdPed));

            var criarRegistro = new CriadorRegistroRentabilidade((tipo, nome, valor) =>
            {
                var idRegistro = ProvedorDescritoresRegistro.ObterRegistro(tipo, nome);
                var registro   = registros.Value.FirstOrDefault(f => f.Tipo == (int)tipo && f.IdRegistro == idRegistro);

                if (registro == null)
                {
                    registro = new Data.Model.ProdutoPedidoEspelhoRentabilidade
                    {
                        IdProdPed  = (int)produtoPedido.IdProdPed,
                        IdRegistro = idRegistro,
                        Tipo       = (int)tipo,
                        Valor      = valor
                    };
                    registros.Value.Add(registro);
                }
                else
                {
                    registro.Valor = valor;
                }

                return(ConverterParaRegistroRentabilidade(registro));
            });

            // Carrega o produto associado
            var produto = produtos.First(f => f.IdProd == produtoPedido.IdProd);

            // Calculao custo do produto
            var custoProd = Global.CalculosFluxo.CalcTotaisItemProdFast(sessao, produto.TipoCalculo,
                                                                        produtoPedido.Altura, produtoPedido.Largura, produtoPedido.Qtde,
                                                                        produtoPedido.TotM, produto.CustoCompra, produtoPedido.AlturaBenef.GetValueOrDefault(2),
                                                                        produtoPedido.LarguraBenef.GetValueOrDefault(2));

            if (produtosPedidoFilhos.Any())
            {
                // Recupera os itens dos produtos filhos
                var itens = produtosPedidoFilhos.Select(produtoPedido1 =>
                                                        ObterItemProdutoPedido(sessao, produtoPedido1, prazoMedio, produtos, new Data.Model.ProdutosPedidoEspelho[0]))
                            .ToList();

                return(new ItemRentabilidadeContainer <Data.Model.ProdutosPedidoEspelho, Data.Model.ProdutoPedidoEspelhoRentabilidade>(
                           ProvedorIndicadoresFinanceiro, criarRegistro, produtoPedido, itens, f => true, registros,
                           ConverterParaRegistroRentabilidade)
                {
                    Descricao = $"Produto ({produto?.CodInterno}) {produto?.Descricao}",
                    PrecoVendaSemIPI = produtoPedido.Total + produtoPedido.ValorBenef,
                    PrazoMedio = prazoMedio,
                    PercentualComissao = produtoPedido.PercComissao / 100m,
                    PercentualRentabilidade = produtoPedido.PercentualRentabilidade / 100m,
                    RentabilidadeFinanceira = produtoPedido.RentabilidadeFinanceira
                });
            }
            else
            {
                return new ItemRentabilidade <Data.Model.ProdutosPedidoEspelho, Data.Model.ProdutoPedidoEspelhoRentabilidade>(
                    ProvedorIndicadoresFinanceiro, criarRegistro, produtoPedido, registros, ConverterParaRegistroRentabilidade)
                       {
                           Descricao               = $"Produto ({produto.CodInterno}) {produto.Descricao}",
                           PrecoVendaSemIPI        = produtoPedido.Total + produtoPedido.ValorBenef, // Na atualiza configuração do sistema o total do produto não possui o valor do IPI
                           PrecoCusto              = custoProd,
                           PrazoMedio              = prazoMedio,
                           PercentualICMSVenda     = (decimal)produtoPedido.AliqIcms / 100m,
                           FatorICMSSubstituicao   = 0m,
                           PercentualIPICompra     = 0m, //(decimal)(produto?.AliqIPI ?? 0) / 100m,
                           PercentualIPIVenda      = (decimal)produtoPedido.AliqIpi / 100m,
                           PercentualComissao      = produtoPedido.PercComissao / 100m,
                           CustosExtras            = 0M,
                           PercentualRentabilidade = produtoPedido.PercentualRentabilidade / 100m,
                           RentabilidadeFinanceira = produtoPedido.RentabilidadeFinanceira
                       }
            };
        }