//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); }
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); }
public virtual IActionResult Get([FromRoute] CompraId id) { var entity = this.CompraService.GetByID(id); if (entity == null) { return(Ok()); } return(Ok(entity)); }
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)); }
public virtual IActionResult Cancelar([FromRoute] CompraId id, [FromBody] CancelarCompra model) { this.CompraService.CancelarCompra(model); return(Ok()); }