Esempio n. 1
0
        public async Task <CommandResult> Handle(InsertVendaCommand request, CancellationToken cancellationToken)
        {
            if (!request.IsValid())
            {
                return(CommandResultFactory.ValidationErrorResult(request));
            }

            var venda = new Models.Venda(request.Id, request.Data);

            foreach (var item in request.Itens)
            {
                var disco = await _discoQueries.FindById(item.DiscoId);

                if (disco == null)
                {
                    return(CommandResultFactory.ErrorResult(Messages.InvalidOrderItems));
                }

                var cashback = _cashbackQueries.Find(disco.Genero, (DiaSemana)venda.Data.DayOfWeek + 1);

                venda.IncluirItem(disco, cashback);
            }

            venda.CalcularValores();

            await _repository.InsertAsync(venda);

            await _uow.CommitAsync();

            return(CommandResultFactory.SuccessResult(Messages.Sucess));
        }
Esempio n. 2
0
        public async Task <IActionResult> Edit(long id, [Bind("Id,DescricaoVenda,ValorTotal,DataVenda,FormaPagamento,Fechado,ClienteId,FuncionarioId")] Models.Venda venda)
        {
            if (id != venda.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    await _repositoryVenda.UpdateAsync(id, venda);
                }
                catch (System.Exception)
                {
                    if (!VendaExists(venda.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["ClienteId"]     = new SelectList(_repositoryCliente.GetAll(), "Id", "Nome", venda.ClienteId);
            ViewData["FuncionarioId"] = new SelectList(_userManager.GetUserName(User), venda.FuncionarioId);
            return(View(venda));
        }
Esempio n. 3
0
        public async Task <IActionResult> Create([Bind("Id,DescricaoVenda,ValorTotal,DataVenda,FormaPagamento,Fechado,ClienteId,FuncionarioId")] Models.Venda venda)
        {
            if (ModelState.IsValid)
            {
                await _repositoryVenda.InsertAsync(venda);

                return(RedirectToAction("Edit", new { id = venda.Id }));
            }

            ViewData["ClienteId"]     = new SelectList(_repositoryCliente.GetAll(), "Id", "Nome", venda.ClienteId);
            ViewData["FuncionarioId"] = new SelectList(_userManager.GetUserName(User), venda.FuncionarioId);
            return(View(venda));
        }
Esempio n. 4
0
        public async Task InserirAsync(VendaSignature signature)
        {
            var produtos = new List <Produto>();
            var total    = 0.00M;

            if (!signature.ProdutosId.Any())
            {
                throw new Exception("Para a venda, é necessário ao menos informar um produto");
            }


            foreach (var produtoId in signature.ProdutosId)
            {
                var produtoResult = await _produtoGateway.GetAsync(urlProduto, produtoId).ConfigureAwait(false);

                if (!produtoResult.Sucesso)
                {
                    throw new Exception(produtoResult.MessagemErro);
                }

                var estoque = new EstoqueSignature()
                {
                    ProdutoId  = produtoId,
                    Quantidade = 1
                };

                var estoqueResult = await _estoqueGateway.PutAsync(urlEstoque, produtoId, estoque).ConfigureAwait(false);

                if (!estoqueResult.Sucesso)
                {
                    throw new Exception(estoqueResult.MessagemErro);
                }

                produtos.Add(new Produto(produtoResult.ObjectToSerialize.descricao, produtoResult.ObjectToSerialize.preco));

                total += produtoResult.ObjectToSerialize.preco;
            }

            var pagamento = new PagamentoSignature()
            {
                NumeroCartao   = signature.Pagamento.NumeroCartao,
                NumeroParcelas = signature.Pagamento.NumeroParcelas,
                Total          = total
            };

            var response = await _pagamentoGateway.PostAsync(urlPagamento, pagamento).ConfigureAwait(false);

            if (!response.Sucesso)
            {
                throw new Exception(response.MessagemErro);
            }


            var venda = new Models.Venda(new Pagamento(response.ObjectToSerialize.pagamentoId,
                                                       response.ObjectToSerialize.numeroCartao,
                                                       response.ObjectToSerialize.numeroParcelas,
                                                       response.ObjectToSerialize.total));

            venda.AdicionarProdutos(produtos);

            await _vendaRepository.InserirAsync(venda).ConfigureAwait(false);
        }
Esempio n. 5
0
 public async Task InserirAsync(Models.Venda venda)
 {
     await _contexto.Venda.InsertOneAsync(venda);
 }