Exemple #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);
        }
Exemple #2
0
 public virtual IActionResult Cancelar([FromRoute] CompraId id, [FromBody] CancelarCompra model)
 {
     this.CompraService.CancelarCompra(model);
     return(Ok());
 }