Пример #1
0
        private decimal?ObterTamanhoMaximoObra(GDASession sessao, DadosAdicionaisFiltroPedidoDto dadosAdicionais, Produto produto)
        {
            if (dadosAdicionais.IdObra > 0 && PedidoConfig.DadosPedido.UsarControleNovoObra)
            {
                var tamanhoProduto = dadosAdicionais.AreaEmM2DesconsiderarObra ?? 0;

                var tamanhoProdutos = (decimal)ProdutosPedidoDAO.Instance.TotalMedidasObra(
                    sessao,
                    (uint)dadosAdicionais.IdObra.Value,
                    produto.CodInterno,
                    null)
                                      - tamanhoProduto;

                var produtoObra = ProdutoObraDAO.Instance.GetByCodInterno(
                    sessao,
                    (uint)dadosAdicionais.IdObra.Value,
                    produto.CodInterno);

                var tamanhoMaximoRestante = (decimal)produtoObra.TamanhoMaximo
                                            - tamanhoProdutos
                                            + tamanhoProduto;

                if (produtoObra.TamanhoMaximo > 0 && tamanhoMaximoRestante == 0)
                {
                    tamanhoMaximoRestante = 0.01m;
                }

                return(tamanhoMaximoRestante);
            }

            return(null);
        }
Пример #2
0
        private EstoqueDto ObterEstoque(GDASession sessao, DadosAdicionaisFiltroPedidoDto dadosAdicionais, Produto produto)
        {
            var pedidoProducao = dadosAdicionais.TipoPedido == Data.Model.Pedido.TipoPedidoEnum.Producao;

            var estoqueReal = (decimal)ProdutoLojaDAO.Instance.GetEstoque(
                sessao,
                (uint)dadosAdicionais.IdLoja,
                (uint)produto.IdProd,
                pedidoProducao);

            var bloquearEstoque = !pedidoProducao &&
                                  GrupoProdDAO.Instance.BloquearEstoque(sessao, produto.IdGrupoProd, produto.IdSubgrupoProd);

            var estoqueAtual = bloquearEstoque
                ? estoqueReal
                : 999999999;

            var retorno = new EstoqueDto
            {
                QuantidadeReal       = estoqueReal,
                QuantidadeAtual      = estoqueAtual,
                NumeroBarrasAluminio = null,
                Unidade = "peça(s)",
                ExibirPopupFaltaEstoque = PedidoConfig.DadosPedido.ExibePopupVidrosEstoque &&
                                          ProdutoDAO.Instance.ExibirMensagemEstoque(sessao, produto.IdGrupoProd, produto.IdSubgrupoProd),
            };

            var tipoCalculo = (TipoCalculoGrupoProd)produto.TipoCalculo;

            this.CalcularQuantidadeBarrasAluminio(tipoCalculo, retorno);
            this.VerificarUnidadeEstoqueEM2(tipoCalculo, retorno);

            return(retorno);
        }
Пример #3
0
 private decimal ObterValorTabelaProduto(GDASession sessao, DadosAdicionaisFiltroPedidoDto dadosAdicionais, Produto produto)
 {
     return(ProdutoDAO.Instance.GetValorTabela(
                sessao,
                produto.IdProd,
                (int)dadosAdicionais.TipoEntrega,
                (uint?)dadosAdicionais.Cliente?.Id,
                dadosAdicionais.Cliente?.Revenda ?? false,
                dadosAdicionais.TipoVenda == Data.Model.Pedido.TipoVendaPedido.Reposição,
                (float)dadosAdicionais.PercentualDescontoPorQuantidade,
                dadosAdicionais.IdPedido,
                null,
                null,
                (float)dadosAdicionais.Altura.GetValueOrDefault()));
 }
Пример #4
0
        private IHttpActionResult ValidarPedidoMaoDeObra(Produto produto, DadosAdicionaisFiltroPedidoDto dadosAdicionais)
        {
            if (dadosAdicionais.TipoPedido == Data.Model.Pedido.TipoPedidoEnum.MaoDeObra)
            {
                if (dadosAdicionais.ProdutoAmbiente && produto.IdGrupoProd != (uint)NomeGrupoProd.Vidro)
                {
                    return(this.apiController.ErroValidacao("Apenas produtos do grupo 'Vidro' podem ser usados como peça de vidro."));
                }
                else if (!dadosAdicionais.ProdutoAmbiente && produto.IdGrupoProd != (uint)NomeGrupoProd.MaoDeObra)
                {
                    return(this.apiController.ErroValidacao("Apenas produtos do grupo 'Mão de Obra Beneficiamento' podem ser incluídos nesse pedido."));
                }
            }

            return(null);
        }
Пример #5
0
        private DescontoAcrescimoClienteDto ObterDadosDescontoAcrescimoCliente(GDASession sessao, DadosAdicionaisFiltroPedidoDto dadosAdicionais, Produto produto)
        {
            var descontoAcrescimoCliente = DescontoAcrescimoClienteDAO.Instance.GetDescontoAcrescimo(
                sessao,
                (uint)dadosAdicionais.Cliente.Id,
                produto.IdGrupoProd,
                produto.IdSubgrupoProd,
                produto.IdProd,
                null,
                null);

            return(new DescontoAcrescimoClienteDto
            {
                Percentual = (decimal)(descontoAcrescimoCliente?.PercMultiplicar ?? 1),
                UsarNosBeneficiamentos = descontoAcrescimoCliente?.AplicarBeneficiamentos ?? false,
            });
        }
Пример #6
0
        private bool AlterarProdutoParaObraPedido(GDASession sessao, ProdutoDto produto, DadosAdicionaisFiltroPedidoDto dadosAdicionais)
        {
            if (dadosAdicionais.IdObra > 0)
            {
                var produtoObra = ProdutoObraDAO.Instance.IsProdutoObra(
                    sessao,
                    (uint)dadosAdicionais.IdObra.Value,
                    (uint)produto.Id);

                if (produtoObra.ProdutoValido)
                {
                    produto.PodeEditarValorUnitario = produtoObra.AlterarValorUnitario;
                    produto.ValorUnitario           = produtoObra.ValorUnitProduto;
                    produto.ValorMinimo             = produtoObra.ValorUnitProduto;

                    return(true);
                }
            }

            return(false);
        }
Пример #7
0
        private IHttpActionResult ValidarPedidoObra(GDASession sessao, Produto produto, DadosAdicionaisFiltroPedidoDto dadosAdicionais)
        {
            if (dadosAdicionais.IdObra > 0)
            {
                var tipoSubgrupo = produto.IdSubgrupoProd.HasValue
                    ? SubgrupoProdDAO.Instance.ObtemTipoSubgrupo(sessao, produto.IdProd)
                    : (TipoSubgrupoProd?)null;

                var tiposSubgrupoValidar = new[]
                {
                    TipoSubgrupoProd.VidroLaminado,
                    TipoSubgrupoProd.VidroDuplo,
                };

                if (!ProdutoBaixaEstoqueDAO.Instance.TemProdutoBaixa((uint)produto.IdProd) &&
                    tipoSubgrupo.HasValue &&
                    tiposSubgrupoValidar.Contains(tipoSubgrupo.Value))
                {
                    return(this.apiController.ErroValidacao("Não é possível inserir produtos do tipo de subgrupo vidro duplo ou laminado sem produto de composição em seu cadastro."));
                }

                if (PedidoConfig.DadosPedido.UsarControleNovoObra)
                {
                    var produtoObra = ProdutoObraDAO.Instance.GetByCodInterno(
                        (uint)dadosAdicionais.IdObra.Value,
                        produto.CodInterno);

                    if (produtoObra == null)
                    {
                        return(this.apiController.ErroValidacao("Esse produto não está cadastrado no pagamento antecipado."));
                    }
                }
            }

            return(null);
        }
