public static Ahorro select(int id)
        {
            Ahorro ahorro = new Ahorro();

            ahorro.id = id;

            string query;
            List <SqlParameter> parameters;

            query      = "select codigo, id_asociado, tipo, interes, fecha, activo from asociados.ahorro where id = @id";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", id)
            };
            SqlDataReader dataReader = Queries.getDataReader(query, parameters);

            while (dataReader.Read())
            {
                ahorro.codigo     = dataReader.GetString(0);
                ahorro.idAsociado = dataReader.GetInt32(1);
                ahorro.tipo       = dataReader.GetString(2);
                ahorro.interes    = dataReader.GetByte(3);
                ahorro.fecha      = dataReader.GetDateTime(4);
                ahorro.activo     = dataReader.GetBoolean(5);
            }
            dataReader.Close();

            if (ahorro.tipo == "Depósito a plazo")
            {
                AhorroPlazo ahorroPlazo = new AhorroPlazo();

                query      = "select monto_inicial, plazo, extendido from asociados.ahorroplazo where id_ahorro = @id";
                parameters = new List <SqlParameter>()
                {
                    new SqlParameter("id", id)
                };
                dataReader = Queries.getDataReader(query, parameters);

                while (dataReader.Read())
                {
                    ahorroPlazo.montoInicial = dataReader.GetDecimal(0);
                    ahorroPlazo.plazo        = dataReader.GetByte(1);
                    ahorroPlazo.extendido    = dataReader.GetByte(2);
                }
                dataReader.Close();

                ahorro.ahorroPlazo = ahorroPlazo;
            }

            if (ahorro.tipo == "Programado")
            {
                AhorroProgramado ahorroProgramado = new AhorroProgramado();

                query      = "select cuota, forma_pago, plazo, extendido from asociados.ahorroprogramado where id_ahorro = @id";
                parameters = new List <SqlParameter>()
                {
                    new SqlParameter("id", id)
                };
                dataReader = Queries.getDataReader(query, parameters);

                while (dataReader.Read())
                {
                    ahorroProgramado.cuota     = dataReader.GetDecimal(0);
                    ahorroProgramado.formaPago = dataReader.GetString(1);
                    ahorroProgramado.plazo     = dataReader.GetByte(2);
                    ahorroProgramado.extendido = dataReader.GetByte(3);
                }
                dataReader.Close();

                ahorro.ahorroProgramado = ahorroProgramado;
            }

            query      = "select tipo, monto, fecha, saldo_parcial from asociados.ahorrodetalle where id_ahorro = @id order by fecha";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", id)
            };
            dataReader = Queries.getDataReader(query, parameters);

            ahorro.detalles = new List <AhorroDetalle>();
            AhorroDetalle detalle;

            while (dataReader.Read())
            {
                detalle              = new AhorroDetalle();
                detalle.tipo         = dataReader.GetString(0);
                detalle.monto        = dataReader.GetDecimal(1);
                detalle.fecha        = dataReader.GetDateTime(2);
                detalle.saldoParcial = dataReader.GetDecimal(3);

                ahorro.detalles.Add(detalle);
            }
            dataReader.Close();

            query      = "select nombre, edad, porcentaje, parentesco from asociados.beneficiarioahorro where id_ahorro = @id";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", id)
            };
            dataReader = Queries.getDataReader(query, parameters);

            ahorro.beneficiarios = new List <Beneficiario>();
            Beneficiario beneficiario;

            while (dataReader.Read())
            {
                beneficiario            = new Beneficiario();
                beneficiario.nombre     = dataReader.GetString(0);
                beneficiario.edad       = dataReader.GetByte(1);
                beneficiario.porcentaje = dataReader.GetByte(2);
                beneficiario.parentesco = dataReader.GetString(3);

                ahorro.beneficiarios.Add(beneficiario);
            }
            dataReader.Close();

            ahorro.asociado = AsociadoServicio.selectParcial(ahorro.idAsociado);

            return(ahorro);
        }
        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (cmbAsociados.SelectedIndex != -1 && cmbPlan.SelectedIndex != -1 && ahorro.beneficiarios != null && (!cmbFormaPago.Enabled || cmbFormaPago.SelectedIndex != -1))
            {
                Form formEspera = new FormEspera();
                formEspera.Show();

                try
                {
                    Queries.transactionBegin();

                    Asociado asociado = (Asociado)(cmbAsociados.SelectedItem as ComboBoxItem).Value;
                    asociado = AsociadoServicio.selectParcial(asociado.id);

                    ahorro.idAsociado = asociado.id;
                    ahorro.fecha      = dtpFecha.Value;
                    ahorro.interes    = (byte)nudTasa.Value;

                    if (ahorro.tipo == "Depósito a plazo")
                    {
                        AhorroPlazo ahorroPlazo = new AhorroPlazo();

                        ahorroPlazo.montoInicial = nudMonto.Value;
                        ahorroPlazo.plazo        = (byte)nudPlazo.Value;
                        ahorroPlazo.extendido    = 1;
                        ahorroPlazo.codigoCuenta = cmbFormaPago.SelectedItem.ToString();

                        ahorro.ahorroPlazo = ahorroPlazo;
                    }

                    if (ahorro.tipo == "Programado")
                    {
                        AhorroProgramado ahorroProgramado = new AhorroProgramado();

                        ahorroProgramado.cuota     = nudMonto.Value;
                        ahorroProgramado.formaPago = cmbFormaPago.SelectedItem.ToString();
                        ahorroProgramado.plazo     = (byte)nudPlazo.Value;
                        ahorroProgramado.extendido = 1;

                        ahorro.ahorroProgramado = ahorroProgramado;
                    }

                    ahorro.insert();

                    switch (ahorro.tipo)
                    {
                    case "Corriente":
                        TiposCorrelativo.AhorroCorriente.update();
                        Reportes.contratoAhorroCorriente(asociado, ahorro);
                        break;

                    case "Depósito a plazo":
                        TiposCorrelativo.AhorroPlazo.update();
                        Reportes.certificado(asociado, ahorro);
                        break;

                    case "Programado":
                        TiposCorrelativo.AhorroProgramado.update();
                        Reportes.contratoAhorroProgramado(asociado, ahorro);
                        if (ahorro.ahorroProgramado.formaPago == "Orden de descuento")
                        {
                            Reportes.ordenDescuento(asociado, ahorro);
                        }
                        break;
                    }

                    Queries.transactionCommit();

                    formEspera.Close();

                    Reportes.abrirCarpeta();
                    this.Close();
                }
                catch (Exception ex)
                {
                    formEspera.Close();

                    Queries.transactionRollback();
                    MessageBox.Show(ex.Message);
                    MessageBox.Show(ex.StackTrace);
                }
            }
            else
            {
                MessageBox.Show("Debe completar los datos");
            }
        }