static function get_eventos_internos(toba_datos_relacion $dr)
 {
     $eventos = array();
     if (!$dr->tabla('prop_basicas')->get_columna('filas_agregar_online')) {
         $eventos['pedido_registro_nuevo'] = "El usuario notifica que quiere dar de alta un nuevo registro y necesita suministrarle un registro en blanco" . " para comenzar a editar. Escuchando este evento se puede cancelar el pedido de alta o brindar una fila inicial con datos usando " . " el método <em>set_registro_nuevo</em> del ML";
     }
     if ("EVENTOS" == $dr->tabla('prop_basicas')->get_columna('analisis_cambios')) {
         $eventos['registro_alta'] = "El usuario crea una nuevo registro. Como primer parámetro recibe los datos y como segundo el id de la fila.";
         $eventos['registro_modificacion'] = "El usuario modifica un registro existente. Como primer parámetro recibe los datos y como segundo el id de la fila.";
         $eventos['registro_baja'] = "El usuario borra un registro existente. Como primer parámetro recibe el id de la fila eliminada.";
     }
     return $eventos;
 }
Example #2
0
 /**
  * Realiza modificaciones varias a la carga y sincroniza
  * Prueba Altas, bajas y modificaciones:
  * 	-Da de alta un nuevo departamento
  *  -Le asigna los empleados de otro depto (el de transporte)
  *  -Borra el depto de transporte (y sus tareas asignadas tambien)
  */
 function test_memoria_modificaciones_y_sincronizacion()
 {
     $this->cargar();
     //$this->dr->dump_esquema("INICIAL");
     //Al ser necesario que update se ejecuta antes que delete se deben retrazar las constraints
     $this->dr->persistidor()->retrasar_constraints();
     //Depto de transporte
     $transporte = $this->dr->tabla('depto')->get_id_fila_condicion(array('cod_depto' => 100));
     //Nuevo Depto.
     $dep_c = $this->dr->tabla('depto')->nueva_fila($this->get_fila_test('depto', 'comercial'));
     //Se transfieren los empleados de prensa a comercial
     $this->dr->tabla('depto')->set_cursor(current($transporte));
     $emple_trans = $this->dr->tabla('empleado')->get_id_filas();
     foreach ($emple_trans as $empleado) {
         $this->dr->tabla('empleado')->cambiar_padre_fila($empleado, array('depto' => $dep_c));
     }
     //Borra del depto.
     $this->dr->tabla('depto')->eliminar_fila(current($transporte));
     $this->dr->sincronizar();
     $this->cargar();
     //--ASERCIONES
     $dep_c = $this->dr->tabla('depto')->get_id_fila_condicion($this->get_fila_test('depto', 'comercial'));
     $tarea_vigilancia = $this->dr->tabla('tarea')->get_id_fila_condicion(array('cod_tarea' => 3));
     $this->assertEqual($this->dr->tabla('depto')->get_cantidad_filas(), 2);
     $this->dr->tabla('depto')->set_cursor(current($dep_c));
     $this->assertEqual($this->dr->tabla('empleado')->get_cantidad_filas(), 2);
     //La tarea de vigilancia no debe estar más asociada con un deptro
     $this->dr->tabla('tarea')->set_cursor(current($tarea_vigilancia));
     $this->assertEqual($this->dr->tabla('depto_tareas')->get_cantidad_filas(), 0);
     //$this->dr->dump_esquema("CAMBIO");
 }
Example #3
0
 function sincronizar($usar_cursores = false)
 {
     //--- Si no hay pantalla definida se asume una
     if ($this->tabla('pantallas')->get_cantidad_filas() == 0) {
         $fila = array('identificador' => 'pant_inicial', 'etiqueta' => 'Pantalla Inicial');
         $this->tabla('pantallas')->nueva_fila($fila);
     }
     parent::sincronizar($usar_cursores);
 }
