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)); }
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)); }
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)); }
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); }
public async Task InserirAsync(Models.Venda venda) { await _contexto.Venda.InsertOneAsync(venda); }