public JsonResult GetAll()
        {
            int paginaActual = Convert.ToInt32(Request.Params["page"]);
            int registrosPorPagina = Convert.ToInt32(Request.Params["rp"]);

            //var usuarios = (from usuario in db.Usuarios.Include("UsuarioEmpresa") select usuario);
            var empresas = from e in db.Empresas
                           join u in db.Usuarios on e.UsuarioAlta equals u.Id into leftJoin
                           from sub in leftJoin.DefaultIfEmpty()
                           select new
                           {
                               id = e.Id,
                               nombre = e.Nombre,
                               belongToGroup = e.GrupoId,
                               nombreGrupo = (from e2 in db.Empresas where e2.Id == e.GrupoId select e2.Nombre),
                               tipo = e.TipoEmpresa == true ? "Grupo" : "Empresa",
                               user = sub.UserName ?? "",
                               fechaAlta = e.FechaAlta,
                           };

            var listaPaginada = empresas.OrderBy(e => e.nombre)
                                        .Skip((paginaActual - 1) * registrosPorPagina)
                                        .Take(registrosPorPagina);

            var girdResult = new Flexgrid { page = paginaActual, total = empresas.Count() };
            //GridRow miRow;
            int i = 1;

            //girdResult.total = empresas.Count();
            //girdResult.page = paginaActual;

            foreach (var empresa in listaPaginada)
            {
                //miRow = new GridRow();
                //miRow.id = i++;
                girdResult.rows.Add(new GridRow
                {
                    id = i++,
                    cell = new List<string>()
                           {
                               Convert.ToString(empresa.id),
                               empresa.nombre,
                               empresa.tipo,
                               empresa.nombreGrupo.ToString(),
                               empresa.user,
                               empresa.fechaAlta.ToString()
                           }
                });
                //girdResult.rows.Add(miRow);
            }
            return Json(girdResult);
        }
        public JsonResult GetUsuariosFiltered(string grupo, int Empresa, int perfil, string nombre)
        {
            int paginaActual = Convert.ToInt32(Request.Params["page"]);
            int registrosPorPagina = Convert.ToInt32(Request.Params["rp"]);

            //UsuarioEmpresa emp = new UsuarioEmpresa();
            //if(Empresa != 0)
            //{
            //    emp = db.relUsuarioEmpresa.Find(Empresa);&& usuario.UsuarioEmpresa.Contains(emp)
            //}
            var usuarios = (from usuario in db.Usuarios.Include("UsuarioEmpresa")
                            where
                                (usuario.Nombre.Contains(nombre) || usuario.ApellidoPaterno.Contains(nombre) ||
                                 usuario.ApellidoMaterno.Contains(nombre))
                            select usuario);

            var listaPaginada = usuarios.OrderBy(c => c.UserName)
                          .Skip((paginaActual - 1) * registrosPorPagina)
                          .Take(registrosPorPagina);

            var girdResult = new Flexgrid();
            GridRow miRow;
            int i = 0;
            var empresas = string.Empty;

            girdResult.total = usuarios.Count();
            girdResult.page = paginaActual;
            foreach (var usuario in listaPaginada)
            {

                empresas = usuario.UsuarioEmpresa.Aggregate(empresas, (current, empresa) => current + (empresa.Empresa.Nombre + ", "));
                empresas = empresas.Length > 2 ? empresas.Substring(0, empresas.Length - 2) : string.Empty;

                int empresaId = 0;
                foreach (var empresa in usuario.UsuarioEmpresa)
                {
                    empresaId = Convert.ToInt32(empresa.Empresa.GrupoId);
                    break;
                }

                var gpo = db.Empresas.Where(grupoid => grupoid.Id.Equals(empresaId)).FirstOrDefault();
                string nombreGrupo = string.Empty;

                if (gpo != null)
                {
                    nombreGrupo = gpo.Nombre;
                }

                i += 1;
                miRow = new GridRow();
                miRow.id = i;
                miRow.cell = new List<string>()
                                 {
                                     Convert.ToString(usuario.Id),
                                     usuario.UserName,
                                     nombreGrupo,
                                     empresas,
                                     string.Format("{0} {1} {2}", usuario.Nombre, usuario.ApellidoPaterno,
                                                   usuario.ApellidoMaterno),
                                     usuario.Email,
                                     Convert.ToString(usuario.Activo),
                                     usuario.FechaAlta.ToShortDateString(),
                                     Convert.ToString(usuario.FechaBaja),
                                     Convert.ToString(usuario.FechaUltimoLogin)
                                 };
                girdResult.rows.Add(miRow);
                empresas = string.Empty;
            }
            return Json(girdResult);
        }
        //
        // GET: /TipoIncidente/
        public JsonResult GetAll()
        {
            int paginaActual = Convert.ToInt32(Request.Params["page"]);
            int registrosPorPagina = Convert.ToInt32(Request.Params["rp"]);

            //var usuarios = (from usuario in db.Usuarios.Include("UsuarioEmpresa") select usuario);
            var tiposIncidentes = db.TiposIncidente;

            var listaPaginada = tiposIncidentes.OrderBy(e => e.Nombre)
                                        .Skip((paginaActual - 1) * registrosPorPagina)
                                        .Take(registrosPorPagina);

            var girdResult = new Flexgrid { page = paginaActual, total = tiposIncidentes.Count() };
            int i = 1;

            foreach (var empresa in listaPaginada)
            {
                girdResult.rows.Add(new GridRow
                {
                    id = i++,
                    cell = new List<string>()
                           {
                               empresa.Id.ToString(),
                               empresa.Nombre
                           }
                });
            }
            return Json(girdResult);
        }
        public JsonResult GetAmenazas()
        {
            int paginaActual = Convert.ToInt32(Request.Params["page"]);
            int registrosPorPagina = Convert.ToInt32(Request.Params["rp"]);

            var medios =
               from medio in db.MediosAmenaza
               select new { Id = medio.Id, Descripcion = medio.Nombre };

            var listaPaginada = medios.OrderBy(c => c.Descripcion)
                                      .Skip((paginaActual - 1) * registrosPorPagina)
                                      .Take(registrosPorPagina);

            var girdResult = new Flexgrid();
            GridRow miRow;
            int i = 0;

            girdResult.total = medios.Count();
            girdResult.page = paginaActual;

            foreach (var medio in listaPaginada)
            {
                i += 1;
                miRow = new GridRow();
                miRow.id = i;
                miRow.cell = new List<string>()
                                 {
                                     Convert.ToString(medio.Id),
                                     medio.Descripcion
                                 };
                girdResult.rows.Add(miRow);
            }

            return Json(girdResult);
        }
        public JsonResult GetAll()
        {
            int paginaActual = Convert.ToInt32(Request.Params["page"]);
            int registrosPorPagina = Convert.ToInt32(Request.Params["rp"]);

            var parametros = db.ParametrosSistemaEmpresa
                                                        .Select(e => new
                                                                {
                                                                    Id = e.Id,
                                                                    EmpresaId = e.EmpresaId,
                                                                    TipoIncidenteId = e.TipoIncidenteId,
                                                                    Empresa = e.Empresa.Nombre,
                                                                    Incidente = e.TipoIncidente.Nombre,
                                                                    Parametro = e.ParametrosSistema.Nombre,
                                                                    e.ValorInicial,
                                                                    e.Valorfinal,
                                                                    e.FechaAlta
                                                                });

            var listaPaginada = parametros.OrderBy(p => p.Empresa)
                                          .ThenBy(p => p.Incidente)
                                          .Skip((paginaActual - 1) * registrosPorPagina)
                                          .Take(registrosPorPagina);

            var salida = new List<GridRow>();

            int i = 1;
            foreach (var item in listaPaginada)
            {
                salida.Add(new GridRow
                {
                    id = i++,
                    cell = new List<string>
                    {
                        item.Id.ToString(),
                        item.EmpresaId.ToString(),
                        item.TipoIncidenteId.ToString(),
                        item.Empresa,
                        item.Incidente,
                        item.Parametro,
                        item.ValorInicial.ToString(),
                        item.Valorfinal.ToString(),
                        item.FechaAlta.ToString()
                    }
                });
            }

            var girdResult = new Flexgrid { page = paginaActual, total = parametros.Count(), rows = salida };

            return Json(girdResult);
        }
        public JsonResult GetIncientes(bool isFiltered, int grupoId, int empresaId, int tipoIncidenteId, int tipoAfectacionId, int tipoInstalacionId,
                                        int instalacionId, int usuarioId, DateTime fechaDesde, DateTime fechaHasta, string incidenteId)
        {
            int paginaActual = Convert.ToInt32(Request.Params["page"]);
            int registrosPorPagina = Convert.ToInt32(Request.Params["rp"]);
            var userId = Convert.ToInt32(Session["userNameId"]);
            tipoAfectacionId = 2;
            var afecta = (from ai in db.AfectacionesIncidente.Where(afe => afe.Id == tipoAfectacionId) select ai);

            var incidentes = (from incidente in db.Incidentes.Include("Instalaciones").Include("AfectacionIncidentes")
                              join t3 in db.TiposInstalacion on incidente.TipoInstalacionId equals t3.Id into tiposIns
                              from ti in tiposIns.DefaultIfEmpty()
                              join t4 in db.Instalaciones on incidente.InstalacionId equals t4.Id into instalaciones
                              from ins in instalaciones.DefaultIfEmpty()
                              join t1 in db.relUsuarioEmpresa on incidente.EmpresaId equals t1.Empresa.Id
                              join t2 in db.TiposIncidente on incidente.TipoIncidenteId equals t2.Id
                              where incidente.FechaCancelacion.HasValue == false //&& incidente.Id ==17
                              //&& t1.UsuarioId.Equals(usuarioId)
                              select incidente).Distinct();

            //var filtrado = incidentes.Where(a => a.AfectacionIncidentes.Equals(afecta));
            var filtrado = incidentes.Where(inc => afecta.Any(afec => afec.IncidenteId.Equals(inc.Id)));

            var listaPaginada = filtrado.OrderByDescending(c => c.FechaIncidente)
                .Skip((paginaActual - 1) * registrosPorPagina)
                .Take(registrosPorPagina);

            var girdResult = new Flexgrid();
            GridRow miRow;
            int i = 0;

            var afectaciones = string.Empty;
            girdResult.total = incidentes.Count();
            girdResult.page = paginaActual;
            foreach (var incidente in listaPaginada)
            {
                afectaciones = incidente.AfectacionIncidentes.Aggregate(afectaciones,
                                                                        (current, afectacion) =>
                                                                        current +
                                                                        (afectacion.TipoAfectacion.Nombre + ", "));
                afectaciones = afectaciones.Length > 2
                                   ? afectaciones.Substring(0, afectaciones.Length - 2)
                                   : string.Empty;

                i += 1;
                miRow = new GridRow();
                miRow.id = i;
                var monto = incidente.MontoAfectacion.HasValue == false ? 0 : incidente.MontoAfectacion;
                var detenidos = incidente.Detenidos.HasValue == false ? false : incidente.Detenidos;
                var convehiculo = incidente.ConVehiculo.HasValue == false ? false : incidente.ConVehiculo;
                var lesionados = incidente.LesionadosId.HasValue == false ? string.Empty : incidente.Lesionado.Nombre;

                var tipoInstalacion = incidente.TipoInstalacionId.HasValue == false
                                          ? string.Empty
                                          : incidente.TipoInstalacion.Nombre;

                var instalacion = incidente.InstalacionId.HasValue == false
                                      ? string.Empty
                                      : incidente.Instalaciones.Nombre;
                var tipoArma = incidente.TipoArmaId.HasValue == false ? string.Empty : incidente.TipoArma.Nombre;
                var cantidadDelincuentes = incidente.CantidadDelincuentesId.HasValue == false
                                               ? string.Empty
                                               : incidente.CantidadDelincuente.NombreDeCantidad;
                var tipoVehiculo = incidente.TipoVehiculoId.HasValue == false
                                       ? string.Empty
                                       : incidente.TipoVehiculo.Nombre;
                var tipoExtorsion = incidente.TipoExtorsionId.HasValue == false
                                        ? string.Empty
                                        : incidente.TipoExtorsion.Nombre;
                var medioamenaza = incidente.MedioAmenazaId.HasValue == false
                                       ? string.Empty
                                       : incidente.MedioAmenaza.Nombre;
                var motivoamenaza = incidente.MotivoAmenazaId.HasValue == false
                                        ? string.Empty
                                        : incidente.MotivoAmenaza.Nombre;
                var tipoIntrusion = incidente.TipoIntrusionId.HasValue == false
                                        ? string.Empty
                                        : incidente.TipoIntrusion.Nombre;
                var zona = incidente.ZonaId.HasValue == false ? string.Empty : incidente.Zona.Nombre;

                miRow.cell = new List<string>()
                                 {
                                     Convert.ToString(incidente.Id),
                                     incidente.FechaIncidente.ToString("MMMM dd ,yy HH:MM"),
                                     incidente.TipoIncidente.Nombre,
                                     lesionados,
                                     tipoInstalacion,
                                     instalacion,
                                     monto.ToString(),
                                     string.Format("Colonia: {0}, Calle: {1}, Entre calles: {2}", incidente.Colonia,
                                                   incidente.Calle,
                                                   incidente.EntreCalles),
                                     afectaciones,
                                    incidente.TipoIncidente.Nombre,
                                     tipoArma,
                                     detenidos.ToString(),
                                     cantidadDelincuentes,
                                     tipoVehiculo,
                                     convehiculo.ToString(),
                                     tipoExtorsion,
                                     medioamenaza,
                                     motivoamenaza,
                                     tipoIntrusion,
                                     incidente.Comentarios,
                                     zona,
                                     incidente.Ciudad.Nombre,
                                     incidente.Estado.Nombre
                                 };
                girdResult.rows.Add(miRow);
                afectaciones = string.Empty;

            }

            return Json(girdResult);
        }
        public JsonResult GetTiposExtorciones()
        {
            int paginaActual = Convert.ToInt32(Request.Params["page"]);
            int registrosPorPagina = Convert.ToInt32(Request.Params["rp"]);

            var tExtorciones =
                from tExtorcion in db.TiposExtorsion
                select new {Id = tExtorcion.Id, Descripcion = tExtorcion.Nombre};

            var listaPaginada = tExtorciones.OrderBy(c => c.Descripcion)
                .Skip((paginaActual - 1)*registrosPorPagina)
                .Take(registrosPorPagina);

            var girdResult = new Flexgrid();
            GridRow miRow;
            int i = 0;

            girdResult.total = tExtorciones.Count();
            girdResult.page = paginaActual;

            foreach (var extorcion in listaPaginada)
            {
                i += 1;
                miRow = new GridRow();
                miRow.id = i;
                miRow.cell = new List<string>()
                                 {
                                     Convert.ToString(extorcion.Id),
                                     extorcion.Descripcion
                                 };
                girdResult.rows.Add(miRow);
            }

            return Json(girdResult);
        }