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 ActionResult EnregarPedido(int idCompra, bool entregado, int[] ids = null, int[] noUsados = null, string[] vecinxs = null)
        {
            TanoNEEntities ctx    = new TanoNEEntities();
            Vecinos        vecino = ctx.Vecinos.FirstOrDefault(a => a.correo == User.Identity.Name);

            EstadosCompra nopaso     = ctx.EstadosCompra.FirstOrDefault(a => a.codigo == 5);
            EstadosCompra entre      = ctx.EstadosCompra.FirstOrDefault(a => a.codigo == 3);
            EstadosCompra confirmado = ctx.EstadosCompra.FirstOrDefault(a => a.codigo == 2);
            Compras       compra     = ctx.Compras.FirstOrDefault(a => a.idCompra == idCompra && a.estadoId == confirmado.idEstadoCompra);

            if (ids == null)
            {
                compra.EstadosCompra = entregado ? entre : nopaso;
            }
            else
            {
                var productos = compra.CompraProducto;
                for (int x = 0; x < productos.Count; x++)
                {
                    var producto = productos.ElementAt(x);
                    int posicion = Array.IndexOf(ids, producto.productoId);


                    if (noUsados[posicion] > 0)
                    {
                        //Vino menos cantidad
                        if (producto.cantidad - noUsados[posicion] == 0)
                        {
                            ctx.CompraProducto.Remove(producto);
                        }
                        else
                        {
                            producto.cantidad = producto.cantidad - noUsados[posicion];
                        }
                    }
                    if (!string.IsNullOrEmpty(vecinxs[posicion]))
                    {
                        //REUBICADO A UN VEXINX
                        var arrayvecino = vecinxs[posicion].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList().GroupBy(a => a);
                        foreach (var idVecinx in arrayvecino)
                        {
                            Vecinos reubicado    = ctx.Vecinos.FirstOrDefault(a => a.idVecino == idVecinx.Key);
                            Compras vecinoCompra = ctx.Compras.FirstOrDefault(a => a.vecinoId == idVecinx.Key && a.tandaId == compra.tandaId);
                            if (vecinoCompra == null)
                            {
                                vecinoCompra               = new Compras();
                                vecinoCompra.fecha         = ApiProductosController.GetNextWeekday();
                                vecinoCompra.EstadosCompra = entre;
                                vecinoCompra.localId       = compra.localId;
                                vecinoCompra.tandaId       = compra.tandaId;
                                vecinoCompra.Vecinos       = reubicado;

                                ctx.Compras.Add(vecinoCompra);
                            }

                            CompraProducto cp = new CompraProducto();
                            cp.cantidad  = idVecinx.Count();
                            cp.Compras   = vecinoCompra;
                            cp.Costos    = producto.Costos;
                            cp.Precios   = producto.Precios;
                            cp.Productos = ctx.Productos.FirstOrDefault(a => a.idProducto == producto.productoId);

                            vecinoCompra.CompraProducto.Add(cp);
                        }

                        var cantidadTotal = arrayvecino.Sum(a => a.Count());
                        if (producto.cantidad - cantidadTotal == 0)
                        {
                            ctx.CompraProducto.Remove(producto);
                        }
                        else
                        {
                            producto.cantidad = producto.cantidad - cantidadTotal;
                        }
                    }

                    compra.EstadosCompra = entregado ? entre : nopaso;
                }


                /*var productos = compra.CompraProducto;
                 * for (int x = 0; x < ids.Count(); x++)
                 * {
                 *  var prod = productos.FirstOrDefault(a => a.productoId == ids[x]);
                 *
                 *  if (vecinxs[x] != null)
                 *  {
                 *      var arrayvecino = vecinxs[x].Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList().GroupBy( a => a);
                 *      foreach ( var idVecinx in arrayvecino )
                 *      {
                 *          Vecinos reubicado = ctx.Vecinos.FirstOrDefault(a => a.idVecino == idVecinx.Key);
                 *          Compras vecinoCompra = ctx.Compras.FirstOrDefault(a => a.vecinoId == idVecinx.Key && a.tandaId == compra.tandaId);
                 *
                 *          //SOLO SE ESTA LLEVANDO COSAS
                 *          if ( vecinoCompra == null)
                 *          {
                 *              vecinoCompra = new Compras();
                 *              vecinoCompra.fecha = ApiProductosController.GetNextWeekday();
                 *              vecinoCompra.EstadosCompra = entre;
                 *              vecinoCompra.localId = compra.localId;
                 *              vecinoCompra.tandaId = compra.tandaId;
                 *              vecinoCompra.Vecinos = reubicado;
                 *
                 *              prod.cantidad = idVecinx.Count();
                 *              compra.CompraProducto.Remove(prod);
                 *              vecinoCompra.CompraProducto.Add(prod);
                 *              ctx.Compras.Add(vecinoCompra);
                 *
                 *          }
                 *          else
                 *          {
                 *              prod.cantidad = idVecinx.Count();
                 *              compra.CompraProducto.Remove(prod);
                 *              vecinoCompra.CompraProducto.Add(prod);
                 *              ctx.Compras.Add(vecinoCompra);
                 *          }
                 *      }
                 *  }
                 *  else
                 *  {
                 *      prod.cantidad = cantidad[x];
                 *
                 *      if (prod.cantidad == 0)
                 *          ctx.CompraProducto.Remove(prod);
                 *  }
                 *
                 *
                 * }
                 * compra.EstadosCompra = entregado ? entre : nopaso;*/
            }

            ctx.SaveChanges();

            return(Json(new { error = false }, JsonRequestBehavior.DenyGet));
        }
        private void MandarMailConfirmandoCompra(int idCompra)
        {
            DateTime ProximaEntrea = ApiProductosController.GetNextWeekday();


            TanoNEEntities ctx = new TanoNEEntities();

            Compras actual = ctx.Compras.FirstOrDefault(a => a.idCompra == idCompra);

            var    vecino = ctx.AlertasVecinxs.FirstOrDefault(a => a.Vecinos.token != null && a.Alertas.codigo == 3 && a.vecinxId == actual.Vecinos.idVecino);
            string token  = vecino != null ? vecino.Vecinos.token : null;

            if (token != null)
            {
                ApiProductosController.mandarNotificacion("Pedido Confirmado", "Gracias por colaborar con la economía social y solidaria. No te olvides de venir con cambio!", "MISCOMPRAS", new string[] { token });
            }

            string fecha  = ProximaEntrea.ToString("dd/MM/yyyy") + " - " + actual.Locales.horario;
            string nombre = actual.Vecinos.nombres;
            string correo = actual.Vecinos.correo;

            using (MailMessage mail = new MailMessage())
            {
                mail.From = new MailAddress("*****@*****.**", "Economía Social y Solidaria");
                mail.To.Add(correo);
                //mail.To.Add("*****@*****.**");
                mail.Subject      = "Economia Social y Solidaria -- Nuevo Encuentro";
                mail.Body         = "<p>Se han confirmado las siguientes compras</p>";
                mail.BodyEncoding = System.Text.Encoding.UTF8;

                List <Compras> totalCompras = ctx.Compras.Where(a => a.tandaId == actual.Tandas.idTanda && a.vecinoId == actual.Vecinos.idVecino).ToList();
                foreach (var compras in totalCompras)
                {
                    mail.Body += "<p>-------------------</p>";
                    mail.Body += "<p>Compra N° " + (totalCompras.IndexOf(compras) + 1) + "</p>";
                    mail.Body += "<p><b>Lo tenés que pasar a retirar el dia " + fecha + " Por nuestro local en " + actual.Locales.direccion + "</b></p>";

                    decimal total = 0;
                    foreach (CompraProducto prod in compras.CompraProducto)
                    {
                        mail.Body += "<p>" + prod.cantidad + " - " + prod.Productos.producto + " - " + prod.Productos.presentacion + " - " + prod.Productos.marca + " - " + (prod.Precios.precio * prod.cantidad) + "</p>";
                        total     += prod.cantidad * prod.Precios.precio;
                    }
                    mail.Body += "<p>-------------------</p>";
                    mail.Body += "<p>Total : " + total + "</p>";
                    mail.Body += "<br/><br/>";
                }

                mail.Body += "<p>o	Sujeto a disponibilidad de stock</p>";
                mail.Body += "<p>o	No te olvides de venir con cambio. Y con bolsa, changuito o lo que te parezca donde poder llevarte tu compra</p>";
                mail.Body += "<p>o	Pasada el horario de entrega no se aceptan reclamos. Cualcuier problema avisanos con tiempo</p>";
                mail.Body += "<p>o	Tené en cuenta que cada producto que se pide por este medio lo abonamos al productor (con el dinero de los militantes) y no tenemos devolución posible. No nos claves, gracias.</p>";

                mail.Body      += "<p>Muchas gracias! Te esperamos</p>";
                mail.IsBodyHtml = true;

                using (SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587))
                {
                    smtp.Credentials = new NetworkCredential("*****@*****.**", "Frent3355");
                    smtp.EnableSsl   = true;
                    smtp.Send(mail);
                }
            }
        }
        public ActionResult Modificar(int codigo, bool abrir, string fechaVenta, int idTanda = -1)
        {
            TanoNEEntities ctx  = new TanoNEEntities();
            ConfCircuitos  conf = new ConfCircuitos();

            Circuitos    circuito    = ctx.Circuitos.FirstOrDefault(a => a.codigo == codigo);
            Vecinos      responsable = ctx.Vecinos.FirstOrDefault(a => a.correo == User.Identity.Name);
            RolesVecinos rol         = responsable.RolesVecinos.FirstOrDefault(a => a.Roles.codigoRol == 2);

            if (rol == null)
            {
                conf.error = "Su ususario no tiene permisos";
            }
            else
            {
                if (abrir)
                {
                    Tandas ultima = ctx.Tandas.ToList().LastOrDefault();
                    if (ultima != null && ultima.fechaCerrado == null)
                    {
                        conf.error = "No puede haber 2 tandas abiertas";
                    }
                    else
                    {
                        Tandas tanda = new Tandas();
                        tanda.fechaAbierto = DateTime.Now;
                        tanda.fechaVenta   = DateTime.ParseExact(fechaVenta, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                        tanda.Circuitos    = circuito;
                        tanda.Vecinos      = responsable;
                        conf.abrir         = false;
                        conf.circuito      = tanda.Circuitos.nombre;
                        conf.codigo        = tanda.Circuitos.codigo;
                        conf.idTanda       = tanda.idTanda;
                        conf.idCircuito    = tanda.Circuitos.idCircuito;
                        conf.leyenda       = "Circuito Abierto: ";

                        if (!bool.Parse(ConfigurationManager.AppSettings["debug"]))
                        {
                            ApiProductosController.mandarNotificacion("Ya poder pedir!", "Desde hoy tenés la posibilidad de hacer tu pedido", "CARRITO", ctx.AlertasVecinxs.Where(a => a.Vecinos.token != null && a.Alertas.codigo == 3).Select(a => a.Vecinos.token).Distinct().ToArray());
                        }

                        ctx.Tandas.Add(tanda);
                        ctx.SaveChanges();
                    }
                }
                else
                {
                    Tandas ultima = ctx.Tandas.ToList().LastOrDefault();
                    if (ultima != null && ultima.fechaCerrado != null)
                    {
                        conf.error = "Ya se encuentra cerrado";
                    }
                    else
                    {
                        if (idTanda == -1)
                        {
                            conf.error = "No se encontró la tanda";
                        }
                        else
                        {
                            Tandas tanda = ctx.Tandas.FirstOrDefault(a => a.idTanda == idTanda);
                            tanda.fechaCerrado = DateTime.Now;
                            tanda.Vecinos      = responsable;

                            conf.leyenda    = "No hay tanda abierta, último abierto:";
                            conf.abrir      = true;
                            conf.idCircuito = ultima.Circuitos.idCircuito;
                            conf.codigo     = ultima.Circuitos.codigo;

                            //CERRAR TODOS LOS PEDIDOS DE ESTA TANDA

                            EstadosCompra confirmado = ctx.EstadosCompra.FirstOrDefault(a => a.codigo == 2);
                            foreach (var compraEnTanda in tanda.Compras)
                            {
                                compraEnTanda.EstadosCompra = confirmado;
                            }
                            ctx.SaveChanges();

                            //if (!bool.Parse(ConfigurationManager.AppSettings["debug"]))
                            //    MandarMailConfirmandoCompraTodos(tanda);

                            ctx.SaveChanges();
                        }
                    }
                }
            }



            return(RedirectToAction("Tandas", "Tandas"));
        }