/*
         * ====================================
         * METODOS DE RECUPERACION DE ENTIDADES
         * ====================================
         *      - Tiene la finalidad de recuperar los datos de la BASE DE DATOS segun algún criterio de busqueda
         *      - Retornaran una lista de objetos que se obtuvieron de dicha busqueda (si los hubiere)
         *      - De no encontrar un datos o de no poderse realizar la conexion se expondra error y se retornara 'NULL'
         */
        /*
         * - RecuperarPuestos tiene la misión de recuperar los datos de los puestos según un criterion de busqueda
         */
        /*
           * ===========================================================================
           * FUNCION QUE SE ENCARGA DE RECUPERAR LOS DATOS DE LOS PUESTOS QUE CONCUERDEN
           * CON LOS FILTROS DE BUSQUEDA Y NO SE ENCUENTREN ELIMINADOS
           * ===========================================================================
           */
        public List<Puesto> recuperarPuestos(string codigo = null, string nombreDePuesto = null, string empresa = null)
        {
            bool conexionExitosa;
            GestorPuesto gestorPuestos = new GestorPuesto();
            List<Puesto> listaDePuestos = new List<Puesto>(); //para el retorno de datos

            string consultaSql = "SELECT * " +
                                 "FROM puesto " +
                                 "WHERE `codigo` LIKE '%" + codigo + "%'" +
                                 " AND `nombre` LIKE '%" + nombreDePuesto + "%'" +
                                 " AND `empresa` LIKE '%" + empresa + "%';";

            //llamamos al metodo "iniciar conexion"
            conexionExitosa = iniciarConexion();

            //Evaluamos si la conexion se realizo con exito
            if (!conexionExitosa)
            {
                MessageBox.Show("No se pudo realizar la conexión con la Base de Datos");
                terminarConexion();
                return null;
            }

            //Creamos un adaptador llamado "comando" para realizar la consultaSql que definimos mas arriba
            MySql.Data.MySqlClient.MySqlCommand comando;
            comando = ObjConexion.CreateCommand();
            //En el adaptador comando hacemos un asignacion en su atributo CommandText de la consultaSql
            comando.CommandText = consultaSql;

            //Se hace la ejecucion del comando con el metodo ExecuterReader
            //y se lo asigna a una variable reader que contendra los resultados de la busqueda en la base de datos
            MySqlDataReader reader = comando.ExecuteReader();

            if (!reader.HasRows)
            {
                //si el reader esta vacio, es que no se encontraron datos para la consulta realizada
                MessageBox.Show("No se encontro ningún puesto");
                terminarConexion();
                return null;
            }

            //Si el reader contiene datos, se realiza la lectura de todos los ellos.
            while (reader.Read())
            {
                Puesto objPuesto;

                if (reader["eliminado"].ToString() == "")
                {
                    string cod = reader["codigo"].ToString();
                    string nomPuesto = reader["nombre"].ToString();
                    string emp = reader["empresa"].ToString();

                    //Llamamos al gestor de puestos para instanciar el puesto que se obtuvo de la base de datos
                    objPuesto = gestorPuestos.instanciarPuesto(cod, nomPuesto, emp);
                    //El retorno del metodo del gestor es introducido en la lista de puestos
                    listaDePuestos.Add(objPuesto);
                }

            }

            terminarConexion();
            return listaDePuestos;
        }
        /*
         * ====================================
         * METODOS DE RETORNO DE DATOS PUNTALES
         * ====================================
         *      - Tiene la finalidad de BUSCAR y RETORNAR datos de la fuente según algun criterio
         */
        public Puesto existePuesto(string codigo = null, string nombreDePuesto = null)
        {
            bool conexionExitosa;
            bool bandera = false;
            Puesto objPuesto;
            GestorPuesto gestorPuesto = new GestorPuesto();
            string consultaSql = "SELECT * FROM puesto WHERE `codigo` = '" + codigo + "' OR `nombre` = '"
                + nombreDePuesto + "';";

            conexionExitosa = iniciarConexion();

            if (!conexionExitosa)
                return null;

            MySql.Data.MySqlClient.MySqlCommand comando;

            comando = ObjConexion.CreateCommand();

            comando.CommandText = consultaSql;

            MySqlDataReader reader = comando.ExecuteReader();
            objPuesto = gestorPuesto.instanciarPuesto(null, null, null);

            while (reader.Read() && !bandera)
            {
                string cod = reader["codigo"].ToString();
                string nomPuesto = reader["nombre"].ToString();

                if ((codigo == cod) || (nombreDePuesto == nomPuesto))
                {
                    objPuesto = gestorPuesto.instanciarPuesto(cod, nomPuesto, null);
                }
                else
                    objPuesto = gestorPuesto.instanciarPuesto(null, null, null);
            }

            terminarConexion();
            return objPuesto;
        }
        /*
         * RecuperarPuesto tiene la misión de recuperar los datos de un puesto puntual
         */
        public Puesto recuperarPuesto(string codigo)
        {
            bool conexionExitosa;
            GestorPuesto gestorPuestos = new GestorPuesto();

            string consultaSql = "SELECT * " +
                                 "FROM puesto " +
                                 "WHERE `codigo` = '" + codigo + "';";

            conexionExitosa = iniciarConexion();

            if (!conexionExitosa)
                return null;

            MySql.Data.MySqlClient.MySqlCommand comando;
            comando = ObjConexion.CreateCommand();

            comando.CommandText = consultaSql;

            MySqlDataReader reader = comando.ExecuteReader();
            Puesto objPuesto;

            if (reader.Read())
            {
                if ((reader["eliminado"].ToString()) == "")
                {
                    string cod = reader["codigo"].ToString();
                    string nomPuesto = reader["nombre"].ToString();
                    string emp = reader["empresa"].ToString();
                    string desc = reader["descripcion"].ToString();

                    objPuesto = gestorPuestos.instanciarPuesto(cod, nomPuesto, emp, desc);
                }
                else
                    objPuesto = gestorPuestos.instanciarPuesto("ELIMINADO", null, null);

            }
            else
                objPuesto = gestorPuestos.instanciarPuesto(null, null, null);
            terminarConexion();
            return objPuesto;
        }