// ###################################################################################
// ##############       Guardar los datos ingresados.     ############################
// ###################################################################################

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            List <TextBox> tbs = new List <TextBox>()
            {
                txtLugarDireccion, txtLugarTelefono, txtCargo, txtTiempo
            };

            if (!String.IsNullOrEmpty(cmbNombre.Text) && Validar.textBoxs(tbs))
            {
                int          id           = obtenerIdLugar();
                LugarTrabajo lugarTrabajo = new LugarTrabajo(id, cmbNombre.Text, txtLugarDireccion.Text, txtLugarTelefono.Text);
                asociado.trabajo = new AsociadoTrabajo(lugarTrabajo, txtCargo.Text, txtTiempo.Text);

                if (nuevo)
                {
                    if (formParent is FormAsociadoNuevo)
                    {
                        Control btnTrabajo = formParent.Controls.Find("btnTrabajo", true)[0];
                        btnTrabajo.BackColor = Color.PaleGreen;
                    }

                    if (formParent is FormAsociado)
                    {
                        Control btnTrabajo = formParent.Controls.Find("btnTrabajo", true)[0];
                        btnTrabajo.ForeColor = Color.Red;
                    }
                }

                this.Close();
            }
            else
            {
                MessageBox.Show("Ingrese todos los campos.", "Error en la entrada de datos", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
// ###################################################################################
// ##############         Llenar los campos con el combobox      #####################
// ###################################################################################

        private void cmbNombre_TextChanged(object sender, EventArgs e)
        {
            nuevoLugar = true;
            foreach (ComboBoxItem item in cmbNombre.Items)
            {
                if ((item.Value as LugarTrabajo).nombre == cmbNombre.Text)
                {
                    LugarTrabajo lugar = item.Value as LugarTrabajo;
                    txtLugarDireccion.Text = lugar.direccion.ToString();
                    txtLugarTelefono.Text  = lugar.telefono.ToString();

                    nuevoLugar = false;
                    break;
                }
            }
            if (nuevoLugar)
            {
                txtLugarDireccion.Text = "";
                txtLugarTelefono.Text  = "";
            }
        }
        private int obtenerIdLugar()
        {
            int id;

            if (nuevoLugar)
            {
                id = LugarTrabajoServicio.insert(cmbNombre.Text, txtLugarDireccion.Text, txtLugarTelefono.Text);
            }
            else
            {
                LugarTrabajo lugar = (LugarTrabajo)(cmbNombre.SelectedItem as ComboBoxItem).Value;

                lugar.direccion = txtLugarDireccion.Text;
                lugar.telefono  = txtLugarTelefono.Text;

                lugar.update();

                id = lugar.id;
            }

            return(id);
        }
        public static Asociado selectParcial(int idAsociado)
        {
            Asociado asociado = new Asociado();
            string   duiNum   = "";

            string query = "select nombres, apellidos, dui, aportacion from asociados.asociado where id = @id";
            List <SqlParameter> parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", idAsociado)
            };
            SqlDataReader dataReader = Queries.getDataReader(query, parameters);

            while (dataReader.Read())
            {
                asociado.id         = idAsociado;
                asociado.nombre     = dataReader.GetString(0);
                asociado.apellido   = dataReader.GetString(1);
                duiNum              = dataReader.GetString(2);
                asociado.aportacion = dataReader.GetDecimal(3);
            }
            dataReader.Close();

            // #### Crear y obtener objeto InfoPersonal  #####

            asociado.infoPersonal = new AsociadoInfoPersonal();
            query = "select estadocivil, direccion, telefono, nacimiento_fecha, nacimiento_lugar, dui_fecha, "
                    + "dui_lugar, nit, ingresos, otrosingresos, municipio, departamento from asociados.asociadodetalle where id_asociado = @id";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", idAsociado)
            };
            dataReader = Queries.getDataReader(query, parameters);
            while (dataReader.Read())
            {
                asociado.infoPersonal.estadoCivil = dataReader.GetString(0);
                asociado.infoPersonal.direccion   = dataReader.GetString(1);
                asociado.infoPersonal.telefono    = dataReader.GetString(2);
                asociado.nacimiento                 = new AsociadoNacimiento(dataReader.GetDateTime(3), dataReader.GetString(4));
                asociado.dui                        = new Dui(duiNum, dataReader.GetString(6), dataReader.GetDateTime(5));
                asociado.infoPersonal.nit           = dataReader.GetString(7);
                asociado.infoPersonal.ingresos      = dataReader.GetDecimal(8);
                asociado.infoPersonal.ingresosOtros = dataReader.GetDecimal(9);
                asociado.infoPersonal.municipio     = dataReader.GetString(10);
                asociado.infoPersonal.departamento  = dataReader.GetString(11);
            }
            dataReader.Close();

            // #### Para el trabajo ####

            int    idT    = 0;
            string cargo  = "";
            string tiempo = "";

            query      = "select id_lugartrabajo, cargo, tiempo from asociados.trabajo where id_asociado = @id";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", idAsociado)
            };
            dataReader = Queries.getDataReader(query, parameters);
            while (dataReader.Read())
            {
                idT    = dataReader.GetInt32(0);
                cargo  = dataReader.GetString(1);
                tiempo = dataReader.GetString(2);
            }
            dataReader.Close();


            // #### Para el lugar de trabajo ####

            query      = "select nombre, direccion, telefono from asociados.lugartrabajo where id = @id";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", idT)
            };
            dataReader = Queries.getDataReader(query, parameters);
            while (dataReader.Read())
            {
                LugarTrabajo lugar = new LugarTrabajo(idT, dataReader.GetString(0), dataReader.GetString(1), dataReader.GetString(2));
                asociado.trabajo = new AsociadoTrabajo(lugar, cargo, tiempo);
            }
            dataReader.Close();

            return(asociado);
        }
