// GET: ControlAsistencia
        public ActionResult Index()
        {
            Employee employee = (Employee)System.Web.HttpContext.Current.Session["_SessionUser"];

            if (employee == null)
            {
                return(RedirectToAction("Index", "Login"));
            }

            ViewBag.Nombre      = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(string.Format("{0} {1} {2}", employee.FirstName.ToLower(), employee.LastName.ToLower(), employee.MiddleName.ToLower()));
            ViewBag.EmailUser   = employee.CompanyEmail;
            ViewBag.ImageUser   = employee.GoogleImage;
            ViewBag.AccessGroup = employee.AreaName;
            ViewBag.Rol         = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(employee.PositionName.ToLower());
            ViewBag.EnumRol     = employee.Rol;
            ViewBag.CardNumber  = employee.CardNumber;

            EmployeeService employeeService = new EmployeeService();
            List <Catalogo> ListaCatalogos  = employeeService.GetCatalogos();

            ViewBag.ListaAreas = ListaCatalogos.Where(i => i.ORIGEN == "AREAS").Select(i => new SelectListItem {
                Value = i.ID.ToString(), Text = i.DESCRIPTION
            }).ToList();
            ViewBag.ListaPuestos = ListaCatalogos.Where(i => i.ORIGEN == "POSITIONS").Select(i => new SelectListItem {
                Value = i.ID.ToString(), Text = i.DESCRIPTION
            }).ToList();
            ViewBag.ListaUblicacion = ListaCatalogos.Where(i => i.ORIGEN == "LOCALIZACION").Select(i => new SelectListItem {
                Value = i.ID.ToString(), Text = i.DESCRIPTION
            }).ToList();
            ViewBag.ListaPatrones = ListaCatalogos.Where(i => i.ORIGEN == "PAYROLL").Select(i => new SelectListItem {
                Value = i.ID.ToString(), Text = i.DESCRIPTION
            }).ToList();
            ViewBag.ListaJefes = employeeService.GetAllJefes().Select(i => new SelectListItem {
                Value = i.BossId.ToString(), Text = i.FullName
            }).ToList();
            ControlAsistenciaSearch model = new ControlAsistenciaSearch();

            model.Rol = employee.Rol;
            model.EmployeeIdConnected   = Convert.ToInt32(employee.EmployeeId);
            ViewBag.enumPeriodoBusqueda = Convert.ToInt32(model.enumPeriodoBusqueda);

            return(View(model));
        }
        public ActionResult Index(ControlAsistenciaSearch model)
        {
            Employee employee = (Employee)System.Web.HttpContext.Current.Session["_SessionUser"];

            if (employee == null)
            {
                return(RedirectToAction("Index", "Login"));
            }

            ViewBag.Nombre            = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(string.Format("{0} {1} {2}", employee.FirstName.ToLower(), employee.LastName.ToLower(), employee.MiddleName.ToLower()));
            ViewBag.EmailUser         = employee.CompanyEmail;
            ViewBag.ImageUser         = employee.GoogleImage;
            ViewBag.AccessGroup       = employee.AreaName;
            ViewBag.Rol               = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(employee.PositionName.ToLower());
            ViewBag.EnumRol           = employee.Rol;
            ViewBag.CardNumber        = employee.CardNumber;
            model.Rol                 = employee.Rol;
            model.EmployeeIdConnected = Convert.ToInt32(employee.EmployeeId);


            Result resultDownloadExcel = new Result();

            EmployeeService employeeService = new EmployeeService();
            List <Catalogo> ListaCatalogos  = employeeService.GetCatalogos();

            ViewBag.ListaAreas = ListaCatalogos.Where(i => i.ORIGEN == "AREAS").Select(i => new SelectListItem {
                Value = i.ID.ToString(), Text = i.DESCRIPTION
            }).ToList();
            ViewBag.ListaPuestos = ListaCatalogos.Where(i => i.ORIGEN == "POSITIONS").Select(i => new SelectListItem {
                Value = i.ID.ToString(), Text = i.DESCRIPTION
            }).ToList();
            ViewBag.ListaUblicacion = ListaCatalogos.Where(i => i.ORIGEN == "LOCALIZACION").Select(i => new SelectListItem {
                Value = i.ID.ToString(), Text = i.DESCRIPTION
            }).ToList();
            ViewBag.ListaPatrones = ListaCatalogos.Where(i => i.ORIGEN == "PAYROLL").Select(i => new SelectListItem {
                Value = i.ID.ToString(), Text = i.DESCRIPTION
            }).ToList();
            ViewBag.ListaJefes = employeeService.GetAllJefes().Select(i => new SelectListItem {
                Value = i.BossId.ToString(), Text = i.FullName
            }).ToList();
            ViewBag.enumPeriodoBusqueda = Convert.ToInt32(model.enumPeriodoBusqueda);

            if (model.enumPeriodoBusqueda != Enumeraciones.enumPeriodoBusqueda.DefinirPeriodo && ModelState.IsValid == false)
            {
                foreach (var modelValue in ModelState.Values)
                {
                    modelValue.Errors.Clear();
                }
            }


            if (ModelState.IsValid)
            {
                ControlAsistenciaService service = new ControlAsistenciaService(model);
                Result result = service.GetDataByFilter();
                if (result.Success)
                {
                    var level     = service._model.ListaEmpleado_Asistenica.Where(g => g.Level > 0).Min(i => i.Level);
                    var dataSoure = service._model.ListaEmpleado_Asistenica.Where(i => i.Level == level).OrderBy(o => o.Area).ThenBy(h => h.Nombre).ToList();
                    //var dataSoure = service._model.ListaEmpleado_Asistenica.OrderBy(o => o.Area).ThenBy(h => h.Nombre).ToList();
                    if (dataSoure.Count() == 0)
                    {
                        TempData["AlertMessage"] = "No se encontraron registros";
                    }
                    ViewBag.menusList = dataSoure;

                    if (model.ClickOnButton == "EnviarReporteSemanal")
                    {
                        service.EnviaReporteSemanalPorArea(Server.MapPath("~/EnviarReportes/"));
                    }
                    if (model.ClickOnButton == "DescargarReporte")
                    {
                        List <string> LstArchivosPorArea = new List <string>();
                        string        ServerPath         = Server.MapPath("~/ReporteAsistencia/");
                        string        OutputFile         = string.Empty;
                        service.BorrarArchivos(ServerPath);
                        resultDownloadExcel = service.DescargarExcelReporteAsistencia(ServerPath, out LstArchivosPorArea);
                        if (resultDownloadExcel.Success)
                        {
                            if (LstArchivosPorArea.Count() > 0)
                            {
                                if (LstArchivosPorArea.Count() == 1)
                                {
                                    foreach (string archivo in LstArchivosPorArea)
                                    {
                                        string filePath       = ServerPath;
                                        string targetFileName = Path.GetFileName(archivo);
                                        Response.ClearContent();
                                        Response.Clear();
                                        Response.ContentType = "application/vnd.ms-excel";
                                        Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", targetFileName));
                                        Response.BinaryWrite(System.IO.File.ReadAllBytes(System.IO.Path.Combine(filePath, targetFileName)));
                                        Response.Flush();
                                        Response.End();
                                    }
                                }
                                else
                                {
                                    string CompressDirectory = Server.MapPath("~/Comprimidos/");
                                    //service.BorrarArchivos(ServerPath);
                                    var resultZip = service.Compress(ServerPath, CompressDirectory, out OutputFile);
                                    if (resultZip.Success)
                                    {
                                        string   filename   = Path.GetFileName(OutputFile);
                                        string   serverpath = Server.MapPath($"~/Comprimidos/{filename}");
                                        FileInfo file       = new FileInfo(serverpath);
                                        Response.Clear();
                                        Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
                                        Response.AddHeader("Content-Length", file.Length.ToString());
                                        Response.ContentType = "application/zip";
                                        Response.WriteFile(file.FullName);
                                        Response.Flush();
                                        Response.End();
                                    }
                                }
                            }
                            return(View(model));
                        }
                    }
                }
                return(View(service._model));
            }
            else
            {
                return(View(model));
            }
        }