示例#1
0
        public void Calcular(GDASession sessao, IContainerCalculo container, IProdutoCalculo produto)
        {
            produto.InicializarParaCalculo(sessao, container);

            decimal valorTabela  = produto.DadosProduto.ValorTabela(false);
            decimal valorCliente = produto.DadosProduto.ValorTabela(true);

            int tipoCalculoProduto = (int)produto.DadosProduto.DadosGrupoSubgrupo.TipoCalculo();

            if (valorTabela < valorCliente)
            {
                produto.ValorDescontoCliente  = 0;
                produto.ValorAcrescimoCliente = CalculaValorTotal(sessao, produto, tipoCalculoProduto,
                                                                  valorCliente - valorTabela);
            }
            else if (valorTabela > valorCliente)
            {
                produto.ValorAcrescimoCliente = 0;
                produto.ValorDescontoCliente  = CalculaValorTotal(sessao, produto, tipoCalculoProduto,
                                                                  valorTabela - valorCliente);
            }
            else
            {
                produto.ValorAcrescimoCliente = 0;
                produto.ValorDescontoCliente  = 0;
            }
        }
示例#2
0
        public decimal?CalcularValor(GDASession sessao, IContainerCalculo container, IProdutoCalculo produto,
                                     decimal baseCalculo)
        {
            produto.InicializarParaCalculo(sessao, container);

            var compra = produto is ProdutosCompra;
            var nf     = produto is ProdutosNf;

            var alturaBenef = this.NormalizarAlturaLarguraBeneficiamento(
                produto.AlturaBenef,
                container,
                (int)produto.DadosProduto.DadosGrupoSubgrupo.TipoCalculo(nf, compra));

            var larguraBenef = this.NormalizarAlturaLarguraBeneficiamento(
                produto.LarguraBenef,
                container,
                (int)produto.DadosProduto.DadosGrupoSubgrupo.TipoCalculo(nf, compra));

            return(CalcularValor(
                       sessao,
                       produto,
                       baseCalculo,
                       compra,
                       nf,
                       alturaBenef,
                       larguraBenef
                       ));
        }
示例#3
0
        public void Calcular(GDASession sessao, IContainerCalculo container, IProdutoCalculo produto)
        {
            produto.InicializarParaCalculo(sessao, container);

            produto.TotalBruto = produto.Total - DescontoValorBruto(produto);
            CalcularValorUnitarioBruto(sessao, produto);
        }
示例#4
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);
        }
示例#5
0
        private static void CalculaValor(IContainerCalculo container, IProdutoCalculo produto)
        {
            var calcularMultiploDe5 = true;

            if (container is Pedido)
            {
                produto.InicializarParaCalculo(null, container);
                calcularMultiploDe5 = produto.DadosProduto.DadosGrupoSubgrupo.TipoCalculo() == TipoCalculoGrupoProd.M2 && !container.IsPedidoProducaoCorte;
            }

            Helper.Calculos.ValorTotal.Instance.Calcular(
                null,
                container,
                produto,
                Helper.Calculos.Estrategia.ValorTotal.Enum.ArredondarAluminio.ArredondarApenasCalculo,
                calcularMultiploDe5,
                produto.Beneficiamentos.CountAreaMinima);
        }
示例#6
0
        public float CalcularM2Calculo(GDASession sessao, IContainerCalculo container, IProdutoCalculo produto, bool usarChapa,
                                       bool calcularMultiploDe5, int numeroBeneficiamentos, int qtdeAmbiente = 1, int?larguraUsar = null)
        {
            produto.InicializarParaCalculo(sessao, container);

            bool possuiChapaVidro = usarChapa &&
                                    produto.IdProduto > 0 &&
                                    produto.DadosProduto.DadosChapaVidro.ProdutoPossuiChapaVidro();

            int altura  = (int)produto.Altura;
            int largura = larguraUsar ?? produto.Largura;

            AjustarDadosChapaVidro(produto, ref possuiChapaVidro, ref altura, ref largura);

            float m2 = Calcular(produto, calcularMultiploDe5, altura, largura, produto.Qtde);

            m2 = Math.Max(m2, CalcularAreaMinimaProduto(produto, numeroBeneficiamentos, produto.Qtde));
            /* Chamado 77857. */
            m2 *= qtdeAmbiente;

            return(AplicarM2MinimoChapaVidro(produto, possuiChapaVidro, m2));
        }
示例#7
0
        public decimal?RecalcularValor(GDASession sessao, IContainerCalculo container, IProdutoCalculo produto,
                                       bool valorBruto = false)
        {
            produto.InicializarParaCalculo(sessao, container);

            if (produto.Container?.IdObra > 0 && PedidoConfig.DadosPedido.UsarControleNovoObra)
            {
                return(null);
            }

            var compra = produto is ProdutosCompra;
            var nf     = produto is ProdutosNf;

            var alturaBenef = this.NormalizarAlturaLarguraBeneficiamento(
                produto.AlturaBenef,
                container,
                (int)produto.DadosProduto.DadosGrupoSubgrupo.TipoCalculo(nf, compra));

            var larguraBenef = this.NormalizarAlturaLarguraBeneficiamento(
                produto.LarguraBenef,
                container,
                (int)produto.DadosProduto.DadosGrupoSubgrupo.TipoCalculo(nf, compra));

            AtualizaValorUnitario(produto, valorBruto);
            decimal total = CalcularTotal(sessao, produto, valorBruto);

            total = IncluirDescontoAcrescimoComissaoNoTotal(sessao, produto, valorBruto, total);

            return(CalcularValor(
                       sessao,
                       produto,
                       total,
                       compra,
                       nf,
                       alturaBenef,
                       larguraBenef
                       ));
        }
示例#8
0
 /// <summary>
 /// Cálculo de arredondamento de m².
 /// </summary>
 public float Calcular(GDASession sessao, IContainerCalculo container, IProdutoCalculo produto, bool calcularMultiploDe5)
 {
     produto.InicializarParaCalculo(sessao, container);
     return(Calcular(produto, calcularMultiploDe5, (int)produto.Altura, produto.Largura, produto.Qtde));
 }
示例#9
0
 protected void AtualizaDadosProdutosCalculo(IProdutoCalculo produtoCalculo, GDASession sessao,
                                             IContainerCalculo container)
 {
     produtoCalculo.InicializarParaCalculo(sessao, container);
 }