Ejemplo n.º 1
0
        /// <summary>
        /// Realiza a conversão dos dados de rentabilidade do ambiente para um
        /// registro de rentabilidade.
        /// </summary>
        /// <param name="ambienteRentabilidade"></param>
        /// <returns></returns>
        private IRegistroRentabilidade ConverterParaRegistroRentabilidade(Data.Model.AmbientePedidoEspelhoRentabilidade ambienteRentabilidade)
        {
            var tipo = (TipoRegistroRentabilidade)ambienteRentabilidade.Tipo;

            return(new RegistroRentabilidade(ambienteRentabilidade.IdRegistro,
                                             ProvedorDescritoresRegistro.ObterDescritor(tipo, ambienteRentabilidade.IdRegistro), tipo, ambienteRentabilidade.Valor));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Recupera o item de rentabilidade para o ambiente do pedido.
        /// </summary>
        /// <param name="sessao"></param>
        /// <param name="ambiente"></param>
        /// <returns></returns>
        private IItemRentabilidade ObterItemAmbientePedido(
            GDA.GDASession sessao, Data.Model.AmbientePedidoEspelho ambiente, int prazoMedio,
            IEnumerable <IItemRentabilidade <Data.Model.ProdutosPedidoEspelho> > produtos)
        {
            var registros = new Lazy <IList <Data.Model.AmbientePedidoEspelhoRentabilidade> >(
                () => Data.DAL.AmbientePedidoEspelhoRentabilidadeDAO.Instance.ObterPorAmbiente(sessao, ambiente.IdAmbientePedido));

            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)
                {
                    // Cria o registro da rentabilidade do ambiente do pedido
                    registro = new Data.Model.AmbientePedidoEspelhoRentabilidade
                    {
                        IdAmbientePedido = (int)ambiente.IdAmbientePedido,
                        IdRegistro       = idRegistro,
                        Tipo             = (int)tipo,
                        Valor            = valor
                    };
                    registros.Value.Add(registro);
                }
                else
                {
                    registro.Valor = valor;
                }

                return(ConverterParaRegistroRentabilidade(registro));
            });

            var produtosAmbiente = produtos.Select(f => f.Proprietario);

            // Calcula os valores dos produtos do ambiente
            var valorProdutos      = produtosAmbiente.Sum(f => f.Total + f.ValorBenef);
            var valorDescontoAtual = produtosAmbiente.Sum(f => f.ValorDescontoProd);

            // Calcula o total do ambiente
            var total = valorProdutos - (!Glass.Configuracoes.PedidoConfig.RatearDescontoProdutos ? valorDescontoAtual : 0);

            var percentualComissao = 0m;

            if (Glass.Configuracoes.PedidoConfig.Comissao.UsarComissaoPorProduto)
            {
                decimal percComissao = 0;

                if (total > 0)
                {
                    foreach (var prod in produtosAmbiente)
                    {
                        percComissao += ((prod.Total * 100) / total) * (prod.PercComissao / 100);
                    }
                }

                percentualComissao = percComissao / 100m;
            }

            return(new ItemRentabilidadeContainer <Data.Model.AmbientePedidoEspelho, Data.Model.AmbientePedidoEspelhoRentabilidade>(
                       ProvedorIndicadoresFinanceiro, criarRegistro, ambiente, produtos, f => true, registros,
                       ConverterParaRegistroRentabilidade)
            {
                Descricao = $"Ambiente {ambiente.Ambiente}",
                PrecoVendaSemIPI = total, // Na atualiza configuração do sistema o total do ambiente não possui o valor do IPI
                PrazoMedio = prazoMedio,
                PercentualComissao = percentualComissao,
                PercentualRentabilidade = ambiente.PercentualRentabilidade / 100m,
                RentabilidadeFinanceira = ambiente.RentabilidadeFinanceira
            });
        }