Tabla de Contenidos

sfConvenioAdmBase.class.php

Es la clase que instancia los objetos que aplican los convenios. El convenio se persiste como un json que define bloques de reglas para aplicar. Cada bloque tiene una condición de agregación y dos listas de de reglas. Si la condicón de agregación es verdadera, entonces se incorporan las reglas de la lista then. Si la condición es falsa, entonces se agregan las reglas de la lista else.

El json tiene la siguiente estructura:

{
“A Todos - Inicio”: {
“op”: {
“TRUE”: []
},
“then”: [],
“else”: []
},
“SOLO TEST”: {
“op”: {
“IN”: {
“left”: “idLaboratorio”,
“right”: []
}
},
“then”: [],
“else”: []
}
}

En el ejemplo se ven dos bloques con sus respectivas operaciones de agregación. El primero es “A Todos - Inicio” y su condición de agregación es TRUE, siempre se incorporan las reglas de la lista “then”. En el segundo bloque tenemos una operación de agregación diferente que puede ocaciones un resultado true o false, es decir puede que se incorporen las reglas de la lista “then” o de la lista “else” respectivamente.

EL ORDEN DE LOS BLOQUES Y DE LAS REGLAS ES MUY IMPORTANTE. ESO DEFINE EL ORDEN DE EJECUCION DE LA LISTA DE REGLAS FINAL.

Propiedades

El objeto de clase sfConvenioAdmBase tiene un arreglo interno de bloques ya parseados. Los mismos son de clase ctBlockBase.

Métodos

create($comportamiento, $ambito, $entidadBase)

Método estático que crea un objeto convenio a partir de sus parámetros. Es la forma de obtener un convenio para una entidad dada en un ámbito determinado.

fetchById($id)

Método estático que trae un convenio desde la base de datos y lo instancia a pesar de no tener la entidad base. Sirve para poder manipular los bloques de reglas por ejemplo.

getBlocksCount()

Devuelve la cantidad de bloques.

getBlocks()

Devuelve el arrglo/lista de objetos de tipo ctBlockBase. Es decir, es un arreglo con indices 0, 1, 2… n segun la cantidad de bloques del json persistido en la DB.

insertBlock(ctBlockBase $block, $pos=0)

Inserta un bloque a la lista de bloques del convenio. El parámetro necesario es un bloque y opcionalmente la posición donde se va a insertar. La posición indica el lugar en la lista donde va a quedar el bloque insertado. En caso de que la posicipon no sea correcta, es decir que no sea una posición existente, entonces se inserta al principio si es una posición menor a las existentes o al final si es una posición mayor a las existentes. Los bloques siempre están en una lista correlativa.

Ejemplo:

En este ejemplo para construir los parametros de la operación de agregación del bloque parto de json (string) y luego genero el arreglo para pasarle de parámetro al bloque. Como asumo un contexto de edición no indico en la construcción del bloque que entidad ni tampoco proveo un entorno.

$blockDefJS = '{“SOLO TEST”: {
“op”: {
“IN”: {
“left”: “idLaboratorio”,
“right”: []
}
},
“then”: [],
“else”: []
}}';
$blockDefArr = json_decode($blockDefJS, true);
$bloqueNuevo = new ctBlockBase($blockDefArr, '', array());
$this→convenio→insertBlock($bloqueNuevo);
$this→convenio→save();

ctBlockBase