public SubGrupoUsuario ObtenerSubGrupoUsuario(int idGrupoUsuario, int idSubGrupo) { SubGrupoUsuario result = new SubGrupoUsuario(); DataBaseModelContext db = new DataBaseModelContext(); try { db.ContextOptions.ProxyCreationEnabled = _proxy; result = db.SubGrupoUsuario.SingleOrDefault(s => s.IdGrupoUsuario == idGrupoUsuario && s.Id == idSubGrupo); if (result != null) { db.LoadProperty(result, "SubRol"); db.LoadProperty(result, "GrupoUsuario"); } } catch (Exception ex) { throw new Exception(ex.Message); } finally { db.Dispose(); } return(result); }
public void ActualizarGrupo(GrupoUsuario gpo, Dictionary <int, int> horarios, Dictionary <int, List <DiaFestivoSubGrupo> > diasDescanso) { DataBaseModelContext db = new DataBaseModelContext(); try { db.ContextOptions.LazyLoadingEnabled = true; gpo.Descripcion = gpo.Descripcion.Trim(); if (db.GrupoUsuario.Any(a => a.Descripcion == gpo.Descripcion && a.IdTipoGrupo == gpo.IdTipoGrupo && a.Id != gpo.Id && a.IdTipoUsuario == gpo.IdTipoUsuario)) { throw new Exception("Ya existe un Grupo con esta descripción"); } GrupoUsuario grupo = db.GrupoUsuario.SingleOrDefault(w => w.Id == gpo.Id); List <SubGrupoUsuario> sb = new List <SubGrupoUsuario>(); if (grupo != null) { grupo.Descripcion = gpo.Descripcion.Trim(); #region Manejo de Horarios if (horarios != null && horarios.Count > 0) { foreach (KeyValuePair <int, int> horario in horarios) { var horariosGrupo = from hsg in db.HorarioSubGrupo join sbgu in db.SubGrupoUsuario on hsg.IdSubGrupoUsuario equals sbgu.Id where sbgu.IdGrupoUsuario == grupo.Id select hsg; List <HorarioSubGrupo> lstHorarioSgpoEliminar = horariosGrupo.ToList(); foreach (HorarioSubGrupo horarioDbDelete in lstHorarioSgpoEliminar) { db.HorarioSubGrupo.DeleteObject(horarioDbDelete); } List <HorarioSubGrupo> lstHorarioGpo = new List <HorarioSubGrupo>(); List <HorarioDetalle> detalle = db.HorarioDetalle.Where(w => w.IdHorario == horario.Value).ToList(); foreach (HorarioDetalle horarioDetalle in detalle) { HorarioSubGrupo horarioGpo = new HorarioSubGrupo { IdHorario = horario.Value, IdSubGrupoUsuario = horario.Key, Dia = horarioDetalle.Dia, HoraInicio = horarioDetalle.HoraInicio, HoraFin = horarioDetalle.HoraFin }; lstHorarioGpo.Add(horarioGpo); } SubGrupoUsuario subGrupo = new SubGrupoUsuario { Id = grupo.SubGrupoUsuario.FirstOrDefault(f => f.IdSubRol == horario.Key) != null?grupo.SubGrupoUsuario.First(f => f.IdSubRol == horario.Key).Id : 0, IdGrupoUsuario = grupo.Id, IdSubRol = horario.Key, Habilitado = true }; subGrupo.HorarioSubGrupo = subGrupo.HorarioSubGrupo ?? new List <HorarioSubGrupo>(); subGrupo.DiaFestivoSubGrupo = subGrupo.DiaFestivoSubGrupo ?? new List <DiaFestivoSubGrupo>(); subGrupo.HorarioSubGrupo.AddRange(lstHorarioGpo); List <DiaFestivoSubGrupo> diasDb = db.DiaFestivoSubGrupo.Where(w => w.IdSubGrupoUsuario == subGrupo.Id).ToList(); foreach (DiaFestivoSubGrupo festivoSubGrupo in diasDb) { db.DiaFestivoSubGrupo.DeleteObject(festivoSubGrupo); } List <DiaFestivoSubGrupo> lstDiasDescanso = diasDescanso.SingleOrDefault(w => w.Key == horario.Key).Value; if (lstDiasDescanso != null) { foreach (DiaFestivoSubGrupo dia in lstDiasDescanso) { dia.IdSubGrupoUsuario = horario.Key; } subGrupo.DiaFestivoSubGrupo.AddRange(lstDiasDescanso); } if (grupo.SubGrupoUsuario == null) { grupo.SubGrupoUsuario = new List <SubGrupoUsuario>(); } if (grupo.SubGrupoUsuario.SingleOrDefault(s => s.IdGrupoUsuario == subGrupo.IdGrupoUsuario && s.IdSubRol == subGrupo.IdSubRol) == null) { grupo.SubGrupoUsuario.Add(subGrupo); } else { grupo.SubGrupoUsuario.SingleOrDefault(s => s.IdGrupoUsuario == subGrupo.IdGrupoUsuario && s.IdSubRol == subGrupo.IdSubRol).HorarioSubGrupo = subGrupo.HorarioSubGrupo; } if (grupo.SubGrupoUsuario.SingleOrDefault(s => s.IdGrupoUsuario == subGrupo.IdGrupoUsuario && s.IdSubRol == subGrupo.IdSubRol) == null) { grupo.SubGrupoUsuario.Add(subGrupo); } else { grupo.SubGrupoUsuario.SingleOrDefault(s => s.IdGrupoUsuario == subGrupo.IdGrupoUsuario && s.IdSubRol == subGrupo.IdSubRol).DiaFestivoSubGrupo = subGrupo.DiaFestivoSubGrupo; } //sb.Add(subGrupo); } } #endregion Manejo de Horarios grupo.TieneSupervisor = grupo.SubGrupoUsuario.Any(a => a.IdSubRol == (int)BusinessVariables.EnumSubRoles.Supervisor); #region Manejo de politicas List <EstatusTicketSubRolGeneral> lstEliminarPoliticaEstatus = db.EstatusTicketSubRolGeneral.Where(w => w.IdGrupoUsuario == grupo.Id).ToList(); List <EstatusAsignacionSubRolGeneral> lstEliminarPoliticaEstatusAsignacion = db.EstatusAsignacionSubRolGeneral.Where(w => w.IdGrupoUsuario == grupo.Id).ToList(); foreach (EstatusTicketSubRolGeneral politicaEstatus in lstEliminarPoliticaEstatus) { db.EstatusTicketSubRolGeneral.DeleteObject(politicaEstatus); } foreach (EstatusAsignacionSubRolGeneral politicaAsignacion in lstEliminarPoliticaEstatusAsignacion) { db.EstatusAsignacionSubRolGeneral.DeleteObject(politicaAsignacion); } grupo.EstatusTicketSubRolGeneral = GeneraEstatusGrupoDefault(grupo); grupo.EstatusAsignacionSubRolGeneral = GeneraEstatusAsignacionGrupoDefault(grupo); #endregion Manejo de politicas if (grupo.IdTipoGrupo == (int)BusinessVariables.EnumTiposGrupos.AgenteUniversal) { grupo.LevantaTicket = gpo.LevantaTicket; grupo.RecadoTicket = gpo.RecadoTicket; } } db.SaveChanges(); } catch (Exception ex) { throw new Exception(ex.Message); } finally { db.Dispose(); } }
public void GuardarGrupoUsuario(GrupoUsuario grupoUsuario, Dictionary <int, int> horarios, Dictionary <int, List <DiaFestivoSubGrupo> > diasDescanso) { DataBaseModelContext db = new DataBaseModelContext(); try { grupoUsuario.Descripcion = grupoUsuario.Descripcion.Trim(); if (db.GrupoUsuario.Any(a => a.Descripcion == grupoUsuario.Descripcion && a.IdTipoGrupo == grupoUsuario.IdTipoGrupo && a.IdTipoUsuario == grupoUsuario.IdTipoUsuario)) { throw new Exception("Ya existe un Grupo con esta descripcion"); } grupoUsuario.SubGrupoUsuario = new List <SubGrupoUsuario>(); foreach (KeyValuePair <int, int> horario in horarios) { List <HorarioSubGrupo> lstHorarioGpo = new List <HorarioSubGrupo>(); List <HorarioDetalle> detalle = db.HorarioDetalle.Where(w => w.IdHorario == horario.Value).ToList(); foreach (HorarioDetalle horarioDetalle in detalle) { HorarioSubGrupo horarioGpo = new HorarioSubGrupo { IdHorario = horario.Value, IdSubGrupoUsuario = horario.Key, Dia = horarioDetalle.Dia, HoraInicio = horarioDetalle.HoraInicio, HoraFin = horarioDetalle.HoraFin }; lstHorarioGpo.Add(horarioGpo); } SubGrupoUsuario subGrupo = new SubGrupoUsuario(); subGrupo.IdSubRol = horario.Key; subGrupo.Habilitado = true; subGrupo.HorarioSubGrupo = subGrupo.HorarioSubGrupo ?? new List <HorarioSubGrupo>(); subGrupo.DiaFestivoSubGrupo = subGrupo.DiaFestivoSubGrupo ?? new List <DiaFestivoSubGrupo>(); subGrupo.HorarioSubGrupo.AddRange(lstHorarioGpo); List <DiaFestivoSubGrupo> lstDiasDescanso = diasDescanso.SingleOrDefault(w => w.Key == horario.Key).Value; if (lstDiasDescanso != null) { foreach (DiaFestivoSubGrupo dia in lstDiasDescanso) { dia.IdSubGrupoUsuario = horario.Key; } subGrupo.DiaFestivoSubGrupo.AddRange(lstDiasDescanso); } grupoUsuario.SubGrupoUsuario.Add(subGrupo); } db.ContextOptions.ProxyCreationEnabled = _proxy; //TODO: Cambiar habilitado por el que viene embebido grupoUsuario.Habilitado = true; grupoUsuario.TieneSupervisor = grupoUsuario.SubGrupoUsuario.Any(a => a.IdSubRol == (int)BusinessVariables.EnumSubRoles.Supervisor); if (grupoUsuario.Id == 0) { grupoUsuario.EstatusTicketSubRolGeneral = GeneraEstatusGrupoDefault(grupoUsuario); grupoUsuario.EstatusAsignacionSubRolGeneral = GeneraEstatusAsignacionGrupoDefault(grupoUsuario); db.GrupoUsuario.AddObject(grupoUsuario); } db.SaveChanges(); } catch (Exception ex) { throw new Exception(ex.Message); } finally { db.Dispose(); } }