public JsonResult PreencherCarrinho(Controller controller) { //Para simular uma possivel consulta no banco. no caso as Listas receberiam de um query, select.. etc var qntProdutosListadosBanco = ListaProduto.Count(); var qntFilais = ListaFiliais.Count(); //Os Ids de carrinho são gerados de 1 a 10000 pra diminuir a probabilidade de se repetir. var idItemCarrinho = RandomNumber(1, 10000); //Uma verificacao caso seja igual. Como não tem um banco de dados que trave isto por Id, dessa forma diminuo a probabilidade //de dar errado ao quadrado if (ListaCarrinho.Any(a => a.Id == idItemCarrinho)) { idItemCarrinho = RandomNumber(1, 10000); } var idProduto = RandomNumber(1, qntProdutosListadosBanco); var idFilial = RandomNumber(1, qntFilais); var produto = ListaProduto.FirstOrDefault(p => p.Id == idProduto); var itemEstoque = Estoque.FirstOrDefault(x => x.IdProduto == idProduto && x.IdFilial == idFilial); if (itemEstoque.Disponibilidade) { var itemCarrinho = new Carrinho { Id = idItemCarrinho, IdProduto = idProduto, QntComprada = RandomNumber(1, itemEstoque.QntProduto), IdFilial = idFilial }; ListaCarrinho.Add(itemCarrinho); var buscarItemEstoque = Estoque.Where(u => u.Id == itemEstoque.Id && u.IdProduto == produto.Id && u.IdFilial == idFilial); //para facilitar o codigo será considerado o estoque será considerado como se fosse uma prateleira apenas e a medida que o cliente pega o item, //o mesmo é decrementado da quantidade do estoque. foreach (var itemDoEstoque in buscarItemEstoque) { //verificaçao de segurança para que não permitam que sejam "comprados" mais itens do que existam if (itemEstoque.QntProduto >= itemCarrinho.QntComprada) { // subtrai do total do estoque itemDoEstoque.QntProduto = itemEstoque.QntProduto - itemCarrinho.QntComprada; //caso sejam compradas todas as unidades, o produto vira indisponivel if (itemDoEstoque.QntProduto == 0) { itemEstoque.Disponibilidade = false; } var buscarFilial = ListaFiliais.FirstOrDefault(f => f.Id == idFilial); itemEstoque = new FilialEstoque { Id = itemEstoque.Id, IdFilial = itemEstoque.IdFilial, IdProduto = produto.Id, QntProduto = itemDoEstoque.QntProduto, Disponibilidade = itemDoEstoque.QntProduto != 0, NomeFilial = buscarFilial.Nome, NomeProduto = produto.Nome }; EstoqueAtualizado.Add(itemEstoque); } else { var mensagem = "O produto " + $"{produto.Nome}" + " não possui a quantidade escolhida"; controller.ModelState.AddModelError(nameof(Mensagem), mensagem); } var qntEstoqueTeste = Estoque.FirstOrDefault(x => x.IdProduto == idProduto && x.IdFilial == idFilial).QntProduto; } } return(null); }
public async Task <JsonResult> CarregarDados(Controller controller) { int auxId = 0; #region Criando Prudutos //produtos adicionados estaticamente. Lista Produto contem todos os produtos var item = new Produto { Id = 1, Nome = "Carne", Valor = 30.00, }; auxId++; ListaProduto.Add(item); var item2 = new Produto { Id = auxId, Nome = "Shampoo", Valor = 6.00, }; auxId++; ListaProduto.Add(item2); var item3 = new Produto { Id = auxId, Nome = "Arroz", Valor = 6.00, }; auxId++; ListaProduto.Add(item3); var item4 = new Produto { Id = auxId, Nome = "Feijao", Valor = 7.00, }; auxId++; ListaProduto.Add(item4); var item5 = new Produto { Id = auxId, Nome = "Macarrao", Valor = 2.50, }; auxId++; ListaProduto.Add(item5); var biscoito = new Produto { Id = auxId, Nome = "Biscoito", Valor = 1.50, }; auxId++; ListaProduto.Add(biscoito); var caneta = new Produto { Id = auxId, Nome = "Caneta", Valor = 2.50, }; auxId++; ListaProduto.Add(caneta); var copo = new Produto { Id = auxId, Nome = "Copo", Valor = 8.50, }; auxId++; ListaProduto.Add(copo); var garrafa = new Produto { Id = auxId, Nome = "Garrafa", Valor = 2.50, }; auxId++; ListaProduto.Add(garrafa); var refrigerante = new Produto { Id = auxId, Nome = "Refrigerante", Valor = 5.50, }; auxId++; ListaProduto.Add(refrigerante); #endregion Criando Produtos #region Criar as filiais var filial = new Filial { Id = 1, Nome = "São Luís", }; ListaFiliais.Add(filial); var filial2 = new Filial { Id = 2, Nome = "Maiobão", }; ListaFiliais.Add(filial2); var filial3 = new Filial { Id = 3, Nome = "Raposa", }; ListaFiliais.Add(filial3); #endregion #region Criando um estoque foreach (var produto in ListaProduto.ToList()) { //Os produtos so serao adicionados no estoque se estiverem disponiveis. //Eles podem existem no "banco" pórem podem não estar disponiveis atualmente int auxEstoque = 1; //Para cada filial sera adicionado foreach (var filialSelecionada in ListaFiliais.ToList()) { var qntAdicionar = RandomNumber(0, 100); var itemEstoque = new FilialEstoque { Id = auxEstoque, IdFilial = filialSelecionada.Id, IdProduto = produto.Id, QntProduto = qntAdicionar, Disponibilidade = qntAdicionar != 0, NomeFilial = filialSelecionada.Nome, NomeProduto = produto.Nome }; auxEstoque++; Estoque.Add(itemEstoque); } } #endregion return(null); }