private async Task <bool> ValidarCarrinhoProdutos(CarrinhoDTO carrinho, IEnumerable <ItemProdutoDTO> produtos) { if (carrinho.Itens.Count != produtos.Count()) { var itensIndisponiveis = carrinho.Itens.Select(c => c.ProdutoId).Except(produtos.Select(p => p.Id)).ToList(); foreach (var itemId in itensIndisponiveis) { var itemCarrinho = carrinho.Itens.FirstOrDefault(c => c.ProdutoId == itemId); AdicionarErroProcessamento($"O item {itemCarrinho.Nome} não está mais disponível no catálogo, o remova do carrinho para prosseguir com a compra"); } return(false); } foreach (var itemCarrinho in carrinho.Itens) { var produtoCatalogo = produtos.FirstOrDefault(p => p.Id == itemCarrinho.ProdutoId); if (produtoCatalogo.Valor != itemCarrinho.Valor) { var msgErro = $"O produto {itemCarrinho.Nome} mudou de valor (de: " + $"{string.Format(CultureInfo.GetCultureInfo("pt-BR"), "{0:C}", itemCarrinho.Valor)} para: " + $"{string.Format(CultureInfo.GetCultureInfo("pt-BR"), "{0:C}", produtoCatalogo.Valor)}) desde que foi adicionado ao carrinho."; AdicionarErroProcessamento(msgErro); var responseRemover = await _carrinhoService.RemoverItemCarrinho(itemCarrinho.ProdutoId); if (ResponsePossuiErros(responseRemover)) { AdicionarErroProcessamento($"Não foi possível remover automaticamente o produto {itemCarrinho.Nome} do seu carrinho, _" + "remova e adicione novamente caso ainda deseje comprar este item"); return(false); } itemCarrinho.Valor = produtoCatalogo.Valor; var responseAdicionar = await _carrinhoService.AdicionarItemCarrinho(itemCarrinho); if (ResponsePossuiErros(responseAdicionar)) { AdicionarErroProcessamento($"Não foi possível atualizar automaticamente o produto {itemCarrinho.Nome} do seu carrinho, _" + "adicione novamente caso ainda deseje comprar este item"); return(false); } LimparErrosProcessamento(); AdicionarErroProcessamento(msgErro + " Atualizamos o valor em seu carrinho, realize a conferência do pedido e se preferir remova o produto"); return(false); } } return(true); }
public async Task <IActionResult> AdicionarItemCarrinho(ItemCarrinhoDTO item) { var produto = await catalogoService.ObterPorId(item.ProdutoId); await ValidarItemCarrinho(produto, item.Quantidade); if (!IsOperacaoValida()) { return(CustomResponse()); } item.Nome = produto.Nome; item.Valor = produto.Valor; item.Imagem = produto.Imagem; return(CustomResponse(await carrinhoService.AdicionarItemCarrinho(item))); }
public async Task <IActionResult> AdicionarItemCarrinho(ItemCarrinhoDTO itemProduto) { var produto = await _catalogoService.ObterPorId(itemProduto.ProdutoId); await ValidarItemCarrinho(produto, itemProduto.Quantidade, true); if (!OperacaoValida()) { return(CustomResponse()); } itemProduto.Nome = produto.Nome; itemProduto.Valor = produto.Valor; itemProduto.Imagem = produto.Imagem; var resposta = await _carrinhoService.AdicionarItemCarrinho(itemProduto); return(CustomResponse(resposta)); }
public async Task <IActionResult> AdicionarItemCarrinho(ItemProdutoViewModel itemProduto) { var produto = await _catalogoService.ObterPorId(itemProduto.ProdutoId); ValidarItemCarrinho(produto, itemProduto.Quantidade); if (!OperacaoValida()) { return(View("Index", await _carrinhoService.ObterCarrinho())); } itemProduto.Nome = produto.Nome; itemProduto.Valor = produto.Valor; itemProduto.Imagem = produto.Imagem; var resposta = await _carrinhoService.AdicionarItemCarrinho(itemProduto); if (ResponsePossuiErros(resposta)) { return(View("Index", await _carrinhoService.ObterCarrinho())); } return(RedirectToAction("Index")); }
public Carrinho AdicionarItemCarrinho(Carrinho carrinho, int codigoProduto) { return(service.AdicionarItemCarrinho(carrinho, codigoProduto)); }