Esempio n. 1
0
        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);
        }