public async Task <IActionResult> Finalizar(FinalizarPedidoViewModel model) { Pedido pedido = new Pedido(); var user = await _userManager.GetUserAsync(User); Endereco endereco = _enderecoRepositorio.Enderecos .SingleOrDefault(e => e.EnderecoID == model.EnderecoId); pedido.Endereco = endereco; pedido.Pagamento = model.Pagamento; model.Pagamento.UserId = user.Id; if (_carrinho.QuantidadeTotal() == 0) { TempData["carrinho"] = "Você não escolheu nenhum produto."; return(RedirectToAction(actionName: "Listar", controllerName: "Produtos")); } if (ModelState.IsValid) { pedido.UserId = user.Id; pedido.Lines = _carrinho.Lines.ToArray(); _pedidoRepositorio.Registrar(pedido); return(RedirectToAction(nameof(Completed))); } else { return(View(pedido)); } }
public async Task <IActionResult> FinalizarPedido(string returnUrl = null) { var carrinhoItens = _carrinhoService.GetCarrinhoItens(); var carrinhoItensViewModel = Mapper.Map <IEnumerable <CarrinhoItemViewModel> >(carrinhoItens); var carrinhoViewModel = new CarrinhoViewModel() { CarrinhoItens = carrinhoItensViewModel, CarrinhoTotal = _carrinhoService.GetTotalCarrinho() }; if (carrinhoViewModel.CarrinhoItens.Count() == 0) { return(RedirectToAction("", "Carrinho")); } var user = await _userManager.GetUserAsync(User); if (user == null) { throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); } var ClienteLogado = _context.Pessoas.Include(x => x.Cliente).ThenInclude(y => y.Owner).SingleOrDefault(x => x.Cliente.Owner.Id == user.Id); if (ClienteLogado == null) { return(RedirectToAction("Edit", "Clientes", new { returnUrl = "/Pedido/FinalizarPedido" })); } var formasPgto = _context.FormasPgtos.ToList(); var finalizarPedidoViewModel = new FinalizarPedidoViewModel { CarrinhoItens = carrinhoItensViewModel, Cliente = Mapper.Map <PessoaEditViewModel>(ClienteLogado), CarrinhoTotal = carrinhoViewModel.CarrinhoTotal, FormasPgto = Mapper.Map <IEnumerable <FormaPgtoViewModel> >(formasPgto), }; return(View(finalizarPedidoViewModel)); }
public async Task <IActionResult> FinalizarPedido([ModelBinder(Name = "formaPgtoId")] int formaPgtoId) { var carrinhoItens = _carrinhoService.GetCarrinhoItens(); var carrinhoItensViewModel = Mapper.Map <IEnumerable <CarrinhoItemViewModel> >(carrinhoItens); var carrinhoViewModel = new CarrinhoViewModel() { CarrinhoItens = carrinhoItensViewModel, CarrinhoTotal = _carrinhoService.GetTotalCarrinho() }; if (carrinhoViewModel.CarrinhoItens.Count() == 0) { return(RedirectToAction("", "Carrinho")); } var user = await _userManager.GetUserAsync(User); if (user == null) { throw new ApplicationException($"Unable to load user with ID '{_userManager.GetUserId(User)}'."); } var ClienteLogado = _context.Pessoas.Include(x => x.Cliente).ThenInclude(y => y.Owner).SingleOrDefault(x => x.Cliente.Owner.Id == user.Id); if (ClienteLogado == null) { return(RedirectToAction("Edit", "Clientes", new { returnUrl = "/Pedido/FinalizarPedido" })); } var formasPgto = _context.FormasPgtos.ToList(); var finalizarPedidoViewModel = new FinalizarPedidoViewModel { CarrinhoItens = carrinhoItensViewModel, Cliente = Mapper.Map <PessoaEditViewModel>(ClienteLogado), CarrinhoTotal = carrinhoViewModel.CarrinhoTotal, FormasPgto = Mapper.Map <IEnumerable <FormaPgtoViewModel> >(formasPgto), }; if (formaPgtoId == 0) { ModelState.AddModelError("formaPgtoId", "Forma de Pgto Inválido"); TempData["alert-danger"] = "Selecione a Forma de Pagamento"; return(View(finalizarPedidoViewModel)); } var pedido = new Pedido { Cliente = ClienteLogado, FormaPgtoId = formaPgtoId }; pedido.DataPedido = DateTime.Now; //pedido.PedidoTotal = carrinhoItens.Select(c => c.Quant * c.Produto.Valor).Sum(); foreach (var item in carrinhoItens) { pedido.PedidoItens.Add(new PedidoItem { Quant = item.Quant, Valor = item.Produto.Valor, Produto = item.Produto }); } _context.Pedidos.Update(pedido); _context.SaveChanges(); // Limpa Carrinho _context.CarrinhoItens.RemoveRange(_context.CarrinhoItens.Where(c => c.CarrinhoId == _carrinhoService.CarrinhoSessaoId)); _context.SaveChanges(); TempData["alert-success"] = "Pedido Realizado com Sucesso!"; return(RedirectToAction("PedidoFinalizado")); }