[Solucionado] Grabar y validar un formulario

Hola!
Estoy trabajando en un formulario “Solicitud de Título”.
Los alumnos llenan una serie de datos, y ahora lo que quiero hacer es la validación de los mismos y el grabado.
Estoy teniendo problema con ambas cosas. Si bien el sistema arroja un msj al presionar “Grabar Datos”, esta controlando solo un campo y no la totalidad de los datos del formulario.
Hay alguna guía de validaciones y guardar/grabar?

Subo todo al colab por las dudas:
hhtps://colab.siu.edu.ar/svn/guarani2/nodos/uncor/3w/trunk/2.9.0/src/pers/cordoba/solicitud_titulo

Saludos
Andrea

Hola!

Podés implementarlo de la siguiente manera:

.js

// Envio del formulario
$(‘#form_solicitud_titulo’).submit(function() {
var msg_arriba;
if(validar()) {
// envio ajax con los datos
// kernel.ajax.call();
// ajax success >>>> mensaje de exito
// ajax error >>>> comprobación del lado del servidor >>>>> mensaje de error
}
else
{
// mensaje de error
}
return false;
});

function validar(elem) {
//validar_obligatoriedad(elem);
var valido = true;
$(‘.obligatorio’).each(function(){
if ($(this).val()===“”){
error = false;
}
});

// otras validaciones
return valido;

}

.twig
agregar la clase obligatorio para que lo controle la función validar()

Saludos

Te dejo un link con información sobre el manejo de formulario

http://foro.comunidad.siu.edu.ar/index.php?topic=8569.0

Saludos

Hola. Agregue en el .twig los campos obligatorios (todos en este formulario), pero sigo teniendo inconvenientes con el .js (no me queda muy claro como tengo que manejar las validaciones).
Saludos
Andrea
P.D: subo al colab los cambios.

Hola, Andrea… Te envió un ejemplo un poco más completo, para ver si nos entendemos.

Saludos

Index: src/pers/cordoba/operaciones/solicitud_titulo/formulario/pagelet_formulario.js

— src/pers/cordoba/operaciones/solicitud_titulo/formulario/pagelet_formulario.js (revisión: 1995)
+++ src/pers/cordoba/operaciones/solicitud_titulo/formulario/pagelet_formulario.js (copia de trabajo)
@@ -33,18 +33,8 @@
busca_depto($(this).val(), $(id + ’ #sel_pais’).val());
});
$(‘#form_solicitud_titulo’).submit(function() {

  •            var msg_arriba;
    
  •            var ST = $('#sel_solicitud_titulo').val();
    
  •            if( ST == '' ) {
    
  •                msg_arriba = $('<div role="alert" class="alert alert-error" style="width: auto; float:left; margin:0;">'+ info.sel_vacio_st +'<button type="button" class="close" data-dismiss="alert">×</button></div>');
    
  •                $(id).append(msg_arriba);
    
  •                msg_arriba.position({
    
  •                    my: 'top',
    
  •                    at: 'top center',
    
  •                    offset: '0 0',
    
  •                    of: $(id)
    
  •                }).show();
    
  •                return false; 
    
  •            if(!validar()) {
    
  •                return false;
               }
           });
       }
    

