/// <summary>
        /// consulta una PagoEncabezado
        /// </summary>
        /// <param name="dato"></param>
        /// <returns></returns>
        public PagoEncabezado consultarId(Int32 idPago)
        {
            //PagoEncabezado> lista = new List<PagoEncabezado>();
            PagoEncabezado dato = new PagoEncabezado();
            Database db = DatabaseFactory.openDatabase("matricula_web_db");
            MySqlCommand comando = new MySqlCommand("sp_pagoEncabezado_SELECT_ById");
            comando.CommandType = CommandType.StoredProcedure;
            comando.Parameters.AddWithValue("p_idPago", idPago);
            DataSet ds = db.executeReader(comando, "pago_encabezado");
            if (ds.Tables[0].Rows.Count > 0)
            {
                DataRow row = ds.Tables[0].Rows[0];

                if (!row["idPago"].ToString().Equals(""))
                    dato.idPago = Int32.Parse(row["idPago"].ToString());
                if (!row["periodo"].ToString().Equals(""))
                    dato.periodo = row["periodo"].ToString();
                if (!row["estado"].ToString().Equals(""))
                    dato.estado = row["estado"].ToString();
                if (!row["matricula"].ToString().Equals(""))
                    dato.matricula = Int32.Parse(row["matricula"].ToString());

                if (!row["montoDescuento"].ToString().Equals(""))
                    dato.montoDescuento = double.Parse(row["montoDescuento"].ToString());
                if (!row["montoSubTotal"].ToString().Equals(""))
                    dato.montoSubTotal = double.Parse(row["montoSubTotal"].ToString());
                if (!row["montoTotal"].ToString().Equals(""))
                    dato.montoTotal = double.Parse(row["montoTotal"].ToString());
                if (!row["montoMora"].ToString().Equals(""))
                    dato.montoMoratorio = double.Parse(row["montoMora"].ToString());

                if (!row["montoCobroCredito"].ToString().Equals(""))
                    dato.montoCobroCredito = double.Parse(row["montoCobroCredito"].ToString());

                if (!row["montoCredito"].ToString().Equals(""))
                    dato.montoCredito = double.Parse(row["montoCredito"].ToString());

                if (!row["montoPrima"].ToString().Equals(""))
                    dato.montoPrima = double.Parse(row["montoPrima"].ToString());
                //Para indicar los datos del usuario
                if (!row["usuarioCreacion"].ToString().Equals(""))
                    dato.usuarioCreacion = row["usuarioCreacion"].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());
                  dato.usuarioModificacion = row["usuarioModificacion"].ToString();*/
            }
            else
            {
                dato = null;
            }
            return dato;
        }
        /// <summary>
        /// Nuevo los valores del pago
        /// </summary>
        /// <param name="dato"></param>        
        public void nuevo(PagoEncabezado dato)
        {
            using (Database db = DatabaseFactory.openDatabase("matricula_web_db"))
            {
                MySqlCommand comando = new MySqlCommand("sp_pagoEncabezado_INSERT");
                comando.CommandType = CommandType.StoredProcedure;
                //Definicion de atributos para guardar los valores 
                comando.Parameters.AddWithValue("p_periodo", dato.periodo);
                comando.Parameters.AddWithValue("p_estudiante", dato.estudiante);
                comando.Parameters.AddWithValue("p_matricula", dato.matricula);
                comando.Parameters.AddWithValue("p_montoMora", dato.montoMoratorio);
                comando.Parameters.AddWithValue("p_montoSubTotal", dato.montoSubTotal);
                comando.Parameters.AddWithValue("p_montoTotal", dato.montoTotal);

                comando.Parameters.AddWithValue("p_montoCredito", dato.montoCredito);
                comando.Parameters.AddWithValue("p_montoDescuento", dato.montoDescuento);
                comando.Parameters.AddWithValue("p_montoCobroCredito", dato.montoCobroCredito);
                comando.Parameters.AddWithValue("p_montoPrima", dato.montoPrima); 

                comando.Parameters.AddWithValue("p_estado", dato.estado);
                comando.Parameters.AddWithValue("p_usuarioCreacion", dato.usuarioCreacion);  
                db.executeNonQuery(comando);
            }
        }
 /// <summary>
 /// Modifica los valores del pago
 /// </summary>
 /// <param name="dato"></param>        
 public void modificaPago(PagoEncabezado dato, int idPago, string pIdUsuario)
 {
     using (Database db = DatabaseFactory.openDatabase("matricula_web_db"))
     {
         MySqlCommand comando = new MySqlCommand("sp_pagoEncabezado_UPDATE");
         comando.CommandType = CommandType.StoredProcedure;
         //Definicion de atributos para guardar los valores
         comando.Parameters.AddWithValue("p_idPago", idPago);
         comando.Parameters.AddWithValue("p_montoCheque", dato.montoCheque);
         comando.Parameters.AddWithValue("p_montoDeposito", dato.montoDeposito);
         comando.Parameters.AddWithValue("p_montoDolares", dato.montoDolares);
         comando.Parameters.AddWithValue("p_montoEfectivo", dato.montoEfectivo);
         comando.Parameters.AddWithValue("p_montoTarjeta", dato.montoTarjeta);
         comando.Parameters.AddWithValue("p_ultimos4digitos", dato.ultimos4Digitos);
         comando.Parameters.AddWithValue("p_comentarios", dato.comentarios);
         comando.Parameters.AddWithValue("p_tipoTarjeta", dato.tipoTarjeta);
         comando.Parameters.AddWithValue("p_TipoCambio", dato.montoTipoCambio);
         comando.Parameters.AddWithValue("p_usuarioModificacion", pIdUsuario);
         comando.Parameters.AddWithValue("p_montoFavorUsado", dato.montoFavorUsado);
         db.executeNonQuery(comando);
     }
 }
 /// <summary>
 /// verifica si existe almenos una factura para el estudiante
 /// </summary>
 /// <param name="dato"></param>
 /// <returns>TRUE si existe FALSE en caso contrario</returns>
 public bool existe(Int32 idPago)
 {
     PagoEncabezado objeto = new PagoEncabezado();
     using (Database db = DatabaseFactory.openDatabase("matricula_web_db"))
     {
         MySqlCommand comando = new MySqlCommand("sp_pagoEncabezado_SELECT_ById");
         comando.CommandType = CommandType.StoredProcedure;
         comando.Parameters.AddWithValue("p_idPago", idPago);
         DataSet ds = db.executeReader(comando, "pago_encabezado");
         if (ds.Tables[0].Rows.Count > 0)
         {
             return true;
         }
         else
         {
             return false;
         }
     }
 }
        /// <summary>
        /// consulta una PagoEncabezado
        /// </summary>
        /// <param name="dato"></param>
        /// <returns></returns>
        public List<PagoEncabezado> consultarIdEstudiane(Int32 idEstudiante, String pEstado)
        {
            List<PagoEncabezado> lista = new List<PagoEncabezado>();
            Database db = DatabaseFactory.openDatabase("matricula_web_db");
            MySqlCommand comando = new MySqlCommand("sp_pagoEncabezado_SELECT_ByEstudiante");
            comando.CommandType = CommandType.StoredProcedure;
            comando.Parameters.AddWithValue("p_idEstudiante", idEstudiante);
            comando.Parameters.AddWithValue("p_estado", pEstado);
            DataSet ds = db.executeReader(comando, "pago_encabezado");

            foreach (DataRow row in ds.Tables[0].Rows)
            {
                PagoEncabezado dato = new PagoEncabezado();
                if (!row["idPago"].ToString().Equals(""))
                    dato.idPago = Int32.Parse(row["idPago"].ToString());
                if (!row["periodo"].ToString().Equals(""))
                    dato.periodo = row["periodo"].ToString();
                if (!row["estado"].ToString().Equals(""))
                    dato.estado = row["estado"].ToString();
                if (!row["montoDescuento"].ToString().Equals(""))
                    dato.montoDescuento = double.Parse(row["montoDescuento"].ToString());
                if (!row["montoSubTotal"].ToString().Equals(""))
                    dato.montoSubTotal = double.Parse(row["montoSubTotal"].ToString());
                if (!row["montoTotal"].ToString().Equals(""))
                    dato.montoTotal = double.Parse(row["montoTotal"].ToString());
               
                //Para indicar los datos del usuario
                if (!row["usuarioCreacion"].ToString().Equals(""))
                    dato.usuarioCreacion = row["usuarioCreacion"].ToString();
                //Indicamos los valores de las fechas
                if (!row["fechaCreacion"].ToString().Equals(""))
                    dato.fechaCreacion = DateTime.Parse(row["fechaCreacion"].ToString());

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

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

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

                /*if (!row["fechaModificacion"].ToString().Equals(""))
                    dato.fechaModificacion = DateTime.Parse(row["fechaModificacion"].ToString());
                  dato.usuarioModificacion = row["usuarioModificacion"].ToString();
                 */
                lista.Add(dato);
            }
            return lista;
        }
        protected void btnMatricular_Click(object sender, EventArgs e)
        {
            try
            { 
                string producto = "";
                for (int i = 0; i < this.ASPxGridViewCursoMatriculado.VisibleRowCount; i++)
                {
                    producto = this.ASPxGridViewCursoMatriculado.GetRowValues(i, "producto").ToString();
                    if (producto.Equals("MAT"))
                    {
                        producto = "EXISTE";
                        break;
                    }
                }

                if (!"EXISTE".Equals(producto))
                {
                    this.lblMensaje.Text = "Debe agregar el costo del paquete de matrícula.";
                    this.lblMensaje.CssClass = "errorMessage";
                    return;
                }
               


                Class.Matricula.Matricula matricula = this.matriculaBo.consultarId(new Class.Matricula.Matricula(Int32.Parse(Session["idMatricula"].ToString())));
                matricula.montoTotal = this.montoTotal;
                matricula.montoDescuento = this.montoDescuento;
                matricula.montoCredito = this.montoCredito;
                matricula.montoPrima = this.montoPrima;
                matricula.montoComision = this.montoComision;
                matricula.estado = EstadoLetras.CANCELADA.ToString();
                matricula.pagoContado = this.cmbTipoPago.Value.ToString();
                //Convenio convenio = this.convenioBo.consultarId(new Convenio(Int32.Parse(this.cmbConvenio.Value.ToString())));
                matricula.convenio.idConvenio = Int32.Parse(this.cmbConvenio.Value.ToString());
                matriculaBo.modificar(matricula);


                PagoEncabezado pago = new PagoEncabezado()
                {
                    montoSubTotal = this.montoSubTotal,
                    montoTotal = this.montoTotal,
                    montoCredito = this.montoCredito,
                    montoDescuento = this.montoDescuento,
                    montoCobroCredito = this.montoComision,
                    montoPrima = this.montoPrima,
                    matricula = Int32.Parse(Session["idMatricula"].ToString()),
                    periodo = this.cmbPeriodo.Value.ToString(),
                    estudiante = Int32.Parse(this.cmbEstudiante.Value.ToString()),
                    estado = EstadoLetras.CANCELADA.ToString(),
                    usuarioCreacion = Session["usuario"].ToString()
                };
                this.pagoEncabezadoBo.nuevo(pago);

                
                this.lblMensaje.CssClass = "successMessage";
                this.lblMensaje.Text = "Matrícula completada con éxito.";
                  
                Usuario usuario = (Usuario)Session["usuarioObjeto"];
                 
                Session.RemoveAll();

                Session["imprima"] = "SI";
                Session["idMatricula"] = matricula;
                Session["usuario"] = usuario.idUsuario;
                Session["usuarioObjeto"] = usuario;

                Response.Redirect("~/Matricula/FrmMatricula.aspx");
            }
            catch (Exception ex)
            {
                this.lblMensaje.Text = Utilidades.validarExepcionSQL(ex.Message);
                this.lblMensaje.CssClass = "errorMessage";
                Session["errorMessage"] = ex.Message;
            }
            finally
            {
               // this.cargarDatos();
            }
        }
 /// <summary>
 /// Guarda el pago y deja el estado en PENDIENTE
 /// </summary>
 /// <param name="dato"></param>
 public void nuevo(PagoEncabezado dato)
 {
     this.pagoEncabezadoDao.nuevo(dato);
 }
 /// <summary>
 /// Guarda el pago y cambia el estado a CANCELADA
 /// </summary>
 /// <param name="dato"></param>
 public void modificaPago(PagoEncabezado dato, int oIdPago, string oIdUsuario)
 {
     this.pagoEncabezadoDao.modificaPago(dato, oIdPago, oIdUsuario);
 }