Пример #1
0
        public async Task <IActionResult> CancelarPedido(Guid codigoTransacao)
        {
            var titulo = _context.TituloContas.FirstOrDefault(t => t.CodigoTransacao == codigoTransacao);

            if (titulo == null)
            {
                return(BadRequest("Título não encontrado!"));
            }
            if (titulo.Situacao == Dtos.Enums.TituloContasSituacao.LiquidadoIntegral)
            {
                return(BadRequest("Título já liquidado!"));
            }
            if (titulo.Situacao == Dtos.Enums.TituloContasSituacao.Cancelado)
            {
                return(BadRequest("Título cancelado!"));
            }
            var produto = await _context.Produtos.FindAsync(titulo.ProdutoId);

            if (produto == null)
            {
                return(BadRequest("Produto não encontrado!"));
            }

            var movimentoVenda = new MovimentoVenda(_context);
            await movimentoVenda.CancelarCompra(produto, titulo);

            return(Ok());
        }
Пример #2
0
        public async Task <IActionResult> LiquidacaoParcial(TituloLiquidacaoParcialInput input)
        {
            var titulo = _context.TituloContas.FirstOrDefault(t => t.CodigoTransacao == input.CodigoTransacao);

            if (titulo == null)
            {
                return(BadRequest("Título não encontrado!"));
            }
            if (titulo.Situacao == Dtos.Enums.TituloContasSituacao.LiquidadoIntegral)
            {
                return(BadRequest("Título já liquidado!"));
            }
            if (titulo.Situacao == Dtos.Enums.TituloContasSituacao.Cancelado)
            {
                return(BadRequest("Título cancelado!"));
            }
            var produto = await _context.Produtos.FindAsync(titulo.ProdutoId);

            if (produto == null)
            {
                return(BadRequest("Produto não encontrado!"));
            }

            if (titulo.Saldo < input.Valor)
            {
                return(BadRequest("Valor maior que o do titulo!"));
            }

            var movimentoVenda = new MovimentoVenda(_context);
            await movimentoVenda.LiquidacaoParcial(produto, titulo, input.Valor);

            return(Ok(produto));
        }
Пример #3
0
        public async Task <IActionResult> PostMovimento([FromBody] MovimentoInput input)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var produtoVinculado = _context.Produtos.Find(input.ProdutoVinculadoId);

            if (produtoVinculado == null)
            {
                return(BadRequest("Produto vinculado não encontrado"));
            }

            if (IsTipoSaida(input) && produtoVinculado.Quantidade < input.Quantidade)
            {
                return(BadRequest("A quantidade do produto " + produtoVinculado.Nome + " é menor que a solicitada"));
            }

            if (IsTipoSaida(input))
            {
                // Saida
                var movimentoVenda = new MovimentoVenda(_context);
                await movimentoVenda.VendaProduto(produtoVinculado, input.Quantidade, input.Valor);

                return(Ok());
            }

            // Cancelamento
            if (input.MovimentacaoTipo == MovimentacaoTipo.cancelamento)
            {
                return(BadRequest("Acesse o método de TituloContas/CancelarPedido"));
            }

            // Entrada
            produtoVinculado.Quantidade += input.Quantidade;
            await _context.Movimentacoes.AddAsync(
                new Movimento
            {
                Data             = DateTime.Now,
                Documento        = new Documento(),
                Natureza         = Natureza.dev,
                ProdutoId        = produtoVinculado.Id,
                Quantidade       = input.Quantidade,
                Valor            = input.Valor,
                IsCongelado      = false,
                CodigoTransacao  = Guid.NewGuid(),
                MovimentacaoTipo = input.MovimentacaoTipo,
            }
                );

            _context.Produtos.Update(produtoVinculado);
            await _context.SaveChangesAsync();

            return(Ok());
        }
Пример #4
0
        public async Task <IActionResult> ComprarProduto(Guid produtoId, int quantidade, double valor)
        {
            var produto = _context.Produtos.Find(produtoId);

            if (produto == null)
            {
                return(BadRequest("Produto não encontrado!"));
            }
            if (quantidade > produto.Quantidade)
            {
                return(BadRequest("A quantidade comprada é maior do que a disponível!"));
            }
            var movimentoVenda = new MovimentoVenda(_context);
            await movimentoVenda.VendaProduto(produto, quantidade, valor);

            return(Ok());
        }