/**
         * 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;
            }
        }
        /**
         * Agrega una regla al negocio.
         **/
        public bool AgregarRegla(Regla pRegla)
        {
            try
            {
                SIFRegla _sifRegla = new SIFRegla();
                _sifRegla.num_prioridad = pRegla.Posicion;
                _sifRegla.txt_estado = pRegla.Estado;
                _sifRegla.txt_nombre = pRegla.Nombre;
                _sifRegla.txt_script = pRegla.StoredProcedure;

                _objConexionBase = new Inclutec_BDEntities();
                _objConexionBase.AddToSIFReglas(_sifRegla);
                _objConexionBase.SaveChanges();
                _objConexionBase.Connection.Close();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        /**
         * Crea una excepcion.
         **/
        public bool CrearExcepcion(int pPeriodo, int pCurso,
            int pGrupo, string pEstudiante)
        {
            try
            {
                SITExcepcion _sitExcepcion = new SITExcepcion();
                _sitExcepcion.FK_Curso_idCurso = pCurso;
                _sitExcepcion.FK_Estudiante_carnet = pEstudiante;
                _sitExcepcion.FK_Grupo_idGrupo = pGrupo;
                _sitExcepcion.FK_Periodo_idPeriodo = pPeriodo;

                _objConexionBase = new Inclutec_BDEntities();
                _objConexionBase.AddToSITExcepcions(_sitExcepcion);
                _objConexionBase.SaveChanges();
                _objConexionBase.Connection.Close();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        /**
         * Define un periodo para la aceptacion de solicitudes.
         **/
        public bool DefinirPeriodoSolicitud(Periodo pPeriodo)
        {
            try
            {
                SIFPeriodo _sifPeriodo = new SIFPeriodo();
                _sifPeriodo.fec_fin = pPeriodo.Fec_Fin;
                _sifPeriodo.fec_inicio = pPeriodo.Fec_Inicio;
                _sifPeriodo.num_anno = pPeriodo.Num_Anno;
                _sifPeriodo.num_periodo = pPeriodo.Num_Periodo;
                _sifPeriodo.txt_estado = pPeriodo.Txt_Estado;
                _sifPeriodo.txt_modalidad = pPeriodo.Txt_Modalidad;

                _objConexionBase = new Inclutec_BDEntities();
                _objConexionBase.AddToSIFPeriodoes(_sifPeriodo);
                _objConexionBase.SaveChanges();
                _objConexionBase.Connection.Close();

                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        /**
         * Guarda los datos del Estudiante en la base de datos
         **/
        public bool GuardarDatosEstudiantes(Estudiante pEstudiante, int pPlanEstudios)
        {
            IMetodosEstudiante _metEstudiante = new MetodosEstudiante();
            _objConexionBase = new Inclutec_BDEntities();
            try
            {
                if (_metEstudiante.EstudianteExiste(pEstudiante.Id_Carnet))
                {
                    SIFEstudiante _sifEstudiante = (from _sifEstudiantes in _objConexionBase.SIFEstudiantes
                                                   where _sifEstudiantes.id_Carnet == pEstudiante.Id_Carnet
                                                   select _sifEstudiantes).First();
                    _sifEstudiante.dir_email = pEstudiante.Dir_Email;
                    _sifEstudiante.num_celular = pEstudiante.Num_Celular;
                    _sifEstudiante.num_telefono = pEstudiante.Num_Telefono;
                }
                else
                {
                    SIFEstudiante _sifeEstudiante = new SIFEstudiante();
                    _sifeEstudiante.id_Carnet = pEstudiante.Id_Carnet;
                    _sifeEstudiante.nom_nombre = pEstudiante.Nom_Nombre;
                    _sifeEstudiante.txt_apellido_1 = pEstudiante.Txt_Apellido1;
                    _sifeEstudiante.txt_apellido_2 = pEstudiante.Txt_Apellido2;
                    _sifeEstudiante.num_telefono = pEstudiante.Num_Telefono;
                    _sifeEstudiante.num_celular = pEstudiante.Num_Celular;
                    _sifeEstudiante.dir_email = pEstudiante.Dir_Email;
                    _sifeEstudiante.FK_PlanEstudios_idPlanEstudios = pPlanEstudios;

                    _objConexionBase.AddToSIFEstudiantes(_sifeEstudiante);
                }

                _objConexionBase.SaveChanges();
                _objConexionBase.Connection.Close();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
        /// <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;
            }
        }
 /**
  * Modifica el estado del periodo.
  **/
 public bool ModificarEstadoPeriodo(int pPeriodo, string pEstado)
 {
     try
     {
         _objConexionBase = new Inclutec_BDEntities();
         SIFPeriodo _sifPeriodo = (from _sifPeriodos in _objConexionBase.SIFPeriodoes
                                   where _sifPeriodos.id_Periodo == pPeriodo
                                   select _sifPeriodos).First();
         _sifPeriodo.txt_estado = pEstado;
         _objConexionBase.SaveChanges();
         return true;
     }
     catch (Exception)
     { return false; }
 }
 /**
  * Modifica el procedimiento de una regla del negocio.
  **/
 public bool ModificarProcedimientoRegla(Regla pNombreProcedimiento, string pProcedimiento)
 {
     try
     {
         _objConexionBase = new Inclutec_BDEntities();
         SIFRegla _sifRegla = (from _sifReglas in _objConexionBase.SIFReglas
                               where _sifReglas.txt_nombre == pNombreProcedimiento.Nombre
                               select _sifReglas).First();
         _sifRegla.txt_script = pProcedimiento;
         _objConexionBase.SaveChanges();
         _objConexionBase.Connection.Close();
         return true;
     }
     catch (Exception)
     {
         return false;
     }
 }
        /**
         * Modifica el orden de las reglas establecido
         * en el archivo OrdenReglas.xml.
         **/
        public bool ModificarOrdenReglas(LinkedList<Regla> pReglas)
        {
            try
            {
                _objConexionBase = new Inclutec_BDEntities();
                var _liReglas = from _sifReglas in _objConexionBase.SIFReglas
                                select _sifReglas;

                foreach(SIFRegla _sifRegla in _liReglas)
                {
                    foreach (Regla _regla in pReglas)
                    {
                        if (_sifRegla.txt_nombre.Equals(_regla.Nombre))
                        {
                            _sifRegla.num_prioridad = _regla.Posicion;
                            break;
                        }
                    }
                }

                _objConexionBase.SaveChanges();
                _objConexionBase.Connection.Close();
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
 /**
  * Elimina una regla del negocio.
  **/
 public bool DesactivarRegla(Regla pRegla)
 {
     try
     {
         _objConexionBase = new Inclutec_BDEntities();
         SIFRegla _sifRegla = (from _sifReglas in _objConexionBase.SIFReglas
                             where _sifReglas.txt_nombre == pRegla.Nombre
                             select _sifReglas).First();
         _sifRegla.txt_estado = "deshabilitada";
         _objConexionBase.SaveChanges();
         _objConexionBase.Connection.Close();
         return true;
     }
     catch (Exception)
     {
         return false;
     }
 }