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); }
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); }
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())); }
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); }
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, }); }
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); }
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); }
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); }
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); }
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); }
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); }