]> git.llucax.com Git - mecon/ai.git/blobdiff - lib/AI/Servicio.php
Se agregan 2 tipos de orden predefinidos para los servicios:
[mecon/ai.git] / lib / AI / Servicio.php
index 85ac3a2c9449b19545cc45dde0a0437193c01ea0..9fb5e8ce668c2b5756a63c67785b2baf206112f9 100644 (file)
@@ -38,6 +38,18 @@ require_once 'AI/Error.php';
  */
 define('AI_SERVICIO_CONFFILE', dirname(__FILE__).'/Servicio.ini');
 
+/**
+ * Trae los servicios en un orden según la <em>longitud</em> de los hijos.
+ * La <em>longitud<em> de los hijos se calcula prediciendo la cantidad de
+ * renglones que va a ocupar cada hijo y sumándolos para un mismo padre.
+ */
+define('AI_SERVICIO_ORDEN_LONG_HIJOS', 1);
+
+/**
+ * Trae los servicios en un orden según la longitud del nombre.
+ */
+define('AI_SERVICIO_ORDEN_LONG_NOMBRE', 2);
+
 // +X2C Class 413 :AI_Servicio
 /**
  * Servicio.
@@ -158,7 +170,58 @@ class AI_Servicio extends AI_DBTreeObject {
     }
     // -X2C
 
-
+    // +X2C Operation 539
+    /**
+     * Carga hijos de un servicio. Si hubo error devuelve un PEAR_Error, si no hubo error, devuleve un array de objetos (los hijos).
+     *
+     * @param  mixed $db Base de datos o resultado a usar.
+     * @param  bool $soloHabilitados Si es true, sólo trae los servicios habilitados.
+     * @param  mixed $orden Indica el orden en que se deben traer los hijos. Puede ser AI_SERVICIO_ORDEN_CANT_HIJOS, AI_SERVICIO_ORDEN_LONG_NOMBRE o un campo arbitrario.
+     *
+     * @return mixed
+     * @access public
+     */
+    function cargarHijos($db, $soloHabilitados = true, $orden = false) // ~X2C
+    {
+        if (!is_a($db, 'db_result')) {
+            if (is_int($orden)) {
+                $id_field = $this->conf['id'];
+                $id_padre = $this->conf['padre'];
+                $id = intval($this->$id_field);
+                if ($orden === AI_SERVICIO_ORDEN_LONG_HIJOS) {
+                    $query = "
+                        SELECT A.*, SUM(CEIL(LENGTH(B.nombre) / 22)) as RENGLONES
+                        FROM {$this->conf['base']}.{$this->conf['tabla']} AS A,
+                             {$this->conf['base']}.{$this->conf['tabla']} AS B
+                        WHERE A.$id_field = B.$id_padre
+                            AND A.$id_padre = $id";
+                    if ($soloHabilitados) {
+                        $query .= " AND A.{$this->conf['habilitado']} = 1";
+                    }
+                    $query .= " GROUP BY A.$id_field ORDER BY RENGLONES DESC";
+                } elseif ($orden === AI_SERVICIO_ORDEN_LONG_NOMBRE) {
+                    $query = "
+                        SELECT *
+                        FROM {$this->conf['base']}.{$this->conf['tabla']}
+                        WHERE $id_padre = $id";
+                    if ($soloHabilitados) {
+                        $query .= ' AND ' . $this->conf['habilitado'] . ' = 1';
+                    }
+                    $query .= ' ORDER BY LENGTH(nombre)';
+                } else {
+                    return new AI_Error(AI_ERROR_ORDEN_INVALIDO,
+                        "Tipo de órden incorrecto [orden=$orden]");
+                }
+                $result = $db->query($query);
+                if (DB::isError($result)) {
+                    return $result;
+                }
+                return parent::cargarHijos($result, $soloHabilitados, $orden);
+            }
+        }
+        return parent::cargarHijos($db, $soloHabilitados, $orden);
+    }
+    // -X2C
 
 } // -X2C Class :AI_Servicio