Ejemplo n.º 1
0
        private decimal ObterBaseCalculo(DadosCalculoDto dadosCalculo, int quantidades)
        {
            var quantidade = dadosCalculo.Produto.Quantidade
                             * (dadosCalculo.Produto.QuantidadeAmbiente ?? 1);

            return(quantidade * quantidades);
        }
Ejemplo n.º 2
0
        /// <inheritdoc/>
        public decimal CalcularValor(DadosCalculoDto dadosCalculo, BeneficiamentoDto beneficiamento, ItemBeneficiamentoDto itemSelecionado, decimal valorUnitario)
        {
            var quantidades = itemSelecionado.Quantidade ?? 1;

            var baseCalculo = this.ObterBaseCalculo(dadosCalculo, quantidades);

            return(valorUnitario * baseCalculo);
        }
Ejemplo n.º 3
0
        private decimal ObterBaseCalculo(DadosCalculoDto dadosCalculo, decimal valorProduto)
        {
            var areaM2 = Configuracoes.Beneficiamentos.UsarM2CalcBeneficiamentos
                ? dadosCalculo.Produto.AreaCalculadaM2
                : dadosCalculo.Produto.AreaM2;

            return(valorProduto / 100 * (decimal)areaM2);
        }
Ejemplo n.º 4
0
        /// <inheritdoc/>
        public decimal CalcularValor(DadosCalculoDto dadosCalculo, BeneficiamentoDto beneficiamento, ItemBeneficiamentoDto itemSelecionado, decimal valorUnitario)
        {
            var alturas  = itemSelecionado.Altura ?? 2;
            var larguras = itemSelecionado.Largura ?? 2;

            var baseCalculo = this.ObterBaseCalculo(dadosCalculo, alturas, larguras);

            return(valorUnitario * baseCalculo);
        }
Ejemplo n.º 5
0
        private decimal ObterBaseCalculo(DadosCalculoDto dadosCalculo, int alturas, int larguras)
        {
            var quantidade = dadosCalculo.Produto.Quantidade
                             * (dadosCalculo.Produto.QuantidadeAmbiente ?? 1);

            var altura  = (decimal)dadosCalculo.Produto.Altura * alturas;
            var largura = dadosCalculo.Produto.Largura * larguras;

            return(quantidade * (altura + largura) / 1000);
        }
Ejemplo n.º 6
0
        /// <inheritdoc/>
        public decimal CalcularCusto(DadosCalculoDto dadosCalculo, BeneficiamentoDto beneficiamento, ItemBeneficiamentoDto itemSelecionado, decimal custoUnitario)
        {
            var valor = dadosCalculo.Produto.CustoUnitario > 0
                ? dadosCalculo.Produto.CustoUnitario
                : dadosCalculo.Produto.ValorUnitario;

            var baseCalculo = this.ObterBaseCalculo(dadosCalculo, valor);

            return(custoUnitario * baseCalculo);
        }
