private decimal ObterBaseCalculo(DadosCalculoDto dadosCalculo, int quantidades) { var quantidade = dadosCalculo.Produto.Quantidade * (dadosCalculo.Produto.QuantidadeAmbiente ?? 1); return(quantidade * quantidades); }
/// <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); }
private decimal ObterBaseCalculo(DadosCalculoDto dadosCalculo, decimal valorProduto) { var areaM2 = Configuracoes.Beneficiamentos.UsarM2CalcBeneficiamentos ? dadosCalculo.Produto.AreaCalculadaM2 : dadosCalculo.Produto.AreaM2; return(valorProduto / 100 * (decimal)areaM2); }
/// <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); }
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); }
/// <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); }
/// <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); }
/// <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()); }
/// <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), }); }
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); }
private decimal ObterBaseCalculo(DadosCalculoDto dadosCalculo) { return(Configuracoes.Beneficiamentos.UsarM2CalcBeneficiamentos ? (decimal)dadosCalculo.Produto.AreaCalculadaM2 : (decimal)dadosCalculo.Produto.AreaM2); }
/// <inheritdoc/> public decimal CalcularCusto(DadosCalculoDto dadosCalculo, BeneficiamentoDto beneficiamento, ItemBeneficiamentoDto itemSelecionado, decimal custoUnitario) { return(this.CalcularValor(dadosCalculo, beneficiamento, itemSelecionado, custoUnitario)); }
/// <inheritdoc/> public decimal CalcularCusto(DadosCalculoDto dadosCalculo, BeneficiamentoDto beneficiamento, ItemBeneficiamentoDto itemSelecionado, decimal custoUnitario) { return(0); }