protected override void Calcular(GDASession sessao, IProdutoCalculo produto, int qtdeAmbiente, ArredondarAluminio arredondarAluminio, bool calcularMultiploDe5, bool nf, int numeroBeneficiamentos, int alturaBeneficiamento, int larguraBeneficiamento, bool compra, decimal custoCompra, bool usarChapaVidro, bool valorBruto) { float decimosAltura = produto.Altura - (int)produto.Altura; float alturaArredondada = produto.Altura; if (!produto.DadosProduto.DadosGrupoSubgrupo.ProdutoEAluminio()) { arredondarAluminio = ArredondarAluminio.NaoArredondar; } if (arredondarAluminio != ArredondarAluminio.NaoArredondar && ValorArredondar > 0) { alturaArredondada = Arredondar(produto, decimosAltura) ?? alturaArredondada; if (arredondarAluminio == ArredondarAluminio.ArredondarEAtualizarProduto) { produto.Altura = alturaArredondada; } } produto.CustoProd = custoCompra * ObterBaseCalculo(produto, (decimal)alturaArredondada, qtdeAmbiente, false); var baseCalculo = ObterBaseCalculo(produto, (decimal)alturaArredondada, qtdeAmbiente, true); if (!valorBruto) { produto.Total = produto.ValorUnit * baseCalculo; } else { produto.TotalBruto = produto.ValorUnitarioBruto * baseCalculo; } }
protected override decimal Calcular(GDASession sessao, IProdutoCalculo produto, int qtdeAmbiente, decimal total, ArredondarAluminio arredondarAluminio, bool calcularMultiploDe5, bool nf, int numeroBeneficiamentos, int alturaBeneficiamento, int larguraBeneficiamento) { float totM2Temp = produto.TotM; CalcularTotalM2(sessao, produto, calcularMultiploDe5, nf, totM2Temp); float totM2Preco = CalcularTotalM2ParaCalculoPreco( sessao, produto, qtdeAmbiente, calcularMultiploDe5, nf, numeroBeneficiamentos, totM2Temp ); float areaMinima = AreaMinima(produto, numeroBeneficiamentos); float totM2Calc = totM2Preco < (areaMinima * produto.Qtde * qtdeAmbiente) ? (areaMinima * produto.Qtde * qtdeAmbiente) : totM2Preco; return(total / (totM2Calc > 0 ? (decimal)totM2Calc : 1)); }
protected override decimal Calcular(GDASession sessao, IProdutoCalculo produto, int qtdeAmbiente, decimal total, ArredondarAluminio arredondarAluminio, bool calcularMultiploDe5, bool nf, int numeroBeneficiamentos, int alturaBeneficiamento, int larguraBeneficiamento) { decimal divisor = Divisor(produto); return(total / divisor); }
protected override decimal Calcular(GDASession sessao, IProdutoCalculo produto, int qtdeAmbiente, decimal total, ArredondarAluminio arredondarAluminio, bool calcularMultiploDe5, bool nf, int numeroBeneficiamentos, int alturaBeneficiamento, int larguraBeneficiamento) { var altura = (int)produto.Altura * alturaBeneficiamento; var largura = produto.Largura * larguraBeneficiamento; int metroLinear = altura + largura; decimal divisor = Divisor(produto, qtdeAmbiente, metroLinear); return(total / divisor); }
/// <summary> /// Método utilizado para calcular o valor total e o total de m² de um produto. /// </summary> public void Calcular(GDASession sessao, IContainerCalculo container, IProdutoCalculo produto, ArredondarAluminio arredondarAluminio, bool calcularMultiploDe5, bool nf, bool compra, int numeroBeneficiamentos, bool usarChapaVidro = true, bool valorBruto = false, bool primeiroCalculo = false) { produto.InicializarParaCalculo(sessao, container); var alturaBeneficiamento = this.NormalizarAlturaLarguraBeneficiamento( produto.AlturaBenef, container, (int)produto.DadosProduto.DadosGrupoSubgrupo.TipoCalculo(nf, compra)); var larguraBeneficiamento = this.NormalizarAlturaLarguraBeneficiamento( produto.LarguraBenef, container, (int)produto.DadosProduto.DadosGrupoSubgrupo.TipoCalculo(nf, compra)); var estrategia = ValorTotalStrategyFactory.Instance.RecuperaEstrategia(produto, nf, compra); var acrescimo = 0.00M; try { DescontoAcrescimo.Instance.RemoverDescontoQtde(sessao, container, produto); acrescimo = produto.ValorAcrescimo; produto.ValorAcrescimo = 0.00M; estrategia.Calcular( sessao, produto, arredondarAluminio, calcularMultiploDe5, compra, nf, numeroBeneficiamentos, alturaBeneficiamento, larguraBeneficiamento, usarChapaVidro, valorBruto ); } finally { produto.ValorAcrescimo = acrescimo; DescontoAcrescimo.Instance.AplicarDescontoQtde(sessao, container, produto); } this.IncluirDescontoPorQuantidade(produto); }
public void Calcular(GDASession sessao, IContainerCalculo container, IProdutoCalculo produto, ArredondarAluminio arredondarAluminio, bool calcularMultiploDe5, int numeroBeneficiamentos, bool usarChapaVidro = true, bool valorBruto = false, bool primeiroCalculo = false) { Calcular( sessao, container, produto, arredondarAluminio, calcularMultiploDe5, false, false, numeroBeneficiamentos, usarChapaVidro, valorBruto, primeiroCalculo); }
protected override void Calcular(GDASession sessao, IProdutoCalculo produto, int qtdeAmbiente, ArredondarAluminio arredondarAluminio, bool calcularMultiploDe5, bool nf, int numeroBeneficiamentos, int alturaBeneficiamento, int larguraBeneficiamento, bool compra, decimal custoCompra, bool usarChapaVidro, bool valorBruto) { var baseCalculo = ObterBaseCalculo(produto, alturaBeneficiamento, larguraBeneficiamento, qtdeAmbiente); produto.CustoProd = custoCompra * baseCalculo; if (!valorBruto) { produto.Total = produto.ValorUnit * baseCalculo; } else { produto.TotalBruto = produto.ValorUnitarioBruto * baseCalculo; } }
protected override decimal Calcular(GDASession sessao, IProdutoCalculo produto, int qtdeAmbiente, decimal total, ArredondarAluminio arredondarAluminio, bool calcularMultiploDe5, bool nf, int numeroBeneficiamentos, int alturaBeneficiamento, int larguraBeneficiamento) { CalculaTotalM2(sessao, produto); return(base.Calcular( sessao, produto, qtdeAmbiente, total, arredondarAluminio, calcularMultiploDe5, nf, numeroBeneficiamentos, alturaBeneficiamento, larguraBeneficiamento )); }
protected override void Calcular(GDASession sessao, IProdutoCalculo produto, int qtdeAmbiente, ArredondarAluminio arredondarAluminio, bool calcularMultiploDe5, bool nf, int numeroBeneficiamentos, int alturaBeneficiamento, int larguraBeneficiamento, bool compra, decimal custoCompra, bool usarChapaVidro, bool valorBruto) { float totM2Temp = produto.TotM; CalcularTotalM2(sessao, produto, calcularMultiploDe5, compra); CalcularTotalM2Calculo(sessao, produto, qtdeAmbiente, calcularMultiploDe5, numeroBeneficiamentos, usarChapaVidro); if (PedidoConfig.NaoRecalcularValorProdutoComposicaoAoAlterarAlturaLargura && produto.DadosProduto.AlturaProduto() > 0 && produto.DadosProduto.LarguraProduto() > 0 && produto.DadosProduto.DadosGrupoSubgrupo.TipoSubgrupo() == TipoSubgrupoProd.VidroDuplo) { produto.Total = (decimal)produto.Qtde * produto.ValorUnit; return; } if (compra && produto.DadosProduto.DadosGrupoSubgrupo.TipoCalculo(nf, compra) == TipoCalculoGrupoProd.Qtd) { produto.Total = custoCompra * (decimal)produto.Qtde; return; } float totM2Preco = RecuperarTotalM2Preco(produto, nf, compra, totM2Temp); CalcularTotalM2CalculoAreaMinima(produto, qtdeAmbiente, nf, numeroBeneficiamentos, compra, totM2Preco); produto.CustoProd = (decimal)produto.TotM * custoCompra; if (!valorBruto) { produto.Total = produto.ValorUnit * (decimal)produto.TotM2Calc; } else { produto.TotalBruto = produto.ValorUnitarioBruto * (decimal)produto.TotM2Calc; } }
protected override decimal Calcular(GDASession sessao, IProdutoCalculo produto, int qtdeAmbiente, decimal total, ArredondarAluminio arredondarAluminio, bool calcularMultiploDe5, bool nf, int numeroBeneficiamentos, int alturaBeneficiamento, int larguraBeneficiamento) { float decimosAltura = produto.Altura - (int)produto.Altura; float alturaArredondada = produto.Altura; if (!produto.DadosProduto.DadosGrupoSubgrupo.ProdutoEAluminio()) { arredondarAluminio = ArredondarAluminio.NaoArredondar; } if (arredondarAluminio != ArredondarAluminio.NaoArredondar && ValorArredondar > 0) { alturaArredondada = Arredondar(produto, decimosAltura) ?? alturaArredondada; if (arredondarAluminio == ArredondarAluminio.ArredondarEAtualizarProduto) { produto.Altura = alturaArredondada; } } if (alturaArredondada == TAMANHO_BARRA_ALUMINIO_EM_M) { return(CalculoValorUnitarioBarraInteira(produto, qtdeAmbiente, total)); } else if (alturaArredondada < TAMANHO_BARRA_ALUMINIO_EM_M) { var divisor = alturaArredondada > 0 ? (decimal)alturaArredondada : 1; return(CalculoValorUnitarioBarraInteira(produto, qtdeAmbiente, total) / divisor * TAMANHO_BARRA_ALUMINIO_EM_M); } else { float divisorFloat = alturaArredondada * produto.Qtde * qtdeAmbiente; decimal divisor = divisorFloat > 0 ? (decimal)divisorFloat : 1; return(total / divisor * TAMANHO_BARRA_ALUMINIO_EM_M); } }
protected override void Calcular(GDASession sessao, IProdutoCalculo produto, int qtdeAmbiente, ArredondarAluminio arredondarAluminio, bool calcularMultiploDe5, bool nf, int numeroBeneficiamentos, int alturaBeneficiamento, int larguraBeneficiamento, bool compra, decimal custoCompra, bool usarChapaVidro, bool valorBruto) { CalculaTotalM2(sessao, produto, calcularMultiploDe5, numeroBeneficiamentos); base.Calcular( sessao, produto, qtdeAmbiente, arredondarAluminio, calcularMultiploDe5, nf, numeroBeneficiamentos, alturaBeneficiamento, larguraBeneficiamento, compra, custoCompra, usarChapaVidro, valorBruto ); }
public void Calcular(GDASession sessao, IProdutoCalculo produto, ArredondarAluminio arredondarAluminio, bool calcularMultiploDe5, bool compra, bool nf, int numeroBeneficiamentos, int alturaBeneficiamento, int larguraBeneficiamento, bool usarChapaVidro, bool valorBruto = false, bool primeiroCalculo = false) { /* Chamado 41410. */ if (ValidarQuantidadeDecimal && produto.Qtde % 1 > 0) { throw new Exception("Somente produtos calculados por Qtd. decimal podem possuir números decimais no campo Quantidade."); } var qtdeAmbiente = produto.QtdeAmbiente > 0 ? produto.QtdeAmbiente : 1; var custoCompra = produto.DadosProduto.CustoCompra(); Calcular( sessao, produto, qtdeAmbiente, arredondarAluminio, calcularMultiploDe5, nf, numeroBeneficiamentos, alturaBeneficiamento, larguraBeneficiamento, compra, custoCompra, usarChapaVidro, valorBruto ); if (!valorBruto && primeiroCalculo) { CorrigirValorCalculado(produto); } }
protected abstract void Calcular(GDASession sessao, IProdutoCalculo produto, int qtdeAmbiente, ArredondarAluminio arredondarAluminio, bool calcularMultiploDe5, bool nf, int numeroBeneficiamentos, int alturaBeneficiamento, int larguraBeneficiamento, bool compra, decimal custoCompra, bool usarChapaVidro, bool valorBruto);
protected abstract decimal Calcular(GDASession sessao, IProdutoCalculo produto, int qtdeAmbiente, decimal total, ArredondarAluminio arredondarAluminio, bool calcularMultiploDe5, bool nf, int numeroBeneficiamentos, int alturaBeneficiamento, int larguraBeneficiamento);
public decimal?Calcular(GDASession sessao, IProdutoCalculo produto, decimal total, ArredondarAluminio arredondarAluminio, bool calcularMultiploDe5, bool nf, int numeroBeneficiamentos, int alturaBeneficiamento, int larguraBeneficiamento) { /* Chamado 41410. */ if (ValidarQuantidadeDecimal && produto.Qtde % 1 > 0) { throw new Exception("Somente produtos calculados por Qtd. decimal podem possuir números decimais no campo Quantidade."); } var qtdeAmbiente = produto.QtdeAmbiente > 0 ? produto.QtdeAmbiente : 1; return(Calcular( sessao, produto, qtdeAmbiente, total, arredondarAluminio, calcularMultiploDe5, nf, numeroBeneficiamentos, alturaBeneficiamento, larguraBeneficiamento )); }