Example #4
0
 /**
  * Muestra un esquema de las tablas y los mapeos de las filas
  * SOLO USAR PARA DEBUG! envia todos los datos al cliente en forma plana!
  */
 function dump_esquema($titulo = null)
 {
     //Se mantiene la cantidad de pasadas en este pedido de pagina para generar variables js unicas
     if (isset(self::$debug_pasadas)) {
         self::$debug_pasadas++;
     } else {
         self::$debug_pasadas = 1;
     }
     $grafo = self::grafo_relaciones($this->_info_dependencias, $this->_info_relaciones);
     $diagrama = "digraph G {\n\t\t\t\t\t\trankdir=LR;\n\t\t\t\t\t\tfontsize=8;\n\t\t\t\t\t\tnode [fontsize=6, fillcolor=white,shape=box, style=rounded,style=filled, color=gray];\n\t\t\t\t\t\t";
     if (isset($titulo)) {
         $diagrama .= "label=\"{$titulo}\";\n";
     }
     foreach ($grafo->getNodes() as $nodo) {
         $datos = $nodo->getData();
         //Se determina la tabla
         $id_tabla = $datos['identificador'];
         $tabla = $this->_dependencias[$id_tabla];
         //Se incluye el javascript para poder dumpear los datos de la tabla
         $var_tabla = $id_tabla . self::$debug_pasadas;
         echo toba_js::abrir();
         echo "var {$var_tabla} = " . toba_js::arreglo($tabla->get_filas(null, true, false), true) . ";\n";
         echo toba_js::cerrar();
         //Se incluye la tabla como nodo
         $label = "{$id_tabla} (" . count($tabla->get_id_filas(false)) . ")";
         $diagrama .= "{$id_tabla} [label=\"{$label}\"," . "URL=\"javascript: padre=(window.parent.var_dump)? window.parent : window; padre.var_dump(padre.{$var_tabla})\"];\n";
         $diagrama .= $this->dump_esquema_relaciones($nodo);
     }
     $diagrama .= "}";
     $parametros = array('contenido' => $diagrama, 'formato' => 'svg', 'es_dirigido' => 1);
     $indice = uniqid();
     toba::memoria()->set_dato_instancia($indice, $parametros);
     $url = toba::vinculador()->get_url(toba_editor::get_id(), '1000045', array('esquema' => $indice), array('validar' => false, 'celda_memoria' => 'debug'));
     toba_ei_esquema::generar_sentencia_incrustacion($url, 'svg', "100%", "200px");
 }
Example #5
0
 function hay_ciclos($tablas, $relaciones)
 {
     $tester = new Structures_Graph_Manipulator_AcyclicTest();
     $grafo = toba_datos_relacion::grafo_relaciones($tablas, $relaciones);
     return !$tester->isAcyclic($grafo);
 }
Example #6
0
 static function get_eventos_internos(toba_datos_relacion $dr)
 {
     $eventos = array();
     if ($dr->tabla('prop_basicas')->get_columna('paginar')) {
         $eventos['cambiar_pagina'] = "Se recibe como parámetro el número de página a la que se cambio.";
     }
     if ($dr->tabla('prop_basicas')->get_columna('ordenar')) {
         $eventos['ordenar'] = "Se recibe como primer parámetro el sentido del ordenamiento ('asc' o 'des') y como segundo la columna a ordenar. " . "Si no se atrapa el evento, el ordenamiento lo asume el propio cuadro.";
     }
     return $eventos;
 }
Example #7
0
 static function get_eventos_internos(toba_datos_relacion $dr)
 {
     $eventos = array();
     $navegacion = $dr->tabla('prop_basicas')->get_columna('tipo_navegacion');
     if (isset($navegacion)) {
         if ($navegacion == 'wizard') {
             $eventos['cambiar_tab__siguiente'] = "El usuario avanza de pantalla, generalmente con el botón <em>Siguiente</em>.";
             $eventos['cambiar_tab__anterior'] = "El usuario retrocede de pantalla, generalmente con el botón <em>Anterior</em>.";
         } else {
             $eventos['cambiar_tab_X'] = "El usuario cambia a la pantalla X utilizando los tabs o solapas.";
         }
     }
     return $eventos;
 }