Exemplo n.º 1
0
        public async Task VendaProduto(Produto produto, int quantidade, double valor)
        {
            // Cria um movimento de compra
            var movimento = CriarMovimentoCompra(produto, quantidade, valor);

            // Realiza tratamentos no produto
            produto.Quantidade -= quantidade;
            produto.PrecoMedio  = GetProdutoPrecoMedioNovo(produto, quantidade, valor);
            _context.Produtos.Update(produto);

            // Cria o titulo inicial
            var titulo = new TituloContas
            {
                Data            = DateTime.Now,
                ProdutoId       = movimento.ProdutoId,
                Saldo           = movimento.Valor.Value,
                Situacao        = Dtos.Enums.TituloContasSituacao.Aberto,
                ValorOriginal   = movimento.Valor.Value,
                CodigoTransacao = movimento.CodigoTransacao
            };
            await _context.TituloContas.AddAsync(titulo);

            // Salva o movimento de compra
            movimento.TituloContaId = titulo.Id;
            await _context.Movimentacoes.AddAsync(movimento);

            await _context.SaveChangesAsync();
        }
Exemplo n.º 2
0
        public async Task SubstituirTitulo(Produto produto, TituloContas titulo)
        {
            var hasCreatedMovimento = await CreateLiquidacaoMovimento(produto, MovimentacaoTipo.liquidacaoIntegral, titulo.Id);

            if (!hasCreatedMovimento)
            {
                return;
            }

            var tituloSubstituto = new TituloContas
            {
                CodigoTransacao = titulo.CodigoTransacao,
                Data            = DateTime.Now,
                Situacao        = Dtos.Enums.TituloContasSituacao.Aberto,
                ProdutoId       = produto.Id,
                Saldo           = titulo.Saldo,
                TipoPagamento   = Dtos.Enums.TituloTipoPagamento.Integral,
                ValorOriginal   = titulo.Saldo
            };
            await _context.TituloContas.AddAsync(tituloSubstituto);

            titulo.Situacao           = Dtos.Enums.TituloContasSituacao.LiquidadoPorSubstituicao;
            titulo.Saldo              = 0;
            titulo.TituloSubstitutoId = tituloSubstituto.Id;
            _context.TituloContas.Update(titulo);
            await _context.SaveChangesAsync();
        }
Exemplo n.º 3
0
        public async Task <IActionResult> PostTituloContas([FromBody] TituloContas tituloContas)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            tituloContas.Situacao = Dtos.Enums.TituloContasSituacao.Aberto;
            var movimento = new Movimento
            {
                Data      = DateTime.Now,
                Documento = new Documento {
                    Tipo = TipoDocumento.Fiscal
                },
                Natureza         = Natureza.dev,
                MovimentacaoTipo = MovimentacaoTipo.sVenda,
                TituloContaId    = tituloContas.Id
                                   // movimento.ProdutoId
                                   // movimento.Quantidade
                                   // movimento.Evento
            };

            _context.Movimentacoes.Add(movimento);
            _context.TituloContas.Add(tituloContas);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetTituloContas", new { id = tituloContas.Id }, tituloContas));
        }
Exemplo n.º 4
0
        public async Task <IActionResult> PutTituloContas([FromRoute] Guid id, [FromBody] TituloContas tituloContas)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != tituloContas.Id)
            {
                return(BadRequest());
            }

            _context.Entry(tituloContas).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!TituloContasExists(id))
                {
                    return(NotFound());
                }
                throw;
            }

            return(NoContent());
        }
Exemplo n.º 5
0
        public async Task LiquidacaoIntegral(Produto produto, TituloContas titulo)
        {
            var hasCreatedMovimento = await CreateLiquidacaoMovimento(produto, MovimentacaoTipo.liquidacaoIntegral, titulo.Id);

            if (!hasCreatedMovimento)
            {
                return;
            }
            titulo.Situacao = Dtos.Enums.TituloContasSituacao.LiquidadoIntegral;
            titulo.Saldo    = 0;
            _context.TituloContas.Update(titulo);
            await _context.SaveChangesAsync();
        }
Exemplo n.º 6
0
        public async Task CancelarCompra(Produto produto, TituloContas titulo)
        {
            var hasCreatedMovimento = await CreateLiquidacaoMovimento(produto, MovimentacaoTipo.cancelamento, titulo.Id);

            if (!hasCreatedMovimento)
            {
                return;
            }
            var movimentoDeAbertura = await _context.Movimentacoes.FirstOrDefaultAsync(m => m.CodigoTransacao == titulo.CodigoTransacao);

            if (movimentoDeAbertura == null)
            {
                return;
            }
            produto.Quantidade += movimentoDeAbertura.Quantidade ?? 0;

            titulo.Situacao = Dtos.Enums.TituloContasSituacao.Cancelado;
            _context.Produtos.Update(produto);
            _context.TituloContas.Update(titulo);
            await _context.SaveChangesAsync();
        }