[SOLUCIONADO] Controles en operación clase de consultas

Hola!
Subí a https://colab.siu.edu.ar/svn/guarani2/nodos/uncor/3w/trunk/2.9.0/src/pers/cordoba/operaciones/asist_cons_docente una operación que permite grabar las clases de consulta que da un docente.
Tiene el mismo criterio que la asistencia, controla que exista un complemento en el navegador para que se marque solo en determinadas máquinas de la facultad, eso ya está controlado.

Tengo unas consultas:

  • Como se maneja el control de “Fecha Desde < Fecha Hasta” en pagelet_filtro.js ?
  • Cuando da “Operación exitosa”, como se recarga el formulario limpio, sin los datos que acaban de grabarse?
  • Cuando se ingresa un valor con formato incorrecto en “hora desde” u “Hora hasta”, sale el mensaje “form_validacion_error.filtro_5”, donde se setea eso para que sea más amigable?

Saludos,
Flavia

Hola Flavia, te voy respondiendo:

  • Como se maneja el control de “Fecha Desde < Fecha Hasta” en pagelet_filtro.js ?

Acá podes hacer dos cosas:

  1. Limitar los datepickers para que solo te permitan seleccionar fechas que cumplan la condición “Fecha Desde < Fecha Hasta” y deshabilita el resto de las fechas, fíjate como se esta haciendo acá src/siu/operaciones/modificar_periodo_alcance/encuestas/pagelet_encuestas.js en la linea 74, la idea es mas o menos la siguiente:
 
                   $( "#fecha_desde" ).datepicker({
	                onSelect: function( dateText, inst ) {
	
	                     var fecha_desde_date = Date.parse($( "#fecha_desde").val());
	                     var minDate = fecha_desde_date.add({ days: 1 }).toString('dd/MM/yyyy');
	                     $("#fecha_hasta").datepicker( "option", "minDate", minDate);
	                }
	            });
	
	            $( "#fecha_hasta" ).datepicker({
	                onSelect: function( dateText, inst ) {
	
	                    var fecha_hasta_date = Date.parse($( "#fecha_hasta" ).val());
	                    var maxDate = fecha_hasta_date.add({ days: -1 }).toString('dd/MM/yyyy');
	                    $("#fecha_desde").datepicker( "option", "maxDate", maxDate);
	                }
	            });

en el pagelet vas a tener que cargar una librería JS para el manejo de fechas (https://code.google.com/p/datejs/wiki/APIDocumentation) modificando la siguiente función:

 
            function get_js_files()
	    {
	        $archivos = parent::get_js_files();
	        $archivos[] = kernel::vinculador()->vinculo_recurso("js/date-es-AR.js");
	        return $archivos;
	    }
  1. otra forma es validar que la fecha desde < fecha hasta antes de hacer submit, fijate como se esta haciendo en src/siu/operaciones/fecha_examen/filtro/pagelet_filtro.js linea 158:

                            var fecha_desde = $('#fecha_desde').val();
                            var fecha_hasta = $('#fecha_hasta').val();
                            if(fecha_desde.compareTo(fecha_hasta) > 0)
	                    {
	                        msg_error = info.mensajes.fecha_hasta_menor_fecha_desde;
	                        error_filtros = true;
	                    }

acá también vas a tener que cargar la librería JS para manejo de fechas en el pagelet.

En cuanto a “Cuando da “Operación exitosa”, como se recarga el formulario limpio, sin los datos que acaban de grabarse?” podes resetear el formulario:

$("#formulario_filtro")[0].reset();
o
$("#formulario_filtro").get(0).reset();

ver en http://stackoverflow.com/questions/16452699/how-to-reset-a-form-using-jquery-with-reset-method

El control era de horas, no de fechas, pero lo adapte y ya funciona. Gracias!
Ahora el problema está al intentar grabar. No llega a la accion__guardar desde pagelet_filtro.js línea 104.
Ya subí las cosas a colab.

Saludos,
Flavia

Hola Flavia, en el else de la linea 87 proba con esto:


else{
                               kernel.ajax.call(info.url_guardar, {
	                            type: 'POST',
	                            data: $("#formulario_filtro").serialize(),
	                            success: function(data) {
                                        kernel.ui.show_mensaje(msg_exito, {tipo: 'alert-success'});
	                                $("#formulario_filtro").get(0).reset();
	                            }
	                        });

}

saludos.

Perfecto, funcionó con esto.
Antes del reset le agregué el mensaje de “Operación exitosa”, pero el problema es que no controla los datos obligatorios seteados en el builder_form_filtro.php. Porque sucede eso?

Gracias!
Flavia

Hola Flavia, eso sucede ya que al estar usando AJAX para guardar NO re-dibuja la pantalla con los errores. Se soluciona de la siguiente manera:

en src/pers/cordoba/operaciones/asist_cons_docente/controlador.php function accion__guardar():

 
                if (kernel::request()->isPost()) {
			$form = $this->get_form();
			
			if ($form->procesar()) { <===> si validación OK
                                ...............
				kernel::renderer()->add_to_ajax_response('todo_ok', true);
			}
                        else{ <===> si validación falla
                                kernel::renderer()->add_to_ajax_response('todo_ok', false);
                        } 
		}

en src/pers/cordoba/operaciones/asist_cons_docente/filtro/pagelet_filtro.js en el success del AJAX:


                      success: function(data) {
                        
                        $(id).html(data.cont); <=====> re-dibujo la pantalla
                        if(data.todo_ok){
                            $("#formulario_filtro").get(0).reset();
                            kernel.ui.show_mensaje(info.mensajes.asist_cons_docente_ok, {until_interaction: true});
                        }

                      }

proba con eso y cualquier cosa me avisas. saludos.

Hice estos cambios y sigue sin redibujar la pantalla.
Los subí a colab para que veas.

Saludos,
Flavia

Lo solucioné sacando la línea $(id).html(data.cont);
Gracias!