public ActionResult reclamoTodos()
        {
            string idUser = User.Identity.GetUserId();

            var reclamosAgrupados = db.vista_usuario_reclamo.GroupBy(g => g.id_vista)
                                    .Select(o => new { id_vista = o.Key, count = o.Count() }).ToList();

            List <reclamoPorUsuario> listaReclamos = new List <reclamoPorUsuario>();

            for (int i = 0; i < reclamosAgrupados.Count(); i++)
            {
                // se crea un reclamoPorUsuario por cada vuelta
                reclamoPorUsuario reclamoPorUsuario = new reclamoPorUsuario(); // el constructor va adentro del for :/
                reclamoPorUsuario.id_vista = reclamosAgrupados[i].id_vista;
                reclamoPorUsuario.count    = reclamosAgrupados[i].count;
                // se crea una vista con el idVista de esta vuelta para agregar los datos de la vista al reclamo
                vista vista = db.vista.Where(v => v.idVista == reclamoPorUsuario.id_vista).First();
                reclamoPorUsuario.id_vista_id = vista.idVista;
                reclamoPorUsuario.alumno      = vista.alumno1.nombre + vista.alumno1.apellido;
                reclamoPorUsuario.estado      = vista.estado.descripcion;
                DateTime date = vista.fechaIngreso.Value;
                reclamoPorUsuario.fecha = date.ToString("d");

                listaReclamos.Add(reclamoPorUsuario);
            }
            return(View(listaReclamos));
        }
        public ActionResult reclamoPorUsuario()
        {
            // si no comprobo su dni y se almaceno en una variable session vuelve al index a pedirle su dni
            if (System.Web.HttpContext.Current.Session["sessionStringDni"] as String == null)
            {
                return(RedirectToAction("Index", "Home"));
            }

            string idUser = User.Identity.GetUserId();

            var reclamosAgrupados = db.vista_usuario_reclamo.Where(v => v.id_usuario.Contains(idUser))
                                    .GroupBy(g => g.id_vista)
                                    .Select(o => new { id_vista = o.Key, count = o.Count() }).ToList();

            List <reclamoPorUsuario> listaReclamos = new List <reclamoPorUsuario>();

            /// construye todo el listado de reclamos por usuario
            for (int i = 0; i < reclamosAgrupados.Count(); i++)
            {
                // se crea un reclamoPorUsuario por cada vuelta
                reclamoPorUsuario reclamoPorUsuario = new reclamoPorUsuario(); // el constructor va adentro del for :/
                reclamoPorUsuario.id_vista = reclamosAgrupados[i].id_vista;
                reclamoPorUsuario.count    = reclamosAgrupados[i].count;
                // se crea una vista con el idVista de esta vuelta para agregar los datos de la vista al reclamo
                vista vista = db.vista.Where(v => v.idVista == reclamoPorUsuario.id_vista).First();
                reclamoPorUsuario.id_vista_id = vista.idVista;
                reclamoPorUsuario.alumno      = vista.alumno1.nombre + " " + vista.alumno1.apellido;
                reclamoPorUsuario.estado      = vista.estado.descripcion;
                DateTime date = vista.fechaIngreso.Value;
                reclamoPorUsuario.fecha = date.ToString("d");

                listaReclamos.Add(reclamoPorUsuario);
            }
            return(View(listaReclamos));
        }
        public ActionResult Retirada(int id)
        {
            vista vista = db.vista.Find(id);

            vista.flagRetirada    = true;
            vista.fechaRetirada   = DateTime.Today;
            db.Entry(vista).State = EntityState.Modified;

            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
        public ActionResult DeleteConfirmed(int id)
        {
            vista vista = db.vista.Find(id);

            //db.vista.Remove(vista);
            vista.eliminado = true;

            db.vista.Attach(vista);
            db.Entry(vista).State = EntityState.Modified;
            db.SaveChanges();

            return(RedirectToAction("Index"));
        }
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            vista vista = db.vista.Find(id);

            if (vista == null)
            {
                return(HttpNotFound());
            }
            return(PartialView(vista));
        }
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            vista vista = db.vista.Find(id);

            if (vista == null)
            {
                return(HttpNotFound());
            }
            ViewBag.fk_estado    = new SelectList(db.estado, "id_estado", "descripcion", vista.fk_estado);
            ViewBag.fk_id_alumno = new SelectList(db.alumno, "id_alumno", "dni");
            return(View(vista));
        }
        public ActionResult Edit([Bind(Include = "idVista,ndeserie,alumno,fk_estado,comentarios,fechaIngreso,flagRetirada,fechaRetirada, fk_id_alumno")] vista vista, string ndeserie_nuevo, string marca_nuevo, string modelo_nuevo)
        {
            if (ModelState.IsValid)
            {
                db.Entry(vista).State = EntityState.Modified;
                db.SaveChanges();

                if (ndeserie_nuevo != "")
                { // si se crea una netbook junto a la vista
                    netbook netbook = new netbook();
                    netbook.ndeserie = ndeserie_nuevo;
                    netbook.marca    = marca_nuevo;
                    netbook.modelo   = modelo_nuevo;
                    db.netbook.Add(netbook);
                    db.SaveChanges();

                    alumno alumno = db.alumno.Find(vista.fk_id_alumno);
                    alumno.fk_id_netbook = netbook.id_netbook;
                    db.alumno.Attach(alumno);
                    db.Entry(alumno).Property(x => x.fk_id_netbook).IsModified = true;
                    db.SaveChanges();
                }


                // e almacena la cantidad de ingresos a garantia que tiene esta vista
                int e = db.garantia.SqlQuery("select * from garantia where idVista = @id", new SqlParameter("@id", vista.idVista)).Count();

                //int e2 = Convert.ToInt32(e);
                // si no hay un ingreso ya en garantia de esta vista y esta en estado rota
                if (e == 0 & vista.fk_estado == 2)
                {
                    garantia nuevaGarantia = new garantia();
                    nuevaGarantia.idVista      = vista.idVista;
                    nuevaGarantia.fechaIngreso = DateTime.Now;
                    db.garantia.Add(nuevaGarantia);
                    db.SaveChanges();
                    return(RedirectToAction("Edit", "garantia", new { id = nuevaGarantia.idGarantia }));
                }

                return(RedirectToAction("Index"));
            }

            ViewBag.fk_estado    = new SelectList(db.estado, "id_estado", "descripcion", vista.fk_estado);
            ViewBag.fk_id_alumno = new SelectList(db.alumno, "id_alumno", "dni", vista.fk_id_alumno);

            return(View(vista));
        }
        public ActionResult Create([Bind(Include = "idVista,ndeserie,alumno,fk_estado,comentarios,fechaIngreso,flagRetirada,fechaRetirada,fk_id_alumno")] vista vista, string ndeserie_nuevo, string marca_nuevo, string modelo_nuevo)
        {
            if (ModelState.IsValid)
            {
                if (vista.fechaIngreso == null)
                {
                    vista.fechaIngreso = DateTime.Now; // carga la fecha y hora actual
                }

                vista.fk_id_alumno = Convert.ToInt16(vista.fk_id_alumno);
                db.vista.Add(vista);
                db.SaveChanges();

                if (ndeserie_nuevo != "")   // si se crea una netbook junto a la vista
                {
                    netbook netbook = new netbook();
                    netbook.ndeserie = ndeserie_nuevo;
                    netbook.marca    = marca_nuevo;
                    netbook.modelo   = modelo_nuevo;
                    db.netbook.Add(netbook);
                    db.SaveChanges();

                    alumno alumno = db.alumno.Find(vista.fk_id_alumno);
                    alumno.fk_id_netbook = netbook.id_netbook;
                    db.alumno.Attach(alumno);
                    db.Entry(alumno).Property(x => x.fk_id_netbook).IsModified = true;
                    db.SaveChanges();
                }

                // Si el estado es rota
                if (vista.fk_estado == 2)
                {
                    garantia nuevaGarantia = new garantia();
                    nuevaGarantia.idVista      = vista.idVista;
                    nuevaGarantia.fechaIngreso = DateTime.Now;
                    db.garantia.Add(nuevaGarantia);
                    db.SaveChanges();
                    return(RedirectToAction("Edit", "garantia", new { id = nuevaGarantia.idGarantia }));
                }

                return(RedirectToAction("Index"));
            }
            ViewBag.fk_id_alumno = new SelectList(db.alumno, "id_alumno", "dni", vista.fk_id_alumno);
            ViewBag.fk_estado    = new SelectList(db.estado, "id_estado", "descripcion", vista.fk_estado);
            return(View(vista));
        }