/// <summary>
        /// metodo para abrir el popup de edicion de fecha
        /// </summary>
        /// <param name="obj">un objeto tipo grupo_horario o un objeto tipo datetime</param>
        private async void AbrirAgenda(object obj)
        {
            try
            {
                StaticSourcesViewModel.ShowMensajeProgreso("Abriendo Modal");
                ListArea = ListArea ?? await StaticSourcesViewModel.CargarDatosAsync <ObservableCollection <AREA> >(() => new ObservableCollection <AREA>(new cArea().GetData().Where(w => w.ID_TIPO_AREA != 5)));

                ListEstatusGrupo = ListEstatusGrupo ?? await StaticSourcesViewModel.CargarDatosAsync <ObservableCollection <GRUPO_HORARIO_ESTATUS> >(() => new ObservableCollection <GRUPO_HORARIO_ESTATUS>(new cGrupoHorarioEstatus().GetData()));

                SelectedArea         = null;
                SelectedEstatusGrupo = 1;
                EditFechaInicio      = null;
                EditFechaFin         = null;
                SelectedFecha        = null;
                await TaskEx.Delay(1);

                EntityUpdate = null;
                AgregarFecha = Visibility.Collapsed;

                PopUpsViewModels.ShowPopUp(this, PopUpsViewModels.TipoPopUp.EDITAR_FECHA);

                if (obj == null)
                {
                    return;
                }

                // se valida de que tipo es el objeto
                if (obj is GRUPO_HORARIO)
                {
                    EntityUpdate = (GRUPO_HORARIO)obj;

                    SelectedArea         = EntityUpdate.ID_AREA;
                    SelectedEstatusGrupo = EntityUpdate.ESTATUS;
                    EditFechaInicio      = EntityUpdate.HORA_INICIO;
                    EditFechaFin         = EntityUpdate.HORA_TERMINO;

                    SelectedFecha = EntityUpdate.HORA_INICIO.Value.Date;
                }
                else
                {
                    SelectedFecha = (DateTime)obj;
                }

                await TaskEx.Delay(1);

                if (ListInternosDia == null)
                {
                    await TaskEx.Delay(1);
                }

                DatagridHorario.ItemsSource = ListInternosDia.Where(w => w.ListHorario.Any());
                StaticSourcesViewModel.CloseMensajeProgreso();
            }
            catch (Exception ex)
            {
                StaticSourcesViewModel.ShowMessageError("Algo pasó...", "Ocurrió un error al abrir agenda", ex);
            }
        }
        /// <summary>
        /// metodo que tiene todas la funcionalidad de los clicks
        /// </summary>
        /// <param name="obj">parametro del evento click</param>
        private async void clickSwitch(Object obj)
        {
            try
            {
                var respuesta = false;
                switch (obj.ToString())
                {
                case "menu_guardar":

                    break;

                case "menu_agregar":
                    if (!SelectedPrograma.HasValue || !SelectedActividad.HasValue || SelectedGrupo == null)
                    {
                        return;
                    }

                    ListArea = ListArea ?? await StaticSourcesViewModel.CargarDatosAsync <ObservableCollection <AREA> >(() => new ObservableCollection <AREA>(new cArea().GetData().Where(w => w.ID_TIPO_AREA != 5)));

                    ListEstatusGrupo = ListEstatusGrupo ?? await StaticSourcesViewModel.CargarDatosAsync <ObservableCollection <GRUPO_HORARIO_ESTATUS> >(() => new ObservableCollection <GRUPO_HORARIO_ESTATUS>(new cGrupoHorarioEstatus().GetData()));

                    SelectedEstatusGrupo = 1;

                    SelectedArea    = null;
                    EditFechaInicio = null;
                    EditFechaFin    = null;
                    SelectedFecha   = FechaServer.Date;
                    EntityUpdate    = null;
                    AgregarFecha    = Visibility.Visible;

                    PopUpsViewModels.ShowPopUp(this, PopUpsViewModels.TipoPopUp.EDITAR_FECHA);
                    break;

                case "menu_eliminar":
                    break;

                case "menu_editar":
                    if (SelectedGrupo == null)
                    {
                        return;
                    }

                    ListEstatus       = ListEstatus ?? new ObservableCollection <GRUPO_PARTICIPANTE_ESTATUS>(new cGrupoParticipanteEstatus().GetData().Where(w => w.ID_ESTATUS == 2 || w.ID_ESTATUS == 3 || w.ID_ESTATUS == 4));
                    ListInternosGrupo = new ObservableCollection <ListaManejoInternos>(new cGrupoParticipante().GetData().Where(w => w.ID_GRUPO == SelectedGrupo.ID_GRUPO && (w.GRUPO_PARTICIPANTE_CANCELADO.Where(wh => (wh.ID_CENTRO == w.ID_CENTRO && wh.ID_TIPO_PROGRAMA == w.ID_TIPO_PROGRAMA && wh.ID_ACTIVIDAD == w.ID_ACTIVIDAD && wh.ID_CONSEC == w.ID_CONSEC && wh.ID_GRUPO == w.ID_GRUPO)).Any() ?

                                                                                                                                                                              w.GRUPO_PARTICIPANTE_CANCELADO.Where(wh => (wh.ID_CENTRO == w.ID_CENTRO && wh.ID_TIPO_PROGRAMA == w.ID_TIPO_PROGRAMA && wh.ID_ACTIVIDAD == w.ID_ACTIVIDAD && wh.ID_CONSEC == w.ID_CONSEC) &&
                                                                                                                                                                                                                   (wh.RESPUESTA_FEC == null ?

                                                                                                                                                                                                                    (wh.RESPUESTA_FEC == null && wh.ESTATUS == 0) :

                                                                                                                                                                                                                    (w.GRUPO_PARTICIPANTE_CANCELADO.Where(whe => (whe.ID_CENTRO == w.ID_CENTRO && whe.ID_TIPO_PROGRAMA == w.ID_TIPO_PROGRAMA && whe.ID_ACTIVIDAD == w.ID_ACTIVIDAD && whe.ID_CONSEC == w.ID_CONSEC) && whe.RESPUESTA_FEC != null && (whe.ESTATUS == 0 || whe.ESTATUS == 2)).Count() == w.GRUPO_PARTICIPANTE_CANCELADO.Where(whe => (whe.ID_CENTRO == w.ID_CENTRO && whe.ID_TIPO_PROGRAMA == w.ID_TIPO_PROGRAMA && whe.ID_ACTIVIDAD == w.ID_ACTIVIDAD && whe.ID_CONSEC == w.ID_CONSEC)).Count()))).Any()


                                : true)).OrderBy(o => o.ING_ID_ANIO).ThenBy(t => t.ING_ID_IMPUTADO).AsEnumerable().Select(s => new ListaManejoInternos()
                    {
                        Entity  = s,
                        FOLIO   = s.INGRESO.IMPUTADO.ID_ANIO + "\\" + s.INGRESO.IMPUTADO.ID_IMPUTADO,
                        PATERNO = s.INGRESO.IMPUTADO.PATERNO.Trim(),
                        MATERNO = s.INGRESO.IMPUTADO.MATERNO.Trim(),
                        NOMBRE  = s.INGRESO.IMPUTADO.NOMBRE.Trim(),
                        ListEstatusGrupoParticipante = ListEstatus,
                        SelectEstatus = s.ESTATUS
                    }));

                    PopUpsViewModels.ShowPopUp(this, PopUpsViewModels.TipoPopUp.EDITAR_INTEGRANTES_GRUPO);
                    break;

                case "menu_cancelar":
                    ((System.Windows.Controls.ContentControl)PopUpsViewModels.MainWindow.FindName("contentControl")).Content     = new ManejoGruposView();
                    ((System.Windows.Controls.ContentControl)PopUpsViewModels.MainWindow.FindName("contentControl")).DataContext = new ManejoGruposViewModel();
                    break;

                case "menu_ayuda":
                    break;

                case "menu_salir":
                    PrincipalViewModel.SalirMenu();
                    break;

                case "guardar_EdicionFecha":
                    if (SelectedArea == null || SelectedEstatusGrupo == null || EditFechaInicio == null || EditFechaFin == null || FechaValidateEditHasError || !SelectedFecha.HasValue)
                    {
                        if (await new Dialogos().ConfirmacionDialogoReturn("Manejo de Grupo", "Faltan Campos Por Capturar") == 1)
                        {
                            return;
                        }
                    }

                    if (AgregarFecha == Visibility.Visible)
                    {
                        EntityUpdate = new cGrupoHorario().GetData().Where(w => w.ID_GRUPO == SelectedGrupo.ID_GRUPO && (w.HORA_INICIO.Value.Year == SelectedFecha.Value.Year && w.HORA_INICIO.Value.Month == SelectedFecha.Value.Month && w.HORA_INICIO.Value.Day == SelectedFecha.Value.Day)).FirstOrDefault();
                    }

                    if (EntityUpdate != null)
                    {
                        respuesta = await StaticSourcesViewModel.OperacionesAsync <bool>("Actualizando Fecha Del Grupo", () =>
                        {
                            try
                            {
                                new cGrupoHorario().Update(new GRUPO_HORARIO()
                                {
                                    ESTATUS          = SelectedEstatusGrupo,
                                    HORA_INICIO      = new DateTime(EntityUpdate.HORA_INICIO.Value.Year, EntityUpdate.HORA_INICIO.Value.Month, EntityUpdate.HORA_INICIO.Value.Day, EditFechaInicio.Value.Hour, EditFechaInicio.Value.Minute, 0),
                                    HORA_TERMINO     = new DateTime(EntityUpdate.HORA_TERMINO.Value.Year, EntityUpdate.HORA_TERMINO.Value.Month, EntityUpdate.HORA_TERMINO.Value.Day, EditFechaFin.Value.Hour, EditFechaFin.Value.Minute, 0),
                                    ID_ACTIVIDAD     = EntityUpdate.ID_ACTIVIDAD,
                                    ID_AREA          = SelectedArea,
                                    ID_CENTRO        = EntityUpdate.ID_CENTRO,
                                    ID_GRUPO         = EntityUpdate.ID_GRUPO,
                                    ID_GRUPO_HORARIO = EntityUpdate.ID_GRUPO_HORARIO,
                                    ID_TIPO_PROGRAMA = EntityUpdate.ID_TIPO_PROGRAMA
                                });

                                EditFechaInicio = EditFechaInicio.Value.AddSeconds(1);

                                foreach (var item in ListInternosDia)
                                {
                                    var update = new cGrupoAsistencia().GetData().Where(w => w.ID_CENTRO == item.Entity.ID_CENTRO && w.ID_TIPO_PROGRAMA == item.Entity.ID_TIPO_PROGRAMA && w.ID_ACTIVIDAD == item.Entity.ID_ACTIVIDAD && w.ID_GRUPO == item.Entity.ID_GRUPO.Value && w.ID_GRUPO_HORARIO == EntityUpdate.ID_GRUPO_HORARIO && w.ID_CONSEC == item.Entity.ID_CONSEC).FirstOrDefault();
                                    if (update == null)
                                    {
                                        continue;
                                    }

                                    var updateempalme = ListInternosDia.Where(w => w.Entity.ID_CENTRO == item.Entity.ID_CENTRO && w.Entity.ID_TIPO_PROGRAMA == item.Entity.ID_TIPO_PROGRAMA && w.Entity.ID_ACTIVIDAD == item.Entity.ID_ACTIVIDAD && w.Entity.ID_GRUPO == item.Entity.ID_GRUPO.Value && w.Entity.GRUPO.GRUPO_HORARIO.Where(wh => wh.ID_CENTRO == item.Entity.ID_CENTRO && wh.ID_TIPO_PROGRAMA == item.Entity.ID_TIPO_PROGRAMA && wh.ID_ACTIVIDAD == item.Entity.ID_ACTIVIDAD && wh.ID_GRUPO == item.Entity.ID_GRUPO.Value && wh.ID_GRUPO_HORARIO == EntityUpdate.ID_GRUPO_HORARIO).Any() && w.Entity.ID_CONSEC == item.Entity.ID_CONSEC).FirstOrDefault().State == "Empalme";

                                    new cGrupoAsistencia().Update(new GRUPO_ASISTENCIA()
                                    {
                                        ID_CENTRO        = update.ID_CENTRO,
                                        ID_TIPO_PROGRAMA = update.ID_TIPO_PROGRAMA,
                                        ID_ACTIVIDAD     = update.ID_ACTIVIDAD,
                                        ID_GRUPO         = update.ID_GRUPO,
                                        ID_GRUPO_HORARIO = update.ID_GRUPO_HORARIO,
                                        ID_CONSEC        = update.ID_CONSEC,
                                        FEC_REGISTRO     = update.FEC_REGISTRO,
                                        ASISTENCIA       = update.ASISTENCIA,
                                        EMPALME          = updateempalme ? update.EMPALME : 0,
                                        EMP_COORDINACION = updateempalme ? update.EMP_COORDINACION : 0,
                                        EMP_APROBADO     = updateempalme ? update.EMP_APROBADO : null,
                                        EMP_FECHA        = updateempalme ? update.EMP_FECHA : null,
                                        ESTATUS          = update.ESTATUS
                                    });
                                }

                                if (ListInternosDia.Where(w => w.Revision && w.ListHorario != null && w.ListHorario.Where(wh => wh.State.Equals("Empalme")).Any()).Any())
                                {
                                    var listGA       = new List <ListaEmpalmesInterno>();
                                    var entitylistGH = new List <GRUPO_HORARIO>();
                                    foreach (var item in ListInternosDia.Where(w => w.Revision && w.ListHorario != null && w.ListHorario.Where(wh => wh.State.Equals("Empalme")).Any()))
                                    {
                                        foreach (var itemLisAct in item.ListHorario.Where(w => w.State.Equals("Empalme")))
                                        {
                                            entitylistGH.Add(itemLisAct.GrupoHorarioEntity);
                                        }
                                        listGA.Add(new ListaEmpalmesInterno()
                                        {
                                            EntityGrupoParticipante = item.Entity, ListGrupoHorario = entitylistGH
                                        });
                                    }
                                    new cGrupoAsistencia().GenerarEmpalmes(listGA);
                                }
                                return(true);
                            }
                            catch (Exception ex)
                            {
                                StaticSourcesViewModel.ShowMessageError("Algo pasó...", "Ocurrió un error al modificar el estatus de los integrantes del grupo", ex);
                                return(false);
                            }
                        });

                        if (respuesta)
                        {
                            await new Dialogos().ConfirmacionDialogoReturn("Manejo de Grupos", "El horario se modifico exitosamente");
                        }
                    }
                    else
                    {
                        respuesta = await StaticSourcesViewModel.OperacionesAsync <bool>("Insertando Nueva Fecha Para El Grupo", () =>
                        {
                            try
                            {
                                var idGH = new cGrupoHorario().Insertar(new GRUPO_HORARIO()
                                {
                                    ESTATUS          = SelectedEstatusGrupo,
                                    HORA_INICIO      = new DateTime(SelectedFecha.Value.Year, SelectedFecha.Value.Month, SelectedFecha.Value.Day, EditFechaInicio.Value.Hour, EditFechaInicio.Value.Minute, 0),
                                    HORA_TERMINO     = new DateTime(SelectedFecha.Value.Year, SelectedFecha.Value.Month, SelectedFecha.Value.Day, EditFechaFin.Value.Hour, EditFechaFin.Value.Minute, 0),
                                    ID_ACTIVIDAD     = SelectedActividad.Value,
                                    ID_AREA          = SelectedArea,
                                    ID_CENTRO        = GlobalVar.gCentro,
                                    ID_GRUPO         = SelectedGrupo.ID_GRUPO,
                                    ID_TIPO_PROGRAMA = SelectedPrograma.Value
                                });

                                foreach (var item in ListInternosDia)
                                {
                                    if (item.State != "Empalme" || item.Revision)
                                    {
                                        new cGrupoAsistencia().Insert(new GRUPO_ASISTENCIA()
                                        {
                                            ID_CENTRO        = GlobalVar.gCentro,
                                            ID_TIPO_PROGRAMA = item.Entity.ID_TIPO_PROGRAMA,
                                            ID_ACTIVIDAD     = item.Entity.ID_ACTIVIDAD,
                                            ID_GRUPO         = item.Entity.ID_GRUPO.Value,
                                            ID_GRUPO_HORARIO = idGH.ID_GRUPO_HORARIO,
                                            ID_CONSEC        = item.Entity.ID_CONSEC,
                                            FEC_REGISTRO     = Fechas.GetFechaDateServer,
                                            ASISTENCIA       = null,
                                            EMPALME          = 0,
                                            EMP_COORDINACION = 0,
                                            EMP_APROBADO     = null,
                                            EMP_FECHA        = null,
                                            ESTATUS          = 1
                                        });
                                    }
                                }

                                if (ListInternosDia.Where(w => w.Revision && w.ListHorario != null && w.ListHorario.Where(wh => wh.State.Equals("Empalme")).Any()).Any())
                                {
                                    var listGA       = new List <ListaEmpalmesInterno>();
                                    var entitylistGH = new List <GRUPO_HORARIO>();
                                    foreach (var item in ListInternosDia.Where(w => w.Revision && w.ListHorario != null && w.ListHorario.Where(wh => wh.State.Equals("Empalme")).Any()))
                                    {
                                        foreach (var itemLisAct in item.ListHorario.Where(w => w.State.Equals("Empalme")))
                                        {
                                            entitylistGH.Add(itemLisAct.GrupoHorarioEntity);
                                        }
                                        listGA.Add(new ListaEmpalmesInterno()
                                        {
                                            EntityGrupoParticipante = item.Entity, ListGrupoHorario = entitylistGH
                                        });
                                    }
                                    new cGrupoAsistencia().GenerarEmpalmes(listGA);
                                }

                                return(true);
                            }
                            catch (Exception ex)
                            {
                                StaticSourcesViewModel.ShowMessageError("Algo pasó...", "Ocurrió un error al modificar el estatus de los integrantes del grupo", ex);
                                return(false);
                            }
                        });

                        if (respuesta)
                        {
                            await new Dialogos().ConfirmacionDialogoReturn("Manejo de Grupos", "El nuevo horario se agrego exitosamente");
                        }
                    }

                    CargarCalendarioGrupo(new cGrupo().GetData().Where(w => w.ID_GRUPO == SelectedGrupo.ID_GRUPO).FirstOrDefault());
                    TextError = null;
                    PopUpsViewModels.ClosePopUp(PopUpsViewModels.TipoPopUp.EDITAR_FECHA);
                    break;

                case "cancelar_EdicionFecha":
                    PopUpsViewModels.ClosePopUp(PopUpsViewModels.TipoPopUp.EDITAR_FECHA);
                    break;

                case "guardar_EdicionIntegrantesGrupo":
                    respuesta = await StaticSourcesViewModel.OperacionesAsync <bool>("Actualizando estatus a los internos", () =>
                    {
                        try
                        {
                            var dal = new cGrupoParticipanteCancelado();
                            foreach (var item in ListInternosGrupo.Where(w => w.SelectEstatus != 2))
                            {
                                dal.InsertarParticipanteCancelado(new GRUPO_PARTICIPANTE_CANCELADO()
                                {
                                    ID_CENTRO        = item.Entity.ID_CENTRO,
                                    ID_ACTIVIDAD     = item.Entity.ID_ACTIVIDAD,
                                    ID_TIPO_PROGRAMA = item.Entity.ID_TIPO_PROGRAMA,
                                    ID_CONSEC        = item.Entity.ID_CONSEC,
                                    ID_GRUPO         = item.Entity.ID_GRUPO.Value,
                                    ID_USUARIO       = GlobalVar.gUsr,
                                    SOLICITUD_FEC    = Fechas.GetFechaDateServer,
                                    RESPUESTA_FEC    = null,
                                    MOTIVO           = item.MOTIVO,
                                    ID_ESTATUS       = item.SelectEstatus
                                });
                            }
                            return(true);
                        }
                        catch (Exception ex)
                        {
                            StaticSourcesViewModel.ShowMessageError("Algo pasó...", "Ocurrió un error al modificar el estatus de los integrantes del grupo", ex);
                            return(false);
                        }
                    });

                    if (respuesta)
                    {
                        PopUpsViewModels.ClosePopUp(PopUpsViewModels.TipoPopUp.EDITAR_INTEGRANTES_GRUPO);
                        await new Dialogos().ConfirmacionDialogoReturn("Manejo de Grupo", "El cambio de estatus se actualizo exitosamente");
                    }
                    break;

                case "cancelar_EdicionIntegranteGrupo":
                    PopUpsViewModels.ClosePopUp(PopUpsViewModels.TipoPopUp.EDITAR_INTEGRANTES_GRUPO);
                    break;
                }
            }
            catch (Exception ex)
            {
                StaticSourcesViewModel.ShowMessageError("Algo pasó...", "Ocurrió un error en la modificacion de la agenda", ex);
            }
        }