Ejemplo n.º 7
0
        /// <inheritdoc/>
        public decimal CalcularValor(DadosCalculoDto dadosCalculo, BeneficiamentoDto beneficiamento, ItemBeneficiamentoDto itemSelecionado, decimal valorUnitario)
        {
            var quantidade = itemSelecionado.Quantidade ?? 1;

            if (quantidade == 0)
            {
                quantidade = 1;
            }

            var baseCalculo = this.ObterBaseCalculo(dadosCalculo, dadosCalculo.Produto.ValorUnitario);

            return(valorUnitario * baseCalculo * quantidade);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Recupera o preço do beneficiamento para ser usado no cálculo de valores.
        /// </summary>
        /// <param name="dadosCalculo">Dados adicionais para o cálculo associado ao beneficiamento.</param>
        /// <param name="beneficiamento">Os dados do beneficiamento aplicado.</param>
        /// <returns>Um objeto com o preço do beneficiamento, se encontrado.</returns>
        public PrecoBeneficiamentoDto ObterPrecoBeneficiamento(
            DadosCalculoDto dadosCalculo,
            BeneficiamentoDto beneficiamento)
        {
            var precos = beneficiamento.Precos ?? new PrecoBeneficiamentoDto[0];

            precos = this.FiltrarPrecosPorSubgrupo(precos, dadosCalculo.Produto.IdSubgrupo);
            precos = this.FiltrarPrecosPorCor(precos, dadosCalculo.Produto.IdCor);
            precos = this.OrdenarPrecos(precos);

            if (beneficiamento.CalculoPorEspessura)
            {
                precos = this.FiltrarPrecosPorEspessura(precos, dadosCalculo.Produto.Espessura);
            }

            return(precos.FirstOrDefault() ?? new PrecoBeneficiamentoDto());
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Calcula o valor total de um beneficiamento.
        /// </summary>
        /// <param name="dadosCalculo">Dados adicionais para o cálculo associado ao beneficiamento.</param>
        /// <param name="beneficiamento">Os dados do beneficiamento aplicado.</param>
        /// <param name="itemSelecionado">Os dados do item selecionado (pode ser o pai ou um dos filhos).</param>
        /// <returns>Um valor que indica o total daquele beneficiamento aplicado para o produto.</returns>
        public TotalDto Calcular(
            DadosCalculoDto dadosCalculo,
            BeneficiamentoDto beneficiamento,
            ItemBeneficiamentoDto itemSelecionado)
        {
            var selecionado = this.ObterBeneficiamentoSelecionado(beneficiamento, itemSelecionado);
            var preco       = new SelecionaPrecoBeneficiamento().ObterPrecoBeneficiamento(dadosCalculo, selecionado);

            var valorUnitario = this.ObterValorUnitario(dadosCalculo, preco, beneficiamento.TipoControle);

            valorUnitario = this.ObterValorComPercentualComissao(valorUnitario, dadosCalculo.PercentualComissao);

            var estrategia = ValorTotalStrategyFactory.Instance.ObterEstrategia(selecionado);

            return(new TotalDto
            {
                ValorUnitario = valorUnitario,
                ValorTotal = estrategia.CalcularValor(dadosCalculo, selecionado, itemSelecionado, valorUnitario),
                CustoTotal = estrategia.CalcularCusto(dadosCalculo, selecionado, itemSelecionado, preco.CustoUnitario),
            });
        }
Ejemplo n.º 10
0
        private decimal ObterValorUnitario(
            DadosCalculoDto dadosCalculo,
            PrecoBeneficiamentoDto precoBeneficiamento,
            Model.TipoControleBenef tipoControle)
        {
            var percentualDescontoAcrescimo = (decimal)dadosCalculo.PercentualDescontoAcrescimoCliente;

            if (!dadosCalculo.UsarDescontoAcrescimoClienteNosBeneficiamentos ||
                (tipoControle != Model.TipoControleBenef.Lapidacao &&
                 tipoControle != Model.TipoControleBenef.Bisote))
            {
                percentualDescontoAcrescimo = 1;
            }

            if (dadosCalculo.ValorBeneficiamentoEstaEditavelNoControle)
            {
                return(precoBeneficiamento.CustoUnitario * percentualDescontoAcrescimo);
            }

            if (dadosCalculo.ClienteRevenda)
            {
                return(precoBeneficiamento.ValorAtacadoUnitario * percentualDescontoAcrescimo);
            }

            var tiposEntregaBalcao = new[]
            {
                Model.Pedido.TipoEntregaPedido.Balcao,
                Model.Pedido.TipoEntregaPedido.Entrega,
            };

            if (tiposEntregaBalcao.Contains(dadosCalculo.TipoEntrega))
            {
                return(precoBeneficiamento.ValorBalcaoUnitario * percentualDescontoAcrescimo);
            }

            return(precoBeneficiamento.ValorObraUnitario * percentualDescontoAcrescimo);
        }
Ejemplo n.º 11
0
 private decimal ObterBaseCalculo(DadosCalculoDto dadosCalculo)
 {
     return(Configuracoes.Beneficiamentos.UsarM2CalcBeneficiamentos
         ? (decimal)dadosCalculo.Produto.AreaCalculadaM2
         : (decimal)dadosCalculo.Produto.AreaM2);
 }
Ejemplo n.º 12
0
 /// <inheritdoc/>
 public decimal CalcularCusto(DadosCalculoDto dadosCalculo, BeneficiamentoDto beneficiamento, ItemBeneficiamentoDto itemSelecionado, decimal custoUnitario)
 {
     return(this.CalcularValor(dadosCalculo, beneficiamento, itemSelecionado, custoUnitario));
 }
Ejemplo n.º 13
0
 /// <inheritdoc/>
 public decimal CalcularCusto(DadosCalculoDto dadosCalculo, BeneficiamentoDto beneficiamento, ItemBeneficiamentoDto itemSelecionado, decimal custoUnitario)
 {
     return(0);
 }