public List <HelperTickets> ObtenerTickets(int idUsuario, int pageIndex, int pageSize) { DataBaseModelContext db = new DataBaseModelContext(); List <HelperTickets> result = null; try { db.ContextOptions.ProxyCreationEnabled = _proxy; List <Ticket> lstTickets = new List <Ticket>(); bool supervisor = db.SubGrupoUsuario.Join(db.UsuarioGrupo, sgu => sgu.Id, ug => ug.IdSubGrupoUsuario, (sgu, ug) => new { sgu, ug }) .Any(@t => @t.sgu.IdSubRol == (int)BusinessVariables.EnumSubRoles.Supervisor && @t.ug.IdUsuario == idUsuario); List <int?> lstEstatusPermitidos = new List <int?>(); List <int> lstGrupos = db.UsuarioGrupo.Where(ug => ug.IdUsuario == idUsuario && ug.GrupoUsuario.IdTipoGrupo == (int)BusinessVariables.EnumTiposGrupos.ResponsableDeAtención).Select(s => s.IdGrupoUsuario).Distinct().ToList(); if (lstGrupos.Count <= 0) { lstGrupos = db.UsuarioGrupo.Where(ug => ug.IdUsuario == idUsuario && ug.GrupoUsuario.IdTipoGrupo == (int)BusinessVariables.EnumTiposGrupos.Acceso).Select(s => s.IdGrupoUsuario).Distinct().ToList(); foreach (int idGrupo in lstGrupos) { lstEstatusPermitidos.AddRange((db.EstatusTicketSubRolGeneral.Join(db.GrupoUsuario, easrg => easrg.IdGrupoUsuario, gu => gu.Id, (easrg, gu) => new { easrg, gu }) .Join(db.UsuarioGrupo, @t => @t.gu.Id, ug => ug.IdGrupoUsuario, (@t, ug) => new { @t, ug }) .Where(@t => @t.ug.IdGrupoUsuario == idGrupo && @[email protected] == @[email protected] && @[email protected] && @t.ug.IdUsuario == idUsuario && @[email protected]) .Select(@t => (int?)@[email protected])).Distinct().ToList()); } foreach (int grupo in lstGrupos) { foreach (int?estatusPermitido in lstEstatusPermitidos) { if (estatusPermitido == null) { lstTickets.AddRange(db.Ticket.Join(db.TicketAsignacion.OrderByDescending(o => o.Id).Take(1), t => t.Id, ta => ta.IdTicket, (t, ta) => new { t, ta }) .Join(db.TicketGrupoUsuario, @t1 => @t1.t.Id, tgu => tgu.IdTicket, (@t1, tgu) => new { @t1, tgu }) .Where(@t1 => @t1.tgu.IdGrupoUsuario == grupo && @[email protected] == null && @t1.t1.t.IdEstatusAsignacion == estatusPermitido) .Select(@t1 => @[email protected]).Distinct().ToList()); } else { lstTickets.AddRange(db.Ticket.Join(db.TicketAsignacion.OrderByDescending(o => o.Id).Take(1), t => t.Id, ta => ta.IdTicket, (t, ta) => new { t, ta }) .Join(db.TicketGrupoUsuario, @t1 => @t1.t.Id, tgu => tgu.IdTicket, (@t1, tgu) => new { @t1, tgu }) .Where(@t1 => @t1.tgu.IdGrupoUsuario == grupo && @t1.t1.t.IdEstatusTicket == estatusPermitido && @t1.t1.ta.IdUsuarioAsignado == idUsuario) .Select(@t1 => @[email protected]).Distinct().ToList()); } } } } else { foreach (int idGrupo in lstGrupos) { lstEstatusPermitidos.AddRange((db.EstatusAsignacionSubRolGeneral.Join(db.GrupoUsuario, easrg => easrg.IdGrupoUsuario, gu => gu.Id, (easrg, gu) => new { easrg, gu }) .Join(db.UsuarioGrupo, @t => @t.gu.Id, ug => ug.IdGrupoUsuario, (@t, ug) => new { @t, ug }) .Where(@t => @t.ug.IdGrupoUsuario == idGrupo && @[email protected] == 6 && @[email protected] == @[email protected] && @[email protected] && @t.ug.IdUsuario == idUsuario && @[email protected]) .Select(@t => (int?)@[email protected])).Distinct().ToList()); } foreach (int grupo in lstGrupos) { foreach (int?estatusPermitido in lstEstatusPermitidos) { if (supervisor || lstEstatusPermitidos.Contains((int)BusinessVariables.EnumeradoresKiiniNet.EnumEstatusAsignacion.Autoasignado)) { lstTickets.AddRange(db.Ticket.Join(db.TicketGrupoUsuario, t => t.Id, tg => tg.IdTicket, (t, tg) => new { t, tg }) .Where(@t1 => @t1.tg.IdGrupoUsuario == grupo && @t1.t.IdEstatusAsignacion == estatusPermitido) .Select(@t1 => @t1.t).Distinct().ToList()); } else if (estatusPermitido == null) { lstTickets.AddRange(db.Ticket.Join(db.TicketAsignacion.OrderByDescending(o => o.Id).Take(1), t => t.Id, ta => ta.IdTicket, (t, ta) => new { t, ta }) .Join(db.TicketGrupoUsuario, @t1 => @t1.t.Id, tgu => tgu.IdTicket, (@t1, tgu) => new { @t1, tgu }) .Where(@t1 => @t1.tgu.IdGrupoUsuario == grupo && @[email protected] == null && @t1.t1.t.IdEstatusAsignacion == estatusPermitido) .Select(@t1 => @[email protected]).Distinct().ToList()); } else { lstTickets.AddRange(db.Ticket.Join(db.TicketAsignacion.OrderByDescending(o => o.Id).Take(1), t => t.Id, ta => ta.IdTicket, (t, ta) => new { t, ta }) .Join(db.TicketGrupoUsuario, @t1 => @t1.t.Id, tgu => tgu.IdTicket, (@t1, tgu) => new { @t1, tgu }) .Where(@t1 => @t1.tgu.IdGrupoUsuario == grupo && @[email protected] == idUsuario && @t1.t1.t.IdEstatusAsignacion == estatusPermitido && @t1.t1.ta.IdUsuarioAsignado == idUsuario) .Select(@t1 => @[email protected]).Distinct().ToList()); } } } } int totalRegistros = lstTickets.Count; //TODO: Actualizar propiedades faltantes de asignacion if (totalRegistros > 0) { result = new List <HelperTickets>(); foreach (Ticket ticket in lstTickets.Skip(pageIndex * pageSize).Take(pageSize)) { db.LoadProperty(ticket, "UsuarioLevanto"); db.LoadProperty(ticket, "EstatusTicket"); db.LoadProperty(ticket, "EstatusAsignacion"); db.LoadProperty(ticket, "TicketEstatus"); db.LoadProperty(ticket, "TicketAsignacion"); db.LoadProperty(ticket, "Impacto"); foreach (TicketAsignacion asignacion in ticket.TicketAsignacion) { db.LoadProperty(asignacion, "UsuarioAsignado"); if (asignacion.UsuarioAsignado != null) { db.LoadProperty(asignacion.UsuarioAsignado, "UsuarioGrupo"); foreach (UsuarioGrupo grupo in asignacion.UsuarioAsignado.UsuarioGrupo) { db.LoadProperty(grupo, "SubGrupoUsuario"); if (grupo.SubGrupoUsuario != null) { db.LoadProperty(grupo.SubGrupoUsuario, "SubRol"); } } } } db.LoadProperty(ticket, "ArbolAcceso"); db.LoadProperty(ticket.ArbolAcceso, "InventarioArbolAcceso"); db.LoadProperty(ticket.ArbolAcceso.InventarioArbolAcceso.First(), "GrupoUsuarioInventarioArbol"); foreach (GrupoUsuarioInventarioArbol grupoinv in ticket.ArbolAcceso.InventarioArbolAcceso.First().GrupoUsuarioInventarioArbol) { db.LoadProperty(grupoinv, "GrupoUsuario"); } string nivelAsignado = string.Empty; HelperTickets hticket = new HelperTickets(); hticket.IdTicket = ticket.Id; hticket.IdUsuario = ticket.IdUsuario; hticket.IdGrupoAsignado = ticket.ArbolAcceso.InventarioArbolAcceso.First().GrupoUsuarioInventarioArbol.Where(s => s.GrupoUsuario.IdTipoGrupo == (int)BusinessVariables.EnumTiposGrupos.ResponsableDeAtención).Distinct().First().GrupoUsuario.Id; hticket.FechaHora = ticket.FechaHoraAlta; hticket.NumeroTicket = ticket.Id; hticket.NombreUsuario = ticket.UsuarioLevanto.NombreCompleto; hticket.Tipificacion = new BusinessArbolAcceso().ObtenerTipificacion(ticket.IdArbolAcceso); hticket.GrupoAsignado = ticket.ArbolAcceso.InventarioArbolAcceso.First().GrupoUsuarioInventarioArbol.Where(s => s.GrupoUsuario.IdTipoGrupo == (int)BusinessVariables.EnumTiposGrupos.ResponsableDeAtención).Distinct().First().GrupoUsuario.Descripcion; hticket.EstatusTicket = ticket.EstatusTicket; hticket.EstatusAsignacion = ticket.EstatusAsignacion; hticket.IdUsuarioAsignado = ticket.TicketAsignacion.OrderBy(o => o.Id).Last().UsuarioAsignado != null?ticket.TicketAsignacion.OrderBy(o => o.Id).Last().UsuarioAsignado.Id : 0; hticket.UsuarioAsignado = ticket.TicketAsignacion.OrderBy(o => o.Id).Last().UsuarioAsignado != null?ticket.TicketAsignacion.OrderBy(o => o.Id).Last().UsuarioAsignado.NombreCompleto : ""; hticket.NivelUsuarioAsignado = ticket.TicketAsignacion.OrderBy(o => o.Id).Last().UsuarioAsignado != null?ticket.TicketAsignacion.OrderBy(o => o.Id).Last().UsuarioAsignado.UsuarioGrupo.Where(w => w.SubGrupoUsuario != null).Aggregate(nivelAsignado, (current, usuarioAsignado) => current + usuarioAsignado.SubGrupoUsuario.SubRol.Descripcion) : ""; hticket.EsPropietario = ticket.IdEstatusAsignacion == (int)BusinessVariables.EnumeradoresKiiniNet.EnumEstatusAsignacion.PorAsignar && supervisor ? true : idUsuario == ticket.TicketAsignacion.Last().IdUsuarioAsignado; hticket.CambiaEstatus = hticket.IdUsuarioAsignado == idUsuario; hticket.Asigna = ticket.IdEstatusAsignacion == (int)BusinessVariables.EnumeradoresKiiniNet.EnumEstatusAsignacion.PorAsignar && supervisor ? true : idUsuario == ticket.TicketAsignacion.Last().IdUsuarioAsignado&& ticket.IdEstatusTicket < (int)BusinessVariables.EnumeradoresKiiniNet.EnumEstatusTicket.Resuelto; hticket.Total = totalRegistros; hticket.IdImpacto = ticket.IdImpacto; hticket.Impacto = ticket.Impacto.Descripcion; result.Add(hticket); } } } catch (Exception ex) { throw new Exception(ex.Message); } finally { db.Dispose(); } return(result); }
public List <HelperTickets> ObtenerTicketsUsuario(int idUsuario, int pageIndex, int pageSize) { DataBaseModelContext db = new DataBaseModelContext(); List <HelperTickets> result = null; try { db.ContextOptions.ProxyCreationEnabled = _proxy; List <Ticket> lstTickets = db.Ticket.Where(w => w.IdUsuario == idUsuario).ToList(); bool supervisor = db.SubGrupoUsuario.Join(db.UsuarioGrupo, sgu => sgu.Id, ug => ug.IdSubGrupoUsuario, (sgu, ug) => new { sgu, ug }) .Any(@t => @t.sgu.IdSubRol == (int)BusinessVariables.EnumSubRoles.Supervisor && @t.ug.IdUsuario == idUsuario); int totalRegistros = lstTickets.Count; //TODO: Actualizar propiedades faltantes de asignacion if (totalRegistros > 0) { result = new List <HelperTickets>(); foreach (Ticket ticket in lstTickets.Skip(pageIndex * pageSize).Take(pageSize)) { db.LoadProperty(ticket, "UsuarioLevanto"); db.LoadProperty(ticket, "EstatusTicket"); db.LoadProperty(ticket, "EstatusAsignacion"); db.LoadProperty(ticket, "TicketEstatus"); db.LoadProperty(ticket, "TicketAsignacion"); db.LoadProperty(ticket, "Impacto"); foreach (TicketAsignacion asignacion in ticket.TicketAsignacion) { db.LoadProperty(asignacion, "UsuarioAsignado"); if (asignacion.UsuarioAsignado != null) { db.LoadProperty(asignacion.UsuarioAsignado, "UsuarioGrupo"); foreach (UsuarioGrupo grupo in asignacion.UsuarioAsignado.UsuarioGrupo) { db.LoadProperty(grupo, "SubGrupoUsuario"); if (grupo.SubGrupoUsuario != null) { db.LoadProperty(grupo.SubGrupoUsuario, "SubRol"); } } } } db.LoadProperty(ticket, "ArbolAcceso"); db.LoadProperty(ticket.ArbolAcceso, "InventarioArbolAcceso"); db.LoadProperty(ticket.ArbolAcceso.InventarioArbolAcceso.First(), "GrupoUsuarioInventarioArbol"); foreach (GrupoUsuarioInventarioArbol grupoinv in ticket.ArbolAcceso.InventarioArbolAcceso.First().GrupoUsuarioInventarioArbol) { db.LoadProperty(grupoinv, "GrupoUsuario"); } string nivelAsignado = string.Empty; HelperTickets hticket = new HelperTickets(); hticket.IdTicket = ticket.Id; hticket.IdUsuario = ticket.IdUsuario; hticket.IdGrupoAsignado = ticket.ArbolAcceso.InventarioArbolAcceso.First().GrupoUsuarioInventarioArbol.Where(s => s.GrupoUsuario.IdTipoGrupo == (int)BusinessVariables.EnumTiposGrupos.ResponsableDeAtención).Distinct().First().GrupoUsuario.Id; hticket.FechaHora = ticket.FechaHoraAlta; hticket.NumeroTicket = ticket.Id; hticket.NombreUsuario = ticket.UsuarioLevanto.NombreCompleto; hticket.Tipificacion = new BusinessArbolAcceso().ObtenerTipificacion(ticket.IdArbolAcceso); hticket.GrupoAsignado = ticket.ArbolAcceso.InventarioArbolAcceso.First().GrupoUsuarioInventarioArbol.Where(s => s.GrupoUsuario.IdTipoGrupo == (int)BusinessVariables.EnumTiposGrupos.ResponsableDeAtención).Distinct().First().GrupoUsuario.Descripcion; hticket.EstatusTicket = ticket.EstatusTicket; hticket.EstatusAsignacion = ticket.EstatusAsignacion; hticket.IdUsuarioAsignado = ticket.TicketAsignacion.OrderBy(o => o.Id).Last().UsuarioAsignado != null?ticket.TicketAsignacion.OrderBy(o => o.Id).Last().UsuarioAsignado.Id : 0; hticket.UsuarioAsignado = ticket.TicketAsignacion.OrderBy(o => o.Id).Last().UsuarioAsignado != null?ticket.TicketAsignacion.OrderBy(o => o.Id).Last().UsuarioAsignado.NombreCompleto : ""; hticket.NivelUsuarioAsignado = ticket.TicketAsignacion.OrderBy(o => o.Id).Last().UsuarioAsignado != null?ticket.TicketAsignacion.OrderBy(o => o.Id).Last().UsuarioAsignado.UsuarioGrupo.Where(w => w.SubGrupoUsuario != null).Aggregate(nivelAsignado, (current, usuarioAsignado) => current + usuarioAsignado.SubGrupoUsuario.SubRol.Descripcion) : ""; hticket.EsPropietario = ticket.IdEstatusAsignacion == (int)BusinessVariables.EnumeradoresKiiniNet.EnumEstatusAsignacion.PorAsignar && supervisor ? true : idUsuario == ticket.TicketAsignacion.Last().IdUsuarioAsignado; hticket.CambiaEstatus = hticket.IdUsuarioAsignado == idUsuario; hticket.Asigna = ticket.IdEstatusAsignacion == (int)BusinessVariables.EnumeradoresKiiniNet.EnumEstatusAsignacion.PorAsignar && supervisor ? true : idUsuario == ticket.TicketAsignacion.Last().IdUsuarioAsignado&& ticket.IdEstatusTicket < (int)BusinessVariables.EnumeradoresKiiniNet.EnumEstatusTicket.Resuelto; hticket.Total = totalRegistros; hticket.IdImpacto = ticket.IdImpacto; hticket.Impacto = ticket.Impacto.Descripcion; result.Add(hticket); } } } catch (Exception ex) { throw new Exception(ex.Message); } finally { db.Dispose(); } return(result); }