protected void btnAnular_Click(object sender, EventArgs e)
        {
            ImageButton boton = sender as ImageButton;
            TableCell celda = boton.Parent as TableCell;
            TableRow fila = celda.Parent as TableRow;
            int indexActual = tblPendientes.Rows.GetRowIndex(fila);

            int _idSolicitud = int.Parse(tblPendientes.Rows[indexActual].Cells[0].Text);
            Solicitud _solicitudPorAnular = new Solicitud();

            LinkedList<Solicitud> _solicitudesPendientes = (LinkedList<Solicitud>)Session["LISTA_PENDIENTES"];
            foreach (var _solicitud in _solicitudesPendientes)
            {
                if (_solicitud.Id_Solicitud.Equals(_idSolicitud))
                {
                    _solicitudPorAnular = _solicitud;
                }
            }

            IMetodosEstudiante _metEstudiante = new MetodosEstudiante();
            bool _resultado = _metEstudiante.AnularSolicitud(_solicitudPorAnular);

            if (_resultado)
            {
                Page.Response.Redirect(Page.Request.Url.PathAndQuery);
            }
            else
            {
                lblPopupHeader.Text = "Error al anular solicitud";
                lblPopupBody.Text = "La solicitud no ha sido anulada.";
                Pop_Alerta.Show();
            }
        }
        /// <summary>
        /// Define las acciones del boton Enviar.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Button1_Click(object sender, EventArgs e)
        {
            Ado.ClasesComunes.Estudiante _estudianteDatos = (Ado.ClasesComunes.Estudiante)Session["Estudiante"];
            PlanEstudios _planEstudios = (PlanEstudios)Session["Plan"];

            IMetodosAdministrador _metAdmin = new MetodosAdministrador();
            Periodo _perUltimo = _metAdmin.UltimoPeriodo();

            Solicitud _solicitudNueva = new Solicitud();
            _solicitudNueva.Fec_Creacion = DateTime.Now;
            _solicitudNueva.Txt_Comentario = txtComentario.Text;
            _solicitudNueva.txt_Curso = ddlCursos.SelectedValue;
            _solicitudNueva.Txt_Estado = "PENDIENTE";
            _solicitudNueva.Txt_Motivo = "";

            IMetodosEstudiante _metEstudiante = new MetodosEstudiante();
            _metEstudiante.GuardarDatosEstudiantes(_estudianteDatos, _planEstudios.Id_Plan_Estudios);

            if ((_perUltimo.Fec_Inicio <= _solicitudNueva.Fec_Creacion) &&
                (_perUltimo.Fec_Fin >= _solicitudNueva.Fec_Creacion))
            {
                _metEstudiante.GuardarSolicitud(_estudianteDatos.Id_Carnet, _perUltimo.Id_Periodo, _solicitudNueva);
            }
            else
            {
                ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "Error al crear la solicitud",
                    "alert('Su solicitud no pudo ser procesada, ya que no fue realizada dentro del periodo de recepción');",true);
            }
        }
        /**
         * Crea una nueva solicitud en la base de datos
         **/
        public bool GuardarSolicitud(string pEstudiante, int pPeriodo, Solicitud pSolicitud)
        {
            IMetodosEstudiante _metEstudiante = new MetodosEstudiante();
            IMetodosAdministrador _metAdmin = new MetodosAdministrador();
            Periodo _perUltimo = _metAdmin.UltimoPeriodo();

            pSolicitud.Txt_Estado = "PENDIENTE";

            if ((_perUltimo.Fec_Inicio <= pSolicitud.Fec_Creacion) &&
                (_perUltimo.Fec_Fin >= pSolicitud.Fec_Creacion))
            {
                _metEstudiante.GuardarSolicitud(pEstudiante, pPeriodo, pSolicitud);
                return true;
            }
            else
            {
                return false;
            }
        }
        /**
         * Anula la solicitud especificada
         **/
        public bool AnularSolicitud(Solicitud pSolicitud)
        {
            try
            {
                _objConexionBase = new Inclutec_BDEntities();

                SIFSolicitud _sifSolicitud = (from _sifSolicitudes in _objConexionBase.SIFSolicituds
                                              where _sifSolicitudes.id_Solicitud == pSolicitud.Id_Solicitud
                                              select _sifSolicitudes).First();
                _sifSolicitud.txt_estado = _sifSolicitud.txt_estado;

                _objConexionBase.SaveChanges();
                _objConexionBase.Connection.Close();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
 /**
  * Guarda la relacion entre el grupo y la solicitud
  **/
 public bool GuardarGruposSolicitud(Solicitud pSolicitud, LinkedList<Grupo> pGrupos)
 {
     IMetodosEstudiante _metEstudiante = new MetodosEstudiante();
     return _metEstudiante.GuardarGruposSolicitud(pSolicitud, pGrupos);
 }
 /**
  * Anula la solicitud especificada
  **/
 public bool AnularSolicitud(Solicitud pSolicitud)
 {
     IMetodosEstudiante _metEstudiante = new MetodosEstudiante();
     return _metEstudiante.AnularSolicitud(pSolicitud);
 }
        /**
         * Retorna las solicitudes reprobadas hechas por el _sifeEstudiante
         **/
        public LinkedList<Solicitud> ObtenerSolicitudesReprobadas(string pCarnet, int pPeriodo)
        {
            try
            {
                _objConexionBase = new Inclutec_BDEntities();

                var _dataSolicitudes = from _sifSolicitudes in _objConexionBase.SIFSolicituds
                                       where _sifSolicitudes.FK_Estudiante_carnet == pCarnet
                                       && _sifSolicitudes.FK_Periodo_idPeriodo == pPeriodo
                                       && _sifSolicitudes.txt_estado == "REPROBADA"
                                       select _sifSolicitudes;

                LinkedList<Solicitud> _liSolicitudes = new LinkedList<Solicitud>();

                foreach (SIFSolicitud _sifSolicitud in _dataSolicitudes)
                {
                    Solicitud _solicitud = new Solicitud();
                    _solicitud.Id_Solicitud = _sifSolicitud.id_Solicitud;
                    _solicitud.Fec_Creacion = _sifSolicitud.fec_creacion;
                    _solicitud.Txt_Comentario = _sifSolicitud.txt_comentario;
                    _solicitud.Txt_Estado = _sifSolicitud.txt_estado;
                    _solicitud.Txt_Motivo = _sifSolicitud.txt_motivo;
                    _solicitud.txt_Curso = _sifSolicitud.txt_curso;
                    _liSolicitudes.AddLast(_solicitud);
                }

                _objConexionBase.Connection.Close();
                return _liSolicitudes;
            }
            catch (Exception)
            {
                return null;
            }
        }
        /**
         * Obtiene la solicitud especificada por el id
         **/
        public Solicitud ObtenerSolicitudEspecificada(int pSolicitud)
        {
            try
            {
                _objConexionBase = new Inclutec_BDEntities();
                SIFSolicitud _sifSolicitud = (from _sifSolicitudes in _objConexionBase.SIFSolicituds
                                              where _sifSolicitudes.id_Solicitud == pSolicitud
                                              select _sifSolicitudes).First();
                _objConexionBase.Connection.Close();

                Solicitud _solicitud = new Solicitud();
                _solicitud.Fec_Creacion = _sifSolicitud.fec_creacion;
                _solicitud.Id_GrupoAceptado = _sifSolicitud.grupo_aceptado;
                _solicitud.Id_Solicitud = _sifSolicitud.id_Solicitud;
                _solicitud.Txt_Comentario = _sifSolicitud.txt_comentario;
                _solicitud.txt_Curso = _sifSolicitud.txt_curso;
                _solicitud.Txt_Estado = _sifSolicitud.txt_estado;
                _solicitud.Txt_Motivo = _sifSolicitud.txt_motivo;

                return _solicitud;
            }
            catch(Exception)
            {
                return null;
            }
        }
        /**
         * Retorna los grupos especificados en una solicitud de inclusion
         **/
        public LinkedList<Grupo_Por_Solicitud> ObtenerGruposInclusion(Solicitud pSolicitud)
        {
            try
            {
                _objConexionBase = new Inclutec_BDEntities();

                var _liGruposSolicitud = from _sifGruposSolicitud in _objConexionBase.SIFGrupo_Por_Solicitud
                                         where _sifGruposSolicitud.FK_Solicitud_idSolicitud == pSolicitud.Id_Solicitud
                                         select _sifGruposSolicitud;

                LinkedList<Grupo_Por_Solicitud> _liGrupos = new LinkedList<Grupo_Por_Solicitud>();

                foreach(SIFGrupo_Por_Solicitud _sifGrupoSolicitud in _liGruposSolicitud){

                    //Obtiene el grupo por solicitud
                    Grupo_Por_Solicitud _gpsGrupo = new Grupo_Por_Solicitud();
                    _gpsGrupo.Id_Grupo_Por_Solicitud = _sifGrupoSolicitud.id_Grupo_Por_Solicitud;
                    _gpsGrupo.Num_Prioridad = _sifGrupoSolicitud.num_prioridad;

                    //Obtiene el grupo
                    SIFGrupo _sifGrupo = (from _sifGrupos in _objConexionBase.SIFGrupoes
                                        where _sifGrupos.id_Grupo == _sifGrupoSolicitud.FK_Grupo_idGrupo
                                        select _sifGrupos).First();

                    Grupo _gGrupo = new Grupo();
                    _gGrupo.Id_Curso = _sifGrupo.FK_Curso_idCurso;
                    _gGrupo.Id_Grupo = _sifGrupo.id_Grupo;
                    _gGrupo.Num_Cupos = _sifGrupo.num_cupos;
                    _gGrupo.Num_Cupos_Extra = _sifGrupo.num_cupos_extra;
                    _gGrupo.Num_Grupo = _sifGrupo.num_grupo;

                    //Define los horarios para los grupos
                    var _liHorarios = from _sitHorarios in _objConexionBase.SITHorarios
                                      where _sitHorarios.FK_Grupo_idGrupo == _gGrupo.Id_Grupo
                                      select _sitHorarios;

                    _gGrupo.Li_Horarios = new LinkedList<Horario>();

                    foreach (SITHorario _sitHorario in _liHorarios)
                    {
                        Horario _hHorario = new Horario();
                        _hHorario.Id_Horario = _sitHorario.id_Horario;
                        _hHorario.Txt_Dia = _sitHorario.txt_dia;
                        _hHorario.Txt_Hora_Final = _sitHorario.tim_hora_fin.ToString();
                        _hHorario.Txt_Hora_Inicio = _sitHorario.tim_hora_inicio.ToString();
                        _gGrupo.Li_Horarios.AddLast(_hHorario);
                    }

                    //Define el grupo de grupo por solicitud
                    _gpsGrupo.Id_Grupo = _gGrupo;

                    //Agrega grupo por solicitud a la lista
                    _liGrupos.AddLast(_gpsGrupo);
                }

                _objConexionBase.Connection.Close();
                return _liGrupos;
            }
            catch (Exception)
            {
                return null;
            }
        }
        /// <summary>
        /// Modifica los grupos especificados en una solicitud
        /// </summary>
        /// <param name="pSolicitud"></param>
        /// <param name="pEliminados">Contiene los ids de los grupos por solicitud eliminados</param>
        /// <returns></returns>
        public bool ModificiarSolicitud(Solicitud pSolicitud, LinkedList<int> pEliminados)
        {
            _objConexionBase = new Inclutec_BDEntities();

            //Obtiene los grupos por solicitud de la solicitud
            var _sifGrupos = from _sifGPS in _objConexionBase.SIFGrupo_Por_Solicitud
                             where _sifGPS.FK_Solicitud_idSolicitud == pSolicitud.Id_Solicitud
                             select _sifGPS;

            //Asigna las nuevas prioridades y elimina los grupos marcados a eliminar
            foreach (SIFGrupo_Por_Solicitud _sifGPS in _sifGrupos)
            {
                if (pEliminados.Contains(_sifGPS.id_Grupo_Por_Solicitud))
                {
                    _objConexionBase.DeleteObject(_sifGPS);
                }
                else
                {
                    foreach (Grupo_Por_Solicitud _gpsGrupo in pSolicitud.Li_Grupos)
                    {
                        if (_sifGPS.id_Grupo_Por_Solicitud == _gpsGrupo.Id_Grupo_Por_Solicitud)
                        {
                            _sifGPS.num_prioridad = _gpsGrupo.Num_Prioridad;
                            break;
                        }
                    }
                }
            }

            _objConexionBase.SaveChanges();
            _objConexionBase.Connection.Close();
            return true;
        }
        /**
         * Guarda la solicitud creada por el _sifeEstudiante
         **/
        public Solicitud GuardarSolicitud(string pEstudiante, int pPeriodo, 
            Solicitud pSolicitud)
        {
            try
            {
                SIFSolicitud _sifSolicitud = new SIFSolicitud();
                _sifSolicitud.txt_comentario = pSolicitud.Txt_Comentario;
                _sifSolicitud.txt_curso = pSolicitud.txt_Curso;
                _sifSolicitud.txt_estado = pSolicitud.Txt_Estado;
                _sifSolicitud.txt_motivo = pSolicitud.Txt_Motivo;
                _sifSolicitud.grupo_aceptado = 0;
                _sifSolicitud.fec_creacion = DateTime.Now;
                _sifSolicitud.FK_Estudiante_carnet = pEstudiante;
                _sifSolicitud.FK_Periodo_idPeriodo = pPeriodo;

                _objConexionBase = new Inclutec_BDEntities();
                _objConexionBase.AddToSIFSolicituds(_sifSolicitud);
                _objConexionBase.SaveChanges();
                _objConexionBase.Connection.Close();
                pSolicitud.Id_Solicitud = _sifSolicitud.id_Solicitud;
                return pSolicitud;
            }catch (Exception)
            {
                return null;
            }
        }
        /// <summary>
        /// Guarda los grupos de una solicitud
        /// </summary>
        /// <param name="pSolicitud"></param>
        /// <param name="pGrupos">Debe ir ordenada en cuanto a prioridad, 
        /// entre mayor la prioridad, mas antes tiene que ir el grupo</param>
        /// <returns></returns>
        public bool GuardarGruposSolicitud(Solicitud pSolicitud, LinkedList<Grupo> pGrupos)
        {
            try
            {
                int _iPrioridad = 1;
                _objConexionBase = new Inclutec_BDEntities();
                foreach(Grupo _gGrupo in pGrupos)
                {
                    SIFGrupo_Por_Solicitud _sifGrupo = new SIFGrupo_Por_Solicitud();
                    _sifGrupo.num_prioridad = _iPrioridad;
                    _sifGrupo.FK_Grupo_idGrupo = _gGrupo.Id_Grupo;
                    _sifGrupo.FK_Solicitud_idSolicitud = pSolicitud.Id_Solicitud;
                    _objConexionBase.AddToSIFGrupo_Por_Solicitud(_sifGrupo);
                    _iPrioridad++;
                }

                _objConexionBase.SaveChanges();
                _objConexionBase.Connection.Close();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }