/// <summary>
 /// crea una EstudianteCarrera nuevo
 /// </summary>
 /// <param name="dato"></param>
 public void nuevo(EstudianteCarrera dato)
 {
     if (!this.existe(dato))
     {
         this.estudianteCarreraDao.nuevo(dato);
     }
     else
     {
         throw new Exception("Ya existe el registro.");
     }
 }
  /// <summary>
 /// elimina un EstudianteCarrera
 /// </summary>
 /// <param name="dato"></param>
 public void eliminar(EstudianteCarrera dato)
 {
     if (this.existe(dato))
     {
         this.estudianteCarreraDao.eliminar(dato);
     }
     else
     {
         throw new Exception("El registro no existe");
     }
 }
 /// <summary>
 /// elimina una estudiante_carrera
 /// </summary>
 /// <param name="dato"></param>
 public void eliminar(EstudianteCarrera dato)
 {
     using (Database db = DatabaseFactory.openDatabase("matricula_web_db"))
     {
         MySqlCommand comando = new MySqlCommand("sp_estudiante_carrera_DELETE");
         comando.CommandType = CommandType.StoredProcedure;
         comando.Parameters.AddWithValue("p_carrera", dato.carrera.idCarrera);
         comando.Parameters.AddWithValue("p_estudiante", dato.estudiante.idEstudiante);
         db.executeNonQuery(comando);
     }
 }
        /// <summary>
        /// modifica un estudiante_carrera
        /// </summary>
        /// <param name="dato"></param>        
        public void modificar(EstudianteCarrera dato)
        {
            using (Database db = DatabaseFactory.openDatabase("matricula_web_db"))
            {
                MySqlCommand comando = new MySqlCommand("sp_estudiante_carrera_UPDATE");
                comando.CommandType = CommandType.StoredProcedure;

                comando.Parameters.AddWithValue("p_carrera", dato.carrera.idCarrera);
                comando.Parameters.AddWithValue("p_estudiante", dato.estudiante.idEstudiante); 
                comando.Parameters.AddWithValue("p_estado", dato.estado);                
                //comando.Parameters.AddWithValue("p_fechaCreacion", DateTime.Today);
                //comando.Parameters.AddWithValue("p_fechaModificacion", DateTime.Today);
                //comando.Parameters.AddWithValue("p_usuarioCreacion", dato.usuarioCreacion);
                comando.Parameters.AddWithValue("p_usuarioModificacion", dato.usuarioModificacion);

                db.executeNonQuery(comando);
            }
        }
 /// <summary>
 /// consulta un EstudianteCarrera
 /// </summary>
 /// <param name="dato"></param>
 /// <returns></returns>
 public EstudianteCarrera consultarId(EstudianteCarrera dato)
 {
     return this.estudianteCarreraDao.consultarId(dato);
 }
 /// <summary>
 /// verifica si existe un EstudianteCarrera
 /// </summary>
 /// <param name="dato"></param>
 /// <returns>TRUE si existe FALSE en caso contrario</returns>
 public bool existe(EstudianteCarrera dato)
 {
     return this.estudianteCarreraDao.existe(dato);
 }
        /// <summary>
        /// Consulta todos los EstudianteCarrera
        /// </summary>
        /// <returns>List<EstudianteCarrera></returns>
        public List<EstudianteCarrera> consultarCarrerasXEstudiante(EstudianteCarrera dato)
        { 
            List<EstudianteCarrera> lista = new List<EstudianteCarrera>();
            foreach (EstudianteCarrera estudianteCarrera in this.estudianteCarreraDao.consultarCarrerasXEstudiante(dato))
            {
                estudianteCarrera.estudiante = this.estudianteBo.consultarId(new Estudiante(estudianteCarrera.estudiante.idEstudiante));
                estudianteCarrera.carrera = this.carreraBo.consultarId(new Carrera(estudianteCarrera.carrera.idCarrera));
                lista.Add(estudianteCarrera);
            }

            return lista;
        }
        /// <summary>
        /// consulta una estudiante_carrera
        /// </summary>
        /// <param name="dato"></param>
        /// <returns></returns>
        public EstudianteCarrera consultarId(EstudianteCarrera dato)
        {

            using (Database db = DatabaseFactory.openDatabase("matricula_web_db"))
            {
                MySqlCommand comando = new MySqlCommand("sp_estudiante_carrera_SELECT_ByID");
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("p_carrera", dato.carrera.idCarrera);
                comando.Parameters.AddWithValue("p_estudiante", dato.estudiante.idEstudiante);
                //Despues del comando indicar el nombre de la tabla
                DataSet ds = db.executeReader(comando, "estudiante_carrera");
                if (ds.Tables[0].Rows.Count > 0)
                {
                    DataRow row = ds.Tables[0].Rows[0]; ;

                    if (!row["carrera"].ToString().Equals("")) 
                        dato.carrera.idCarrera = Int32.Parse(row["carrera"].ToString());
                    if (!row["estudiante"].ToString().Equals("")) 
                        dato.estudiante.idEstudiante = Int32.Parse(row["estudiante"].ToString());
                    if (!row["estado"].ToString().Equals("")) 
                        dato.estado = row["estado"].ToString();

                    //Para indicar los datos del usuario
                    if (!row["usuarioCreacion"].ToString().Equals("")) 
                        dato.usuarioCreacion = row["usuarioCreacion"].ToString();
                    if (!row["usuarioModificacion"].ToString().Equals("")) 
                        dato.usuarioModificacion = row["usuarioModificacion"].ToString();
                    //Indicamos los valores de las fechas
                    if (!row["fechaCreacion"].ToString().Equals(""))
                        dato.fechaCreacion = DateTime.Parse(row["fechaCreacion"].ToString());
                    if (!row["fechaModificacion"].ToString().Equals(""))
                        dato.fechaModificacion = DateTime.Parse(row["fechaModificacion"].ToString());
                }
                else
                {
                    dato = null;
                }
                return dato;
            }
        }
        /// <summary>
        /// verifica si existe un estudiante_carrera
        /// </summary>
        /// <param name="dato"></param>
        /// <returns>TRUE si existe FALSE en caso contrario</returns>
        public bool existe(EstudianteCarrera dato)
        {
            EstudianteCarrera objeto = new EstudianteCarrera();
            using (Database db = DatabaseFactory.openDatabase("matricula_web_db"))
            {
                MySqlCommand comando = new MySqlCommand("sp_estudiante_carrera_SELECT_ByID");
                comando.CommandType = CommandType.StoredProcedure;

                comando.Parameters.AddWithValue("p_carrera", dato.carrera.idCarrera);
                comando.Parameters.AddWithValue("p_estudiante", dato.estudiante.idEstudiante);

                DataSet ds = db.executeReader(comando, "estudiante_carrera");
                if (ds.Tables[0].Rows.Count > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            } 
        }
        /// <summary>
        /// consulta todos las carreras por estudiante
        /// </summary>
        /// <returns>List</returns>
        public List<EstudianteCarrera> consultarCarrerasXEstudiante(EstudianteCarrera dato)
        {
            using (Database db = DatabaseFactory.openDatabase("matricula_web_db"))
            {
                List<EstudianteCarrera> lista = new List<EstudianteCarrera>();
                MySqlCommand comando = new MySqlCommand("sp_estudiante_carrera_SELECT_ByEstudiante");
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("p_estudiante", dato.estudiante.idEstudiante);
                //indicamos el nombre de la tabla
                DataSet ds = db.executeReader(comando, "estudiante_carrera");
                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    EstudianteCarrera estudianteCarrera = new EstudianteCarrera();

                    if (!row["carrera"].ToString().Equals(""))
                        estudianteCarrera.carrera.idCarrera = Int32.Parse(row["carrera"].ToString());
                    if (!row["estudiante"].ToString().Equals(""))
                        estudianteCarrera.estudiante.idEstudiante = Int32.Parse(row["estudiante"].ToString());
                    if (!row["estado"].ToString().Equals(""))
                        estudianteCarrera.estado = row["estado"].ToString();

                    //Se deben de indicar los valores del usuario
                    if (!row["usuarioCreacion"].ToString().Equals(""))
                        estudianteCarrera.usuarioCreacion = row["usuarioCreacion"].ToString();
                    if (!row["usuarioModificacion"].ToString().Equals(""))
                        estudianteCarrera.usuarioModificacion = row["usuarioModificacion"].ToString();
                    //Se deben de indicar los valores de la fecha
                    if (!row["fechaCreacion"].ToString().Equals(""))
                        estudianteCarrera.fechaCreacion = DateTime.Parse(row["fechaCreacion"].ToString());
                    if (!row["fechaModificacion"].ToString().Equals(""))
                        estudianteCarrera.fechaModificacion = DateTime.Parse(row["fechaModificacion"].ToString());
                    lista.Add(estudianteCarrera);
                }
                return lista;
            }
        }
        protected void btnGenerar_Click(object sender, EventArgs e)
        {
            try
            {
                EstudianteCarrera estudianteCarrera = new EstudianteCarrera();
                //llena el objeto con los valores 
                estudianteCarrera.carrera.idCarrera = Int32.Parse(this.cmbCarrera.Value.ToString());
                estudianteCarrera.estudiante.idEstudiante = Int32.Parse(this.cmbEstudiante.Value.ToString());
                estudianteCarrera.estado = Estado.ACTIVO.ToString();
                estudianteCarrera.usuarioModificacion = Session["usuario"].ToString();

                estudianteCarreraBo.nuevo(estudianteCarrera);//agrega el objeto a la base de datos 

                this.cmbCarrera.SelectedItem = null;
                this.cmbEstudiante.SelectedItem = null;
                this.txtEstudiante.Text = null;

                this.lblMensaje.Text = "Datos agregados exitosamente.";
                this.lblMensaje.CssClass = "successMessage";

                this.cargarDatos();//refescar los datos
            }
            catch (Exception ex)
            {
                Session["errorMessage"] = ex.Message;
                this.lblMensaje.Text = ex.Message;
                this.lblMensaje.CssClass = "errorMessage";
            }
        }
        /// <summary>
        /// actualiza un registro
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ASPxGridView1_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e)
        {
            try
            {
                EstudianteCarrera estudianteCarrera = new EstudianteCarrera();
                //llena el objeto con los valores
                estudianteCarrera.carrera.idCarrera = Int32.Parse(e.NewValues["carrera"].ToString());
                estudianteCarrera.estudiante.idEstudiante = Int32.Parse(e.NewValues["estudiante"].ToString());
                estudianteCarrera.estado = e.NewValues["estado"].ToString();
                estudianteCarrera.usuarioModificacion = Session["usuario"].ToString();

                estudianteCarreraBo.modificar(estudianteCarrera);//agrega el objeto a la base de datos 

                e.Cancel = true;//manejo de execpcion no controlada BUSCAR SOLUCION
                this.ASPxGridView1.CancelEdit();

                this.cargarDatos();//refescar los datos
            }
            catch (Exception ex)
            {
                Session["errorMessage"] = ex.Message;
            }
        }