public FrmRegistroNotas()
 {
     this.periodoBo = new PeriodoBo();
     this.cursoBo = new CursoBo();
     this.reporteBo = new ReporteBo();
     this.estudianteBo = new EstudianteBo();
     this.matriculaDetalle = new MatriculaDetalle();
     this.matriculaDetalleBo = new MatriculaDetalleBo();
     this.mailConfigBo = new MailConfigBo();
 }
 /// <summary>
 /// Metodo constructor de la clase FrmRegistroNotasAdministrativo
 /// </summary>
 public FrmRegistroNotasAdministracion()
 {
     this.periodoBo = new PeriodoBo(); 
     this.reporteBo = new ReporteBo();
     this.estudianteBo = new EstudianteBo();
     this.matriculaDetalle = new MatriculaDetalle();
     this.matriculaDetalleBo = new MatriculaDetalleBo();
     this.mailConfigBo = new MailConfigBo();
     this.ofertaAcademicaBo = new OfertaAcademicaBo();
 }
  /// <summary>
 /// elimina una ofertaAcademica
 /// </summary>
 /// <param name="dato"></param>
 public void eliminar(MatriculaDetalle dato)
 {
     if (this.existe(dato))
     {
         this.matriculaDetalleDao.eliminar(dato);
     }
     else
     {
         throw new Exception("No existe el registro.");
     }
 }
        /// <summary>
        /// crea una ofertaAcademica nuevo
        /// </summary>
        /// <param name="dato"></param>
        public void nuevo(MatriculaDetalle dato)
        {

            if (!this.existe(dato))
            {
                this.matriculaDetalleDao.nuevo(dato);
            }
            else
            {
                throw new Exception("Ya existe el registro.");
            }
        }
        /// <summary>
        /// crea una MatriculaDetalle nuevo
        /// </summary>
        /// <param name="dato"></param>
        /// Se crea un dato de tipo Matricula
        public void nuevo(MatriculaDetalle dato)
        {
            using (Database db = DatabaseFactory.openDatabase("matricula_web_db"))
            {
                //Agregamos la instruccion con el stored procedure
                MySqlCommand comando = new MySqlCommand("sp_matricula_detalle_INSERT");
                comando.CommandType = CommandType.StoredProcedure;

                comando.Parameters.AddWithValue("p_matricula", dato.matricula.idMatricula);
                comando.Parameters.AddWithValue("p_producto", dato.producto);
                comando.Parameters.AddWithValue("p_estudiante", dato.estudiante.idEstudiante);

                if (dato.ofertaAcademica.idOfertaAcademica==0)
                    comando.Parameters.AddWithValue("p_ofertaAcademica", null );
                else
                    comando.Parameters.AddWithValue("p_ofertaAcademica",dato.ofertaAcademica.idOfertaAcademica);

                comando.Parameters.AddWithValue("p_omiteRequisitos", dato.omiteRequisitos);
                comando.Parameters.AddWithValue("p_esPruebaGrado", dato.esPruebaGrado);
                comando.Parameters.AddWithValue("p_esConvalidacion", dato.esConvalidacion);

                comando.Parameters.AddWithValue("p_numeroActa", dato.numeroActa);
                comando.Parameters.AddWithValue("p_notaReposicion", dato.notaReposicion);
                comando.Parameters.AddWithValue("p_notaFinal", dato.notaFinal);
                comando.Parameters.AddWithValue("p_costo", dato.costo); 
                 
                if ( String.IsNullOrEmpty(dato.estado))
                    comando.Parameters.AddWithValue("p_estado", null);
                else
                    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", pUsuario);
                
                db.executeNonQuery(comando);
            }
        }
 /// <summary>
 /// verifica si existe una ofertaAcademica
 /// </summary>
 /// <param name="dato"></param>
 /// <returns>TRUE si existe FALSE en caso contrario</returns>
 public bool existe(MatriculaDetalle dato)
 {
     return this.matriculaDetalleDao.existe(dato);
 }
        /// <summary>
        /// actualiza un curso martriculado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ASPxGridViewCursoMatriculado_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e)
        {
            try
            {
                MatriculaDetalle dato = new MatriculaDetalle();
                //llena el objeto con los valores
                dato.matricula.idMatricula = Int32.Parse(e.NewValues["matricula"].ToString());
                dato.producto = e.NewValues["producto"].ToString();
                dato = this.matriculaDetalleBo.consultarId(dato);

                dato.estado = e.NewValues["estado"].ToString();
                dato.usuarioModificacion = Session["usuario"].ToString();
                this.matriculaDetalleBo.modificar(dato);//agrega el objeto a la base de datos 

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

                this.lblMensaje.Text = "Curso: " + dato.productoNombre + ", modificado.";
                this.lblMensaje.CssClass = "successMessage";
            }
            catch (Exception ex)
            {
                this.lblMensaje.Text = Utilidades.validarExepcionSQL(ex.Message);
                this.lblMensaje.CssClass = "errorMessage";
                Session["errorMessage"] = ex.Message;
            }
            finally
            {
                this.cargarDatos();//refescar los datos
            }
        }
        /// <summary>
        /// elimina un curso matriculado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ASPxGridViewCursoMatriculado_RowDeleting(object sender, DevExpress.Web.Data.ASPxDataDeletingEventArgs e)
        {
            try
            {
                MatriculaDetalle dato = new MatriculaDetalle();
                //llena el objeto con los valores
                dato.matricula.idMatricula = Int32.Parse(e.Values["matricula"].ToString());
                dato.producto = e.Values["producto"].ToString();
                dato = this.matriculaDetalleBo.consultarId(dato);

                if (dato != null)
                {
                    if (dato.matricula.periodo.idPeriodo.Equals(cmbPeriodo.Value.ToString()))
                    {
                        this.matriculaDetalleBo.eliminar(dato);//elimina el objeto a la base de datos 
                        this.lblMensaje.Text = String.Format("Curso: {0}, eliminado.", dato.productoNombre);
                        this.lblMensaje.CssClass = "successMessage";
                    }
                    else
                    {
                        this.lblMensaje.Text = "No se puede eliminar un detalle de un periodo anterior.";
                        this.lblMensaje.CssClass = "errorMessage";
                    }
                }

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

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

        }
 /// <summary>
 /// elimina una Matricula
 /// </summary>
 /// <param name="dato"></param>
 public void eliminar(MatriculaDetalle dato)
 {
     using (Database db = DatabaseFactory.openDatabase("matricula_web_db"))
     {
         MySqlCommand comando = new MySqlCommand("sp_matricula_detalle_DELETE");
         comando.CommandType = CommandType.StoredProcedure;
         comando.Parameters.AddWithValue("p_matricula", dato.matricula.idMatricula);
         comando.Parameters.AddWithValue("p_producto", dato.producto);
         db.executeNonQuery(comando);
     }
 }
        /// <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{
              //Cargamos todos los valores de la matricula detalle
                MatriculaDetalle matriculaDetalle = new MatriculaDetalle();
                matriculaDetalle.producto = cmbCursos.SelectedItem.Value.ToString();
                matriculaDetalle.matricula.idMatricula = e.NewValues["matricula"] == null ? 0 : Int32.Parse(e.NewValues["matricula"].ToString());
                matriculaDetalle = this.matriculaDetalleBo.consultarId(matriculaDetalle);

                matriculaDetalle.nota1T = e.NewValues["nota1T"] == null ? 0 : double.Parse(e.NewValues["nota1T"].ToString());
                matriculaDetalle.nota2T = e.NewValues["nota2T"] == null ? 0 : double.Parse(e.NewValues["nota2T"].ToString());
                matriculaDetalle.nota3T = e.NewValues["nota3T"] == null ? 0 : double.Parse(e.NewValues["nota3T"].ToString());

                matriculaDetalle.nota1C = e.NewValues["nota1C"] == null ? 0 : double.Parse(e.NewValues["nota1C"].ToString());
                matriculaDetalle.nota2C = e.NewValues["nota2C"] == null ? 0 : double.Parse(e.NewValues["nota2C"].ToString());

                double promedio = 0;
                if (PeriodosEnum.TERCERO.ToString().Equals(e.NewValues["nivel"]))
                {

                    if (!(0.0 == matriculaDetalle.nota2T))
                    {
                        promedio = ((matriculaDetalle.nota1T + matriculaDetalle.nota2T) / 2.0);
                        matriculaDetalle.anual = Math.Round(promedio, MidpointRounding.ToEven);

                        if (matriculaDetalle.anual >= 70)
                        {
                            matriculaDetalle.estado = Curso.APROBADO;
                        }
                        else
                        {
                            matriculaDetalle.estado = Curso.REPROBADO;

                            if (matriculaDetalle.nota1C >= 70)
                            {
                                matriculaDetalle.estado = Curso.APROBADO;
                            }
                            else
                            {
                                if (matriculaDetalle.nota2C >= 70)
                                {
                                    matriculaDetalle.estado = Curso.APROBADO;
                                }
                            }
                        }
                    }
                    else
                    {
                        matriculaDetalle.estado = null;
                        matriculaDetalle.anual = 0;
                    }
                }
                else
                {

                    if (!(0.0 == matriculaDetalle.nota3T))
                    {
                        promedio = ((matriculaDetalle.nota1T * 0.30) + (matriculaDetalle.nota2T * 0.30) + (matriculaDetalle.nota3T * 0.40));
                        matriculaDetalle.anual = Math.Round(promedio, MidpointRounding.ToEven);

                        if (matriculaDetalle.anual >= 70)
                        {
                            matriculaDetalle.estado = Curso.APROBADO;
                        }
                        else
                        {
                            matriculaDetalle.estado = Curso.REPROBADO;

                            if (matriculaDetalle.nota1C >= 70)
                            {
                                matriculaDetalle.estado = Curso.APROBADO;
                            }
                            else
                            {
                                if (matriculaDetalle.nota2C >= 70)
                                {
                                    matriculaDetalle.estado = Curso.APROBADO;
                                }
                            }
                        }
                    }
                    else
                    {
                        matriculaDetalle.estado = null;
                        matriculaDetalle.anual = 0;
                    }
                }

                //matriculaDetalle.notaReposicion = e.NewValues["notaReposicion"] == null ? 0 : double.Parse(e.NewValues["notaReposicion"].ToString());
                //matriculaDetalle.notaFinal = e.NewValues["notaFinal"] == null ? 0 : double.Parse(e.NewValues["notaFinal"].ToString());
                matriculaDetalle.usuarioModificacion = Session["usuario"].ToString(); 
                
                matriculaDetalleBo.modificar(matriculaDetalle);//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;
            }
        }
        /// <summary>
        /// modifica una Matricula
        /// </summary>
        /// <param name="dato"></param>        
        public void modificar(MatriculaDetalle dato)
        {
            using (Database db = DatabaseFactory.openDatabase("matricula_web_db"))
            {
                MySqlCommand comando = new MySqlCommand("sp_matricula_detalle_UPDATE");
                comando.CommandType = CommandType.StoredProcedure;

                comando.Parameters.AddWithValue("p_matricula", dato.matricula.idMatricula);
                comando.Parameters.AddWithValue("p_producto", dato.producto);
                comando.Parameters.AddWithValue("p_estudiante", dato.estudiante.idEstudiante);
                if (dato.ofertaAcademica == null)
                    comando.Parameters.AddWithValue("p_ofertaAcademica", null);
                else
                    comando.Parameters.AddWithValue("p_ofertaAcademica", dato.ofertaAcademica.idOfertaAcademica);
                 
                comando.Parameters.AddWithValue("p_omiteRequisitos", dato.omiteRequisitos);
                comando.Parameters.AddWithValue("p_esPruebaGrado", dato.esPruebaGrado);
                comando.Parameters.AddWithValue("p_esConvalidacion", dato.esConvalidacion);
                comando.Parameters.AddWithValue("p_numeroActa", dato.numeroActa);

                if (dato.nota1T == 0)
                    comando.Parameters.AddWithValue("p_nota1T", null);
                else
                    comando.Parameters.AddWithValue("p_nota1T", dato.nota1T);

                if (dato.nota2T == 0)
                    comando.Parameters.AddWithValue("p_nota2T", null);
                else
                    comando.Parameters.AddWithValue("p_nota2T", dato.nota2T);

                if (dato.nota3T == 0)
                    comando.Parameters.AddWithValue("p_nota3T", null);
                else
                    comando.Parameters.AddWithValue("p_nota3T", dato.nota3T);

                if (dato.anual == 0)
                    comando.Parameters.AddWithValue("p_anual", null);
                else
                    comando.Parameters.AddWithValue("p_anual", dato.anual);

                if (dato.nota1C == 0)
                    comando.Parameters.AddWithValue("p_nota1C", null);
                else
                    comando.Parameters.AddWithValue("p_nota1C", dato.nota1C);

                if (dato.nota2C == 0)
                    comando.Parameters.AddWithValue("p_nota2C", null);
                else
                    comando.Parameters.AddWithValue("p_nota2C", dato.nota2C);


                comando.Parameters.AddWithValue("p_costo", dato.costo);

                if (String.IsNullOrEmpty(dato.estado))
                    comando.Parameters.AddWithValue("p_estado", null);
                else
                    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",pUsuario);
                comando.Parameters.AddWithValue("p_usuarioModificacion", dato.usuarioModificacion);
                
                db.executeNonQuery(comando);
            }
        }
        /// <summary>
        ///  todos los estudiantes y detalles por curso
        /// </summary>
        /// <param name="dato"></param>
        /// <returns></returns>
        public List<MatriculaDetalle> detallesXcurso(Int32 idOfertaAcademica)
        {
            using (Database db = DatabaseFactory.openDatabase("matricula_web_db"))
            {
                List<MatriculaDetalle> lista = new List<MatriculaDetalle>();
                MySqlCommand comando = new MySqlCommand("sp_matricula_detalle_x_oferta");
                comando.Parameters.AddWithValue("p_idOfertaAcademica", idOfertaAcademica);
                comando.CommandType = CommandType.StoredProcedure;
                //indicamos el nombre de la tabla
                DataSet ds = db.executeReader(comando, "matricula_detalle");
                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    MatriculaDetalle dato = new MatriculaDetalle();
                    if (!row["matricula"].ToString().Equals(""))
                        dato.matricula.idMatricula = Int32.Parse(row["matricula"].ToString());
                    if (!row["estudiante"].ToString().Equals(""))
                        dato.estudiante.idEstudiante = Int32.Parse(row["estudiante"].ToString());

                    if (!row["ofertaAcademica"].ToString().Equals(""))
                        dato.ofertaAcademica.idOfertaAcademica = Int32.Parse(row["ofertaAcademica"].ToString());

                    if (!row["producto"].ToString().Equals(""))
                        dato.producto = row["producto"].ToString();
                    //if (!row["productoNombre"].ToString().Equals(""))
                    //    dato.productoNombre = row["productoNombre"].ToString();
                    if (!row["omiteRequisitos"].ToString().Equals(""))
                        dato.omiteRequisitos = row["omiteRequisitos"].ToString();
                    if (!row["esPruebaGrado"].ToString().Equals(""))
                        dato.esPruebaGrado = row["esPruebaGrado"].ToString();
                    if (!row["esConvalidacion"].ToString().Equals(""))
                        dato.esConvalidacion = row["esConvalidacion"].ToString();

                    if (!row["numeroActa"].ToString().Equals(""))
                        dato.numeroActa = Int32.Parse(row["numeroActa"].ToString());
                    if (!row["notaReposicion"].ToString().Equals(""))
                        dato.notaReposicion = Double.Parse(row["notaReposicion"].ToString());
                    if (!row["notaFinal"].ToString().Equals(""))
                        dato.notaFinal = Double.Parse(row["notaFinal"].ToString());
                    if (!row["costo"].ToString().Equals(""))
                        dato.costo = Double.Parse(row["costo"].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());


                    lista.Add(dato);
                }
                return lista;
            }
        }
        public List<MatriculaDetalle> consultarAllCursos(Int32 idMatricula)
        {
            using (Database db = DatabaseFactory.openDatabase("matricula_web_db"))
            {
                List<MatriculaDetalle> lista = new List<MatriculaDetalle>();
                MySqlCommand comando = new MySqlCommand("sp_matricula_detalle_SELECT_ByIdMatricula");
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("p_matricula", idMatricula);
                DataSet ds = db.executeReader(comando, "matricula_detalle");

                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    MatriculaDetalle dato = new MatriculaDetalle();
                    if (!row["productoNombre"].ToString().Equals(""))
                        dato.productoNombre = row["productoNombre"].ToString();

                    if (!row["producto"].ToString().Equals(""))
                        dato.producto = row["producto"].ToString();

                    if (!row["tipoCurso"].ToString().Equals(""))
                        dato.tipoCurso = row["tipoCurso"].ToString();

                    lista.Add(dato);
                }
                return lista;
            }
        }
 /// <summary>
 /// verifica si existe una  Matricula
 /// </summary>
 /// <param name="dato"></param>
 /// <returns>TRUE si existe FALSE en caso contrario</returns>
 public bool existe(MatriculaDetalle dato)
 {
     MatriculaDetalle objeto = new MatriculaDetalle();
     using (Database db = DatabaseFactory.openDatabase("matricula_web_db"))
     {
         MySqlCommand comando = new MySqlCommand("sp_matricula_detalle_SELECT_ByID");
         comando.CommandType = CommandType.StoredProcedure;
         comando.Parameters.AddWithValue("p_matricula", dato.matricula .idMatricula );
         comando.Parameters.AddWithValue("p_producto", dato.producto);
         DataSet ds = db.executeReader(comando, "matricula_detalle");
         if (ds.Tables[0].Rows.Count > 0)
         {
             return true;
         }
         else
         {
             return false;
         }
     } 
 }
                /// <summary>
        /// consulta todas las aulas
        /// </summary>
        /// <returns>List</returns>
        public List<MatriculaDetalle> consultarTodos()
        {
            List<MatriculaDetalle> lista = new List<MatriculaDetalle>();
            Database db = DatabaseFactory.openDatabase("matricula_web_db");
            MySqlCommand comando = new MySqlCommand("sp_matricula_detalle_SELECT_all");
            comando.CommandType = CommandType.Text;
            //indicamos el nombre de la tabla
            DataSet ds = db.executeReader(comando, "matricula_detalle");
            foreach (DataRow row in ds.Tables[0].Rows)
            {
                MatriculaDetalle dato = new MatriculaDetalle();
                if (!row["matricula"].ToString().Equals(""))
                    dato.matricula.idMatricula = Int32.Parse(row["matricula"].ToString());
                if (!row["estudiante"].ToString().Equals(""))
                    dato.estudiante.idEstudiante = Int32.Parse(row["estudiante"].ToString());

                if (!row["ofertaAcademica"].ToString().Equals(""))
                    dato.ofertaAcademica.idOfertaAcademica = Int32.Parse(row["ofertaAcademica"].ToString());

                if (!row["producto"].ToString().Equals(""))
                    dato.producto = row["producto"].ToString();
                if (!row["productoNombre"].ToString().Equals(""))
                    dato.productoNombre = row["productoNombre"].ToString();
                if (!row["omiteRequisitos"].ToString().Equals(""))
                    dato.omiteRequisitos = row["omiteRequisitos"].ToString();
                if (!row["esPruebaGrado"].ToString().Equals(""))
                    dato.esPruebaGrado = row["esPruebaGrado"].ToString();
                if (!row["esConvalidacion"].ToString().Equals(""))
                    dato.esConvalidacion = row["esConvalidacion"].ToString();

                if (!row["nota1T"].ToString().Equals(""))
                    dato.nota1T = Double.Parse(row["nota1T"].ToString());
                if (!row["nota2T"].ToString().Equals(""))
                    dato.nota2T = Double.Parse(row["nota2T"].ToString());
                if (!row["nota3T"].ToString().Equals(""))
                    dato.nota3T = Double.Parse(row["nota3T"].ToString());

                if (!row["anual"].ToString().Equals(""))
                    dato.anual = Double.Parse(row["anual"].ToString());


                if (!row["nota1C"].ToString().Equals(""))
                    dato.nota1C = Double.Parse(row["nota1C"].ToString());
                if (!row["nota2C"].ToString().Equals(""))
                    dato.nota2C = Double.Parse(row["nota2C"].ToString());

                if (!row["numeroActa"].ToString().Equals(""))
                    dato.numeroActa = Int32.Parse(row["numeroActa"].ToString());
                if (!row["notaReposicion"].ToString().Equals(""))
                    dato.notaReposicion = Double.Parse(row["notaReposicion"].ToString());
                if (!row["notaFinal"].ToString().Equals(""))
                    dato.notaFinal = Double.Parse(row["notaFinal"].ToString());
                if (!row["costo"].ToString().Equals(""))
                    dato.costo = Double.Parse(row["costo"].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());


                lista.Add(dato);
            }
            return lista;
        }
        /// <summary>
        /// consulta una Matricula
        /// </summary>
        /// <param name="dato"></param>
        /// <returns></returns>
        public MatriculaDetalle consultarId(MatriculaDetalle dato)
        {

            using (Database db = DatabaseFactory.openDatabase("matricula_web_db"))
            {
                MySqlCommand comando = new MySqlCommand("sp_matricula_detalle_SELECT_ByID");
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("p_matricula", dato.matricula.idMatricula);
                comando.Parameters.AddWithValue("p_producto", dato.producto);
                //Despues del comando indicar el nombre de la tabla
                DataSet ds = db.executeReader(comando, "matricula_detalle");
                if (ds.Tables[0].Rows.Count > 0)
                {
                    DataRow row = ds.Tables[0].Rows[0];

                    if (!row["matricula"].ToString().Equals("")) 
                        dato.matricula.idMatricula = Int32.Parse(row["matricula"].ToString());
                    if (!row["estudiante"].ToString().Equals("")) 
                        dato.estudiante.idEstudiante = Int32.Parse(row["estudiante"].ToString());
                    
                    if (!row["ofertaAcademica"].ToString().Equals(""))
                        dato.ofertaAcademica.idOfertaAcademica  = Int32.Parse(row["ofertaAcademica"].ToString());

                    if (!row["producto"].ToString().Equals("")) 
                        dato.producto = row["producto"].ToString();
                    if (!row["productoNombre"].ToString().Equals("")) 
                        dato.productoNombre = row["productoNombre"].ToString();
                    if (!row["omiteRequisitos"].ToString().Equals("")) 
                        dato.omiteRequisitos = row["omiteRequisitos"].ToString();
                    if (!row["esPruebaGrado"].ToString().Equals("")) 
                        dato.esPruebaGrado = row["esPruebaGrado"].ToString();
                    if (!row["esConvalidacion"].ToString().Equals("")) 
                        dato.esConvalidacion = row["esConvalidacion"].ToString();

                    if (!row["numeroActa"].ToString().Equals(""))
                        dato.numeroActa = Int32.Parse(row["numeroActa"].ToString());
                    if (!row["notaReposicion"].ToString().Equals(""))
                        dato.notaReposicion = Double.Parse(row["notaReposicion"].ToString());
                    if (!row["notaFinal"].ToString().Equals(""))
                        dato.notaFinal = Double.Parse(row["notaFinal"].ToString());
                    if (!row["costo"].ToString().Equals(""))
                        dato.costo = Double.Parse(row["costo"].ToString());

                    if (!row["nota1T"].ToString().Equals(""))
                        dato.nota1T = Double.Parse(row["nota1T"].ToString());
                    if (!row["nota2T"].ToString().Equals(""))
                        dato.nota2T = Double.Parse(row["nota2T"].ToString());
                    if (!row["nota3T"].ToString().Equals(""))
                        dato.nota3T = Double.Parse(row["nota3T"].ToString());

                    if (!row["anual"].ToString().Equals(""))
                        dato.anual = Double.Parse(row["anual"].ToString());
                    

                    if (!row["nota1C"].ToString().Equals(""))
                        dato.nota1C = Double.Parse(row["nota1C"].ToString());
                    if (!row["nota2C"].ToString().Equals(""))
                        dato.nota2C = Double.Parse(row["nota2C"].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>
 /// consulta una Matricula
 /// </summary>
 /// <param name="dato"></param>
 /// <returns></returns>
 public MatriculaDetalle consultarId(MatriculaDetalle dato)
 {
     dato = this.matriculaDetalleDao.consultarId(dato);
     if (dato != null)
     {
         dato.estudiante = this.estudianteBo.consultarId(new Estudiante(dato.estudiante.idEstudiante));
         dato.ofertaAcademica = this.ofertaAcademicaBo.consultarId(new OfertaAcademica(dato.ofertaAcademica.idOfertaAcademica));
         dato.matricula = this.matriculaBo.consultarId(new Class.Matricula.Matricula(dato.matricula.idMatricula)); 
     }
     return dato;
 }
        protected void btnAgregarServicio_Click(object sender, EventArgs e)
        {
            try
            {

                if(Session["idMatricula"]==null){
                    this.lblMensaje.Text = "Debe seleccionar la matrícula.";
                    this.lblMensaje.CssClass = "errorMessage";
                    return;
                }

                Servicio servicio = this.servicioBo.consultarId(new Servicio(this.cmbServicio.Value.ToString()));

                MatriculaDetalle dato = new MatriculaDetalle();
                dato.matricula.idMatricula = Int32.Parse(Session["idMatricula"].ToString());
                dato.producto = servicio.idServicio;
                //dato.costo = servicio.costo;
                dato.costo = Double.Parse(this.txtMontoMatricula.Value.ToString());
                dato.estudiante.idEstudiante = Int32.Parse(this.cmbEstudiante.Value.ToString());
                dato.usuarioCreacion = Session["usuario"].ToString();
                dato.esConvalidacion = Confirmacion.NO.ToString();
                dato.esPruebaGrado = Confirmacion.NO.ToString();
                dato.omiteRequisitos = Confirmacion.NO.ToString();

                this.matriculaDetalleBo.nuevo(dato);
                this.lblMensaje.Text = String.Format("Servicio: {0}, matrículado.", servicio.idServicio);
                this.lblMensaje.CssClass = "successMessage";

            }
            catch (Exception ex)
            {
                this.lblMensaje.Text = Utilidades.validarExepcionSQL(ex.Message);
                this.lblMensaje.CssClass = "errorMessage";
                Session["errorMessage"] = ex.Message;
            }
            finally
            {
                this.cargarDatos();
            }
        }
        /// <summary>
        /// actualiza un curso martriculado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ASPxGridViewCursoMatriculado_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e)
        {
            try
            {
                MatriculaDetalle dato = new MatriculaDetalle();
                //llena el objeto con los valores
                dato.matricula.idMatricula = Int32.Parse(e.NewValues["matricula"].ToString());
                dato.producto = e.NewValues["producto"].ToString();
                dato = this.matriculaDetalleBo.consultarId(dato);
                dato.costo = Double.Parse(e.NewValues["costo"].ToString());
                dato.esConvalidacion = e.NewValues["esConvalidacion"].ToString();
                dato.esPruebaGrado = e.NewValues["esPruebaGrado"].ToString();
                //dato.omiteRequisitos = e.NewValues["omiteRequisitos"].ToString();
                dato.estado = e.NewValues["estado"] == null ? null : e.NewValues["estado"].ToString();
                dato.usuarioModificacion = Session["usuario"].ToString();
                this.matriculaDetalleBo.modificar(dato);//agrega el objeto a la base de datos 

                //si es una convalidacion crea el registro correspondiente si se modifico el valor
                if (!e.NewValues["esConvalidacion"].Equals(e.OldValues["esConvalidacion"]))
                {
                    MatriculaConvalidacion convalidacion = new MatriculaConvalidacion(dato.matricula.idMatricula, dato.producto);
                    convalidacion.usuarioCreacion = Session["usuario"].ToString();
                    convalidacion.estudiante.idEstudiante = Int32.Parse(this.cmbEstudiante.Value.ToString());
                    convalidacion.estado = "PENDIENTE";

                    if (Confirmacion.SI.ToString().Equals(dato.esConvalidacion))
                    {
                        if (!this.matriculaConvalidacionBo.existe(convalidacion))//si no exite lo agrega
                        {
                            this.matriculaConvalidacionBo.nuevo(convalidacion);
                        }
                    }
                    else
                    {//si no es convalizacion elimina el dato
                        if (this.matriculaConvalidacionBo.existe(convalidacion))//si  exite lo agrega
                        {
                            this.matriculaConvalidacionBo.eliminar(convalidacion);
                        }
                    }
                }

                //si es una prueba de grado crea el registro correspondiente si se modifico el valor
                if (!e.NewValues["esPruebaGrado"].Equals(e.OldValues["esPruebaGrado"]))
                {
                    MatriculaPruebaGrado pruebaGrado = new MatriculaPruebaGrado(dato.matricula.idMatricula, dato.producto);
                    pruebaGrado.usuarioCreacion = Session["usuario"].ToString();
                    pruebaGrado.estudiante.idEstudiante = Int32.Parse(this.cmbEstudiante.Value.ToString());
                    pruebaGrado.estado = "PENDIENTE";

                    if (Confirmacion.SI.ToString().Equals(dato.esPruebaGrado))
                    {
                        if (!this.matriculaPruebaGradoBo.existe(pruebaGrado))//si no exite lo agrega
                        {
                            this.matriculaPruebaGradoBo.nuevo(pruebaGrado);
                        }
                    }
                    else
                    {//si no es convalizacion elimina el dato
                        if (this.matriculaPruebaGradoBo.existe(pruebaGrado))//si  exite lo agrega
                        {
                            this.matriculaPruebaGradoBo.eliminar(pruebaGrado);
                        }
                    }
                }

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

                this.lblMensaje.Text = String.Format("Curso: {0}, modificado.", dato.productoNombre);
                this.lblMensaje.CssClass = "successMessage";
            }
            catch (Exception ex)
            {
                this.lblMensaje.Text = Utilidades.validarExepcionSQL(ex.Message);
                this.lblMensaje.CssClass = "errorMessage";
                Session["errorMessage"] = ex.Message;
            }
            finally
            {
                this.cargarDatos();//refescar los datos
            }
        }
        /// <summary>
        /// Agrega un curso a la matricula seleccionada a partir de la oferta academica seleccionada
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ASPxGridViewOfertaAcademica_RowCommand(object sender, ASPxGridViewRowCommandEventArgs e)
        {
            try
            {
                String curso = (sender as ASPxGridView).GetRowValuesByKeyValue(e.KeyValue, "cursoNombre").ToString();
                Int32 matriculados = Int32.Parse((sender as ASPxGridView).GetRowValuesByKeyValue(e.KeyValue, "matriculados").ToString());
                Int32 cupo = Int32.Parse((sender as ASPxGridView).GetRowValuesByKeyValue(e.KeyValue, "cupo").ToString());

                if (matriculados < cupo)
                {
                    Int32 idMatricula = Int32.Parse(Session["idMatricula"].ToString());
                    Class.Matricula.Matricula matricula = this.matriculaBo.consultarId(new Class.Matricula.Matricula(idMatricula));
                    if ("PENDIENTE".ToString().Equals(matricula.estado))
                    {
                        this.lblMensaje.Text = "Solo se puede agregar cursos a matrículas en PROCESO.";
                        this.lblMensaje.CssClass = "errorMessage";
                        return;
                    }

                    MatriculaDetalle dato = new MatriculaDetalle();
                    dato.ofertaAcademica.idOfertaAcademica = Int32.Parse((sender as ASPxGridView).GetRowValuesByKeyValue(e.KeyValue, "idOfertaAcademica").ToString());
                    dato.matricula.idMatricula = idMatricula;

                    OfertaAcademica oferta = ofertaAcademicaBo.consultarId(dato.ofertaAcademica);
                    dato.producto = oferta.curso.idCurso;
                    dato.costo = oferta.curso.costo;

                    dato.estado = "MATRICULADO";
                    dato.estudiante.idEstudiante = Int32.Parse(this.cmbEstudiante.Value.ToString());
                    dato.usuarioCreacion = Session["usuario"].ToString();

                    dato.esConvalidacion = Confirmacion.NO.ToString();
                    dato.esPruebaGrado = Confirmacion.NO.ToString();

                    if (0 == Int32.Parse((sender as ASPxGridView).GetRowValuesByKeyValue(e.KeyValue, "requistos_pendintes").ToString()))
                    {
                        dato.omiteRequisitos = Confirmacion.NO.ToString();
                    }
                    else
                    {
                        dato.omiteRequisitos = Confirmacion.SI.ToString();
                    }

                    this.matriculaDetalleBo.nuevo(dato);
                    this.lblMensaje.Text = String.Format("Curso: {0}, matrículado.", curso);
                    this.lblMensaje.CssClass = "successMessage";
                }
                else
                {
                    this.lblMensaje.Text = String.Format("Curso: {0}, sin cupo disponible.", curso);
                    this.lblMensaje.CssClass = "errorMessage";
                }

            }
            catch (Exception ex)
            {
                this.lblMensaje.Text = Utilidades.validarExepcionSQL(ex.Message);
                this.lblMensaje.CssClass = "errorMessage";
                Session["errorMessage"] = ex.Message;
            }
            finally
            {
                this.cargarDatos();
            }
        }