@@ -167,36 +157,29 @@
$(‘’).val(‘’).html(‘Seleccionar Departamento’)
);
}

  • }
  • // Envio del formulario
  • $(‘#form_formulario’).submit(function() {
  •   var msg_arriba;
    
  •   if(validar()) {
    
  •      // envio ajax con los datos
    
  •      // kernel.ajax.call();
    
  •      if(!isValidEmailAddress(emailAddress)){
    
  •       	msg_error = 'El mail no es correcto';
    
  •       	//error_filtros = true;
    
  •       } else if (elem.forms[0].f_nac.value == ''){
    
  •       	msg_error = 'Falta completar la feha de nacimiento';
    
  •       	//error_filtros = true;
    
  •   	}
    
  •        return false;
    
  • }});
  • }
  • function validar(elem) {
  •   //validar_obligatoriedad(elem);
    
  •   var valido = true;
    
  •   $('.obligatorio').each(function(){
    
  •           if ($(this).val()===""){
    
  •              error = false;
    
  •      }
    
  •   });
    
  • function validar() {
  •    var elementos = $('.obligatorio')
    
  •    // inicio todo como valido
    
  •    elementos.removeClass('error_val');        
    
  •    var valido = true;
    
  •    elementos.each(function(){            
    
  •        var elem = $(this);
    
  •        console.log(elem.attr('name'));
    
  •        if (elem.val()===""){
    
  •            elem.addClass('error_val');
    
  •            valido = false;
    
  •            console.log(' invalido');
    
  •        }
    
  •    });
    
  •   // otras validaciones
    
  •   return valido;
    
  •    // otras validaciones
    
  •    return valido;
    
    }
  • /*
    //VALIDACIONES DEL FORMULARIO
    function validar_obligatoriedad(elem)

Index: src/pers/cordoba/operaciones/solicitud_titulo/formulario/default.twig

— src/pers/cordoba/operaciones/solicitud_titulo/formulario/default.twig (revisión: 1995)
+++ src/pers/cordoba/operaciones/solicitud_titulo/formulario/default.twig (copia de trabajo)
@@ -5,7 +5,9 @@

Seleccione los datos del Título y la Colación.
- + +{% import "kernel/macro_csrf.twig" as input_csrf %} +{{ input_csrf.mostrar(this.generar_csrf) }} {# -- Título General -- #}
@@ -439,9 +441,8 @@

{# – Botón: Grabar datos – #}
-

+
{% endblock %}
{# – FIN – #}

Index: src/pers/cordoba/operaciones/solicitud_titulo/vista.php

— src/pers/cordoba/operaciones/solicitud_titulo/vista.php (revisión: 1995)
+++ src/pers/cordoba/operaciones/solicitud_titulo/vista.php (copia de trabajo)
@@ -12,7 +12,7 @@
$pl = kernel::localizador()->instanciar($clase, ‘formulario’);
$this->add_pagelet($pl);

  •   kernel::pagina()->set_etiqueta('solicitud_titulo', kernel::traductor()->trans('insc_colacion'));		
    
  •   kernel::pagina()->set_etiqueta('titulo', kernel::traductor()->trans('insc_colacion'));
    
    }
    }
    ?>
    \ No newline at end of file

Index: src/pers/cordoba/operaciones/solicitud_titulo/controlador.php

— src/pers/cordoba/operaciones/solicitud_titulo/controlador.php (revisión: 1995)
+++ src/pers/cordoba/operaciones/solicitud_titulo/controlador.php (copia de trabajo)
@@ -146,16 +146,16 @@
function accion__guardar()
{
if (kernel::request()->isPost()) {

  •   	try {
    
  •   		$respuesta = $this->modelo()->grabar_solicitud_titulo($_POST);
    
  •   		$respuesta['cont'] = "Guardado";
    
  •   	} catch (\siu\errores\error_procesar_solicitud_titulo $e) {
    
  •   		kernel::renderer()->add_csrf($this->generar_csrf());
    
  •   		throw $e;
    
  •   	}
    
  •   	$datos = $this->modelo()->get_solicitud_titulo();
    
  •   	$this->vista()->mostrar('default', $datos);
    
  •   	kernel::renderer()->add($this->vista()->pagelet('formulario'));
    

+// try {
+// $respuesta = $this->modelo()->grabar_solicitud_titulo($_POST);
+// $respuesta[‘cont’] = “Guardado”;
+// } catch (\siu\errores\error_procesar_solicitud_titulo $e) {
+// kernel::renderer()->add_csrf($this->generar_csrf());
+// throw $e;
+// }
+// $datos = $this->modelo()->get_solicitud_titulo();
+// $this->vista()->mostrar(‘default’, $datos);
+// kernel::renderer()->add($this->vista()->pagelet(‘formulario’));
}
}

Una consulta, en el default.twig, en el caso de muchas opciones, por ejemplo:

<div class='span8'>
			<div class='control-label'>
   					<strong> ¿Piensa continuar sus estudios? </strong> 
   					<select name='sel_cont_estudios' id='sel_cont_estudios' class='obligatorio'>
		            	<div class='btn-group'>
  							<button type='button' class='btn btn-default dropdown-toggle' data-toggle='dropdown'>
    					    </button>
 					  <ul class='dropdown-menu' role='menu'>
 					  <li><option value='0'></option></li>
    				  <li><option value='1'>No</option></li>
    				  <li><option value='2'>Si, en la UNC</option></li>
    				  <li><option value='3'>Si, en otra Universidad Nacional</option></li>
    				  <li><option value='4'>Si, en otros institutos privados del pais</option></li>
    				  <li><option value='5'>Si, en el exterior</option></li>
    				  <li><option value='9'>No sabe/ No contesta</option></li>
    	               </ul>
						</div>
		           	 </select>
  				</div>
  			</div>
  	</div>

en el select esta colocado el class=‘obligatorio’, pero no lo toma (no controla que este completado). Se maneja de otra forma?
Saludos
Andrea

Hola Andrea,

No lo debe estar tomando porque

  • toma el valor de “0” y no “”… cambialo a
  • y probá

    Saludos

    Así es, era eso. Gracias.
    Saludos
    Andrea

    Habiendo finalizado con las validaciones con éxito… pasé al grabar/guardar.
    En el controlador cree una función guardar: function accion__guardar. De esa llamo a una transacción: evt__guardarST. A su vez esa transacción llama a una función de db: function solicitud_titulo_guardar.
    Es la primera vez que trabajo con transacciones, y no esta funcionando.
    Me podrían guiar un poquito? Subo todo al colab.

    P.D: Me reporta 2 errores.

    1. Cuando pongo “Grabar datos” sin llenar ningún campo →
    mensaje: error de validación de clave $_post ['__csrf']
    
    1. Cuando lleno todos los datos, y pongo “Grabar datos” →
    Archivo: /srv/www/vhosts/guarani_290/src/siu/extension_kernel/controlador_errores_control.php
    Linea: 34
    call_user_func_array() expects parameter 1 to be a valid callback, class 'cordoba\operaciones\solicitud_titulo\controlador' does not have a method 'modelo__evt__guardarST'
    

    Saludos
    Andrea

    Hola Andrea

    Probá hacer algo así en el controlador

    function accion__guardar()
    {
    $parametros[‘colacion’] = $this->get_param(‘sel_solicitud_titulo’, ‘post’, ‘string’);
    $parametros[‘carrera’] = $this->get_param(‘sel_carrera’, ‘post’, ‘string’);
    $parametros[‘plan’] = $this->get_param(‘plan’, ‘post’, ‘string’);
    $parametros[‘nro_inscripcion’] = $this->get_param(‘nro_inscripcion’, ‘post’, ‘string’);
    $parametros[‘titulos’] = $this->get_param(‘filtro_titulos’, ‘post’, ‘string’);
    $parametros[‘orientacion’] = $this->get_param(‘filtro_orientacion’, ‘post’, ‘string’);
    $parametros[‘mail’] = $this->get_param(‘mail’, ‘post’, ‘string’);
    $parametros[‘telefono’] = $this->get_param(‘telefono’, ‘post’, ‘string’);
    $parametros[‘f_nac’] = $this->get_param(‘f_nac’, ‘post’, ‘string’);
    $parametros[‘cuil’] = $this->get_param(‘numero_cuil’, ‘post’, ‘string’);
    $parametros[‘rec_carrera’] = $this->get_param(‘sel_rec_carrera’, ‘post’, ‘string’);
    $parametros[‘pais’] = $this->get_param(‘sel_pais’, ‘post’, ‘string’);
    $parametros[‘provincia’] = $this->get_param(‘filtro_provincia’, ‘post’, ‘string’);
    $parametros[‘conti’] = $this->get_param(‘sel_cont_estudios’, ‘post’, ‘string’);
    $parametros[‘depto’] = $this->get_param(‘filtro_depto’, ‘post’, ‘string’);
    $parametros[‘oport’] = $this->get_param(‘sel_oport_trabajo’, ‘post’, ‘string’);
    $parametros[‘cont’] = $this->get_param(‘sel_cont_teorico’, ‘post’, ‘string’);
    $parametros[‘exp’] = $this->get_param(‘sel_exp_prac’, ‘post’, ‘string’);
    $parametros[‘eval’] = $this->get_param(‘sel_eval_gral’, ‘post’, ‘string’);
    $parametros[‘cuerpo’] = $this->get_param(‘sel_cuerpo_doc’, ‘post’, ‘string’);
    $parametros[‘adm’] = $this->get_param(‘sel_func_adm’, ‘post’, ‘string’);

    $hubo_error = $this->modelo()->evt__guardarST($parametros);
    $mensajes = $this->get_var('mensajes');
    if (!empty($mensajes)) {
    	$this->vista()->set_hay_mensajes(true);
    }
    $this->vista()->set_error($hubo_error);
    //kernel::renderer()->add_csrf($this->generar_csrf());
    

    }

    Saludos

    No funciona.
    El problema esta en que no recupera los datos cargados en el formulario. No recupera por lo que veo los datos anidados (Por ejemplo Carrera - Plan - Título - Orientación ó País - Provincia - Departamento). Los tengo que manejar de otra forma?
    Subo todo al colab.
    Saludos
    Andrea

    Hola Andrea,

    Los datos llegan
    $parametros
    Array
    (
    [colacion] => nombre colacion 1
    [carrera] => 589caab4ec5995b0d8988bdef018fd9c5f825f49
    [plan] =>
    [nro_inscripcion] =>
    [titulos] => 3b5e0365f0c2299dfd89eb3852a8ebb566382194
    [orientacion] => 0
    [mail] => gsdfg
    [telefono] => sdfgsdf
    [f_nac] => gsdfgsdgs
    [cuil] => 65465465
    [rec_carrera] => 3
    [pais] => 3defcdbb656e370c988b71691ccb99f867f23219
    [provincia] => 0b2146da2c95bd162303b26f6ff7d15b02addd0c
    [conti] => 3
    [depto] => 5402000
    [oport] => 3
    [cont] => 1
    [exp] => 2
    [eval] => 2
    [cuerpo] => 2
    [adm] => 2
    )

    pero vienen hasheados por seguridad
    [carrera] => 589caab4ec5995b0d8988bdef018fd9c5f825f49
    [titulos] => 3b5e0365f0c2299dfd89eb3852a8ebb566382194
    [pais] => 3defcdbb656e370c988b71691ccb99f867f23219
    [provincia] => 0b2146da2c95bd162303b26f6ff7d15b02addd0c

    tenes que usar los métodos decodificar_ … para recuperarlos. como por ejemplo $carrera = $this->decodificar_carrera($parametrosa[‘carrera’]);

    Saludos
    Bruno

    Bruno, no estoy teniendo suerte con el grabar. El array de datos me los trae vacíos igual.
    Así me devuelve los datos:

    Array ( [colacion] => 201505 [carrera] => [plan] => [nro_inscripcion] => [titulos] => [orientacion] => 0 [mail] => a@gmail.com [telefono] => 42424524 [f_nac] => 1956-09-25 [cuil] => 27324925797 [rec_carrera] => 2 [pais] => [provincia] => [conti] => 1 [depto] => [oport] => 1 [cont] => 2 [exp] => 1 [eval] => 1 [cuerpo] => 1 [adm] => 1 )
    

    Saludos
    P.D: subo los cambios al colab.

    Saludos. Andrea

    Hola Andrea,

    Te faltaban unos detalles.
    Te copio mi controlador.php

    <?php namespace cordoba\operaciones\solicitud_titulo; use kernel\kernel; use cordoba\guarani; use siu\extension_kernel\controlador_g3w2; use siu\extension_kernel\controlador_errores_control; use siu\modelo\datos\catalogo; use kernel\util\validador; use cordoba\modelo\transacciones\solicitud_titulo; use \siu\errores\error_guarani_control; include_once(\siu\guarani::dir().'/lib/phpqrcode/qrlib.php'); class controlador extends controlador_errores_control { public $hash_titulos; public $hash_orientacion; public $hash_provincia; public $hash_depto; function ini() { $this->controlar_csrf_accion('guardar'); } function modelo() { return new solicitud_titulo(); } function accion__index() { kernel::renderer()->add($this->vista()->pagelet('formulario')); } function accion__busca_titulos() { $carrera_hash = $this->validate_param('carrera', 'post', validador::TIPO_ALPHANUM); $carrera = $this->decodificar_carrera($carrera_hash); $parametros = array(); if (!empty($carrera)){ $parametros = array('carrera' => $carrera['carrera'], 'plan' => $carrera['plan']); } $nuevo = array(); if (!empty($parametros)){ $nuevo = catalogo::consultar('colacion', 'busca_titulos', $parametros); } $this->render_raw_json($nuevo); } function accion__busca_orientacion() { $titulo_hash = $this->validate_param('titulo', 'post', validador::TIPO_ALPHANUM); $carrera_hash = $this->validate_param('carrera', 'post', validador::TIPO_ALPHANUM); $carrera = $this->decodificar_carrera($carrera_hash); $nuevo = array(); if (!empty($carrera)){ $parametros = array('carrera' => $carrera['carrera'], 'plan' => $carrera['plan']); $titulos = catalogo::consultar('colacion', 'busca_titulos', $parametros); if (!empty($titulos)){ foreach($titulos as $titulo){ if ($titulo_hash == $titulo["__ID__"]){ $parametros = array ('carrera' => $carrera['carrera'], 'plan' => $carrera['plan'], 'titulo' => $titulo['ID']); if (!empty($parametros)){ $nuevo = catalogo::consultar('colacion', 'busca_orientacion', $parametros); } } } } } $this->render_raw_json($nuevo); } function accion__busca_provincia() { $pais_hash = $this->validate_param('pais', 'post', validador::TIPO_ALPHANUM); $pais = $this->decodificar_pais($pais_hash); $parametros = array(); if (!empty($pais)){ $parametros = array('cod_pais' => $pais['cod_pais']); } $nuevo = array(); if (!empty($parametros)){ $nuevo = catalogo::consultar('colacion', 'busca_provincia', $parametros); } $this->render_raw_json($nuevo); } function accion__busca_depto() { $provincia_hash = $this->validate_param('provincia', 'post', validador::TIPO_ALPHANUM); $pais_hash = $this->validate_param('pais', 'post', validador::TIPO_ALPHANUM); $pais = $this->decodificar_pais($pais_hash); $nuevo = array(); if (!empty($pais)){ $parametros = array('cod_pais' => $pais['cod_pais']); $provincias = catalogo::consultar('colacion', 'busca_provincia', $parametros); if (!empty($provincias)){ foreach($provincias as $provincia){ if ($provincia_hash == $provincia["__ID__"]){ $parametros = array ('cod_prov' => $provincia['ID']); if (!empty($parametros)){ $nuevo = catalogo::consultar('colacion', 'busca_depto', $parametros); } } } } } $this->render_raw_json($nuevo); } function accion__guardar() { $parametros['nro_inscripcion'] = kernel::persona()->get_nro_inscripcion(); $parametros['colacion'] = $this->get_param('sel_solicitud_titulo', 'post', 'string'); $sel_carrera = $this->get_param('sel_carrera', 'post', 'string'); $datos_carrera = $this->decodificar_carrera ($sel_carrera); $parametros['carrera'] = $datos_carrera['carrera']; $parametros['plan'] = $datos_carrera['plan']; $sel_titulo = $this->get_param('filtro_titulos', 'post', 'string'); $datos_titulo = $this->decodificar_titulo($sel_carrera, $sel_titulo); $parametros['titulos'] = $datos_titulo; $parametros['orientacion'] = $this->get_param('filtro_orientacion', 'post', 'string'); $parametros['mail'] = $this->get_param('mail', 'post', 'string'); $parametros['telefono'] = $this->get_param('telefono', 'post', 'string'); $parametros['f_nac'] = $this->get_param('f_nac', 'post', 'string'); $parametros['cuil'] = $this->get_param('numero_cuil', 'post', 'string'); $parametros['rec_carrera'] = $this->get_param('sel_rec_carrera', 'post', 'string'); $sel_pais = $this->get_param('sel_pais', 'post', 'string'); $datos_pais = $this->decodificar_pais($sel_pais); $parametros['pais'] = $datos_pais['cod_pais']; $sel_provincia = $this->get_param('filtro_provincia', 'post', 'string'); $datos_provincia = $this->decodificar_provincia($sel_pais, $sel_provincia); $parametros['provincia'] = $datos_provincia; $parametros['depto'] = $this->get_param('filtro_depto', 'post', 'string');; $parametros['conti'] = $this->get_param('sel_cont_estudios', 'post', 'string'); $parametros['oport'] = $this->get_param('sel_oport_trabajo', 'post', 'string'); $parametros['cont'] = $this->get_param('sel_cont_teorico', 'post', 'string'); $parametros['exp'] = $this->get_param('sel_exp_prac', 'post', 'string'); $parametros['eval'] = $this->get_param('sel_eval_gral', 'post', 'string'); $parametros['cuerpo'] = $this->get_param('sel_cuerpo_doc', 'post', 'string'); $parametros['adm'] = $this->get_param('sel_func_adm', 'post', 'string'); echo "
    ";
            print_r($parametros);
            exit;
    
            $hubo_error = $this->modelo()->evt__guardarST($parametros);
            $mensajes = $this->get_var('mensajes');
            if (!empty($mensajes)) {
               $this->vista()->set_hay_mensajes(true);
            }
            $this->vista()->set_error($hubo_error);
            //kernel::renderer()->add_csrf($this->generar_csrf());
        }
        
        
        function decodificar_carrera($carrera_hash){
        	$carreras = catalogo::consultar('colacion', 'lista_carreras');
        	if (!empty($carreras)){
        		foreach($carreras as $carrera){
        			if ($carrera_hash == $carrera["__ID__"]){
        				return $carrera;
        			}
        		}
        	}
        	return false;
        }
        
        function decodificar_titulo($carrera_hash, $titulo_hash)
    	{
    		$carrera = $this->decodificar_carrera($carrera_hash);
    		$parametros = array();
    				if (!empty($carrera)){
                        $parametros = array('carrera' => $carrera['carrera'], 'plan' => $carrera['plan']);
    	 			}
    	 
    	 	$nuevo = array();
    	 	if (!empty($parametros)){
                $titulos = catalogo::consultar('colacion', 'busca_titulos', $parametros);
                if (!empty($titulos)){
                    foreach($titulos as $titulo){
                        if ($titulo_hash == $titulo["__ID__"]){
                            return $titulo['ID'];
                        }
                    }
                }
    	 	}
            return false;
    	}
        
        function decodificar_pais($pais_hash){
        	$pais = catalogo::consultar('colacion', 'lista_paises');
        	if (!empty($pais)){
        		foreach($pais as $pais){
        			if ($pais_hash == $pais["__ID__"]){
        				return $pais;
        			}
        		}
        	}
        	return false;
        }
        
        function decodificar_provincia($pais_hash, $provincia_hash)
        {
        	$pais = $this->decodificar_pais($pais_hash);
        
        	$nuevo = array();
        	if (!empty($pais)){
        		$parametros = array('cod_pais' => $pais['cod_pais']);
        		$provincias = catalogo::consultar('colacion', 'busca_provincia', $parametros);
        
        		if (!empty($provincias)){
        			foreach($provincias as $provincia){
        				if ($provincia_hash == $provincia["__ID__"]){
        					return $provincia['ID'];
        				}
        			}
        		}
        	}
        
        	return false;
        }
    }
    
    Saludos

    Perfecto, ahí quedo el controlador y el array me trae todos los datos.
    Una consulta ahora sobre db.
    La función: solicitud_titulo_guardar($parametros), como se deben definir los parámetros, porque me arroja un error:
    El error exacto es:

    clase: siu\errores\error_guarani
    mensaje: CATALOGO: colacion / solicitud_titulo_guardar - FALTA PARAMETRO: colacion
    traza: [TRAZA]
    
    

    Lo probé de estás 2 maneras pero no funciona:
    $parametros[“colacion”] . “,”.
    ó
    $parametros[‘colacion’] = $this->get_param(‘sel_solicitud_titulo’, ‘post’, ‘string’). “,” .

    Saludos. Andrea

    Hola Andrea,

    El problema está en el pasaje de parámetros

    Controlá que pasen bien desde:

    https://colab.siu.edu.ar/svn/guarani2/nodos/uncor/3w/trunk/2.9.0/src/pers/cordoba/operaciones/solicitud_titulo/controlador.php
    function accion__guardar()

    https://colab.siu.edu.ar/svn/guarani2/nodos/uncor/3w/trunk/2.9.0/src/pers/cordoba/modelo/transacciones/solicitud_titulo.php
    function evt__guardarST($parametros) // ahí los estás reescribiendo con variables vacías

    https://colab.siu.edu.ar/svn/guarani2/nodos/uncor/3w/trunk/2.9.0/src/pers/cordoba/modelo/datos/db/colacion.php
    function solicitud_titulo_guardar($parametros) // acá deberías definir la metadata del los parámetros y generar catalogo /bin/guarani generar_catalogo <id_acceso>

    /**

    • parametros: _ua, colacion, carrera
    • param_null: //si hay algún parámetro que deba ser null debe definirse acá y arriba
    • cache: no
    • filas: 1
      */
      function solicitud_titulo_guardar($parametros)

    Saludos

    Bruno.
    Ahí “acomodé” los parámetros de los lugares donde me indicaste, pero el error es este:

    
    clase: siu\errores\error_guarani
    mensaje: CATALOGO: colacion / solicitud_titulo_guardar - FALTA PARAMETRO: titulos
    traza: [TRAZA]
    
    

    El parámetro $titulos y algunos más no los tengo porque son llamados por la concatenación de carrera → título → orientación por ejemplo. Como los debo definir en la transacción para que los traiga?

    Actualizo el colab por las dudas.
    Saludos
    Andrea

    Hola Andrea,

    Seguís teniendo problemas con el pasaje de parámetros.

    En el controlador llamás al método evt__guardarST($parametros) con un solo parámetro
    $hubo_error = $this->modelo()->evt__guardarST($parametros);

    y en el modelo/transacciones/solicitud_titulo.php el método recibe 21
    function evt__guardarST($carrera, $plan, $nro_inscripcion, $titulos, $orientacion, $colacion, $rec_carrera, $depto, $provincia,$pais, $conti, $oport, $cont, $exp, $cuerpo,$adm, $eval, $cuil, $f_nac, $mail,$telefono)

    yo te recomendaría que cambies la firma del método del modelo para que reciba solo un parámetro, llamado $parametros y que sea un array()
    function evt__guardarST($parametros)
    y directamente le pases ese $parametros al catalogo
    $ok = catalogo::consultar(‘colacion’, ‘solicitud_titulo_guardar’, $parametros);

    Controlando que el array $parametros que pasas en el controlador contenga las claves que necesita el catalogo y que esas claves estén definidas en la metadata del método.

    /**

    • parametros: _ua, carrera, plan, nro_inscripcion, titulos, orientacion, colacion, obtuvo_equiv, depto, provincia, pais, continua_estudios, oport_trabajo, eval_cont_teorico, eval_exper_y_pract, eval_nivel_docente, eval_func_administ, radic_nc, evaluacion_gral, numero_cuil, fec_nac, mail, telefono
    • cache: no
    • filas: 1
      */
      function solicitud_titulo_guardar($parametros)
      {

    después de definir la metadata tenes que regenerar el catálogo “/bin/guarani generar_catalogo <id_acceso>”

    Saludos

    Bruno

    Hice todo menos lo último: "después de definir la metadata tenes que regenerar el catálogo “/bin/guarani generar_catalogo <id_acceso>” porque no se lo que es…
    El error es el mismo:

    
    mensaje: CATALOGO: colacion / solicitud_titulo_guardar - FALTA PARAMETRO: carrera
    
    

    Ese comando genera la clase _info_catalogo.php
    https://colab.siu.edu.ar/svn/guarani2/nodos/uncor/3w/trunk/2.9.0/src/pers/cordoba/modelo/datos/_info_catalogo.php
    En la cual por medio de la metada describe cualidades de cada método. una de ellas es los parámetros que recibe.

    Igual por lo que veo está bien generada. estás completandola de manera manual? si alguien la regenera te pisa todo el trabajo.

    El problema lo tenés acá:
    https://colab.siu.edu.ar/svn/guarani2/nodos/uncor/3w/trunk/2.9.0/src/pers/cordoba/modelo/transacciones/solicitud_titulo.php

    function evt__guardarST($parametros)
    {
    		/*  Todo esto no va <<<<<<<<<<<<
    			$parametros["_ua"] = '';
    			$parametros["carrera"] = $carrera;
    			$parametros["plan"] = '';
    			$parametros["nro_inscripcion"] = '';
    			$parametros["titulos"] = $titulos;
    			$parametros["orientacion"] = $orientacion;
    			$parametros["colacion"] = $colacion;
    			$parametros["obtuvo_equiv"] = $rec_carrera;
    			$parametros["depto"] = $depto;
    			$parametros["provincia"] = $provincia;
    			$parametros["pais"] = $pais;
    			$parametros["continua_estudios"] = $conti;
    			$parametros["oport_trabajo"] = $oport;
    			$parametros["eval_cont_teorico"] = $cont;
    			$parametros["eval_exper_y_pract"] = $exp;
    			$parametros["eval_nivel_docente"] = $cuerpo;
    			$parametros["eval_func_administ"] = $adm;
    			$parametros["radic_nc"] = '';
    			$parametros["evaluacion_gral"]  = $eval;
    			$parametros["numero_cuil"] = $cuil;
    			$parametros["fec_nac"] = $f_nac;
    			$parametros["mail"] = $mail;
    			$parametros["telefono"] = $telefono;
    			*/
    
    
    	$ok = catalogo::consultar('colacion', 'solicitud_titulo_guardar', $parametros);
    	if(($ok[0]>0)) {
    		// exito
    		return $msg;
    	} else {
    		$mensaje = util::mensaje($ok[1]);
    		throw new error_guarani_usuario($mensaje);
    	}
    }
    

    El error
    mensaje: CATALOGO: colacion / solicitud_titulo_guardar - FALTA PARAMETRO: carrera
    $parametros[“carrera”] = $carrera
    es porque $parametros[“carrera”] tiene el valor de $carrera que no tiene ningún valor.

    Saludos