Пример #8
0
        private IHttpActionResult ValidarPedidoRevenda(GDASession sessao, Produto produto, DadosAdicionaisFiltroPedidoDto dadosAdicionais)
        {
            if (dadosAdicionais.TipoPedido == Data.Model.Pedido.TipoPedidoEnum.Revenda)
            {
                if (produto.IdGrupoProd == (uint)NomeGrupoProd.MaoDeObra)
                {
                    return(this.apiController.ErroValidacao("Produtos do grupo 'Mão de Obra Beneficiamento' estão bloqueados para pedidos comuns."));
                }

                bool subgrupoPermiteItemRevendaNaVenda = produto.IdSubgrupoProd.HasValue &&
                                                         SubgrupoProdDAO.Instance.ObtemPermitirItemRevendaNaVenda(produto.IdSubgrupoProd.Value);

                if (!this.produtoComposicao &&
                    PedidoConfig.DadosPedido.BloquearItensTipoPedido &&
                    !subgrupoPermiteItemRevendaNaVenda &&
                    ((produto.IdGrupoProd == (uint)NomeGrupoProd.Vidro &&
                      !SubgrupoProdDAO.Instance.IsSubgrupoProducao(sessao, produto.IdGrupoProd, produto.IdSubgrupoProd)) ||
                     produto.IdGrupoProd == (uint)NomeGrupoProd.MaoDeObra))
                {
                    return(this.apiController.ErroValidacao("Produtos de venda não podem ser incluídos em um pedido de revenda."));
                }
            }

            return(null);
        }
Пример #9
0
        private IHttpActionResult ValidarPedidoVenda(GDASession sessao, Produto produto, DadosAdicionaisFiltroPedidoDto dadosAdicionais)
        {
            if (dadosAdicionais.TipoPedido == Data.Model.Pedido.TipoPedidoEnum.Venda)
            {
                if (produto.IdGrupoProd == (uint)NomeGrupoProd.MaoDeObra)
                {
                    return(this.apiController.ErroValidacao("Produtos do grupo 'Mão de Obra Beneficiamento' estão bloqueados para pedidos comuns."));
                }

                bool subgrupoPermiteItemRevendaNaVenda = produto.IdSubgrupoProd.HasValue &&
                                                         SubgrupoProdDAO.Instance.ObtemPermitirItemRevendaNaVenda(produto.IdSubgrupoProd.Value);

                if (!this.produtoComposicao &&
                    PedidoConfig.DadosPedido.BloquearItensTipoPedido &&
                    !subgrupoPermiteItemRevendaNaVenda)
                {
                    if ((produto.IdGrupoProd != (uint)NomeGrupoProd.Vidro ||
                         (produto.IdGrupoProd == (uint)NomeGrupoProd.Vidro &&
                          SubgrupoProdDAO.Instance.IsSubgrupoProducao(produto.IdGrupoProd, produto.IdSubgrupoProd))) &&
                        produto.IdGrupoProd != (uint)NomeGrupoProd.MaoDeObra)
                    {
                        return(this.apiController.ErroValidacao("Produtos de revenda não podem ser incluídos em um pedido de venda."));
                    }

                    if (PedidoConfig.DadosPedido.BloquearItensCorEspessura &&
                        !LojaDAO.Instance.GetIgnorarBloquearItensCorEspessura(sessao, (uint)dadosAdicionais.IdLoja) &&
                        produto.IdCorVidro > 0 &&
                        produto.Espessura > 0 &&
                        !ProdutosPedidoDAO.Instance.ValidarSeTodosOsVidrosSaoDaMesmaCorEEspessura(sessao, dadosAdicionais.IdPedido, produto.IdCorVidro, produto.Espessura))
                    {
                        return(this.apiController.ErroValidacao("Todos os produtos devem ter a mesma cor e espessura."));
                    }

                    if (produto.IdGrupoProd == (uint)NomeGrupoProd.Vidro &&
                        !PedidoConfig.TelaCadastro.PermitirInserirVidroComumComComposicao)
                    {
                        foreach (var prodped in ProdutosPedidoDAO.Instance.GetByPedido(sessao, (uint)dadosAdicionais.IdPedido))
                        {
                            var itemRevendaNaVenda = prodped.IdSubgrupoProd > 0 &&
                                                     SubgrupoProdDAO.Instance.ObtemPermitirItemRevendaNaVenda((int)prodped.IdSubgrupoProd);

                            var tipo     = SubgrupoProdDAO.Instance.ObtemTipoSubgrupo(null, (int)prodped.IdProd);
                            var tipoProd = SubgrupoProdDAO.Instance.ObtemTipoSubgrupo(null, (int)produto.IdProd);

                            if (((tipo != TipoSubgrupoProd.VidroDuplo && tipo != TipoSubgrupoProd.VidroLaminado && (tipoProd == TipoSubgrupoProd.VidroDuplo || tipoProd == TipoSubgrupoProd.VidroLaminado)) ||
                                 ((tipo == TipoSubgrupoProd.VidroDuplo || tipo == TipoSubgrupoProd.VidroLaminado) && tipoProd != TipoSubgrupoProd.VidroDuplo && tipoProd != TipoSubgrupoProd.VidroLaminado)) &&
                                !itemRevendaNaVenda)
                            {
                                return(this.apiController.ErroValidacao("Não é possivel inserir produtos do tipo de subgrupo vidro duplo ou laminado junto com produtos comuns e temperados."));
                            }
                        }
                    }
                }
            }

            return(null);
        }
