Esempio n. 1
0
        //Cancelar
        //Validar se tem estoque que pode ser cancelado
        //Se uma parcela ja for dado baixa n pode, precisa cancelar a baixa
        //Cancelar compra, deve voltar o valor original do produto
        public void CancelarCompra(CancelarCompra model)
        {
            var compraId = new CompraId()
            {
                FornecedorId = model.FornecedorId,
                Modelo       = model.Modelo,
                Numero       = model.Numero,
                Serie        = model.Serie
            };
            var result = this.UserDAO.PasswordSignIn(this.UserRequest.UserNome, model.Senha);

            if (!result.Succeeded)
            {
                throw new BusinessException(new { Senha = "Senha inválido" });
            }

            var compra           = this.GetByID(compraId);
            var dataCancelamento = DateTime.Now;

            foreach (var contaPagar in compra.Parcelas)
            {
                if (contaPagar.DataBaixa != null)
                {
                    throw new BusinessException(new { Numero = "Compra já possuir uma conta a pagar baixada." });
                }

                contaPagar.DataCancelamento          = dataCancelamento;
                contaPagar.UserCancelamento          = UserRequest.Id.ToString();
                contaPagar.JustificativaCancelamento = model.Justificativa;
                this.ContaPagarDAO.Update(contaPagar, false);
            }


            foreach (var produtoCompra in compra.Produtos)
            {
                var produtoDb = this.ProdutoDAO.GetByID(produtoCompra.ProdutoId);

                //(ValorAtual * (Estoque + QntdCompra)) - (QntdCompra * ValorCompra)) / EstoqueSemCompra
                var novoCusto = produtoDb.ValorCompra;
                if (produtoDb.Quantidade - produtoCompra.Quantidade > 0)
                {
                    novoCusto = (produtoDb.ValorCompra * (produtoDb.Quantidade) - (produtoCompra.Quantidade * produtoCompra.ValorUnitario)) / (produtoDb.Quantidade - produtoCompra.Quantidade);
                }

                produtoDb.Quantidade -= produtoCompra.Quantidade;
                produtoDb.ValorCompra = novoCusto;
                if (produtoDb.Quantidade < 0)
                {
                    throw new BusinessException(new { Quantidade = $"Sem Estoque do produto {produtoDb.Nome}" });
                }

                this.ProdutoDAO.Update(produtoDb, false);
            }

            compra.DataCancelamento          = dataCancelamento;
            compra.UserCancelamento          = UserRequest.Id.ToString();
            compra.JustificativaCancelamento = model.Justificativa;
            this.CompraDAO.Update(compra);
        }
Esempio n. 2
0
        public Compra GetByID(CompraId id)
        {
            var compra = this.CompraDAO.GetByID(id);

            compra.Produtos = this.CompraProdutoDAO.ListByCompraId(compra.GetId());
            compra.Parcelas = this.ContaPagarDAO.ListByCompraId(compra.GetId());

            return(compra);
        }
Esempio n. 3
0
        public virtual IActionResult Get([FromRoute] CompraId id)
        {
            var entity = this.CompraService.GetByID(id);

            if (entity == null)
            {
                return(Ok());
            }

            return(Ok(entity));
        }
Esempio n. 4
0
        internal List <CompraProduto> ListByCompraId(CompraId compraId)
        {
            var sql = $@"SELECT compraprodutos.numero, compraprodutos.modelo, compraprodutos.serie, compraprodutos.fornecedorid, compraprodutos.produtoid, 
		                        compraprodutos.quantidade, compraprodutos.valorunitario, compraprodutos.desconto,
		                        compraprodutos.ipi, compraprodutos.custounitario,
		
		                        produtos.id as ""produto.id"", produtos.nome as ""produto.nome"", produtos.unidademedidaid as ""produto.unidademedidaid"", 
                                produtos.referencia as ""produto.referencia"", produtos.marcaid as ""produto.marcaid"", produtos.categoriaid as ""produto.categoriaid"", 
		                        produtos.quantidademinima as ""produto.quantidademinima"", produtos.valorcompra as ""produto.valorcompra"", 
		                        produtos.quantidade as ""produto.quantidade"", produtos.observacao as ""produto.observacao"", produtos.descricao as ""produto.descricao"", 
		                        produtos.situacao as ""produto.situacao"", produtos.datacriacao as ""produto.datacriacao"", produtos.dataatualizacao as ""produto.dataatualizacao"", 
		                        produtos.usercriacao as ""produto.usercriacao"", produtos.useratualizacao as ""produto.useratualizacao"", 
		                        produtos.codigobarras as ""produto.codigobarras"", produtos.valorvenda as ""produto.valorvenda""

                        FROM public.compraprodutos
                            INNER JOIN public.produtos ON produtos.id = compraprodutos.produtoid

                        WHERE Modelo = @Modelo and Serie = @Serie and Numero = @Numero and FornecedorId = @FornecedorId";

            return(this.ExecuteGetAll(sql, compraId));
        }
Esempio n. 5
0
 public virtual IActionResult Cancelar([FromRoute] CompraId id, [FromBody] CancelarCompra model)
 {
     this.CompraService.CancelarCompra(model);
     return(Ok());
 }