public ActionResult cambioCategoria(int idCategoria, int idLocal = -1, int ordenar = 2)
        {
            ChanguitoCompleta completo = new ChanguitoCompleta();

            crearChango(completo, idCategoria, idLocal, ordenar);

            DateTime ProximaEntrea = ApiProductosController.GetNextWeekday();

            completo.proxFecha = ProximaEntrea.ToString("dd/MM/yyyy");

            return(Json(new { lista = completo.changuito }));
        }
        public ActionResult Carrito(int idCategoria = -1, int idLocal = -1)
        {
            ChanguitoCompleta completo = new ChanguitoCompleta();

            crearChango(completo, idCategoria, idLocal);

            DateTime ProximaEntrea = ApiProductosController.GetNextWeekday();

            completo.proxFecha = ProximaEntrea.ToString("dd/MM/yyyy");



            return(View(completo));
        }
        public ChanguitoCompleta crearChango(ChanguitoCompleta completo, int idCategoria = -1, int idLocal = -1, int ordenar = 2)
        {
            TanoNEEntities ctx    = new TanoNEEntities();
            Tandas         ultima = ctx.Tandas.ToList().LastOrDefault();

            if (ultima != null && ultima.fechaCerrado == null)
            {
                completo.locales = ultima.Circuitos.Locales.Where(a => a.activo).OrderBy(a => a.comuna).ToList();
            }

            completo.categorias = ctx.Categorias.Where(a => a.Productos.Any(b => b.activo)).Select(a => new Cat {
                idCategoria = a.idCategoria, nombre = a.nombre
            }).OrderBy(a => a.nombre).ToList();

            if (User.Identity.IsAuthenticated && ultima != null)
            {
                EstadosCompra EstadoEntregado = ctx.EstadosCompra.FirstOrDefault(a => a.codigo == 1);

                Vecinos actual = ctx.Vecinos.FirstOrDefault(a => a.correo == User.Identity.Name);
                completo.totalCompraTandaUsuario = ctx.Compras.Where(a => a.vecinoId == actual.idVecino && a.tandaId == ultima.idTanda && a.estadoId == EstadoEntregado.idEstadoCompra).Count();
            }

            Categorias cat = ctx.Categorias.FirstOrDefault(a => a.nombre == "Bolsones");

            if (idCategoria != -1)
            {
                cat = ctx.Categorias.FirstOrDefault(a => a.idCategoria == idCategoria);
                if (!cat.Productos.Any(a => a.activo))
                {
                    int cate = completo.categorias.ToArray()[0].idCategoria;
                    cat = ctx.Categorias.FirstOrDefault(a => a.idCategoria == cate);
                }
            }


            ViewBag.categoria = idCategoria == -1 ? idCategoria : cat.idCategoria;
            ViewBag.ordenar   = ordenar;

            if (idLocal == -1)
            {
                completo.changuito = ctx.Productos.Where(a => (idCategoria <0 ? a.categoriaId> idCategoria: a.categoriaId == cat.idCategoria) && a.activo).OrderBy(a => a.producto).ToList().Select(a => new Changuito()
                {
                    idProducto  = a.idProducto,
                    stock       = a.stock,
                    nombre      = a.producto + " - " + a.presentacion + (a.marca != null ? "\n" + a.marca : ""),
                    descripcion = a.descripcion == null ? "" : a.descripcion,//.Replace("\n", "<br/>"),
                    precio      = a.Precios.LastOrDefault().precio,
                    comentarios = a.ComentariosProducto.Where(comentarios => comentarios.visible).Count(),
                    vendidos    = a.CompraProducto.GroupBy(b => b.productoId).Select(c => new { Id = c.Key, Cantidad = c.Count() }).Sum(d => d.Cantidad),
                    rating      = a.ComentariosProducto.Where(comentarios => comentarios.visible).Count() == 0 ? 0 : a.ComentariosProducto.Where(comentarios => comentarios.visible).Average(b => b.estrellas)
                });
            }
            else
            {
                completo.changuito = ctx.Productos.Where(a => (idCategoria <0 ? a.categoriaId> idCategoria: a.categoriaId == cat.idCategoria) && a.ProductosLocales.Any(b => b.localId == idLocal) && a.activo).OrderBy(a => a.producto).ToList().Select(a => new Changuito()
                {
                    idProducto  = a.idProducto,
                    stock       = a.stock,
                    nombre      = a.producto + " - " + a.presentacion + (a.marca != null ? "\n" + a.marca : ""),
                    descripcion = a.descripcion == null ? "" : a.descripcion,//.Replace("\n", "<br/>"),
                    precio      = a.Precios.LastOrDefault().precio,
                    comentarios = a.ComentariosProducto.Where(comentarios => comentarios.visible).Count(),
                    vendidos    = a.CompraProducto.GroupBy(b => b.productoId).Select(c => new { Id = c.Key, Cantidad = c.Count() }).Sum(d => d.Cantidad),
                    rating      = a.ComentariosProducto.Where(comentarios => comentarios.visible).Count() == 0 ? 0 : a.ComentariosProducto.Where(comentarios => comentarios.visible).Average(b => b.estrellas)
                });
            }

            switch (ordenar)
            {
            case 1:
                completo.changuito = completo.changuito.OrderBy(a => a.nombre);
                break;

            case 2:
                completo.changuito = completo.changuito.OrderByDescending(a => a.vendidos).ThenByDescending(a => a.precio);
                break;

            case 3:
                completo.changuito = completo.changuito.OrderByDescending(a => a.rating).ThenByDescending(a => a.precio);
                break;
            }



            return(completo);
        }