Esempio n. 1
0
 private static bool IsTipoSaida(MovimentoInput input)
 {
     return(input.MovimentacaoTipo == MovimentacaoTipo.sConsumo ||
            input.MovimentacaoTipo == MovimentacaoTipo.sDevolucao ||
            input.MovimentacaoTipo == MovimentacaoTipo.sOrdem ||
            input.MovimentacaoTipo == MovimentacaoTipo.sVenda);
 }
Esempio n. 2
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());
        }