Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        /// <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);
        }
Beispiel #6
0
 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);
 }
Beispiel #7
0
        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;
            }
        }
Beispiel #8
0
        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
                       ));
        }
Beispiel #9
0
        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;
            }
        }
Beispiel #10
0
        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);
            }
        }
Beispiel #11
0
        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
                );
        }
Beispiel #12
0
        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);
            }
        }
Beispiel #13
0
 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);
Beispiel #14
0
 protected abstract decimal Calcular(GDASession sessao, IProdutoCalculo produto, int qtdeAmbiente, decimal total,
                                     ArredondarAluminio arredondarAluminio, bool calcularMultiploDe5, bool nf, int numeroBeneficiamentos,
                                     int alturaBeneficiamento, int larguraBeneficiamento);
Beispiel #15
0
        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
                       ));
        }