public async Task <IActionResult> ArchivoPlantel(string clavePlantel, bool descargaArchivo = false)
        {
            if (await ExistePlantel(clavePlantel))
            {
                return(View("NoExistePlantel", clavePlantel));
            }


            if (await UsuarioAutorizadoEnPlantel(clavePlantel))
            {
                return(View("UsuarioNoAutorizadoEnPlantel", $"El usuario no esta autorizado en el Plantel {clavePlantel}"));
            }

            var aspiranteEvaluados = _context.Users
                                     .AsNoTracking()
                                     .Include(u => u.Grupo)
                                     .ThenInclude(g => g.Plantel)
                                     .Include(u => u.RespuestasEvaluacion)
                                     .ThenInclude(re => re.RespuestaPregunta)
                                     .ThenInclude(rp => rp.Pregunta)
                                     .Where(u => u.Grupo.ClavePlantel == clavePlantel && u.RespuestasEvaluacion.Count() > 0)
                                     .OrderBy(u => u.Grupo.Nombre)
                                     .ThenBy(u => u.Ficha);

            var resArchivo = new List <FormatoCargaSistemaCOSDAC>();

            foreach (var aspirante in aspiranteEvaluados)
            {
                int folio = 0;
                if (int.TryParse(aspirante.Ficha.Substring(4), out folio))
                {
                    var item = new FormatoCargaSistemaCOSDAC
                    {
                        ColumnaA = folio.ToString("000000"),
                        ColumnaE = aspirante.Edad.ToString("00"),
                    };

                    if (aspirante.Paterno.Length > 12)
                    {
                        item.ColumnaB = aspirante.Paterno.ToUpper().Trim().Substring(0, 12);
                    }
                    else
                    {
                        item.ColumnaB = aspirante.Paterno.ToUpper().Trim();
                    }

                    if (!string.IsNullOrEmpty(aspirante.Materno))
                    {
                        if (aspirante.Materno.Length > 12)
                        {
                            item.ColumnaC = aspirante.Materno.ToUpper().Trim().Substring(0, 12);
                        }
                        else
                        {
                            item.ColumnaC = aspirante.Materno.ToUpper().Trim();
                        }
                    }

                    if (aspirante.Nombre.Length > 12)
                    {
                        item.ColumnaD = aspirante.Nombre.ToUpper().Trim().Substring(0, 12);
                    }
                    else
                    {
                        item.ColumnaD = aspirante.Nombre.ToUpper().Trim();
                    }

                    if (aspirante.NombreSecundaria.Length > 40)
                    {
                        item.ColumnaG = aspirante.NombreSecundaria.ToUpper().Trim().Substring(0, 40);
                    }
                    else
                    {
                        item.ColumnaG = aspirante.NombreSecundaria.ToUpper().Trim();
                    }



                    if (aspirante.Paterno.Length > 12)
                    {
                        aspirante.Paterno = aspirante.Paterno.Substring(0, 12);
                    }
                    if (!string.IsNullOrEmpty(aspirante.Materno))
                    {
                        if (aspirante.Materno.Length > 12)
                        {
                            aspirante.Materno = aspirante.Materno.Substring(0, 12);
                        }
                    }
                    if (aspirante.Nombre.Length > 12)
                    {
                        aspirante.Nombre = aspirante.Nombre.Substring(0, 12);
                    }
                    if (aspirante.NombreSecundaria.Length > 40)
                    {
                        aspirante.NombreSecundaria = aspirante.NombreSecundaria.Substring(0, 40);
                    }


                    string respuestasString = "";
                    for (int i = 1; i < 101; i++)
                    {
                        var resp = aspirante.RespuestasEvaluacion.FirstOrDefault(re => re.AspiranteId == aspirante.Id && re.RespuestaPregunta.Pregunta.NumeroPregunta == i);
                        if (resp == null)
                        {
                            respuestasString += "X";
                        }
                        else
                        {
                            respuestasString += resp.RespuestaPregunta.ClaveCOSDAC;
                        }
                    }
                    item.ColumnaH = respuestasString;

                    switch (aspirante.Genero)
                    {
                    case "M": item.ColumnaF = "1"; break;

                    // case "H": item.ColumnaF = "1"; break;
                    case "F": item.ColumnaF = "2"; break;

                    //case "M": item.ColumnaF = "2"; break;
                    default:
                        item.ColumnaF = "";
                        break;
                    }

                    switch (aspirante.TipoSecundaria)
                    {
                    case "SECUNDARIA GENERAL": item.ColumnaI = "1"; break;

                    case "SECUNDARIA TECNICA": item.ColumnaI = "2"; break;

                    case "SECUNDARIA PARA TRABAJADORES": item.ColumnaI = "3"; break;

                    case "SECUNDARIA COMUNITARIA": item.ColumnaI = "4"; break;

                    case "TELESECUNDARIA": item.ColumnaI = "5"; break;

                    case "OTRA": item.ColumnaI = "6"; break;

                    default:
                        item.ColumnaI = "";
                        break;
                    }

                    switch (aspirante.TipoSostenimientoSecundaria)
                    {
                    case "FEDERAL": item.ColumnaJ = "1"; break;

                    case "ESTATAL": item.ColumnaJ = "2"; break;

                    case "PARTICULAR (RVOE)": item.ColumnaJ = "3"; break;

                    default: item.ColumnaJ = ""; break;
                    }

                    if (aspirante.PromedioSecundaria >= 6m && aspirante.PromedioSecundaria <= 6.5m)
                    {
                        item.ColumnaK = "1";
                    }
                    else if (aspirante.PromedioSecundaria >= 6.6m && aspirante.PromedioSecundaria <= 7m)
                    {
                        item.ColumnaK = "2";
                    }
                    else if (aspirante.PromedioSecundaria >= 7.1m && aspirante.PromedioSecundaria <= 7.5m)
                    {
                        item.ColumnaK = "3";
                    }
                    else if (aspirante.PromedioSecundaria >= 7.6m && aspirante.PromedioSecundaria <= 8m)
                    {
                        item.ColumnaK = "4";
                    }
                    else if (aspirante.PromedioSecundaria >= 8.1m && aspirante.PromedioSecundaria <= 8.5m)
                    {
                        item.ColumnaK = "5";
                    }
                    else if (aspirante.PromedioSecundaria >= 8.6m && aspirante.PromedioSecundaria <= 9m)
                    {
                        item.ColumnaK = "6";
                    }
                    else if (aspirante.PromedioSecundaria >= 9.1m && aspirante.PromedioSecundaria <= 9.5m)
                    {
                        item.ColumnaK = "7";
                    }
                    else if (aspirante.PromedioSecundaria >= 9.6m && aspirante.PromedioSecundaria <= 10m)
                    {
                        item.ColumnaK = "8";
                    }

                    //if (aspirante.PromedioSecundaria >= 6m)
                    //{
                    //    if (aspirante.PromedioSecundaria > 6.5m)
                    //    {
                    //        if (aspirante.PromedioSecundaria > 7m)
                    //        {
                    //            if (aspirante.PromedioSecundaria > 7.5m )
                    //            {
                    //                if (aspirante.PromedioSecundaria > 8m )
                    //                {

                    //                    if (aspirante.PromedioSecundaria > 8.5m )

                    //                        if (aspirante.PromedioSecundaria > 9m)
                    //                        {
                    //                            if (aspirante.PromedioSecundaria > 9.5m && aspirante.PromedioSecundaria <= 10m)
                    //                            {
                    //                                if (aspirante.PromedioSecundaria <= 10m)
                    //                                {
                    //                                    item.ColumnaK = "8";
                    //                                }
                    //                                else
                    //                                {
                    //                                    // Eso quiere decir que la calificacion es mayor que 10, lo cual es un error para la clasificacion
                    //                                    item.ColumnaK = "";
                    //                                }

                    //                            }
                    //                            else
                    //                            {
                    //                                item.ColumnaK = "8";
                    //                            }
                    //                        }
                    //                        else
                    //                        {
                    //                            item.ColumnaK = "7";
                    //                        }


                    //                    else
                    //                    {
                    //                        item.ColumnaK = "6";
                    //                    }
                    //                }
                    //                else
                    //                {
                    //                    item.ColumnaK = "5";
                    //                }
                    //            }
                    //            else
                    //            {
                    //                item.ColumnaK = "4";
                    //            }
                    //        }
                    //        else
                    //        {
                    //            item.ColumnaK = "3";
                    //        }
                    //    }
                    //    else
                    //    {
                    //        item.ColumnaK = "2";
                    //    }

                    //}
                    //else
                    //{
                    //    item.ColumnaK = "1";
                    //}


                    resArchivo.Add(item);
                }
            }

            if (descargaArchivo)
            {
                ExcelPackage package = new ExcelPackage();
                package.Workbook.Properties.Title    = "CECYTECH";
                package.Workbook.Properties.Author   = "I.S.C. Alejandro Torres";
                package.Workbook.Properties.Subject  = "Exportacion de datos para sistema COSDAC";
                package.Workbook.Properties.Keywords = "COSDAC";



                OfficeOpenXmlExtensions.CrearHojaConLista <FormatoCargaSistemaCOSDAC>(ref package, resArchivo, "Empleados");


                return(File(package.GetAsByteArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"archivoCOSDAC_{clavePlantel}_{DateTime.Now.ToString("yyyyMMddhhmm")}.xlsx"));
            }
            else
            {
                ViewBag.clavePlantel = clavePlantel;
                return(View(resArchivo));
            }
        }
        public async Task <IActionResult> DescargarExcel(string clavePlantel = "", string grupo = "")
        {
            clavePlantel = clavePlantel.ToUpper().Trim();

            if (clavePlantel != "TODOS" && await ExistePlantel(clavePlantel))
            {
                return(View("NoExistePlantel", clavePlantel));
            }


            if (clavePlantel != "TODOS" && await UsuarioAutorizadoEnPlantel(clavePlantel))
            {
                return(View("UsuarioNoAutorizadoEnPlantel", $"El usuario no esta autorizado en el Plantel {clavePlantel}"));
            }

            var aspiranteEvaluados = _context.Users
                                     .AsNoTracking()
                                     .Include(u => u.Grupo)
                                     .ThenInclude(g => g.Plantel)
                                     .Include(u => u.RespuestasEvaluacion)
                                     .ThenInclude(re => re.RespuestaPregunta)
                                     .ThenInclude(rp => rp.Pregunta)
                                     .Where(u => ((clavePlantel.ToUpper() == "TODOS" || u.Grupo.ClavePlantel == clavePlantel)) & (grupo.ToUpper() == "TODOS" || u.Grupo.Nombre == grupo) & (grupo.ToUpper() != "TODOS" || u.Grupo.Nombre.ToUpper() != "DOCENTES"))
                                     .OrderBy(u => u.Grupo.Nombre)
                                     .ThenBy(u => u.Ficha);

            var res = aspiranteEvaluados
                      .AsNoTracking()
                      .Select(a => new
            {
                a.UserName,
                a.Paterno,
                a.Materno,
                a.Nombre,
                a.Genero,
                a.Edad,
                a.PromedioSecundaria,
                a.TipoSecundaria,
                a.TipoSostenimientoSecundaria,
                a.Grupo.ClavePlantel,
                Grupo        = a.Grupo.Nombre,
                Correctas    = a.RespuestasEvaluacion.Sum(x => x.RespuestaPregunta.Valor),
                Incorrectas  = a.RespuestasEvaluacion.Count(x => x.RespuestaPregunta.Valor == 0),
                SinContestar = 100 - a.RespuestasEvaluacion.Count(),
                Respuestas   = string.Join("",
                                           _context.Preguntas.AsNoTracking()
                                           .Select(w => new {
                    w.NumeroPregunta,
                    clave = a.RespuestasEvaluacion.Any(x => x.RespuestaPregunta.PreguntaId == w.PreguntaId)
                                ? a.RespuestasEvaluacion.First(x => x.RespuestaPregunta.PreguntaId == w.PreguntaId).RespuestaPregunta.ClaveCOSDAC
                                : "X"
                })
                                           .OrderBy(h => h.NumeroPregunta)
                                           .Select(h => h.clave)


                                           )
            }).ToArray();


            ExcelPackage package = new ExcelPackage();

            package.Workbook.Properties.Title    = "CECYTECH";
            package.Workbook.Properties.Author   = "I.S.C. Alejandro Torres";
            package.Workbook.Properties.Subject  = "Exportacion de datos para simulador CECYTECH PLANEA 2018";
            package.Workbook.Properties.Keywords = "PLANEA";



            OfficeOpenXmlExtensions.CrearHojaConLista(ref package, res, "Empleados");


            return(File(package.GetAsByteArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"archivoCOSDAC_{clavePlantel}_{grupo}_{DateTime.Now.ToString("yyyyMMddhhmm")}.xlsx"));
        }