// ########################################################################################
// ##################    Recuperar un asociado a partir de su id   ########################
// ########################################################################################

        public static Asociado select(int idAsociado)
        {
            // #### Crear el objeto ####

            Asociado asociado = new Asociado();

            asociado.id = idAsociado;

            string query;
            List <SqlParameter> parameters;


            // #### Recuperar la información de objeto asociado ####

            string duiNum = "";

            query      = "select dui, nombres, apellidos, fecha, aportacion, activo from asociados.asociado where id = @id";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", idAsociado)
            };
            SqlDataReader dataReader = Queries.getDataReader(query, parameters);

            while (dataReader.Read())
            {
                duiNum                = dataReader.GetString(0);
                asociado.nombre       = dataReader.GetString(1);
                asociado.apellido     = dataReader.GetString(2);
                asociado.fechaIngreso = dataReader.GetDateTime(3);
                asociado.aportacion   = dataReader.GetDecimal(4);
                asociado.activo       = dataReader.GetBoolean(5);
            }
            dataReader.Close();


            // #### Crear y obtener objeto InfoPersonal  #####

            asociado.infoPersonal = new AsociadoInfoPersonal();
            query = "select estadocivil, direccion, telefono, nacimiento_fecha, nacimiento_lugar, dui_fecha, "
                    + "dui_lugar, nit, ingresos, otrosingresos, departamento, municipio from asociados.asociadodetalle "
                    + "where id_asociado = @id";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", idAsociado)
            };
            dataReader = Queries.getDataReader(query, parameters);
            while (dataReader.Read())
            {
                asociado.infoPersonal.estadoCivil = dataReader.GetString(0);
                asociado.infoPersonal.direccion   = dataReader.GetString(1);
                asociado.infoPersonal.telefono    = dataReader.GetString(2);
                asociado.nacimiento                 = new AsociadoNacimiento(dataReader.GetDateTime(3), dataReader.GetString(4));
                asociado.dui                        = new Dui(duiNum, dataReader.GetString(6), dataReader.GetDateTime(5));
                asociado.infoPersonal.nit           = dataReader.GetString(7);
                asociado.infoPersonal.ingresos      = dataReader.GetDecimal(8);
                asociado.infoPersonal.ingresosOtros = dataReader.GetDecimal(9);
                asociado.infoPersonal.departamento  = dataReader.GetString(10);
                asociado.infoPersonal.municipio     = dataReader.GetString(11);
            }
            dataReader.Close();


            // #### Crear la lista de beneficiarios ####

            asociado.beneficiarios = new List <Beneficiario>();
            query      = "select nombre, direccion, parentesco, edad, porcentaje from asociados.beneficiario where id_asociado=@id";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", idAsociado)
            };
            dataReader = Queries.getDataReader(query, parameters);
            while (dataReader.Read())
            {
                Beneficiario beneficiario = new Beneficiario();

                beneficiario.nombre     = dataReader.GetString(0);
                beneficiario.direccion  = dataReader.GetString(1);
                beneficiario.parentesco = dataReader.GetString(2);
                beneficiario.edad       = dataReader.GetByte(3);
                beneficiario.porcentaje = dataReader.GetByte(4);

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


            // #### Retornar el objeto de dependencias ####

            query      = "select total, parcial from asociados.dependencia where id_asociado = @id";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", idAsociado)
            };
            dataReader = Queries.getDataReader(query, parameters);
            while (dataReader.Read())
            {
                asociado.dependencias         = new AsociadoDependencia();
                asociado.dependencias.total   = dataReader.GetByte(0);
                asociado.dependencias.parcial = dataReader.GetByte(1);
            }
            dataReader.Close();


            // #### Para el trabajo ####

            int    idT    = 0;
            string cargo  = "";
            string tiempo = "";

            query      = "select id_lugartrabajo, cargo, tiempo from asociados.trabajo where id_asociado = @id";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", idAsociado)
            };
            dataReader = Queries.getDataReader(query, parameters);
            while (dataReader.Read())
            {
                idT    = dataReader.GetInt32(0);
                cargo  = dataReader.GetString(1);
                tiempo = dataReader.GetString(2);
            }
            dataReader.Close();


            // #### Para el lugar de trabajo ####

            query      = "select nombre, direccion, telefono from asociados.lugartrabajo where id = @id";
            parameters = new List <SqlParameter>()
            {
                new SqlParameter("id", idT)
            };
            dataReader = Queries.getDataReader(query, parameters);
            while (dataReader.Read())
            {
                LugarTrabajo lugar = new LugarTrabajo(idT, dataReader.GetString(0), dataReader.GetString(1), dataReader.GetString(2));
                asociado.trabajo = new AsociadoTrabajo(lugar, cargo, tiempo);
            }
            dataReader.Close();


            // #### Para el conyuge #####

            if (asociado.infoPersonal.estadoCivil == "Casado")
            {
                query      = "select nombre, lugar_trabajo from asociados.conyuge where id_asociado = @id";
                parameters = new List <SqlParameter>()
                {
                    new SqlParameter("id", idAsociado)
                };
                dataReader = Queries.getDataReader(query, parameters);
                while (dataReader.Read())
                {
                    asociado.conyuge = new AsociadoConyuge(dataReader.GetString(0), dataReader.GetString(1));
                }
                dataReader.Close();
            }

            return(asociado);
        }