Beispiel #1
0
        public async Task <ResultadoBase <bool> > SolicitarRegistroOrdemCompra(OrdemCompraDTO ordemCompraDTO)
        {
            var novaOrdemCompra = ordemCompraDTO.Mapear();

            if (!novaOrdemCompra.Valida())
            {
                return new ResultadoBase <bool>()
                       {
                           CodigoErro = MensagemErro.OMS_010, Resultado = false, TipoErro = TipoErro.Validacao
                       }
            }
            ;

            var cliente = await _clienteRepositorio.ConsultarPorId(novaOrdemCompra.IdCliente);

            if (cliente == null)
            {
                return new ResultadoBase <bool>()
                       {
                           CodigoErro = MensagemErro.OMS_001, Resultado = false, TipoErro = TipoErro.Validacao
                       }
            }
            ;

            var produto = await _produtoRepositorio.ConsultarPorId(novaOrdemCompra.IdProduto);

            if (produto == null)
            {
                return new ResultadoBase <bool>()
                       {
                           CodigoErro = MensagemErro.OMS_002, Resultado = false, TipoErro = TipoErro.Validacao
                       }
            }
            ;

            var contaCorrente = await _contaCorrenteRepositorio.ObterPorId(novaOrdemCompra.IdCliente);

            if (contaCorrente == null)
            {
                return new ResultadoBase <bool>()
                       {
                           CodigoErro = MensagemErro.OMS_003, Resultado = false, TipoErro = TipoErro.Validacao
                       }
            }
            ;

            var resultado = await _ordemCompraDominoServico.PermiteRegistroDeOrdemCompra(cliente, produto, contaCorrente, novaOrdemCompra);

            if (resultado.Resultado)
            {
                //faz a solictacao de registro
                await _mensageriaRepoSitorio.EnviarMensagem <OrdemCompra>(TopicosMensageria.SolicitacaoRegistroOrdem, novaOrdemCompra);
            }


            return(resultado);
        }
    }
}
        public async Task <IActionResult> GetById([FromRoute] int id)
        {
            var clientes = await _produtoRepositorio.ConsultarPorId(
                id).ConfigureAwait(false);

            if (clientes == null)
            {
                return(NoContent());
            }

            return(Ok(clientes));
        }
Beispiel #3
0
        public async Task <string> RegistrarOrdemCompra(string clienteId, int produtoId, int quantidadeCompra)
        {
            var cliente = await _clienteRepositorio.ConsultarPorId(clienteId).ConfigureAwait(false);

            var produto = await _produtoRepositorio.ConsultarPorId(produtoId).ConfigureAwait(false);

            if (quantidadeCompra <= 0)
            {
                throw new InvalidOperationException("Quantidade solicitada não suficiente para compra.");
            }

            if (produto.Estoque <= 0)
            {
                throw new InvalidOperationException("Quantidade em estoque não suficiente para compra.");
            }

            var valorOperacao = Math.Round(decimal.Parse(produto.PrecoUnitario) * quantidadeCompra, 2);

            if (valorOperacao > cliente.Saldo)
            {
                throw new InvalidOperationException("Cliente não possui saldo suficiente para compra.");
            }

            if (Math.Round(quantidadeCompra * decimal.Parse(produto.PrecoUnitario), 2) < produto.ValorMinimoDeCompra)
            {
                throw new InvalidOperationException("Quantidade mínima não atendida para compra.");
            }

            if (valorOperacao > produto.Estoque)
            {
                throw new InvalidOperationException("Quantidade em estoque não suficiente para compra.");
            }

            var novaOrdemDeCompra = new OrdemCompra
            {
                ClienteId            = cliente.Id,
                ProdutoId            = produto.Id,
                DataOperacao         = DateTime.Now,
                PrecoUnitario        = decimal.Parse(produto.PrecoUnitario),
                ValorOperacao        = valorOperacao,
                QuantidadeSolicitada = quantidadeCompra
            };

            return(await _ordemCompraRepositorio.RegistrarOrdemCompra(novaOrdemDeCompra).ConfigureAwait(false));
        }
        public async Task <ActionResult <Produto> > GetById([FromRoute] string id)
        {
            try
            {
                var produto = await _produtoRepositorio.ConsultarPorId(int.Parse(id)).ConfigureAwait(false);

                if (produto == null)
                {
                    return(NotFound());
                }

                return(Ok(produto));
            }
            catch (Exception ex)
            {
                _logger.Log($"Erro ao obter produto. {ex}", EventLevel.Error);
                throw; //deixar subir o erro para retornar 500
            }
        }
Beispiel #5
0
        public async Task <string> RegistrarOrdemCompra(string clienteId, int produtoId, int quantidadeCompra)
        {
            var produto = await _produtoRepositorio.ConsultarPorId(produtoId).ConfigureAwait(false);

            await ValidarRequisitosOrdemCompra(clienteId, produto, quantidadeCompra).ConfigureAwait(false);

            var novaOrdemDeCompra = new OrdemCompra
            {
                ClienteId            = clienteId,
                ProdutoId            = produtoId,
                DataOperacao         = DateTime.Now,
                PrecoUnitario        = produto.PrecoUnitario,
                ValorOperacao        = CalcularValorTotalDaCompra(produto.PrecoUnitario, quantidadeCompra),
                QuantidadeSolicitada = quantidadeCompra
            };

            var id = await _ordemCompraRepositorio.RegistrarOrdemCompra(novaOrdemDeCompra).ConfigureAwait(false);

            return(id);
        }
        public async Task <Result> RegistrarOrdemCompra(int clienteId, int produtoId, int quantidadeCompra)

        {
            var cliente = await _clienteRepositorio.ConsultarPorId(clienteId).ConfigureAwait(false);

            var produto = await _produtoRepositorio.ConsultarPorId(produtoId).ConfigureAwait(false);

            var novaOrdemDeCompra = OrdemCompra.CriarSolicitacaoOrdemDeCompra(
                produto,
                cliente,
                quantidadeCompra);

            if (!novaOrdemDeCompra.EhValido)
            {
                return(Result <string>
                       .Fail(novaOrdemDeCompra
                             .Notifications
                             .Select(s => s.Message)));
            }

            var id = await _ordemCompraRepositorio.RegistrarOrdemCompra(novaOrdemDeCompra).ConfigureAwait(false);

            return(Result <Guid> .Ok(id));
        }
 public async Task <Produto> ConsultarPorId(int id)
 {
     return(await _produtoRepositorio.ConsultarPorId(id));
 }
 public async Task <Produto> ConsultarPorId(int idProduto)
 {
     return(await _produtoRepositorio.ConsultarPorId(idProduto).ConfigureAwait(false));
 }