Como se ha comentado en el punto anterior, cada tabla de datos tiene un modelo encargado de la gestión de su lectura, escritura y borrado. A la hora de declarar el modelo, debemos crear una nueva clase en la que incluiremos el uso del ModelTrait (nueva clase de Facturascripts 2018 basada en Rasgos (Traits) de PHP), junto con la lista de campos disponibles de la tabla declarados como públicos.

    class Agente
    {
        use Base\ModelTrait;

        public $codagente;
        public $dnicif;
        public $nombre;
        public $apellidos;
    }


Métodos obligatorios


Para un correcto funcionamiento del modelo, tenemos que vincular la estructura física de la tabla (nombre de la tabla y clave primaria) con el modelo que la gestiona. Para ello es obligatorio definir dos métodos que devolverán la información mediante cadena de texto: tableName y primaryColumn.

    public function tableName()
    {
        return 'agentes';
    }

    public function primaryColumn()
    {
        return 'codagente';
    }


Lectura de datos


Los modelos, por el hecho de usar el ModelTrait, ponen a nuestra disposición varios métodos para obtener información de la tabla a la que está vinculado.

all
Este método nos devuelve un array del modelo que lo ejecuta. Es decir, cada elemento del array devuelto es un objeto de la misma clase que el modelo que está ejecutando el método all, donde cada uno de los elementos está "rellenado" con la información de cada uno de los registros leídos de la tabla consultada. Cuando se realiza la consulta, o ejecución del método all, podemos informar de distintos parámetros que nos ayudan a filtrar los datos a recibir de la tabla de la base de datos:

where
Permite filtrar los datos a recoger. Se utiliza el sistema de filtrado mediante la clase DataBaseWhere incluida en la gestión de base de datos de Facturascripts 2018.

order
Permite indicar los datos de ordenación de los registros a recoger. Es un array de uno o más elementos (key => valor) donde la key es la cláusula SQL a aplicar y el valor indica si es ascendente o descendente ["ASC" | "DESC"]

offset
Permite indicar un desplazamiento del primer registro a recoger.

limit
Permite indicar el número máximo de registros a recoger.

Ejemplo: (Últimos 15 albaranes de cliente del agente AGENTE10)
    $albaran = new AlbaranCliente();
    $where = [new DataBase\DataBaseWhere('codagente', 'AGENTE10')];
    $order = ['fecha' => 'DESC'];
    $albaranes = $albaran->all($where, $order, 0, 15);


get
Este método nos devuelve un único y nuevo modelo de la misma clase que el modelo que lo ejecuta, pero "rellenado" con la información del registro cuya columna primaria (primary key) es igual al parámetro informado.

Ejemplo: (Lectura del agente AGENTE10)
    $model = new Agente();
    $agente = $model->get('AGENTE10');


loadFromCode
Al igual que el método anterior, este método sirve para leer un único registro. La gran diferencia radica en que la información leída se introduce sobre el mismo modelo que lo ejecuta, en vez de devolver un nuevo modelo. También destacar que la lectura se puede hacer, al igual que el método get informando la columna primaria (primary key) o mediante el sistema de filtrado de la clase DataBaseWhere y ordenado, de manera similar al método all. El método retorna un valor TRUE si consigue leer el registro solicitado. En caso de no existir inicializa los valores del modelo y retorna FALSE.

Ejemplo: (Último albaran de cliente del agente AGENTE10)
    $albaran = new AlbaranCliente();
    $where = [new DataBase\DataBaseWhere('codagente', 'AGENTE10')];
    $order = ['fecha' => 'DESC'];
    $ok = $albaran->loadFromCode('', $where, $orderby);

Ejemplo: (Lectura del agente AGENTE10)
    $agente = new Agente();
    $ok = $agente->loadFromCode('AGENTE10');


Grabación de datos


De igual manera para los procesos de grabación de datos existen métodos genéricos al ModelTrait que facilitan el trabajo con los modelos. El proceso de persistencia de los datos desde un modelo tiene un "camino predefinido" o conjunto de métodos que se ejecutan secuencialmente de manera automática, pero que podemos sobrescribir en nuestra clase del modelo para personalizar cada uno de los pasos.

save
Este método es el lanzador de todo el proceso de grabación. Es el encargado de ejecutar el método test para validar los datos que se quieren grabar, así como de controlar si se realizará un alta de un registro nuevo o la modificación de uno ya existente. Retorna un valor booleano indicando si se ha realizado el proceso correctamente o por el contrario no ha sido posible.

test
Método encargado de calcular campos dependientes de otros, y de validar los datos finales que serán grabados. Todo nuevo modelo tiene que sobrescribir este método para validar los campos propios del modelo. Además de validaciones generales (longitud, tipo, existencia de valor, etc), una de las validaciones obligatorias es comprobar que no se "inyecta" código HTML en cualquier campo de texto.
En caso de incumplimiento de alguna regla de validación debemos añadir el error en el sistema de registro de alertas de la aplicación, alerta que será mostrada al usuario en la ventana para que pueda subsanarla.

Ejemplo validación:
    $this->nombre = self::noHtml($this->nombre);
    $this->apellidos = self::noHtml($this->apellidos);
    $this->dnicif = self::noHtml($this->dnicif);

    if (!(strlen($this->nombre) > 1) && !(strlen($this->nombre) < 50)) {
        $this->miniLog->alert($this->i18n->trans('agent-name-between-1-50'));

        return false;
    }

    if ($this->codagente === null) {
        $this->codagente = $this->newCode();
    }

    return true;


checkArrayData
Este es un método "especial", encargado de verificar los datos enviados por el usuario desde un formulario de un controlador Edit o EditList. Es importante entender que este método se ejecuta antes de comenzar el proceso de grabación. El proceso recibe un array con la información enviada por el usuario, y en caso de existir campos especiales no informados desde el formulario, debemos sobrescribir el método y añadir al array de datos los campos no incluidos. Tras este método, se comenzará el proceso normal de grabación de datos.


Método url


Los controladores utilizan el método url para conocer las distintas urls de navegación entre ventanas. El ModelTrait dispone de un método url que establece de manera genérica cual debería ser la url del modelo para cada uno de los casos "listar" y "editar" (List y Edit), pero existen ocasiones que el modelo necesite personalizar dichas urls. En estos casos podemos sobrescribir este método para devolver para cada caso la url correcta.

Ejemplo:
    class CuentaEspecial
    {
        use Base\ModelTrait {
            url as private traitURL;
        }

        public function url($type = 'auto')
        {
            return $this->traitURL($type, 'ListCuenta&active=List');
        }
    }


¿No encuentra lo que busca?




Soporte:

FacturaScripts es software libre y gratuito, pero si lo que busca es asesoramiento y soporte profesional, use la sección soporte.

  Soporte

¿Desea ser distribuidor?

Si desa ser distribuidor oficial de FacturaScripts, comience hoy mismo el proceso.

  hágase partner

Redes sociales:

Puede encontrarnos en las principales redes sociales. Y también en google+.





© 2013-2017 FacturaScripts