Пример #10
0
        private IHttpActionResult ValidarPedidoMaoDeObraEspecial(GDASession sessao, Produto produto, DadosAdicionaisFiltroPedidoDto dadosAdicionais)
        {
            if (dadosAdicionais.TipoPedido == Data.Model.Pedido.TipoPedidoEnum.MaoDeObraEspecial)
            {
                if (produto.IdGrupoProd != (uint)NomeGrupoProd.Vidro ||
                    SubgrupoProdDAO.Instance.IsSubgrupoProducao(produto.IdGrupoProd, produto.IdSubgrupoProd))
                {
                    return(this.apiController.ErroValidacao("Apenas produtos do grupo 'Vidro', e que não são marcados como 'Produtos para Estoque', podem ser utilizados nesse pedido."));
                }

                if (PedidoConfig.DadosPedido.BloquearItensCorEspessura &&
                    !LojaDAO.Instance.GetIgnorarBloquearItensCorEspessura(sessao, (uint)dadosAdicionais.IdLoja) &&
                    produto.IdCorVidro > 0 &&
                    produto.Espessura > 0 &&
                    !ProdutosPedidoDAO.Instance.ValidarSeTodosOsVidrosSaoDaMesmaCorEEspessura(sessao, dadosAdicionais.IdPedido, produto.IdCorVidro, produto.Espessura))
                {
                    return(this.apiController.ErroValidacao("Todos os produtos devem ter a mesma cor e espessura."));
                }
            }

            return(null);
        }
Пример #11
0
        private IHttpActionResult ValidarPedidoProducao(GDASession sessao, Produto produto, DadosAdicionaisFiltroPedidoDto dadosAdicionais)
        {
            if (dadosAdicionais.TipoPedido == Data.Model.Pedido.TipoPedidoEnum.Producao &&
                !ProdutoPedidoProducaoDAO.Instance.PedidoProducaoGeradoPorPedidoRevenda(sessao, (uint)dadosAdicionais.IdPedido))
            {
                if (produto.IdGrupoProd != (uint)NomeGrupoProd.Vidro ||
                    !SubgrupoProdDAO.Instance.IsSubgrupoProducao(sessao, produto.IdGrupoProd, produto.IdSubgrupoProd))
                {
                    return(this.apiController.ErroValidacao("Apenas produtos do grupo 'Vidro' marcados como 'Produtos para Estoque' podem ser incluídos nesse pedido."));
                }

                if (!ProdutoBaixaEstoqueDAO.Instance.TemProdutoBaixa(sessao, (uint)produto.IdProd))
                {
                    return(this.apiController.ErroValidacao("Esse produto ainda não possui um produto associado. Para usá-lo aqui é preciso que você altere o cadastro desse produto e associe o produto final."));
                }
            }

            return(null);
        }