public async Task <IActionResult> Edit(int id, [Bind("IdAsistencia,Nombre,Profesor,Grupos")] Asistencia_Disponible asistencia_Disponible)
        {
            if (id != asistencia_Disponible.IdAsistencia)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(asistencia_Disponible);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!Asistencia_DisponibleExists(asistencia_Disponible.IdAsistencia))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(asistencia_Disponible));
        }
        public async Task <IActionResult> Create([Bind("IdAsistencia,Nombre,Profesor,Grupos")] Asistencia_Disponible asistencia_Disponible)
        {
            if (ModelState.IsValid)
            {
                _context.Add(asistencia_Disponible);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(asistencia_Disponible));
        }
        public async Task <IActionResult> Descargar(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            Asistencia_Disponible asistencia = await _context.Asistencia_Disponible
                                               .FirstOrDefaultAsync(a => a.IdAsistencia == id);

            var listaSolicitudes = await _context.Solicitud.Where(s => s.Asistencia == asistencia.IdAsistencia)
                                   .OrderByDescending(a => a.Promedio).ToListAsync();

            List <int>    listaPDFs   = new List <int>();
            List <string> listaCarnes = new List <string>();
            string        csv         = "Carné, Nombre, Primer Apellido, Segundo Apellido, Promedio, Cédula, Teléfono 1, Teléfono 2, Correo, Carrera, Nivel, Número " +
                                        "de créditos, Promedia, Cuenta Bancaria, Número de Cuenta, Banco, Asistenca, Tiene Horas Asistente en otra unidad, Cantidad de Horas Asistente, " +
                                        "Tiene Horas Asistente en otra unidad, Cantidad de Horas Asistente\n";

            foreach (var item in listaSolicitudes)
            {
                csv += item.Carne + "," + item.Nombre + "," + item.Apellido1 + "," + item.Apellido2 + "," + item.Promedio + "," +
                       item.Cedula + "," + item.Telefono1 + "," + item.Telefono2 + "," + item.CorreoSolicitante + "," + item.CarreraQueCursa + "," +
                       item.Nivel + "," + item.NumeroDeCreditos + "," + item.Promedio + "," + item.CuentaBancaria + "," + item.Banco + "," + item.NumeroDeCuenta +
                       "," + item.Asistencia + "," + item.TieneHA + "," + item.CantidadHA + "," + item.TieneHE + "," + item.CantidadHE + "\n";
                if (!listaPDFs.Contains((int)item.InformeDeMatricula))
                {
                    listaPDFs.Add((int)item.InformeDeMatricula);
                    listaCarnes.Add(item.Carne);
                }
                if (!listaPDFs.Contains((int)item.ExpedienteAcademico))
                {
                    listaPDFs.Add((int)item.ExpedienteAcademico);
                }
                if (!listaPDFs.Contains((int)item.FotocopiaCedula))
                {
                    listaPDFs.Add((int)item.FotocopiaCedula);
                }
            }

            List <ZipItem> archivos = new List <ZipItem>();
            int            index    = 0;

            for (int i = 0; i < listaPDFs.Count(); i += 3)
            {
                var matricula = await _context.PDF
                                .FirstOrDefaultAsync(m => m.ID_PDF == listaPDFs[i]);

                var expediente = await _context.PDF
                                 .FirstOrDefaultAsync(m => m.ID_PDF == listaPDFs[i + 1]);

                var fotocopia = await _context.PDF
                                .FirstOrDefaultAsync(m => m.ID_PDF == listaPDFs[i + 2]);


                archivos.Add(new ZipItem(listaCarnes[index] + " matricula.pdf", matricula.PDF_File));
                archivos.Add(new ZipItem(listaCarnes[index] + " expediente.pdf", expediente.PDF_File));
                archivos.Add(new ZipItem(listaCarnes[index] + " fotocopia.pdf", fotocopia.PDF_File));
                index++;
            }


            Encoding encoding = Encoding.ASCII;

            archivos.Add(new ZipItem("Lista de solicitudes " + asistencia.Nombre + ".csv", csv, encoding));


            var zipStream = new MemoryStream();

            using (var zip = new ZipArchive(zipStream, ZipArchiveMode.Create, true))
            {
                foreach (var zipItem in archivos)
                {
                    var entry = zip.CreateEntry(zipItem.Name);
                    using (var entryStream = entry.Open())
                    {
                        zipItem.Content.CopyTo(entryStream);
                    }
                }
            }
            zipStream.Position = 0;
            FileStreamResult file = File(zipStream, "application/octet-stream");

            file.FileDownloadName = asistencia.Nombre + ".zip";

            return(file);
        }