public async Task <ActionResult> SaveInformation(int id, int rol, int[] personal)
        {
            try
            {
                databaseAYT03 dbayt03 = new databaseAYT03();
                var           message = "fallo";

                String query_delete_personal_cargo = "DELETE FROM ITNT_Personal_Cargos WHERE IdUsuarioPrimario = " + id;
                var    delete = await dbayt03.query(query_delete_personal_cargo);

                foreach (var p in personal)
                {
                    String query_insert_personal = "INSERT INTO ITNT_Personal_Cargos VALUES (" + id + "," + p + ")";
                    var    personal_cargo        = await dbayt03.queryInsert(query_insert_personal);
                }

                String query = "UPDATE ITNT_Usuarios SET IdRol = " + rol + " WHERE Id = " + id;
                var    a     = await dbayt03.queryInsert(query);

                if (a >= 1)
                {
                    message = "exito";
                }

                return(Json(new { message }));
            }
            catch
            {
                return(Json("s"));
            }
        }
        public async Task <ActionResult> GetUsuarios()
        {
            databaseAYT03 dbayt03 = new databaseAYT03();

            //obtiene información general de la lista de usuarios
            String query_usuarios = "SELECT " +
                                    "u.Id, " +
                                    "u.Usuario, " +
                                    "u.Nombre, " +
                                    "ISNULL(r.Nombre, 'NA') AS Rol " +
                                    "FROM ITNT_Usuarios u " +
                                    "LEFT JOIN ITNT_Roles r ON u.IdRol = r.Id "; //+
            //"WHERE Status = 1 "; //Activo
            SqlDataReader reader = (SqlDataReader)await dbayt03.query(query_usuarios);

            List <UsuariosViewModel> usuarios = new List <UsuariosViewModel>();

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    usuarios.Add(new UsuariosViewModel
                    {
                        Id      = Int32.Parse(reader["Id"].ToString()),
                        Usuario = reader["Usuario"].ToString(),
                        Nombre  = reader["Nombre"].ToString(),
                        Rol     = reader["Rol"].ToString()
                    });
                }
                reader.Close();
            }

            return(Json(new { data = usuarios }));
        }
        public async Task <ActionResult> GuardarSubmodulo(string accion, int submodulo, string nombre, string descripcion, int modulo, string url, int status)
        {
            try
            {
                var           message = "fallo";
                databaseAYT03 dbayt03 = new databaseAYT03();

                if (accion == "actualizar")
                {
                    String query = "UPDATE ITNT_Submodulos SET IdModulo = " + modulo + ", Nombre = '" + nombre + "', Descripcion = '" + descripcion + "', Url = '" + url + "', Status = " + status + " WHERE Id = " + submodulo;
                    var    a     = await dbayt03.queryInsert(query);

                    if (a >= 1)
                    {
                        message = "exito";
                    }
                }
                else
                {
                    String query_add = "INSERT INTO ITNT_Submodulos VALUES(" + modulo + ", '" + nombre + "', '" + descripcion + "', '" + url + "', " + status + ")";
                    var    add       = await dbayt03.queryInsert(query_add);

                    if (add >= 1)
                    {
                        message = "exito";
                    }
                }
                return(Json(new { message }));
                //return RedirectToAction(nameof(Index));
            }
            catch
            {
                return(View());
            }
        }
        public async Task <ActionResult> GetModulos()
        {
            databaseAYT03 dbayt03 = new databaseAYT03();
            //obtiene información general de Módulo
            String query_modulos = "SELECT " +
                                   "m.Id, " +
                                   "mn.Nombre AS Menu, " +
                                   "m.Nombre, " +
                                   "m.Descripcion, " +
                                   "m.Status " +
                                   "FROM ITNT_Modulos m " +
                                   "LEFT JOIN ITNT_Menu mn ON m.IdMenu = mn.Id ";// +
            //"WHERE mn.Status = 1 AND m.Status = 1";
            SqlDataReader reader_modulos = (SqlDataReader)await dbayt03.query(query_modulos);

            List <ModulosViewModel> modulos = new List <ModulosViewModel>();

            if (reader_modulos.HasRows)
            {
                while (reader_modulos.Read())
                {
                    modulos.Add(new ModulosViewModel
                    {
                        Id          = Int32.Parse(reader_modulos["Id"].ToString()),
                        Menu        = reader_modulos["Menu"].ToString(),
                        Nombre      = reader_modulos["Nombre"].ToString(),
                        Descripcion = reader_modulos["Descripcion"].ToString(),
                        Status      = Int32.Parse(reader_modulos["Status"].ToString())
                    });
                }
                reader_modulos.Close();
            }
            return(Json(new { data = modulos }));
        }
        public async Task <ActionResult> Delete(int rol)
        {
            try
            {
                databaseAYT03 dbayt03 = new databaseAYT03();

                String        query_delete = "DELETE FROM ITNT_Roles WHERE Id = " + rol;
                SqlDataReader reader       = (SqlDataReader)await dbayt03.query(query_delete);

                String delete_rol_menu = "DELETE FROM ITNT_Rol_Menu WHERE IdRol = " + rol;
                return(Json(rol));
            }
            catch
            {
                return(View());
            }
        }
        public async Task <ActionResult> GuardarModulo(string accion, int modulo, string nombre, string descripcion, int menu, int status)
        {
            try
            {
                var message = "fallo";

                /*var accion = collection["accion"];
                *  var id_modulo = collection["modulo"];
                *  var nombre = collection["nombre"];
                *  var descripcion = collection["descripcion"];
                *  var menu = collection["menu"];
                *  var status = collection["status"];*/

                databaseAYT03 dbayt03 = new databaseAYT03();

                if (accion == "actualizar")
                {
                    String query = "UPDATE ITNT_Modulos SET IdMenu = " + menu + ", Nombre = '" + nombre + "', Descripcion = '" + descripcion + "', Status = " + status + " WHERE Id = " + modulo;
                    var    a     = await dbayt03.queryInsert(query);

                    if (a >= 1)
                    {
                        message = "exito";
                    }
                }
                else
                {
                    String query_add = "INSERT INTO ITNT_Modulos VALUES(" + menu + ", '" + nombre + "', '" + descripcion + "', " + status + ")";
                    var    add       = await dbayt03.queryInsert(query_add);

                    if (add >= 1)
                    {
                        message = "exito";
                    }
                }


                return(Json(new { message }));
                //return RedirectToAction(nameof(Index));
            }
            catch
            {
                return(View());
            }
        }
        public async Task <ActionResult> Edit(string accion, string rol, string nombre_rol, int status_rol, string[] rol_menu)
        {
            try
            {
                databaseAYT03 dbayt03 = new databaseAYT03();
                var           message = "fallo";

                String query_delete_menu = "DELETE FROM ITNT_Rol_Menu WHERE IdRol = " + rol;
                var    delete            = await dbayt03.query(query_delete_menu);

                foreach (var m in rol_menu)
                {
                    String query_insert_rol_menu = "INSERT INTO ITNT_Rol_Menu VALUES (" + rol + "," + m + ")";
                    var    rol_menu_             = await dbayt03.queryInsert(query_insert_rol_menu);
                }


                if (accion == "actualizar")
                {
                    String query = "UPDATE ITNT_Roles SET Nombre = '" + nombre_rol + "', Status = " + status_rol + " WHERE Id = " + rol;
                    var    a     = await dbayt03.queryInsert(query);

                    if (a >= 1)
                    {
                        message = "exito";
                    }
                }
                else
                {
                    String query_add = "INSERT INTO ITNT_Roles VALUES ('" + nombre_rol + "', " + status_rol + ")";
                    var    add       = await dbayt03.queryInsert(query_add);

                    if (add >= 1)
                    {
                        message = "exito";
                    }
                }

                return(Json(new { message }));
            }
            catch
            {
                return(View());
            }
        }
        public async Task <ActionResult> GetRoles()
        {
            databaseAYT03 dbayt03 = new databaseAYT03();

            //obtiene información general de Roles
            String        query_roles  = "SELECT * FROM ITNT_Roles";//" WHERE Status = 1";
            SqlDataReader reader_roles = (SqlDataReader)await dbayt03.query(query_roles);

            List <RolViewModel> roles = new List <RolViewModel>();

            if (reader_roles.HasRows)
            {
                while (reader_roles.Read())
                {
                    var id = Int32.Parse(reader_roles["Id"].ToString());

                    String        query_rol_menu  = "SELECT rm.IdMenu, m.Nombre FROM ITNT_Rol_Menu rm LEFT JOIN ITNT_Menu m ON rm.IdMenu = m.Id WHERE rm.IdRol = " + id;
                    SqlDataReader reader_rol_menu = (SqlDataReader)await dbayt03.query(query_rol_menu);

                    List <RolMenuViewModel> rol_menu = new List <RolMenuViewModel>();
                    if (reader_rol_menu.HasRows)
                    {
                        while (reader_rol_menu.Read())
                        {
                            rol_menu.Add(new RolMenuViewModel
                            {
                                IdMenu = Int32.Parse(reader_rol_menu["IdMenu"].ToString()),
                                Nombre = reader_rol_menu["Nombre"].ToString()
                            });
                        }
                    }

                    roles.Add(new RolViewModel
                    {
                        Id     = id,
                        Nombre = reader_roles["Nombre"].ToString(),
                        Status = Int32.Parse(reader_roles["Status"].ToString()),
                        Menus  = rol_menu
                    });
                }
                reader_roles.Close();
            }
            return(Json(new { data = roles }));
        }
        public async Task <ActionResult> GetModulo()
        {
            databaseAYT03 dbayt03 = new databaseAYT03();

            String        query  = "SELECT * FROM ITNT_Modulos WHERE Status = 1";
            SqlDataReader reader = (SqlDataReader)await dbayt03.query(query);

            List <ModulosViewModel> menu = new List <ModulosViewModel>();

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    menu.Add(new ModulosViewModel
                    {
                        Id     = Int32.Parse(reader["Id"].ToString()),
                        Nombre = reader["Nombre"].ToString(),
                    });
                }
                reader.Close();
            }
            return(Json(new { data = menu }));
        }
        public async Task <ActionResult> GetSubModulos()
        {
            databaseAYT03 dbayt03 = new databaseAYT03();
            //obtiene información general de Submódulo s
            String query_submodulos = "SELECT " +
                                      "s.Id, " +
                                      "m.Nombre AS Modulo, " +
                                      "s.Nombre,  " +
                                      "s.Descripcion, " +
                                      "s.Url, " +
                                      "s.Status " +
                                      "FROM ITNT_Submodulos s " +
                                      "LEFT JOIN ITNT_Modulos m ON s.IdModulo = m.Id "; //+
            //"WHERE s.Status = 1 AND m.Status = 1";
            SqlDataReader reader_submodulos = (SqlDataReader)await dbayt03.query(query_submodulos);


            List <SubmodulosViewModel> submodulos = new List <SubmodulosViewModel>();

            if (reader_submodulos.HasRows)
            {
                while (reader_submodulos.Read())
                {
                    submodulos.Add(new SubmodulosViewModel
                    {
                        Id          = Int32.Parse(reader_submodulos["Id"].ToString()),
                        Modulo      = reader_submodulos["Modulo"].ToString(),
                        Nombre      = reader_submodulos["Nombre"].ToString(),
                        Descripcion = reader_submodulos["Descripcion"].ToString(),
                        Url         = reader_submodulos["Url"].ToString(),
                        Status      = Int32.Parse(reader_submodulos["Status"].ToString())
                    });
                }
                reader_submodulos.Close();
            }
            return(Json(new { data = submodulos }));
        }
        public async Task <ActionResult> GetMenu()
        {
            databaseAYT03 dbayt03 = new databaseAYT03();
            //obtiene información general de los Menú
            String        query  = "SELECT * FROM ITNT_Menu";
            SqlDataReader reader = (SqlDataReader)await dbayt03.query(query);

            List <MenuViewModel> menu = new List <MenuViewModel>();

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    menu.Add(new MenuViewModel
                    {
                        Id     = Int32.Parse(reader["Id"].ToString()),
                        Nombre = reader["Nombre"].ToString(),
                        Status = Int32.Parse(reader["Status"].ToString())
                    });
                }
                reader.Close();
            }
            return(Json(new { data = menu }));
        }
        public async Task <ActionResult> Index()
        {
            databaseAYT03 dbayt03 = new databaseAYT03();
            databaseRH    dbRH    = new databaseRH();
            var           month   = 2;
            var           year    = 2020;
            //obtiene tareas
            String query_usuarios = "SELECT"
                                    + " ISNULL(o.Name, 'No Asignado') AS Tecnico, "
                                    + " COUNT(*) AS Total, "
                                    + " COUNT(CASE WHEN StatusType = 'open' THEN 1 END) AS Abiertas, "
                                    + " COUNT(CASE WHEN StatusType = 'closed' THEN 1 END) AS Cerradas "
                                    + " INTO ##T1 "
                                    + " FROM Tasks t "
                                    + " FULL JOIN Owners o on t.IdTask = o.IdTask "
                                    + " WHERE "
                                    + " MONTH(EndDate) = " + month + " and "
                                    + " YEAR(EndDate) = " + year
                                    + " GROUP BY o.Name "
                                    + " SELECT "
                                    + " ISNULL(o.Name, 'No Asignado') AS Tecnico, "
                                    + " COUNT(*) AS Vencidas "
                                    + " INTO ##T2 "
                                    + " FROM Tasks t "
                                    + " FULL JOIN Owners o on t.IdTask = o.IdTask "
                                    + " WHERE "
                                    + " StatusType = 'closed' and "
                                    + " StartDate != '1900-01-01' and "
                                    + " EndDate != '1900-01-01' and "
                                    + " CompletedDate > EndDate and "
                                    + " MONTH(EndDate) = " + month + " and "
                                    + " YEAR(EndDate) = " + year
                                    + " GROUP BY o.Name "
                                    + " SELECT "
                                    + " ISNULL(o.Name, 'No Asignado') AS Tecnico, "
                                    + " COUNT(*) AS ATiempo "
                                    + " INTO ##T3 "
                                    + " FROM Tasks t "
                                    + " FULL JOIN Owners o on t.IdTask = o.IdTask "
                                    + " WHERE "
                                    + " StatusType = 'closed' and "
                                    + " StartDate != '1900-01-01' and "
                                    + " EndDate != '1900-01-01' and "
                                    + " CompletedDate <= EndDate and "
                                    + " MONTH(EndDate) = " + month + " and "
                                    + " YEAR(EndDate) = " + year
                                    + " GROUP BY o.Name "
                                    + " SELECT "
                                    + " T1.*, "
                                    + " ISNULL(T2.Vencidas, 0) AS Vencidas, "
                                    + " ISNULL(T3.ATiempo, 0) AS ATiempo, "
                                    + " P.Profile AS Perfil, "
                                    + " 0 As Compartidas "
                                    + " FROM ##T1 T1 "
                                    + " LEFT JOIN ##T2 T2 ON T1.Tecnico = T2.Tecnico "
                                    + " LEFT JOIN ##T3 T3 ON T1.Tecnico = T3.Tecnico "
                                    + " LEFT JOIN ProjectsUsers P ON T1.Tecnico = P.Name "
                                    + " WHERE P.Profile IS NOT NULL and P.Profile <> 0 "
                                    + " GROUP BY T1.Tecnico,T1.Total,T1.Abiertas, T1.Cerradas,T2.Vencidas,T3.Atiempo,P.Profile "
                                    + " ORDER BY P.Profile, T1.Tecnico "
                                    + " DROP TABLE ##T1, ##T2, ##T3 ";  //Activo
            SqlDataReader reader = (SqlDataReader)await dbayt03.query(query_usuarios);

            List <GeneralViewModel>  info      = new List <GeneralViewModel>();
            List <ResuladoViewModel> resultado = new List <ResuladoViewModel>();
            int porcentaje_total = 100;

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    string tecnico = reader["Tecnico"].ToString();

                    String query_projects = "SELECT "
                                            + " ISNULL(o.Name, 'No Asignado') AS Tecnico,"
                                            + " COUNT(*) AS TareaPorProyecto"
                                            + " FROM Tasks t"
                                            + " JOIN Projects p ON t.IdProject = p.IdProjects"
                                            + " JOIN Owners o ON t.IdTask = o.IdTask"
                                            + " WHERE"
                                            + " t.EndDate != '1900-01-01' and"
                                            + " MONTH(t.EndDate) = '" + month + "' and"
                                            + " YEAR(t.EndDate) = '" + year + "' and"
                                            + " o.Name = '" + tecnico + "'"
                                            + "GROUP BY p.IdProjects,o.Name";
                    SqlDataReader reader_projects = (SqlDataReader)await dbayt03.query(query_projects);

                    var count_proyectos = 0;
                    if (reader_projects.HasRows == true)
                    {
                        while (reader_projects.Read())
                        {
                            count_proyectos++;
                        }
                        reader_projects.Close();
                    }

                    String query_actividades_asignadas = "SELECT "
                                                         + " COUNT(*) AS Asignadas_Total,"
                                                         + " COUNT(CASE WHEN status = 'Abierto' THEN 1 END) AS Asignadas_Abiertas,"
                                                         + " COUNT(CASE WHEN status = 'Cerrado' OR status = 'Resuelto' THEN 1 END) AS Asignadas_Cerradas,"
                                                         + " COUNT(CASE WHEN is_overdue = '1' THEN 1 END) AS Asignadas_Vencidas,"
                                                         + " COUNT(CASE WHEN is_overdue = '0' THEN 1 END) AS Asignadas_ATiempo "
                                                         + " FROM TablaTickets "
                                                         + " WHERE grupo = 'Actividades Asignadas' and "
                                                         + " MONTH(created_time) = '" + month + "' and"
                                                         + " YEAR(created_time) = '" + year + "' and"
                                                         + " technician_name = '" + tecnico + "'"
                                                         + " GROUP BY technician_name";
                    SqlDataReader reader_actividades_asignadas = (SqlDataReader)await dbayt03.query(query_actividades_asignadas);

                    var asignadas_total    = 0;
                    var asignadas_abiertas = 0;
                    var asignadas_cerradas = 0;
                    var asignadas_vencidas = 0;
                    var asignadas_a_tiempo = 0;

                    if (reader_actividades_asignadas.HasRows == true)
                    {
                        while (reader_actividades_asignadas.Read())
                        {
                            asignadas_total    = Convert.ToInt32(reader_actividades_asignadas["Asignadas_Total"]);
                            asignadas_abiertas = Convert.ToInt32(reader_actividades_asignadas["Asignadas_Abiertas"]);
                            asignadas_cerradas = Convert.ToInt32(reader_actividades_asignadas["Asignadas_Cerradas"]);
                            asignadas_vencidas = Convert.ToInt32(reader_actividades_asignadas["Asignadas_Vencidas"]);
                            asignadas_a_tiempo = Convert.ToInt32(reader_actividades_asignadas["Asignadas_ATiempo"]);
                        }
                        reader_actividades_asignadas.Close();
                    }

                    var total       = reader["Total"].ToString();
                    var abiertas    = reader["Abiertas"].ToString();
                    var cerradas    = reader["Cerradas"].ToString();
                    var vencidas    = reader["Vencidas"].ToString();
                    var a_tiempo    = reader["ATiempo"].ToString();
                    var perfil      = reader["Perfil"].ToString();
                    var compartidas = reader["Compartidas"].ToString();
                    var programadas = Int32.Parse(total) - Int32.Parse(compartidas);

                    var porcentaje_cerradas = Math.Round((decimal)(Int32.Parse(cerradas) * porcentaje_total) / Int32.Parse(total));
                    var porcentaje_a_tiempo = "0";
                    var porcenjate_vencidas = "0";
                    if (Int32.Parse(cerradas) > 0)

                    {
                        porcentaje_a_tiempo = Math.Round((decimal)(Int32.Parse(a_tiempo) * porcentaje_total) / Int32.Parse(cerradas)).ToString();
                        porcenjate_vencidas = Math.Round((decimal)(Int32.Parse(vencidas) * porcentaje_total) / Int32.Parse(cerradas)).ToString();
                    }

                    info.Add(new GeneralViewModel
                    {
                        Tecnico             = tecnico,
                        Total               = programadas.ToString(),
                        Abiertas            = abiertas,
                        Cerradas            = cerradas,
                        Porcentaje_Cerradas = porcentaje_cerradas.ToString(),
                        Vencidas            = vencidas,
                        Porcentaje_Vencidas = porcenjate_vencidas.ToString(),
                        Tiempo              = a_tiempo,
                        Porcentaje_Tiempo   = porcentaje_a_tiempo.ToString(),
                        Perfil              = perfil,
                        Proyectos           = count_proyectos.ToString(),
                        Compartidas         = compartidas,
                        Asignadas_Totales   = asignadas_total,
                        Asignadas_Abiertas  = asignadas_abiertas,
                        Asignadas_Cerradas  = asignadas_cerradas,
                        Asignadas_Vencidas  = asignadas_vencidas,
                        Asignadas_Tiempo    = asignadas_a_tiempo
                    });;
                }
                reader.Close();
            }

            info.Add(new GeneralViewModel
            {
                Tecnico             = "Ricardo Acevedo",
                Total               = "0",
                Abiertas            = "0",
                Cerradas            = "0",
                Porcentaje_Cerradas = "0",
                Vencidas            = "0",
                Porcentaje_Vencidas = "0",
                Tiempo              = "0",
                Porcentaje_Tiempo   = "0",
                Perfil              = "7",
                Proyectos           = "0",
                Compartidas         = "0",
                Asignadas_Totales   = 16,
                Asignadas_Abiertas  = 0,
                Asignadas_Cerradas  = 16,
                Asignadas_Vencidas  = 1,
                Asignadas_Tiempo    = 15
            });

            info.Add(new GeneralViewModel
            {
                Tecnico             = "Lizeth Gardea",
                Total               = "0",
                Abiertas            = "0",
                Cerradas            = "0",
                Porcentaje_Cerradas = "0",
                Vencidas            = "0",
                Porcentaje_Vencidas = "0",
                Tiempo              = "0",
                Porcentaje_Tiempo   = "0",
                Perfil              = "3",
                Proyectos           = "0",
                Compartidas         = "0",
                Asignadas_Totales   = 2,
                Asignadas_Abiertas  = 1,
                Asignadas_Cerradas  = 1,
                Asignadas_Vencidas  = 1,
                Asignadas_Tiempo    = 1
            });


            //suma todos los resultados de todos los técnicos excepto el de Alejandro
            var abiertas_gerente           = 0;
            var cerradas_gerente           = 0;
            var vencidas_gerente           = 0;
            var tiempo_gerente             = 0;
            var total_gerente              = 0;
            var proyectos_gerente          = 0;
            var compartidas_gerente        = 0;
            var asignadas_total_gerente    = 0;
            var asignadas_abiertas_gerente = 0;
            var asignadas_cerradas_gerente = 0;
            var asignadas_vencidas_gerente = 0;
            var asignadas_a_tiempo_gerente = 0;

            //suma todos los resultados de los Desarrolladores
            var abiertas_coord_dev           = 0;
            var cerradas_coord_dev           = 0;
            var vencidas_coord_dev           = 0;
            var tiempo_coord_dev             = 0;
            var total_coord_dev              = 0;
            var proyectos_coord_dev          = 0;
            var compartidas_coord_dev        = 0;
            var asignadas_total_coord_dev    = 0;
            var asignadas_abiertas_coord_dev = 0;
            var asignadas_cerradas_coord_dev = 0;
            var asignadas_vencidas_coord_dev = 0;
            var asignadas_a_tiempo_coord_dev = 0;

            //asigna el color del semaforo
            var color_vencidas = "";
            var color_a_tiempo = "";
            var color_total    = "";



            foreach (var val in info)
            {
                if (val.Perfil == "1" || val.Perfil != "2")
                {
                    abiertas_gerente           += Int32.Parse(val.Abiertas);
                    cerradas_gerente           += Int32.Parse(val.Cerradas);
                    vencidas_gerente           += Int32.Parse(val.Vencidas);
                    tiempo_gerente             += Int32.Parse(val.Tiempo);
                    total_gerente              += Int32.Parse(val.Total);
                    proyectos_gerente          += Int32.Parse(val.Proyectos);
                    compartidas_gerente        += Int32.Parse(val.Compartidas);
                    asignadas_total_gerente    += +val.Asignadas_Totales;
                    asignadas_abiertas_gerente += val.Asignadas_Abiertas;
                    asignadas_cerradas_gerente += val.Asignadas_Cerradas;
                    asignadas_vencidas_gerente += val.Asignadas_Vencidas;
                    asignadas_a_tiempo_gerente += val.Asignadas_Tiempo;

                    if (Int32.Parse(val.Porcentaje_Vencidas) <= 10)
                    {
                        color_vencidas = "#98ee99";
                    }

                    if (Int32.Parse(val.Porcentaje_Vencidas) > 10)
                    {
                        color_vencidas = "#fff59d";
                    }

                    if (Int32.Parse(val.Porcentaje_Vencidas) > 50)
                    {
                        color_vencidas = "#ffa4a2";
                    }

                    if (Int32.Parse(val.Porcentaje_Tiempo) >= 90)
                    {
                        color_a_tiempo = "#98ee99";
                    }

                    if (Int32.Parse(val.Porcentaje_Tiempo) >= 80 && Int32.Parse(val.Porcentaje_Tiempo) < 90)
                    {
                        color_a_tiempo = "#fff59d";
                    }

                    if (Int32.Parse(val.Porcentaje_Tiempo) < 80)
                    {
                        color_a_tiempo = "#ffa4a2";
                    }

                    if (Int32.Parse(val.Porcentaje_Cerradas) >= 90)
                    {
                        color_total = "#98ee99";
                    }

                    if (Int32.Parse(val.Porcentaje_Cerradas) >= 80 && Int32.Parse(val.Porcentaje_Cerradas) < 90)
                    {
                        color_total = "#fff59d";
                    }

                    if (Int32.Parse(val.Porcentaje_Cerradas) < 80)
                    {
                        color_total = "#ffa4a2";
                    }

                    resultado.Add(new ResuladoViewModel
                    {
                        Tecnico             = val.Tecnico,
                        Proyectos           = Int32.Parse(val.Proyectos),
                        Compartidas         = Int32.Parse(val.Compartidas),
                        Total               = Int32.Parse(val.Total),
                        Abiertas            = Int32.Parse(val.Abiertas),
                        Cerradas            = Int32.Parse(val.Cerradas),
                        Porcentaje_Cerradas = Int32.Parse(val.Porcentaje_Cerradas),
                        Cerradas_class      = color_total,
                        Vencidas            = Int32.Parse(val.Vencidas),
                        Porcentaje_Vencidas = Int32.Parse(val.Porcentaje_Vencidas),
                        Vencidas_class      = color_vencidas,
                        Tiempo              = Int32.Parse(val.Tiempo),
                        Porcentaje_Tiempo   = Int32.Parse(val.Porcentaje_Tiempo),
                        Tiempo_class        = color_a_tiempo,
                        Asignadas_Totales   = val.Asignadas_Totales,
                        Asignadas_Abiertas  = val.Asignadas_Abiertas,
                        Asignadas_Cerradas  = val.Asignadas_Cerradas,
                        Asignadas_Vencidas  = val.Asignadas_Vencidas,
                        Asignadas_Tiempo    = val.Asignadas_Tiempo
                    });
                }

                if (val.Perfil == "2" || val.Perfil == "3")
                {
                    //console.log("proyectos: " , data[i].proyectos)
                    abiertas_coord_dev           += Int32.Parse(val.Abiertas);
                    cerradas_coord_dev           += Int32.Parse(val.Cerradas);
                    vencidas_coord_dev           += Int32.Parse(val.Vencidas);
                    tiempo_coord_dev             += Int32.Parse(val.Tiempo);
                    total_coord_dev              += Int32.Parse(val.Total);
                    proyectos_coord_dev          += Int32.Parse(val.Proyectos);
                    compartidas_coord_dev        += Int32.Parse(val.Compartidas);
                    asignadas_total_coord_dev    += +val.Asignadas_Totales;
                    asignadas_abiertas_coord_dev += val.Asignadas_Abiertas;
                    asignadas_cerradas_coord_dev += val.Asignadas_Cerradas;
                    asignadas_vencidas_coord_dev += val.Asignadas_Vencidas;
                    asignadas_a_tiempo_coord_dev += val.Asignadas_Tiempo;

                    if (Int32.Parse(val.Porcentaje_Vencidas) <= 10)
                    {
                        color_vencidas = "#98ee99";
                    }

                    if (Int32.Parse(val.Porcentaje_Vencidas) > 10)
                    {
                        color_vencidas = "#fff59d";
                    }

                    if (Int32.Parse(val.Porcentaje_Vencidas) > 50)
                    {
                        color_vencidas = "#ffa4a2";
                    }

                    if (Int32.Parse(val.Porcentaje_Tiempo) >= 90)
                    {
                        color_a_tiempo = "#98ee99";
                    }

                    if (Int32.Parse(val.Porcentaje_Tiempo) >= 80 && Int32.Parse(val.Porcentaje_Tiempo) < 90)
                    {
                        color_a_tiempo = "#fff59d";
                    }

                    if (Int32.Parse(val.Porcentaje_Tiempo) < 80)
                    {
                        color_a_tiempo = "#ffa4a2";
                    }

                    if (Int32.Parse(val.Porcentaje_Cerradas) >= 90)
                    {
                        color_total = "#98ee99";
                    }

                    if (Int32.Parse(val.Porcentaje_Cerradas) >= 80 && Int32.Parse(val.Porcentaje_Cerradas) < 90)
                    {
                        color_total = "#fff59d";
                    }

                    if (Int32.Parse(val.Porcentaje_Cerradas) < 80)
                    {
                        color_total = "#ffa4a2";
                    }

                    resultado.Add(new ResuladoViewModel
                    {
                        Tecnico             = val.Tecnico,
                        Proyectos           = Int32.Parse(val.Proyectos),
                        Compartidas         = Int32.Parse(val.Compartidas),
                        Total               = Int32.Parse(val.Total),
                        Abiertas            = Int32.Parse(val.Abiertas),
                        Cerradas            = Int32.Parse(val.Cerradas),
                        Porcentaje_Cerradas = Int32.Parse(val.Porcentaje_Cerradas),
                        Cerradas_class      = color_total,
                        Vencidas            = Int32.Parse(val.Vencidas),
                        Porcentaje_Vencidas = Int32.Parse(val.Porcentaje_Vencidas),
                        Vencidas_class      = color_vencidas,
                        Tiempo              = Int32.Parse(val.Tiempo),
                        Porcentaje_Tiempo   = Int32.Parse(val.Porcentaje_Tiempo),
                        Tiempo_class        = color_a_tiempo,
                        Asignadas_Totales   = val.Asignadas_Totales,
                        Asignadas_Abiertas  = val.Asignadas_Abiertas,
                        Asignadas_Cerradas  = val.Asignadas_Cerradas,
                        Asignadas_Vencidas  = val.Asignadas_Vencidas,
                        Asignadas_Tiempo    = val.Asignadas_Tiempo
                    });
                }
            }

            //calcula los datos para Oscar
            //var porcentaje_total = 100;
            var porcentaje_cerradas_gerente = Math.Round(Convert.ToDecimal((+cerradas_gerente * porcentaje_total) / +total_gerente), 2);
            var porcentaje_a_tiempo_gerente = Math.Round(Convert.ToDecimal((+tiempo_gerente * porcentaje_total) / +cerradas_gerente), 2);
            var porcentaje_vencidas_gerente = Math.Round(Convert.ToDecimal((+vencidas_gerente * porcentaje_total) / +cerradas_gerente), 2);

            if (porcentaje_vencidas_gerente <= 10)
            {
                color_vencidas = "#98ee99";
            }

            if (porcentaje_vencidas_gerente > 10)
            {
                color_vencidas = "#fff59d";
            }

            if (porcentaje_vencidas_gerente > 50)
            {
                color_vencidas = "#ffa4a2";
            }

            if (porcentaje_a_tiempo_gerente >= 90)
            {
                color_a_tiempo = "#98ee99";
            }

            if (porcentaje_a_tiempo_gerente >= 80 && porcentaje_a_tiempo_gerente < 90)
            {
                color_a_tiempo = "#fff59d";
            }

            if (porcentaje_a_tiempo_gerente < 80)
            {
                color_a_tiempo = "#ffa4a2";
            }

            if (porcentaje_cerradas_gerente >= 90)
            {
                color_total = "#98ee99";
            }

            if (porcentaje_cerradas_gerente >= 80 && porcentaje_cerradas_gerente < 90)
            {
                color_total = "#fff59d";
            }

            if (porcentaje_cerradas_gerente < 80)
            {
                color_total = "#ffa4a2";
            }

            resultado.Add(new ResuladoViewModel
            {
                Tecnico             = "Oscar Loya",
                Proyectos           = proyectos_gerente,
                Compartidas         = compartidas_gerente,
                Total               = total_gerente,
                Abiertas            = abiertas_gerente,
                Cerradas            = cerradas_gerente,
                Porcentaje_Cerradas = (int)porcentaje_cerradas_gerente,
                Cerradas_class      = color_total,
                Vencidas            = vencidas_gerente,
                Porcentaje_Vencidas = (int)porcentaje_vencidas_gerente,
                Vencidas_class      = color_vencidas,
                Tiempo              = tiempo_gerente,
                Porcentaje_Tiempo   = (int)porcentaje_a_tiempo_gerente,
                Tiempo_class        = color_a_tiempo,
                Asignadas_Totales   = asignadas_total_gerente,
                Asignadas_Abiertas  = asignadas_abiertas_gerente,
                Asignadas_Cerradas  = asignadas_cerradas_gerente,
                Asignadas_Vencidas  = asignadas_vencidas_gerente,
                Asignadas_Tiempo    = asignadas_a_tiempo_gerente
            });

            var porcentaje_cerradas_coord_dev = Math.Round(Convert.ToDecimal((+cerradas_coord_dev * porcentaje_total) / +total_coord_dev), 2);
            var porcentaje_a_tiempo_coord_dev = Math.Round(Convert.ToDecimal((+tiempo_coord_dev * porcentaje_total) / +cerradas_coord_dev), 2);
            var porcentaje_vencidas_coord_dev = Math.Round(Convert.ToDecimal((+vencidas_coord_dev * porcentaje_total) / +cerradas_coord_dev), 2);

            if (porcentaje_vencidas_coord_dev <= 10)
            {
                color_vencidas = "#98ee99";
            }

            if (porcentaje_vencidas_coord_dev > 10)
            {
                color_vencidas = "#fff59d";
            }

            if (porcentaje_vencidas_coord_dev > 50)
            {
                color_vencidas = "#ffa4a2";
            }

            if (porcentaje_a_tiempo_coord_dev >= 90)
            {
                color_a_tiempo = "#98ee99";
            }

            if (porcentaje_a_tiempo_coord_dev >= 80 && porcentaje_a_tiempo_coord_dev < 90)
            {
                color_a_tiempo = "#fff59d";
            }

            if (porcentaje_a_tiempo_coord_dev < 80)
            {
                color_a_tiempo = "#ffa4a2";
            }

            if (porcentaje_cerradas_coord_dev >= 90)
            {
                color_total = "#98ee99";
            }

            if (porcentaje_cerradas_coord_dev >= 80 && porcentaje_cerradas_coord_dev < 90)
            {
                color_total = "#fff59d";
            }

            if (porcentaje_cerradas_coord_dev < 80)
            {
                color_total = "#ffa4a2";
            }


            resultado.Add(new ResuladoViewModel
            {
                Tecnico             = "Alejandro Gamboa",
                Proyectos           = proyectos_coord_dev,
                Compartidas         = compartidas_coord_dev,
                Total               = total_coord_dev,
                Abiertas            = abiertas_coord_dev,
                Cerradas            = cerradas_coord_dev,
                Porcentaje_Cerradas = (int)porcentaje_cerradas_coord_dev,
                Cerradas_class      = color_total,
                Vencidas            = vencidas_coord_dev,
                Porcentaje_Vencidas = (int)porcentaje_vencidas_coord_dev,
                Vencidas_class      = color_vencidas,
                Tiempo              = tiempo_coord_dev,
                Porcentaje_Tiempo   = (int)porcentaje_a_tiempo_coord_dev,
                Tiempo_class        = color_a_tiempo,
                Asignadas_Totales   = asignadas_total_coord_dev,
                Asignadas_Abiertas  = asignadas_abiertas_coord_dev,
                Asignadas_Cerradas  = asignadas_cerradas_coord_dev,
                Asignadas_Vencidas  = asignadas_vencidas_coord_dev,
                Asignadas_Tiempo    = asignadas_a_tiempo_coord_dev
            });
            return(View(resultado));
        }
        public static async Task <List <ConfMenuViewModel> > GetPrivileges(string email)
        {
            databaseAYT03 dbay03 = new databaseAYT03();

            //Informacion del usuario
            //email = "*****@*****.**";
            String        query_usuario = "SELECT IdRol FROM ITNT_Usuarios WHERE Email = '" + email + "'";
            SqlDataReader reader        = (SqlDataReader)await dbay03.query(query_usuario);

            List <ConfMenuViewModel> configuracion = new List <ConfMenuViewModel>();

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    var id_rol = Int32.Parse(reader["IdRol"].ToString());


                    String query_menus = "SELECT " +
                                         "m.Id, " +
                                         "m.Nombre " +
                                         "FROM " +
                                         "ITNT_Rol_Menu rm " +
                                         "LEFT JOIN ITNT_Menu m ON rm.IdMenu = m.Id " +
                                         "WHERE rm.IdRol = " + id_rol + " AND m.Status = 1";

                    SqlDataReader reader_menu = (SqlDataReader)await dbay03.query(query_menus);


                    if (reader_menu.HasRows)
                    {
                        while (reader_menu.Read())
                        {
                            var id_menu = reader_menu["Id"].ToString();

                            String        query_modulos  = "SELECT Id, Nombre FROM ITNT_Modulos WHERE IdMenu = " + id_menu + " AND Status = 1";
                            SqlDataReader reader_modulos = (SqlDataReader)await dbay03.query(query_modulos);

                            List <ModulosViewModel> modulos = new List <ModulosViewModel>();

                            if (reader_modulos.HasRows)
                            {
                                while (reader_modulos.Read())
                                {
                                    var id_modulo = reader_modulos["Id"].ToString();

                                    String        query_submodulos = "SELECT Nombre, Url FROM ITNT_Submodulos WHERE IdModulo = " + id_modulo + " AND Status = 1";
                                    SqlDataReader reader_submodulo = (SqlDataReader)await dbay03.query(query_submodulos);

                                    List <SubmodulosViewModel> submodulos = new List <SubmodulosViewModel>();
                                    if (reader_submodulo.HasRows)
                                    {
                                        while (reader_submodulo.Read())
                                        {
                                            submodulos.Add(new SubmodulosViewModel
                                            {
                                                Nombre = reader_submodulo["Nombre"].ToString(),
                                                Url    = reader_submodulo["Url"].ToString()
                                            });
                                        }
                                    }


                                    modulos.Add(new ModulosViewModel
                                    {
                                        Nombre     = reader_modulos["Nombre"].ToString(),
                                        Submodulos = submodulos
                                    });
                                }
                            }

                            configuracion.Add(new ConfMenuViewModel
                            {
                                Nombre  = reader_menu["Nombre"].ToString(),
                                Modulos = modulos
                            });
                        }
                    }
                }
            }


            return(configuracion);
        }
        // GET: User/Details/5
        public async Task <ActionResult> Details(int id)
        {
            databaseAYT03 dbayt03 = new databaseAYT03();
            databaseRH    dbRH    = new databaseRH();

            //obtiene información general del usuario
            String query_usuarios = "SELECT " +
                                    "u.Id, " +
                                    "u.Nombre, " +
                                    "u.Departamento,  " +
                                    "u.Email, " +
                                    "u.Extension,  " +
                                    "CASE WHEN u.EsGerente = 1 THEN 'True' ELSE 'False' END AS Gerente, " +
                                    "r.Nombre AS Rol " +
                                    "FROM ITNT_Usuarios u " +
                                    "LEFT JOIN ITNT_Roles r on u.IdRol = r.Id " +
                                    "WHERE u.Id = " + id; //Activo
            SqlDataReader reader = (SqlDataReader)await dbayt03.query(query_usuarios);

            List <InfoGeneralViewModel> usuarios = new List <InfoGeneralViewModel>();

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    usuarios.Add(new InfoGeneralViewModel
                    {
                        Id           = Int32.Parse(reader["Id"].ToString()),
                        Nombre       = reader["Nombre"].ToString(),
                        Departamento = reader["Departamento"].ToString(),
                        Email        = reader["Email"].ToString(),
                        Extension    = reader["Extension"].ToString(),
                        Gerente      = reader["Gerente"].ToString(),
                        Rol          = reader["Rol"].ToString()
                    });;
                }
                reader.Close();
            }


            //obtiene información general de Roles
            String        query_roles  = "SELECT * FROM ITNT_Roles WHERE Status = 1";
            SqlDataReader reader_roles = (SqlDataReader)await dbayt03.query(query_roles);

            List <RolViewModel> roles = new List <RolViewModel>();

            if (reader_roles.HasRows)
            {
                while (reader_roles.Read())
                {
                    roles.Add(new RolViewModel
                    {
                        Id     = Int32.Parse(reader_roles["Id"].ToString()),
                        Nombre = reader_roles["Nombre"].ToString(),
                        Status = Int32.Parse(reader_roles["Status"].ToString())
                    });
                }
                reader_roles.Close();
            }

            ////obtiene información general de la lista de sucursales
            //String query_sucursales = "SELECT " +
            //                          "TB_CODIGO AS Codigo," +
            //                          "TB_ELEMENT AS Sucursal " +
            //                          "FROM NIVEL1 " +
            //                          "WHERE TB_ACTIVO = 'S' AND " +
            //                          "TB_CODIGO NOT IN('14','23','96','97', '98','99') " +
            //                          "ORDER BY TB_ELEMENT ASC";
            //SqlDataReader reader_sucursales = (SqlDataReader)await dbRH.query(query_sucursales);
            //List<SucursalesViewModel> sucursales = new List<SucursalesViewModel>();

            //if (reader_sucursales.HasRows)
            //{
            //    while (reader_sucursales.Read())
            //    {
            //        sucursales.Add(new SucursalesViewModel
            //        {
            //            Codigo = reader_sucursales["Codigo"].ToString().Replace(" ",""),
            //            Sucursal = reader_sucursales["Sucursal"].ToString()
            //        });
            //    }
            //    reader_sucursales.Close();
            //}

            ////obtiene relacion usuarios - sucursal
            //String query_usuario_sucursal = "SELECT * FROM ITNT_Usuario_Sucursal WHERE IdUsuario = " + id;
            //SqlDataReader reader_usuario_sucursal = (SqlDataReader)await dbayt03.query(query_usuario_sucursal);
            ////List<UsuarioSucursalViewModel> usuario_sucursales = new List<UsuarioSucursalViewModel>();

            //if (reader_usuario_sucursal.HasRows)
            //{
            //    while (reader_usuario_sucursal.Read())
            //    {
            //        var suc = sucursales.FirstOrDefault(d => d.Codigo == reader_usuario_sucursal["IdSucursal"].ToString());
            //        if ( suc != null)
            //        {
            //            suc.IsSelected = true;
            //        }

            //    }
            //    reader_usuario_sucursal.Close();
            //}

            //obtiene todos los usuarios
            String        query_usu             = "SELECT Id, Nombre FROM  ITNT_Usuarios"; //Activo
            SqlDataReader reader_todos_usuarios = (SqlDataReader)await dbayt03.query(query_usu);

            List <UsuariosViewModel> _usuarios = new List <UsuariosViewModel>();

            if (reader_todos_usuarios.HasRows)
            {
                while (reader_todos_usuarios.Read())
                {
                    _usuarios.Add(new UsuariosViewModel
                    {
                        Id     = Int32.Parse(reader_todos_usuarios["Id"].ToString()),
                        Nombre = reader_todos_usuarios["Nombre"].ToString()
                    });
                }
                reader_todos_usuarios.Close();
            }

            //obtiene relacion personal cargo
            String query_personal_cargo = "SELECT " +
                                          "U.Id AS Usuario, " +
                                          "U.Nombre " +
                                          "FROM ITNT_Personal_Cargos PC " +
                                          "LeFT JOIN ITNT_Usuarios U ON PC.IdUsuarioCargo = U.Id " +
                                          "WHERE PC.IdUsuarioPrimario = " + id;
            SqlDataReader reader_personal_cargo = (SqlDataReader)await dbayt03.query(query_personal_cargo);

            //List<UsuarioSucursalViewModel> personal_cargo = new List<UsuarioSucursalViewModel>();

            if (reader_personal_cargo.HasRows)
            {
                while (reader_personal_cargo.Read())
                {
                    var personal_cargo = _usuarios.FirstOrDefault(d => d.Id == Int32.Parse(reader_personal_cargo["Usuario"].ToString()));
                    if (personal_cargo != null)
                    {
                        personal_cargo.IsSelected = true;
                    }
                }
                reader_personal_cargo.Close();
            }



            PermisosViewModel permisos = new PermisosViewModel
            {
                Informacion = usuarios,
                Roles       = roles,
                //Sucursales = sucursales,
                PersonalCargo = _usuarios
            };

            return(Json(new { data = permisos }));
            //return View(permisos);
        }