From cde8cd49f985c667468b0a35791cc1fec52b019d Mon Sep 17 00:00:00 2001 From: Alfredo Date: Wed, 24 Sep 2025 20:49:42 -0300 Subject: [PATCH] commit inicial con los archivos del sistema --- BD/conversion/mig_3.08_a_3.09.sql | 16 + BD/conversion/mig_3.09_a_3.10.sql | 21 + BD/conversion/mig_3.10_a_3.11.sql | 10 + BD/conversion/mig_3.11.0_a_3.11.1.sql | 57 + BD/conversion/mig_3.11_a_3.12.sql | 458 + BD/conversion/mig_3.12.0_a_3.13.0.sql | 52 + BD/conversion/mig_3.13.0_a_3.21.0.sql | 58 + BD/conversion/mig_3.21.0_a_3.21.1.sql | 21 + BD/conversion/mig_3.21.0_a_3.22.0.sql | 172 + BD/conversion/mig_3.21.1_a_3.21.2.sql | 11 + BD/conversion/mig_3.21.2_a_3.21.3.sql | 93 + BD/creacion/armar_script_postgresql.bat | 10 + BD/creacion/armar_script_postgresql.sh | 12 + .../creacion_preinscripcion3_postgresql.sql | 1629 ++ ...sga_preinscripcion_aud_lenguaje_labial.sql | 8 + ...sga_preinscripcion_aud_lenguaje_senias.sql | 8 + ...a_preinscripcion_aud_req_aro_magnetico.sql | 8 + ...pcion_aud_req_interprete_lengua_senias.sql | 8 + ...ga_preinscripcion_aud_req_otros_apoyos.sql | 8 + ..._preinscripcion_condicion_discapacidad.sql | 8 + .../ck_sga_preinscripcion_disc_auditiva.sql | 8 + ...a_preinscripcion_disc_cond_psicosocial.sql | 8 + .../ck/ck_sga_preinscripcion_disc_motora.sql | 8 + BD/sql/ck/ck_sga_preinscripcion_disc_otra.sql | 8 + .../ck/ck_sga_preinscripcion_disc_visual.sql | 8 + ...inscripcion_es_mayor_25_sin_secundario.sql | 15 + BD/sql/ck/ck_sga_preinscripcion_estado.sql | 17 + ..._sga_preinscripcion_mot_req_apoyo_aula.sql | 8 + ...ga_preinscripcion_mot_req_otros_apoyos.sql | 8 + ...inscripcion_otra_req_apoyo_vida_diaria.sql | 8 + ...k_sga_preinscripcion_propuestas_estado.sql | 17 + ...ga_preinscripcion_psi_req_otros_apoyos.sql | 8 + BD/sql/ck/ck_sga_preinscripcion_tiene_cud.sql | 8 + ...ga_preinscripcion_validado_con_renaper.sql | 8 + ...a_preinscripcion_vis_req_archivo_audio.sql | 8 + ...ga_preinscripcion_vis_req_otros_apoyos.sql | 8 + ...ga_preinscripcion_vis_req_texto_braile.sql | 8 + ...a_preinscripcion_vis_req_texto_digital.sql | 8 + .../ck/ck_sga_requisitos_digitales_estado.sql | 15 + BD/sql/datos/00_sga_propuestas_tipos.sql | 18 + BD/sql/datos/10_sga_campos_form.sql | 268 + BD/sql/datos/20_sga_campos_conf.sql | 285 + BD/sql/datos/90_app_versiones_base.sql | 7 + BD/sql/fks/fks_sga_actuacion_doc.sql | 14 + BD/sql/fks/fks_sga_actuacion_prof.sql | 14 + BD/sql/fks/fks_sga_campos_conf.sql | 24 + BD/sql/fks/fks_sga_formacion_acad.sql | 17 + .../fks/fks_sga_preinscripcion_propuestas.sql | 15 + BD/sql/fks/fks_sga_requisitos_digitales.sql | 14 + BD/sql/funciones/f_limpiar_acentos.sql | 26 + ...nscripcion__apellido_nombres_fecha_nac.sql | 10 + ..._sga_preinscripcion__codigo_validacion.sql | 9 + .../indices/iu__admin_usuarios__usuario.sql | 9 + .../iu__sga_preinscripcion__usuario.sql | 8 + BD/sql/lenguajes/language_plpgsql.sql | 31 + BD/sql/tablas/admin_usuarios.sql | 21 + BD/sql/tablas/app_versiones_base.sql | 22 + BD/sql/tablas/cfg_perfiles_datos.sql | 26 + BD/sql/tablas/sga_actuacion_doc.sql | 27 + BD/sql/tablas/sga_actuacion_prof.sql | 26 + BD/sql/tablas/sga_campos_conf.sql | 22 + BD/sql/tablas/sga_campos_form.sql | 17 + BD/sql/tablas/sga_formacion_acad.sql | 32 + BD/sql/tablas/sga_preinscripcion.sql | 378 + .../tablas/sga_preinscripcion_propuestas.sql | 30 + BD/sql/tablas/sga_propuestas_tipos.sql | 18 + BD/sql/tablas/sga_requisitos_digitales.sql | 28 + bin/preinscripcion | 10 + bin/preinscripcion.bat | 3 + bin/yuicompressor-2.4.2.jar | Bin 0 -> 851359 bytes composer.json | 81 + composer.lock | 2361 ++ ...200819191727_es_mayor25_sin_secundario.php | 102 + instalacion/alias_template.conf | 89 + instalacion/arai_documentos_template.ini | 3 + instalacion/config_template.php | 470 + instalacion/login_template.php | 90 + instalacion/rewrite.conf | 22 + instalacion/servicios_web_config_template.php | 22 + phinx.php | 29 + src/pers/composer.json | 4 + src/pers/ejemplo/mensajes/mensajes.es.php | 35 + src/pers/ejemplo/modelo/manejador_datos.php | 107 + .../operaciones/_comun/generador_pdf.php | 169 + .../operaciones/_comun/templates/header.twig | 63 + .../operaciones/censo/idiomas/default.css | 11 + .../operaciones/censo/idiomas/default.twig | 46 + .../censo/idiomas/form_idiomas.php | 81 + src/pers/ejemplo/www/css/preinscripcion.css | 28 + src/pers/ejemplo/www/img/favicon.ico | Bin 0 -> 596 bytes src/pers/ejemplo/www/img/logo.png | Bin 0 -> 78541 bytes src/siu/Install.php | 35 + src/siu/bootstrap.php | 492 + src/siu/conf/acceso/acc_admin.xml | 31 + src/siu/conf/acceso/acc_alumno.xml | 13 + src/siu/conf/acceso/acc_anonimo_admin.xml | 14 + src/siu/conf/acceso/acc_anonimo_alumno.xml | 17 + src/siu/errores/error_preinscripcion.php | 15 + .../error_preinscripcion_alumno_g3.php | 9 + .../errores/error_preinscripcion_clave.php | 9 + .../errores/error_preinscripcion_cnx_bd.php | 9 + .../errores/error_preinscripcion_login.php | 25 + .../error_preinscripcion_login_externo.php | 9 + .../error_preinscripcion_mail_no_validado.php | 9 + .../error_preinscripcion_persona_g3.php | 8 + .../error_preinscripcion_seguridad.php | 11 + .../errores/error_preinscripcion_token.php | 11 + .../errores/error_preinscripcion_usuario.php | 11 + .../extension_kernel/chulupi_logger_rdi.php | 60 + .../controlador_preinscripcion.php | 127 + .../extension_kernel/eventos_aplicacion.php | 49 + src/siu/extension_kernel/log.php | 146 + src/siu/extension_kernel/login.php | 28 + src/siu/extension_kernel/login_admin.php | 18 + src/siu/extension_kernel/pagina.php | 63 + src/siu/extension_kernel/persona.php | 104 + src/siu/extension_kernel/persona_anonima.php | 16 + src/siu/extension_kernel/proyecto.php | 250 + .../servicios_externos_preinscripcion.php | 35 + .../extension_kernel/vista_preinscripcion.php | 11 + src/siu/func_util.php | 343 + src/siu/mensajes/mensajes.es.php | 1338 ++ src/siu/modelo/admin.php | 147 + src/siu/modelo/autenticacion/auth_admin.php | 86 + .../modelo/autenticacion/auth_con_sesion.php | 74 + .../modelo/autenticacion/auth_cuenta_ext.php | 158 + src/siu/modelo/autenticacion/auth_form.php | 182 + .../autenticacion/auth_form_documento.php | 267 + src/siu/modelo/autenticacion/auth_token.php | 68 + src/siu/modelo/clienteRDI.php | 46 + src/siu/modelo/comunes.php | 175 + src/siu/modelo/consultas.php | 617 + .../modelo/g3/consultas_bd/_consultas_bd.php | 182 + .../g3/consultas_bd/abandono_estudio.php | 29 + .../g3/consultas_bd/cobertura_salud.php | 29 + .../modelo/g3/consultas_bd/cod_postales.php | 71 + src/siu/modelo/g3/consultas_bd/colegios.php | 125 + .../modelo/g3/consultas_bd/continentes.php | 32 + .../g3/consultas_bd/dias_no_laborables.php | 30 + .../discapacidades_dificultad.php | 42 + .../modelo/g3/consultas_bd/dptos_partidos.php | 58 + .../g3/consultas_bd/entes_emisores_ci.php | 30 + src/siu/modelo/g3/consultas_bd/entidad_g3.php | 134 + .../modelo/g3/consultas_bd/extensiones.php | 62 + .../g3/consultas_bd/identidad_genero.php | 42 + .../modelo/g3/consultas_bd/localidades.php | 157 + .../modelo/g3/consultas_bd/modalidades.php | 30 + .../modelo/g3/consultas_bd/nacionalidades.php | 30 + .../consultas_bd/orientacion_vocacional.php | 29 + src/siu/modelo/g3/consultas_bd/paises.php | 111 + src/siu/modelo/g3/consultas_bd/parametros.php | 71 + src/siu/modelo/g3/consultas_bd/periodos.php | 164 + src/siu/modelo/g3/consultas_bd/personas.php | 191 + src/siu/modelo/g3/consultas_bd/propuestas.php | 364 + src/siu/modelo/g3/consultas_bd/provincias.php | 57 + .../g3/consultas_bd/pueblos_originarios.php | 29 + src/siu/modelo/g3/consultas_bd/requisitos.php | 113 + .../consultas_bd/responsables_academicas.php | 105 + .../g3/consultas_bd/tipos_allegados.php | 30 + .../g3/consultas_bd/tipos_documentos.php | 49 + .../g3/consultas_bd/tipos_documentos_pais.php | 65 + .../modelo/g3/consultas_bd/tipos_vivienda.php | 29 + .../g3/consultas_bd/titulos_secundario.php | 76 + src/siu/modelo/g3/consultas_bd/turnos.php | 389 + .../modelo/g3/consultas_bd/turnos_cursada.php | 30 + .../modelo/g3/consultas_bd/ubicaciones.php | 30 + src/siu/modelo/g3/g3.php | 175 + src/siu/modelo/g3/interface_colegios.php | 18 + src/siu/modelo/g3/interface_entidades_g3.php | 66 + src/siu/modelo/g3/interface_extensiones.php | 20 + src/siu/modelo/g3/interface_localidades.php | 18 + src/siu/modelo/g3/interface_paises.php | 24 + src/siu/modelo/g3/interface_parametros.php | 26 + src/siu/modelo/g3/interface_periodos.php | 43 + src/siu/modelo/g3/interface_personas.php | 36 + src/siu/modelo/g3/interface_propuestas.php | 63 + src/siu/modelo/g3/interface_requisitos.php | 33 + .../g3/interface_responsables_academicas.php | 16 + .../g3/interface_titulos_secundario.php | 17 + src/siu/modelo/g3/interface_turnos.php | 90 + src/siu/modelo/lib/abm.php | 140 + src/siu/modelo/lib/catalogo.php | 232 + src/siu/modelo/manejador_datos.php | 1484 ++ src/siu/modelo/opciones.php | 536 + src/siu/modelo/periodo_de_inscripcion.php | 24 + src/siu/modelo/planes.php | 43 + src/siu/modelo/propuesta.php | 19 + src/siu/modelo/turnos.php | 349 + src/siu/modelo/usuario.php | 660 + src/siu/modelo/util.php | 48 + src/siu/modelo/ws_renaper.php | 56 + src/siu/operaciones/_comun/form.php | 44 + src/siu/operaciones/_comun/generador_pdf.php | 767 + .../operaciones/_comun/pagelet_con_form.php | 36 + .../operaciones/_comun/preinscripcion_PDF.php | 249 + .../_comun/preinscripcion_form.php | 209 + .../operaciones/_comun/templates/footer.twig | 16 + .../operaciones/_comun/templates/full.twig | 86 + .../operaciones/_comun/templates/header.twig | 95 + .../_comun/templates/header_celular.twig | 143 + .../_comun/templates/header_tablet.twig | 147 + .../operaciones/_comun/templates/pipe.twig | 32 + src/siu/operaciones/_comun/templates/res.twig | 151 + .../_comun/templates/vista_error.twig | 9 + .../_comun/util_formulario_preinscripcion.php | 462 + .../acceso/cambiar_email/default.twig | 131 + .../cambiar_email/pagelet_cambiar_email.js | 57 + .../acceso/contenido_login/default.css | 0 .../acceso/contenido_login/default.twig | 5 + .../pagelet_contenido_login.js | 8 + src/siu/operaciones/acceso/controlador.php | 516 + .../operaciones/acceso/form_login/default.css | 29 + .../acceso/form_login/default.twig | 236 + .../acceso/form_login/mail_crear_usuario.twig | 22 + .../acceso/form_login/pagelet_form_login.js | 66 + .../acceso/pagelet_cambiar_email.php | 40 + .../acceso/pagelet_contenido_login.php | 42 + .../operaciones/acceso/pagelet_form_login.php | 46 + .../acceso/pagelet_recuperar_pass.php | 71 + .../acceso/recuperar_pass/default.css | 11 + .../acceso/recuperar_pass/default.twig | 149 + .../acceso/recuperar_pass/mail_recover.twig | 15 + .../recuperar_pass/pagelet_recuperar_pass.js | 81 + src/siu/operaciones/acceso/template.twig | 44 + src/siu/operaciones/acceso/vista.php | 85 + .../operaciones/acceso_admin/controlador.php | 74 + .../acceso_admin/form_login/default.css | 7 + .../acceso_admin/form_login/default.twig | 36 + .../form_login/pagelet_form_login.js | 12 + .../acceso_admin/pagelet_form_login.php | 51 + .../operaciones/acceso_admin/template.twig | 7 + src/siu/operaciones/acceso_admin/vista.php | 40 + .../confirm_doc_existente/default.css | 0 .../confirm_doc_existente/default.twig | 36 + .../pagelet_confirm_doc_existente.js | 8 + .../alta_usuario/contenido_alta/default.css | 0 .../alta_usuario/contenido_alta/default.twig | 8 + .../contenido_alta/pagelet_contenido_alta.js | 8 + .../operaciones/alta_usuario/controlador.php | 449 + .../alta_usuario/crear_usuario/default.css | 55 + .../alta_usuario/crear_usuario/default.twig | 151 + .../crear_usuario/form_crear_usuario.php | 468 + .../crear_usuario/mail_crear_usuario.twig | 22 + .../crear_usuario/pagelet_crear_usuario.js | 602 + .../pagelet_confirm_doc_existente.php | 80 + .../alta_usuario/pagelet_contenido_alta.php | 25 + .../alta_usuario/pagelet_crear_usuario.php | 142 + .../operaciones/alta_usuario/template.twig | 17 + src/siu/operaciones/alta_usuario/vista.php | 48 + .../asociar_usuario/default.css | 3 + .../asociar_usuario/default.twig | 22 + .../asociar_usuario/form_asociar_usuario.php | 64 + .../asociar_usuario/mail_crear_usuario.twig | 15 + .../asociar_usuario/pagelet_crear_usuario.js | 128 + .../asociar_usuario_se/contenido/default.css | 0 .../asociar_usuario_se/contenido/default.twig | 9 + .../contenido/pagelet_contenido.js | 9 + .../asociar_usuario_se/controlador.php | 119 + .../pagelet_asociar_usuario.php | 47 + .../asociar_usuario_se/pagelet_contenido.php | 30 + .../asociar_usuario_se/template.twig | 18 + .../operaciones/asociar_usuario_se/vista.php | 34 + .../ayuda_menu/confirmacion/default.css | 5 + .../ayuda_menu/confirmacion/default.twig | 15 + .../ayuda_menu/contacto/default.css | 48 + .../ayuda_menu/contacto/default.twig | 75 + .../ayuda_menu/contacto/form_contacto.php | 167 + .../ayuda_menu/contacto/mail_contacto.twig | 17 + .../ayuda_menu/contacto/pagelet_contacto.js | 147 + .../operaciones/ayuda_menu/controlador.php | 143 + .../ayuda_menu/pagelet_confirmacion.php | 21 + .../ayuda_menu/pagelet_contacto.php | 92 + src/siu/operaciones/ayuda_menu/template.twig | 4 + src/siu/operaciones/ayuda_menu/vista.php | 27 + .../censo/_comun/pagelet_con_edicion.php | 31 + .../selector_colegio/selector_colegio.twig | 39 + .../_comun/selector_localidad/form_cp.php | 35 + .../selector_localidad/form_localidad.php | 76 + .../selector_localidad/selector_cp.twig | 18 + .../selector_localidad.twig | 36 + .../selector_titulo_sec.twig | 27 + .../censo/actuacion_docente/default.css | 5 + .../censo/actuacion_docente/default.twig | 91 + .../form_actuacion_docente.php | 131 + .../pagelet_actuacion_docente.js | 24 + .../censo/actuacion_profesional/default.css | 5 + .../censo/actuacion_profesional/default.twig | 90 + .../form_actuacion_profesional.php | 130 + .../pagelet_actuacion_profesional.js | 23 + src/siu/operaciones/censo/controlador.php | 1013 + .../censo/datos_adicionales/default.twig | 122 + .../form_datos_adicionales.php | 101 + .../pagelet_datos_adicionales.js | 79 + .../censo/datos_estudios/default.css | 6 + .../censo/datos_estudios/default.twig | 112 + .../datos_estudios/form_datos_estudios.php | 209 + .../datos_estudios/pagelet_datos_estudios.js | 206 + .../censo/datos_familiares/default.css | 7 + .../censo/datos_familiares/default.twig | 112 + .../form_datos_familiares.php | 240 + .../pagelet_datos_familiares.js | 140 + .../censo/datos_laborales/default.css | 7 + .../censo/datos_laborales/default.twig | 69 + .../datos_laborales/form_datos_laborales.php | 124 + .../pagelet_datos_laborales.js | 104 + .../censo/datos_personales/default.css | 3 + .../censo/datos_personales/default.twig | 178 + .../form_datos_personales.php | 398 + .../pagelet_datos_personales.js | 413 + .../censo/datos_principales/default.css | 7 + .../censo/datos_principales/default.twig | 177 + .../form_datos_principales.php | 650 + .../pagelet_datos_principales.js | 482 + .../operaciones/censo/datos_salud/default.css | 0 .../censo/datos_salud/default.twig | 46 + .../censo/datos_salud/form_datos_salud.php | 48 + .../censo/datos_salud/pagelet_datos_salud.js | 55 + .../operaciones/censo/deportes/default.twig | 68 + .../censo/deportes/form_deportes.php | 158 + .../censo/deportes/pagelet_deportes.js | 77 + .../censo/discapacidad/default.css | 24 + .../censo/discapacidad/default.twig | 173 + .../censo/discapacidad/form_discapacidad.php | 524 + .../discapacidad/pagelet_discapacidad.js | 374 + .../censo/documentacion/default.css | 38 + .../censo/documentacion/default.twig | 82 + .../documentacion/pagelet_documentacion.js | 30 + .../operaciones/censo/finalizado/default.css | 3 + .../operaciones/censo/finalizado/default.twig | 38 + .../censo/financiamiento/default.twig | 94 + .../financiamiento/form_financiamiento.php | 240 + .../financiamiento/pagelet_financiamiento.js | 108 + .../censo/formacion_acad/default.css | 5 + .../censo/formacion_acad/default.twig | 100 + .../formacion_acad/form_formacion_acad.php | 166 + .../formacion_acad/pagelet_formacion_acad.js | 25 + .../operaciones/censo/idiomas/default.twig | 53 + .../censo/idiomas/form_idiomas.php | 105 + .../censo/idiomas/pagelet_idiomas.js | 75 + .../operaciones/censo/lista_forms/default.css | 13 + .../censo/lista_forms/default.twig | 24 + .../censo/lista_forms/pagelet_lista_forms.js | 8 + .../censo/pagelet_actuacion_docente.php | 75 + .../censo/pagelet_actuacion_profesional.php | 80 + .../censo/pagelet_datos_adicionales.php | 76 + .../censo/pagelet_datos_estudios.php | 112 + .../censo/pagelet_datos_familiares.php | 72 + .../censo/pagelet_datos_laborales.php | 73 + .../censo/pagelet_datos_personales.php | 126 + .../censo/pagelet_datos_principales.php | 177 + .../operaciones/censo/pagelet_datos_salud.php | 72 + .../operaciones/censo/pagelet_deportes.php | 72 + .../censo/pagelet_discapacidad.php | 72 + .../censo/pagelet_documentacion.php | 148 + .../operaciones/censo/pagelet_finalizado.php | 31 + .../censo/pagelet_financiamiento.php | 72 + .../censo/pagelet_formacion_acad.php | 80 + src/siu/operaciones/censo/pagelet_idiomas.php | 72 + .../operaciones/censo/pagelet_lista_forms.php | 53 + .../operaciones/censo/pagelet_propuesta.php | 81 + .../operaciones/censo/pagelet_tecnologia.php | 72 + .../censo/pagelet_turno_presentacion.php | 98 + .../operaciones/censo/propuesta/default.css | 14 + .../operaciones/censo/propuesta/default.twig | 76 + .../censo/propuesta/form_propuesta.php | 99 + .../censo/propuesta/pagelet_propuesta.js | 248 + .../censo/propuesta/selector_propuesta.twig | 29 + .../operaciones/censo/tecnologia/default.twig | 58 + .../censo/tecnologia/form_tecnologia.php | 119 + .../censo/tecnologia/pagelet_tecnologia.js | 60 + src/siu/operaciones/censo/template.twig | 50 + .../censo/template_finalizado.twig | 15 + .../censo/turno_presentacion/default.css | 20 + .../censo/turno_presentacion/default.twig | 96 + .../censo/turno_presentacion/form_turno.php | 54 + .../pagelet_turno_presentacion.js | 71 + src/siu/operaciones/censo/vista.php | 223 + .../operaciones/censo/vista_finalizado.php | 25 + .../config_form/configuracion/default.css | 8 + .../config_form/configuracion/default.twig | 48 + .../configuracion/form_configuracion.php | 178 + .../configuracion/form_tipos_propuesta.php | 35 + .../configuracion/pagelet_configuracion.js | 183 + .../operaciones/config_form/controlador.php | 151 + .../config_form/pagelet_configuracion.php | 84 + src/siu/operaciones/config_form/template.twig | 7 + src/siu/operaciones/config_form/vista.php | 39 + .../copiar_config_form/controlador.php | 72 + .../copiar_config_form/copia/default.css | 7 + .../copiar_config_form/copia/default.twig | 22 + .../copiar_config_form/copia/form_copia.php | 42 + .../copiar_config_form/copia/pagelet_copia.js | 57 + .../copiar_config_form/pagelet_copia.php | 50 + .../copiar_config_form/template.twig | 7 + .../operaciones/copiar_config_form/vista.php | 39 + .../importar_config_form/controlador.php | 105 + .../importar_config_form/import/default.css | 7 + .../importar_config_form/import/default.twig | 28 + .../import/form_import.php | 61 + .../import/pagelet_import.js | 10 + .../importar_config_form/pagelet_import.php | 57 + .../importar_config_form/template.twig | 7 + .../importar_config_form/vista.php | 39 + .../operaciones/limpiar_cache/controlador.php | 65 + .../limpiar_cache/limpieza/default.css | 0 .../limpiar_cache/limpieza/default.twig | 23 + .../limpieza/pagelet_limpieza.js | 19 + .../limpiar_cache/pagelet_limpieza.php | 41 + .../operaciones/limpiar_cache/template.twig | 7 + src/siu/operaciones/limpiar_cache/vista.php | 39 + src/siu/operaciones/logger/controlador.php | 67 + .../operaciones/logger/info_log/default.css | 73 + .../operaciones/logger/info_log/default.twig | 15 + .../logger/info_log/pagelet_info_log.js | 37 + .../operaciones/logger/lista_logs/default.css | 3 + .../logger/lista_logs/default.twig | 16 + .../logger/lista_logs/pagelet_lista_logs.js | 12 + .../operaciones/logger/pagelet_info_log.php | 39 + .../operaciones/logger/pagelet_lista_logs.php | 43 + src/siu/operaciones/logger/template.twig | 7 + src/siu/operaciones/logger/vista.php | 25 + .../pagina_error/contenido/default.css | 0 .../pagina_error/contenido/default.twig | 12 + .../contenido/pagelet_contenido.js | 8 + .../operaciones/pagina_error/controlador.php | 25 + .../pagina_error/pagelet_contenido.php | 32 + .../operaciones/pagina_error/template.twig | 7 + src/siu/operaciones/pagina_error/vista.php | 32 + .../perfil_datos/config/default.css | 16 + .../perfil_datos/config/default.twig | 99 + .../perfil_datos/config/form_config_pd.php | 106 + .../perfil_datos/config/pagelet_config.js | 21 + .../operaciones/perfil_datos/controlador.php | 51 + src/siu/operaciones/perfil_datos/modelo.php | 161 + .../perfil_datos/pagelet_config.php | 87 + .../perfil_datos/pagelet_resultado.php | 25 + .../perfil_datos/resultado/default.css | 56 + .../perfil_datos/resultado/default.twig | 46 + .../resultado/pagelet_resultado.js | 9 + .../operaciones/perfil_datos/template.twig | 22 + src/siu/operaciones/perfil_datos/vista.php | 43 + .../test_cnx/configuracion/default.css | 0 .../test_cnx/configuracion/default.twig | 38 + .../configuracion/pagelet_configuracion.js | 8 + .../test_cnx/contenido/default.css | 6 + .../test_cnx/contenido/default.twig | 17 + .../test_cnx/contenido/pagelet_contenido.js | 8 + src/siu/operaciones/test_cnx/controlador.php | 31 + src/siu/operaciones/test_cnx/modelo.php | 98 + .../test_cnx/pagelet_configuracion.php | 26 + .../test_cnx/pagelet_contenido.php | 26 + src/siu/operaciones/test_cnx/template.twig | 22 + src/siu/operaciones/test_cnx/vista.php | 36 + .../test_mail/configuracion/default.css | 0 .../test_mail/configuracion/default.twig | 25 + .../configuracion/pagelet_configuracion.js | 8 + src/siu/operaciones/test_mail/controlador.php | 84 + .../test_mail/form_test/default.twig | 32 + .../test_mail/form_test/form_prueba.php | 34 + .../test_mail/form_test/mail_prueba.twig | 11 + .../test_mail/form_test/pagelet_form_test.js | 9 + .../test_mail/pagelet_configuracion.php | 35 + .../test_mail/pagelet_form_test.php | 58 + src/siu/operaciones/test_mail/template.twig | 7 + src/siu/operaciones/test_mail/vista.php | 34 + src/siu/preinscripcion.php | 153 + .../comandos/comando_preinscripcion.php | 15 + .../consola/comandos/compilar_recursos.php | 231 + src/siu/util/consola/comandos/user_admin.php | 91 + src/siu/util/consola/gadmin.php | 37 + src/siu/util/consola/limpiar_cache.php | 87 + src/siu/util/consola/run.php | 8 + src/siu/www/css/bootstrap-responsive.css | 815 + src/siu/www/css/bootstrap.css | 4983 ++++ src/siu/www/css/coda-slider.css | 55 + src/siu/www/css/dev_bar.css | 121 + src/siu/www/css/facebox.css | 80 + src/siu/www/css/jTPS.css | 96 + src/siu/www/css/jquery-ui.css | 1312 ++ src/siu/www/css/media_querys.css | 59 + src/siu/www/css/preinscripcion-responsive.css | 53 + src/siu/www/css/preinscripcion.css | 457 + src/siu/www/img/ajax-loader.gif | Bin 0 -> 1849 bytes src/siu/www/img/arrow_down.png | Bin 0 -> 459 bytes src/siu/www/img/arrow_up.png | Bin 0 -> 487 bytes src/siu/www/img/bg.gif | Bin 0 -> 315 bytes src/siu/www/img/bk_censo_menu.png | Bin 0 -> 156 bytes src/siu/www/img/catalogo.png | Bin 0 -> 361 bytes src/siu/www/img/close-dev.png | Bin 0 -> 450 bytes src/siu/www/img/closelabel.png | Bin 0 -> 168 bytes src/siu/www/img/colapsado-azul.png | Bin 0 -> 962 bytes src/siu/www/img/colapsado-negro.png | Bin 0 -> 970 bytes src/siu/www/img/colapsado.gif | Bin 0 -> 306 bytes src/siu/www/img/comprobante_cursadas.png | Bin 0 -> 117339 bytes src/siu/www/img/controles.png | Bin 0 -> 496 bytes src/siu/www/img/cross.png | Bin 0 -> 406 bytes src/siu/www/img/descolapsado-azul.png | Bin 0 -> 959 bytes src/siu/www/img/descolapsado-negro.png | Bin 0 -> 959 bytes src/siu/www/img/error-dev.png | Bin 0 -> 752 bytes src/siu/www/img/favicon.ico | Bin 0 -> 1086 bytes src/siu/www/img/flechitas_link.png | Bin 0 -> 180 bytes .../www/img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes src/siu/www/img/glyphicons-halflings.png | Bin 0 -> 13826 bytes src/siu/www/img/hori.png | Bin 0 -> 1596 bytes src/siu/www/img/icono-advertencia.png | Bin 0 -> 1179 bytes src/siu/www/img/icono-ayuda.png | Bin 0 -> 1496 bytes src/siu/www/img/icono-error.png | Bin 0 -> 2009 bytes src/siu/www/img/icono-exito.png | Bin 0 -> 1863 bytes src/siu/www/img/icono-info.png | Bin 0 -> 2112 bytes src/siu/www/img/icono-info12x12.png | Bin 0 -> 653 bytes src/siu/www/img/iconos/g3w2-icon-excel.png | Bin 0 -> 394 bytes src/siu/www/img/iconos/g3w2-icon-group.png | Bin 0 -> 483 bytes src/siu/www/img/iconos/g3w2-icon-pdf.png | Bin 0 -> 535 bytes src/siu/www/img/iconos/warning_icon.png | Bin 0 -> 3669 bytes src/siu/www/img/img_recurso.png | Bin 0 -> 2215 bytes src/siu/www/img/indicador-izq-gris.png | Bin 0 -> 995 bytes src/siu/www/img/item_dcensal.png | Bin 0 -> 441 bytes src/siu/www/img/item_dcensal_ok.png | Bin 0 -> 764 bytes src/siu/www/img/jTPS/bullet_arrow_down.png | Bin 0 -> 201 bytes src/siu/www/img/jTPS/bullet_arrow_up.png | Bin 0 -> 201 bytes src/siu/www/img/jTPS/eeGrad2.gif | Bin 0 -> 92 bytes src/siu/www/img/jTPS/f0f2f5grad.gif | Bin 0 -> 93 bytes src/siu/www/img/loading.gif | Bin 0 -> 2767 bytes src/siu/www/img/login/facebook.jpg | Bin 0 -> 4277 bytes src/siu/www/img/login/google.jpg | Bin 0 -> 5948 bytes src/siu/www/img/login/oauth_1.0.png | Bin 0 -> 20144 bytes src/siu/www/img/login/oauth_2.0.jpg | Bin 0 -> 2955 bytes src/siu/www/img/login/openid.png | Bin 0 -> 3639 bytes src/siu/www/img/login/yahoo.jpg | Bin 0 -> 4713 bytes src/siu/www/img/logo-celular.png | Bin 0 -> 1160 bytes src/siu/www/img/logo-guarani.png | Bin 0 -> 10469 bytes src/siu/www/img/logo-transparente.png | Bin 0 -> 9580 bytes src/siu/www/img/logo.png | Bin 0 -> 6963 bytes src/siu/www/img/logo2.png | Bin 0 -> 4368 bytes src/siu/www/img/logo_ministerio.jpg | Bin 0 -> 8040 bytes src/siu/www/img/logo_pers.jpg | Bin 0 -> 10174 bytes src/siu/www/img/logo_pers.png | Bin 0 -> 78541 bytes src/siu/www/img/memory.png | Bin 0 -> 775 bytes src/siu/www/img/navigator.png | Bin 0 -> 412 bytes src/siu/www/img/newwindow.png | Bin 0 -> 330 bytes src/siu/www/img/nro_de_tramite_dni.jpeg | Bin 0 -> 8428 bytes src/siu/www/img/php.png | Bin 0 -> 653 bytes src/siu/www/img/seleccion.png | Bin 0 -> 1467 bytes src/siu/www/img/sprite.png | Bin 0 -> 7186 bytes src/siu/www/img/squares.png | Bin 0 -> 3040 bytes src/siu/www/img/time.png | Bin 0 -> 3212 bytes src/siu/www/img/tray-active.gif | Bin 0 -> 269 bytes src/siu/www/img/tray-hover.gif | Bin 0 -> 269 bytes src/siu/www/img/tray-separator.gif | Bin 0 -> 52 bytes src/siu/www/img/tray.gif | Bin 0 -> 2143 bytes src/siu/www/img/triangle-down.png | Bin 0 -> 191 bytes src/siu/www/img/triangle-up.png | Bin 0 -> 190 bytes .../img/ui/ui-bg_glass_75_d0e5f5_1x400.png | Bin 0 -> 394 bytes .../img/ui/ui-bg_glass_85_dfeffc_1x400.png | Bin 0 -> 399 bytes .../img/ui/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 390 bytes .../ui/ui-bg_gloss-wave_55_5c9ccc_500x100.png | Bin 0 -> 5882 bytes .../ui/ui-bg_inset-hard_100_f5f8f9_1x100.png | Bin 0 -> 391 bytes .../ui/ui-bg_inset-hard_100_fcfdfd_1x100.png | Bin 0 -> 350 bytes .../www/img/ui/ui-icons_217bc0_256x240.png | Bin 0 -> 4618 bytes .../www/img/ui/ui-icons_2e83ff_256x240.png | Bin 0 -> 4618 bytes .../www/img/ui/ui-icons_469bdd_256x240.png | Bin 0 -> 4618 bytes .../www/img/ui/ui-icons_6da8d5_256x240.png | Bin 0 -> 4618 bytes .../www/img/ui/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4618 bytes .../www/img/ui/ui-icons_d8e7f3_256x240.png | Bin 0 -> 4618 bytes .../www/img/ui/ui-icons_f9bd01_256x240.png | Bin 0 -> 4618 bytes src/siu/www/img/white_arrow.png | Bin 0 -> 2085 bytes src/siu/www/index.php | 11 + .../selector_colegio/selector_colegio.js | 133 + .../_comun/selector_localidad/selector_cp.js | 54 + .../selector_localidad/selector_localidad.js | 272 + .../selector_titulo_sec.js | 85 + src/siu/www/js/bootstrap.js | 1825 ++ src/siu/www/js/facebox.js | 329 + src/siu/www/js/html5.js | 4 + src/siu/www/js/jTPS.js | 346 + src/siu/www/js/jquery-ui.js | 18730 ++++++++++++++++ src/siu/www/js/jqueryui.extra.js | 54 + src/siu/www/js/plugin_autosave.js | 75 + src/siu/www/js/preinscripcion.js | 328 + src/siu/www/rs.php | 10 + version.ini | 2 + 581 files changed, 73927 insertions(+) create mode 100644 BD/conversion/mig_3.08_a_3.09.sql create mode 100644 BD/conversion/mig_3.09_a_3.10.sql create mode 100644 BD/conversion/mig_3.10_a_3.11.sql create mode 100644 BD/conversion/mig_3.11.0_a_3.11.1.sql create mode 100644 BD/conversion/mig_3.11_a_3.12.sql create mode 100644 BD/conversion/mig_3.12.0_a_3.13.0.sql create mode 100644 BD/conversion/mig_3.13.0_a_3.21.0.sql create mode 100644 BD/conversion/mig_3.21.0_a_3.21.1.sql create mode 100644 BD/conversion/mig_3.21.0_a_3.22.0.sql create mode 100644 BD/conversion/mig_3.21.1_a_3.21.2.sql create mode 100644 BD/conversion/mig_3.21.2_a_3.21.3.sql create mode 100644 BD/creacion/armar_script_postgresql.bat create mode 100644 BD/creacion/armar_script_postgresql.sh create mode 100644 BD/creacion/creacion_preinscripcion3_postgresql.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_aud_lenguaje_labial.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_aud_lenguaje_senias.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_aud_req_aro_magnetico.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_aud_req_interprete_lengua_senias.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_aud_req_otros_apoyos.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_condicion_discapacidad.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_disc_auditiva.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_disc_cond_psicosocial.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_disc_motora.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_disc_otra.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_disc_visual.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_es_mayor_25_sin_secundario.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_estado.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_mot_req_apoyo_aula.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_mot_req_otros_apoyos.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_otra_req_apoyo_vida_diaria.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_propuestas_estado.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_psi_req_otros_apoyos.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_tiene_cud.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_validado_con_renaper.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_vis_req_archivo_audio.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_vis_req_otros_apoyos.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_vis_req_texto_braile.sql create mode 100644 BD/sql/ck/ck_sga_preinscripcion_vis_req_texto_digital.sql create mode 100644 BD/sql/ck/ck_sga_requisitos_digitales_estado.sql create mode 100644 BD/sql/datos/00_sga_propuestas_tipos.sql create mode 100644 BD/sql/datos/10_sga_campos_form.sql create mode 100644 BD/sql/datos/20_sga_campos_conf.sql create mode 100644 BD/sql/datos/90_app_versiones_base.sql create mode 100644 BD/sql/fks/fks_sga_actuacion_doc.sql create mode 100644 BD/sql/fks/fks_sga_actuacion_prof.sql create mode 100644 BD/sql/fks/fks_sga_campos_conf.sql create mode 100644 BD/sql/fks/fks_sga_formacion_acad.sql create mode 100644 BD/sql/fks/fks_sga_preinscripcion_propuestas.sql create mode 100644 BD/sql/fks/fks_sga_requisitos_digitales.sql create mode 100644 BD/sql/funciones/f_limpiar_acentos.sql create mode 100644 BD/sql/indices/id__sga_preinscripcion__apellido_nombres_fecha_nac.sql create mode 100644 BD/sql/indices/id__sga_preinscripcion__codigo_validacion.sql create mode 100644 BD/sql/indices/iu__admin_usuarios__usuario.sql create mode 100644 BD/sql/indices/iu__sga_preinscripcion__usuario.sql create mode 100644 BD/sql/lenguajes/language_plpgsql.sql create mode 100644 BD/sql/tablas/admin_usuarios.sql create mode 100644 BD/sql/tablas/app_versiones_base.sql create mode 100644 BD/sql/tablas/cfg_perfiles_datos.sql create mode 100644 BD/sql/tablas/sga_actuacion_doc.sql create mode 100644 BD/sql/tablas/sga_actuacion_prof.sql create mode 100644 BD/sql/tablas/sga_campos_conf.sql create mode 100644 BD/sql/tablas/sga_campos_form.sql create mode 100644 BD/sql/tablas/sga_formacion_acad.sql create mode 100644 BD/sql/tablas/sga_preinscripcion.sql create mode 100644 BD/sql/tablas/sga_preinscripcion_propuestas.sql create mode 100644 BD/sql/tablas/sga_propuestas_tipos.sql create mode 100644 BD/sql/tablas/sga_requisitos_digitales.sql create mode 100644 bin/preinscripcion create mode 100644 bin/preinscripcion.bat create mode 100644 bin/yuicompressor-2.4.2.jar create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 db/migrations/20200819191727_es_mayor25_sin_secundario.php create mode 100644 instalacion/alias_template.conf create mode 100644 instalacion/arai_documentos_template.ini create mode 100644 instalacion/config_template.php create mode 100644 instalacion/login_template.php create mode 100644 instalacion/rewrite.conf create mode 100644 instalacion/servicios_web_config_template.php create mode 100644 phinx.php create mode 100644 src/pers/composer.json create mode 100644 src/pers/ejemplo/mensajes/mensajes.es.php create mode 100644 src/pers/ejemplo/modelo/manejador_datos.php create mode 100644 src/pers/ejemplo/operaciones/_comun/generador_pdf.php create mode 100644 src/pers/ejemplo/operaciones/_comun/templates/header.twig create mode 100644 src/pers/ejemplo/operaciones/censo/idiomas/default.css create mode 100644 src/pers/ejemplo/operaciones/censo/idiomas/default.twig create mode 100644 src/pers/ejemplo/operaciones/censo/idiomas/form_idiomas.php create mode 100644 src/pers/ejemplo/www/css/preinscripcion.css create mode 100644 src/pers/ejemplo/www/img/favicon.ico create mode 100644 src/pers/ejemplo/www/img/logo.png create mode 100644 src/siu/Install.php create mode 100644 src/siu/bootstrap.php create mode 100644 src/siu/conf/acceso/acc_admin.xml create mode 100644 src/siu/conf/acceso/acc_alumno.xml create mode 100644 src/siu/conf/acceso/acc_anonimo_admin.xml create mode 100644 src/siu/conf/acceso/acc_anonimo_alumno.xml create mode 100644 src/siu/errores/error_preinscripcion.php create mode 100644 src/siu/errores/error_preinscripcion_alumno_g3.php create mode 100644 src/siu/errores/error_preinscripcion_clave.php create mode 100644 src/siu/errores/error_preinscripcion_cnx_bd.php create mode 100644 src/siu/errores/error_preinscripcion_login.php create mode 100644 src/siu/errores/error_preinscripcion_login_externo.php create mode 100644 src/siu/errores/error_preinscripcion_mail_no_validado.php create mode 100644 src/siu/errores/error_preinscripcion_persona_g3.php create mode 100644 src/siu/errores/error_preinscripcion_seguridad.php create mode 100644 src/siu/errores/error_preinscripcion_token.php create mode 100644 src/siu/errores/error_preinscripcion_usuario.php create mode 100644 src/siu/extension_kernel/chulupi_logger_rdi.php create mode 100644 src/siu/extension_kernel/controlador_preinscripcion.php create mode 100644 src/siu/extension_kernel/eventos_aplicacion.php create mode 100644 src/siu/extension_kernel/log.php create mode 100644 src/siu/extension_kernel/login.php create mode 100644 src/siu/extension_kernel/login_admin.php create mode 100644 src/siu/extension_kernel/pagina.php create mode 100644 src/siu/extension_kernel/persona.php create mode 100644 src/siu/extension_kernel/persona_anonima.php create mode 100644 src/siu/extension_kernel/proyecto.php create mode 100644 src/siu/extension_kernel/servicios_externos_preinscripcion.php create mode 100644 src/siu/extension_kernel/vista_preinscripcion.php create mode 100644 src/siu/func_util.php create mode 100644 src/siu/mensajes/mensajes.es.php create mode 100644 src/siu/modelo/admin.php create mode 100644 src/siu/modelo/autenticacion/auth_admin.php create mode 100644 src/siu/modelo/autenticacion/auth_con_sesion.php create mode 100644 src/siu/modelo/autenticacion/auth_cuenta_ext.php create mode 100644 src/siu/modelo/autenticacion/auth_form.php create mode 100644 src/siu/modelo/autenticacion/auth_form_documento.php create mode 100644 src/siu/modelo/autenticacion/auth_token.php create mode 100644 src/siu/modelo/clienteRDI.php create mode 100644 src/siu/modelo/comunes.php create mode 100644 src/siu/modelo/consultas.php create mode 100644 src/siu/modelo/g3/consultas_bd/_consultas_bd.php create mode 100644 src/siu/modelo/g3/consultas_bd/abandono_estudio.php create mode 100644 src/siu/modelo/g3/consultas_bd/cobertura_salud.php create mode 100644 src/siu/modelo/g3/consultas_bd/cod_postales.php create mode 100644 src/siu/modelo/g3/consultas_bd/colegios.php create mode 100644 src/siu/modelo/g3/consultas_bd/continentes.php create mode 100644 src/siu/modelo/g3/consultas_bd/dias_no_laborables.php create mode 100644 src/siu/modelo/g3/consultas_bd/discapacidades_dificultad.php create mode 100644 src/siu/modelo/g3/consultas_bd/dptos_partidos.php create mode 100644 src/siu/modelo/g3/consultas_bd/entes_emisores_ci.php create mode 100644 src/siu/modelo/g3/consultas_bd/entidad_g3.php create mode 100644 src/siu/modelo/g3/consultas_bd/extensiones.php create mode 100644 src/siu/modelo/g3/consultas_bd/identidad_genero.php create mode 100644 src/siu/modelo/g3/consultas_bd/localidades.php create mode 100644 src/siu/modelo/g3/consultas_bd/modalidades.php create mode 100644 src/siu/modelo/g3/consultas_bd/nacionalidades.php create mode 100644 src/siu/modelo/g3/consultas_bd/orientacion_vocacional.php create mode 100644 src/siu/modelo/g3/consultas_bd/paises.php create mode 100644 src/siu/modelo/g3/consultas_bd/parametros.php create mode 100644 src/siu/modelo/g3/consultas_bd/periodos.php create mode 100644 src/siu/modelo/g3/consultas_bd/personas.php create mode 100644 src/siu/modelo/g3/consultas_bd/propuestas.php create mode 100644 src/siu/modelo/g3/consultas_bd/provincias.php create mode 100644 src/siu/modelo/g3/consultas_bd/pueblos_originarios.php create mode 100644 src/siu/modelo/g3/consultas_bd/requisitos.php create mode 100644 src/siu/modelo/g3/consultas_bd/responsables_academicas.php create mode 100644 src/siu/modelo/g3/consultas_bd/tipos_allegados.php create mode 100644 src/siu/modelo/g3/consultas_bd/tipos_documentos.php create mode 100644 src/siu/modelo/g3/consultas_bd/tipos_documentos_pais.php create mode 100644 src/siu/modelo/g3/consultas_bd/tipos_vivienda.php create mode 100644 src/siu/modelo/g3/consultas_bd/titulos_secundario.php create mode 100644 src/siu/modelo/g3/consultas_bd/turnos.php create mode 100644 src/siu/modelo/g3/consultas_bd/turnos_cursada.php create mode 100644 src/siu/modelo/g3/consultas_bd/ubicaciones.php create mode 100644 src/siu/modelo/g3/g3.php create mode 100644 src/siu/modelo/g3/interface_colegios.php create mode 100644 src/siu/modelo/g3/interface_entidades_g3.php create mode 100644 src/siu/modelo/g3/interface_extensiones.php create mode 100644 src/siu/modelo/g3/interface_localidades.php create mode 100644 src/siu/modelo/g3/interface_paises.php create mode 100644 src/siu/modelo/g3/interface_parametros.php create mode 100644 src/siu/modelo/g3/interface_periodos.php create mode 100644 src/siu/modelo/g3/interface_personas.php create mode 100644 src/siu/modelo/g3/interface_propuestas.php create mode 100644 src/siu/modelo/g3/interface_requisitos.php create mode 100644 src/siu/modelo/g3/interface_responsables_academicas.php create mode 100644 src/siu/modelo/g3/interface_titulos_secundario.php create mode 100644 src/siu/modelo/g3/interface_turnos.php create mode 100644 src/siu/modelo/lib/abm.php create mode 100644 src/siu/modelo/lib/catalogo.php create mode 100644 src/siu/modelo/manejador_datos.php create mode 100644 src/siu/modelo/opciones.php create mode 100644 src/siu/modelo/periodo_de_inscripcion.php create mode 100644 src/siu/modelo/planes.php create mode 100644 src/siu/modelo/propuesta.php create mode 100644 src/siu/modelo/turnos.php create mode 100644 src/siu/modelo/usuario.php create mode 100644 src/siu/modelo/util.php create mode 100644 src/siu/modelo/ws_renaper.php create mode 100644 src/siu/operaciones/_comun/form.php create mode 100644 src/siu/operaciones/_comun/generador_pdf.php create mode 100644 src/siu/operaciones/_comun/pagelet_con_form.php create mode 100644 src/siu/operaciones/_comun/preinscripcion_PDF.php create mode 100644 src/siu/operaciones/_comun/preinscripcion_form.php create mode 100644 src/siu/operaciones/_comun/templates/footer.twig create mode 100644 src/siu/operaciones/_comun/templates/full.twig create mode 100644 src/siu/operaciones/_comun/templates/header.twig create mode 100644 src/siu/operaciones/_comun/templates/header_celular.twig create mode 100644 src/siu/operaciones/_comun/templates/header_tablet.twig create mode 100644 src/siu/operaciones/_comun/templates/pipe.twig create mode 100644 src/siu/operaciones/_comun/templates/res.twig create mode 100644 src/siu/operaciones/_comun/templates/vista_error.twig create mode 100644 src/siu/operaciones/_comun/util_formulario_preinscripcion.php create mode 100644 src/siu/operaciones/acceso/cambiar_email/default.twig create mode 100644 src/siu/operaciones/acceso/cambiar_email/pagelet_cambiar_email.js create mode 100644 src/siu/operaciones/acceso/contenido_login/default.css create mode 100644 src/siu/operaciones/acceso/contenido_login/default.twig create mode 100644 src/siu/operaciones/acceso/contenido_login/pagelet_contenido_login.js create mode 100644 src/siu/operaciones/acceso/controlador.php create mode 100644 src/siu/operaciones/acceso/form_login/default.css create mode 100644 src/siu/operaciones/acceso/form_login/default.twig create mode 100644 src/siu/operaciones/acceso/form_login/mail_crear_usuario.twig create mode 100644 src/siu/operaciones/acceso/form_login/pagelet_form_login.js create mode 100644 src/siu/operaciones/acceso/pagelet_cambiar_email.php create mode 100644 src/siu/operaciones/acceso/pagelet_contenido_login.php create mode 100644 src/siu/operaciones/acceso/pagelet_form_login.php create mode 100644 src/siu/operaciones/acceso/pagelet_recuperar_pass.php create mode 100644 src/siu/operaciones/acceso/recuperar_pass/default.css create mode 100644 src/siu/operaciones/acceso/recuperar_pass/default.twig create mode 100644 src/siu/operaciones/acceso/recuperar_pass/mail_recover.twig create mode 100644 src/siu/operaciones/acceso/recuperar_pass/pagelet_recuperar_pass.js create mode 100644 src/siu/operaciones/acceso/template.twig create mode 100644 src/siu/operaciones/acceso/vista.php create mode 100644 src/siu/operaciones/acceso_admin/controlador.php create mode 100644 src/siu/operaciones/acceso_admin/form_login/default.css create mode 100644 src/siu/operaciones/acceso_admin/form_login/default.twig create mode 100644 src/siu/operaciones/acceso_admin/form_login/pagelet_form_login.js create mode 100644 src/siu/operaciones/acceso_admin/pagelet_form_login.php create mode 100644 src/siu/operaciones/acceso_admin/template.twig create mode 100644 src/siu/operaciones/acceso_admin/vista.php create mode 100644 src/siu/operaciones/alta_usuario/confirm_doc_existente/default.css create mode 100644 src/siu/operaciones/alta_usuario/confirm_doc_existente/default.twig create mode 100644 src/siu/operaciones/alta_usuario/confirm_doc_existente/pagelet_confirm_doc_existente.js create mode 100644 src/siu/operaciones/alta_usuario/contenido_alta/default.css create mode 100644 src/siu/operaciones/alta_usuario/contenido_alta/default.twig create mode 100644 src/siu/operaciones/alta_usuario/contenido_alta/pagelet_contenido_alta.js create mode 100644 src/siu/operaciones/alta_usuario/controlador.php create mode 100644 src/siu/operaciones/alta_usuario/crear_usuario/default.css create mode 100644 src/siu/operaciones/alta_usuario/crear_usuario/default.twig create mode 100644 src/siu/operaciones/alta_usuario/crear_usuario/form_crear_usuario.php create mode 100644 src/siu/operaciones/alta_usuario/crear_usuario/mail_crear_usuario.twig create mode 100644 src/siu/operaciones/alta_usuario/crear_usuario/pagelet_crear_usuario.js create mode 100644 src/siu/operaciones/alta_usuario/pagelet_confirm_doc_existente.php create mode 100644 src/siu/operaciones/alta_usuario/pagelet_contenido_alta.php create mode 100644 src/siu/operaciones/alta_usuario/pagelet_crear_usuario.php create mode 100644 src/siu/operaciones/alta_usuario/template.twig create mode 100644 src/siu/operaciones/alta_usuario/vista.php create mode 100644 src/siu/operaciones/asociar_usuario_se/asociar_usuario/default.css create mode 100644 src/siu/operaciones/asociar_usuario_se/asociar_usuario/default.twig create mode 100644 src/siu/operaciones/asociar_usuario_se/asociar_usuario/form_asociar_usuario.php create mode 100644 src/siu/operaciones/asociar_usuario_se/asociar_usuario/mail_crear_usuario.twig create mode 100644 src/siu/operaciones/asociar_usuario_se/asociar_usuario/pagelet_crear_usuario.js create mode 100644 src/siu/operaciones/asociar_usuario_se/contenido/default.css create mode 100644 src/siu/operaciones/asociar_usuario_se/contenido/default.twig create mode 100644 src/siu/operaciones/asociar_usuario_se/contenido/pagelet_contenido.js create mode 100644 src/siu/operaciones/asociar_usuario_se/controlador.php create mode 100644 src/siu/operaciones/asociar_usuario_se/pagelet_asociar_usuario.php create mode 100644 src/siu/operaciones/asociar_usuario_se/pagelet_contenido.php create mode 100644 src/siu/operaciones/asociar_usuario_se/template.twig create mode 100644 src/siu/operaciones/asociar_usuario_se/vista.php create mode 100644 src/siu/operaciones/ayuda_menu/confirmacion/default.css create mode 100644 src/siu/operaciones/ayuda_menu/confirmacion/default.twig create mode 100644 src/siu/operaciones/ayuda_menu/contacto/default.css create mode 100644 src/siu/operaciones/ayuda_menu/contacto/default.twig create mode 100644 src/siu/operaciones/ayuda_menu/contacto/form_contacto.php create mode 100644 src/siu/operaciones/ayuda_menu/contacto/mail_contacto.twig create mode 100644 src/siu/operaciones/ayuda_menu/contacto/pagelet_contacto.js create mode 100644 src/siu/operaciones/ayuda_menu/controlador.php create mode 100644 src/siu/operaciones/ayuda_menu/pagelet_confirmacion.php create mode 100644 src/siu/operaciones/ayuda_menu/pagelet_contacto.php create mode 100644 src/siu/operaciones/ayuda_menu/template.twig create mode 100644 src/siu/operaciones/ayuda_menu/vista.php create mode 100644 src/siu/operaciones/censo/_comun/pagelet_con_edicion.php create mode 100644 src/siu/operaciones/censo/_comun/selector_colegio/selector_colegio.twig create mode 100644 src/siu/operaciones/censo/_comun/selector_localidad/form_cp.php create mode 100644 src/siu/operaciones/censo/_comun/selector_localidad/form_localidad.php create mode 100644 src/siu/operaciones/censo/_comun/selector_localidad/selector_cp.twig create mode 100644 src/siu/operaciones/censo/_comun/selector_localidad/selector_localidad.twig create mode 100644 src/siu/operaciones/censo/_comun/selector_titulo_sec/selector_titulo_sec.twig create mode 100644 src/siu/operaciones/censo/actuacion_docente/default.css create mode 100644 src/siu/operaciones/censo/actuacion_docente/default.twig create mode 100644 src/siu/operaciones/censo/actuacion_docente/form_actuacion_docente.php create mode 100644 src/siu/operaciones/censo/actuacion_docente/pagelet_actuacion_docente.js create mode 100644 src/siu/operaciones/censo/actuacion_profesional/default.css create mode 100644 src/siu/operaciones/censo/actuacion_profesional/default.twig create mode 100644 src/siu/operaciones/censo/actuacion_profesional/form_actuacion_profesional.php create mode 100644 src/siu/operaciones/censo/actuacion_profesional/pagelet_actuacion_profesional.js create mode 100644 src/siu/operaciones/censo/controlador.php create mode 100644 src/siu/operaciones/censo/datos_adicionales/default.twig create mode 100644 src/siu/operaciones/censo/datos_adicionales/form_datos_adicionales.php create mode 100644 src/siu/operaciones/censo/datos_adicionales/pagelet_datos_adicionales.js create mode 100644 src/siu/operaciones/censo/datos_estudios/default.css create mode 100644 src/siu/operaciones/censo/datos_estudios/default.twig create mode 100644 src/siu/operaciones/censo/datos_estudios/form_datos_estudios.php create mode 100644 src/siu/operaciones/censo/datos_estudios/pagelet_datos_estudios.js create mode 100644 src/siu/operaciones/censo/datos_familiares/default.css create mode 100644 src/siu/operaciones/censo/datos_familiares/default.twig create mode 100644 src/siu/operaciones/censo/datos_familiares/form_datos_familiares.php create mode 100644 src/siu/operaciones/censo/datos_familiares/pagelet_datos_familiares.js create mode 100644 src/siu/operaciones/censo/datos_laborales/default.css create mode 100644 src/siu/operaciones/censo/datos_laborales/default.twig create mode 100644 src/siu/operaciones/censo/datos_laborales/form_datos_laborales.php create mode 100644 src/siu/operaciones/censo/datos_laborales/pagelet_datos_laborales.js create mode 100644 src/siu/operaciones/censo/datos_personales/default.css create mode 100644 src/siu/operaciones/censo/datos_personales/default.twig create mode 100644 src/siu/operaciones/censo/datos_personales/form_datos_personales.php create mode 100644 src/siu/operaciones/censo/datos_personales/pagelet_datos_personales.js create mode 100644 src/siu/operaciones/censo/datos_principales/default.css create mode 100644 src/siu/operaciones/censo/datos_principales/default.twig create mode 100644 src/siu/operaciones/censo/datos_principales/form_datos_principales.php create mode 100644 src/siu/operaciones/censo/datos_principales/pagelet_datos_principales.js create mode 100644 src/siu/operaciones/censo/datos_salud/default.css create mode 100644 src/siu/operaciones/censo/datos_salud/default.twig create mode 100644 src/siu/operaciones/censo/datos_salud/form_datos_salud.php create mode 100644 src/siu/operaciones/censo/datos_salud/pagelet_datos_salud.js create mode 100644 src/siu/operaciones/censo/deportes/default.twig create mode 100644 src/siu/operaciones/censo/deportes/form_deportes.php create mode 100644 src/siu/operaciones/censo/deportes/pagelet_deportes.js create mode 100644 src/siu/operaciones/censo/discapacidad/default.css create mode 100644 src/siu/operaciones/censo/discapacidad/default.twig create mode 100644 src/siu/operaciones/censo/discapacidad/form_discapacidad.php create mode 100644 src/siu/operaciones/censo/discapacidad/pagelet_discapacidad.js create mode 100644 src/siu/operaciones/censo/documentacion/default.css create mode 100644 src/siu/operaciones/censo/documentacion/default.twig create mode 100644 src/siu/operaciones/censo/documentacion/pagelet_documentacion.js create mode 100644 src/siu/operaciones/censo/finalizado/default.css create mode 100644 src/siu/operaciones/censo/finalizado/default.twig create mode 100644 src/siu/operaciones/censo/financiamiento/default.twig create mode 100644 src/siu/operaciones/censo/financiamiento/form_financiamiento.php create mode 100644 src/siu/operaciones/censo/financiamiento/pagelet_financiamiento.js create mode 100644 src/siu/operaciones/censo/formacion_acad/default.css create mode 100644 src/siu/operaciones/censo/formacion_acad/default.twig create mode 100644 src/siu/operaciones/censo/formacion_acad/form_formacion_acad.php create mode 100644 src/siu/operaciones/censo/formacion_acad/pagelet_formacion_acad.js create mode 100644 src/siu/operaciones/censo/idiomas/default.twig create mode 100644 src/siu/operaciones/censo/idiomas/form_idiomas.php create mode 100644 src/siu/operaciones/censo/idiomas/pagelet_idiomas.js create mode 100644 src/siu/operaciones/censo/lista_forms/default.css create mode 100644 src/siu/operaciones/censo/lista_forms/default.twig create mode 100644 src/siu/operaciones/censo/lista_forms/pagelet_lista_forms.js create mode 100644 src/siu/operaciones/censo/pagelet_actuacion_docente.php create mode 100644 src/siu/operaciones/censo/pagelet_actuacion_profesional.php create mode 100644 src/siu/operaciones/censo/pagelet_datos_adicionales.php create mode 100644 src/siu/operaciones/censo/pagelet_datos_estudios.php create mode 100644 src/siu/operaciones/censo/pagelet_datos_familiares.php create mode 100644 src/siu/operaciones/censo/pagelet_datos_laborales.php create mode 100644 src/siu/operaciones/censo/pagelet_datos_personales.php create mode 100644 src/siu/operaciones/censo/pagelet_datos_principales.php create mode 100644 src/siu/operaciones/censo/pagelet_datos_salud.php create mode 100644 src/siu/operaciones/censo/pagelet_deportes.php create mode 100644 src/siu/operaciones/censo/pagelet_discapacidad.php create mode 100644 src/siu/operaciones/censo/pagelet_documentacion.php create mode 100644 src/siu/operaciones/censo/pagelet_finalizado.php create mode 100644 src/siu/operaciones/censo/pagelet_financiamiento.php create mode 100644 src/siu/operaciones/censo/pagelet_formacion_acad.php create mode 100644 src/siu/operaciones/censo/pagelet_idiomas.php create mode 100644 src/siu/operaciones/censo/pagelet_lista_forms.php create mode 100644 src/siu/operaciones/censo/pagelet_propuesta.php create mode 100644 src/siu/operaciones/censo/pagelet_tecnologia.php create mode 100644 src/siu/operaciones/censo/pagelet_turno_presentacion.php create mode 100644 src/siu/operaciones/censo/propuesta/default.css create mode 100644 src/siu/operaciones/censo/propuesta/default.twig create mode 100644 src/siu/operaciones/censo/propuesta/form_propuesta.php create mode 100644 src/siu/operaciones/censo/propuesta/pagelet_propuesta.js create mode 100644 src/siu/operaciones/censo/propuesta/selector_propuesta.twig create mode 100644 src/siu/operaciones/censo/tecnologia/default.twig create mode 100644 src/siu/operaciones/censo/tecnologia/form_tecnologia.php create mode 100644 src/siu/operaciones/censo/tecnologia/pagelet_tecnologia.js create mode 100644 src/siu/operaciones/censo/template.twig create mode 100644 src/siu/operaciones/censo/template_finalizado.twig create mode 100644 src/siu/operaciones/censo/turno_presentacion/default.css create mode 100644 src/siu/operaciones/censo/turno_presentacion/default.twig create mode 100644 src/siu/operaciones/censo/turno_presentacion/form_turno.php create mode 100644 src/siu/operaciones/censo/turno_presentacion/pagelet_turno_presentacion.js create mode 100644 src/siu/operaciones/censo/vista.php create mode 100644 src/siu/operaciones/censo/vista_finalizado.php create mode 100644 src/siu/operaciones/config_form/configuracion/default.css create mode 100644 src/siu/operaciones/config_form/configuracion/default.twig create mode 100644 src/siu/operaciones/config_form/configuracion/form_configuracion.php create mode 100644 src/siu/operaciones/config_form/configuracion/form_tipos_propuesta.php create mode 100644 src/siu/operaciones/config_form/configuracion/pagelet_configuracion.js create mode 100644 src/siu/operaciones/config_form/controlador.php create mode 100644 src/siu/operaciones/config_form/pagelet_configuracion.php create mode 100644 src/siu/operaciones/config_form/template.twig create mode 100644 src/siu/operaciones/config_form/vista.php create mode 100644 src/siu/operaciones/copiar_config_form/controlador.php create mode 100644 src/siu/operaciones/copiar_config_form/copia/default.css create mode 100644 src/siu/operaciones/copiar_config_form/copia/default.twig create mode 100644 src/siu/operaciones/copiar_config_form/copia/form_copia.php create mode 100644 src/siu/operaciones/copiar_config_form/copia/pagelet_copia.js create mode 100644 src/siu/operaciones/copiar_config_form/pagelet_copia.php create mode 100644 src/siu/operaciones/copiar_config_form/template.twig create mode 100644 src/siu/operaciones/copiar_config_form/vista.php create mode 100644 src/siu/operaciones/importar_config_form/controlador.php create mode 100644 src/siu/operaciones/importar_config_form/import/default.css create mode 100644 src/siu/operaciones/importar_config_form/import/default.twig create mode 100644 src/siu/operaciones/importar_config_form/import/form_import.php create mode 100644 src/siu/operaciones/importar_config_form/import/pagelet_import.js create mode 100644 src/siu/operaciones/importar_config_form/pagelet_import.php create mode 100644 src/siu/operaciones/importar_config_form/template.twig create mode 100644 src/siu/operaciones/importar_config_form/vista.php create mode 100644 src/siu/operaciones/limpiar_cache/controlador.php create mode 100644 src/siu/operaciones/limpiar_cache/limpieza/default.css create mode 100644 src/siu/operaciones/limpiar_cache/limpieza/default.twig create mode 100644 src/siu/operaciones/limpiar_cache/limpieza/pagelet_limpieza.js create mode 100644 src/siu/operaciones/limpiar_cache/pagelet_limpieza.php create mode 100644 src/siu/operaciones/limpiar_cache/template.twig create mode 100644 src/siu/operaciones/limpiar_cache/vista.php create mode 100644 src/siu/operaciones/logger/controlador.php create mode 100644 src/siu/operaciones/logger/info_log/default.css create mode 100644 src/siu/operaciones/logger/info_log/default.twig create mode 100644 src/siu/operaciones/logger/info_log/pagelet_info_log.js create mode 100644 src/siu/operaciones/logger/lista_logs/default.css create mode 100644 src/siu/operaciones/logger/lista_logs/default.twig create mode 100644 src/siu/operaciones/logger/lista_logs/pagelet_lista_logs.js create mode 100644 src/siu/operaciones/logger/pagelet_info_log.php create mode 100644 src/siu/operaciones/logger/pagelet_lista_logs.php create mode 100644 src/siu/operaciones/logger/template.twig create mode 100644 src/siu/operaciones/logger/vista.php create mode 100644 src/siu/operaciones/pagina_error/contenido/default.css create mode 100644 src/siu/operaciones/pagina_error/contenido/default.twig create mode 100644 src/siu/operaciones/pagina_error/contenido/pagelet_contenido.js create mode 100644 src/siu/operaciones/pagina_error/controlador.php create mode 100644 src/siu/operaciones/pagina_error/pagelet_contenido.php create mode 100644 src/siu/operaciones/pagina_error/template.twig create mode 100644 src/siu/operaciones/pagina_error/vista.php create mode 100644 src/siu/operaciones/perfil_datos/config/default.css create mode 100644 src/siu/operaciones/perfil_datos/config/default.twig create mode 100644 src/siu/operaciones/perfil_datos/config/form_config_pd.php create mode 100644 src/siu/operaciones/perfil_datos/config/pagelet_config.js create mode 100644 src/siu/operaciones/perfil_datos/controlador.php create mode 100644 src/siu/operaciones/perfil_datos/modelo.php create mode 100644 src/siu/operaciones/perfil_datos/pagelet_config.php create mode 100644 src/siu/operaciones/perfil_datos/pagelet_resultado.php create mode 100644 src/siu/operaciones/perfil_datos/resultado/default.css create mode 100644 src/siu/operaciones/perfil_datos/resultado/default.twig create mode 100644 src/siu/operaciones/perfil_datos/resultado/pagelet_resultado.js create mode 100644 src/siu/operaciones/perfil_datos/template.twig create mode 100644 src/siu/operaciones/perfil_datos/vista.php create mode 100644 src/siu/operaciones/test_cnx/configuracion/default.css create mode 100644 src/siu/operaciones/test_cnx/configuracion/default.twig create mode 100644 src/siu/operaciones/test_cnx/configuracion/pagelet_configuracion.js create mode 100644 src/siu/operaciones/test_cnx/contenido/default.css create mode 100644 src/siu/operaciones/test_cnx/contenido/default.twig create mode 100644 src/siu/operaciones/test_cnx/contenido/pagelet_contenido.js create mode 100644 src/siu/operaciones/test_cnx/controlador.php create mode 100644 src/siu/operaciones/test_cnx/modelo.php create mode 100644 src/siu/operaciones/test_cnx/pagelet_configuracion.php create mode 100644 src/siu/operaciones/test_cnx/pagelet_contenido.php create mode 100644 src/siu/operaciones/test_cnx/template.twig create mode 100644 src/siu/operaciones/test_cnx/vista.php create mode 100644 src/siu/operaciones/test_mail/configuracion/default.css create mode 100644 src/siu/operaciones/test_mail/configuracion/default.twig create mode 100644 src/siu/operaciones/test_mail/configuracion/pagelet_configuracion.js create mode 100644 src/siu/operaciones/test_mail/controlador.php create mode 100644 src/siu/operaciones/test_mail/form_test/default.twig create mode 100644 src/siu/operaciones/test_mail/form_test/form_prueba.php create mode 100644 src/siu/operaciones/test_mail/form_test/mail_prueba.twig create mode 100644 src/siu/operaciones/test_mail/form_test/pagelet_form_test.js create mode 100644 src/siu/operaciones/test_mail/pagelet_configuracion.php create mode 100644 src/siu/operaciones/test_mail/pagelet_form_test.php create mode 100644 src/siu/operaciones/test_mail/template.twig create mode 100644 src/siu/operaciones/test_mail/vista.php create mode 100644 src/siu/preinscripcion.php create mode 100644 src/siu/util/consola/comandos/comando_preinscripcion.php create mode 100644 src/siu/util/consola/comandos/compilar_recursos.php create mode 100644 src/siu/util/consola/comandos/user_admin.php create mode 100644 src/siu/util/consola/gadmin.php create mode 100644 src/siu/util/consola/limpiar_cache.php create mode 100644 src/siu/util/consola/run.php create mode 100644 src/siu/www/css/bootstrap-responsive.css create mode 100644 src/siu/www/css/bootstrap.css create mode 100644 src/siu/www/css/coda-slider.css create mode 100644 src/siu/www/css/dev_bar.css create mode 100644 src/siu/www/css/facebox.css create mode 100644 src/siu/www/css/jTPS.css create mode 100644 src/siu/www/css/jquery-ui.css create mode 100644 src/siu/www/css/media_querys.css create mode 100644 src/siu/www/css/preinscripcion-responsive.css create mode 100644 src/siu/www/css/preinscripcion.css create mode 100644 src/siu/www/img/ajax-loader.gif create mode 100644 src/siu/www/img/arrow_down.png create mode 100644 src/siu/www/img/arrow_up.png create mode 100644 src/siu/www/img/bg.gif create mode 100644 src/siu/www/img/bk_censo_menu.png create mode 100644 src/siu/www/img/catalogo.png create mode 100644 src/siu/www/img/close-dev.png create mode 100644 src/siu/www/img/closelabel.png create mode 100644 src/siu/www/img/colapsado-azul.png create mode 100644 src/siu/www/img/colapsado-negro.png create mode 100644 src/siu/www/img/colapsado.gif create mode 100644 src/siu/www/img/comprobante_cursadas.png create mode 100644 src/siu/www/img/controles.png create mode 100644 src/siu/www/img/cross.png create mode 100644 src/siu/www/img/descolapsado-azul.png create mode 100644 src/siu/www/img/descolapsado-negro.png create mode 100644 src/siu/www/img/error-dev.png create mode 100644 src/siu/www/img/favicon.ico create mode 100644 src/siu/www/img/flechitas_link.png create mode 100644 src/siu/www/img/glyphicons-halflings-white.png create mode 100644 src/siu/www/img/glyphicons-halflings.png create mode 100644 src/siu/www/img/hori.png create mode 100644 src/siu/www/img/icono-advertencia.png create mode 100644 src/siu/www/img/icono-ayuda.png create mode 100644 src/siu/www/img/icono-error.png create mode 100644 src/siu/www/img/icono-exito.png create mode 100644 src/siu/www/img/icono-info.png create mode 100644 src/siu/www/img/icono-info12x12.png create mode 100644 src/siu/www/img/iconos/g3w2-icon-excel.png create mode 100644 src/siu/www/img/iconos/g3w2-icon-group.png create mode 100644 src/siu/www/img/iconos/g3w2-icon-pdf.png create mode 100644 src/siu/www/img/iconos/warning_icon.png create mode 100644 src/siu/www/img/img_recurso.png create mode 100644 src/siu/www/img/indicador-izq-gris.png create mode 100644 src/siu/www/img/item_dcensal.png create mode 100644 src/siu/www/img/item_dcensal_ok.png create mode 100644 src/siu/www/img/jTPS/bullet_arrow_down.png create mode 100644 src/siu/www/img/jTPS/bullet_arrow_up.png create mode 100644 src/siu/www/img/jTPS/eeGrad2.gif create mode 100644 src/siu/www/img/jTPS/f0f2f5grad.gif create mode 100644 src/siu/www/img/loading.gif create mode 100644 src/siu/www/img/login/facebook.jpg create mode 100644 src/siu/www/img/login/google.jpg create mode 100644 src/siu/www/img/login/oauth_1.0.png create mode 100644 src/siu/www/img/login/oauth_2.0.jpg create mode 100644 src/siu/www/img/login/openid.png create mode 100644 src/siu/www/img/login/yahoo.jpg create mode 100644 src/siu/www/img/logo-celular.png create mode 100644 src/siu/www/img/logo-guarani.png create mode 100644 src/siu/www/img/logo-transparente.png create mode 100644 src/siu/www/img/logo.png create mode 100644 src/siu/www/img/logo2.png create mode 100644 src/siu/www/img/logo_ministerio.jpg create mode 100644 src/siu/www/img/logo_pers.jpg create mode 100644 src/siu/www/img/logo_pers.png create mode 100644 src/siu/www/img/memory.png create mode 100644 src/siu/www/img/navigator.png create mode 100644 src/siu/www/img/newwindow.png create mode 100644 src/siu/www/img/nro_de_tramite_dni.jpeg create mode 100644 src/siu/www/img/php.png create mode 100644 src/siu/www/img/seleccion.png create mode 100644 src/siu/www/img/sprite.png create mode 100644 src/siu/www/img/squares.png create mode 100644 src/siu/www/img/time.png create mode 100644 src/siu/www/img/tray-active.gif create mode 100644 src/siu/www/img/tray-hover.gif create mode 100644 src/siu/www/img/tray-separator.gif create mode 100644 src/siu/www/img/tray.gif create mode 100644 src/siu/www/img/triangle-down.png create mode 100644 src/siu/www/img/triangle-up.png create mode 100644 src/siu/www/img/ui/ui-bg_glass_75_d0e5f5_1x400.png create mode 100644 src/siu/www/img/ui/ui-bg_glass_85_dfeffc_1x400.png create mode 100644 src/siu/www/img/ui/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 src/siu/www/img/ui/ui-bg_gloss-wave_55_5c9ccc_500x100.png create mode 100644 src/siu/www/img/ui/ui-bg_inset-hard_100_f5f8f9_1x100.png create mode 100644 src/siu/www/img/ui/ui-bg_inset-hard_100_fcfdfd_1x100.png create mode 100644 src/siu/www/img/ui/ui-icons_217bc0_256x240.png create mode 100644 src/siu/www/img/ui/ui-icons_2e83ff_256x240.png create mode 100644 src/siu/www/img/ui/ui-icons_469bdd_256x240.png create mode 100644 src/siu/www/img/ui/ui-icons_6da8d5_256x240.png create mode 100644 src/siu/www/img/ui/ui-icons_cd0a0a_256x240.png create mode 100644 src/siu/www/img/ui/ui-icons_d8e7f3_256x240.png create mode 100644 src/siu/www/img/ui/ui-icons_f9bd01_256x240.png create mode 100644 src/siu/www/img/white_arrow.png create mode 100644 src/siu/www/index.php create mode 100644 src/siu/www/js/_comun/selector_colegio/selector_colegio.js create mode 100644 src/siu/www/js/_comun/selector_localidad/selector_cp.js create mode 100644 src/siu/www/js/_comun/selector_localidad/selector_localidad.js create mode 100644 src/siu/www/js/_comun/selector_titulo_sec/selector_titulo_sec.js create mode 100644 src/siu/www/js/bootstrap.js create mode 100644 src/siu/www/js/facebox.js create mode 100644 src/siu/www/js/html5.js create mode 100644 src/siu/www/js/jTPS.js create mode 100644 src/siu/www/js/jquery-ui.js create mode 100644 src/siu/www/js/jqueryui.extra.js create mode 100644 src/siu/www/js/plugin_autosave.js create mode 100644 src/siu/www/js/preinscripcion.js create mode 100644 src/siu/www/rs.php create mode 100644 version.ini diff --git a/BD/conversion/mig_3.08_a_3.09.sql b/BD/conversion/mig_3.08_a_3.09.sql new file mode 100644 index 0000000..32d3cba --- /dev/null +++ b/BD/conversion/mig_3.08_a_3.09.sql @@ -0,0 +1,16 @@ + +BEGIN WORK; + +-------------------------------------------------------------------------------------- +-- Ajustes en "Configuración de campos de formulario" +-------------------------------------------------------------------------------------- +UPDATE sga_campos_conf SET visible = 1, obligatorio = 1 WHERE columna = 'e_mail'; + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Versión de la base +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +INSERT INTO app_versiones_base(version_base, fecha_actualizacion, observaciones) +VALUES ('3.9', CURRENT_TIMESTAMP, 'Versión 3.9 de la base de Preinscripción'); + +COMMIT WORK; diff --git a/BD/conversion/mig_3.09_a_3.10.sql b/BD/conversion/mig_3.09_a_3.10.sql new file mode 100644 index 0000000..1372779 --- /dev/null +++ b/BD/conversion/mig_3.09_a_3.10.sql @@ -0,0 +1,21 @@ +BEGIN WORK; + +-------------------------------------------------------------------------------------- +-- Ajustes de tipos de campos +-------------------------------------------------------------------------------------- + +ALTER TABLE sga_preinscripcion ALTER COLUMN nro_documento TYPE VARCHAR(20); + +-------------------------------------------------------------------------------------- +-- Ajustes en "Configuración de campos de formulario" +-------------------------------------------------------------------------------------- +UPDATE sga_campos_conf SET visible = 1, obligatorio = 1 WHERE columna = 'e_mail'; + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Versión de la base +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +INSERT INTO app_versiones_base(version_base, fecha_actualizacion, observaciones) +VALUES ('3.10', CURRENT_TIMESTAMP, 'Versión 3.10 de la base de Preinscripción'); + +COMMIT WORK; diff --git a/BD/conversion/mig_3.10_a_3.11.sql b/BD/conversion/mig_3.10_a_3.11.sql new file mode 100644 index 0000000..2d22f67 --- /dev/null +++ b/BD/conversion/mig_3.10_a_3.11.sql @@ -0,0 +1,10 @@ +BEGIN WORK; + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Versión de la base +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +INSERT INTO app_versiones_base(version_base, fecha_actualizacion, observaciones) +VALUES ('3.11', CURRENT_TIMESTAMP, 'Versión 3.11 de la base de Preinscripción'); + +COMMIT WORK; diff --git a/BD/conversion/mig_3.11.0_a_3.11.1.sql b/BD/conversion/mig_3.11.0_a_3.11.1.sql new file mode 100644 index 0000000..8fa1e6a --- /dev/null +++ b/BD/conversion/mig_3.11.0_a_3.11.1.sql @@ -0,0 +1,57 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Script de conversion de version 3.11 a 3.11.2 +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +BEGIN WORK; + +-- +++++++++++++++ Agrega el campo "es_mayor_25_sin_secundario" ++++++++++++++++++++++++++++++ +DO $BODY$ +DECLARE cant INTEGER; +BEGIN + + SELECT COUNT(*) INTO cant + FROM pg_tables + JOIN pg_namespace ON pg_namespace.nspname = pg_tables.schemaname + JOIN pg_class ON (pg_class.relname = pg_tables.tablename AND pg_class.relnamespace = pg_namespace.oid) + JOIN pg_attribute as a0 ON a0.attrelid = pg_class.oid + WHERE pg_tables.schemaname = trim(current_schema()) + AND pg_tables.tablename = 'sga_preinscripcion' + AND a0.attname = 'es_mayor_25_sin_secundario' + AND a0.attnum > 0; + +IF cant = 0 THEN + ALTER TABLE sga_preinscripcion ADD COLUMN es_mayor_25_sin_secundario Char(1) NOT NULL DEFAULT 'N'; + + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_es_mayor_25_sin_secundario CHECK (es_mayor_25_sin_secundario IN ('N', 'S')); + + -- Datos de configuracion + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('es_mayor_25_sin_secundario','Es mayor de 25 años y no tiene estudios secundarios'); + + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','es_mayor_25_sin_secundario',1,1,1); + + +-- si ya existe +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Se replica la config de propuestas de Grado para los demás tipos +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) + SELECT sga_propuestas_tipos.propuesta_tipo, + sga_campos_conf.columna, + sga_campos_conf.visible, + sga_campos_conf.obligatorio, + sga_campos_conf.se_imprime + FROM sga_campos_conf, + sga_propuestas_tipos + WHERE sga_campos_conf.propuesta_tipo = '200' + AND sga_propuestas_tipos.propuesta_tipo <> '200' + ORDER BY sga_propuestas_tipos.propuesta_tipo, + sga_campos_conf.columna; + +END IF; +--Por si fue modificada manualmente +UPDATE sga_campos_conf SET visible=1, obligatorio=1, se_imprime=1 WHERE columna='es_mayor_25_sin_secundario'; + +END $BODY$; +-- ++++++++++++++++++ Fin agregado campo es_mayor_25_sin_secundario +++++++++++++++++++ + +COMMIT WORK; diff --git a/BD/conversion/mig_3.11_a_3.12.sql b/BD/conversion/mig_3.11_a_3.12.sql new file mode 100644 index 0000000..861a3e2 --- /dev/null +++ b/BD/conversion/mig_3.11_a_3.12.sql @@ -0,0 +1,458 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Script de conversion de version 3.11 a 3.12 +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +BEGIN WORK; + +-- Versión de la base +INSERT INTO app_versiones_base(version_base, fecha_actualizacion, observaciones) + VALUES ('3.12', CURRENT_TIMESTAMP, 'Versión 3.12 de la base de Preinscripción'); + + +-- +++++++++++++++ Agrega el campo "es_mayor_15_sin_secundario" ++++++++++++++++++++++++++++++ +DO $BODY$ +DECLARE cant INTEGER; +BEGIN + + SELECT COUNT(*) INTO cant + FROM pg_tables + JOIN pg_namespace ON pg_namespace.nspname = pg_tables.schemaname + JOIN pg_class ON (pg_class.relname = pg_tables.tablename AND pg_class.relnamespace = pg_namespace.oid) + JOIN pg_attribute as a0 ON a0.attrelid = pg_class.oid + WHERE pg_tables.schemaname = trim(current_schema()) + AND pg_tables.tablename = 'sga_preinscripcion' + AND a0.attname = 'es_mayor_25_sin_secundario' + AND a0.attnum > 0; + +IF cant = 0 THEN + ALTER TABLE sga_preinscripcion ADD COLUMN es_mayor_25_sin_secundario Char(1) NOT NULL DEFAULT 'N'; + + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_es_mayor_25_sin_secundario CHECK (es_mayor_25_sin_secundario IN ('N', 'S')); + + -- Datos de configuracion + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('es_mayor_25_sin_secundario','Es mayor de 25 años y no tiene estudios secundarios'); + + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','es_mayor_25_sin_secundario',1,1,1); + +END IF; +END $BODY$; +-- ++++++++++++++++++ Fin agregado campo es_mayor_25_sin_secundario +++++++++++++++++++ + +-- +++++++++++++++ Agrega campos de Discapacidad en la tabla "sga_preinscripcion" ++++++++++++++++++++++++++++++ +DO $BODY$ +DECLARE cant INTEGER; +DECLARE c_p RECORD; +DECLARE c_d RECORD; +DECLARE _tipo integer; +DECLARE _tiene_cud char(1); +DECLARE _condicion_discapacidad char(1); +DECLARE _desde_hasta text; +DECLARE _desc text; +DECLARE _desc_otras_discapacidades text; +BEGIN + + SELECT COUNT(*) INTO cant + FROM pg_tables + JOIN pg_namespace ON pg_namespace.nspname = pg_tables.schemaname + JOIN pg_class ON (pg_class.relname = pg_tables.tablename AND pg_class.relnamespace = pg_namespace.oid) + JOIN pg_attribute as a0 ON a0.attrelid = pg_class.oid + WHERE pg_tables.schemaname = trim(current_schema()) + AND pg_tables.tablename = 'sga_preinscripcion' + AND a0.attname = 'condicion_discapacidad' + AND a0.attnum > 0; + +IF cant = 0 THEN + + ALTER TABLE sga_preinscripcion + ADD COLUMN condicion_discapacidad Char(1) NOT NULL DEFAULT 'N', + ADD COLUMN tiene_cud Char(1) DEFAULT 'N', + ADD COLUMN disc_auditiva Char(1) DEFAULT 'N', + ADD COLUMN aud_tipo Smallint DEFAULT 1, + ADD COLUMN aud_lenguaje_senias Char(1) DEFAULT 'N', + ADD COLUMN aud_lenguaje_labial Char(1) DEFAULT 'N', + ADD COLUMN aud_comunicacion_otra Text, + ADD COLUMN aud_apoyo_vida_diaria Text, + ADD COLUMN aud_req_interprete_lengua_senias Char(1) DEFAULT 'N', + ADD COLUMN aud_req_aro_magnetico Char(1) DEFAULT 'N', + ADD COLUMN aud_req_otros_apoyos Char(1) DEFAULT 'N', + ADD COLUMN aud_otros_apoyos Text, + ADD COLUMN disc_visual Char(1) DEFAULT 'N', + ADD COLUMN vis_dificultad_para_ver Smallint DEFAULT 1, + ADD COLUMN vis_apoyo_vida_diaria Text, + ADD COLUMN vis_req_archivo_audio Char(1) DEFAULT 'N', + ADD COLUMN vis_req_texto_digital Char(1) DEFAULT 'N', + ADD COLUMN vis_req_texto_braile Char(1) DEFAULT 'N', + ADD COLUMN vis_req_otros_apoyos Char(1) DEFAULT 'N', + ADD COLUMN vis_otros_apoyos Text, + ADD COLUMN disc_motora Char(1) DEFAULT 'N', + ADD COLUMN mot_apoyo_vida_diaria Text, + ADD COLUMN mot_req_apoyo_aula Char(1) DEFAULT 'N', + ADD COLUMN mot_apoyo_aula Text, + ADD COLUMN mot_req_otros_apoyos Char(1) DEFAULT 'N', + ADD COLUMN mot_otros_apoyos Text, + ADD COLUMN disc_cond_psicosocial Char(1) DEFAULT 'N', + ADD COLUMN psi_descripcion Text, + ADD COLUMN psi_apoyo_vida_diaria Text, + ADD COLUMN psi_req_otros_apoyos Char(1) DEFAULT 'N', + ADD COLUMN psi_otros_apoyos Text, + ADD COLUMN disc_otra Char(1) DEFAULT 'N', + ADD COLUMN otra_descripcion Text, + ADD COLUMN otra_req_apoyo_vida_diaria Char(1) DEFAULT 'N', + ADD COLUMN otra_apoyo_vida_diaria Text, + ADD COLUMN informacion_importante Text; + + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_condicion_discapacidad CHECK (condicion_discapacidad IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_tiene_cud CHECK (tiene_cud IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_disc_auditiva CHECK (disc_auditiva IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_aud_lenguaje_senias CHECK (aud_lenguaje_senias IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_aud_lenguaje_labial CHECK (aud_lenguaje_labial IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_aud_req_interprete_lengua_senias CHECK (aud_req_interprete_lengua_senias IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_aud_req_aro_magnetico CHECK (aud_req_aro_magnetico IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_aud_req_otros_apoyos CHECK (aud_req_otros_apoyos IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_disc_visual CHECK (disc_visual IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_vis_req_archivo_audio CHECK (vis_req_archivo_audio IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_vis_req_texto_digital CHECK (vis_req_texto_digital IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_vis_req_texto_braile CHECK (vis_req_texto_braile IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_vis_req_otros_apoyos CHECK (vis_req_otros_apoyos IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_disc_motora CHECK (disc_motora IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_mot_req_apoyo_aula CHECK (mot_req_apoyo_aula IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_mot_req_otros_apoyos CHECK (mot_req_otros_apoyos IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_disc_cond_psicosocial CHECK (disc_cond_psicosocial IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_psi_req_otros_apoyos CHECK (psi_req_otros_apoyos in ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_disc_otra CHECK (disc_otra IN ('S','N')); + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_otra_req_apoyo_vida_diaria CHECK (otra_req_apoyo_vida_diaria IN ('S','N')); + + -- Se modifica a 300 caracteres para los datos de discapacidad + ALTER TABLE sga_campos_form ALTER COLUMN descripcion TYPE VARCHAR(300); + + -- Datos de configuracion + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('condicion_discapacidad', 'Condición de Discapacidad'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tiene_cud', 'Tenés CUD'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('disc_auditiva', 'Auditiva'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_tipo', '¿Tenés dificultad para oír, incluso si usás un audífono o implante coclear?'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_lenguaje_senias', 'Lengua de Señas'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_lenguaje_labial', 'Lectura labial'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_comunicacion_otra', 'Otra forma'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_apoyo_vida_diaria', '¿Qué apoyos utilizás en tu vida diaria?'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_req_interprete_lengua_senias', 'Requerís Intérprete de Lengua de Señas Argentina'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_req_aro_magnetico', 'Requerís Aro magnético'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_req_otros_apoyos', '¿Requerís otros apoyos?'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_otros_apoyos', 'Especificar cuáles'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('disc_visual', 'Visual'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_dificultad_para_ver', '¿Tenés dificultad para ver, incluso si usás lentes?'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_apoyo_vida_diaria', '¿Qué apoyos utilizás en tu vida diaria?'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_req_archivo_audio', 'Requerís Archivos de audio'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_req_texto_digital', 'Requerís Texto digital accesible'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_req_texto_braile', 'Requerís Texto en Braille'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_req_otros_apoyos', '¿Requerís otros apoyos?'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_otros_apoyos', 'Especificar cuáles'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('disc_motora', 'Motora'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_apoyo_vida_diaria', '¿Qué apoyos utilizás en tu vida diaria?'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_req_apoyo_aula', '¿Requerís apoyos para la permanencia en el aula?'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_apoyo_aula', '¿Cuáles?'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_req_otros_apoyos', '¿Requerís otros apoyos?'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_otros_apoyos', 'Especificar cuáles'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('disc_cond_psicosocial', 'Condición Psicosocial'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('psi_descripcion', '¿Cuál?'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('psi_apoyo_vida_diaria', '¿Qué apoyos utilizás en tu vida diaria?'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('psi_req_otros_apoyos', '¿Requerís otros apoyos?'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('psi_otros_apoyos', 'Especificar cuáles'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('disc_otra', 'Otra'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('otra_descripcion', '¿Cuál/cuáles?'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('otra_req_apoyo_vida_diaria', '¿Requiere otros apoyos?'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('otra_apoyo_vida_diaria', 'Especificar cuáles'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('informacion_importante', 'Alguna otra información que consideres importante comunicar'); + + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'condicion_discapacidad', 1, 1, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'tiene_cud', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'disc_auditiva', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_tipo', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_lenguaje_senias', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_lenguaje_labial', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_comunicacion_otra', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_apoyo_vida_diaria', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_req_interprete_lengua_senias', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_req_aro_magnetico', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_req_otros_apoyos', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_otros_apoyos', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'disc_visual', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_dificultad_para_ver', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_apoyo_vida_diaria', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_req_archivo_audio', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_req_texto_digital', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_req_texto_braile', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_req_otros_apoyos', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_otros_apoyos', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'disc_motora', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'mot_apoyo_vida_diaria', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'mot_req_apoyo_aula', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'mot_apoyo_aula', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'mot_req_otros_apoyos', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'mot_otros_apoyos', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'disc_cond_psicosocial', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'psi_descripcion', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'psi_apoyo_vida_diaria', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'psi_req_otros_apoyos', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'psi_otros_apoyos', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'disc_otra', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'otra_descripcion', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'otra_req_apoyo_vida_diaria', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'otra_apoyo_vida_diaria', 1, 0, 1); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'informacion_importante', 1, 0, 1); + + -- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -- Se replica la config. inicial de propuestas de Grado para los demás tipos + -- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) + SELECT sga_propuestas_tipos.propuesta_tipo, + sga_campos_conf.columna, + sga_campos_conf.visible, + sga_campos_conf.obligatorio, + sga_campos_conf.se_imprime + FROM sga_campos_conf, + sga_propuestas_tipos + WHERE sga_campos_conf.propuesta_tipo = '200' + AND sga_propuestas_tipos.propuesta_tipo != '200' + AND NOT EXISTS (SELECT * FROM sga_campos_conf AS config WHERE config.propuesta_tipo = sga_propuestas_tipos.propuesta_tipo AND config.columna = sga_campos_conf.columna) + ORDER BY sga_propuestas_tipos.propuesta_tipo, + sga_campos_conf.columna; + + -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -- Se pasan los datos de discapacidad de la tabla 'mdp_datos_salud' a 'sga_preinscripcion' + -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + FOR c_p IN ( SELECT id_preinscripcion + FROM sga_preinscripcion + ORDER BY id_preinscripcion) + LOOP + + SELECT condicion_discapacidad INTO _condicion_discapacidad + FROM sga_preinscripcion + WHERE id_preinscripcion = c_p.id_preinscripcion + LIMIT 1; + IF _condicion_discapacidad = 'S' THEN + -- Ya fue procesado, sigo con el siguiente alumno. + CONTINUE; + END IF; + + _tiene_cud := 'N'; + _desde_hasta := ''; + _desc_otras_discapacidades := 'Otras discapacidades: '; + + -- Recorro los datos cargados por tipo de discapacidad + -- Solo paso el ultimo registro por cada tipo de discapacidad (con fecha_desde mayor) + _tipo := 0; + FOR c_d IN (SELECT * FROM mdp_datos_salud WHERE id_preinscripcion = c_p.id_preinscripcion ORDER BY tipo, fecha_desde DESC) + LOOP + IF c_d.tipo = _tipo THEN + _tipo := c_d.tipo; + CONTINUE; + END IF; + IF c_d.certificado = 'S' THEN + _tiene_cud := 'S'; + END IF; + + IF c_d.fecha_desde IS NOT NULL THEN + _desde_hasta := 'Desde ' || to_char(c_d.fecha_desde,'DD/MM/YYYY'); + END IF; + IF c_d.fecha_hasta IS NOT NULL THEN + _desde_hasta := COALESCE(_desde_hasta,'') || ' hasta ' || to_char(c_d.fecha_hasta,'DD/MM/YYYY') || '.'; + END IF; + + /* Carácter: + "T" "Transitoria" + "P" "Permanente" + + Grado: + "S" "Severa" + "M" "Moderada" + "L" "Leve" + */ + _desc := 'Carácter: ' || CASE c_d.caracter WHEN 'T' THEN 'Transitoria' WHEN 'P' THEN 'Permanente' END; + _desc := _desc || '. Grado: ' || CASE c_d.grado WHEN 'S' THEN 'Severa' WHEN 'M' THEN 'Moderada' WHEN 'L' THEN 'Leve' END; + IF c_d.observaciones IS NOT NULL THEN + _desc := _desc || '. ' || c_d.observaciones || '. '; + END IF; + _desc := _desc || _desde_hasta; + + + /* Tipos de Discapacidades */ + IF c_d.tipo = 1 THEN -- "Neurológica" + _desc_otras_discapacidades := _desc_otras_discapacidades || ' * Neurológica > ' || _desc; + + ELSIF c_d.tipo = 2 THEN -- "Psicológica" + UPDATE sga_preinscripcion + SET disc_cond_psicosocial = 'S', + psi_descripcion = _desc + WHERE id_preinscripcion = c_p.id_preinscripcion; + + ELSIF c_d.tipo = 3 THEN -- "Motora" + UPDATE sga_preinscripcion + SET disc_motora = 'S', + mot_req_otros_apoyos = 'S', + mot_otros_apoyos = _desc + WHERE id_preinscripcion = c_p.id_preinscripcion; + + ELSIF c_d.tipo = 4 THEN -- "Renal" + _desc_otras_discapacidades := _desc_otras_discapacidades || ' * Renal > ' || _desc; + + ELSIF c_d.tipo = 5 THEN -- "Respiratoria" + _desc_otras_discapacidades := _desc_otras_discapacidades || ' * Respiratoria > ' || _desc; + + ELSIF c_d.tipo = 6 THEN -- "Auditiva" + UPDATE sga_preinscripcion + SET disc_auditiva = 'S', + aud_tipo = CASE c_d.grado WHEN 'S' THEN 4 WHEN 'M' THEN 3 WHEN 'L' THEN 2 ELSE 1 END, + aud_req_otros_apoyos = 'S', + aud_otros_apoyos = _desc + WHERE id_preinscripcion = c_p.id_preinscripcion; + + ELSIF c_d.tipo = 7 THEN -- "Cardiaca" + _desc_otras_discapacidades := _desc_otras_discapacidades || ' * Cardíaca > ' || _desc; + + ELSIF c_d.tipo = 8 THEN -- "Visual" + UPDATE sga_preinscripcion + SET disc_visual = 'S', + vis_dificultad_para_ver = CASE c_d.grado WHEN 'S' THEN 4 WHEN 'M' THEN 3 WHEN 'L' THEN 2 ELSE 1 END, + vis_req_otros_apoyos = 'S', + vis_otros_apoyos = _desc + WHERE id_preinscripcion = c_p.id_preinscripcion; + + ELSIF c_d.tipo = 9 THEN -- "Metabólica" + _desc_otras_discapacidades := _desc_otras_discapacidades || ' * Metabólica > ' || _desc; + + ELSIF c_d.tipo = 10 THEN -- "Trastornos del lenguaje" + _desc_otras_discapacidades := _desc_otras_discapacidades || ' * Trastornos del lenguaje > ' || _desc; + + ELSIF c_d.tipo = 11 THEN -- "Otras" + _desc_otras_discapacidades := _desc_otras_discapacidades || ' * Otras > ' || _desc; + + + END IF; + + IF _desc_otras_discapacidades <> 'Otras discapacidades: ' THEN + UPDATE sga_preinscripcion + SET disc_otra = 'S', + otra_descripcion = _desc_otras_discapacidades + WHERE id_preinscripcion = c_p.id_preinscripcion; + END IF; + + -- Actualizo datos genericos del registro de discapacidad de la persona. + UPDATE sga_preinscripcion + SET condicion_discapacidad = 'S', + tiene_cud = _tiene_cud + WHERE id_preinscripcion = c_p.id_preinscripcion; + + _tipo := c_d.tipo; + END LOOP; + + + END LOOP; + + -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + -- Se eliminan tablas viejas de discapacidad + -- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + DROP TABLE IF EXISTS mdp_datos_salud; + DROP SEQUENCE IF EXISTS mdp_datos_salud_seq; + +END IF; +END $BODY$; +-- ++++++++++++++++++ Fin agregado campos de Discapacidad en la tabla "sga_preinscripcion" +++++++++++++++++++ + +-- Cambia el tipo de datos de la columna "fecha_registro" de DATE a TIMESTAMP. Para poder controlar el tiempo permitido para confirmar el mail. +ALTER TABLE sga_preinscripcion ALTER COLUMN fecha_registro TYPE TIMESTAMP WITH TIME ZONE; +ALTER TABLE sga_preinscripcion ALTER COLUMN fecha_registro SET DEFAULT CURRENT_TIMESTAMP; + + +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Se agregan campos de IDENTIDAD DE GENERO +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +DO $BODY$ +DECLARE cant INTEGER; +BEGIN + + SELECT COUNT(*) INTO cant + FROM pg_tables + JOIN pg_namespace ON pg_namespace.nspname = pg_tables.schemaname + JOIN pg_class ON (pg_class.relname = pg_tables.tablename AND pg_class.relnamespace = pg_namespace.oid) + JOIN pg_attribute as a0 ON a0.attrelid = pg_class.oid + WHERE pg_tables.schemaname = trim(current_schema()) + AND pg_tables.tablename = 'sga_preinscripcion' + AND a0.attname = 'identidad_genero' + AND a0.attnum > 0; + +IF cant = 0 THEN + + ALTER TABLE sga_preinscripcion ADD COLUMN identidad_genero Integer; + ALTER TABLE sga_preinscripcion ADD COLUMN identidad_genero_otro Varchar(100); +-- Datos de configuracion + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('identidad_genero','identidad de genero elegido'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('identidad_genero_otro','campo para especificar identidad de genero'); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','identidad_genero',1,0,0); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','identidad_genero_otro',1,0,0); + + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) + SELECT sga_propuestas_tipos.propuesta_tipo, + sga_campos_conf.columna, + sga_campos_conf.visible, + sga_campos_conf.obligatorio, + sga_campos_conf.se_imprime + FROM sga_campos_conf, + sga_propuestas_tipos + WHERE sga_campos_conf.propuesta_tipo = '200' + AND sga_propuestas_tipos.propuesta_tipo != '200' + AND NOT EXISTS (SELECT * FROM sga_campos_conf AS config WHERE config.propuesta_tipo = sga_propuestas_tipos.propuesta_tipo AND config.columna = sga_campos_conf.columna) + ORDER BY sga_propuestas_tipos.propuesta_tipo, + sga_campos_conf.columna; + +END IF; +END $BODY$; + + + +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Se agregan campos de diversidad e identidad de genero +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +DO $BODY$ +DECLARE cant INTEGER; +BEGIN + + SELECT COUNT(*) INTO cant + FROM pg_tables + JOIN pg_namespace ON pg_namespace.nspname = pg_tables.schemaname + JOIN pg_class ON (pg_class.relname = pg_tables.tablename AND pg_class.relnamespace = pg_namespace.oid) + JOIN pg_attribute as a0 ON a0.attrelid = pg_class.oid + WHERE pg_tables.schemaname = trim(current_schema()) + AND pg_tables.tablename = 'sga_preinscripcion' + AND (a0.attname = 'apellido_elegido' OR a0.attname = 'nombres_elegido') + AND a0.attnum > 0; + +IF cant = 0 THEN + + ALTER TABLE sga_preinscripcion ADD COLUMN apellido_elegido VARCHAR(30) ; + ALTER TABLE sga_preinscripcion ADD COLUMN nombres_elegido VARCHAR(30); +-- Datos de configuracion + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('apellido_elegido','apellido elegido'); + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nombres_elegido','nombres elegido'); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','apellido_elegido',1,0,0); + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nombres_elegido',1,0,0); + + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) + SELECT sga_propuestas_tipos.propuesta_tipo, + sga_campos_conf.columna, + sga_campos_conf.visible, + sga_campos_conf.obligatorio, + sga_campos_conf.se_imprime + FROM sga_campos_conf, + sga_propuestas_tipos + WHERE sga_campos_conf.propuesta_tipo = '200' + AND sga_propuestas_tipos.propuesta_tipo != '200' + AND NOT EXISTS (SELECT * FROM sga_campos_conf AS config WHERE config.propuesta_tipo = sga_propuestas_tipos.propuesta_tipo AND config.columna = sga_campos_conf.columna) + ORDER BY sga_propuestas_tipos.propuesta_tipo, + sga_campos_conf.columna; + +END IF; +END $BODY$; + + +COMMIT WORK; \ No newline at end of file diff --git a/BD/conversion/mig_3.12.0_a_3.13.0.sql b/BD/conversion/mig_3.12.0_a_3.13.0.sql new file mode 100644 index 0000000..0efafcb --- /dev/null +++ b/BD/conversion/mig_3.12.0_a_3.13.0.sql @@ -0,0 +1,52 @@ +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Script de conversion de version 3.12.0 a 3.13.0 +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +BEGIN WORK; + +-- Versión de la base +INSERT INTO app_versiones_base(version_base, fecha_actualizacion, observaciones) + VALUES ('3.13', CURRENT_TIMESTAMP, 'Versión 3.13 de la base de Preinscripción'); + +DO $BODY$ +DECLARE cant INTEGER; +BEGIN + + SELECT COUNT(*) INTO cant + FROM pg_tables + JOIN pg_namespace ON pg_namespace.nspname = pg_tables.schemaname + JOIN pg_class ON (pg_class.relname = pg_tables.tablename AND pg_class.relnamespace = pg_namespace.oid) + JOIN pg_attribute as a0 ON a0.attrelid = pg_class.oid + WHERE pg_tables.schemaname = trim(current_schema()) + AND pg_tables.tablename = 'sga_preinscripcion_propuestas' + AND a0.attname = 'atiende' + AND a0.attnum > 0; + +IF cant = 0 THEN + ALTER TABLE sga_preinscripcion_propuestas ADD COLUMN atiende INTEGER; +END IF; +END $BODY$; + +DO $BODY$ +DECLARE cant INTEGER; +BEGIN + + SELECT COUNT(*) INTO cant + FROM pg_tables + JOIN pg_namespace ON pg_namespace.nspname = pg_tables.schemaname + JOIN pg_class ON (pg_class.relname = pg_tables.tablename AND pg_class.relnamespace = pg_namespace.oid) + JOIN pg_attribute as a0 ON a0.attrelid = pg_class.oid + WHERE pg_tables.schemaname = trim(current_schema()) + AND pg_tables.tablename = 'sga_preinscripcion_propuestas' + AND a0.attname = 'observaciones' + AND a0.attnum > 0; + +IF cant = 0 THEN + ALTER TABLE sga_preinscripcion_propuestas ADD COLUMN observaciones TEXT; +END IF; +END $BODY$; + +ALTER TABLE sga_preinscripcion_propuestas DROP CONSTRAINT IF EXISTS ck_sga_preinscripcion_propuestas_estado; +ALTER TABLE sga_preinscripcion_propuestas ADD CONSTRAINT ck_sga_preinscripcion_propuestas_estado CHECK (estado IN ('P', 'I', 'S', 'C')); + + +COMMIT WORK; \ No newline at end of file diff --git a/BD/conversion/mig_3.13.0_a_3.21.0.sql b/BD/conversion/mig_3.13.0_a_3.21.0.sql new file mode 100644 index 0000000..95dc862 --- /dev/null +++ b/BD/conversion/mig_3.13.0_a_3.21.0.sql @@ -0,0 +1,58 @@ +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Script de conversion de version 3.13.0 a 3.21.0 +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +BEGIN WORK; + +-- Versión de la base +INSERT INTO app_versiones_base(version_base, fecha_actualizacion, observaciones) + VALUES ('3.21', CURRENT_TIMESTAMP, 'Versión 3.21 de la base de Preinscripción'); + +DO $BODY$ +DECLARE cant INTEGER; +BEGIN + + -- Datos de configuracion + DELETE FROM sga_campos_conf WHERE columna ='sector' ; + DELETE FROM sga_campos_conf WHERE columna ='sub_sector' ; + + DELETE FROM sga_campos_form WHERE columna ='sector' ; + DELETE FROM sga_campos_form WHERE columna ='sub_sector' ; + + -- Se eliminan columnas "Sector" y "Subsector" dentro de "Situación laboral" + ALTER TABLE sga_preinscripcion DROP COLUMN IF EXISTS sector; + ALTER TABLE sga_preinscripcion DROP COLUMN IF EXISTS subsector; + +END $BODY$; + +-- CAMPOS RELACIONADOS CON RENAPER +DO $BODY$ +DECLARE cant INTEGER; +BEGIN + + SELECT COUNT(*) INTO cant + FROM pg_tables + JOIN pg_namespace ON pg_namespace.nspname = pg_tables.schemaname + JOIN pg_class ON (pg_class.relname = pg_tables.tablename AND pg_class.relnamespace = pg_namespace.oid) + JOIN pg_attribute as a0 ON a0.attrelid = pg_class.oid + WHERE pg_tables.schemaname = trim(current_schema()) + AND pg_tables.tablename = 'sga_preinscripcion' + AND a0.attname = 'validado_con_renaper' + AND a0.attnum > 0; + +IF cant = 0 THEN + + ALTER TABLE sga_preinscripcion ADD COLUMN validado_con_renaper Char(1) NOT NULL DEFAULT 'N'; + ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_validado_con_renaper CHECK (validado_con_renaper IN ('S','N')); + +END IF; +END $BODY$; + +-- Cambio la longitud del campo de 30 a 60 caracteres como esta en la base de G3. +ALTER TABLE sga_preinscripcion ALTER COLUMN apellido TYPE varchar(60); +ALTER TABLE sga_preinscripcion ALTER COLUMN nombres TYPE varchar(60); +ALTER TABLE sga_preinscripcion ALTER COLUMN apellido_elegido TYPE varchar(60); +ALTER TABLE sga_preinscripcion ALTER COLUMN nombres_elegido TYPE varchar(60); + +ALTER TABLE sga_preinscripcion ADD COLUMN IF NOT EXISTS codigo_validacion_alta Timestamp with time zone; + +COMMIT WORK; \ No newline at end of file diff --git a/BD/conversion/mig_3.21.0_a_3.21.1.sql b/BD/conversion/mig_3.21.0_a_3.21.1.sql new file mode 100644 index 0000000..33bbea0 --- /dev/null +++ b/BD/conversion/mig_3.21.0_a_3.21.1.sql @@ -0,0 +1,21 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Script de conversion de version 3.21.0 a 3.21.1 +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +BEGIN WORK; + +-- Versión de la base +INSERT INTO app_versiones_base(version_base, fecha_actualizacion, observaciones) + VALUES ('3.21.1', CURRENT_TIMESTAMP, 'Versión 3.21.1 de la base de Preinscripción'); + +-- +++++++++++++++ Mejora constraint "ck_sga_preinscripcion_aud_lenguaje_labial" ++++++++++++++++++++++++++++++ +DO $BODY$ +BEGIN + +ALTER TABLE sga_preinscripcion + DROP CONSTRAINT ck_sga_preinscripcion_aud_lenguaje_labial +, ADD CONSTRAINT ck_sga_preinscripcion_aud_lenguaje_labial CHECK (aud_lenguaje_labial IN ('S', 'N')); + +END $BODY$; +-- ++++++++++++++++++ Fin mejora constraint "ck_sga_preinscripcion_aud_lenguaje_labial" +++++++++++++++++++ + +COMMIT WORK; diff --git a/BD/conversion/mig_3.21.0_a_3.22.0.sql b/BD/conversion/mig_3.21.0_a_3.22.0.sql new file mode 100644 index 0000000..f3eb674 --- /dev/null +++ b/BD/conversion/mig_3.21.0_a_3.22.0.sql @@ -0,0 +1,172 @@ +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Script de conversion de version 3.21.0 a 3.22.0 +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +BEGIN WORK; + +-- Versión de la base +INSERT INTO app_versiones_base(version_base, fecha_actualizacion, observaciones) + VALUES ('3.22.0', CURRENT_TIMESTAMP, 'Versión 3.22.0 de la base de Preinscripción'); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Scripts de versiones de 3er digito de 3.21 +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- 3.21.1 +DO $BODY$ +BEGIN + +ALTER TABLE sga_preinscripcion + DROP CONSTRAINT ck_sga_preinscripcion_aud_lenguaje_labial +, ADD CONSTRAINT ck_sga_preinscripcion_aud_lenguaje_labial CHECK (aud_lenguaje_labial IN ('S', 'N')); + +END $BODY$; +-- 3.21.2 + +-- 3.21.3 +DO $BODY$ +DECLARE cant INTEGER; +BEGIN + + SELECT COUNT(*) INTO cant + FROM pg_tables + JOIN pg_namespace ON pg_namespace.nspname = pg_tables.schemaname + JOIN pg_class ON (pg_class.relname = pg_tables.tablename AND pg_class.relnamespace = pg_namespace.oid) + JOIN pg_attribute as a0 ON a0.attrelid = pg_class.oid + WHERE pg_tables.schemaname = trim(current_schema()) + AND pg_tables.tablename = 'sga_preinscripcion' + AND a0.attname = 'duplicada' + AND a0.attnum > 0; + +IF cant = 0 THEN + ALTER TABLE sga_preinscripcion ADD COLUMN duplicada Char(1) NOT NULL DEFAULT 'N'; + + + -- Datos de configuracion + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('duplicada','duplicada'); + + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','duplicada',1,0,1); + +END IF; +END $BODY$; +-- ++++++++++++++++++ Fin Agrego campos de pregunta_secreta +++++++++++++++++++ + +-- +++++++++++++++ Agrego campos de pregunta_secreta ++++++++++++++++++++++++++++++ +DO $BODY$ +DECLARE cant INTEGER; +BEGIN + + SELECT COUNT(*) INTO cant + FROM pg_tables + JOIN pg_namespace ON pg_namespace.nspname = pg_tables.schemaname + JOIN pg_class ON (pg_class.relname = pg_tables.tablename AND pg_class.relnamespace = pg_namespace.oid) + JOIN pg_attribute as a0 ON a0.attrelid = pg_class.oid + WHERE pg_tables.schemaname = trim(current_schema()) + AND pg_tables.tablename = 'sga_preinscripcion' + AND a0.attname = 'pregunta_secreta' + AND a0.attnum > 0; + +IF cant = 0 THEN + ALTER TABLE sga_preinscripcion ADD COLUMN pregunta_secreta Char(255) NOT NULL DEFAULT ''; + + + -- Datos de configuracion + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('pregunta_secreta','pregunta secreta'); + + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','pregunta_secreta',1,0,1); + +END IF; +END $BODY$; +-- ++++++++++++++++++ Fin Agrego campos de pregunta_secreta +++++++++++++++++++ + +-- +++++++++++++++ Agrego campos de respuesta secreta ++++++++++++++++++++++++++++++ +DO $BODY$ +DECLARE cant INTEGER; +BEGIN + + SELECT COUNT(*) INTO cant + FROM pg_tables + JOIN pg_namespace ON pg_namespace.nspname = pg_tables.schemaname + JOIN pg_class ON (pg_class.relname = pg_tables.tablename AND pg_class.relnamespace = pg_namespace.oid) + JOIN pg_attribute as a0 ON a0.attrelid = pg_class.oid + WHERE pg_tables.schemaname = trim(current_schema()) + AND pg_tables.tablename = 'sga_preinscripcion' + AND a0.attname = 'respuesta_secreta' + AND a0.attnum > 0; + +IF cant = 0 THEN + ALTER TABLE sga_preinscripcion ADD COLUMN respuesta_secreta Char(255) NOT NULL DEFAULT ''; + + + -- Datos de configuracion + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('respuesta_secreta','respuesta secreta'); + + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','respuesta_secreta',1,0,1); + +END IF; +END $BODY$; + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Scripts de la version 3.22.0 +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Se elimina campo "Empresa" dentro de "Situación laboral" +DELETE FROM sga_campos_conf WHERE columna = 'empresa'; +DELETE FROM sga_campos_form WHERE columna = 'empresa'; +ALTER TABLE sga_preinscripcion DROP COLUMN IF EXISTS empresa; + +-- Se elimina campo "Otra empresa" dentro de "Situación laboral" +DELETE FROM sga_campos_conf WHERE columna = 'empresa_otra'; +DELETE FROM sga_campos_form WHERE columna = 'empresa_otra'; +ALTER TABLE sga_preinscripcion DROP COLUMN IF EXISTS empresa_otra; + +-- Se elimina campo "Facilidad de estudio en la empresa" dentro de "Situación laboral" +DELETE FROM sga_campos_conf WHERE columna = 'facilidad_est_emp'; +DELETE FROM sga_campos_form WHERE columna = 'facilidad_est_emp'; +ALTER TABLE sga_preinscripcion DROP COLUMN IF EXISTS facilidad_est_emp; + +-- Se elimina campo "Facilidad de estudio en la institución" dentro de "Situación laboral" +DELETE FROM sga_campos_conf WHERE columna = 'facilidad_est_inst'; +DELETE FROM sga_campos_form WHERE columna = 'facilidad_est_inst'; +ALTER TABLE sga_preinscripcion DROP COLUMN IF EXISTS facilidad_est_inst; + +-- Creo la extensión unaccent +CREATE EXTENSION IF NOT EXISTS unaccent; + +-- Modifico la función f_limpiar_acentos +CREATE OR REPLACE FUNCTION f_limpiar_acentos(text) +RETURNS text +IMMUTABLE +STRICT +LANGUAGE SQL +AS $$ +SELECT REPLACE(REPLACE(unaccent(REPLACE(REPLACE($1, 'Ñ', '%enie_may%'), 'ñ', '%enie_min%')), '%enie_may%', 'Ñ'), '%enie_min%', 'ñ'); +$$; + +GRANT EXECUTE ON FUNCTION f_limpiar_acentos(text) to public; + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Ticket 44988 +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +alter table sga_preinscripcion alter column usuario type varchar(100); +alter table sga_preinscripcion alter column e_mail type varchar(100); +alter table sga_preinscripcion alter column apellido_padre type varchar(60); +alter table sga_preinscripcion alter column apellido_madre type varchar(60); +alter table sga_preinscripcion alter column nombres_padre type varchar(60); +alter table sga_preinscripcion alter column nombres_madre type varchar(60); + +CREATE INDEX IF NOT EXISTS id__sga_preinscripcion__codigo_validacion ON sga_preinscripcion (codigo_validacion); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Ticket 25423 +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +alter table sga_preinscripcion alter column pregunta_secreta type VARCHAR(255); +alter table sga_preinscripcion alter column respuesta_secreta type VARCHAR(255); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Ticket 47688 +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +CREATE INDEX IF NOT EXISTS id__sga_preinscripcion__apellido_nombres_fecha_nac ON sga_preinscripcion (apellido, nombres, fecha_nacimiento); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Ticket 46901 se reemplaza usuario por email +ALTER TABLE sga_preinscripcion DROP COLUMN IF EXISTS usuario;-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +COMMIT WORK; diff --git a/BD/conversion/mig_3.21.1_a_3.21.2.sql b/BD/conversion/mig_3.21.1_a_3.21.2.sql new file mode 100644 index 0000000..bdd0227 --- /dev/null +++ b/BD/conversion/mig_3.21.1_a_3.21.2.sql @@ -0,0 +1,11 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Script de conversion de version 3.21.1 a 3.21.2 +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +BEGIN WORK; + +-- Versión de la base +INSERT INTO app_versiones_base(version_base, fecha_actualizacion, observaciones) + VALUES ('3.21.2', CURRENT_TIMESTAMP, 'Versión 3.21.2 de la base de Preinscripción'); + + +COMMIT WORK; diff --git a/BD/conversion/mig_3.21.2_a_3.21.3.sql b/BD/conversion/mig_3.21.2_a_3.21.3.sql new file mode 100644 index 0000000..3b2e4de --- /dev/null +++ b/BD/conversion/mig_3.21.2_a_3.21.3.sql @@ -0,0 +1,93 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Script de conversion de version 3.21.2 a 3.21.3 +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +BEGIN WORK; + +-- Versión de la base +INSERT INTO app_versiones_base(version_base, fecha_actualizacion, observaciones) + VALUES ('3.21.3', CURRENT_TIMESTAMP, 'Versión 3.21.3 de la base de Preinscripción'); + +-- +++++++++++++++ Agrego campos de duplicada ++++++++++++++++++++++++++++++ +DO $BODY$ +DECLARE cant INTEGER; +BEGIN + + SELECT COUNT(*) INTO cant + FROM pg_tables + JOIN pg_namespace ON pg_namespace.nspname = pg_tables.schemaname + JOIN pg_class ON (pg_class.relname = pg_tables.tablename AND pg_class.relnamespace = pg_namespace.oid) + JOIN pg_attribute as a0 ON a0.attrelid = pg_class.oid + WHERE pg_tables.schemaname = trim(current_schema()) + AND pg_tables.tablename = 'sga_preinscripcion' + AND a0.attname = 'duplicada' + AND a0.attnum > 0; + +IF cant = 0 THEN + ALTER TABLE sga_preinscripcion ADD COLUMN duplicada Char(1) NOT NULL DEFAULT 'N'; + + + -- Datos de configuracion + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('duplicada','duplicada'); + + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','duplicada',1,0,1); + +END IF; +END $BODY$; +-- ++++++++++++++++++ Fin Agrego campos de pregunta_secreta +++++++++++++++++++ + +-- +++++++++++++++ Agrego campos de pregunta_secreta ++++++++++++++++++++++++++++++ +DO $BODY$ +DECLARE cant INTEGER; +BEGIN + + SELECT COUNT(*) INTO cant + FROM pg_tables + JOIN pg_namespace ON pg_namespace.nspname = pg_tables.schemaname + JOIN pg_class ON (pg_class.relname = pg_tables.tablename AND pg_class.relnamespace = pg_namespace.oid) + JOIN pg_attribute as a0 ON a0.attrelid = pg_class.oid + WHERE pg_tables.schemaname = trim(current_schema()) + AND pg_tables.tablename = 'sga_preinscripcion' + AND a0.attname = 'pregunta_secreta' + AND a0.attnum > 0; + +IF cant = 0 THEN + ALTER TABLE sga_preinscripcion ADD COLUMN pregunta_secreta Char(255) NOT NULL DEFAULT ''; + + + -- Datos de configuracion + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('pregunta_secreta','pregunta secreta'); + + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','pregunta_secreta',1,0,1); + +END IF; +END $BODY$; +-- ++++++++++++++++++ Fin Agrego campos de pregunta_secreta +++++++++++++++++++ + +-- +++++++++++++++ Agrego campos de respuesta secreta ++++++++++++++++++++++++++++++ +DO $BODY$ +DECLARE cant INTEGER; +BEGIN + + SELECT COUNT(*) INTO cant + FROM pg_tables + JOIN pg_namespace ON pg_namespace.nspname = pg_tables.schemaname + JOIN pg_class ON (pg_class.relname = pg_tables.tablename AND pg_class.relnamespace = pg_namespace.oid) + JOIN pg_attribute as a0 ON a0.attrelid = pg_class.oid + WHERE pg_tables.schemaname = trim(current_schema()) + AND pg_tables.tablename = 'sga_preinscripcion' + AND a0.attname = 'respuesta_secreta' + AND a0.attnum > 0; + +IF cant = 0 THEN + ALTER TABLE sga_preinscripcion ADD COLUMN respuesta_secreta Char(255) NOT NULL DEFAULT ''; + + + -- Datos de configuracion + INSERT INTO sga_campos_form (columna, descripcion) VALUES ('respuesta_secreta','respuesta secreta'); + + INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','respuesta_secreta',1,0,1); + +END IF; +END $BODY$; +-- ++++++++++++++++++ Fin Agrego campos de respuesta secreta +++++++++++++++++++ +COMMIT WORK; diff --git a/BD/creacion/armar_script_postgresql.bat b/BD/creacion/armar_script_postgresql.bat new file mode 100644 index 0000000..303f242 --- /dev/null +++ b/BD/creacion/armar_script_postgresql.bat @@ -0,0 +1,10 @@ +@echo off +copy nul creacion_preinscripcion3_postgresql.sql + +type ..\sql\tablas\*.sql >> creacion_preinscripcion3_postgresql.sql +type ..\sql\lenguajes\*.sql >> creacion_preinscripcion3_postgresql.sql +type ..\sql\funciones\*.sql >> creacion_preinscripcion3_postgresql.sql +type ..\sql\datos\*.sql >> creacion_preinscripcion3_postgresql.sql +type ..\sql\fks\*.sql >> creacion_preinscripcion3_postgresql.sql +type ..\sql\indices\*.sql >> creacion_preinscripcion3_postgresql.sql +type ..\sql\ck\*.sql >> creacion_preinscripcion3_postgresql.sql \ No newline at end of file diff --git a/BD/creacion/armar_script_postgresql.sh b/BD/creacion/armar_script_postgresql.sh new file mode 100644 index 0000000..ca67270 --- /dev/null +++ b/BD/creacion/armar_script_postgresql.sh @@ -0,0 +1,12 @@ +#!/bin/bash +#Este script genera el script SQL de creación de una nueva base de Preinscripción. + +touch creacion_preinscripcion3_postgresql.sql + +cat ../sql/tablas/*.sql >> creacion_preinscripcion3_postgresql.sql +cat ../sql/lenguajes/*.sql >> creacion_preinscripcion3_postgresql.sql +cat ../sql/funciones/*.sql >> creacion_preinscripcion3_postgresql.sql +cat ../sql/datos/*.sql >> creacion_preinscripcion3_postgresql.sql +cat ../sql/fks/*.sql >> creacion_preinscripcion3_postgresql.sql +cat ../sql/indices/*.sql >> creacion_preinscripcion3_postgresql.sql +cat ../sql/ck/*.sql >> creacion_preinscripcion3_postgresql.sql \ No newline at end of file diff --git a/BD/creacion/creacion_preinscripcion3_postgresql.sql b/BD/creacion/creacion_preinscripcion3_postgresql.sql new file mode 100644 index 0000000..7817459 --- /dev/null +++ b/BD/creacion/creacion_preinscripcion3_postgresql.sql @@ -0,0 +1,1629 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: admin_usuarios +-- +-- Usuarios de ADMINISTRACIÓN del módulo de preinscripcion. +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP SEQUENCE admin_usuarios_seq; +CREATE SEQUENCE admin_usuarios_seq START 1; + +-- DROP TABLE usuarios; +CREATE TABLE admin_usuarios +( + id_usuario integer DEFAULT nextval('admin_usuarios_seq'::text) NOT NULL, + usuario varchar(100) NOT NULL, + clave varchar(255) NOT NULL, + id_pto_acceso varchar NOT NULL +); + +ALTER TABLE admin_usuarios ADD CONSTRAINT pk_admin_usuarios PRIMARY KEY (id_usuario) ; +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: app_versiones_base +-- +-- Versiones de la base de datos +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP SEQUENCE app_versiones_base_seq; +CREATE SEQUENCE app_versiones_base_seq START 1; + +-- DROP TABLE IF EXISTS app_versiones_base; +CREATE TABLE app_versiones_base +( + id_conversion INTEGER NOT NULL DEFAULT nextval('app_versiones_base_seq'::text) , + version_base VARCHAR(10) NOT NULL, + fecha_actualizacion TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + script_ejecutado TEXT, + observaciones TEXT +); + +ALTER TABLE app_versiones_base ADD CONSTRAINT pk_app_versiones_base PRIMARY KEY (id_conversion); +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: cfg_perfiles_datos +-- +-- Configuración de perfiles de datos por punto de acceso +-- Para un determinado id_pto_acceso, se insertará un registro por cada RA, +-- tipo de propuesta o propuesta. +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +--DROP SEQUENCE cfg_perfiles_datos_seq; +CREATE SEQUENCE cfg_perfiles_datos_seq START 1; + +--DROP TABLE IF EXISTS cfg_perfiles_datos; +CREATE TABLE cfg_perfiles_datos +( + cfg_perfil_datos INTEGER DEFAULT nextval('cfg_perfiles_datos_seq'::text) NOT NULL, + id_pto_acceso VARCHAR NOT NULL, + ra INTEGER, + propuesta_tipo INTEGER, + propuesta INTEGER, + ubicacion INTEGER +); + +ALTER TABLE cfg_perfiles_datos ADD CONSTRAINT pk_cfg_perfiles_datos PRIMARY KEY (cfg_perfil_datos); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: sga_actuacion_doc +-- +-- Datos de actuación docente de aspirantes +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +--DROP SEQUENCE sga_actuacion_doc_seq; +CREATE SEQUENCE sga_actuacion_doc_seq START 1; + +-- DROP TABLE sga_actuacion_doc; +CREATE TABLE sga_actuacion_doc +( + actuacion_doc INTEGER DEFAULT nextval('sga_actuacion_doc_seq'::text) NOT NULL , + id_preinscripcion INTEGER NOT NULL, + institucion INTEGER, + institucion_prein VARCHAR(255), + cargo VARCHAR(255), + materia VARCHAR(255), + hora_sem_trab INTEGER, + fecha_desde DATE, + fecha_hasta DATE +); + +ALTER TABLE sga_actuacion_doc ADD CONSTRAINT pk_sga_actuacion_doc PRIMARY KEY (actuacion_doc); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: sga_actuacion_prof +-- +-- Datos de actuación profesional de aspirantes +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +--DROP SEQUENCE sga_actuacion_prof_seq; +CREATE SEQUENCE sga_actuacion_prof_seq START 1; + +-- DROP TABLE sga_actuacion_prof; +CREATE TABLE sga_actuacion_prof +( + actuacion_prof INTEGER DEFAULT nextval('sga_actuacion_prof_seq'::text) NOT NULL, + id_preinscripcion INTEGER NOT NULL, + empresa VARCHAR(255), + cargo VARCHAR(255), + area VARCHAR(255), + hora_sem_trab INTEGER, + fecha_desde DATE, + fecha_hasta DATE +); + +ALTER TABLE sga_actuacion_prof ADD CONSTRAINT pk_sga_actuacion_prof PRIMARY KEY (actuacion_prof); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: sga_actuacion_doc +-- +-- Configuración de los campos del formulario por tipo de propuesta. +-- visible, obligatorio, se_imprime, genera_reporte: 1 = Si / 0 = No +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP TABLE sga_campos_conf; +CREATE TABLE sga_campos_conf +( + propuesta_tipo INTEGER NOT NULL, + columna VARCHAR(40) NOT NULL, + visible SMALLINT NOT NULL DEFAULT 1, + obligatorio SMALLINT NOT NULL DEFAULT 0, + se_imprime SMALLINT NOT NULL DEFAULT 1, + genera_reporte SMALLINT NOT NULL DEFAULT 0 +); + +ALTER TABLE sga_campos_conf ADD CONSTRAINT pk_campos_conf PRIMARY KEY (propuesta_tipo, columna); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: sga_actuacion_doc +-- +-- Campos del formulario de Preinscripción +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP TABLE sga_campos_form; +CREATE TABLE sga_campos_form +( + columna VARCHAR(40) NOT NULL, + descripcion VARCHAR(300) +); + +ALTER TABLE sga_campos_form ADD CONSTRAINT pk_campos_form PRIMARY KEY (columna); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: sga_formacion_acad +-- +-- Datos de formación académica de aspirantes +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +--DROP SEQUENCE sga_formacion_acad_seq; +CREATE SEQUENCE sga_formacion_acad_seq START 1; + +-- DROP TABLE sga_formacion_acad; +CREATE TABLE sga_formacion_acad +( + formacion_acad INTEGER DEFAULT nextval('sga_formacion_acad_seq'::text) NOT NULL, + id_preinscripcion INTEGER NOT NULL, + titulo_superior VARCHAR(5), + titulo_sup_prein VARCHAR(255), + institucion INTEGER, + institucion_prein VARCHAR(255), + fecha_ingreso DATE, + fecha_egreso DATE, + titulo_tesis VARCHAR(255), + director_tesis VARCHAR(255), + categoria_coneau CHAR(2), + duracion_teorica INTEGER, + nivel_estudio INTEGER, -- nivel_estudio: 4 = Superior / 5 = Universitario / 6 = Posgrado + estado CHAR(1) -- estado: F = Finalizado / A = Abandonado / C = En Curso +); + +ALTER TABLE sga_formacion_acad ADD CONSTRAINT pk_sga_formacion_acad PRIMARY KEY (formacion_acad); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0, 3.12.0, 3.21.0, 3.22.0 +-- Tabla: sga_preinscripcion +-- +-- Formulario de Preinscripción +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +--DROP SEQUENCE sga_preinscripcion_seq; +CREATE SEQUENCE IF NOT EXISTS sga_preinscripcion_seq START 1; + +-- DROP TABLE IF EXISTS sga_preinscripcion; +CREATE TABLE sga_preinscripcion +( + id_preinscripcion INTEGER DEFAULT nextval('sga_preinscripcion_seq'::text) NOT NULL, + --usuario VARCHAR(100) NOT NULL, + clave VARCHAR(255) NOT NULL, + codigo_validacion VARCHAR(127), + codigo_validacion_alta Timestamp with time zone, + email_valido TIMESTAMP, + facebook VARCHAR(100), + google VARCHAR(100), + fecha_registro TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + fecha_ult_modif DATE NOT NULL, + version_modificacion INTEGER NOT NULL, + version_impresa INTEGER, + persona INTEGER, -- Para completar por G3 al incorporar + duplicada Char(1) NOT NULL DEFAULT 'N', + pregunta_secreta VARCHAR(255) NOT NULL DEFAULT '', + respuesta_secreta VARCHAR(255) NOT NULL DEFAULT '', + ---------------------------------------------------------------------------- + + -- Datos personales principales + apellido VARCHAR(60) NOT NULL, + nombres VARCHAR(60) NOT NULL, + apellido_elegido VARCHAR(60) , + nombres_elegido VARCHAR(60) , + pais_documento INTEGER NOT NULL, + tipo_documento INTEGER NOT NULL, + nro_documento VARCHAR(20) NOT NULL, + validado_con_renaper CHAR(1) NOT NULL DEFAULT 'N', + numero_cuil VARCHAR(15), + sexo CHAR(1), + identidad_genero INTEGER, + identidad_genero_otro VARCHAR(100), + fecha_nacimiento DATE, + nacionalidad INTEGER, + loc_nacimiento INTEGER, + turno_preferido VARCHAR(20), -- Turno preferido de cursada + + -- Colegio secundario + es_mayor_25_sin_secundario Char(1) NOT NULL DEFAULT 'N', + colegio_secundario INTEGER, + titulo_secundario INTEGER, + anio_egreso_sec INTEGER, + + -- Cedula de Identidad - Pasaporte + ent_emisora_ci INTEGER, + nro_ci DECIMAL(15,0), + pais_emisor_pasap INTEGER, + nro_pasap VARCHAR(15), + + -- Datos padres + apellido_padre VARCHAR(60), + nombres_padre VARCHAR(60), + apellido_madre VARCHAR(60), + nombres_madre VARCHAR(60), + + -- Datos censales - personales + alu_est_civil_uh CHAR(1), + alu_trab_hace CHAR(1), + alu_trab_desjub CHAR(1), + alu_trab_fami CHAR(1), + alu_trab_ocup CHAR(1), + alu_trab_tarea VARCHAR(255), + padre_trab_hace CHAR(1), + padre_trab_ocup CHAR(1), + padre_trab_otro CHAR(1), + padre_trab_tarea VARCHAR(255), + madre_trab_hace CHAR(1), + madre_trab_ocup CHAR(1), + madre_trab_otro CHAR(1), + madre_trab_tarea VARCHAR(255), + alu_cos_est_ap_fam CHAR(1), + alu_cos_est_trab CHAR(1), + alu_cos_est_beca CHAR(1), + alu_cos_est_plsoc CHAR(1), + alu_cos_est_otra CHAR(1), + alu_cos_est_espec VARCHAR(255), + alu_beca_muni CHAR(1), + alu_beca_otra CHAR(1), + alu_beca_prov CHAR(1), + alu_beca_tipo_eco CHAR(1), + alu_beca_tipo_ser CHAR(1), + alu_beca_tipo_inv CHAR(1), + alu_beca_eco_tran CHAR(1), + alu_beca_eco_come CHAR(1), + alu_beca_eco_foto CHAR(1), + alu_beca_eco_efec CHAR(1), + alu_beca_eco_habi CHAR(1), + alu_otestsup_uni VARCHAR(255), + alu_otestsup_tipo CHAR(1), + alu_otestsup_area VARCHAR(255), + alu_otestsup_carr VARCHAR(255), + alu_otestsup_esta CHAR(1), + alu_otestsup_razon_abandono INTEGER, + alu_otestsup_razon_abandono_otros VARCHAR(200), + alu_otestsup_egre INTEGER, + alu_otestsup_niv CHAR(1), + alu_tec_pc_casa CHAR(1), + alu_tec_pc_trab CHAR(1), + alu_tec_pc_univ CHAR(1), + alu_tec_pc_otro CHAR(1), + alu_tec_int_movil CHAR(1), + alu_tec_int_casa CHAR(1), + alu_tec_int_trab CHAR(1), + alu_tec_int_univ CHAR(1), + alu_tec_int_otro CHAR(1), + alu_idioma_ingl CHAR(1), + alu_idioma_fran CHAR(1), + alu_idioma_port CHAR(1), + alu_idioma_ital CHAR(1), + alu_idioma_alem CHAR(1), + alu_idioma_chino CHAR(1), + alu_idioma_otro VARCHAR(20), + alu_idioma_otro_nivel CHAR(1), + sec_egreso CHAR(1), + o_est_ter_estado CHAR(1), + o_est_uni_estado CHAR(1), + sit_actual_padre CHAR(1), + sit_actual_madre CHAR(1), + tit_obt_padre VARCHAR(60), + tit_obt_madre VARCHAR(60), + cant_fami_cargo INTEGER, + cant_empl_cargo INTEGER, + barrio_per_lec VARCHAR(60), + barrio_proc VARCHAR(60), + barrio_alleg VARCHAR(60), + pais_nacionalidad INTEGER, + existe_trab_alum INTEGER, + cant_hijos_alum INTEGER, + vive_actual_con INTEGER, + obra_social_alu CHAR(1), + obra_social_trab CHAR(1), + obra_social_fami CHAR(1), + obra_social_univ CHAR(1), + costea_estudios INTEGER, + tiene_beca CHAR(1), + tiene_beca_univ CHAR(1), + tiene_beca_nacio CHAR(1), + tiene_beca_inter CHAR(1), + remuneracion CHAR(1), + hora_sem_trab_alum INTEGER, + practica_deportes CHAR(1), + hace_dep_univ CHAR(1), + hace_dep_gim_priv CHAR(1), + hace_dep_partic CHAR(1), + hace_dep_otros CHAR(1), + prac_dep_futbol CHAR(1), + prac_dep_basquet CHAR(1), + prac_dep_voley CHAR(1), + prac_dep_gimnasia CHAR(1), + prac_dep_tenis CHAR(1), + prac_dep_natacion CHAR(1), + prac_dep_handball CHAR(1), + prac_dep_otros CHAR(1), + padre_vive CHAR(1), + madre_vive CHAR(1), + vive_con_conyuge INTEGER, + vive_con_padre INTEGER, + vive_con_madre INTEGER, + vive_con_hijos INTEGER, + vive_con_hermanos INTEGER, + celular_numero VARCHAR(18), + celular_compania VARCHAR(5), + estado_civil INTEGER, + e_mail VARCHAR(100), + tipo_visa VARCHAR(20), + otorgamiento_visa DATE, + vencimiento_visa DATE, + tipo_residencia CHAR(1), + tipo_res_per_lect INTEGER, + calle_per_lect VARCHAR(50), + numero_per_lect VARCHAR(10), + piso_per_lect VARCHAR(3), + dpto_per_lect VARCHAR(5), + unidad_per_lect VARCHAR(3), + loc_per_lect INTEGER, + cp_per_lect VARCHAR(15), + te_per_lect VARCHAR(18), + calle_proc VARCHAR(50), + numero_proc VARCHAR(10), + piso_proc VARCHAR(3), + dpto_proc VARCHAR(5), + unidad_proc VARCHAR(3), + loc_proc INTEGER, + cp_proc VARCHAR(15), + te_proc VARCHAR(18), + otros_estud_super VARCHAR(60), + fliares_cargo_alum VARCHAR(60), + sit_laboral_alu INTEGER, + categ_ocup_alum INTEGER, + act_econom_alum INTEGER, + det_rama_act_alum VARCHAR(60), + rel_trab_propuesta INTEGER, + sit_laboral_padre INTEGER, + ult_est_cur_padre INTEGER, + act_econom_padre INTEGER, + det_rama_act_padre VARCHAR(60), + categ_ocup_padre INTEGER, + sit_laboral_madre INTEGER, + ult_est_cur_madre INTEGER, + act_econom_madre INTEGER, + det_rama_act_madre VARCHAR(60), + categ_ocup_madre INTEGER, + apellido_pers_alleg VARCHAR(60), + nombre_pers_alleg VARCHAR(60), + tipo_allegado CHAR(1), + calle_pers_alleg VARCHAR(50), + nro_pers_alleg VARCHAR(10), + piso_pers_alleg VARCHAR(3), + dpto_pers_alleg VARCHAR(5), + unidad_pers_alleg VARCHAR(3), + loc_pers_alleg INTEGER, + cp_pers_alleg VARCHAR(15), + te_pers_alleg VARCHAR(18), + residencia CHAR(1), + fecha_respre_otorg DATE, + fecha_respre_venc DATE, + -- Pueblos originacios + pertenece_pueblo_originario CHAR(1), + pueblo_originario INTEGER, + pueblo_originario_otro VARCHAR(100), + -- Inscripto en otra Institución + insc_otra_inst CHAR(1), + insc_otra_inst_descr VARCHAR(100), + -- Cómo conocío la institución + como_conocio_institucion VARCHAR(255), + -- Orientación vocacional + orientacion_recibida INTEGER, + -- Motivos de elección de la Institución + mot_inst_econom CHAR(1), + mot_inst_prestigio CHAR(1), + mot_inst_difusion CHAR(1), + mot_inst_rec_estud CHAR(1), + mot_inst_rec_amigos CHAR(1), + mot_inst_sist_ing CHAR(1), + mot_inst_ubicacion CHAR(1), + mot_inst_otros CHAR(1), + -- Motivos de elección de Propuesta + mot_prop_vocacion CHAR(1), + mot_prop_sug_fam CHAR(1), + mot_prop_rec_social CHAR(1), + mot_prop_ins_lab CHAR(1), + mot_prop_perf_prof CHAR(1), + mot_prop_mejora_ec CHAR(1), + mot_prop_util_soc CHAR(1), + mot_prop_otros CHAR(1), + -- Es celíaco + es_celiaco CHAR(1), + -- Discapacidad + condicion_discapacidad Char(1) NOT NULL DEFAULT 'N', + tiene_cud Char(1) DEFAULT 'N', + disc_auditiva Char(1) DEFAULT 'N', + aud_tipo Smallint DEFAULT 1, + aud_lenguaje_senias Char(1) DEFAULT 'N', + aud_lenguaje_labial Char(1) DEFAULT 'N', + aud_comunicacion_otra Text, + aud_apoyo_vida_diaria Text, + aud_req_interprete_lengua_senias Char(1) DEFAULT 'N', + aud_req_aro_magnetico Char(1) DEFAULT 'N', + aud_req_otros_apoyos Char(1) DEFAULT 'N', + aud_otros_apoyos Text, + disc_visual Char(1) DEFAULT 'N', + vis_dificultad_para_ver Smallint DEFAULT 1, + vis_apoyo_vida_diaria Text, + vis_req_archivo_audio Char(1) DEFAULT 'N', + vis_req_texto_digital Char(1) DEFAULT 'N', + vis_req_texto_braile Char(1) DEFAULT 'N', + vis_req_otros_apoyos Char(1) DEFAULT 'N', + vis_otros_apoyos Text, + disc_motora Char(1) DEFAULT 'N', + mot_apoyo_vida_diaria Text, + mot_req_apoyo_aula Char(1) DEFAULT 'N', + mot_apoyo_aula Text, + mot_req_otros_apoyos Char(1) DEFAULT 'N', + mot_otros_apoyos Text, + disc_cond_psicosocial Char(1) DEFAULT 'N', + psi_descripcion Text, + psi_apoyo_vida_diaria Text, + psi_req_otros_apoyos Char(1) DEFAULT 'N', + psi_otros_apoyos Text, + disc_otra Char(1) DEFAULT 'N', + otra_descripcion Text, + otra_req_apoyo_vida_diaria Char(1) DEFAULT 'N', + otra_apoyo_vida_diaria Text, + informacion_importante Text, + -- Adeuda materias + adeuda_materias CHAR(1), + estado CHAR(1) NOT NULL -- P = Pendiente de activacion + -- A = Activado. La persona respondió el mail enviado + -- C = Comprobante impreso. Preparado para ingresarlo en Guarani + -- I = Inscripto en Gestión +); + +ALTER TABLE sga_preinscripcion ADD CONSTRAINT pk_sga_preinscripcion PRIMARY KEY (id_preinscripcion); + +---- Valores por defecto para campos "booleanos" ------------------------------- + +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_est_civil_uh SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_trab_desjub SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_trab_fami SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN remuneracion SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN practica_deportes SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN hace_dep_gim_priv SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN hace_dep_univ SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN hace_dep_partic SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN hace_dep_otros SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN prac_dep_futbol SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN prac_dep_basquet SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN prac_dep_voley SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN prac_dep_gimnasia SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN prac_dep_tenis SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN prac_dep_natacion SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN prac_dep_handball SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN prac_dep_otros SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_cos_est_ap_fam SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_cos_est_plsoc SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_cos_est_trab SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_cos_est_beca SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_cos_est_otra SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN tiene_beca SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN tiene_beca_univ SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN tiene_beca_inter SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN tiene_beca_nacio SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_prov SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_muni SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_otra SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_tipo_eco SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_tipo_ser SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_tipo_inv SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_eco_tran SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_eco_efec SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_eco_foto SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_eco_habi SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_eco_come SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_pc_casa SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_pc_trab SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_pc_univ SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_pc_otro SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_int_casa SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_int_trab SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_int_univ SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_int_movil SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_int_otro SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN insc_otra_inst SET DEFAULT 'N'; + +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_inst_econom SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_inst_prestigio SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_inst_difusion SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_inst_rec_estud SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_inst_rec_amigos SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_inst_sist_ing SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_inst_ubicacion SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_inst_otros SET DEFAULT 'N'; + +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_prop_vocacion SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_prop_sug_fam SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_prop_rec_social SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_prop_ins_lab SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_prop_perf_prof SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_prop_mejora_ec SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_prop_util_soc SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_prop_otros SET DEFAULT 'N'; + +ALTER TABLE sga_preinscripcion ALTER COLUMN adeuda_materias SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN insc_otra_inst SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN es_celiaco SET DEFAULT 'N'; +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0, 3.13.0 +-- Tabla: sga_preinscripcion_propuestas +-- +-- Propuestas en las que se ha preinscripto un aspirante +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +--DROP SEQUENCE sga_preinscripcion_propuestas_seq; +CREATE SEQUENCE sga_preinscripcion_propuestas_seq START 1; + +-- DROP TABLE sga_preinscripcion_propuestas; +CREATE TABLE sga_preinscripcion_propuestas +( + preinscripcion_propuesta INTEGER NOT NULL DEFAULT nextval('sga_preinscripcion_propuestas_seq'::text) , + id_preinscripcion INTEGER NOT NULL, + responsable_academica INTEGER NOT NULL, + propuesta INTEGER NOT NULL, + ubicacion INTEGER NOT NULL, + modalidad CHAR(1) NOT NULL DEFAULT 'P', + periodo_insc INTEGER NOT NULL, + fecha_preinscripcion TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + fecha_fin_vigencia DATE NOT NULL, + estado CHAR(1) NOT NULL DEFAULT 'P', -- P: Pendiente de inscripción, I: Inscripto en Gestión, C: Copiado al modelo de Gestión, S: Solicitud de informacion al aspirante + atiende INTEGER, + observaciones TEXT +); + +ALTER TABLE sga_preinscripcion_propuestas ADD CONSTRAINT pk_sga_preinscripcion_propuestas PRIMARY KEY (preinscripcion_propuesta); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: sga_propuestas_tipos +-- +-- Tipos de propuestas formativas +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP TABLE IF EXISTS sga_propuestas_tipos; +CREATE TABLE sga_propuestas_tipos +( + propuesta_tipo INTEGER NOT NULL, + descripcion VARCHAR(100) NOT NULL +); + +-- ALTER TABLE sga_propuestas_tipos DROP CONSTRAINT pk_sga_propuestas_tipos; +ALTER TABLE sga_propuestas_tipos ADD CONSTRAINT pk_sga_propuestas_tipos PRIMARY KEY (propuesta_tipo); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.8.0 +-- Tabla: sga_requisitos_digitales +-- +-- Requisitos digitales presentados por un aspirante +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP SEQUENCE sga_requisitos_digitales_seq; +CREATE SEQUENCE sga_requisitos_digitales_seq START 1; + +-- DROP TABLE IF EXISTS sga_requisitos_digitales; +CREATE TABLE sga_requisitos_digitales +( + requisito_digital INTEGER NOT NULL DEFAULT nextval('sga_requisitos_digitales_seq'::text) , + id_preinscripcion INTEGER NOT NULL, + requisito INTEGER NOT NULL, + id_documento TEXT NOT NULL, + estado CHAR(1) DEFAULT 'P' NOT NULL -- P: Pendiente de validación | A: Aceptado en G3 | R: Rechazado en G3 +); + +-- ALTER TABLE sga_requisitos_digitales DROP CONSTRAINT pk_sga_requisitos_digitales; +ALTER TABLE sga_requisitos_digitales ADD CONSTRAINT pk_sga_requisitos_digitales PRIMARY KEY (requisito_digital); + +Revoke all ON sga_requisitos_digitales FROM public; +-- ++++++++++++++++++++++++++ Fin tabla sga_requisitos_digitales +++++++++++++++++++++++++++++ + + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Se chequea la existencia del lenguaje plpgsql. Si no existe, se lo crea +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +CREATE OR REPLACE FUNCTION create_language_plpgsql() +RETURNS BOOLEAN AS $$ + CREATE LANGUAGE plpgsql; + SELECT TRUE; +$$ LANGUAGE SQL; + +SELECT CASE WHEN NOT +( + SELECT TRUE AS exists + FROM pg_language + WHERE lanname = 'plpgsql' + UNION + SELECT FALSE AS exists + ORDER BY exists DESC + LIMIT 1 +) +THEN + create_language_plpgsql() +ELSE + FALSE +END AS plpgsql_created; + +DROP FUNCTION create_language_plpgsql(); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Function: f_limpiar_acentos +-- +-- Quita los tildes de una cadena de caracteres +-- +-- Recibe: Text - Cadena a quitar los tildes +-- Retorna: Text - Texto sin tildes +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- Creo la extensión unaccent +CREATE EXTENSION IF NOT EXISTS unaccent; + +-- DROP FUNCTION f_limpiar_acentos(text); +CREATE OR REPLACE FUNCTION f_limpiar_acentos(text) +RETURNS text +IMMUTABLE +STRICT +LANGUAGE SQL +AS $$ +SELECT REPLACE(REPLACE(unaccent(REPLACE(REPLACE($1, 'Ñ', '%enie_may%'), 'ñ', '%enie_min%')), '%enie_may%', 'Ñ'), '%enie_min%', 'ñ'); +$$; + +GRANT EXECUTE ON FUNCTION f_limpiar_acentos(text) to public; + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: sga_propuestas_tipos +-- Tipos de propuestas formativas +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (200, 'Grado'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (201, 'Pregrado'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (202, 'Posgrado'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (203, 'Ciclo Básico o Común'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (204, 'Curso de Ingreso'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (205, 'Postítulo'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (206, 'Terciario'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (207, 'Vocacional'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (208, 'Cursos'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (209, 'Convenio'); + +DELETE FROM sga_campos_form; + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('id_preinscripcion',''); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('clave',''); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('fecha_registro','Fecha Inscripción'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('fecha_ult_modif',''); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('version_modificacion',''); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('estado','Estado'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('apellido','Apellido'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nombres','Nombres'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('sexo','Género'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('fecha_nacimiento','Fecha de nacimiento'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nacionalidad','Nacionalidad'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('loc_nacimiento','Localidad de nacimiento'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('es_mayor_25_sin_secundario','Es mayor de 25 años y no tiene estudios secundarios'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('colegio_secundario','Colegio secundario'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('titulo_secundario','Titulo secundario'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('anio_egreso_sec','Año de egreso del colegio secundario'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('pais_emisor_pasap','País emisor del pasaporte'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nro_pasap','Número de pasaporte'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('apellido_padre','Apellido del padre'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nombres_padre','Nombres del padre'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('apellido_madre','Apellido de la madre'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nombres_madre','Nombres de la madre'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('estado_civil','Estado civil'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('e_mail','Correo electrónico'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tipo_visa','Tipo de visa'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('otorgamiento_visa','Fecha de otorgamiento de la visa'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vencimiento_visa','Vencimiento de la visa'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tipo_residencia','Tipo de residencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('calle_proc','Calle de la localidad de procedencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('numero_proc','Numero de calle de la localidad de procedencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('piso_proc','Piso de la localidad de procedencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('dpto_proc','Departamento de la localidad de procedencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('unidad_proc','Unidad de la localidad de procedencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('loc_proc','Localidad de procedencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('cp_proc','Código postal de la localidad de procedencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('te_proc','Teléfono de la localidad de procedencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('pais_documento','País emisor del documento'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tipo_documento','Tipo de documento'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nro_documento','Numero de documento'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('ult_est_cur_padre','Últimos estudios cursados por el padre'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('ult_est_cur_madre','Últimos estudios cursados por la madre'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('hora_sem_trab_alum','Horas semanales trabajadas por el alumno'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('rel_trab_propuesta','Relación del trabajo con la propuesta'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nro_ci','Numero de cedula de identidad'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('ent_emisora_ci','Entidad emisora de la célula de identidad'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tipo_res_per_lect','Tipo de residencia del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('calle_per_lect','Calle de la localidad del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('numero_per_lect','Numero de calle de la localidad del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('piso_per_lect','Piso de la localidad del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('dpto_per_lect','Departamento de la localidad del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('unidad_per_lect','Unidad de la localidad del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('loc_per_lect','Localidad del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('cp_per_lect','Código postal de la localidad del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('te_per_lect','Teléfono de la dirección del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('sit_laboral_padre','Situación laboral del padre'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('sit_laboral_madre','Situación laboral de la madre'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('apellido_pers_alleg','Apellido allegado'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nombre_pers_alleg','Nombre de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tipo_allegado','Relación allegado'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('calle_pers_alleg','Calle de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nro_pers_alleg','Numero de calle de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('piso_pers_alleg','Piso de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('dpto_pers_alleg','Departamento de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('unidad_pers_alleg','Unidad de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('loc_pers_alleg','Localidad de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('cp_pers_alleg','Código postal de la localidad de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('te_pers_alleg','Teléfono de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('cant_hijos_alum','Cantidad de hijos del alumno'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('obra_social_alu','Tiene obra social o no'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('terciario_nombre_1','Nombre de la institucion terciaria (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('terciario_titulo_1','Titulo obtenido en la institucion terciaria (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('terciario_estado_1','Nivel alcanzado en la institucion terciaria (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('terciario_nombre_2','Nombre de la institucion terciaria (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('terciario_titulo_2','Titulo obtenido en la institucion terciaria (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('terciario_estado_2','Nivel alcanzado en la institucion terciaria (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('universit_nombre_1','Nombre de la universidad (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('universit_titulo_1','Titulo obtenido en la universidad (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('universit_estado_1','Nivel alcanzado en la universidad (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('universit_nombre_2','Nombre de universidad (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('universit_titulo_2','Titulo obtenido en la universidad (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('universit_estado_2','Nivel alcanzado en la universidad (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('postgrado_nombre_1','Institucion donde realizo el postgrado (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('postgrado_titulo_1','Titulo del postgrado (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('postgrado_estado_1','Nivel alcanzado (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('postgrado_nombre_2','Institucion donde realizo el postgrado (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('postgrado_titulo_2','Titulo del postgrado (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('postgrado_estado_2','Nivel alcanzado (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('antecedente_1','Antecedentes académicos (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('antecedente_2','Antecedentes académicos (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('antecedente_3','Antecedentes académicos (iii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('actividad_academica','Actividad académica realizada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('titulo_tentativo','Titulo de postgrado tentativo '); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('area_tematica','Área temática'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('existe_trab_alum','Existencia de trabajo:'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('remuneracion','Remunerado'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('numero_cuil','Número de C.U.I.L.'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_est_civil_uh','Se encuentra unido de hecho'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_trab_hace','En ese trabajo es usted'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_trab_desjub','¿Le hacen descuentos jubilatorios?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_trab_fami','Trabaja en el negocio o empresa de un familiar?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_trab_ocup','Esa ocupación es'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_trab_tarea','Describa la tarea que realiza'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('padre_trab_hace','Padre - En ese trabajo es'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('padre_trab_ocup','Padre - Esa ocupación es'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('padre_trab_otro','Si no trabaja y no busca trabajo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('padre_trab_tarea','Padre - Describa la tarea que realizar'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('madre_trab_hace','Madre - En ese trabajo es'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('madre_trab_ocup','Madre - Esa ocupación es'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('madre_trab_otro','Si no trabaja y no busca trabajo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('madre_trab_tarea','Madre - Describa la tarea que realizar'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_cos_est_ap_fam','Con el aporte de familiares'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_cos_est_trab','Con su trabajo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_cos_est_beca','Con beca'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_cos_est_plsoc','Planes sociales'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_cos_est_otra','Otras fuentes'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_cos_est_espec','Fuente'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_muni','Municipal'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_otra','Otra'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_prov','Provincial'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_tipo_eco','De ayuda económica'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_tipo_ser','De contraprestación de servicios'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_tipo_inv','De investigación'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_eco_tran','Transporte'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_eco_come','Comedor'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_eco_foto','Fotocopia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_eco_efec','Efectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_eco_habi','Habitacional'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_uni','Universidad/Institución'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_tipo','Tipo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_area','Áreas'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_carr','Otros Estudios - Propuesta'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_esta','Otros Estudios - Estado'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_egre','Año de egreso'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_niv','Nivel'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_pc_casa','Tiene PC en su casa'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_pc_trab','Tiene PC en el trabajo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_pc_univ','Tiene PC en la universidad'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_pc_otro','Tiene PC en otro lugar'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_int_casa','Consulta Internet en su casa'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_int_trab','Consulta Internet en el trabajo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_int_univ','Consulta Internet en la universidad'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_int_movil','Consulta Internet en un dispositivo móvil'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_int_otro','Consulta Internet en otro lugar'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_idioma_ingl','Inglés'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_idioma_fran','Francés'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_idioma_port','Portugués'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_idioma_ital','Italiano'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_idioma_alem','Alemán'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_idioma_chino','Chino'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_idioma_otro','Otro'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_idioma_otro_nivel','Nivel'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('practica_deportes','Practica deportes'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('hace_dep_univ','Deportes en la Universidad'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('hace_dep_gim_priv','Deportes en gimnasio privado'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('hace_dep_partic','Deportes en gimnasio particular'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('hace_dep_otros','Deportes en otros lados'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('prac_dep_futbol','Practica Futbol'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('prac_dep_basquet','Practica Básquet'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('prac_dep_voley','Practica Voley'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('prac_dep_gimnasia','Practica gimnasia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('prac_dep_tenis','Practica tenis'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('prac_dep_natacion','Practica Natación'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('prac_dep_handball','Practica Handball'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('prac_dep_otros','Practica otros deportes'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vive_actual_con','Vive actualmente con'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('celular_numero','Número Celular'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('celular_compania','Compañía Celular'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tiene_beca_inter','Tiene beca internacional'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tiene_beca','Tiene beca'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tiene_beca_univ','Tiene beca universitaria'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tiene_beca_nacio','Tiene beca nacional'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('cant_fami_cargo','Cantidad Familiares a cargo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('padre_vive','¿Padre Vive?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('madre_vive','¿Madre Vive?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('residencia', 'Tipo de residencia - Extranjeros'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('fecha_respre_otorg', 'Fecha de otorgamiento de la residencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('fecha_respre_venc', 'Fecha de vencimiento de la residencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('turno_preferido','Turno preferido'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('barrio_per_lec','Barrio (período lectivo)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('barrio_proc','Barrio (procedencia)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('barrio_alleg','Barrio (persona allegada)'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('insc_otra_inst','¿Estás inscripto en otra institución?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('insc_otra_inst_descr','¿En cuál?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('como_conocio_institucion','¿Cómo conociste la Institución?'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('pertenece_pueblo_originario','¿Pertenecés a algún pueblo originario?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('pueblo_originario','¿A cuál?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('pueblo_originario_otro','Nombre'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('orientacion_recibida','Orientación vocacional recibida'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('es_celiaco','¿Sos celíaco?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('adeuda_materias', '¿Adeudás materias?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_razon_abandono', 'Razón de abandono'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_razon_abandono_otros', 'Especificar razón de abandono'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_inst_econom', 'Por cuestiones económicas / bajo costo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_inst_prestigio', 'Por el prestigio'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_inst_difusion', 'Por la difusión'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_inst_rec_estud', 'Por recomendación de otros estudiantes / graduados'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_inst_rec_amigos', 'Por recomendación de amigos / familiares'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_inst_sist_ing', 'Por el sistema de ingreso'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_inst_ubicacion', 'Ubicación geográfica'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_inst_otros', 'Otros'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_prop_vocacion', 'Vocación'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_prop_sug_fam', 'Sugerencia del núcleo familiar'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_prop_rec_social', 'Reconocimiento social'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_prop_ins_lab', 'Rápida inserción laboral'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_prop_perf_prof', 'Perfil profesional'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_prop_mejora_ec', 'Mejora de las condiciones económicas'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_prop_util_soc', 'Deseo de ser útil a la sociedad'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_prop_otros', 'Otros'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('condicion_discapacidad', 'Condición de Discapacidad'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tiene_cud', 'Tenés CUD'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('disc_auditiva', 'Auditiva'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_tipo', '¿Tenés dificultad para oír, incluso si usás un audífono o implante coclear?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_lenguaje_senias', 'Lengua de Señas'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_lenguaje_labial', 'Lectura labial'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_comunicacion_otra', 'Otra forma'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_apoyo_vida_diaria', '¿Qué apoyos utilizás en tu vida diaria?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_req_interprete_lengua_senias', 'Requerís Intérprete de Lengua de Señas Argentina'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_req_aro_magnetico', 'Requerís Aro magnético'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_req_otros_apoyos', '¿Requerís otros apoyos?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_otros_apoyos', 'Especificar cuáles'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('disc_visual', 'Visual'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_dificultad_para_ver', '¿Tenés dificultad para ver, incluso si usás lentes?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_apoyo_vida_diaria', '¿Qué apoyos utilizás en tu vida diaria?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_req_archivo_audio', 'Requerís Archivos de audio'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_req_texto_digital', 'Requerís Texto digital accesible'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_req_texto_braile', 'Requerís Texto en Braille'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_req_otros_apoyos', '¿Requerís otros apoyos?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_otros_apoyos', 'Especificar cuáles'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('disc_motora', 'Motora'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_apoyo_vida_diaria', '¿Qué apoyos utilizás en tu vida diaria?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_req_apoyo_aula', '¿Requerís apoyos para la permanencia en el aula?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_apoyo_aula', '¿Cuáles?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_req_otros_apoyos', '¿Requerís otros apoyos?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_otros_apoyos', 'Especificar cuáles'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('disc_cond_psicosocial', 'Condición Psicosocial'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('psi_descripcion', '¿Cuál?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('psi_apoyo_vida_diaria', '¿Qué apoyos utilizás en tu vida diaria?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('psi_req_otros_apoyos', '¿Requerís otros apoyos?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('psi_otros_apoyos', 'Especificar cuáles'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('disc_otra', 'Otra'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('otra_descripcion', '¿Cuál/cuáles?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('otra_req_apoyo_vida_diaria', '¿Requiere otros apoyos?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('otra_apoyo_vida_diaria', 'Especificar cuáles'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('informacion_importante', 'Alguna otra información que consideres importante comunicar'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('apellido_elegido', 'apellido elegido'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nombres_elegido', 'nombres elegido'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('identidad_genero', 'identidad de genero elegido'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('identidad_genero_otro', 'campo para especificar identidad de genero'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('duplicada','duplicada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('pregunta_secreta','pregunta secreta'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('respuesta_secreta','respuesta secreta'); + +DELETE FROM sga_campos_conf; + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Configuración inicial para propuestas de GRADO +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','id_preinscripcion',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','usuario',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','clave',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','fecha_registro',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','fecha_ult_modif',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','version_modificacion',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','estado',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','apellido',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nombres',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','sexo',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','fecha_nacimiento',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nacionalidad',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','loc_nacimiento',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','es_mayor_25_sin_secundario',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','colegio_secundario',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','titulo_secundario',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','anio_egreso_sec',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','pais_emisor_pasap',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nro_pasap',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','apellido_padre',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nombres_padre',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','apellido_madre',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nombres_madre',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','estado_civil',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','e_mail',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tipo_visa',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','otorgamiento_visa',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','vencimiento_visa',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tipo_residencia',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','calle_proc',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','numero_proc',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','piso_proc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','dpto_proc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','unidad_proc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','loc_proc',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','cp_proc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','barrio_proc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','te_proc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','pais_documento',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tipo_documento',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nro_documento',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','ult_est_cur_padre',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','ult_est_cur_madre',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','hora_sem_trab_alum',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','rel_trab_propuesta',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nro_ci',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','ent_emisora_ci',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tipo_res_per_lect',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','calle_per_lect',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','numero_per_lect',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','piso_per_lect',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','dpto_per_lect',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','unidad_per_lect',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','loc_per_lect',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','cp_per_lect',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','barrio_per_lec',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','te_per_lect',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','sit_laboral_padre',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','sit_laboral_madre',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','apellido_pers_alleg',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nombre_pers_alleg',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tipo_allegado',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','calle_pers_alleg',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nro_pers_alleg',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','piso_pers_alleg',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','dpto_pers_alleg',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','unidad_pers_alleg',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','loc_pers_alleg',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','barrio_alleg',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','cp_pers_alleg',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','te_pers_alleg',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','turno_preferido',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','cant_hijos_alum',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','obra_social_alu',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','terciario_nombre_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','terciario_titulo_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','terciario_estado_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','terciario_nombre_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','terciario_titulo_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','terciario_estado_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','universit_nombre_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','universit_titulo_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','universit_estado_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','universit_nombre_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','universit_titulo_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','universit_estado_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','postgrado_nombre_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','postgrado_titulo_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','postgrado_estado_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','postgrado_nombre_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','postgrado_titulo_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','postgrado_estado_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','antecedente_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','antecedente_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','antecedente_3',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','actividad_academica',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','titulo_tentativo',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','area_tematica',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','existe_trab_alum',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','remuneracion',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','numero_cuil',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_est_civil_uh',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_trab_hace',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_trab_desjub',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_trab_fami',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_trab_ocup',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_trab_tarea',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','padre_trab_hace',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','padre_trab_ocup',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','padre_trab_otro',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','padre_trab_tarea',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','madre_trab_hace',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','madre_trab_ocup',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','madre_trab_otro',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','madre_trab_tarea',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_cos_est_ap_fam',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_cos_est_trab',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_cos_est_beca',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_cos_est_plsoc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_cos_est_otra',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_cos_est_espec',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_muni',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_otra',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_prov',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_tipo_eco',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_tipo_ser',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_tipo_inv',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_eco_tran',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_eco_come',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_eco_foto',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_eco_efec',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_eco_habi',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_uni',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_tipo',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_area',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_carr',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_esta',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_egre',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_niv',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_pc_casa',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_pc_trab',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_pc_univ',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_pc_otro',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_int_casa',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_int_trab',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_int_univ',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_int_movil',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_int_otro',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_idioma_ingl',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_idioma_fran',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_idioma_port',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_idioma_ital',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_idioma_alem',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_idioma_chino',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_idioma_otro',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_idioma_otro_nivel',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','practica_deportes',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','hace_dep_univ',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','hace_dep_gim_priv',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','hace_dep_partic',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','hace_dep_otros',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','prac_dep_futbol',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','prac_dep_basquet',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','prac_dep_voley',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','prac_dep_gimnasia',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','prac_dep_tenis',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','prac_dep_natacion',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','prac_dep_handball',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','prac_dep_otros',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','vive_actual_con',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','celular_numero',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','celular_compania',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tiene_beca_inter',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tiene_beca',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tiene_beca_univ',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tiene_beca_nacio',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','cant_fami_cargo',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','padre_vive',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','madre_vive',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','residencia',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','fecha_respre_otorg',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','fecha_respre_venc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_inst_econom',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_inst_prestigio',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_inst_difusion',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_inst_rec_estud',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_inst_rec_amigos',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_inst_sist_ing',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_inst_ubicacion',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_inst_otros',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_prop_vocacion',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_prop_sug_fam',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_prop_rec_social',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_prop_ins_lab',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_prop_perf_prof',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_prop_mejora_ec',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_prop_util_soc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_prop_otros',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','adeuda_materias',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_razon_abandono',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_razon_abandono_otros',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','insc_otra_inst',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','insc_otra_inst_descr',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','como_conocio_institucion',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','pertenece_pueblo_originario',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','pueblo_originario',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','pueblo_originario_otro',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','orientacion_recibida',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','es_celiaco',1,0,1); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'condicion_discapacidad', 1, 1, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'tiene_cud', 1, 0, 1); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'disc_auditiva', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_tipo', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_lenguaje_senias', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_lenguaje_labial', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_comunicacion_otra', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_apoyo_vida_diaria', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_req_interprete_lengua_senias', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_req_aro_magnetico', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_req_otros_apoyos', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_otros_apoyos', 1, 0, 1); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'disc_visual', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_dificultad_para_ver', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_apoyo_vida_diaria', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_req_archivo_audio', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_req_texto_digital', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_req_texto_braile', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_req_otros_apoyos', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_otros_apoyos', 1, 0, 1); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'disc_motora', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'mot_apoyo_vida_diaria', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'mot_req_apoyo_aula', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'mot_apoyo_aula', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'mot_req_otros_apoyos', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'mot_otros_apoyos', 1, 0, 1); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'disc_cond_psicosocial', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'psi_descripcion', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'psi_apoyo_vida_diaria', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'psi_req_otros_apoyos', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'psi_otros_apoyos', 1, 0, 1); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'disc_otra', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'otra_descripcion', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'otra_req_apoyo_vida_diaria', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'otra_apoyo_vida_diaria', 1, 0, 1); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'informacion_importante', 1, 0, 1); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'apellido_elegido', 1, 0, 0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'nombres_elegido', 1, 0, 0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'identidad_genero', 1, 0, 0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'identidad_genero_otro', 1, 0, 0); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','duplicada',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','pregunta_secreta',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','respuesta_secreta',1,0,1); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Se replica la config. inicial de propuestas de Grado para los demás tipos +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) + SELECT sga_propuestas_tipos.propuesta_tipo, + sga_campos_conf.columna, + sga_campos_conf.visible, + sga_campos_conf.obligatorio, + sga_campos_conf.se_imprime + FROM sga_campos_conf, + sga_propuestas_tipos + WHERE sga_campos_conf.propuesta_tipo = '200' + AND sga_propuestas_tipos.propuesta_tipo <> '200' + ORDER BY sga_propuestas_tipos.propuesta_tipo, + sga_campos_conf.columna; + + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Versión de la base +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +INSERT INTO app_versiones_base(version_base, fecha_actualizacion, observaciones) +VALUES ('3.22.0', CURRENT_TIMESTAMP, 'Versión 3.22.0 de la base de Preinscripción'); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- FKs tabla: sga_actuacion_doc +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX ifk__sga_actuacion_doc__sga_preinscripcion; +CREATE INDEX ifk__sga_actuacion_doc__sga_preinscripcion ON sga_actuacion_doc (id_preinscripcion); + +-- ALTER TABLE sga_actuacion_doc DROP CONSTRAINT fk__sga_actuacion_doc__sga_preinscripcion; +ALTER TABLE sga_actuacion_doc + ADD CONSTRAINT fk__sga_actuacion_doc__sga_preinscripcion FOREIGN KEY (id_preinscripcion) + REFERENCES sga_preinscripcion (id_preinscripcion) on update restrict on delete restrict; + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- FKs tabla: sga_actuacion_prof +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX ifk__sga_actuacion_prof__sga_preinscripcion; +CREATE INDEX ifk__sga_actuacion_prof__sga_preinscripcion ON sga_actuacion_prof (id_preinscripcion); + +-- ALTER TABLE sga_actuacion_prof DROP CONSTRAINT fk__sga_actuacion_prof__sga_preinscripcion; +ALTER TABLE sga_actuacion_prof + ADD CONSTRAINT fk__sga_actuacion_prof__sga_preinscripcion FOREIGN KEY (id_preinscripcion) + REFERENCES sga_preinscripcion (id_preinscripcion) on update restrict on delete restrict; + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- FKs tabla: sga_campos_conf +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX ifk__sga_campos_conf__sga_campos_form; +CREATE INDEX ifk__sga_campos_conf__sga_campos_form ON sga_campos_conf (columna); + +-- ALTER TABLE sga_campos_conf DROP CONSTRAINT fk__sga_campos_conf__sga_campos_form; +ALTER TABLE sga_campos_conf + ADD CONSTRAINT fk__sga_campos_conf__sga_campos_form FOREIGN KEY (columna) + REFERENCES sga_campos_form (columna) on update restrict on delete restrict; + +-------------------------------------------------------------------------------- + +-- DROP INDEX ifk__sga_campos_conf__sga_propuestas_tipos; +CREATE INDEX ifk__sga_campos_conf__sga_propuestas_tipos ON sga_campos_conf (propuesta_tipo); + +-- ALTER TABLE sga_campos_conf DROP CONSTRAINT fk__sga_campos_conf__sga_propuestas_tipos; +ALTER TABLE sga_campos_conf + ADD CONSTRAINT fk__sga_campos_conf__sga_propuestas_tipos FOREIGN KEY (propuesta_tipo) + REFERENCES sga_propuestas_tipos (propuesta_tipo) on update restrict on delete restrict; + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- FKs tabla: sga_formacion_acad +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX ifk__sga_formacion_acad__sga_preinscripcion; +CREATE INDEX ifk__sga_formacion_acad__sga_preinscripcion ON sga_formacion_acad (id_preinscripcion); + +-- ALTER TABLE sga_formacion_acad DROP CONSTRAINT fk__sga_formacion_acad__sga_preinscripcion; +ALTER TABLE sga_formacion_acad + ADD CONSTRAINT fk__sga_formacion_acad__sga_preinscripcion FOREIGN KEY (id_preinscripcion) + REFERENCES sga_preinscripcion (id_preinscripcion) on update restrict on delete restrict; + + + + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- FKs tabla: sga_preinscripcion_propuestas +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX ifk__sga_preinscripcion_propuestas__sga_preinscripcion; +CREATE INDEX ifk__sga_preinscripcion_propuestas__sga_preinscripcion ON sga_preinscripcion_propuestas (id_preinscripcion); + +-- ALTER TABLE sga_preinscripcion_propuestas DROP CONSTRAINT fk__sga_preinscripcion_propuestas__sga_preinscripcion; +ALTER TABLE sga_preinscripcion_propuestas + ADD CONSTRAINT fk__sga_preinscripcion_propuestas__sga_preinscripcion FOREIGN KEY (id_preinscripcion) + REFERENCES sga_preinscripcion (id_preinscripcion) on update restrict on delete restrict; + + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- FKs tabla: sga_requisitos_digitales +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX ifk__sga_requisitos_digitales__sga_preinscripcion; +CREATE INDEX ifk__sga_requisitos_digitales__sga_preinscripcion ON sga_requisitos_digitales (id_preinscripcion); + +-- ALTER TABLE sga_requisitos_digitales DROP CONSTRAINT fk__sga_requisitos_digitales__sga_preinscripcion; +ALTER TABLE sga_requisitos_digitales + ADD CONSTRAINT fk__sga_requisitos_digitales__sga_preinscripcion FOREIGN KEY (id_preinscripcion) + REFERENCES sga_preinscripcion (id_preinscripcion) on update restrict on delete restrict; + +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- MODULO PREINSCIRPCION A PROPUESTA - Sistema de Gestión Académica +-- Versión 3.22.0 +-- Tabla: sga_preinscripcion +-- Indice: id__sga_preinscripcion__apellido_nombres_fecha_nac +-- Utilizado en reporte de preinscripciones desde Gestion. +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX IF EXISTS id__sga_preinscripcion__apellido_nombres_fecha_nac; +CREATE INDEX id__sga_preinscripcion__apellido_nombres_fecha_nac ON sga_preinscripcion (apellido, nombres, fecha_nacimiento); +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Version 3.22.0 +-- Tabla: sga_preinscripcion +-- Indice: id__sga_preinscripcion__codigo_validacion +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX IF EXISTS id__sga_preinscripcion__codigo_validacion; +CREATE INDEX id__sga_preinscripcion__codigo_validacion ON sga_preinscripcion (codigo_validacion); + +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Tabla: sga_preinscripcion +-- Indice: iu__admin_usuarios__usuario +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX iu_admin_usuarios_usuario; +CREATE UNIQUE INDEX iu__admin_usuarios__usuario ON admin_usuarios (usuario); + + +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Tabla: sga_preinscripcion +-- Indice: iu__sga_preinscripcion__usuario +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX iu__sga_preinscripcion__usuario; +CREATE UNIQUE INDEX iu__sga_preinscripcion__usuario ON sga_preinscripcion (e_mail); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_aud_lenguaje_labial; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_aud_lenguaje_labial CHECK (aud_lenguaje_labial IN ('S', 'N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_aud_lenguaje_senias; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_aud_lenguaje_senias CHECK (aud_lenguaje_senias IN ('S','N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_aud_req_aro_magnetico; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_aud_req_aro_magnetico CHECK (aud_req_aro_magnetico IN ('S','N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_aud_req_interprete_lengua_senias; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_aud_req_interprete_lengua_senias CHECK (aud_req_interprete_lengua_senias IN ('S','N')); +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_aud_req_otros_apoyos; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_aud_req_otros_apoyos CHECK (aud_req_otros_apoyos IN ('S','N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_condicion_discapacidad; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_condicion_discapacidad CHECK (condicion_discapacidad IN ('S','N')); +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_disc_auditiva; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_disc_auditiva CHECK (disc_auditiva IN ('S','N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_disc_cond_psicosocial; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_disc_cond_psicosocial CHECK (disc_cond_psicosocial IN ('S','N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_disc_motora; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_disc_motora CHECK (disc_motora IN ('S','N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_disc_otra; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_disc_otra CHECK (disc_otra IN ('S','N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_disc_visual; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_disc_visual CHECK (disc_visual IN ('S','N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: sga_preinscripcion +-- +-- Check: campo estado: +-- + P = Pendiente de activacion +-- + A = Activado. La persona respondió el mail enviado +-- + C = Comprobante impreso. Preparado para ingresarlo en Guarani +-- + I = Inscripto en Gestión. Cuenta de Preinscripción cerrada (continúa sus trámites por 3w). +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_estado; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_estado CHECK (estado IN ('P', 'A', 'C', 'I')); + + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +-- Check: campo es_mayor_25_sin_secundario: +-- S = Es mayor a 25 años y no tiene titulo secundario. +-- N = Tiene titulo secundario (valor default) +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_es_mayor_25_sin_secundario; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_es_mayor_25_sin_secundario CHECK (es_mayor_25_sin_secundario IN ('N', 'S')); + + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_mot_req_apoyo_aula; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_mot_req_apoyo_aula CHECK (mot_req_apoyo_aula IN ('S','N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_mot_req_otros_apoyos; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_mot_req_otros_apoyos CHECK (mot_req_otros_apoyos IN ('S','N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_otra_req_apoyo_vida_diaria; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_otra_req_apoyo_vida_diaria CHECK (otra_req_apoyo_vida_diaria IN ('S','N')); +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0, 3.13.0 +-- Tabla: sga_preinscripcion_propuestas +-- +-- Check: campo estado: +-- P: Pendiente de inscripción +-- I: Inscripto en Gestión +-- C: Copiado al modelo de Gestión +-- S: Solicitud de informacion al aspirante +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +-- ALTER TABLE sga_preinscripcion_propuestas DROP CONSTRAINT IF EXISTS ck_sga_preinscripcion_propuestas_estado; +ALTER TABLE sga_preinscripcion_propuestas ADD CONSTRAINT ck_sga_preinscripcion_propuestas_estado CHECK (estado IN ('P', 'I', 'S', 'C')); + + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_psi_req_otros_apoyos; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_psi_req_otros_apoyos CHECK (psi_req_otros_apoyos in ('S','N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_tiene_cud; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_tiene_cud CHECK (tiene_cud IN ('S','N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.21.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_validado_con_renaper; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_validado_con_renaper CHECK (validado_con_renaper IN ('S','N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_vis_req_archivo_audio; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_vis_req_archivo_audio CHECK (vis_req_archivo_audio IN ('S','N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_vis_req_otros_apoyos; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_vis_req_otros_apoyos CHECK (vis_req_otros_apoyos IN ('S','N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_vis_req_texto_braile; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_vis_req_texto_braile CHECK (vis_req_texto_braile IN ('S','N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_vis_req_texto_digital; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_vis_req_texto_digital CHECK (vis_req_texto_digital IN ('S','N'));-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.8.0 +-- Tabla: sga_requisitos_digitales +-- +-- Check: campo estado: +-- + P = Pendiente de validación +-- + A = Aceptado en G3 +-- + R = Rechazado en G3 +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_requisitos_digitales DROP CONSTRAINT ck_sga_requisitos_digitales_estado; +ALTER TABLE sga_requisitos_digitales ADD CONSTRAINT ck_sga_requisitos_digitales_estado CHECK (estado IN ('P', 'A', 'R')); + + diff --git a/BD/sql/ck/ck_sga_preinscripcion_aud_lenguaje_labial.sql b/BD/sql/ck/ck_sga_preinscripcion_aud_lenguaje_labial.sql new file mode 100644 index 0000000..a591f87 --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_aud_lenguaje_labial.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_aud_lenguaje_labial; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_aud_lenguaje_labial CHECK (aud_lenguaje_labial IN ('S', 'N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_preinscripcion_aud_lenguaje_senias.sql b/BD/sql/ck/ck_sga_preinscripcion_aud_lenguaje_senias.sql new file mode 100644 index 0000000..ff641f3 --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_aud_lenguaje_senias.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_aud_lenguaje_senias; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_aud_lenguaje_senias CHECK (aud_lenguaje_senias IN ('S','N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_preinscripcion_aud_req_aro_magnetico.sql b/BD/sql/ck/ck_sga_preinscripcion_aud_req_aro_magnetico.sql new file mode 100644 index 0000000..3fe506d --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_aud_req_aro_magnetico.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_aud_req_aro_magnetico; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_aud_req_aro_magnetico CHECK (aud_req_aro_magnetico IN ('S','N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_preinscripcion_aud_req_interprete_lengua_senias.sql b/BD/sql/ck/ck_sga_preinscripcion_aud_req_interprete_lengua_senias.sql new file mode 100644 index 0000000..221cebd --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_aud_req_interprete_lengua_senias.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_aud_req_interprete_lengua_senias; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_aud_req_interprete_lengua_senias CHECK (aud_req_interprete_lengua_senias IN ('S','N')); diff --git a/BD/sql/ck/ck_sga_preinscripcion_aud_req_otros_apoyos.sql b/BD/sql/ck/ck_sga_preinscripcion_aud_req_otros_apoyos.sql new file mode 100644 index 0000000..0027bdf --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_aud_req_otros_apoyos.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_aud_req_otros_apoyos; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_aud_req_otros_apoyos CHECK (aud_req_otros_apoyos IN ('S','N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_preinscripcion_condicion_discapacidad.sql b/BD/sql/ck/ck_sga_preinscripcion_condicion_discapacidad.sql new file mode 100644 index 0000000..03fe200 --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_condicion_discapacidad.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_condicion_discapacidad; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_condicion_discapacidad CHECK (condicion_discapacidad IN ('S','N')); diff --git a/BD/sql/ck/ck_sga_preinscripcion_disc_auditiva.sql b/BD/sql/ck/ck_sga_preinscripcion_disc_auditiva.sql new file mode 100644 index 0000000..3af509c --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_disc_auditiva.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_disc_auditiva; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_disc_auditiva CHECK (disc_auditiva IN ('S','N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_preinscripcion_disc_cond_psicosocial.sql b/BD/sql/ck/ck_sga_preinscripcion_disc_cond_psicosocial.sql new file mode 100644 index 0000000..874f412 --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_disc_cond_psicosocial.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_disc_cond_psicosocial; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_disc_cond_psicosocial CHECK (disc_cond_psicosocial IN ('S','N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_preinscripcion_disc_motora.sql b/BD/sql/ck/ck_sga_preinscripcion_disc_motora.sql new file mode 100644 index 0000000..d5ab00b --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_disc_motora.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_disc_motora; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_disc_motora CHECK (disc_motora IN ('S','N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_preinscripcion_disc_otra.sql b/BD/sql/ck/ck_sga_preinscripcion_disc_otra.sql new file mode 100644 index 0000000..2d8bdd8 --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_disc_otra.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_disc_otra; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_disc_otra CHECK (disc_otra IN ('S','N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_preinscripcion_disc_visual.sql b/BD/sql/ck/ck_sga_preinscripcion_disc_visual.sql new file mode 100644 index 0000000..1b6470e --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_disc_visual.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_disc_visual; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_disc_visual CHECK (disc_visual IN ('S','N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_preinscripcion_es_mayor_25_sin_secundario.sql b/BD/sql/ck/ck_sga_preinscripcion_es_mayor_25_sin_secundario.sql new file mode 100644 index 0000000..c6547bf --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_es_mayor_25_sin_secundario.sql @@ -0,0 +1,15 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +-- Check: campo es_mayor_25_sin_secundario: +-- S = Es mayor a 25 años y no tiene titulo secundario. +-- N = Tiene titulo secundario (valor default) +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_es_mayor_25_sin_secundario; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_es_mayor_25_sin_secundario CHECK (es_mayor_25_sin_secundario IN ('N', 'S')); + + diff --git a/BD/sql/ck/ck_sga_preinscripcion_estado.sql b/BD/sql/ck/ck_sga_preinscripcion_estado.sql new file mode 100644 index 0000000..cc0c97c --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_estado.sql @@ -0,0 +1,17 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: sga_preinscripcion +-- +-- Check: campo estado: +-- + P = Pendiente de activacion +-- + A = Activado. La persona respondió el mail enviado +-- + C = Comprobante impreso. Preparado para ingresarlo en Guarani +-- + I = Inscripto en Gestión. Cuenta de Preinscripción cerrada (continúa sus trámites por 3w). +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_estado; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_estado CHECK (estado IN ('P', 'A', 'C', 'I')); + + diff --git a/BD/sql/ck/ck_sga_preinscripcion_mot_req_apoyo_aula.sql b/BD/sql/ck/ck_sga_preinscripcion_mot_req_apoyo_aula.sql new file mode 100644 index 0000000..64a8851 --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_mot_req_apoyo_aula.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_mot_req_apoyo_aula; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_mot_req_apoyo_aula CHECK (mot_req_apoyo_aula IN ('S','N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_preinscripcion_mot_req_otros_apoyos.sql b/BD/sql/ck/ck_sga_preinscripcion_mot_req_otros_apoyos.sql new file mode 100644 index 0000000..a72518c --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_mot_req_otros_apoyos.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_mot_req_otros_apoyos; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_mot_req_otros_apoyos CHECK (mot_req_otros_apoyos IN ('S','N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_preinscripcion_otra_req_apoyo_vida_diaria.sql b/BD/sql/ck/ck_sga_preinscripcion_otra_req_apoyo_vida_diaria.sql new file mode 100644 index 0000000..4bdfba6 --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_otra_req_apoyo_vida_diaria.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_otra_req_apoyo_vida_diaria; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_otra_req_apoyo_vida_diaria CHECK (otra_req_apoyo_vida_diaria IN ('S','N')); diff --git a/BD/sql/ck/ck_sga_preinscripcion_propuestas_estado.sql b/BD/sql/ck/ck_sga_preinscripcion_propuestas_estado.sql new file mode 100644 index 0000000..bfa16d5 --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_propuestas_estado.sql @@ -0,0 +1,17 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0, 3.13.0 +-- Tabla: sga_preinscripcion_propuestas +-- +-- Check: campo estado: +-- P: Pendiente de inscripción +-- I: Inscripto en Gestión +-- C: Copiado al modelo de Gestión +-- S: Solicitud de informacion al aspirante +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +-- ALTER TABLE sga_preinscripcion_propuestas DROP CONSTRAINT IF EXISTS ck_sga_preinscripcion_propuestas_estado; +ALTER TABLE sga_preinscripcion_propuestas ADD CONSTRAINT ck_sga_preinscripcion_propuestas_estado CHECK (estado IN ('P', 'I', 'S', 'C')); + + diff --git a/BD/sql/ck/ck_sga_preinscripcion_psi_req_otros_apoyos.sql b/BD/sql/ck/ck_sga_preinscripcion_psi_req_otros_apoyos.sql new file mode 100644 index 0000000..13d965f --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_psi_req_otros_apoyos.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_psi_req_otros_apoyos; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_psi_req_otros_apoyos CHECK (psi_req_otros_apoyos in ('S','N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_preinscripcion_tiene_cud.sql b/BD/sql/ck/ck_sga_preinscripcion_tiene_cud.sql new file mode 100644 index 0000000..4ba725d --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_tiene_cud.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_tiene_cud; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_tiene_cud CHECK (tiene_cud IN ('S','N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_preinscripcion_validado_con_renaper.sql b/BD/sql/ck/ck_sga_preinscripcion_validado_con_renaper.sql new file mode 100644 index 0000000..a36ae4b --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_validado_con_renaper.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.21.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_validado_con_renaper; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_validado_con_renaper CHECK (validado_con_renaper IN ('S','N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_preinscripcion_vis_req_archivo_audio.sql b/BD/sql/ck/ck_sga_preinscripcion_vis_req_archivo_audio.sql new file mode 100644 index 0000000..6617bea --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_vis_req_archivo_audio.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_vis_req_archivo_audio; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_vis_req_archivo_audio CHECK (vis_req_archivo_audio IN ('S','N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_preinscripcion_vis_req_otros_apoyos.sql b/BD/sql/ck/ck_sga_preinscripcion_vis_req_otros_apoyos.sql new file mode 100644 index 0000000..4d13554 --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_vis_req_otros_apoyos.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_vis_req_otros_apoyos; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_vis_req_otros_apoyos CHECK (vis_req_otros_apoyos IN ('S','N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_preinscripcion_vis_req_texto_braile.sql b/BD/sql/ck/ck_sga_preinscripcion_vis_req_texto_braile.sql new file mode 100644 index 0000000..424d608 --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_vis_req_texto_braile.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_vis_req_texto_braile; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_vis_req_texto_braile CHECK (vis_req_texto_braile IN ('S','N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_preinscripcion_vis_req_texto_digital.sql b/BD/sql/ck/ck_sga_preinscripcion_vis_req_texto_digital.sql new file mode 100644 index 0000000..c9ead66 --- /dev/null +++ b/BD/sql/ck/ck_sga_preinscripcion_vis_req_texto_digital.sql @@ -0,0 +1,8 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.12.0 +-- Tabla: sga_preinscripcion +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_vis_req_texto_digital; +ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_vis_req_texto_digital CHECK (vis_req_texto_digital IN ('S','N')); \ No newline at end of file diff --git a/BD/sql/ck/ck_sga_requisitos_digitales_estado.sql b/BD/sql/ck/ck_sga_requisitos_digitales_estado.sql new file mode 100644 index 0000000..0294e25 --- /dev/null +++ b/BD/sql/ck/ck_sga_requisitos_digitales_estado.sql @@ -0,0 +1,15 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.8.0 +-- Tabla: sga_requisitos_digitales +-- +-- Check: campo estado: +-- + P = Pendiente de validación +-- + A = Aceptado en G3 +-- + R = Rechazado en G3 +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- ALTER TABLE sga_requisitos_digitales DROP CONSTRAINT ck_sga_requisitos_digitales_estado; +ALTER TABLE sga_requisitos_digitales ADD CONSTRAINT ck_sga_requisitos_digitales_estado CHECK (estado IN ('P', 'A', 'R')); + + diff --git a/BD/sql/datos/00_sga_propuestas_tipos.sql b/BD/sql/datos/00_sga_propuestas_tipos.sql new file mode 100644 index 0000000..ec9a02c --- /dev/null +++ b/BD/sql/datos/00_sga_propuestas_tipos.sql @@ -0,0 +1,18 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: sga_propuestas_tipos +-- Tipos de propuestas formativas +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (200, 'Grado'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (201, 'Pregrado'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (202, 'Posgrado'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (203, 'Ciclo Básico o Común'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (204, 'Curso de Ingreso'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (205, 'Postítulo'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (206, 'Terciario'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (207, 'Vocacional'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (208, 'Cursos'); +INSERT INTO sga_propuestas_tipos (propuesta_tipo, descripcion) VALUES (209, 'Convenio'); + diff --git a/BD/sql/datos/10_sga_campos_form.sql b/BD/sql/datos/10_sga_campos_form.sql new file mode 100644 index 0000000..4c970d3 --- /dev/null +++ b/BD/sql/datos/10_sga_campos_form.sql @@ -0,0 +1,268 @@ +DELETE FROM sga_campos_form; + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('id_preinscripcion',''); +--INSERT INTO sga_campos_form (columna, descripcion) VALUES ('usuario',''); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('clave',''); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('fecha_registro','Fecha Inscripción'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('fecha_ult_modif',''); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('version_modificacion',''); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('estado','Estado'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('apellido','Apellido'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nombres','Nombres'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('sexo','Género'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('fecha_nacimiento','Fecha de nacimiento'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nacionalidad','Nacionalidad'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('loc_nacimiento','Localidad de nacimiento'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('es_mayor_25_sin_secundario','Es mayor de 25 años y no tiene estudios secundarios'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('colegio_secundario','Colegio secundario'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('titulo_secundario','Titulo secundario'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('anio_egreso_sec','Año de egreso del colegio secundario'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('pais_emisor_pasap','País emisor del pasaporte'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nro_pasap','Número de pasaporte'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('apellido_padre','Apellido del padre'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nombres_padre','Nombres del padre'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('apellido_madre','Apellido de la madre'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nombres_madre','Nombres de la madre'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('estado_civil','Estado civil'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('e_mail','Correo electrónico'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tipo_visa','Tipo de visa'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('otorgamiento_visa','Fecha de otorgamiento de la visa'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vencimiento_visa','Vencimiento de la visa'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tipo_residencia','Tipo de residencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('calle_proc','Calle de la localidad de procedencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('numero_proc','Numero de calle de la localidad de procedencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('piso_proc','Piso de la localidad de procedencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('dpto_proc','Departamento de la localidad de procedencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('unidad_proc','Unidad de la localidad de procedencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('loc_proc','Localidad de procedencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('cp_proc','Código postal de la localidad de procedencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('te_proc','Teléfono de la localidad de procedencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('pais_documento','País emisor del documento'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tipo_documento','Tipo de documento'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nro_documento','Numero de documento'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('ult_est_cur_padre','Últimos estudios cursados por el padre'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('ult_est_cur_madre','Últimos estudios cursados por la madre'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('hora_sem_trab_alum','Horas semanales trabajadas por el alumno'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('rel_trab_propuesta','Relación del trabajo con la propuesta'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nro_ci','Numero de cedula de identidad'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('ent_emisora_ci','Entidad emisora de la célula de identidad'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tipo_res_per_lect','Tipo de residencia del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('calle_per_lect','Calle de la localidad del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('numero_per_lect','Numero de calle de la localidad del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('piso_per_lect','Piso de la localidad del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('dpto_per_lect','Departamento de la localidad del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('unidad_per_lect','Unidad de la localidad del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('loc_per_lect','Localidad del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('cp_per_lect','Código postal de la localidad del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('te_per_lect','Teléfono de la dirección del periodo lectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('sit_laboral_padre','Situación laboral del padre'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('sit_laboral_madre','Situación laboral de la madre'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('apellido_pers_alleg','Apellido allegado'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nombre_pers_alleg','Nombre de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tipo_allegado','Relación allegado'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('calle_pers_alleg','Calle de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nro_pers_alleg','Numero de calle de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('piso_pers_alleg','Piso de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('dpto_pers_alleg','Departamento de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('unidad_pers_alleg','Unidad de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('loc_pers_alleg','Localidad de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('cp_pers_alleg','Código postal de la localidad de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('te_pers_alleg','Teléfono de la persona allegada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('cant_hijos_alum','Cantidad de hijos del alumno'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('obra_social_alu','Tiene obra social o no'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('terciario_nombre_1','Nombre de la institucion terciaria (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('terciario_titulo_1','Titulo obtenido en la institucion terciaria (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('terciario_estado_1','Nivel alcanzado en la institucion terciaria (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('terciario_nombre_2','Nombre de la institucion terciaria (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('terciario_titulo_2','Titulo obtenido en la institucion terciaria (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('terciario_estado_2','Nivel alcanzado en la institucion terciaria (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('universit_nombre_1','Nombre de la universidad (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('universit_titulo_1','Titulo obtenido en la universidad (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('universit_estado_1','Nivel alcanzado en la universidad (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('universit_nombre_2','Nombre de universidad (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('universit_titulo_2','Titulo obtenido en la universidad (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('universit_estado_2','Nivel alcanzado en la universidad (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('postgrado_nombre_1','Institucion donde realizo el postgrado (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('postgrado_titulo_1','Titulo del postgrado (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('postgrado_estado_1','Nivel alcanzado (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('postgrado_nombre_2','Institucion donde realizo el postgrado (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('postgrado_titulo_2','Titulo del postgrado (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('postgrado_estado_2','Nivel alcanzado (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('antecedente_1','Antecedentes académicos (i)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('antecedente_2','Antecedentes académicos (ii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('antecedente_3','Antecedentes académicos (iii)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('actividad_academica','Actividad académica realizada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('titulo_tentativo','Titulo de postgrado tentativo '); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('area_tematica','Área temática'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('existe_trab_alum','Existencia de trabajo:'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('remuneracion','Remunerado'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('numero_cuil','Número de C.U.I.L.'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_est_civil_uh','Se encuentra unido de hecho'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_trab_hace','En ese trabajo es usted'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_trab_desjub','¿Le hacen descuentos jubilatorios?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_trab_fami','Trabaja en el negocio o empresa de un familiar?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_trab_ocup','Esa ocupación es'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_trab_tarea','Describa la tarea que realiza'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('padre_trab_hace','Padre - En ese trabajo es'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('padre_trab_ocup','Padre - Esa ocupación es'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('padre_trab_otro','Si no trabaja y no busca trabajo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('padre_trab_tarea','Padre - Describa la tarea que realizar'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('madre_trab_hace','Madre - En ese trabajo es'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('madre_trab_ocup','Madre - Esa ocupación es'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('madre_trab_otro','Si no trabaja y no busca trabajo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('madre_trab_tarea','Madre - Describa la tarea que realizar'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_cos_est_ap_fam','Con el aporte de familiares'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_cos_est_trab','Con su trabajo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_cos_est_beca','Con beca'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_cos_est_plsoc','Planes sociales'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_cos_est_otra','Otras fuentes'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_cos_est_espec','Fuente'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_muni','Municipal'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_otra','Otra'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_prov','Provincial'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_tipo_eco','De ayuda económica'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_tipo_ser','De contraprestación de servicios'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_tipo_inv','De investigación'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_eco_tran','Transporte'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_eco_come','Comedor'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_eco_foto','Fotocopia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_eco_efec','Efectivo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_beca_eco_habi','Habitacional'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_uni','Universidad/Institución'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_tipo','Tipo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_area','Áreas'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_carr','Otros Estudios - Propuesta'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_esta','Otros Estudios - Estado'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_egre','Año de egreso'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_niv','Nivel'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_pc_casa','Tiene PC en su casa'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_pc_trab','Tiene PC en el trabajo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_pc_univ','Tiene PC en la universidad'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_pc_otro','Tiene PC en otro lugar'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_int_casa','Consulta Internet en su casa'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_int_trab','Consulta Internet en el trabajo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_int_univ','Consulta Internet en la universidad'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_int_movil','Consulta Internet en un dispositivo móvil'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_tec_int_otro','Consulta Internet en otro lugar'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_idioma_ingl','Inglés'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_idioma_fran','Francés'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_idioma_port','Portugués'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_idioma_ital','Italiano'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_idioma_alem','Alemán'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_idioma_chino','Chino'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_idioma_otro','Otro'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_idioma_otro_nivel','Nivel'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('practica_deportes','Practica deportes'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('hace_dep_univ','Deportes en la Universidad'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('hace_dep_gim_priv','Deportes en gimnasio privado'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('hace_dep_partic','Deportes en gimnasio particular'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('hace_dep_otros','Deportes en otros lados'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('prac_dep_futbol','Practica Futbol'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('prac_dep_basquet','Practica Básquet'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('prac_dep_voley','Practica Voley'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('prac_dep_gimnasia','Practica gimnasia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('prac_dep_tenis','Practica tenis'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('prac_dep_natacion','Practica Natación'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('prac_dep_handball','Practica Handball'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('prac_dep_otros','Practica otros deportes'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vive_actual_con','Vive actualmente con'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('celular_numero','Número Celular'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('celular_compania','Compañía Celular'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tiene_beca_inter','Tiene beca internacional'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tiene_beca','Tiene beca'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tiene_beca_univ','Tiene beca universitaria'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tiene_beca_nacio','Tiene beca nacional'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('cant_fami_cargo','Cantidad Familiares a cargo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('padre_vive','¿Padre Vive?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('madre_vive','¿Madre Vive?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('residencia', 'Tipo de residencia - Extranjeros'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('fecha_respre_otorg', 'Fecha de otorgamiento de la residencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('fecha_respre_venc', 'Fecha de vencimiento de la residencia'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('turno_preferido','Turno preferido'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('barrio_per_lec','Barrio (período lectivo)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('barrio_proc','Barrio (procedencia)'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('barrio_alleg','Barrio (persona allegada)'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('insc_otra_inst','¿Estás inscripto en otra institución?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('insc_otra_inst_descr','¿En cuál?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('como_conocio_institucion','¿Cómo conociste la Institución?'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('pertenece_pueblo_originario','¿Pertenecés a algún pueblo originario?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('pueblo_originario','¿A cuál?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('pueblo_originario_otro','Nombre'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('orientacion_recibida','Orientación vocacional recibida'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('es_celiaco','¿Sos celíaco?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('adeuda_materias', '¿Adeudás materias?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_razon_abandono', 'Razón de abandono'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('alu_otestsup_razon_abandono_otros', 'Especificar razón de abandono'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_inst_econom', 'Por cuestiones económicas / bajo costo'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_inst_prestigio', 'Por el prestigio'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_inst_difusion', 'Por la difusión'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_inst_rec_estud', 'Por recomendación de otros estudiantes / graduados'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_inst_rec_amigos', 'Por recomendación de amigos / familiares'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_inst_sist_ing', 'Por el sistema de ingreso'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_inst_ubicacion', 'Ubicación geográfica'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_inst_otros', 'Otros'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_prop_vocacion', 'Vocación'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_prop_sug_fam', 'Sugerencia del núcleo familiar'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_prop_rec_social', 'Reconocimiento social'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_prop_ins_lab', 'Rápida inserción laboral'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_prop_perf_prof', 'Perfil profesional'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_prop_mejora_ec', 'Mejora de las condiciones económicas'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_prop_util_soc', 'Deseo de ser útil a la sociedad'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_prop_otros', 'Otros'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('condicion_discapacidad', 'Condición de Discapacidad'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('tiene_cud', 'Tenés CUD'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('disc_auditiva', 'Auditiva'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_tipo', '¿Tenés dificultad para oír, incluso si usás un audífono o implante coclear?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_lenguaje_senias', 'Lengua de Señas'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_lenguaje_labial', 'Lectura labial'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_comunicacion_otra', 'Otra forma'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_apoyo_vida_diaria', '¿Qué apoyos utilizás en tu vida diaria?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_req_interprete_lengua_senias', 'Requerís Intérprete de Lengua de Señas Argentina'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_req_aro_magnetico', 'Requerís Aro magnético'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_req_otros_apoyos', '¿Requerís otros apoyos?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('aud_otros_apoyos', 'Especificar cuáles'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('disc_visual', 'Visual'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_dificultad_para_ver', '¿Tenés dificultad para ver, incluso si usás lentes?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_apoyo_vida_diaria', '¿Qué apoyos utilizás en tu vida diaria?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_req_archivo_audio', 'Requerís Archivos de audio'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_req_texto_digital', 'Requerís Texto digital accesible'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_req_texto_braile', 'Requerís Texto en Braille'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_req_otros_apoyos', '¿Requerís otros apoyos?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('vis_otros_apoyos', 'Especificar cuáles'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('disc_motora', 'Motora'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_apoyo_vida_diaria', '¿Qué apoyos utilizás en tu vida diaria?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_req_apoyo_aula', '¿Requerís apoyos para la permanencia en el aula?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_apoyo_aula', '¿Cuáles?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_req_otros_apoyos', '¿Requerís otros apoyos?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('mot_otros_apoyos', 'Especificar cuáles'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('disc_cond_psicosocial', 'Condición Psicosocial'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('psi_descripcion', '¿Cuál?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('psi_apoyo_vida_diaria', '¿Qué apoyos utilizás en tu vida diaria?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('psi_req_otros_apoyos', '¿Requerís otros apoyos?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('psi_otros_apoyos', 'Especificar cuáles'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('disc_otra', 'Otra'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('otra_descripcion', '¿Cuál/cuáles?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('otra_req_apoyo_vida_diaria', '¿Requiere otros apoyos?'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('otra_apoyo_vida_diaria', 'Especificar cuáles'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('informacion_importante', 'Alguna otra información que consideres importante comunicar'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('apellido_elegido', 'apellido elegido'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('nombres_elegido', 'nombres elegido'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('identidad_genero', 'identidad de genero elegido'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('identidad_genero_otro', 'campo para especificar identidad de genero'); + +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('duplicada','duplicada'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('pregunta_secreta','pregunta secreta'); +INSERT INTO sga_campos_form (columna, descripcion) VALUES ('respuesta_secreta','respuesta secreta'); + diff --git a/BD/sql/datos/20_sga_campos_conf.sql b/BD/sql/datos/20_sga_campos_conf.sql new file mode 100644 index 0000000..a6d0879 --- /dev/null +++ b/BD/sql/datos/20_sga_campos_conf.sql @@ -0,0 +1,285 @@ +DELETE FROM sga_campos_conf; + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Configuración inicial para propuestas de GRADO +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','id_preinscripcion',1,0,1); +--INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','usuario',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','clave',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','fecha_registro',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','fecha_ult_modif',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','version_modificacion',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','estado',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','apellido',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nombres',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','sexo',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','fecha_nacimiento',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nacionalidad',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','loc_nacimiento',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','es_mayor_25_sin_secundario',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','colegio_secundario',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','titulo_secundario',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','anio_egreso_sec',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','pais_emisor_pasap',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nro_pasap',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','apellido_padre',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nombres_padre',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','apellido_madre',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nombres_madre',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','estado_civil',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','e_mail',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tipo_visa',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','otorgamiento_visa',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','vencimiento_visa',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tipo_residencia',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','calle_proc',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','numero_proc',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','piso_proc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','dpto_proc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','unidad_proc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','loc_proc',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','cp_proc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','barrio_proc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','te_proc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','pais_documento',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tipo_documento',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nro_documento',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','ult_est_cur_padre',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','ult_est_cur_madre',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','hora_sem_trab_alum',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','rel_trab_propuesta',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nro_ci',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','ent_emisora_ci',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tipo_res_per_lect',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','calle_per_lect',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','numero_per_lect',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','piso_per_lect',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','dpto_per_lect',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','unidad_per_lect',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','loc_per_lect',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','cp_per_lect',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','barrio_per_lec',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','te_per_lect',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','sit_laboral_padre',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','sit_laboral_madre',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','apellido_pers_alleg',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nombre_pers_alleg',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tipo_allegado',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','calle_pers_alleg',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','nro_pers_alleg',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','piso_pers_alleg',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','dpto_pers_alleg',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','unidad_pers_alleg',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','loc_pers_alleg',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','barrio_alleg',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','cp_pers_alleg',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','te_pers_alleg',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','turno_preferido',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','cant_hijos_alum',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','obra_social_alu',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','terciario_nombre_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','terciario_titulo_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','terciario_estado_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','terciario_nombre_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','terciario_titulo_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','terciario_estado_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','universit_nombre_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','universit_titulo_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','universit_estado_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','universit_nombre_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','universit_titulo_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','universit_estado_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','postgrado_nombre_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','postgrado_titulo_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','postgrado_estado_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','postgrado_nombre_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','postgrado_titulo_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','postgrado_estado_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','antecedente_1',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','antecedente_2',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','antecedente_3',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','actividad_academica',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','titulo_tentativo',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','area_tematica',0,0,0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','existe_trab_alum',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','remuneracion',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','numero_cuil',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_est_civil_uh',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_trab_hace',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_trab_desjub',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_trab_fami',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_trab_ocup',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_trab_tarea',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','padre_trab_hace',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','padre_trab_ocup',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','padre_trab_otro',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','padre_trab_tarea',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','madre_trab_hace',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','madre_trab_ocup',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','madre_trab_otro',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','madre_trab_tarea',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_cos_est_ap_fam',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_cos_est_trab',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_cos_est_beca',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_cos_est_plsoc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_cos_est_otra',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_cos_est_espec',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_muni',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_otra',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_prov',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_tipo_eco',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_tipo_ser',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_tipo_inv',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_eco_tran',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_eco_come',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_eco_foto',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_eco_efec',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_beca_eco_habi',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_uni',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_tipo',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_area',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_carr',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_esta',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_egre',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_niv',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_pc_casa',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_pc_trab',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_pc_univ',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_pc_otro',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_int_casa',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_int_trab',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_int_univ',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_int_movil',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_tec_int_otro',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_idioma_ingl',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_idioma_fran',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_idioma_port',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_idioma_ital',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_idioma_alem',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_idioma_chino',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_idioma_otro',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_idioma_otro_nivel',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','practica_deportes',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','hace_dep_univ',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','hace_dep_gim_priv',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','hace_dep_partic',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','hace_dep_otros',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','prac_dep_futbol',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','prac_dep_basquet',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','prac_dep_voley',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','prac_dep_gimnasia',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','prac_dep_tenis',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','prac_dep_natacion',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','prac_dep_handball',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','prac_dep_otros',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','vive_actual_con',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','celular_numero',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','celular_compania',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tiene_beca_inter',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tiene_beca',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tiene_beca_univ',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','tiene_beca_nacio',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','cant_fami_cargo',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','padre_vive',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','madre_vive',1,1,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','residencia',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','fecha_respre_otorg',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','fecha_respre_venc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_inst_econom',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_inst_prestigio',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_inst_difusion',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_inst_rec_estud',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_inst_rec_amigos',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_inst_sist_ing',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_inst_ubicacion',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_inst_otros',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_prop_vocacion',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_prop_sug_fam',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_prop_rec_social',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_prop_ins_lab',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_prop_perf_prof',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_prop_mejora_ec',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_prop_util_soc',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','mot_prop_otros',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','adeuda_materias',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_razon_abandono',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','alu_otestsup_razon_abandono_otros',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','insc_otra_inst',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','insc_otra_inst_descr',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','como_conocio_institucion',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','pertenece_pueblo_originario',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','pueblo_originario',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','pueblo_originario_otro',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','orientacion_recibida',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','es_celiaco',1,0,1); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'condicion_discapacidad', 1, 1, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'tiene_cud', 1, 0, 1); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'disc_auditiva', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_tipo', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_lenguaje_senias', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_lenguaje_labial', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_comunicacion_otra', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_apoyo_vida_diaria', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_req_interprete_lengua_senias', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_req_aro_magnetico', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_req_otros_apoyos', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'aud_otros_apoyos', 1, 0, 1); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'disc_visual', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_dificultad_para_ver', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_apoyo_vida_diaria', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_req_archivo_audio', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_req_texto_digital', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_req_texto_braile', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_req_otros_apoyos', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'vis_otros_apoyos', 1, 0, 1); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'disc_motora', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'mot_apoyo_vida_diaria', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'mot_req_apoyo_aula', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'mot_apoyo_aula', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'mot_req_otros_apoyos', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'mot_otros_apoyos', 1, 0, 1); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'disc_cond_psicosocial', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'psi_descripcion', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'psi_apoyo_vida_diaria', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'psi_req_otros_apoyos', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'psi_otros_apoyos', 1, 0, 1); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'disc_otra', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'otra_descripcion', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'otra_req_apoyo_vida_diaria', 1, 0, 1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'otra_apoyo_vida_diaria', 1, 0, 1); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'informacion_importante', 1, 0, 1); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'apellido_elegido', 1, 0, 0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'nombres_elegido', 1, 0, 0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'identidad_genero', 1, 0, 0); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'identidad_genero_otro', 1, 0, 0); + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','duplicada',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','pregunta_secreta',1,0,1); +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200','respuesta_secreta',1,0,1); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Se replica la config. inicial de propuestas de Grado para los demás tipos +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) + SELECT sga_propuestas_tipos.propuesta_tipo, + sga_campos_conf.columna, + sga_campos_conf.visible, + sga_campos_conf.obligatorio, + sga_campos_conf.se_imprime + FROM sga_campos_conf, + sga_propuestas_tipos + WHERE sga_campos_conf.propuesta_tipo = '200' + AND sga_propuestas_tipos.propuesta_tipo <> '200' + ORDER BY sga_propuestas_tipos.propuesta_tipo, + sga_campos_conf.columna; + diff --git a/BD/sql/datos/90_app_versiones_base.sql b/BD/sql/datos/90_app_versiones_base.sql new file mode 100644 index 0000000..63fda9d --- /dev/null +++ b/BD/sql/datos/90_app_versiones_base.sql @@ -0,0 +1,7 @@ + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Versión de la base +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +INSERT INTO app_versiones_base(version_base, fecha_actualizacion, observaciones) +VALUES ('3.21', CURRENT_TIMESTAMP, 'Versión 3.21 de la base de Preinscripción'); + diff --git a/BD/sql/fks/fks_sga_actuacion_doc.sql b/BD/sql/fks/fks_sga_actuacion_doc.sql new file mode 100644 index 0000000..8a2e6a3 --- /dev/null +++ b/BD/sql/fks/fks_sga_actuacion_doc.sql @@ -0,0 +1,14 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- FKs tabla: sga_actuacion_doc +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX ifk__sga_actuacion_doc__sga_preinscripcion; +CREATE INDEX ifk__sga_actuacion_doc__sga_preinscripcion ON sga_actuacion_doc (id_preinscripcion); + +-- ALTER TABLE sga_actuacion_doc DROP CONSTRAINT fk__sga_actuacion_doc__sga_preinscripcion; +ALTER TABLE sga_actuacion_doc + ADD CONSTRAINT fk__sga_actuacion_doc__sga_preinscripcion FOREIGN KEY (id_preinscripcion) + REFERENCES sga_preinscripcion (id_preinscripcion) on update restrict on delete restrict; + diff --git a/BD/sql/fks/fks_sga_actuacion_prof.sql b/BD/sql/fks/fks_sga_actuacion_prof.sql new file mode 100644 index 0000000..c7b0c23 --- /dev/null +++ b/BD/sql/fks/fks_sga_actuacion_prof.sql @@ -0,0 +1,14 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- FKs tabla: sga_actuacion_prof +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX ifk__sga_actuacion_prof__sga_preinscripcion; +CREATE INDEX ifk__sga_actuacion_prof__sga_preinscripcion ON sga_actuacion_prof (id_preinscripcion); + +-- ALTER TABLE sga_actuacion_prof DROP CONSTRAINT fk__sga_actuacion_prof__sga_preinscripcion; +ALTER TABLE sga_actuacion_prof + ADD CONSTRAINT fk__sga_actuacion_prof__sga_preinscripcion FOREIGN KEY (id_preinscripcion) + REFERENCES sga_preinscripcion (id_preinscripcion) on update restrict on delete restrict; + diff --git a/BD/sql/fks/fks_sga_campos_conf.sql b/BD/sql/fks/fks_sga_campos_conf.sql new file mode 100644 index 0000000..ef1d8c1 --- /dev/null +++ b/BD/sql/fks/fks_sga_campos_conf.sql @@ -0,0 +1,24 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- FKs tabla: sga_campos_conf +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX ifk__sga_campos_conf__sga_campos_form; +CREATE INDEX ifk__sga_campos_conf__sga_campos_form ON sga_campos_conf (columna); + +-- ALTER TABLE sga_campos_conf DROP CONSTRAINT fk__sga_campos_conf__sga_campos_form; +ALTER TABLE sga_campos_conf + ADD CONSTRAINT fk__sga_campos_conf__sga_campos_form FOREIGN KEY (columna) + REFERENCES sga_campos_form (columna) on update restrict on delete restrict; + +-------------------------------------------------------------------------------- + +-- DROP INDEX ifk__sga_campos_conf__sga_propuestas_tipos; +CREATE INDEX ifk__sga_campos_conf__sga_propuestas_tipos ON sga_campos_conf (propuesta_tipo); + +-- ALTER TABLE sga_campos_conf DROP CONSTRAINT fk__sga_campos_conf__sga_propuestas_tipos; +ALTER TABLE sga_campos_conf + ADD CONSTRAINT fk__sga_campos_conf__sga_propuestas_tipos FOREIGN KEY (propuesta_tipo) + REFERENCES sga_propuestas_tipos (propuesta_tipo) on update restrict on delete restrict; + diff --git a/BD/sql/fks/fks_sga_formacion_acad.sql b/BD/sql/fks/fks_sga_formacion_acad.sql new file mode 100644 index 0000000..3a0c410 --- /dev/null +++ b/BD/sql/fks/fks_sga_formacion_acad.sql @@ -0,0 +1,17 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- FKs tabla: sga_formacion_acad +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX ifk__sga_formacion_acad__sga_preinscripcion; +CREATE INDEX ifk__sga_formacion_acad__sga_preinscripcion ON sga_formacion_acad (id_preinscripcion); + +-- ALTER TABLE sga_formacion_acad DROP CONSTRAINT fk__sga_formacion_acad__sga_preinscripcion; +ALTER TABLE sga_formacion_acad + ADD CONSTRAINT fk__sga_formacion_acad__sga_preinscripcion FOREIGN KEY (id_preinscripcion) + REFERENCES sga_preinscripcion (id_preinscripcion) on update restrict on delete restrict; + + + + diff --git a/BD/sql/fks/fks_sga_preinscripcion_propuestas.sql b/BD/sql/fks/fks_sga_preinscripcion_propuestas.sql new file mode 100644 index 0000000..a0e0da2 --- /dev/null +++ b/BD/sql/fks/fks_sga_preinscripcion_propuestas.sql @@ -0,0 +1,15 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- FKs tabla: sga_preinscripcion_propuestas +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX ifk__sga_preinscripcion_propuestas__sga_preinscripcion; +CREATE INDEX ifk__sga_preinscripcion_propuestas__sga_preinscripcion ON sga_preinscripcion_propuestas (id_preinscripcion); + +-- ALTER TABLE sga_preinscripcion_propuestas DROP CONSTRAINT fk__sga_preinscripcion_propuestas__sga_preinscripcion; +ALTER TABLE sga_preinscripcion_propuestas + ADD CONSTRAINT fk__sga_preinscripcion_propuestas__sga_preinscripcion FOREIGN KEY (id_preinscripcion) + REFERENCES sga_preinscripcion (id_preinscripcion) on update restrict on delete restrict; + + diff --git a/BD/sql/fks/fks_sga_requisitos_digitales.sql b/BD/sql/fks/fks_sga_requisitos_digitales.sql new file mode 100644 index 0000000..3b4f0e2 --- /dev/null +++ b/BD/sql/fks/fks_sga_requisitos_digitales.sql @@ -0,0 +1,14 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- FKs tabla: sga_requisitos_digitales +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX ifk__sga_requisitos_digitales__sga_preinscripcion; +CREATE INDEX ifk__sga_requisitos_digitales__sga_preinscripcion ON sga_requisitos_digitales (id_preinscripcion); + +-- ALTER TABLE sga_requisitos_digitales DROP CONSTRAINT fk__sga_requisitos_digitales__sga_preinscripcion; +ALTER TABLE sga_requisitos_digitales + ADD CONSTRAINT fk__sga_requisitos_digitales__sga_preinscripcion FOREIGN KEY (id_preinscripcion) + REFERENCES sga_preinscripcion (id_preinscripcion) on update restrict on delete restrict; + diff --git a/BD/sql/funciones/f_limpiar_acentos.sql b/BD/sql/funciones/f_limpiar_acentos.sql new file mode 100644 index 0000000..5644d4f --- /dev/null +++ b/BD/sql/funciones/f_limpiar_acentos.sql @@ -0,0 +1,26 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Function: f_limpiar_acentos +-- +-- Quita los tildes de una cadena de caracteres +-- +-- Recibe: Text - Cadena a quitar los tildes +-- Retorna: Text - Texto sin tildes +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- Creo la extensión unaccent +CREATE EXTENSION IF NOT EXISTS unaccent; + +-- DROP FUNCTION f_limpiar_acentos(text); +CREATE OR REPLACE FUNCTION f_limpiar_acentos(text) +RETURNS text +IMMUTABLE +STRICT +LANGUAGE SQL +AS $$ +SELECT REPLACE(REPLACE(unaccent(REPLACE(REPLACE($1, 'Ñ', '%enie_may%'), 'ñ', '%enie_min%')), '%enie_may%', 'Ñ'), '%enie_min%', 'ñ'); +$$; + +GRANT EXECUTE ON FUNCTION f_limpiar_acentos(text) to public; + diff --git a/BD/sql/indices/id__sga_preinscripcion__apellido_nombres_fecha_nac.sql b/BD/sql/indices/id__sga_preinscripcion__apellido_nombres_fecha_nac.sql new file mode 100644 index 0000000..e9c976f --- /dev/null +++ b/BD/sql/indices/id__sga_preinscripcion__apellido_nombres_fecha_nac.sql @@ -0,0 +1,10 @@ +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- MODULO PREINSCIRPCION A PROPUESTA - Sistema de Gestión Académica +-- Versión 3.22.0 +-- Tabla: sga_preinscripcion +-- Indice: id__sga_preinscripcion__apellido_nombres_fecha_nac +-- Utilizado en reporte de preinscripciones desde Gestion. +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX IF EXISTS id__sga_preinscripcion__apellido_nombres_fecha_nac; +CREATE INDEX id__sga_preinscripcion__apellido_nombres_fecha_nac ON sga_preinscripcion (apellido, nombres, fecha_nacimiento); diff --git a/BD/sql/indices/id__sga_preinscripcion__codigo_validacion.sql b/BD/sql/indices/id__sga_preinscripcion__codigo_validacion.sql new file mode 100644 index 0000000..4639fe3 --- /dev/null +++ b/BD/sql/indices/id__sga_preinscripcion__codigo_validacion.sql @@ -0,0 +1,9 @@ +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Version 3.22.0 +-- Tabla: sga_preinscripcion +-- Indice: id__sga_preinscripcion__codigo_validacion +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX IF EXISTS id__sga_preinscripcion__codigo_validacion; +CREATE INDEX id__sga_preinscripcion__codigo_validacion ON sga_preinscripcion (codigo_validacion); + diff --git a/BD/sql/indices/iu__admin_usuarios__usuario.sql b/BD/sql/indices/iu__admin_usuarios__usuario.sql new file mode 100644 index 0000000..f2d9e48 --- /dev/null +++ b/BD/sql/indices/iu__admin_usuarios__usuario.sql @@ -0,0 +1,9 @@ +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Tabla: sga_preinscripcion +-- Indice: iu__admin_usuarios__usuario +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX iu_admin_usuarios_usuario; +CREATE UNIQUE INDEX iu__admin_usuarios__usuario ON admin_usuarios (usuario); + + diff --git a/BD/sql/indices/iu__sga_preinscripcion__usuario.sql b/BD/sql/indices/iu__sga_preinscripcion__usuario.sql new file mode 100644 index 0000000..7e938b6 --- /dev/null +++ b/BD/sql/indices/iu__sga_preinscripcion__usuario.sql @@ -0,0 +1,8 @@ +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Tabla: sga_preinscripcion +-- Indice: iu__sga_preinscripcion__usuario +-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP INDEX iu__sga_preinscripcion__usuario; +CREATE UNIQUE INDEX iu__sga_preinscripcion__usuario ON sga_preinscripcion (usuario); + diff --git a/BD/sql/lenguajes/language_plpgsql.sql b/BD/sql/lenguajes/language_plpgsql.sql new file mode 100644 index 0000000..226e7e1 --- /dev/null +++ b/BD/sql/lenguajes/language_plpgsql.sql @@ -0,0 +1,31 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- Se chequea la existencia del lenguaje plpgsql. Si no existe, se lo crea +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +CREATE OR REPLACE FUNCTION create_language_plpgsql() +RETURNS BOOLEAN AS $$ + CREATE LANGUAGE plpgsql; + SELECT TRUE; +$$ LANGUAGE SQL; + +SELECT CASE WHEN NOT +( + SELECT TRUE AS exists + FROM pg_language + WHERE lanname = 'plpgsql' + UNION + SELECT FALSE AS exists + ORDER BY exists DESC + LIMIT 1 +) +THEN + create_language_plpgsql() +ELSE + FALSE +END AS plpgsql_created; + +DROP FUNCTION create_language_plpgsql(); + +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + diff --git a/BD/sql/tablas/admin_usuarios.sql b/BD/sql/tablas/admin_usuarios.sql new file mode 100644 index 0000000..3f416c3 --- /dev/null +++ b/BD/sql/tablas/admin_usuarios.sql @@ -0,0 +1,21 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: admin_usuarios +-- +-- Usuarios de ADMINISTRACIÓN del módulo de preinscripcion. +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP SEQUENCE admin_usuarios_seq; +CREATE SEQUENCE admin_usuarios_seq START 1; + +-- DROP TABLE usuarios; +CREATE TABLE admin_usuarios +( + id_usuario integer DEFAULT nextval('admin_usuarios_seq'::text) NOT NULL, + usuario varchar(100) NOT NULL, + clave varchar(255) NOT NULL, + id_pto_acceso varchar NOT NULL +); + +ALTER TABLE admin_usuarios ADD CONSTRAINT pk_admin_usuarios PRIMARY KEY (id_usuario) ; diff --git a/BD/sql/tablas/app_versiones_base.sql b/BD/sql/tablas/app_versiones_base.sql new file mode 100644 index 0000000..b00c662 --- /dev/null +++ b/BD/sql/tablas/app_versiones_base.sql @@ -0,0 +1,22 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: app_versiones_base +-- +-- Versiones de la base de datos +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP SEQUENCE app_versiones_base_seq; +CREATE SEQUENCE app_versiones_base_seq START 1; + +-- DROP TABLE IF EXISTS app_versiones_base; +CREATE TABLE app_versiones_base +( + id_conversion INTEGER NOT NULL DEFAULT nextval('app_versiones_base_seq'::text) , + version_base VARCHAR(10) NOT NULL, + fecha_actualizacion TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + script_ejecutado TEXT, + observaciones TEXT +); + +ALTER TABLE app_versiones_base ADD CONSTRAINT pk_app_versiones_base PRIMARY KEY (id_conversion); diff --git a/BD/sql/tablas/cfg_perfiles_datos.sql b/BD/sql/tablas/cfg_perfiles_datos.sql new file mode 100644 index 0000000..76a537b --- /dev/null +++ b/BD/sql/tablas/cfg_perfiles_datos.sql @@ -0,0 +1,26 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: cfg_perfiles_datos +-- +-- Configuración de perfiles de datos por punto de acceso +-- Para un determinado id_pto_acceso, se insertará un registro por cada RA, +-- tipo de propuesta o propuesta. +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +--DROP SEQUENCE cfg_perfiles_datos_seq; +CREATE SEQUENCE cfg_perfiles_datos_seq START 1; + +--DROP TABLE IF EXISTS cfg_perfiles_datos; +CREATE TABLE cfg_perfiles_datos +( + cfg_perfil_datos INTEGER DEFAULT nextval('cfg_perfiles_datos_seq'::text) NOT NULL, + id_pto_acceso VARCHAR NOT NULL, + ra INTEGER, + propuesta_tipo INTEGER, + propuesta INTEGER, + ubicacion INTEGER +); + +ALTER TABLE cfg_perfiles_datos ADD CONSTRAINT pk_cfg_perfiles_datos PRIMARY KEY (cfg_perfil_datos); + diff --git a/BD/sql/tablas/sga_actuacion_doc.sql b/BD/sql/tablas/sga_actuacion_doc.sql new file mode 100644 index 0000000..2d251b4 --- /dev/null +++ b/BD/sql/tablas/sga_actuacion_doc.sql @@ -0,0 +1,27 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: sga_actuacion_doc +-- +-- Datos de actuación docente de aspirantes +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +--DROP SEQUENCE sga_actuacion_doc_seq; +CREATE SEQUENCE sga_actuacion_doc_seq START 1; + +-- DROP TABLE sga_actuacion_doc; +CREATE TABLE sga_actuacion_doc +( + actuacion_doc INTEGER DEFAULT nextval('sga_actuacion_doc_seq'::text) NOT NULL , + id_preinscripcion INTEGER NOT NULL, + institucion INTEGER, + institucion_prein VARCHAR(255), + cargo VARCHAR(255), + materia VARCHAR(255), + hora_sem_trab INTEGER, + fecha_desde DATE, + fecha_hasta DATE +); + +ALTER TABLE sga_actuacion_doc ADD CONSTRAINT pk_sga_actuacion_doc PRIMARY KEY (actuacion_doc); + diff --git a/BD/sql/tablas/sga_actuacion_prof.sql b/BD/sql/tablas/sga_actuacion_prof.sql new file mode 100644 index 0000000..717a070 --- /dev/null +++ b/BD/sql/tablas/sga_actuacion_prof.sql @@ -0,0 +1,26 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: sga_actuacion_prof +-- +-- Datos de actuación profesional de aspirantes +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +--DROP SEQUENCE sga_actuacion_prof_seq; +CREATE SEQUENCE sga_actuacion_prof_seq START 1; + +-- DROP TABLE sga_actuacion_prof; +CREATE TABLE sga_actuacion_prof +( + actuacion_prof INTEGER DEFAULT nextval('sga_actuacion_prof_seq'::text) NOT NULL, + id_preinscripcion INTEGER NOT NULL, + empresa VARCHAR(255), + cargo VARCHAR(255), + area VARCHAR(255), + hora_sem_trab INTEGER, + fecha_desde DATE, + fecha_hasta DATE +); + +ALTER TABLE sga_actuacion_prof ADD CONSTRAINT pk_sga_actuacion_prof PRIMARY KEY (actuacion_prof); + diff --git a/BD/sql/tablas/sga_campos_conf.sql b/BD/sql/tablas/sga_campos_conf.sql new file mode 100644 index 0000000..b8c5862 --- /dev/null +++ b/BD/sql/tablas/sga_campos_conf.sql @@ -0,0 +1,22 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: sga_actuacion_doc +-- +-- Configuración de los campos del formulario por tipo de propuesta. +-- visible, obligatorio, se_imprime, genera_reporte: 1 = Si / 0 = No +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP TABLE sga_campos_conf; +CREATE TABLE sga_campos_conf +( + propuesta_tipo INTEGER NOT NULL, + columna VARCHAR(40) NOT NULL, + visible SMALLINT NOT NULL DEFAULT 1, + obligatorio SMALLINT NOT NULL DEFAULT 0, + se_imprime SMALLINT NOT NULL DEFAULT 1, + genera_reporte SMALLINT NOT NULL DEFAULT 0 +); + +ALTER TABLE sga_campos_conf ADD CONSTRAINT pk_campos_conf PRIMARY KEY (propuesta_tipo, columna); + diff --git a/BD/sql/tablas/sga_campos_form.sql b/BD/sql/tablas/sga_campos_form.sql new file mode 100644 index 0000000..2761f26 --- /dev/null +++ b/BD/sql/tablas/sga_campos_form.sql @@ -0,0 +1,17 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: sga_actuacion_doc +-- +-- Campos del formulario de Preinscripción +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP TABLE sga_campos_form; +CREATE TABLE sga_campos_form +( + columna VARCHAR(40) NOT NULL, + descripcion VARCHAR(300) +); + +ALTER TABLE sga_campos_form ADD CONSTRAINT pk_campos_form PRIMARY KEY (columna); + diff --git a/BD/sql/tablas/sga_formacion_acad.sql b/BD/sql/tablas/sga_formacion_acad.sql new file mode 100644 index 0000000..02ad660 --- /dev/null +++ b/BD/sql/tablas/sga_formacion_acad.sql @@ -0,0 +1,32 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: sga_formacion_acad +-- +-- Datos de formación académica de aspirantes +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +--DROP SEQUENCE sga_formacion_acad_seq; +CREATE SEQUENCE sga_formacion_acad_seq START 1; + +-- DROP TABLE sga_formacion_acad; +CREATE TABLE sga_formacion_acad +( + formacion_acad INTEGER DEFAULT nextval('sga_formacion_acad_seq'::text) NOT NULL, + id_preinscripcion INTEGER NOT NULL, + titulo_superior VARCHAR(5), + titulo_sup_prein VARCHAR(255), + institucion INTEGER, + institucion_prein VARCHAR(255), + fecha_ingreso DATE, + fecha_egreso DATE, + titulo_tesis VARCHAR(255), + director_tesis VARCHAR(255), + categoria_coneau CHAR(2), + duracion_teorica INTEGER, + nivel_estudio INTEGER, -- nivel_estudio: 4 = Superior / 5 = Universitario / 6 = Posgrado + estado CHAR(1) -- estado: F = Finalizado / A = Abandonado / C = En Curso +); + +ALTER TABLE sga_formacion_acad ADD CONSTRAINT pk_sga_formacion_acad PRIMARY KEY (formacion_acad); + diff --git a/BD/sql/tablas/sga_preinscripcion.sql b/BD/sql/tablas/sga_preinscripcion.sql new file mode 100644 index 0000000..bfa9a6c --- /dev/null +++ b/BD/sql/tablas/sga_preinscripcion.sql @@ -0,0 +1,378 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0, 3.12.0, 3.21.0, 3.22.0 +-- Tabla: sga_preinscripcion +-- +-- Formulario de Preinscripción +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +--DROP SEQUENCE sga_preinscripcion_seq; +CREATE SEQUENCE IF NOT EXISTS sga_preinscripcion_seq START 1; + +-- DROP TABLE IF EXISTS sga_preinscripcion; +CREATE TABLE sga_preinscripcion +( + id_preinscripcion INTEGER DEFAULT nextval('sga_preinscripcion_seq'::text) NOT NULL, + --usuario VARCHAR(100) NOT NULL, + clave VARCHAR(255) NOT NULL, + codigo_validacion VARCHAR(127), + codigo_validacion_alta Timestamp with time zone, + email_valido TIMESTAMP, + facebook VARCHAR(100), + google VARCHAR(100), + fecha_registro TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP, + fecha_ult_modif DATE NOT NULL, + version_modificacion INTEGER NOT NULL, + version_impresa INTEGER, + persona INTEGER, -- Para completar por G3 al incorporar + duplicada Char(1) NOT NULL DEFAULT 'N', + pregunta_secreta VARCHAR(255) NOT NULL DEFAULT '', + respuesta_secreta VARCHAR(255) NOT NULL DEFAULT '', + ---------------------------------------------------------------------------- + + -- Datos personales principales + apellido VARCHAR(60) NOT NULL, + nombres VARCHAR(60) NOT NULL, + apellido_elegido VARCHAR(60) , + nombres_elegido VARCHAR(60) , + pais_documento INTEGER NOT NULL, + tipo_documento INTEGER NOT NULL, + nro_documento VARCHAR(20) NOT NULL, + validado_con_renaper CHAR(1) NOT NULL DEFAULT 'N', + numero_cuil VARCHAR(15), + sexo CHAR(1), + identidad_genero INTEGER, + identidad_genero_otro VARCHAR(100), + fecha_nacimiento DATE, + nacionalidad INTEGER, + loc_nacimiento INTEGER, + turno_preferido VARCHAR(20), -- Turno preferido de cursada + + -- Colegio secundario + es_mayor_25_sin_secundario Char(1) NOT NULL DEFAULT 'N', + colegio_secundario INTEGER, + titulo_secundario INTEGER, + anio_egreso_sec INTEGER, + + -- Cedula de Identidad - Pasaporte + ent_emisora_ci INTEGER, + nro_ci DECIMAL(15,0), + pais_emisor_pasap INTEGER, + nro_pasap VARCHAR(15), + + -- Datos padres + apellido_padre VARCHAR(60), + nombres_padre VARCHAR(60), + apellido_madre VARCHAR(60), + nombres_madre VARCHAR(60), + + -- Datos censales - personales + alu_est_civil_uh CHAR(1), + alu_trab_hace CHAR(1), + alu_trab_desjub CHAR(1), + alu_trab_fami CHAR(1), + alu_trab_ocup CHAR(1), + alu_trab_tarea VARCHAR(255), + padre_trab_hace CHAR(1), + padre_trab_ocup CHAR(1), + padre_trab_otro CHAR(1), + padre_trab_tarea VARCHAR(255), + madre_trab_hace CHAR(1), + madre_trab_ocup CHAR(1), + madre_trab_otro CHAR(1), + madre_trab_tarea VARCHAR(255), + alu_cos_est_ap_fam CHAR(1), + alu_cos_est_trab CHAR(1), + alu_cos_est_beca CHAR(1), + alu_cos_est_plsoc CHAR(1), + alu_cos_est_otra CHAR(1), + alu_cos_est_espec VARCHAR(255), + alu_beca_muni CHAR(1), + alu_beca_otra CHAR(1), + alu_beca_prov CHAR(1), + alu_beca_tipo_eco CHAR(1), + alu_beca_tipo_ser CHAR(1), + alu_beca_tipo_inv CHAR(1), + alu_beca_eco_tran CHAR(1), + alu_beca_eco_come CHAR(1), + alu_beca_eco_foto CHAR(1), + alu_beca_eco_efec CHAR(1), + alu_beca_eco_habi CHAR(1), + alu_otestsup_uni VARCHAR(255), + alu_otestsup_tipo CHAR(1), + alu_otestsup_area VARCHAR(255), + alu_otestsup_carr VARCHAR(255), + alu_otestsup_esta CHAR(1), + alu_otestsup_razon_abandono INTEGER, + alu_otestsup_razon_abandono_otros VARCHAR(200), + alu_otestsup_egre INTEGER, + alu_otestsup_niv CHAR(1), + alu_tec_pc_casa CHAR(1), + alu_tec_pc_trab CHAR(1), + alu_tec_pc_univ CHAR(1), + alu_tec_pc_otro CHAR(1), + alu_tec_int_movil CHAR(1), + alu_tec_int_casa CHAR(1), + alu_tec_int_trab CHAR(1), + alu_tec_int_univ CHAR(1), + alu_tec_int_otro CHAR(1), + alu_idioma_ingl CHAR(1), + alu_idioma_fran CHAR(1), + alu_idioma_port CHAR(1), + alu_idioma_ital CHAR(1), + alu_idioma_alem CHAR(1), + alu_idioma_chino CHAR(1), + alu_idioma_otro VARCHAR(20), + alu_idioma_otro_nivel CHAR(1), + sec_egreso CHAR(1), + o_est_ter_estado CHAR(1), + o_est_uni_estado CHAR(1), + sit_actual_padre CHAR(1), + sit_actual_madre CHAR(1), + tit_obt_padre VARCHAR(60), + tit_obt_madre VARCHAR(60), + cant_fami_cargo INTEGER, + cant_empl_cargo INTEGER, + barrio_per_lec VARCHAR(60), + barrio_proc VARCHAR(60), + barrio_alleg VARCHAR(60), + pais_nacionalidad INTEGER, + existe_trab_alum INTEGER, + cant_hijos_alum INTEGER, + vive_actual_con INTEGER, + obra_social_alu CHAR(1), + obra_social_trab CHAR(1), + obra_social_fami CHAR(1), + obra_social_univ CHAR(1), + costea_estudios INTEGER, + tiene_beca CHAR(1), + tiene_beca_univ CHAR(1), + tiene_beca_nacio CHAR(1), + tiene_beca_inter CHAR(1), + remuneracion CHAR(1), + hora_sem_trab_alum INTEGER, + practica_deportes CHAR(1), + hace_dep_univ CHAR(1), + hace_dep_gim_priv CHAR(1), + hace_dep_partic CHAR(1), + hace_dep_otros CHAR(1), + prac_dep_futbol CHAR(1), + prac_dep_basquet CHAR(1), + prac_dep_voley CHAR(1), + prac_dep_gimnasia CHAR(1), + prac_dep_tenis CHAR(1), + prac_dep_natacion CHAR(1), + prac_dep_handball CHAR(1), + prac_dep_otros CHAR(1), + padre_vive CHAR(1), + madre_vive CHAR(1), + vive_con_conyuge INTEGER, + vive_con_padre INTEGER, + vive_con_madre INTEGER, + vive_con_hijos INTEGER, + vive_con_hermanos INTEGER, + celular_numero VARCHAR(18), + celular_compania VARCHAR(5), + estado_civil INTEGER, + e_mail VARCHAR(100), + tipo_visa VARCHAR(20), + otorgamiento_visa DATE, + vencimiento_visa DATE, + tipo_residencia CHAR(1), + tipo_res_per_lect INTEGER, + calle_per_lect VARCHAR(50), + numero_per_lect VARCHAR(10), + piso_per_lect VARCHAR(3), + dpto_per_lect VARCHAR(5), + unidad_per_lect VARCHAR(3), + loc_per_lect INTEGER, + cp_per_lect VARCHAR(15), + te_per_lect VARCHAR(18), + calle_proc VARCHAR(50), + numero_proc VARCHAR(10), + piso_proc VARCHAR(3), + dpto_proc VARCHAR(5), + unidad_proc VARCHAR(3), + loc_proc INTEGER, + cp_proc VARCHAR(15), + te_proc VARCHAR(18), + otros_estud_super VARCHAR(60), + fliares_cargo_alum VARCHAR(60), + sit_laboral_alu INTEGER, + categ_ocup_alum INTEGER, + act_econom_alum INTEGER, + det_rama_act_alum VARCHAR(60), + rel_trab_propuesta INTEGER, + sit_laboral_padre INTEGER, + ult_est_cur_padre INTEGER, + act_econom_padre INTEGER, + det_rama_act_padre VARCHAR(60), + categ_ocup_padre INTEGER, + sit_laboral_madre INTEGER, + ult_est_cur_madre INTEGER, + act_econom_madre INTEGER, + det_rama_act_madre VARCHAR(60), + categ_ocup_madre INTEGER, + apellido_pers_alleg VARCHAR(60), + nombre_pers_alleg VARCHAR(60), + tipo_allegado CHAR(1), + calle_pers_alleg VARCHAR(50), + nro_pers_alleg VARCHAR(10), + piso_pers_alleg VARCHAR(3), + dpto_pers_alleg VARCHAR(5), + unidad_pers_alleg VARCHAR(3), + loc_pers_alleg INTEGER, + cp_pers_alleg VARCHAR(15), + te_pers_alleg VARCHAR(18), + residencia CHAR(1), + fecha_respre_otorg DATE, + fecha_respre_venc DATE, + -- Pueblos originacios + pertenece_pueblo_originario CHAR(1), + pueblo_originario INTEGER, + pueblo_originario_otro VARCHAR(100), + -- Inscripto en otra Institución + insc_otra_inst CHAR(1), + insc_otra_inst_descr VARCHAR(100), + -- Cómo conocío la institución + como_conocio_institucion VARCHAR(255), + -- Orientación vocacional + orientacion_recibida INTEGER, + -- Motivos de elección de la Institución + mot_inst_econom CHAR(1), + mot_inst_prestigio CHAR(1), + mot_inst_difusion CHAR(1), + mot_inst_rec_estud CHAR(1), + mot_inst_rec_amigos CHAR(1), + mot_inst_sist_ing CHAR(1), + mot_inst_ubicacion CHAR(1), + mot_inst_otros CHAR(1), + -- Motivos de elección de Propuesta + mot_prop_vocacion CHAR(1), + mot_prop_sug_fam CHAR(1), + mot_prop_rec_social CHAR(1), + mot_prop_ins_lab CHAR(1), + mot_prop_perf_prof CHAR(1), + mot_prop_mejora_ec CHAR(1), + mot_prop_util_soc CHAR(1), + mot_prop_otros CHAR(1), + -- Es celíaco + es_celiaco CHAR(1), + -- Discapacidad + condicion_discapacidad Char(1) NOT NULL DEFAULT 'N', + tiene_cud Char(1) DEFAULT 'N', + disc_auditiva Char(1) DEFAULT 'N', + aud_tipo Smallint DEFAULT 1, + aud_lenguaje_senias Char(1) DEFAULT 'N', + aud_lenguaje_labial Char(1) DEFAULT 'N', + aud_comunicacion_otra Text, + aud_apoyo_vida_diaria Text, + aud_req_interprete_lengua_senias Char(1) DEFAULT 'N', + aud_req_aro_magnetico Char(1) DEFAULT 'N', + aud_req_otros_apoyos Char(1) DEFAULT 'N', + aud_otros_apoyos Text, + disc_visual Char(1) DEFAULT 'N', + vis_dificultad_para_ver Smallint DEFAULT 1, + vis_apoyo_vida_diaria Text, + vis_req_archivo_audio Char(1) DEFAULT 'N', + vis_req_texto_digital Char(1) DEFAULT 'N', + vis_req_texto_braile Char(1) DEFAULT 'N', + vis_req_otros_apoyos Char(1) DEFAULT 'N', + vis_otros_apoyos Text, + disc_motora Char(1) DEFAULT 'N', + mot_apoyo_vida_diaria Text, + mot_req_apoyo_aula Char(1) DEFAULT 'N', + mot_apoyo_aula Text, + mot_req_otros_apoyos Char(1) DEFAULT 'N', + mot_otros_apoyos Text, + disc_cond_psicosocial Char(1) DEFAULT 'N', + psi_descripcion Text, + psi_apoyo_vida_diaria Text, + psi_req_otros_apoyos Char(1) DEFAULT 'N', + psi_otros_apoyos Text, + disc_otra Char(1) DEFAULT 'N', + otra_descripcion Text, + otra_req_apoyo_vida_diaria Char(1) DEFAULT 'N', + otra_apoyo_vida_diaria Text, + informacion_importante Text, + -- Adeuda materias + adeuda_materias CHAR(1), + estado CHAR(1) NOT NULL -- P = Pendiente de activacion + -- A = Activado. La persona respondió el mail enviado + -- C = Comprobante impreso. Preparado para ingresarlo en Guarani + -- I = Inscripto en Gestión +); + +ALTER TABLE sga_preinscripcion ADD CONSTRAINT pk_sga_preinscripcion PRIMARY KEY (id_preinscripcion); + +---- Valores por defecto para campos "booleanos" ------------------------------- + +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_est_civil_uh SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_trab_desjub SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_trab_fami SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN remuneracion SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN practica_deportes SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN hace_dep_gim_priv SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN hace_dep_univ SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN hace_dep_partic SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN hace_dep_otros SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN prac_dep_futbol SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN prac_dep_basquet SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN prac_dep_voley SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN prac_dep_gimnasia SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN prac_dep_tenis SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN prac_dep_natacion SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN prac_dep_handball SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN prac_dep_otros SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_cos_est_ap_fam SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_cos_est_plsoc SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_cos_est_trab SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_cos_est_beca SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_cos_est_otra SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN tiene_beca SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN tiene_beca_univ SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN tiene_beca_inter SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN tiene_beca_nacio SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_prov SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_muni SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_otra SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_tipo_eco SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_tipo_ser SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_tipo_inv SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_eco_tran SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_eco_efec SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_eco_foto SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_eco_habi SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_beca_eco_come SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_pc_casa SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_pc_trab SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_pc_univ SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_pc_otro SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_int_casa SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_int_trab SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_int_univ SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_int_movil SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN alu_tec_int_otro SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN insc_otra_inst SET DEFAULT 'N'; + +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_inst_econom SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_inst_prestigio SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_inst_difusion SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_inst_rec_estud SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_inst_rec_amigos SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_inst_sist_ing SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_inst_ubicacion SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_inst_otros SET DEFAULT 'N'; + +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_prop_vocacion SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_prop_sug_fam SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_prop_rec_social SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_prop_ins_lab SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_prop_perf_prof SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_prop_mejora_ec SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_prop_util_soc SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN mot_prop_otros SET DEFAULT 'N'; + +ALTER TABLE sga_preinscripcion ALTER COLUMN adeuda_materias SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN insc_otra_inst SET DEFAULT 'N'; +ALTER TABLE sga_preinscripcion ALTER COLUMN es_celiaco SET DEFAULT 'N'; diff --git a/BD/sql/tablas/sga_preinscripcion_propuestas.sql b/BD/sql/tablas/sga_preinscripcion_propuestas.sql new file mode 100644 index 0000000..071e13d --- /dev/null +++ b/BD/sql/tablas/sga_preinscripcion_propuestas.sql @@ -0,0 +1,30 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0, 3.13.0 +-- Tabla: sga_preinscripcion_propuestas +-- +-- Propuestas en las que se ha preinscripto un aspirante +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +--DROP SEQUENCE sga_preinscripcion_propuestas_seq; +CREATE SEQUENCE sga_preinscripcion_propuestas_seq START 1; + +-- DROP TABLE sga_preinscripcion_propuestas; +CREATE TABLE sga_preinscripcion_propuestas +( + preinscripcion_propuesta INTEGER NOT NULL DEFAULT nextval('sga_preinscripcion_propuestas_seq'::text) , + id_preinscripcion INTEGER NOT NULL, + responsable_academica INTEGER NOT NULL, + propuesta INTEGER NOT NULL, + ubicacion INTEGER NOT NULL, + modalidad CHAR(1) NOT NULL DEFAULT 'P', + periodo_insc INTEGER NOT NULL, + fecha_preinscripcion TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + fecha_fin_vigencia DATE NOT NULL, + estado CHAR(1) NOT NULL DEFAULT 'P', -- P: Pendiente de inscripción, I: Inscripto en Gestión, C: Copiado al modelo de Gestión, S: Solicitud de informacion al aspirante + atiende INTEGER, + observaciones TEXT +); + +ALTER TABLE sga_preinscripcion_propuestas ADD CONSTRAINT pk_sga_preinscripcion_propuestas PRIMARY KEY (preinscripcion_propuesta); + diff --git a/BD/sql/tablas/sga_propuestas_tipos.sql b/BD/sql/tablas/sga_propuestas_tipos.sql new file mode 100644 index 0000000..8c1fe00 --- /dev/null +++ b/BD/sql/tablas/sga_propuestas_tipos.sql @@ -0,0 +1,18 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.7.0 +-- Tabla: sga_propuestas_tipos +-- +-- Tipos de propuestas formativas +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP TABLE IF EXISTS sga_propuestas_tipos; +CREATE TABLE sga_propuestas_tipos +( + propuesta_tipo INTEGER NOT NULL, + descripcion VARCHAR(100) NOT NULL +); + +-- ALTER TABLE sga_propuestas_tipos DROP CONSTRAINT pk_sga_propuestas_tipos; +ALTER TABLE sga_propuestas_tipos ADD CONSTRAINT pk_sga_propuestas_tipos PRIMARY KEY (propuesta_tipo); + diff --git a/BD/sql/tablas/sga_requisitos_digitales.sql b/BD/sql/tablas/sga_requisitos_digitales.sql new file mode 100644 index 0000000..678a047 --- /dev/null +++ b/BD/sql/tablas/sga_requisitos_digitales.sql @@ -0,0 +1,28 @@ +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-- SIU - PREINSCRIPCIÓN +-- Versión de creación / revisión: 3.8.0 +-- Tabla: sga_requisitos_digitales +-- +-- Requisitos digitales presentados por un aspirante +-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +-- DROP SEQUENCE sga_requisitos_digitales_seq; +CREATE SEQUENCE sga_requisitos_digitales_seq START 1; + +-- DROP TABLE IF EXISTS sga_requisitos_digitales; +CREATE TABLE sga_requisitos_digitales +( + requisito_digital INTEGER NOT NULL DEFAULT nextval('sga_requisitos_digitales_seq'::text) , + id_preinscripcion INTEGER NOT NULL, + requisito INTEGER NOT NULL, + id_documento TEXT NOT NULL, + estado CHAR(1) DEFAULT 'P' NOT NULL -- P: Pendiente de validación | A: Aceptado en G3 | R: Rechazado en G3 +); + +-- ALTER TABLE sga_requisitos_digitales DROP CONSTRAINT pk_sga_requisitos_digitales; +ALTER TABLE sga_requisitos_digitales ADD CONSTRAINT pk_sga_requisitos_digitales PRIMARY KEY (requisito_digital); + +Revoke all ON sga_requisitos_digitales FROM public; +-- ++++++++++++++++++++++++++ Fin tabla sga_requisitos_digitales +++++++++++++++++++++++++++++ + + diff --git a/bin/preinscripcion b/bin/preinscripcion new file mode 100644 index 0000000..fa760c7 --- /dev/null +++ b/bin/preinscripcion @@ -0,0 +1,10 @@ +#!/bin/sh +# +# Disparo la consola!!! +# +dir_actual=`pwd` +cd `dirname $0` +g3w2_dir=`pwd` + +cd $dir_actual +php $g3w2_dir/../src/siu/util/consola/run.php $* diff --git a/bin/preinscripcion.bat b/bin/preinscripcion.bat new file mode 100644 index 0000000..e30b7d4 --- /dev/null +++ b/bin/preinscripcion.bat @@ -0,0 +1,3 @@ +@echo off +set g3w2_dir=%~dp0.. +php "%g3w2_dir%\src\siu\util\consola\run.php" %* diff --git a/bin/yuicompressor-2.4.2.jar b/bin/yuicompressor-2.4.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..7e4f64142a3efd2e96c6164f43ae9fe95e3abf3d GIT binary patch literal 851359 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

+`l9m=egdv-1BN#t{%UFH4X z{mm6#9UPvxp}SLG7AYwaC!b#5JoDc@550IQr&)`pb-Xgl>bNq2{ow#4gWDJUH@xB6 z;TN)ilCppxem~S6ja#NbBC#nZ-K9?WI|hT0oARrtfsy-ev!f8B1S~89G3CNOhc0>j z)g*cBT_vRqVSa_f1sWKx%_mJbLg7=80LVvHAN>Qh1{c6G;LTyp-?1GA6kf(1Z0Zl! z>o&=M_ll`aBGa#DkDE^}Gry3(xQ1V5$|gLIgFg)*wSDj$X?9YK{$&mvox0kxD^h_! z;tanLFO8?l15_}rUtfHC!JZ~WJJYJ$^XE-J%7>;7o~8~?+@j}h8qsmCuWe4=L=C{a z6gg`7Ft}p*_N*FUK*a$`);OFN2tHd5!WG3=GPhbU5U#4fZZ=TJvH`AJ`4~ax^Q@l< z(}nk{u?5UF`$B!sqQ?vCEwUw=L#V!~C#61mK7;Ygz|q;Mf51B}9fVUs=&wzm`?mjM z7xcLo80Qxab$)j~i+ecB{Ie-oXFkg=>+Wj$NsXgo^t>QfKJXmMJo+Il)iz&ciX*S5 zM1>v0&rgBl6hB6w>bB}>g(G&cn-@6x@eiqQ!+g2*ud+v8) z_VPukBRi<6cf9gx=?q*kieWZe8k35GS>gG^ud=?1R-lEA0wvRD+0vgeJWKnOa0+oF zr9jMtdp6kkdA&Z2oItO6twQ2$@Ri&i9Ue9% zG|GZqJH@g6Uj~>S!6*>bCJvtwgB3mF^Glxyhw0Zg>#mBhrTO$`s zCq~PhlErNb9?OhWiy4X$r@KL(nX#=Ii9}_209ntAmyAsc?~Tg%i|1BXWX9995@{Ma zZ3-dREkJLpdj+Q4oMVncmSkq_O}ztcjD8rd3IMD+GnP6tGN^frGFHQ8kLVJzh4;XL zvdS|f;-p6n**VO_L;%Y}Wr|aESf1%=KNnm6P5W3<-9y{m_ zlaw949vp)(MW>s=(-wg@%hJ*oc5a9--`lrEs?1<_#9bXKJAzmRhZ>4<77Gm;&mg?UTh@68+<%BEm>{LZ-{6vooycNu$qF}XIt_AQa&9=u*tVccLyCeuALTgCFsIh z$+x}1DLX=wI%ETBNj|doN3o4dvJdmm0R81W54siKe^~jn)l>#IRQ4Drp3AgydVPvp zlUxh_z{|%$qW-lzqqq{A3~|2*BCnU!jox)U<^`hi)xtMwYu6R-{d1S4@kwn+;xUZf z;}WbcwenLjE%F&ZLuJ6m{=Gn4Hh;6HH}?mcmL-cl!XNP0CA?sK6CZ9;G@l(EHbD`g zxKy(aFC;tA?PH1)5Wz;|O;og>5Nj_6s{-=&pLjRk#rw*Ip61zBPY-D>j_D{7hu%Fe z3ct@(t&vT@7QmJzeYKdQ5<;=K@5^tTx$T6)) zLCeWHlJ^aVmhD(QuNG8x40HGU3=_90JUZ|eH)L*xLnu&Befxq&jwvMj zhOnm^Wpw%*tAp>!7OSNd;wiDT6=86&Jkq*R^2+1easFHNg+9&i;{5jrF9hfp&YgJd z??@q%ClS>Zv2Qb#8JKeat!x$k=NL8q@K44?hv-L6-eRj445dh}?d6=XefD22MgCC| zqgb*|&d6=00**=3)nk_oI-L~F;YxF>;6)IaU(D>UtaL**r=DNfm3!L?oZo&lhrIHz z-=T9KCT)cU15rKFZL>6%sH=gO-kcQI&5-LF6@AJA?rEWL^NL9Lqy2HZQfFcu?5;e# z3BjX$eP1-uA|dt-c=+}K5m7;B1pB+7pc9~=Qpp8BDNzRo0&#al&~3n+gG?>w9BgE+ z*-52%ySI1&T2?0ULLZruWLawTbQuFHk($usv`QPH(4WrvSDe6l!|%Lyp9Td5wM&H8 ztVZ}Xf*N;D{fqKn9nF^np%#VOihkNL3-UT6`9CE2HXslmEf?svlI zR^CaL1bGhmwR#4_!Vu#ubD#{WdTcKN%&DoE%c%WT9?Mq}GK@Fkje*>614Lf5#Zp6b zl-$*ZG9#wzs)cEVQzC#Ui*fg$M;Vf_w$jBrQ>#czl()YRz{d|Dyn(}U2`4E>?kK`G z__MAuQgJNE2FMH9k_R)zqz5ubj|NZ-rsr7ydx5+8OpPb?r?8Fs6DH#Sxxg);_hZBP z!;|}GahvneW|;>R6x0h;+8NZ@85BksH0fX<14}qa8#?=BW@uK!9w${SC@jGoHP-Qc$Npx?lWVc!_n)zpkm@szxK#SfsTG)$BtYU5z7y-Das-YDhx^j3a4wRXQ*qe`>PgB)sF}f z2=m{DwT9Tna*lqSbh3X;=}G^Wz5TUqFt~%$oH&&4?GHK31k$Us7Nw&}CEJl9FQk-I+6 zLD;GijPEi_u()+e=Dx}WLxeh!Qq?o~GJlS~(R3u`yIxeumlqXO&7Tm<-k%2!_{oWv zD|l(ZN@z{Pd+L(kTO+lZoEXTehJ*gpz2G%A5_05!s{D-@HZ305e>B9Otb{hbHP&gu zp>kK%Xjyqul{lVsH9VE>Hq2zW4E%(6^G(xiJo!xNe%?G~(2sLHIU}P1k@b zv1y^&u|*FllwJvm_8@tmgts;o?`jc5sKIC{g~uGK`X(%CI8u{HXb|6;XOLo$)SzzA z`Z!D!6cli>cmwrR*M)H{(a+;(eiA3Z$pSs~aj+1H1MSsP%0G-HC9hT2GmG68-D|m-V87j9 zjaoYJBCRb8ooVst%(`2B24f-r#e=oo`~35&X~*k3k#r&Z1QSIqfLFTFr_i>Y?4q_s zZhz5XP7K*QNw)#q4JUaxB&V&SMg3aEv@teevw)l9!h*G9oxJYY*~oMShy}02k8usz znErZ^9e61&JyiJrruthZ8}fv9m?8o03z<%e9}NW9V_S+2j1{!*^gJ zI6pdU>KZ~eYjAqdth5tv+Jl54Rt3b$b>ocdOH9nps>}M88nkT-wUZ)lz^J^%k)SEk zZ-bys_)(ROAXX$*VeqUHLL6sd3bhHjMQOAV>>d@4CEhqeP?tca6Z;xNAyFlt zkO(W*re)MsBzRF)sr9EKw^Y4nyKNI3tQ-lrGny~ez0>8z zPRKSB;!4j)x@3pF&|9Q9;tL^naf&kwXEIc}$)iy`lrv<9X8oDmd6%*7B?GIwL^dzK zKoCs2jxcVOoB`T(^bL8QuO{t?6`2VLV!t7HK7f(vd^r2z3uM4t>BSucL@o~x2?Y0q zZSy6r>@C4OG%2MuI%#HdmAOGt!CjGGj8YFqUsTU?V7*T15~<2ee}|r6?`}B+W=6+@ z<~dpF9P$}*@jJ0^*3DHi;A<-Rc3|Ar|C=dhdOU$@N2xZp9NXj;qQ3ENeb1Whk@{f$8@t32({Bse+sio)bbW$9)R0bCM*a!%votb=M**%C6gEr|{@^!Jc z#R^?_9OFkuLZR2fNX0~;GRY4)J0b@L{78t=!N&{j`?~$9~T(cIHo4+j}fK#3|QC|KROK7?50-!0*Wi-A`YeAL{{y7`>L&Ik3NjXAK6d^A%5nO_pmNaJKOimmA29s66PGv9;b<{Q z_HQW6f1EL}x3?297ZmVQOl%dn6S6F%sj)TodoxrUyBj)9Ke z7l06w5Qq^7GGwp^f+!Vj<=+6hYT6?w?Z+vS5(WT(`hUqf8!Ou%vq*a(YiBe2pV8`n zW?Q6^h69oi5>NaEaeL}U60jc{A9&3w$Py;%Z_p$nNIzmez~3shjHeeY6H`=-_30oT zI{~zBJK@Ts;cvQ$Mu|qHLOlo)xRrOTFB(+Sr`U0m1+2G+oW-=o@0`WmjQ7vo-Jibz z&|Q&&FX=D?%5AAZfowB(KzpV9HGr?-Hb`8Pec>nI(SYymc52{6s`<3(gYZV$1#FXh zh{)ho8_X3_umkO}n);}uwh3+Xc7%K9a{@S{E+ud4E?qZfb#1nsAyVT$`BF&6H}sT_ zFrvsjQg4U6`Y{|+CnywEf3!4)k(&zrSaSJg{4_T7aB%k>68ru(>h6CyZD`rOu6Ttf z{-w8CF{mAv#!!d$Jt^W z6-TRF7B_Ah`#X9hiS@K%B$F@zB+Pl&F(w7w=0(v*A-Rq`++$_8?C^Itv-#L=rga1h z61Bcc5}KW%BWFxobI*JxxfsxpB8!gEBt_%lgk^%;UQ@LXb2f*WohhH+R1s$-5fvr7 z0`73!Nj%SuD*Uwb>S9uH`MqMl)iXMoCc;TUnO0 z#Ul=s(w1xlJX~>jKWj(+5elZDI;#P4KD&XqnA2m0I;#oRrS0YMC+dZ(EEZgxWRL*&>fZUmz%>lg5U-todFG22CehV9{pb{@SdyjC>sV{-FLRV$Vy z-?fNbhSDwqJiYm4==1_thjHc zFD)me-)yDRoz9HLbmpmJI+ls7T`PCQPX0|DsU9Q6pg!>TrQ;%^2cgR`wv~OVBdq_N zTGYxIsnyO!D!@8v-oh}Xn#Z@B7XVvb6!fGq2BAQRUbKC<*~6=Sx>;-+=Jj3Si|um# za}KbRQyz*T^AYbLVZ>ju;^fR(;lVB~=Aj>}&%YVSfLWO&C4O*q>=SZ-MVsy86_0Q_+1Fq}yJDZQY;Hh)RtOEIBL?*C!z zoq{xrx^>O8ZQHhO+qP}nwryA1wkmD2()iM@Q-AdC=zVr{^y!PaB38t@ne$=|%<;T$ z=6U7FlC^Ak&vtobX{GEh(7um$Ec|83i{f25>>~gp{ZNKc0A&%pf{BCn21q5-HuEfL zWGSl?!rU-{6?9hC+Ux%kbMWsb0{I#gwW(3RrMy2Qze zoM`s&jQMc;Ybd2Nr+%{3U+|lGi_E;A$cwCRuAx47Ctk41CzpOxRH~X4C>TmO2s) zBy_fnh$+)8Wa3*Gi5Nw%2nB=XopIc<5LvSvSx7aU3`ymGOwmZx!IKGAqG`Br-~y^< zO+@m=*|Nq+E>vnTfw9K>d0Iaib zXEAY+vejq=2*@6^q)$Rr0F0>FUP=JN;-dkHvA|_90H*(#p^8QYztp*I`9ek7kPp+F zulYYQ)lO2ZuhM3;%vHxF0>9KVtViEePU$Jm#rsehX4b#|gN7LK>7*I?_j5P?ms#ci5;Q3T4&?w`Cc*41 z318_P$h=pzYB4Rt@}i`uGa)K(2GD;?TlWgZtiGo*7PzBIhnKS%>Han$A?J> z;0Sl2Bqr$%VJKTE5U^$=l#HMlQIX9cde{~ny)mjj4=a6qbU z_6AwwgsfRpgs(@Zkxy=U43wjo0zYr2K0d<-iVu~&Ufwwjf+ZgFUhgem6Hia5HV=7o zftQE#zQl4xl1NpSGi1OlhDL0|oW?M6 z&Z37YpdWWXti#L#xfZ3oV$7yLzF=;ba3AaZ#8$vSd0`TQ$pM&fV_t+6c4pD1@D^{% zl2Zge31_M@hJL1970<>THi1E}Pt!0<7~Y=-xU7I)LGizPRB%d0AyQR!Aw8KLP`yE4Jv&Ac)J-?epXQo*e4y*F2` zjpbp~qqE^J5rFI`!{IY&lgztBj)y35C|Ub$&?HeuF0-Z_``m2>7-lyCU9}tSLaS6> zUar1{tJxOIWW7Kso3ZF_y)2Q(B-XcE9MjM*irZ%xroum>8*bc%RgCrcb&iBgBM~j0 z-_5lR>lvNJaMUezUNQswIfjtamhZMHPVc#Vir1Ydn>p`2>P-OfPJ9Dt<1)lFe2U^X z@In&T)+1tgii)lJktG0_cL$Ea3Zh|N9ijB1k_J*Sl+Tzy-MV!9sbgvqnX4d-rMq>- zXuYtDxUnTtKW)0pL-paifLz$uxFPkU4!v>B#_$UZWjW zM=(`m^$-dh_H4EtzGL`D+isg@==;c?KBJz{`>*G_`UYNxeukKys=xUOnhK{O&s~@# zcW7^Cf(2t7mrs#~uGhwl{VbCM!*q6k#X|PpBg1=eOr1$m<#0htUOW)#6FfvkUIfIY zT_fxB$>;|jAXDuoqQXvLMIVonD`cXo**!#2x&g>Sd)rpy<=Nq%bJtdW)i`Qt&IheB zVX0xqkD?Aqnb(UL8M_+MM;sQ1;G$lJFF%|ODrq^vG;%9qx(r`24jp-Wfi2&?y~ z)L5vj7Npf^tGR2-tlHIdbCla4sP7IBcGPv3c*~nUSNPO5G}P5@wDxv;tIE2Ild>DZ zQIO%TsISx4JM5_S1-Ktq#8k-7tgUErpw@lFblcd>VCUu8ZENkS?RK_z+bq{yX1K%0 ztFIJS)O7cES!m0*h0$Tf$+bH;Y^<#8XsHh5<*>8YS=Xfju|t@q%4=w{ncT_O;^H54|TGmqnIY5X{)zo0%DafBzRLF=4 zGrB{BrZPrPPXCd&rNtpPQM}V!wWYPWNFOpXc~G|(H4isalmBjx81FuLthgK>hnRwK zbmVe}S4Z(h2tAzAyrRLmLQlMIpa?a-8Jb*cI9OZQQlcYBkkFVY$uHJ2;S3$#Y6;;D zQN8$HsSu;X+vFjX#EBUzX&P6uWXpgW^TEL_PM90LjoDb^QfXOSY%zY+E?xtBVbd+O zFRm|^GWTUlh=;+mH$w+T^mJ>F4Klu#0KkdQojCERS&z0nyaKl*89Vwu-g3ux#w@t;CENJE?Gx z$v

=2Nc==PW}leLwwBkvJkkR$m&HB3nGimXVvkZyF-ueA3!v~%=!B`WmrY*p&S zH>M&>6p*G(YOK`S@jI#gUd)jyVc3Y)_cK0`g$u|0B~MJoowuQneghQ|UC)~W#}HSm zIXbS@+Q*M(s+5ur--j~;yhz4je+e+BREZ8P?%Rr9K8z9CAlB(`Q(rgI;Z2nvGoW7lTYvJT*qS|kTggGH>cQ85 zO}xjX9?C_;wzZUXhd^fy-J0Aw>K80!yZTK681HbsN@GSFB(j--Cf`Y&xO|ic#W4P% zYZ=^Xgh!ZCl!QB&XE<*+j}2Z+CRDqFByZYAMCd*?tOtWEjriKouPf{Dk;m3Wq;{0d zmYQTcmNpsoGHZE{8W@TYD=1MhCG%F=6ro|>^pEw3W9TEunzkl-tbGb~F!s@*6Z9#Y zFmASu%}oM_Hn)h;Vh$WT(&mWrZLlkF59}oz*r}IQ-lP!sAurV^s!7UD z4f?}_t!AvX((s9;1gBQoTQ7CgP2{$y!GPlrrOFsBIw`nW#N#cztCW^nEv8ZB)n0mx z7{}Q5Qm?EH?kuZa4ODB`!w_C6^z|Z^xx8QsYjPIF)#nW~w0ZDDDXyldV5)-Nj9`su z3{*&M+=Q^p9v+TJliwOWBGk>cp-oKb>g5?57~{cjpG`?z2_f~xV&&$&YUH7SvDDAI z^F0ikyRv8(X=bCw*3JP1(4cAEWbwlQV)%szM4;j%*RpVraOZ>IAEfOdYYCn5XvVu= zis5KbW#l6!#|YDz{#o5>L~sc3X`^+&lWeMeLA5p@7RW{(3cSmz5cO{+O%-cNiV*o* zti>*3bR(20qa~~+UyI!6LjGDxJPGn!t%&3gX;lfdE^8#jgO2A0Gk?b%7inBMhpRN~ zXjSo}#YNgZwZ!_4+-Tk@>A;5C+t=i^E_Bwsa%PyRLWj6BVI2+K`xJbbA@ z37|phbh`1Rqr!Pgct!fWj>JQ)epRG?wuL2-v&X?EpIVemNl2=aN}?j0XEB>p_RyNJ zPbNy#CAjNn{E96VC$UlWcZP10=(g-Lv>syzTe7;-_KS=-?sSCfFt_Uo)>yPJUc2er zLy(+h&*r})9!q7t0a^H#R;%Q37~9;;xa~fj@O^HW=gF+jhm0FRZ863j)jECMJeGd` zit|!TO^x;KnB0&qVvR=NpwV{0HS3DxcS#3p<3@`ct+a43ug>1#eA>rg|BZ5JhXvaa zW@^odJxhDbABjyTBN6@Vwx!F5$dJoI7o3>9pzzGq$|;dT4pGaZU9Tt~c}~VUG;GCC zpRJD>Cw?Mf6|i5b%Fd2m1J#gVV9F<@_b^^gYWPnp#*_C$FPUm>Npxu}GdzM`S4n5d zO)r=%ios?j+QXjIroj^S7K#MLtjLjP(Kqfk4Ymj^N~~t++B-Jrm{&QnF7uFz=iONL z#QRL42X*b21RV6IdBPZbH3b!g2DNof{q#bmrI|+kPOu1ynCS)ETc|H-;kc1Ag+~BM zXGG34PV+cEpdOo9-qPtZXyq{VkOI=&MwrJX>nPXe;1QfOiQau1!1W=!DrEeC-%*`^WSpy-xEOI7mFG5bQlCm~{VM z`d}%+8UEJ1qsUse0l2y$c$baSjG4OlXI7rVJDmx z8@k;ioeN5KtF~?J9;n)+Yirdpp?M&=Nd;2{sp)7vrWPin84Xf|!nBZEB?eZR65CGe zqnwTx$82WSOt)pbgZ}Ab-Vn49Bt)RD#2kJ++PGLwYV_!!iQ{#@RVOM%GnwnSkYLzE z?CoXDs|tjF3sFt>+e-)Ej>GS0@VHIcgwr9*6`+_QV!U9A;6t$&B%xOftqMklFnL(t z291&*Pu20(h|NifWlEIZ6dRGrLc!`ots|g=NQu?6M$^gHnx&qQc)CQGP47;)7JI&ngA%Z<81mrC z8j_>bPVkc4A2OAYEIWLAcxusxiFv76iQ$}_>}c_4@nPjE7j5={vQZYj1Kl77#I25~ zhp~^;7PEBb9FA#?Dy^S6-)?vX(u+wZiJWgVydLs~Qg6BsyejhpCblon^COjLRT1uD zTO`-=D_>axFcdwew{s9IR0xxwR_KECu4N}Ghd8kHZ}tr~Kxo@lH6$G@HEsS%``ZSQ zHfkAx|GPXWY^ASiSKCy4Y(fXr?`v#fcwZX|#fR2!D?QYZlD*hVx!d}HbLgD$Z5F1v zljKQ$vcVl0$*iZgunMx%2W2GF@Uj*qE+-mv0gK}EuP#QVlP95ihUg`^BUvM{Dk>?| zqPhjgr+T$>;B8GAxd$fv35pQAzm|{2BsbEg$~un;KX;n;QK@`~!|zUReVN-z_pvGQ zs)?;sX1tDOvL&%{EgMt~5z+R5cs==$JI^L)CSd26hJep?uI(j7b0xz~dOq(7Pd@i1 zz-Zg!^&wm4HcJqvA}2M~cK+xtR$*yI5YgUH(zOAJ%$-w%jzyeMO(y?4l8K@s18zi- z7NH}*tGl9H+{3@gU4VZdRX3t#oBy+ESwDpo*>>gi&;l(4XI0yF*s{H4-kPREBC%Ll zhf8fM2H#|!{9%R5P4A=2qQ~)!dX;EBc90T`r!MCc+QpUCpjBoW$U%ixd_CBHQgXf7 z%ZqH2zRCEWY(>&*?ztpoCt_t^$fHRH+n0^#;$n71Cfy~&dtD?(2*JTl#|&~h6Vl9s zgD5MC9P2T;if?ZP7@y^xcTSL*Sv0_icL!7Dqt_=;AU8=PwiZuY;AuM=kXeb%e>jJH z9?qDbwjavcDSyJlPWCpf631y!=R#~)d$HmZd$r>I4O>qWKgZW20Fj?#of(^u;vOX@ zJ+!>&xtX)+c`-s@G0W=aXrJhSpwqDNK)2})KGfbGlQzqQSL_ZGSx|f|PqiX(6R9O2 z3YH!g+F(=l*5MUN# zIoeY3#%xJ3pz$?ohS?nJ2FRlhnC@2$XUwIWb-|9i+wYQaP=_F`LJG(ZJk@l2Gsn=I zB#eIxeRIL>Z;B&deCdu}QZjG0A-OjoQ|Ft1IVf3##f32|nE-HTqwz*zj>cAaMf;DK zVYbLFgjUkwn|Y!b++=*3EZl&K-x?cP2p`>?vZKC~((v%0_fS6`B+qwf-dt(c8 zuX#NBrW}m+7sjqC-ooF=Ln+dsSjtH|`LnB(`8FM~CK>(J*2EQFs=eX2PFo?N8Faf;rD5QxRuJv%lJWpu0Iz=Uzt3X@4>Zav zt4$vy&Gsp?j}njYReNcFOqx&a!l!Vgff7^r3dS^uZp|_}_UGQ|ouq)45=$wZhY$qK z=X0+EUVv~a-FjMEZD%l4wu)s#?SI^oP6JfG)W6~x?y`GfHperX!PC-Hj>zSef4c+v zsRfV%IX8LQ4KN8)3jEBPBR83O{EMGw3uh0RHYGfA7=Dan0-GnS)BduI4O~1B0t{Qz zQl|SKD6rzDwj?OhmL>~1$0l%!5}Nrb1Pl3%nmaaUy2s_>TQcSQ69XsA7@IN|b;xe2 z$5P#==MWS$coFuH8z|)DO@CeG%&hF>IM@)dU>b^%TaB+254};PQij3wE-$ zm{zp+hS!;~cF!*0ViX> zvdo`}@VQ%5_G}K@5J)lNnclHJPq|xIFG%z&so!Tl@$tye%ZhVT7kiJrRJGOWog&&> z_RZpUO;eQs?QV{>l`p^U>iFgH+%4%Xu-2FF36$t^RQVe-`;=<*Qt~B=de zifli~eQTTLHtcSW-`vz^}4ON0#VDO5h%DtWx-Ne!v#>)(#qKjfz^c zyc?-QX(@tiwtTxt0}UDyrf!TI%QS>X8uIG+MS+CWFkX~*zzw}ykw<0e1c zpV!6Rhv{Zf=1rXT_KCnLpdoCOW?p;CfBnLs!t}Jh6-Q_}d*TL=Es}tYskt(4yHX=# zj#Za1ez~0yNA^t)miWSTjNEI6r?Izp9GVqyJp5(`J^uG{o$x8f=T5JPJl z*$b6w^=ut>n$q?-L+W{OtIT6Z^_`)5k5>GfU^JOPTbEq^T)lgNs!YrC9X|1E5|2=h(gY(Iu3lT?q2YH(|NCvAql_Uz-5t(vy-w<&B- zV+z}1#MzjZ&IsnGS`T-HrWXkfIbz(KgzwZT!h_e`y3{a1u>wnu`{|gX5gluPy~qNE zeO*)i?UdcKbNry`{*Q)wT^!gB<)bpni`Z9Zr5wBZl8B5v&5A#L^V3+5H=O z>AKc~Gpl>d6HPryQyZ6EDz^aVEyc^fBN#DwWBAFX$l5%0C1H5^d73q(EtHqut zNk^m`LZ^=rbGI<<%f;2L6YxzR3?E6BCgWwxdqGkjb&3R7bW;nJuaPhcRDA+DSOquv zvjH2(y9EWU^$~nZe{j*-s^C17sVa**8J$1bAYHis#k!L@nRTTye*Vw8Y|t+i3lW)* zp4{GMsD%F3!gr@zk>r%*F>Djdmu)+eEEfjr{J<6M?2+Xqgo0+3pat1xpn4- zf%{4s@$}g_^NKt-33u>yOl>ywil2}!{prlY%P=0#v)IfL68gJr$%H>9_(U!!2ML2|>^b3bfUagmkzO{3my~Ej-3!ND@|3S0Cfk>RLvFm-UV>@qkv)SZ zB+HQV(bkeLuKj=84;ThL@u;H|Q~4A{GrvkujYqhDD$2|Ng2vj4+O8)8zk0@lDI^9|dk5?+@(;7&(@W(aln+djVMO%rN z*|+gD*kiq6f`cZXx2>Hd8A*^v4azW1HxW@8I#@YZ999*$yso7_zeuy<3L?A4Y3wl6 z{K6LloXC8P!O^hW73XzK$FbBdGO{vpov~sx{JUdLmshUaIFhN8qLFd1Wed~w%>lP{ z^^y4%`VicWzE?m#^pU|%UlA#iaa77XV1-*i&TMD@Qg2gHD)w;`eS)B9SMK;EW~nI> z5UD_b7mbcNRj_a;H?3$3xnx(L&RG)RBYYFA`ap{VhRYtAIX&JtjD7H_6# zEOZ^J+GkrX)g}Fz9d<_^H^ur6-6!BQNwqLi$F;Pyn|>j^+6MYAVsZd0+V1aXBRT^^ z7Oj*`8(Kw!7fVUg5pFIa_u{QFDe(f>+Tzs7kPbM{%gHU;hFzcg`#GFD9=->+lcc;^ zS18(aMp8YO`88iZNBKrqv{0fPucWNSKj<$TNEmO1nz0hc!nWM`Ze^>fjmxrO5Pp?# zI`|^>5O;L#lC#Q$CMLpbt9C+b%2$jCoB!<_b|Pjz1>?M&qL$p)fBvfsalMCQVpTX1 zvSWb-IJtj|;;x<|(3MmZ8_oj$QFxaEwxs`C6(gHgPWu`M202L zbW0=OwsJw}sVd%SmsY_URi>%8fNm1q2nijdTN-X-ZxnsT0A@#+`sAmIpQ1mlc6zU7 zi}^!;UVV}vv(|{l^e2r5?VWp_!5;30jklnBo2?j6l_9Ea#w)vBeeW;RtJ6=6cHs=p z=H-)bx9~GK_kFTEAxo|Y0=4H{^c@X%M^obW0N8DsnQgKFg?HA6fD9T(%bSP2A(96I zbthhP{)MTa-U%(eJ=A8wMh5r&;#=NL2Je0P_eNZAZvM!+{n z_d(|n$Xrlc&I@A#3va|u;4r(9LV`rqT!_C&2jlN8LM?hhA?B8pc%%)ees+$*%~qRV4RsVrZwRjWAtGEX>=Sy@t~zM z?+|A1!MEAKSDNpKuWa^jOx}eye$nU3^(XXb>N(`|K)g179nReFzgJ&_UvD8zQ3a00 zjZu9P>y|`yZ_A@X@OGm9gy~1;Ld4u&@<_>H(N`Fm1br#fZuuc~YO!MP>YMmskot1mj$VyZR9u@wmXkt5*d$ zN4ou!bZ?so{0mG4`~wHictDP4cCF*}1x7rq26?>q6JGv+ z^cn(TPW7;KQboq+Z=Xl$(z#*&VbO?2K+npGVA!ySWzY?P(5H zFNC~eY*5`{*k%d?3n+l+D~9q3fI>WGPi|>570e5-&4pX{;%)L0Zt5b$0{YV!BhY(6 z6i(9{Gc<)^_vTO35!fBuHrHs(lUKgjbbsfPn}RWntT$by`|a1Xw!_4$DdSt8LEmRk z{3f-z5vy(+MO_jmw?_3r_a;-C%yPrQbgu;xLU1>R?Im|jhWyu8@|^Rd)hyb)?^zd>6#}#;`Fu zA5Q<}+K$68SiBo1n}C}`6uBD$n}|Sb4Aq04Nx<1$8nK(efETH(G<7>j8SKiJ=#Ps@ z0$)v&YI9Cv(Rg<-4EEL^@2|-dnqh0xct?&MxwdVrdOE4X2NQs7Gn%P#T@zMKgsyZM zml6Ttr-+&^DeG(>ZEj*K>jT!5v=U+%9O6Ze^+kg<`paY1vEadHL9Fz&SiLC-#S{I$ zT8rX|LFesGrtR~K0@9xWydnrCK>dt8Do6>9yBER@4gyjJVW=0>`e_%`pr25F5EyG1 zk>{LNCFsJsODzV(V?hGo9d3ekGQ{1xCoV}77eM&!+@6{ z66Zvm{Y&Ki)cUI^R-^9@n7?h+zGAzc)t?0J19H2+)L(Va8+OTkw9;k&2}vErd@5F* z{q<DU} zM$Z8qlZFuo_D$k1Q&OuY#v};CL7Ny(mo!@KQwlBrwnmZ+){TqMJM+KTM#0|5BW@jKe)3>7asEiF&NXl-U33lU68gWhb2ihVqT&tB0&#FL!E0X3gF(dmd8Y1Erx# zosU?Xj95uxh>P!sW%qa(dEE)(O%Xz7Opw!DsI4z4s;8f0!82yfHM&f!mag0~UXM=n_eK%(PI;)uG5YQX2-I&9<{ zu~Qq_P`$Rc1`lLI0+Yu^x)uTJK_24vCz-UIZ?r@Y;hKi8w=0!vEve3@Q&-j{XrJJrSl$sG%oS(|}JdP1#DI%UNJZc{&Igo6v z9{&Vko={f_V+dgFf~Op$_k>Iw&go;?Itu_>OWJlqTWbfK{1k+{x{Z9sV{mKoCluTj zt#tc6x-Jw|n>_bRw13dQvJ->+jVEpI%9x`+m(d}um6K!-(Ap(Zah?PUY&H*5rZTAa zLXrc7vkBsB21|A$C$Nas<@XVdht1DVDQU4l32$SzPD-ce3&ek!;gUI@?&vWB@x%a1 zUOFAqO4{g52uE>OwO7+gsNgC(FBO3j&>GDE@JCzdaR&QTzN>q7O$N{GBRQ6Tda60{ zq4td@v3$6&)S^6Do^MhR^-3)(JWEmQcbL%EYhHD_5q6A4f^VbJsayw_ksU>g_}Rg} zV7VvCnTa$?^1_OUHbqFsZm1IemG%w7Spmn{#C@%qq8fI$4zn*Bm00yl>FqL!zjB>0 zT;8g3j&40cq%pk0lhqlnUc(l;sVbg<*oCGeE&YXLHs@&~sc|B?k+9^8Fw*%5ET@LD zNRAJhbyT%cjPJ%sKm2z$%nR-d1pVvz9r7mLQ~~)E1{XN_wfqYPf-fFU^M3Qb^je?2 z;(a_7hfPQaO4o$3)wG|3YpFH^7tA3>?H{H*ce>xq$buu#KioDqS4<*bC=#)Thhzf) zZ25<6(EOA5i_|ZMhX=*U8Np++zvhFfU%oGp;deA+*;5>r5oJymJ-9EG59H}U@Q@|N z`!!w0Wq;foO`CrwOmXm1Y+q;DwfyG=ItHKMMe-%V6j1)sdQeAV&{`S(-3l^lc+ON} z@X|0EJD&0_ee~QY*fK!nO51w1Fm-$CaQwz-GJ?LBC7+P9mQK2;KF+Y%K-rbYOsR-#;wnvwEF`^-Ov*Mc?wv=2bfgHz;oJGe*HIx=bV^?(1!3Q+j> zTJ-2@xB&yl^MC-{gfMv{)^L&d7rh~9cq#|z&4TgDkE*tWrOL$n+iIP*=em^Woik}n z)jC~;(ZVwNFGy^k#Ag_@l9;fq zuQc=NQ+nT(!LlQX7x5?+D2v6AS!mdS_~eq=?zCcn2czL<%*epyNi2%Z zU;|7Q+K96RX9jQO2(<3>tEvy&du#ij1t5Ri@(&d7jiORTAE;`Zr*ZcSr&d)TWNaIv zU3nf%-WkBp8kOdHNOKaJShgn%Q)&t@Ox>G=I6ib7G97tOf~NrNFC5LwjI*a9^*5+CBaSdz5{gLdN7inm8kEtx zuqvd$a^MT+5?!#QS(8?m2`koC!`^HrZZbCOPMB}yTnH~&}GhvnRO zG_R4_$E2W8P+vsAE?H;Av*m@b&AKiqSuHD7QG{Hku%T_Sq3N&*3HWo>Fztu&-Anl! z)s0r7clkL8^MY{yxafmFBxv_AVTHKyR#%4*H=Hu9sGIg|iY`9wPfM2DM#`^a3FIU; zwT32|U!{BW(qP7y6?EG16YoAhI>)TFAPGo|GF&p4$~Z8{Waj=x=$dMyo@_g%SZ^oj zYTr58a!IXyVlC`1Qun$OBPia7Hgz_T@oymMP+UKm1IvCY|2{21qks=CVWV&tO1`qg z`XjR;JZ*e%NJ*R;1u(Tonb;yrXp_dH-6TIjZIVsBF-VWa<44|fcwZw|#DjSQ6JXvg zrt${s*E8gRp`XxP%FtT}KXB2{I#MF5W-j+mK>!!j_R+UmeJ3-JS+iCSvQziVq2xKpkX{L zPsyr|$pSI3NOj7ZJCw@sS%G z=Uo}+jaSt4x)_w$Dio4FM29?_cIc$h$0GEg+w6L`{W^d0tJmy$<_Ss`bHg-L6l*g<5cJ-KT{QpFw*vHF16-v ze$jkS?4?gATyRB*FhtjgjJXj7`=-ZDX%Mq<@2$dgcJDF)4f~v@MU%+ZAPD7)4=^h! zeq!2Lhz0Ay_4GAL+72S=z#Q*%Js|72ATlqJpBBqai}n*p$Ww(|qc8_Htdh#E^dM#! zeU5Lnc2D$-ikgAAIf^B-3Kh_}LwEQm6;TnMyStosXklPn&afbP>tX5O`SXY0IzQ9w zT5qhD)u^A^ALtpIm+^Q;{mcb@-!s$bE_d0tgFE6*qwj)I)Sy0MAnupajC=Z)uXzNj zvz4SHmzt(1q~Me(UVq9jl_!6Bd!!67f^c1jphK_EHTX_lZ#0MUlPJkUj;At^Pr%_z zU*`)SNQdVLzU0C7XQGfSKFoUm5(>}Irvjq5%g9|nh(y;w#DgoloLeA%Mc1!z?b|Cm z8q4DPwghnG7Wq3A-<`Hzg?QfZK+lTA&$-#J<7Y0Nf5FN)Y$FJX{_aYz9Ea2z^Kj=?*_4MRJ;@qByCeifWVYO`!!z%UyGpzb2<&;A(&3-xzk!J8;Cc9e=pOyQYFW zVe!3v6fQVOpCg!KYkhaYM6rG#?_12`g>M#=516@8TP{?=(0|o_u{3JFrXmL``Z&B<&_{r{vYnaMlhrJnwM#b{-Nl^_Vd4K2zqvLsnu z6|G4F_J>H}L4A1MRH`Zj5q<7rk|~5VeRAQFF1#ZO43Yl<%jTB+@XYat;V{&m0}(jl zz+xlW?}T@=C$u8*r;5cFrB}!)e5cG4wW)0a`!hYq205x zH0vlVCf-jF5`HM&!vlL4Yr1V+VI3<8P?ZPlz^@-LvI3PW=HJrm5)|=KgqpS^( zG;&z3VXiIh%O<^rm{P`4ytbr_us_{l zo^>j@i~;t|i*3n0JFk*|l`evAayFsliG`0Ups@s>Sov=J5lZET7+lPouXSeN+T)%! zzwIr#WnrWe14f*&GpPJV{BZV0>?Kz+a{6bqyOkB`Tl!>LRjEiY-sO>$OWV_@H`Q)5 z70tw_CTVC8grKPfdQNQwH(epbLn!_+`rnAMNG~Jlo~Dw8VR-U~Z31v&Ga#WE5>GsK z#`pJV>cz*4#9ek{DN??br?;WU>y%s1Cj-hmWou91oSo z{|QkdfXn=2>xA4Z^XSaF?>(F3mTFhA9G}LE?cPU^Y2`Q~nSh^_(OiNB-~zc{&9quI zR;VCU*ev$PdK5q^Cd6*NbTI|Fs|pleFqB{n*K+EQxt}krT_CNBq4;O@43GEn;`+6RlZBocg`qa4*(ZW#`FrBr(59F4hq?`CkT~ynNPSl1v71wmoCew`4A3{~@h! zZDhvDw@!M<;&;Fesz-2U-OcKEFK)d;ZPgf=d^L9t8FFo>7ON#Q`XkNx#g^ZaoK{y& zW;u}Job4+hf5UfXk(UvBW6lsNme{*UyjbNoUpYVb&c$me7QGjW;xCMGH6=2y1O~^G?xxPcaGD$;*ys84*a2&jif)=1WMwS#2B0!QOlIhaTL?amP1@B7N1; zkqGyopM!jqQ-FVg~>CnFE*yl`KLY zw($;@9h}ZzzDO^DJV}ZCMFGAlZp70DD(F!rxC35pA%x+BEShvhlJLF_l`be{+I)nP zd**|w^a=oi<>7`eJy}q zUcHna#_(*tO1YqR?I8v2*h0x3Wotg!-21o5V18*Ffc+SyJ{WxA}kbRxRi1wDnOcaxT{rf zv-xDC0Jl!>CB;lUxu8zv4C&OMFjIlVZyb7X!r@K5OSs~h>m-8!lF@-MP=EgNJZkvt z8QV=PS+(pAd?Yipr)a-u679ofnrdkWzL1ggRk(n$a)qW}*+FFnT%ZMaZ^a?_@acZd zc{20W;mtna%>wJ#EhjKi!8IFQ>E8qxADegN;f+foV_rCI>*FPy% z$^2se)Vsg8;GzpyVf?}y(fr+?4gGJBbwQwT`I(^7)jK1bk3fVw#2|J=P*Sn*hLiB9 zlW65(_+uR2hH2J4Iw>Lp>%*Z>DNw&L+OU8r)Q&mYkm@*<*9;b9Ak+AWVO;cmF>`cR zJPOAomASYCHm<##F=||O-DuW$1=jMWo+*N^Ro<`$j;nS)b7DOwh7_|m*z5Uv=z;G$ zyp+&zr{BH9-2`sz-0Btjt}^ zUpPetZ{&Z72HAl4SE6{cg&jv2PL>wqZ9u+is|`gij5`WXhGyZe-8&NZ>hX{_p1bB1 zcwJP^r#n z(Bw){B5>82fbW1!v+>s^#c}_Z@CZ>i4G2&t*O@+Ccwm2@JgGXw6jkXMQ#9#p3HgIU z%sA#k96m$!zC!gH+IA`3l_CWm$UUa#f`b0;Rz~!e0DX&7HEvymLXEeGq?Ya;#-nJa zP3|$1c>&yMO}J$ybnyX3rviib-v^2&jQfACsY1@YHURE#7O)Vbd4h+9r(hy$MF7h{&|2xhptP$ zF7SqzL7_|jDiCEf|wz0O0`T|wy0C4p%T2}#ufjGss>biQX`=Y-z%DTDi#y8)J;tKN2D)A%0l z3nyTt)8v9c?`_Zu`1b}7fhnn1{BqGC7k&hGJ=2<1sI&x>1&*#!K@&O#*0xa-azy#K z_JWaJKyx=gn9f>z67QlF7E-dDJ7rjbp&R->w)EX*S+j9 z-&;HY+-tcLXiuE$4%;w8)st9ZI+u(8_m=|Nqoom6W$Odpd4%fQ>-`k$)gev*=3jvt zDfS(D^Mtubfh1^1vX?;hu20iL@&L{O$v-**Gp{X<#ddR{knh0NNw5b20ZKF{Cg*=% zryq;UofroY3#kO(knS{8y2Yh0-Uj{U@__b@B9^$z+fTUg81qAIRt7z2d!u`J9eNQ{A9$}5BrULZsyfDYk!f@%0I8gx+#cTp;Qa)hv{<-VSjvuOTLLvN-xWD6eJtgka9Vm0BN zJVZzEC(%#UlTX0l02#m~px7(MunhZ1@k<+E*#Y>U{^fb%A)ImlxWkEmi{{_@@7{R- zJB;}s{!sY83EKa^$O-%@S>ls`K>a^T{>T$16$L1m7KD}q6*1IPG#-f!xMA&0cXlTzgj`oE*5m+Te3asOP%{^0%-Sor^YEdSSO z^l5whp`Bs}^qV#JY|2drhX9iTlZ5Ri1ubX@DMN)-IE1iAN$~M(%B7_LR@m7cEm|{J zTk|P0srN$TYs#RRL>G%s*XXTpdvRFRxiL-@{5Q@2+1rvjWj2*lG+=nhxj*aoNHG7p z2g?}nHo6RS3799UIARdIeK{^5dbr;udT64D5^Vo;b|lU?5YWEOJOvgcfGd&e=R*@~ z+VT8HnBO$>;f=oDNBQkx48DeLL=%GDR}m&cpEUq^Kzax2wcY?s9f3YUHVDNi5hj0( zfFQrUNTRg4$et7-?$e^Yc!G+73XsjW!)_zRy)Yufk0c-7Cj$61!+7wLPrWw-gxd|% zPRYIfwUhct@_tP(+ctlVCa#-X_J|On$d>;O%T`;+Md{@njaQqNqfT?ft&Zqd+q%?7 z?bwR%4CxjcT0iZbjn|rL_#n87(c*JhF|>KYt+rxW%WZIMM6q@y+O-l})^J&7X)co^ zb?~4-~lLkJdJCH?&vOj0R!+NL9*IdgWo=C+ifp7ERHLzk0$Y1e`WgZyFHBwEX- zOC;cT?=y@}=&JD&Q?k~u-NltPXX+JLKHg{y4&YgWh2n0mBI7mz02i)r;j9TsIL_QACFbJ8Bvg) zC18cY7NyF25jeaCV1AX4JtQBEkcw9mt@Viw^29tsk)dP$Ovl4(T`>!`NOM_u0nm$G z-NL+a;8@<(n79nC+N3QeE|6Q$Z`VbySca{|L}Yt@8vjio(=;-{98c(|q<`FK{pXBh zTu8C^=j)FY*_y$Pvl^T9{hul=ySgdlIBxM@$w`%235&&7SL`V-#k5{Q=-ea&AyKYl zKWxw$dU4Ax!)A?dM+oZ1k!^FA_Dn}`9g?n}`TOMenek^gdi%OJ+mbQ&Np@V_9<#W$ zd0-_74AI$uB3iVv5)DRcOGO}%Pzja1nyhPy=2&A6Z#bHN;nl0^u>Ni-tMZ*-q;+G3(^T zMdl?D4EaW!cqt62;7(d2m8I*ZkKf4As`(fP_r5s7L>V^jII$G?5wnX9tldpxGCiNl zyjGbBkv8G>n@ymTmK%iVf8^w#OrxM_7c>*@5&^WO76_x~4u%!s)OpwPn{tG@9%?VC zjE+XcS3WP0TNTLw)*87#@N`(aG5FQ3_tuM@%Rr&^8ip)39OGok6p0=d`Hh!v*zJvL ziIqx+WR9op(HhzL*d=C5GM8Scg6qy00mQOl$ptrP__T{f$8dSo$8JbFb;vOlUjK`* za}3Tjc)NU(iOqRp+cqY)ZQHi(Jh5#|jEQaAPA0aw^RL~l+I_3`-Kx8)zxBtyuhV_b z?`&Q$@6#me`YIjsS()RCE{@Y1cm?`4vABGo_S_w;aQg-CNP&@eoYCu}*PPdRooTIF ze!S$w?L?zQX;jUa4%afzLym;fCY`*{W@Z~Njk)O#@BWKo{lv51yHqq7xv+yxDcn9` z!@P5~k-jViN-X8+?l(|)kjsuLV^j8x z@eYoVV}_h>Y~+8=PHFd*rNv2>8Fg6@N~u#Tr5=VVK6O8UWK6;u7;LDjFf_VDzwL+K zrz)M>jbW;&xp{NKM(}^wveTgKs4Us3l}xhc6_v)>6YY<9bN?QB=T?(^_<-?OE9Yr3 zDmh?i(;Cq?)r>vj?hZq8(V>}u_3Xm;U#Q38n7DJtYYk|=JcOyZIUvAFlD9cakerrk z!Q_(}CJe4wlPQUz@5be@LUllUeW{Ov>`O`F=4Hd7-!!K?F~Ef^nbf^CJM35Tm4lv6nMd7T`@KG8%)&il_f{sCRZoRHrIzAw4~t2O(qB_G_~kZ$Jz9%;J85qD>9%t|tc!Pp|6LF;6RL0m$ z_wAVN08Vy<5uCo<0!48V5YJQd&h*J^Ywr9dH$Gbr0*9rQfhJqjnt$9|b}UpTf2N8F zr%ETMcyF7mx=5C5C!S2x%| zG@Ua&th0u^HZvyXsO>ogI*9{&DNc#L9exH>$rkod=$c(LZ4yaLl`srD8^Lwu`dKck zQT=-m)ivd>f%H}|ooKBuW2|MOOWjaJdYq_Zo10&#nxX^p9+(Ni4Y&5@9ee@J@AQn+ z79?F8ag*H7#c)5KvnWTdJl1zhkgRgC0gSeJMH){U6)X4D%8gBfL{b8^lFbD5wsAyH z1pUFKxVnwk>6c#!2pSvNJ)NmcY~NUmbW7AtBsZ78G(&&#N4)XsB-OfoJa3`oG-^2H zU;PSPhwW)cGd-i1QFJd7+6vCt%&KZx^Z2Rkhh_bcc4KPwgtnu8;Zh_AFpdqb4-i%G z3OD#Tt2fd~fIIjcd;wwNmxw_^IY2b>Nyj8092VyX9cD&cS>eRAcY(bW;<H&lPCO3W}oSl{sd-=ZjIy5#}3r@P!wZIdS6l$y^_B z*qU(I`U|rVNV7#A*m9Ddk4M@>0ey*Fz$a-TkGB4Ay$8-p-6FJ}Q%I1g z{dOu4%|)<$hfeuhg#ed$e6yzoHKy`YiK;Z^X-iuxk0KEeaVVNxnU=o7z*4J!tCC9H z+TgQ5ce~xt7m${G@%GIv>i0 zrn>iI%E6BIC?p7hH*t0qWrHpL9wj<#btIib%r_W4o*PZ!7#AS|WXC(%AGDFW9993? z+2dnrg>(pqb8Mj_*l#9#SXVN?yN^rAl5ALl^rt8i3prv+Nj1o*Mb60v?P%)%uP`0I z-qMn-f5UwE{}-n7AN}@UG)}^loDdUo=nUa@KL#?|PH)~x7=M6ta!ANvXym&VMRD0Zf3hRJ&{bR;=cUgnmwBS!cQpqH>omGlC|W4Lp@DFUX9~e#%!gE4TSh47 ziv8Y%r~N~}Pr6Bwwi(}-^Y#`$+PJr#SPS_I@T=SSs6~fA^x495pBHV~y*@)agC?%1 z9q8ceF}5v>xg5WqW%Zjt|EEo3e*z;nZXRZq@JFYO75CI?mYP$1mt-W`-kH8CMBpqc z-WZ@|J%l|j6qX3OB5ZK3g74(&MMcFfi4Q*N>c3!iD#yW~1BgICCjaTdf6M<%=8CBN zb5$At2me~*4datMgz@6da<7|3wr2CRVUje}mjXB1SD)Yz?f@QW04?5|8FGP|noYik z4$6iO4h~vFzA27VuX0N$Qn0PAEvjvAUDKjc)zyUGTzLF_yn!GB@%{PvfTqSIQPjz@yD})E zRWKi?_D}WkLXiP3b_ausFlV-G^I*(>gO-mbLxN}q?a%ez$Y|2WDwhvnb?tJ!&Il|X zjcprdmCeaW0P$a-KRQ?J2MHDfP_&sgb)1-zLU(wj=SO}>M8Mb+w&vn^q1?~M28#sI zB3y@9gseKvsCnY(qXrGb*tC1eK(!|a<->f{#NI-Ex@fkBHZ^7~n&|VFw|F5hjgb+w zK_IN_2Y?9j>}ALHtlTPHr6SJX>t7*Ql=-##NRJ98%X{zHJtTrALo~u!2&my1%r@I&`G^NMmWRhenGUJ%uz2=z%jEs-bF(e7CDj?P)Btxt zcGW7^&qbm8+(A`}R#^o&4xfi0?)wzov*ayZ3VG_s`m;&Jp^xC(?@t+BkAZQ^?Y1re>k!z3F%|@d}JdmMJl?}AKs9VYt}S*J;n}? zbQ=U?=xK)y_j0Zvl1-Klle^+VF43Vzla61ErL3xIDJ!b%E6BW_s>Yu8^Sg;Z*G`3I zO@(!xW$A-1!M5PFrd+Jre%Z(}@$%{@p@mXHtFb#{&5Q79qsE-@k+z1nvegzr!Mj3! zh}6#g(iZIMv2;zB$e2^$b77CoLaYAGppR=KsBqM#Ggif_puer5{zppgkX-V&4t{kd z6%vOCs;QuDeu-7ZAa2)+ka2V2+fPZ!BGQes)L&ibxae9TAtcE^1x{wc z0tT)?-6f{JH-iaI@Z4Occrn>Re&&l917CyXyY`{L()sbB=EeQ&IR#Zsp4tW~%3Fsb z3r%cNu}Bu|%*w`d>}7CkYnsM1)!*edzpY@|TTB3{>@v8rNm8}cw3%8eQo{4m%;Z3! zk3Opkh?*9n@WnaYGeS=XwoeIT3G4Y($blR&=ZQNqX;@kfX?+z16%!boGm~go3p@nr zR92`65`9HY=@S1FBUIWh2gSL3O4%RHi)dPtcsh(0F1D*@|x<}>D+~R^y=Ew zi}N2#DRg}piCaQiB6Zy*3iKVCmG?>yuIT!G$H!8Ix=I_fv*?)_P-<-Rv}xKQdq}@2 zVOSYzONK`1+i@}IlcZr5TacYwV$=%g$zvfii{D1^S1JDmD?pU88X5{De=k=?s%YY> zx!fxxmj3>in2;{%&lK)f{Z&cm{DO1#BQZ*2(AVAl$({}vu+B(04_5+p zVlw<{2s#fJ%{)rzWjrvB;<^mmxWLfWPr&G;JaFgbe~YT6BlLDOI8OL(fbl5-$YvEj zhtU{$6E9&1x#p_VZU z8}*(Yez-b)4b2n#(S%_CP(4yjy=u<9t1Jnm&S2A~6xSs|L+on~By0M8R#JQ%K}Kr# znmBG?8xSOvrQGe|8a;{imVH+uXo(ks>GWk_Y>76PK>rgm6PvUTsoWzMJ=|yk+HyH6 zr+6X}pr|kxf$8MuL=zP~zOIQthc1WEWTCBF=cgu5ixn#ySZUC>BuKBvrhT09maFG0 zqiV}Jw06u&YhMW~12ev9I(nE)M$tL|cT*UqebI)|y0(Ylv4H3w;(l?%-Wj>uo~%8G z+=*4NBf1uCWlgneO~J0pP)lM-QCkVi8fN0E?-l42Uj9%vYA`Baf8e%B6#Z`(GDyLLDe`3L|a=%C&*b)ijQBh21*3PXscZ003OQ#Qfo~t2Wx6OE{3lD{# zJhusWUtrg3w~YAp2Z|pRc>ZB{Zk=fHYq#`kPtHPnsvfcf2W}ssB6__YB@)l0`yqJO zL+=+JJ%>*qon|9RtCl0mi6VWNJngehMN-KB9v_Uu|CaZ{aL&cq#WWiO_$@{_A6EA~ zIju)TWEu{HJu)|spxhAGwHYdZd)zksQk`hcgvCkK?noH02Q5Kh!It>5H&x7N+&)PV z4O@&>krEpl=ykW&x8vSAw6G{&Z3l8(Qkq3^(3DY)jha-r z^3w)UJ4p@A({WJ7iJSN;1s|?wiD8ANHSaVnA<=9_ZL~;>>4;hW?O~!+oWupba5l{) zO}>ad`ZsAZ{-iY3@OmGmBovPI7)>L6QaJ-pVA4~4z5rwWwmxck75wtMX^am2mbs2w z(L(SZOQmaZ!J>@{+ajA9JJ5d=LN6?*`I=ULQ^=gglRc@z)pM)0vu0$`$~M1SYh4sy z<5-d)Ou!#MlsRV)Vi*{7Y#6m6$Usk=jsln1Hx=A_UDIU4H7$BSI zJkf$>=t!)E4NEC5Z(~)dL+5FtQC4W+>zp4c=5Z7;Aqh%V2lX^x&jhn?NN`a`@&W2e z8Xk-c74Eec4kIuRCm{7A@4Y8L(pd!Xqu3kq+H*(w&U@~+4I#J={SLb6@ZNLlzYatL z-1vp;Y*c;o_g`Nx2?X3gc|GQlb~Xb1qHca)Pd*zk_%QDwJ@(6^`5p7zecfrF$A^b| z?_ux7KlGQOepxVlF!lf2P(bh{sq3Z;+W(E`p6?#-&D?vhhd6tluJ4xlK#Pq`!&5Pz z;L=LuRXeDmLd=tHlo!IImhHj)uEml~E+DPEDI9v&)MLntH9v=t*MnAZqC4Fq{1SN; z_x^x}`O zA|BNU8hzBC7<6z4I>VJf&~rlAWnosE0F5?$UI!A=UNMOff+P~#Al6m*U_&_g@ES(c zmOji?#3TbKnLuref(`@ri!d$+n#u6I-uPX&@&KM*BwJQ-o<&7YN!8+zRJfj26(BU( zO{yus7`i{9MCQvS{$m0a)+Yqzp7DMTZ*{Ooxbf17M;UY#;dX(v3QQHDUXn&U;yy;C zWeAr9%&pw#J9avv95s^mw6(&`I+aDyKw#!C&`crF46#6GjmI`pmM?utpuS2 zJ3*^Zck@%xYZvWncBEiAqN8HQJEfP0vYS8UE1);@A7fr_SRno_W+}6O>hwatpV%&6u(HkyXKSiBn!A zpCNA@?1}gplgl7e1NZi#qRg_?%ul^eI7Y%M%WuS?r$P-KX)g|iRoM~h z;e3gNy5EQQ1SYAHCnclz@1AH$}7+G1_m)0J)7nQm1GpI zcoSbbn@=w&|FtCOjo{iOKN;aZhTud%8o*nAn184^h@gM z9`xv<2iWnEbGIa5(c-Tp_7)-LE3-rISW+J` z6Q1h$Exb9cW%opoc~7f&UHS_ywkv!%WVl5cIczwNI2;H{(RfQB5%qZ}gvEMA0FJfz z%_Qj(giD%e_5x^LlSKL}(f>IcPAL%PAHFH}C-j9P=?q_CKRy8E8q)ziQ7*Xgf^{%C z2P|#j0^Hq)V$e-!lj?>yaT(&)HlG_!4*AeF_@rrc!_vy!2#RvL7%fDRkvoa34$6i9 z_m6*qxc`^k7DY^^P1azqVngY1l(>rU9G%ljSq_T47|rJSPewR`Ni1GQVY zHLkVyqUk8;XLbV+pUcrpB$s%|7(zOXyKg|Z{lbpR3Gwwjo6v~+nT|`{giHcUv5Rm@ zB-NaRRDv~7ITj;^2Ot7nPC_ohX=Jge>0vahH2M;WoCw?w7TL}&KTfmi-?fEeT*WI& z@$u#?-?^*uDgH7}@eg?ZuHTU z&k>*ba`r<+-iQKz0}6YsSF9_tfn!XDm?c9^D~`SE(5(iA(&rYBaqQtLkaA%IQM2HR zmBmuPgAdrRB`CokEm$iEL}d|5A7QkuVP_?2H+a!u>8{~X<<1Tdi_d3lRm}#=)5)=M zn0Y4UY~VH|UBVB}YLUYfCFD8`O&{^n5V-*$gMNpqyugO_t|a`}nN3|rNTM><3xqc- zfGsKS<6SI(N6-jiZ^OphEyLr9kh36mZYqSyV*J@+jN4?)i`xs%8K%b>7daa`<^ZX@ z%X9%XW8lvj{bQF57uw#CI(vZig~F`&FDGXAFfDgPj1a>8Y}o5bFO!P^ZnPvP;`@Rt z6CTAra<&M%ay@dHAJ5TzQKoxV z?D#8nLY;9_y{_LhG|7v2s$JV89G zTOQGq_MGu@mG_kLzF>JuYf?QkyUyd}BhYV1NBBIZ(ZZ}&95=K&lmI59T z$73WFGeDR3X!X!75Gg1K>5;ocB%~ERlpXYsix|A_;WAN}x?&ZtV;k83*tMAW_*pmo zsJ6ea;0`^e?+nB?@a`fo9{E~a(lq{&JHCyM_``<$s;8-_5&RHRV>#l3?} zdVTYL_>F;)=Dmy@Mn4%LoZ@C9ck=q2U*^}HKMdxXQS70DMJj9=`S-1rE z_mvtXwgMRDl=R4JeL{V%Rqv`+Mg{aJ^gVve-^z{-wi-ZxfrjmG02WV3qddmxl&1Gi z$nt=2GcD-UM>2!O3E9)mO$`Objp2vg3+g{VB?^+V?~G8+727Cfn{Ogqbrm>MTC}YW zO4Jq(U8l#O4D-dwY@~QNYsCIQgtnf8XJ{8K6vmZ}>+%d2jSqRMh{sJf?|W31)t2RL z?xP;|-jJK);rwf`uFh6IrPWAZ$$R2CpgHWGM5MfbIMB@P=B*;ug0H#3D&3Rdg4K&2 z0$;ePP3#{P`(8)Dv6N4s#5*ZBK9E>1Ynk;=d}jTI82+0F=$>r*qNl8M>%(B9PuDcX z&eBoPQBL7twA*#dBe63$#PcSiw#z?Vb>Yd8)56>8=NNUl2n1i)b07d!Kl61cIUOaV zUK{fbE>32xxOpd@8s(b}Ul8P&|66!pjkUJF&^ALB-ocp@i`P_(rbgtQ;{xmU61hCL zzwk%?DkyBl5VvGwOJfh`V(GMdZoGTHyRV-kB<=O>g}BpQlV1a>K!EvWzP|_fKvSyU z-KoPEy}tJ_hZ4fR$9sii6y=)_o5u)Iv2}J8(5=Q3NkV%xe>$2k`oM$`ojh!of#SWo zWfnqm2Yt>6)mlHWX5x)_(r$Wu3|wzwQ$j)v@2pY6Yn}#3 zQq#;i;gpW+ayKAArUUPO;>cQT{yJlh-NeSmqOvfl3dGy;mx#q#{e`IUtDWjzv{^8> zCMTxuwWn|MfZFkg&+H!pN{a$*-HeGUX_4IM!w(;^Bb4AaF(R}nXV z_$Sg2)@7!i-Ln>?Fg7eP-@1BbB;2sSm}g3GYh4(cOt3L)>$G|m{5b+-@jf?r~4VZW6kur zaoJJ2{2Y&DW77J?6hlcLpFE~QCvsS(V$B0K?VQsIYANa?lBF9!cjUJu4bNq|cqj3c zP6D1f@%e;wpvyMLR)3~6+g2C%)2MD0o*L@LF@DR$Wcg=Z0R3p{_JCCC!u5}|WJB6| zEeb>p#~kbSftYU!$!y2Jwro!$oq+Y^O3bU@7VQlabjqaJE>3Vh4 z!i-OId1C4MX;xJ^qp#XcZJ6|?D(ezonR>z6l2wiWom4n$%!NE$+*c7^@HZ zL-s&C!_W)LtYN?L-v)R#>>WvTMk5+z9nlbLj?1HdeQNa`Yt0wn8@*SiS*yM_a2 zJ0J2FXkSF{$=|`g!vbb`_wsB0o*eH=&`&85Ci>A9Pq8<3c0d`xfuBx<&F_eU?6__n zG~+heZ2hLBm`^zrL=0{#;r) zlspQLN{`gC$VOh>k5uyrb&pby;J*>iuL`#e{4yVDNPsP$ki_LZehMDdqsl1jz#_Zt+T2RiZg;&{6_|# z+Bc$|GQWPLs=RxWGfzJi=X>MK@SPIR*O_LM?TV5+Wi80-`LH{vX5Oy^c3|Fe6inWP ze+AoZc=OVSqAj1lOh=%=@2$bSS-U-XtJeFnCbzF9w*-MAyuBGK_gj6-=R19C-4D;p zw2$g1R)4{F1b;>EjGp4IKKh9~ zNlDZnIDCkgFe&C^Du}nrQ8L6DF->%6AaTwIkq<_QH&&^`usVhu4iKg0-UlTP$}w$m z0md;_0-RKLpzW*v5JJT(t z(Kgvdl2@HXD(K`Vn_~g@HY|fa+7%iG+N9$)>d~Ps*k?Ur$s20Xup0=4^KRi9W;~Qu zHsT^RmwyYV-Gp?Ed8n2r(qLL(hX?fPjG29)KljRdnIQN>WjM`!jX6Q_tHBZ8$7>NW z^Yvckj{8-SBR>zHp>*KbFBo>FSNRgmyVgV<2@bXG&BuJuWBNhCOK$!`V@JRwOxXu# zF{N;hM49s0_OC36{juXI9aHBY_u*mE^&86P^}sP3b?40uDPu|^l||EE(4EN?b{Tk? z#T~c9{JCEy6U;~CcV>yq8R6BnZZO*0H%O+w6KA`;Vf_1xwq`6*Qy^r+0Xo+8{P`er zmZq2vDJ<;dP+MjOE&Y;cvLUyZG}*T6Qj#)!Jp|%tU%~T$LZbV&T*G`4{@gwdh(C|L zX)@8g?F)awjEUH|&CG)kIB?X8P0K=E1DKPLVMNrp)<8V+y+w^nU`QX|8H76_p@hVV zJvH>+G=qoN>|_6NCVU=XZF^9&QU`vdzt6E;WtMnX|Dq~kjlNME(gYcGNg5Z@I18|8 zL0gWt5O|sNpgu%7VUOFV41!dG^gzA0=)$^*btFF|OSj$(c?C!4FABpEM`OjjW^ut4 zo<&YAxE`zrH&sk+!x-tyBg}FdlEalxJWkk=>5be=`$M)@*6ml2_J?_oKsdT3_ZXM! zE_v~D<|b*=oxdnbHa}wOP+FT%&nC3nNV|5W*AJk#hFVYfG0qMHH$Wht2ZC?`;?c!P za<>G2M3|06f3wpKATHN)8sS%XNsoCquoO}YavJ5HgS~nz&(KAFpi)xcexjMPRD@D+ z@LXUD zuqvlpJBOQVgMmgU8TVGB8J%WwFRRF0g1pFt5(ljd7jYX9rg0z}Qv0uO#3D%)7mLSZt(05C=Ggsr}WXw4iMH9*iAFf7|`$9KJ z*k78=2b)X_?_!7>gmA(ZNj@hH=D3UsK#J~jE=F}2#!2aO$6cp>oiEj@nm{wN!CzNz!T#|N12S>6)!GWfyOMy2gN@2h&K zcR~_GaO{%Yl7EPQ;CG|g7m#lcTinvO59KjwW)Jx7^G%{&7sa13?bm8hennOd_BaN= zEIM_FMFfmc;R@$bK?+r49HKBnboY&+Lvy3|d1f2={w5m{uG>@=(k!U`0GCA|19Wan zapH>Y!e^WLLaRB{r0A$%#wyp1z9Cm1JivWpmhyaj2Y<|=c#F{-D3Y1>LpV!~qXQO` zlPl=UX{Z)-W)+l5J9aY@nW5O<pbPDhh{FRIunZWK*UfR+KRIg3ikuIt=(!eRUl8 zRDtwuz)DJhP4W0%kgSSm$1ZtgHvOuUY7CrR>G)9)o=OI~y2>Bjy2eAlHl?(E%_523 zt<->4O|We{m{l=WvNtSktiMC1L4HwMI;GS@rkP4U0<z`bgn6WXSP!KOkU^Sa zn!T9s|HHa2X6MDVsJ$!uf&l^&{jat6zbWn&F*W{Q&4B;Y#F3&296K7^7aL!KI?| zvGOC{OaHOAvc$jHqWMg}2KJkSB}-OFINpco+;oJ`B4Aaxb8M$tii@*~q_)i77isU`@dO z{1WbM29pg;HQ6YJ4;4WSlnZnO)BX1YA%~VhKlzzX%BX2T5J&~a2lftoK~dM!s}lGF zyc9+Tz^SlH7#Iv;20e++DYB~&Xbz1_&M0lr(u*7T2doS19vl&n&fpNz3j`B~!KJ&A z2{ebnC2^?k1q(EX;}zfK3_O6yrEv)A6$%sun?d7LG^p>D1d|3&g{4K~)Z9f6RE9|1 z;FR5Up-|g>mD7kzIfTgG8_e(keML1#iO-f?-j`&N`b(FqqsR*Z zI)Sn;9W=EUQOm_Vva)(cVgEyE<_s&k%4{-MRjJfVieC6cSx-|>S5K$Dt+S!2y20yq zQj^7um{iPKIm%p&>y~Ut)wI4HcM?S>$y_~EC2gi$M@LPQ+VdZR8nGqJ>N82}{QQ#$ z{GW}qufTJu?`KF`szN@OQVFKXr4JW8ay3lg@vma&z`uvnf{ao@u8Y|kC>BrZE$mA# z!b{zmV*8}(;MTse&OQYJ)#4dqCYFRTj7`LtR+ww(I(QZ~53xGO+Iw&-VPJGXV9D3I zfwFY|9050=Z)-O`nQbNUqg{?h$;pYvhrI3%4ys*sfvI6x89Oa;z55m##j6FT;$eB3fl@$``lZq zK4|WDzq-0Qp3as1a^e`7nTR@_6;+mEpaEL>0~_$C{Ioz8L->sYDXH%A#3nAQhB|BR zk^N0=@zL0osLFMJje<*r=FW*V;d5D1x~1y)0lL2{C>Nc+v1DCEB(4NdY>Gwrt4=@! zKhm+puB+FnutbS*p0qyskbN1Pm=sV3)b^#L`#Me^Y7!v)Gq1*tWAl-WCzy$9J&I7XaRJXmkRsg9+pr@D|0kx)|J!H1%s&gY@?M# z0gS?Y=vHuvWA9qo6|FIw|EhTvq%3y&Y z_EFDhx|f;Tz(e9IQVV*^Ac7N!(Jkg=@BCLSvV6$hsy<0Inar)^4~kMU9D831eH%Kx zbKii&C zJw?LBDeiaNeq-*?6??D4NdQ=VaR$&2iqdluW8f2pwqd5No;VxEZbn}z4*~y3Sc9{_ z>1xCy(CbhGHu6I!^Me|U!r-<;T6Jy^J8AfktsW;153J!Q>g?@oNujv7@2Ld;}eLj*S9nV#88H7-CmxO<|9-PgJPe)@2B3tr%H>jU(3V-|-Pb*q<#h;>cI`X|#F1=B=D8=A^h0?f0^x(^;l zo4q7b_iI#lM9;EHAOSzEh%!R8+?qxghrsC^f+|Hy0COv%-AV58TK;uQW!Lm*My!!8%Bt8ls?T`tIbchDQG~II;l;c>r`fm;*c)X~#LTh_ zCFV*rW4Mb4{mzvG#eSZTnrCo86QHtQcfN?OVEgr&>Rv>TBtBn3g1xG3U1&pF>pO0< zwwFn>Txz1}-votF$j|eIaHHTDsxHh zPC}PedqN_nQ9@7A3!Ff75OItz)qm;tyKK%rQ}4?V;+Hr{+~9*ekoUa_AM+b{tL{{t zo)@F;`Y^tjwS^@}KZjZGaX-p^Kdkl2Eud`>8c;jARoNZHmCz{sd@8rvZO7ss=5%YBV>Y5 zMMLdR6y*#^4w@8@)beoK@G#GKGbh0PYy|?EV zF;>~wODA{jjfbd5cp&C!E|=}LO~)ISfo?8IXHk-_f;^j*#aCytR@0}&SELn}q>sz~ zB(5BrKU3C44h~0cYQ2k--xvph#ySnCd94Jf=$LW_0;Erc4oFm;cn$eQ+TbQ5=w`|t zYU#3FcB;oNgXAjsISRa?E6WR0Cw6sv_zfQ%TW074%E$y+b9h}*TW;L--jWxegtgh< zS{FGEX+NVsDZx!OY@XU1C9R$q$W8T9KC5gM5`2+2lRB@Iu*5U26s_5}@)gD4|L_2* zxed%pjVGoI2ttbgWKbn^9{pUOyQ;k66Z6wA@pA37pz`=(Q@FDacE*ShoAzK$%z~>R0`*v(4+uEc{ z*^)gM{EKlpywhu6kutX7vG`0eDmpKT0-KX8R7AL1O2? zWX!y2GH=1@E0$A#9(d=D39Bzi?<3s(f=J%~%!uGeDDVLty+^SQM?nZrvD7(o;yHMX z7a0~JN%h5_GHG+xlZH(32aYm*o$^<@&wz+8ib^-=Xp&l`WUI1_*AlwLe$G>wYt}Lq z6*O1dY(Te#AmsY4=p3Eay;12=AOEVnREE!@NQ!;QEwgEyq;jVFxrOqoj#heZ3*2N= z|AVkuiOH=GJslVHXV)vA+z=7rXp~392>6WwG5jx%Vq<2_1t>8C*z8bzQ=s~JlqM@A zVrB73LDOr#lNu!1eE3Or0)0W5{sny9qE1-pWdP?%-vNYff_YPk?M+ug zcn;e!Rz5TLQd6nYqxyEHq70|bsf8FwJrwwivQO`iN)F7Gbr@OE;yKoC!EoUKo6104WNEuoF9}!N}MQ58)V^ zy^c&Den5_$ zAR_k9Jd_V!o_R?;k*v%UWsQ!oVH#y$ATRW2G5>nL=S{hgkKB&mxBqqZl55?fmDH90 ze9OzVbOnEfvmr=|bVj%Vxe#keKlCTcAy+DkyXe=jZ}^`IsH%f9VpR^KN0dtXs*DD1 z&Luf~;!xN06!35>4WS!&gc%}EnE@ZAU(K|-IGcv0%5>T*iR_$nH;4~yh(dBaoP1#; z#S0Pa^VolY+%XIsobq0S>=E~zR6H)21PTkH4OHC6b}8CYkufLu6Uwa=0resPu?f6H z2GbP`1u%)Y!s&m^H=V6N&O9-X;Lc<&`m>g)bE``W;tqjf&d~IW4(%iLvRdj!3Q-Xo zh?Zi4*-h>8m9l?mIV$Ck;%%vAIbAauQ{gvFNpFG%HHIC%H?MZ(oI*CXg#IRuJZQK= zMB*`KVm1~B%V^?AHCMYylo=i;2Jg~I+<7Hhv~{%L*{lsEt+L3IRq_tGqZx-VXV{mp zjVfFB){=4R3`oNqTd#^agoLqv9|E!GKa#{PCGO?%YxZ1%%&jWSnBc41M+3 zs*Dj_dF9=+r5y^xFuQQO;|m3Lsb zT7!3AvA1RFlm@22%`Mu1yD|tX$eq6ieg-wNKA=_4JMi~eA($g)*BDauabd@iaH40ZBFzJNzuSU5#z%38p+XQ$!QsL&`G13Q@IdF9b2znrBd$5IhqKSFH zwcJJ5#nz6bd@$=w)Q&{I#J1(O9+3HP*zNx7LjLgE93<$cc_r~c@JFpZ62I~KLbW@t z-T(Q8xIGxZul5CMcaXR1=7;M)^&QrFXYUC3hPv7l*t-ntMI=GFW_;Vr83ySb!Hn>Z zwdvfs+5a(|(Kb^)5IpSUGixy{EJnj`q!SVz`}pE*jK*)M6DyCyF~7YUIfLoGM-cOV z3t>#qZNnQ>iy40FdH~&R$Qy2t&9J9ET=gP;K<6{V86_TT{L+2PVEze0zON`7zCl)58&cOJD}^WiUO6cC5o|NnbiY)2lNM-x!)< zmJZ{L;GBM*KCwBvKSh(Vu{oJINk==>nc+E^Q{A)Hr!>`}(e5dLV{v7SbxcCLz&kn3 z7++_2>`Xi2lX8@4U$=Lxm}>9WE0&R0H+SsFKKzjx%hqH1H=SaQGrAroH3>uO)~4{t za7c|j%LKtZsfNiWiVY~+T-pd*6_sN@Wyn$^dI2^uQdt9%W!v1qwd}>dvp)D!L%mUS zIo78B(fYXY%H;7Md%%FNH&ruy)#;pR*@kZ_Xt|Nrq^rMw`P?S-5#PG;Yfw#_ppk7^ ze~tT`#;yL*|3c{;ykk`C4yeEDBc<<%!`=X_Fli^$)A&&GVR$6rgPV=J$uK|d&e5pDw ztR2bU#bQi%B88s1(ntN!mDl8rxS6est>GzMk&4urtlgjt=^B5pk9hPU>Oa!Kir zsP?I^P*(1~_Q`XpTkc%urlF#?c!f8oScdFhv5W)=$ng)k_8oI+a(4%Y?s@e)N5vyK zUM+6f2}t-4jfa@{r-@#`#lZw-=E4CyZ}*aM1)Yn)i3!{y&p%!Pd{usl2RE2}9s7HT zUXOU>$p$|ciryWCBp;F=2fmS|SaTkZ-}#7IZ*e!lgiEn-Ao?{NwJREdt?^?dokH(@<^egh`?bCx(a z3;@GLNSpi5Rh);W7BRACxIr{!vSi1mMC=mN7$&orcz`C9F z`?uVkq5C*PYiGlVeD&NIGB@g{ZC$+5pv1@djo1Z+rEr%{C`T-buAh90=F+7rjS;ix zgX?+nw`YtLw_M^$GpKZ@<(-we%`cfJj~LgDeEs<$3YfMn8r21_rPOcqnA_44&qJG_ zgQS-gVY$aXnP(OjG5mXQCbkt?0 zIc1%evy(f4?nMIQbmTC1eGL?bnYkU3_xI^nm2M{jA5`40=tM})Ph|o$Kte)p= zTP2r_@$Hiey7d3lv1`lH%3Wy%S@&j6{TZq*hwIjsW~)jLwG!%9(z}+r>^X?I{yCwJ z1oz1@0Y&`I4`eSHY)0OdOI~Qh)6pjS=czJNh;6VKeP~2{FaVM;0e+xgCkEs#24hHV z2yQnl?28rV%!&|J54736>+WBGa71mm>IbUE3`20N4~fn|Z3x|m)#`X{;MNEC(SF6@ zZ^6UL=f!EtV53Ln9C#ofllgTdmv_8V{l}aO2X3hM=o(@h)^_;kp-zYZRh7Vt|NqTB z=?E&phXMxyF@gpGVft^ff2L-Jt~M^BPEPhtN~R9>PA>nO1yiD8tBj+H?q?_A#xa)K zv{#}~Q#eFUWE)&-i)Ld>gu(g?2P~o}IO`HJRg!(uOu6Df;0Evjc)<{dvogQn5O^uV z&Fj!io$rS~3-5Z~Z2X)3&O5{R{Pp-h2z$ri%%W&pw3F_rW81c^j&0kvZQEa*bevA| z#kOtRwvCr_&v{kv-1qKzRclx6KYLg0U2~2#*Tfi4SAIVzwxfQ9+6xU#{32>bJd#fq zqKq(*ws=&o|WlQb2g>X zf<+Bx32@ep`M`D&+b#I$+;$)fE$Jjg6qx%8+~I1hBa|OiHP+0t;J^+cohqukFEhKu zNF^z0tdJdAzFuiZB1E{VZ>zMRRXZB4kN|1smXXO|wHiVe7k8?eIab&1r-{hWTv)tJ zT^d_BHFWXWne>xE>yeya&9_vcO9d8s;&5%+!sb&f!FCXGCKdB zST}3Jr94Ppfsy5?*}rQu8!N!(t*ogWvE-uLg$;P`G8e}!X#Ts$+FrTG!~{B0G!$!g z{!4qWVQ3Aaop^xp6ApKP5fz#X%|UPIr?Lx8Ua_IZ&~H_j&7SDkr<;I3m-AVq-lo|@ z;oU1j4`^pvfDt8Zei>-Ik@FMT7k4$Csya)rOi-aA9KBd}1q;o|P?&9(j3n9xpj+U3 z9!=b3S|c~qOd`LEmk#l?UE_;pv(6lJva{@hz*kerIAG^WtrsJ=k`S`f)CVKs^)?}T zIOxeNhu16wtu0K!?p2P$4&i9IpRZrecR3B8BpZL1HrA8=huzx&3!n{!WC;Uzhvyk4 zp~2@~<#whd{E$3{2(SffRfKrpo|G<!18kG{u86Z6*Ihf9L$e|vyVYXjq0La|Y7QrqF*$9!?J*8ttVNtCp+STl=x&_YFOr(@)p6r8siD#)2 z@BBZ!Q)PIU-Jb|q%kUNSDpU8vaCn4XvOSl~g-f7AeBiEnTz@i8w1Q_mcYZJvR!c+D zAcKwtcQbw8{*X3;#&>=t<;M~SpLk^kFPhyA@y*?TPJlmt<^S)fg3BX}h4b^rk3{ev zKN$W;RI#wNur(9XrW*e6jRD6Hfc{}KoCU~C<7NX z=}X~nQC5v$i=mPVqhAHGZjhhLn19E@^PNWHk2*|QQ2aKyCp@Y(dusZsTiHLVs@nR2 zqOkb4Z#rH?RtPVI#8ZCW9uK|0Cs=e%f>Ao+LZl``)j?t)I&uu=we`e-ytLUg+Y2Tr zh1IE#X0>>Z0$@G&v<6WJGpaIH6UZ6rZu(9sl)t~oDO6_2*}iI7>3CJsVwrTHKLAXB zRGO>n=VKuYLC>s8vMKAsj_z#@XenRNnNk!s-+u4ubH1Eg!n)OnIFqns4{-q z9BD;$=&U^ii`yaoulb)59x1Mn`m_VI5f@rb;a(wztx-hJ^H*x$H2#YzM(x`lKyx22 z^Y%kmd)!sN@`nD54d=t;0p_c#_GMM&jb``s#V}Q3JH?T)p_6v2a&Ct#3HRC0u^}!7v_O>K7`e z3J9-t@%1aEXON3W*F_@_aso|lGLhp;1O9a}%g(QlKh6v|e~VEUNPhlHlp8UktGO_h|KN%?$Nx!xHs}Q?ZJleh(bXv&`4^x z{$-INo*LgDO#)lrA(W^Nm2$74a0VYX{w8m1ygGci+hQlUkM3+E@G>nxtvH<}jAzH~ z7H<)~9nK?Xgd%nj5@$dYJQWg%O56tJB33~LB&AyF#TQJ0Q_15YFPu)|5HSmU0380B z0P8ueJoM9_e-7?K@cTbai+kR#H_OdC& zA3w9A^K z>Syf9)l%2x$>r7C-lE(RNa3{uO1XUnr~%B4HOFsMVxkfu@j zjeYg#x-@;pk=)aG8~S775^ulT|?yY|4r=)=uQ} zZ{q#s+xSW$OD|Pfi^$oz{$hMoP!MbaOAf{fSL8ix>_W#4SgG|>a*K2%MKKd)HVA~Q zkWH=)elyCXAJ5koR}_u(X9yc{9)p-DcIVrEW{eK6%9j~20i)B)Drbg{;|(=Oe}k|+ z|D1%BX3=sMCklRy&YE}}E~wWQ$CxXAl@?kEJr<9z|K&`!zBTI5ajbmR9iGSr#aO8E zxU0L^i$WB1{vE4MqViQ(2H|kzB@M%mX@F;9zYv2irVItK1Q~JeZm_Z|+46H(^zJ#5 zsUcAgO#n?8@4#bW6yef>+lPZHRTv{=@i>GYF8!CZGuQLch zt?6Fv=-*^ILPKPWDh-pxH{e6hA3CpLLyMXw)1OUHvFJ?zLJ z!bd1r4u2jIFzHB?PUeQkgfq&;c+C^hHY{}XbfE}&&jJw7r9xvGp{9*#jVEW_mTFFCNCFt zLfwW=%hTkprqEvxe`J{#6pDgwU6mXRp6U|ItGHL^)bu_oEQHj~ZCtG7ZyjEvFN_Y9 z$1fgulyW1NN4OPVov41!&smwH{_=!V*l~=UYqNoxpxl$FELdRsWezT!q((>*f{*wd zs|rFQu1Y9g8zkG9AE;QLpsFZdvbSOQxc&#n1&@GruCuf_N)*av z&Ak=Q=TrU)TS9(9S4dJSV)K4=ta@gj$YfY{Unb5`)7qq%q<5@l+t5k0!oF4i4XfcB zm3>Kd4cnSxND# zb3#)P=%xkerday|+jVBX=Cx~mC^}Xl{>~bLPRbr$EjGQ=Dqn9>_RE*r7satg2Y4l0 zM>;jMXWQWdrr_CJUyyYRZW3z5@!e|` z9=8}~E-UQ1*mSET_`SHlmtHXPT3S~NoR%A4?ZLPrOZ`K!67rZ2(fRe&$iR+Xk2}s0 zyIuOgD~m3gC%EfuQ&H0@kVO|)Qd<1W7iI;`uf!#Ikgf3*W%CB3wh~G$<~&rur!s5?*a~gqhd-yD-l460z`F=rwh#~y z{z^a+G)EI23*s$Q5jzJDH%hC=jwjO-3`TBv3eVir`>%C?>gF#H6>$5%#dxL3Xm^3% zF&^gk$?<>Kc|?qC4F1=#@jrK-7-bnHY%v6%0z1HgP-GrxKOA@vDPaM}jaoM$Bf%ea zeTV_&7mjcNUCV~@3e{xlFq{i5s#I+!nIfvNLMpU>g;f0AZeKsYVwF8jNi}Go536}Q zct1AVFLO4Qz6oUL{drtj3hm{DkaC|AG~!Je1KzMYyAxsjFo)EzkeJ8=AfRZ*TtqG_ zB$eV#WilQ(*mfzHVAz9=?48s&VEY<#P}DG&$@;n@ZCJH!TiVvGBaf?)yV`wLzAH1+ zY;7@)hT@0J_+KC1j#EV z;T6ko{rt*IG&LI)7f?soon}-jt|7m7mC-tyf)Jn5XY|vkR%BWA>bjVvla5Fo3U)DE z*!4>1-35M^{H_n(aHi@lS72^?pHDaBmRH48wjN;1WG%1Llgu5^Q;nKOQa1b(Q`_$w z)i#(Q--=O8-z{^iDzbrydKu{x`rK*XVxYK_I-CC2V4%GB;S`6c%HGiNCko}0vtVbc zX9l9IStOqAfiNZa;Ya0FqZe-*bgODbja^z68=`aYKD>)1Oor|=-(vVQHvv)Wn z?jA-#K@@-*Cn}SQF_sp0&7H)F-w@+rscW5w10gnc=sAP1o`EvSiL1CUeNYCsZg!kt zh~cHvN=PL;q4sXP`n>lpvb60!;9uj6c@hip+RD@GE`~~wD-(#`utw9@Y76YTg=Qt8 z*|!bD4=}8aUB(zPUd#5ochJ$a^0xfoEkV>pM|Vj1q@sM43bDY$-$ud^J*Ev-@H7`3 z#aAmAg_j9tqDy)r&JUmC%Hahc+r)^777;U~4X$;nLYO?%CAN=Jk-u;Sj&417V8+=n_{SOq! z{~w8;Y}p>m-aiOF$T13;LO0kv%TiB29b*X~L%`ds3?Q)=HyCV{-|O*SK|V@n3sI?- zb+h_-4m&*T4)^XZaQy`{^fR^t;&B={_NW9K)t6rXrYuw{ip0l`+omtz&(DP-)P{a-{4%?x~2yA$CRkMK#iCKKOnI zgHrk)mmR?`ehy1*!9!bex{a)<2Eqiw$5sp^Fbu!GOK%*4vy{OOOT^Nh{~I^5Whl}>xF+mg3rkp)l&yH4~p(AJ2)iXe$r z`G?Eg!*+^+P{lpM^{3fF+>}C%Z4=H?;qcpi81&cRNc7%6@P{B6a?%%9>!tc8R_gR7 zUwpQt**_kRhU9+0xzb7#n(d(7wxT#wp4I}#jC5QR?GxR5<1ZmeTeOhNh<&a$1kwXK z4AUrIbji1M<@apW`n$ZdGd{DqI`qZc<8xphF%O*-Cm52D{a zw#!F7bn1UbHj80m5pB;d4A(%yw8ZQ0jRs6wy1ZAGMG0-@QvkTdrQPhitKFEVU94lc znY_WEwgGs}MG&?p zotc-lg#*$}qMBJ`R|eU|Oow{G=@afdNHtLbHof7w(b*f=$7?niQlW3lFarHuF$A(? z1bD$jNCn}Kzxq{=1riG&ICK5o%}wz?!2bIY@GyZr7UnyJ`|!OH)BK;UR@B18+E~EW zSjNQJ+|JnPzf4wDOAT2K5|Xr%1dUDJZRCxFsHSxPVcvKA2Pqsx3Q`p zj?2?CLGZ{NL2=Gll_$-y4h&o9rT%{5QAb^?6R6$-y0k+9yy(cU5 zW$w6F2NoJj5+=Lzp2i@x=t!&bPTv*~Fu`0u(Hx5pNlpRXMz^PTCnop#+IHs^`rJx- z!5aD*Qer5zZ@r`Jl%w5Lgt;FnnQS(lV*c+oc@m=)9t7Jg*u2AlQwO2yfI^7Q^gmPpe^1gWE!rPdo&m?p?x{VBz3ynsMZZT!FthU_H zNoJRh;%EI9cQhC_U^494`J zwRA0JOuspcOW17?tuq&&k8aGtAS1*kbf0i1%Vw;sxQD6Hu*Um_rGmB}>PNj?6kGi(eaU>)c)BRYIdpnV<9sWKn<70Ashuivr*5T>}SH zSM1~jys0x*m$AXaBqy+5!-2E#uv|m&v0g*Qjoe5mm$I;bSRNBgMHe1Ha%`y&*doSpf&eRspBD{+MpqnsI8rg%ayvud?rd?h$O#{(Mj zC)1T7uJUmR^KrVF*D&{N9a7-}nhWOm1ugX1FHkhRuf&?O#N68_2|E3*2!5EB+JA3o zc8x!=cHg<2`C{St{zJ2uWMmc=yE$AcuY^x~5Wz#foLW4D@2!`EBYPIQ?&t%*Rzg() z?*#<7MU>;4;41>s9@rS9MB1<^V0gprEZ5&E$KE(dx9Ynl@+Mr7yL)yVSHxVveN1EW z`DcmUeCj>6G9hI^Q0wSPq0*x8xR09JwU)-W(>&l> zKPjdY$RWS;N54vR_V?LZNvm*q1(>c zUA0#6`VHCf+O+Wfv|=7-C1w?GmTcw0iKH1}3_U=0K0B!E036L!ZH_Wj6j^^P%>Shc zdN3^w6c!yl@DZ5czIsM%5~}oUOzl^Ez>`-X`>7Tl)B{Ht*DRV;paw&_YCq`x^&J0f zQdaLp6*;hHH1NiB9VotZ2VaypLJX=r878ByxWDG0hPPis$M< zqo3jzeH_Wi#xQP3!hDZ9GzgQco2*hy|M(s4BpOf`cvH`$lPqPVc zLL&>C1za@WXR;`S<@m?T^}BbjXu@-b0WO%h;bK5S4|Zc&5DXR?TD`tH*aX@HS5@A4 z`8jUo81ggVcDxpw+eo`|wbG?V79RKqU9X#JG7s{$Wb5~&lC8|XQ}UGDK567W;wy2c zDQS`^ZKii#V{*h_R1@wLP>eodzV?OL6mB_p4IJ?YtmeRTysbm#VckMyc z0!xFK*BRzM6>aSDRk9M@2l`=eu7t77T^(Yhm>))%p=T_&8jg>9C@;EHFQQbO>@uCX zlAGNVD7WJ*FCJ7LbAN3=!2i36+5Q#qtV90R8lm_f1t>)S%irV-ElrG^|I^4Cz9)H< z4;sF5H5|#4q=tKcAVUiOfzl9%MIxlgfQ2#*Ao&|k3pauwnw0Kr+N;`DT3;2Vc~LB( zVo$u7FOuxP8rT3_j#=z9+d9jy^766C)zQ_{Q#=1!_cCJ&`1SIkdp6bb^w#Os=``uq z`L)ukCd=yt^CyMpbcn6pbh``Yy%(O{H$6u8T@wGxX4^&QrGd}4Aa3jQ_Ntci6`$WX z?rUNY|Jsl1wIKGhFpl4>0L$-Yr^@#owj}uzmJZsRC@XwyDr}7$Z{tC0Has<&R0=;7 zKlHg);t8Gf;fz>}KaB)H$v5(lG^cEmS`znetxS1>U-$<8APb~%quik zEXzV%o?K*J#`MIfk#L}uX($dW-AX({c9PjR2cP;nWJ zQl+S3kw9qjO1E_IyGwc0a6>aC=-?I&SEn@2GMnyZM1*U{>tCl8OpE#o{oIhF&pcHL z>gxqku6EgL#eIPi9kacnoSR4EyhI09MGt+RF{JYTY2cnq(9qFti@( z7HP+wWWI?IM^4yq=3ycRRD(Ee79ol(G0)slsML<(ocDcDihjNNYJMzm9o7Zc1y{}4 z*4E}!bE9%T`;z@Rw_DoB;@I+PxB4Rpr(*8-GCvknDzK)wGz7XNEMHE3@sVUF) z?zM69!D^||&6$D;djuvaT(C$zUIL*Iu9-u;LG*w?eS#E@^GNm_@CcyjfQ^l(hDk=nwxp7XBb zN;s1Vjfk_Ww2>gikf{CUlAKCTszHLcyMT5pLD6Ac;p76UnM>)p59Gsw$_Z73iKVR~ zMTD+_yO^c=&It{)LggS3_P5j>%a%DJ)xZGO(asQ2WJ&{l3lQIphIU0v<=O5-kf0hA z-I&mt_`MR>h*%bTM^N+*mfL;C9+G=Ha!O4;1htYLn?uf?|2k$#(~dEL+U0W>6CLFS zCAdRs`TH#CcBqzVR9ghjxeJ}buFqi07FRiHo_x#0XFN17{`=UdIexU~(Lg6Zc_>Pv z?5`v3<4!tqEXSP1QDUX%a*8QE-=w7QU=C=%i!W1UK!hevAEcJkHpAc4DH|F)6#RXz z#Hq_VX;hp-moaQsoK)?Szm~-t`x*TAo-#+D`pWvk{CFE{CB$|I@pwIQu+Q~y}Y;eO|Z@FEK`t@gc?s4 z=Fx#*X^tW^js}p8*WeU*qpJjhdv~Z0&`S4v79~D(GuT(vwwKEa}0u2Wu5;aq{3mVGR2F zp>UF6=%z<}oYC6JS)XA95&`Z(E6r6TEz&GIBphaLlmy0t-Iz9&%P8pP^13X1wZ+~$ zL$jh?dY$gpow&Z;zrH=b-|JyZvam7$j zs5Qd@RlDKvLa}xK2H9DIOtE%(LDT7;O><^m0sl;!yB9^}v3kWQX6;JySuptvL1SjE zNJO#e_Y5-Ajjwlif8X-damiL=uqT?9NF3$HtdV5e>h@mkLbC3P@h}@QzTj*>aFj7$ zQ=6XMoXf4TY<LtirYJ`+g=%;*(kdT5PSMGpR;xL<^jw{cV2`!RH{n8ZXLw$5i= zZOBV{g^*ijB_vgPB_?%{(KZ?uDZRK|$aenY3MK2Qn1k&==hhaGglYNh%U(i0!N>ai z*(@={$hkcNAkrRj>&BxKwR1H#ER7tZsTWZp?zvDIlC}xF{YM&(fs|J%yv6PC5U@KT zU3%_>0A0 zs99zaMXF}uI7MJ^Zm^uD#w9>BWp6{>h$1JvZ|wD9TdiLmMU2l|Hde`0l2Z&iLKM;J z&eP9j)uX|<+!IKUzb;MA$NhFkQ5^7u9EB9*x}(EU*(|wG%h?E(ZKI?(=y-_NR*>oR znDuA#=K2p!&TKIyUfcjZN(HwUdD3J`lD*yP+Fc&HmR$s-v^1?hV5?F+AA$!@74r<(k+`1_PJvg#a z!;>a(`81!`3P>eje^AKDJI6cOKrmhtb7F4JrNGYW(p$kiQ6p5wd`D{ZsM`ZpWLA|v z3k*z%R_I02HP_FlUDZ!v({iz7IvmakzQ+=A8uH9vX)CKNsvDUdvJD|$nJFE|PT{0f zN;u3_zRJ-W*{?Br_COY-Wk#wIgY5EQm@mP##!}nKSyXmX()N6;?9a8ex>s~TI*YK5 z3Es>4mgbpyvE=O6)NT0`5TZZC@@m3W1D2+)A)BJ3lZis4dAnxAW+P);E9y1s%M0_H zUtZyV&jtC6rIkY2rDr;}SlF0K`1G_K7joB~C+b#vgDxJeq8p1K!7g?j3iokm0Qpy4 zk`8)jo$P3kjMf~zl4p8tyG7T)NrgdDg)G z0Wl>CJR@ut_{xvuLm`Y*_vGt-Sz|tQcy3tV|1NG=%T--%dz%e~A6{+04@SRm zbNZJT zQ{2tZSUkhv`w6wg@sU$~tik!UW;>heH#pj2+ng|VnD`pR6tc9~V%u{EwI$oQB5eGt z#D2h%igyM_=SP%rO}lBY3Nq?=lk>jMze`HIk(7ODNcWyDEWvRcRzm6nxEez0IQOmP z@PuysXv?|9c!Hb0%^Um@wLc1`firmZMOi_z zF@=lrHeu{D*s0~HPX(*xfHd9+6NTd+Bc60#!T=$TZ$MuVuLV6o?FyH;Fr(#}Y6?akBa*+#^grFG(<;zZ2C5fcY4E zVcdx_OciJAS;^ax>M=yG2j01`j49UNQqZ~gwvKSWc;g&+Uv7U~2*cf|2zyVERvsd% zp(DwqA_&R!Ph%ODBvCYHq(vYzvLn&QAtM*`cbi27?Cn2lt%vX%V3gR$L0+Q%e2R$Z zV1j)!hPzBvKJD_Y3W|Bvz}vD&uwNdj!E>#2^7}*V3@p^5!7GTODNNd~iSqJI z`0NL`n1of^^S9^x#7X9Z;n$1ecsgw#&q24(DY|p?((P$+@K;kF#KsC-D%pYrRdo zZXoG6bNJq{LKU{XCH6XvNPQ#W-eGi}IeVYMg3jqNjr~O2 z+hwaiGyZ(Q1}$Gf&TeTvQq)aFi+MOyi+b)D#=vbef`N#|-DPZOf55Zdy zVf={Y$cjtQL{z2+UZ$7~S@H~kOzG0lQdce#e1cBW!zX?m6qI5MR_}tLpv-Gg!>Sr* z`0yOtZ0wn?zgZ5XfupNin4oDhVYeto3xX$tF`*arUk}v&XwdG`M$^my7Tyc)stNh0 zy7@$)qOH$6V8%KYHtEHc+(f&)J;*}Z?>O>|;nL0epyfL86lTwR0<;Pb5U|2__Oe+U zqPv$)J&2Cw+gAnW@#4u(n&j10{4BivTeOcNXqjS^Y=tpL zAZ4B$g}DPTh|~_`(TMfd2>4N8C9i52s~wBDjj1r#C*n8c~<2s@~t(myEup*1HDmq`2dNfBg6B-rl!o&l7ASETv@FH!T zsKe^J@F#9<@!1Xp#1y2eftLqJZ8e@?RwR&Y+e8-TBg`q})jm!47Q zaYVhki=9uZI&rvE-{Z=WTA>x-tK)@G$PK5nt#hiI?Y*+A?L9beHg?@8mlbQLy9jky zrDjzLnU(OShDUFtA6|L!Nc3$(CnH|#mX;``JV`flDksQYRCrjf>OO^GN;2zBDuz=RFlo5m-X%w2k70`Q*SD zEV#H`EMNhsz*LQoI{y7UmTl2oQAa7fCuryQLyosKk+fS#n}2}(X}I_N(VY8dD{<|A z%}_FP`WoK#P@$d!KPP$lUU%z=)vKaI6PzIJfUKew8O+^IaY>GZZtlmkoB){9Co;qhZjwkn-gaZY@5(NjB@a<*~pE zidCJMMv_m4%Q6TLaoi3kXE^;BG6!YYHPV2OR_rc>BTiTR(M_v2h#!DHayXSlPd7f@ zQSfjyN|8`6f%FzkgHA6MoRhNr0Nb(1Td8%Qv_-a)H0ZXrJ$G;IfZMUjTMaMqY9!oS z4=+V+zxrJ~Cjo!#=zx6xS?TgMy`8E`%l1YMO)!cfWnfAI)Qd9jizmBhjG`qpL_X09 zJFT@VA{ApIKiW_-RYuI7+j*)w?G+7|GV|Z3;5)V3v-+8i8fT_p-7m z+=z}M-L@_lcdX$|GkB2jgh;5zC8nwM6E1jPW=e+UH^`%SF*Z7A+2MEHk=QXc0 zru;v45=kijmm2YZW<3XZpxl)g7LL}RHmyA*$e@10NDvrE2%3hf5DB9pixVIOg4RZK zlcWbH7?XY1QmHDN2^U%y0vm+O4N+;Sz@Lg5wl%fNftn2sKq;WsfTo4th2Nx)n{Fs% z|EKSVZx_AYrRU{J>Kh*4-9k_tXt%n;LBK(pb07G*}+>%xBcOC zS)Q?5Z5j?J4!%N-W9w`UtCbpYp zllSG(xU1_u$DHOs{H=qb6dqU9rb<%^v)etaOWiTx73U2XeDcoI#{KdjaN>P=a^tM! z;ivC%ndtXqWgLFXwW;VK8n`<(zw7NDo9}zt&emkfRu3@deR&{``^5o@ z|I%?s&i&0+*N>gPV<_aw(G1@0a!(B2?P`BWce6H3tL@o=pC50V6#jOP(3fXi3U4PO z=G}chC~jx(-Mu%4e;}9hMnd<&DQ9gc?gJ0YH&RQk?HZHpS_7T$sP{j^;`J2%hI1 zfczD{eGEy?MGO^e@Ngr1w*2^vIn&s9y{y!C)|V|4VJ_x)4&~V60Ga*(jh0pIxfr-0 zbu_=QM4*owGZ8(+m9(SoDA5e0&QHJs4HTnGE_eThsO?zj+9P-g9o$~_TBI_D4%BVG zF3eb1fJU2NQf4K9kuPXad5AhUxY)YK-{EBaR*EelhM_-$n3<76xKF=1gcNl3VL|&& zx7tOMpoL+tnUgf}ZKBv}A;}82RDnP2ubPt!@F8uthBWLH8}rm8r0KJf673ipCu9j= z=&-$tw^firBQ?~33x+m&rUlLqu85HoOmz~|CM8Li4`G?dqon#8S>F%3--!nI7W9&j zumWQmS;>hQxrT{4_>gP`D5%Q0i4Oh&8DDkUYl5b!=*rLBT7pvPkB?1mLd|O}XnX64 z9VKng(JS#dJA&@lW<*;NqL{l#^rQ4%*DGE5YU$9TNK6|;xVeeN=6-FmBsL*v7u3*h z*2hW{tgl<|a51k-5UAncZhgIxK(8$bo2i$YsXHrcsTD7V#fS}v|uZ}V8Li2hnSFp@gXS)@x#sp8iaz_cPj#0+cX znM*a3$12o8D_JnYMwUwS(|`srvv8eocF zGYc((S%nL_|I(3rZGb#_weQ^pv_&8i;BQLbo=P{?RZ`5ORmt?TFFO~LJr1$NX6?fCpU?ivF1{A73g6D zq_>qFe_0%xj5JvM91fD4zENkwIx~!$BlAcBO{vvgDZhwhB`tc8eUY2zXpl)Tbj&&d zTW}Vx#I3EmTsuiN&npo15rSbHJw=mPti^2Vr||=<f0+6mz<8DnF7Fc&HCqUs=c$PT82tKRrl5vvgVgSrD_U?o-kQ>&PwXZjA$XjD@HmRxhSS~ z`9(g&PE;@Di|7`#k#TN`<%N2pm$mahg8%IP`LpZU?DyN1&G32d&CeHuWgBfLA3c#!g zN^CTzp1Dv8psrB}U05}zSzi=|W_xdXp78@8@2&Gz4*hNe$BP)Vj`6g}>otO98A$(Q zMwD2eUqy{%rOFuy_LqI5c8MB1qF5BPj&1#4EvW{^bp35{IxQNvb%){y)+1&t03|gk zBBsnDo18oQJQ{dlnK)JRa+V(}IIE2v%i1J@M483qITl(pv%hMWit{vO%Z4+?Z&uW< zf7@Rv9vDB~0A7X^aXt8I&Xfq5bX3Vj#0HHemm<|A;W2||K^{U1#?~w`PIZY+MUHuv zk4u%zxk^-{dMFDHFZsW;UttG`oj+b?843*0f!geBn084X;-O7NJa<$Sf)Vk7Ms!8N}*M90CJ43uqg5 z*yz%D04c#qI$1uVT3EXyEMZIXNjbu-OT&h;ob5@527rtD+Jd(yUy)@riyi&k@W#p_ zJz7MIg!Imk1g*m#fU^KX zGJ$`@%Z@A)c?a<~t=kaS*)J(uY%}J9-jC&lrLm~0n0vjy~2w~?3tXE7D$L#r`E4srYzs~HF6t2%76be|L%*-#!;{RUAURpWZ)B@>tDK#}x0iEKmqjk?zA&_jX#O*ayFtKXCE|wdou9%tevE{T~c8#D{NPwhhV(xje|x8r6`5 z{>`dma000_!ktx%VysLYPx9T>@+lRmlMZO!%Isi%vh4`+Oa#vb+#Aocx2o^q`Z3*1 zJvT;Nb>l+5h~>qhcS%Vf#}%|+^7_6H^grEH$-Z~@!`~1i^B)?abuW;;V_q`cAp5?@ z3~4$5BXWD!WO?*=&7R$mxx*2%0){fHu`AhYaE-`(W551FoU`6QyY~mWaFjR2g4p`5kYP~f+5KxlR*Dlng=Y0dB=yqJfxqJ zF?kAWu!09|gRHT8jts7kNC{;IV@LTMrB5bnxFimNINLCpQZk-qeU05QBN@4ZS%i`@ zm;$*#Mu85r7%~!p9M-tF7=w6Facwku9L2ZaUsy9$$e(f$v2I%cZNX4mI8@KJcVqnY z#xRhQEYe7tF~U8vJPj9hSDh(s-goSLNS$y}2CrRe6Dq^7Hf+RvX|grB0Hqs&0rdx=|QxQICWq{}ovyW-VbC;Zk4VbSfC_ zo6H|+xIbJ2T4ax-M5xe8bly|*oJv6}ZkbmwuV%Ua6c(?lhLhUhl_kjk+G~>mk8ds1 zez6hM`4Th;)gpZvF0lGTC7t!I*B3T(lW2X2=PAT~imi=$t-7^iyJgP9opD~lyRSMr z*6MdWpiD<=87`awAHlj}aaO@ncuqkt|Eir@WT)z3&c%WG8v-Z4@$sRd=?Vjul<4B- z0a3Bt{w=USk%3Z_OvV1>qi?n=Q0n6FkeI%7kEEcbg)Cvat$4O?!vY^rKG&rJF8ad} z-hsR!f+MP@HM220v7~@n16|5-Ryt!feO8&hN|8Ra)~gB;H5x{9$;(OVK}L)xLHRz0 z`yBRSh8F@CkQkVBT@#P#9~cJPAOO9LGf=vm~(+&gXdj%jj}?@cd_0E%(sW2ddOQAz$@k@zds zwWGLrD3oYo8W&=v#2f;vMr zl2uX*yc+RR(#L?n*5~}e@yC8u8c1jlo&^PIc9ZG1Ec{V7_j)A%wO;?}G0)#M^$uq7 zF~JbxOCKC%zHex`FpEK&y-m3#C84m*hu}8mk~+-{{cII9@^=o8UAebt9@`ukN^6hl zSN?}~5b0k7YG;AIY`zaq;thiNn3MjU?zG$5A6!Sv)?cQYW7hhqeW<_tEj592cCOVB z(V^3P_F#g%+s9E_v=|JTt4<`%j#g2ybl9EHYNN!pJ5dh(Uf6d8u8M?X-)DXyxC6Y5Kms#oy2;(yLmmS){=Lm%SUVgN8D0)Bq=`N^8&zC9 zI=o!}+yxz7guUfRa=#a9PI!bX?#eU=c)SodYvkGczskPyl1~3j-<09*_TV?>6~*0i zxMl$5jlYQbxAWGcW%27tAfcZfZylO51+J^lZXKe0rdC+Pcqjk{0B zF3?}v(>FCo4QZ+DJcHy`1z(fYT1E2 zp&r|E8;|H^lO=t!E+Vre{BFjQOc)_pp*}SNTTXXdmUOP|^QXy%*DsTg2w(*}g~^5u z_1Q}>dajakCxkHkb5j60#AIeCau%okr!!w!JgU3+mBvp}(l~^AF$wE90XQC6<@fpG zMAnQ*)(DY=7?A{EpU7`$d|IH{DN2+f~}3iHr6r$KTkly z`Q!IQ3H2DSt+=^%tF3VWVmG3TaY_rd4&Ub~_c*+wHcX%^<7A-m7@=X$&qE;RJsrv! z;_Hzj@Hg`H_5{en5DGi!ABK_^CJ{}^Am}(p(SaZN7WguT*v%t3d-O820|j;{-J9K_ zjI(YhG3|xMdHhoA;>lU#?ar`IT#hxf1mY`O@e0uZUtH6=%vY8+Ki1of;akijz{vAY zP^iYZiw?*~deI^oBkghj+-HFp$wJF?Q75fcQ4AD$vu++kU4QTP9X4H-W$VvItC{S> z+mqlvH0R4+;6mLqMd0K~B-FWGK{*h81mh-{w8Dj{eLm`jzOBlQI>bv zwr$(CtGaC4Mwe~ZQ?_l}wrzCTMsM%VybL_gl!SiA`J?iPn5LFf@UVrWS1 zSr7Ncg%f5Zl*_#nWS+;JJw40g!iAj&06{|`!2838cA=j@aZ;w~m;CV7*G&FMFvHY5 zl4K^GG&~OB{(~MiHy-HX5in-qId=oWN+i0kKvnQlYM(>~4vv7*U_ahUdaOXp5yGXM z8uq(_nvxHQQUpRF2(LPTgbzc;kwtFgC?BG15HB0znF|!-@IGlUba)J9@JEA1ePx|~ zmQGofF$@!ZB^p3uDumCCQremOqQmQKNb!|vo^g?8Tgf>OCyF~zEW?6*TapB+mjp>H zdvPu%g&6Ka1bZok=Td-mR$^vKYC9~^KLyi(48ts#=s*l{mo;QXODp=bCW@N79N+qr zy1l!$*wuIv*u&JxSdK0!b*tQaujV-e5}Jq9YLD|ywNF|@cSc1(Bmk~O-a0T11RvH6 z6Fzsq>fX-`OlZbqLX+cXff(cFDoV^bs@C~c>zi=o@!bDrw~ydxGH4EY^Yz*!u=6L3 z9avxNd{KZaQiWWbO|U;Ua?2>y7Vqf0GV5RP`r5YicAZk9Jj>Jx{+WjoQbLZ^G41PM zLpCXosLzM#pl1~L_Hj+dEPeuhQf*kOvch5P!+mq!!YXyD+DA^$mo>2$a4j%on6y!r zlu?!uQLB(Z>mZdbEHNKCO+9|85!|UUoDUPAMzcqXHMaOQl-=`5iu_n8t=aR zA|)l8GRXMlx~^a&`5W?Au6w@ix3Jf6ylUrIOT;iuoN@OsL>OHRz9=bFZQZ zgms_YnXI~$3s_LNsRPU8A>ugkPQqyhJ_iAUr=(R6=&stpDgV~K@#KD3ePrT*mY+GH zX?;dwd)#Mc&JGO44H)AtMDYC!8!xVL9#;rSwc8;QZ}K=v6dkWO;ZNnPz6jcb!X)7z zCVn)rZCI7h%`tu}i{di`YMt32L^L(6#@Rzw0lqBQJJPY~NIuPcR8^gp~p zL0Cxji};OW=f{67Wjdp}1NP|i2refE7Su9~9CXIaAh5sl3DO6?lfPLoa#}#6YF0n+ z6N>P{_6+9?$6;(CNR1)BD2Sc9UE#aO^0d$Q0SL~5e#vJulQ98;MUa&sJ#+%NVaU;W zk$CD=KXMq~O6;DUZ$=2Z1j8aBq|??J1v_U-8NbNY`_viJ-y?_*873YaXDy3Df|F z-tD_C`#`z#sVZ;7Q)LHeSg%yqe%^{|qLB(C4Y`Q|UDc^*kuLfM-AV0}!}+5J^&7CE ze+THU(cAWecK^{U7uKe2h1A&nA)LR&=DaEa%eVRFJO#ld-7D|+seZaj#)%?8{)Y}k z+I}u?qVk%S^8S<6JHJ-n`cOBT0TY#D?H1;4u-PW%ImI;)X&=dyelUbD5gMEXRwe|K zA_6a+%-M)$Lm7Yt^caG83M)v5`94nrQ=kGD$~wZ-E`>I5Qi#H4F^#_@} z-XLX=aoEyRJY^`01jr$ps9VwYuUHI#rXiZohoIs#P1zAuYTJN%&aYoR4zv}L3+S&p z!9I{1{RtP*iddRSM79Xec;61a$-HW17MMY>mI50Y2uTm4j zHW=Mf>UkTyX+gL~uJTW5L9(`%sSty!PGymc^;J=#qUfigl9WEL>r?`h11=YJ!Ey@> zX?~bXIkN+AS@Bkd^On4Ey5yw!U4&>{u~m%9N5MOAZ59g`zEk~Y#VdEK5w$mP+n%_< zFuku-?vtWlnlsztWpUu7A$l!aOO#v<$&|xQFyy-6blvzVVbS8{>x+=6S)5?FzwIX?x!gsV-f?~Ql3smnTDzIH0|rzo6ADl4k)Fn3}1KhH=ER- zJSi`Q6QI99kX=ME(9`En`!0@ET44$u$DyCu3~wuT+*b-JTGBG>Nq?;!*z{Ng`{3Gc-3 zF?uO}A{-(GkGv1@zcjn2Qe|72L$1b!pKn%72VMsmrirR1!ypeZCSPhxJ-@)dl(f|l zI*u;qi`5wr3V}#H47ue7<*ecRV-sSvmM6my@WM8hork>AL-nn))`l$7N$nmb-k@Ac z>~`h6ED1J#Q(T3-ma_>YTW8tT1NnAi-ja`ldNGE!1iBWwexOCA2o5MZ)t@MqpR|2J zw}ff_gsf_;iQS<0110ENVm42Vp% zl=!Cf2WZxHBC+M!ElRNKJBTBG#7c-iVFspp)A7l_j z1&RzI!6FDH0yb?T4Wdm&4T?0+pqv!Ww``H}^bx$|CkmS&(AJHw)^~zb629a>Y;@IIwk-6N*%oO9pHDLeDK=q^5 zjUA0LP9xB=PKC!Z2-9OG#ddK4M`&pM(l2(yESU# z0nqSv>3XR^>IRKTTPcPlm+bHwvd|4wEN0CHb#TdhEuFjD{jPWrBPE-2%d7RQMV(Xm zvWEksHcxwEF^1|AsR3X$q+%hHOJvK$XhMRvys%*c{LTR){vokHP@%n`FyxEXj;wc{ zYOLGV*n|ovnMS{VuJM$E9!%9~@;gK7+-n-zmL0gicMSf}pNA#od*~u&<5jZ-H6~G2 zx{hP=9k=0SlO-NV!1Rpp_Urw@Uw{|R7{qQQaRTF3rh{s%VffQ!rCabXu`I0O#JRw9 zUal&p82!A3f!jH9#%chsJz=51-iniL@dfZYM2-GCq21?aguh;9X4*(h-97JW(3|!jag-pS3-~eQY=v8sQFHy~HtOwHaD3+y%v9g_&%u53**NHt22#>uQrWkh7`2 zUgHZ%uvi-)*;2JHeQoWj-UX4n){EG;+B$H#>F%l1MXupM< zBS~RAlPhta$nKrN-<7kNo8kPT;C)5h^~__MU_)kC)I9#X#9Yamb=f*`N)W<=S})tW zj73Gop|rwGPapfZ*}8hoRx@i+E6B2kP_InhqQ-0?t?{RU;<)xEkR8qJ`J9(HtJ7$M z9qs~SYGh=GDINW8{y9uw2g9O7zdcsQPzLL(b4_JDqi2`1R{%`J8;hk`k}8M~=6%xy zjh`Ug`5HQkK#;WWiA>c>kg~5C@zh2!+2D8B*P=_kgg3#eHRF0+oC}e`F8PI$xL5uP zNu#ZczC~Z9K^YbaQROZ#1L@10I`$aeKU<`g((P)nyE91inJGWUqrpvnvfTYC1WD5cShlw1NHA7k((mxLQxQ}L(l@gywk8( zkRIF(j&C;)32mN?aPT{bGh2osPx9=*6XeDc3RG?2n{$lQv z@z|8XC@eHB?X-y6JeGXdah3K%QzQz5=ANP{pJ+fOf1e_fqzK5arymxNLdL9g5R-{S z2A_@)9)^0Klt$qoK}r$>uU;#m_q|DZwspMhNGLiJF1V3}H7Vh6{?9@|mT#py2J<(l zdGdpn4tw^4ovag%3ht;`tUY-y@@ST8re33>oFde>Lh6j^0+`MuZ(glKk4@V5>={0J z<%g_lmbmH>v729K;3ibb(BR{7$@L9gJ|~K+(Gc?@K*K0sKKsl+fjC}>4pboq`}9DC zU5qfv5P}yyqo5d5%PmY9Rtn&pUI3@pK}x3+qa0&FU78e#<^kz_h;ixUnOZQZNL^aU zl<}?E*EH%3!)E2_*!tNwymyS8o?(nA!ZVB}7uWNS@6b}UgQaQnttvEK2>bBgoh_gq;!6O8p!#(e%<(8zE2>IEC4905#)rLzI8-~1J)KJA(g0k;>h`w-t? z>jimGZRgSZ`o7G3`FUW97qW(Vy%75ILwAk4P!1O}cbNPj{wq5BD!%kS6?swizWApX z%yi3L^r_lvVk)E{Z?Ej?IYPw2z8E*i@c2@6n6rUIx-11$ToJ| zebUy+OqJiAV9rved9#cJPh(W^zwt)T1w&!JEtG0*!?{0HikapT2Ki(I&$+p@{0Y=A z8HMEhk&`~^4&c7Yl`}Q2qZdfLS zQfjQ9p-07&dZs7UULf7&D<@wdyY(l-w#v}C=5|Z_q)JfDmTyfb5OTJKh$>!hlF_^On*(izR@dgC4(+N(JHKf9E#63aY}4#Qfk2g zwL28wEkimaeX#r9AdBQXwcHX{=jrB z@=Ms>6*NlwA>S_Y2lvlkKE)U99}9ypz~SM6qX~iIL}2FAG)?CkxI1(ug}jW_)wO!7 zU%-m6i4{&~gE)E*BdlYCDH(iDpy>rQag6UnQ=iDQ? zSzPp!q|?}qNsnlDG~;6`gcms1;a*M;#@vc zn4yAfL(XpsvNC`w?(6E)QG?UZP=tQaP_bs|wV=085jGzE>hwN@rX6TBVir85{Qy9lmWWNSWx5a}6jG}SvmWOyre5mdF z;9kEs%86+m?a}imhyQIT5_#bXy}EK1d2ydw#Ew)pTcMs}ko}~`?0V8`_B+X5RG#Ey zk!h+ug87}cUUJ>IfH(WwWI81O7pzGPH`8o7Y;ug3lG*Z*ToJH!Oz2CSQgTF*-G%q` z28!N~AY!YD9PxYihnS$P|5=xAR_>PYmtGTol$Rr7b}J;xXaC+-!G?kxG7||WcEU-2 z0*E^!=yD;!pNHJtnHE9xF9n7-@9*9(_1TEvu|GgdT<{b)dLci*Mf^eOm}i5`M!D-3 zxiD9;FxMxI2aRKjo(~k(PyN?_+G*(o&COS?`j@U0!$Pwkw~9|R*K7RoCf{)D1pXon zw5Ka|hS(a(ZVK8+g%Srszh8ye?>mIP{j5oU{P{8XuVO@?n(wRfe>zO%f7}Dw|GU*+ z+VuZ(Vv8Et+Wv+GDE7B}-WI{Xxoctq~+P=hVf;{8h>qlCvVuF0N9gXMg3{b4TpNa^f5-H7H zF-#Tt0vvgHMs`|qDN4UOj0W;S!qwMI#l1q$N(o35#yZeUXnPX6z{XaE{(wV)0Qoc8 z#LU9P!o(Z^L<&m^$_fe_G13o1mVveY-=Ig~{9FA0o8cDy&wNh*|8m3sf9v^-hK&d6 z8v2gOrJ0wb?fWlW5fUON)AtoND-qzt%~1$&6Hty)FiYOl(MF+6W>!)r=|{_~;+g2v zjp5@RNH)90B#Kn&CiNvht5s{kXVJe3o4$3UNpw^BEt`nn&bJvE-Y*-U+1_)2pP!Yy zA2>rKTH&XIY(jM;H?Fk+{dHr<;RMtnuZI1gdW>K^2AE4DBYu=&#Jlo(0@R@+;~mt& zj{+>e{Z&!%Jqu&+>x14@Y+3Gp+U|Ez>df8&*qP7<*+xUP=R{$V>J3 zGmhrXatf~ue?Rm5c|UhG{wnXwQle^86z$hKEy=)}&x9{!#Bg{@@YZcW)AsDcjV7CL zlO7=1g}{2ymU}d(1kJZ=vZgP@Ebkv*Ve=o{sSs81KAN-Snl874)R~v$M8j-4w=!gh z+e!~jlH)BMCWWJwyD+?kq^_(LDsZcBN+GYbQQ8&f^uWAGSd(?+>hSHd7WK0lQ(&K@ z-ZvL09yd01ve(R*o9ZT8r4t+6U-dq5JzD7q&&>p5pem)6x_7V$Ugt0U6t5uP8UT25H6ZbbRc z_Zaok7&p^tmYVQjVm=LFh-(`={CmR_#9dEUE^M?VyvGHM4C$$?rizgvDHsWm1*)~& z-BG3cv*TfE`pJxSrv0Xv2s5y_EM-EH2Cmi<`tY&}>e5y%j~Z#3sz|;68a=;;rgL%P zX^dA-8vvA?^57!7BqJYf`d@?c8u~eSX?`Pf%*8`2cQH@Ts%P+cI~eHR=EP5#4DegyGq~@_zw$fH9HJG1l zr&T7#yFc5l<^v1a2gOYve~d*8kcf0~vRPczMF^8KH)*}c0`An1hnj<~$+JBviprX& z69AKD6%7$(hq&#MBRy}WQJ;=|Q8~sD2l(h+4U!{W>8khiSIYMUyRS!>G=7l=6>se3 zs(8qIanP4AwUux16yI+`BM$ex>U=h35O7P_NR&(Qh-y9|dre>~E)&Hyt+(}2g8P|K zP5TXZ62AxIL%j4AaWazy>cUZNyAHUQ4!i6)>HDJM6OkSLO?^KG9}prdq>d6i-=QzP zdBzX(5Cm~l?<*o8cfE&1KL<_5C?racl2H%dda-}xA zEaSoKky`$u)qSJI*{Y%0t&J*btKNvq%Re?)7m!ggM_H%j#fGKTfr-Mh__n zCM;X^ESq&mNI5mT$(2uNsMy`d=(;P2ev#Xt=U%UH%^BkQ`@Y`C2NLG|83X#9Cd#|G za|;mzEyYLS*POK-de~C%Fnc;yh564!#gkvOal01<9_`#E$bxP(CrCqj*%AjcdATMJ@tZP} zk)R(MVUY$jgZYbViwNg5zbrKAYm0S~KoO*@;ywY*an zZH|_~kvWE(AHN3{K@cXd;Xt`03ADo^z5kZ`0xsoN;6`K#ge-{w1qTsFZYYe<{3TXR zMIuqmk48*KJVsmdEq1>^sjwYX@A8Ct>G70m^`~ln3F&%@RI_l8_<%zCo9T5F`Nxbm z>N-7%Z3w)bWClMef`lHqHx9rP;l%mHlm~ua`lsyfML%%Q1wHozF*?y_@v&X(hN_y5 zgj0H>+cKk6lwp_1;^2Thw+`hrCFB<@tZq7noRZXlSD$Pt^Q1Mqg!iM8Y-Uz5Lu_0V z6v?mA@`my9#CI+tY<%jVxOymOHAZT7v7WVt3NW0MJmu^qTp$8K08BFPHOTH9yNIwT zTc)H6L7VEJ8FIicik5*;mEl_g%;OZ=mSl^1uk02F48yer76#Ms-*sxsn+NHni(b}U z{T`T8f80CY^qU)%!8`W`pg9-mk{OXQsrOK?uP<*Oe8SWTWsqS;yt=Q7IWSS@W5OMk z{T$pq;_DR_D$`c2d^B>GZx250yHRh#?9IAI$vpu!1ssX*mzIAE3)2-J#Q4R3%>nGT zSB?MtpR$Z~HpME*s`B-5Id^fr%l5G={867Xx$XRX6;SLtW8ruW=Xw0YvpctJpDJM~ zYt*SGM?&a7vP!89h_R6|Fs-szLO)!4+;(T^Tv);4d&J zkN+S`;E|fdGkpxi=uF!^%+fR6`UVsKr|OEXuEC*u_Vf+Hjp3e1-@IYh6l8CdZ#Qtl zU@rP==L>E(O>09Ia5OCxgpE|vp*lTBPS$~mZguXg0ddE6+MacZ?UZQQWooskhFI43 z;HY2W%!Qs^aX1a8%HyxJk|8*zceYdO61@&>z+$(fv5{h>aWfb{8K50SPcrqW3Y3|e z6i{v%Z+|Z8!TepgS5H?UHSlu0F!Z~cNE`bgxe;oCL`|hu`wj8GHdO*SAF~N?KtOR= zKtO{3Q;(ry;%w#UYGiC{_8(manUb@EtAneTqnY|Y=AzkuQtNUwZCq7X(0>$8cQcHf zMMWF~h{Xm;6XeXHAYzaRa6rcA$&^5T35EVkFoTmbA2fvkwXTu!6}-^73q&VZs{lzF zrlcy@+^TH3U9+~)*lPJGx~=`O)Y!Vs=FQ0HR$m}=x#j=NZkpTO+x^_4eBT$W%K=e} zCG1oR^)-2OYXbe$tJeyy8y}-Laiq0(IdI=T7|dyxo!zCUym8vsr|hK>yiJb()brsZ z>LYO7C&r8_NeaJ@Na4E>AxGe9Sd0vIKDDp7V1^{{C;O8bri`jpOO;`T2NuG$x8nt?#5sy=y@-3;m14uG-bLQVzk(qr$(gtiY8Uqf zYZISg-*QhcI3@w^AzjCZdYs-_jQ9{EX_qwoI+f_Ca>CW~7Vq2C}l$OyIh zcbf2Zlr5?LDjbFyHa0H|wD*`eD178JIYrWYTHG+F$f|}~r=bCbt8`VAN3D$#Qoz%O z@~gI6xErTBdmvFQ7zx6k%rol3`m>X|c$g@1IT?~lz+D1Ozu=iH87ayl0u;A}h?zIt>DBJ~I*@LWq4WTAWm zBW9IyQyJf!uA`9G)O|7nS2L&tf?Xww{P zFqk#Die`t#>I#9P_>kGwG)u-X+0M8=tFF5p*@ixcYf&JeeY>9q3{E#z9W<>#-|&J- zP&-NPDFzjx+kPLu+sY6d2QGWiDiAj7$Sl!u!#y`oRNE{k(z7f>>W29a!yQ@*gmS$>@j~GKSH8H%Y_I{n*dF~UUm)gUh zh;VPP4c-Tm5a$hw5VsxK7DikYk@HT^hegW1;IRJ{&WBJC=?;#S1V#3tUnY~us6TU{ zw0=~86B|Z1-!^i%N=LOT=Bgzky?fj^{l))M!CmTQ2w=m(#z@HT8GGS1V!$yKK zTQfNM_!1&7qO6IaT;zzoLxn4T8K!Bf5mi$bTe8+&(BKr^2~uAzag;R;F_C{-tID*= ze!L8vWVnNg5LrAzUm4o4p>gb7ilS_BfRq?ODlaK!J0B+(-T=wVJA(!IlyLS-AD8jJ zp~arw6gAJ8XeTH3g~zhX_%(d+;b~FSu@%!AqGLR3=^g*$I;hY^}`k+PEyz?1Nc zRK1s51vZGY_(65Vn?Tsvq;+)exVaokPZDK14yhxoT~e0*QAt1d#~l?$lk##3%)a~B z3tEV7&~JMYVuXqJmi6&#Ta7QIa**M-oYDqV~I%zKh?+IF~WJTOpdpyhc+!DFIwY;X5y+YN)13C*5 zrcx@pEp#2?UcZ&C;l+XZ2=B^Nj0gVaI)IHIt`o%nMUFabzuAMMHgJIA^u^6c8DxDP?R1BTHQJ(&8S#^noIVg zh`MJHvD3s&{%lxUECN;b?Hm6yIjuw9R2oTcIu2U(=j@l?F@4PgU^3h2Dqe_@pNFZV z`3Z=k*ut7UPp8WIJ~c^Criol{NG0&B;v3v~>=)XRxWqU4^f2@EAT-Os6j@Jlaks!| zQJ&U=btwwQlAy{+bgCIix6B9t(+#B{#)#lquei{@NO4OmG*vO)NkXGI?L~Smu5!A~ zPVa)YrecXNGs%msak$CRl7HS-YpAShm`5DF%<64RZlg(V!(;sFwh--%36M5zJ8_DV z2MFMS?q_k}+vw5D;FSJ#X3nEJ?7ExC;p&o^Gv+1x@oVAOBof7J;dn}-Q`6{X}dl_yI6%2?m*n_2K`*SuU*~6W-|@JxJWVV z9m*PFA3wf8>f-npXTM+@`+V9XiR=HD~hrZV;*wOcrrs z6}+~v?S@U6wxGE$>3TCZd`>C$RwkF2XN2H4%k}}z`-d@OweRr8U@1rOeBVLJr_XHM zf6V!ZU-}6V+qpfZnS^%(ufhBPTY%U!cudzBdpmaRF_cE;{c2|?qvK#mwtyH z?@Fo_Lf87kfbDSaA|HD7A?9PS`GW+-m!{@Pod$sZOF*1MNA`a7l-24)g~0L|6-XoJ zRPb^k<*$hrLCLn#WUW>v_wU9KO(;teLtvOd1jS$7nVLg6B#dxn3JfZlCrK1 z#_DPRND67bPw}Q2^(AY!woWfRiK?}lrC}cL3E@>jJJ(AwAqyfKe)kbrmtryUX3_ss z$>PMg0pIef?2i)l2B-uUQ+|3+Uu|PG_{Zo+>9_n`zGVo7(>3pk_=93?qb+Wod#4L_ z4-|v;n^%ITyyUS?HaaK8I~I@YcJ>dw@l#jI3~L)rV)Z#|uu!Ao$H^pcF{t2o5e?;s zHI}(lgDA`hz`tTBm-R%CfMU6~c$hTi1i?2OLpkjVbJO#@_9O_-W z3U8U+z4{Qp;`R*v-OngCnGO-l>U>I^ef{o-U6bjLS7vEF4=#TltjMlUv3j4zZO(o_ zFo(w{*)qObj{T7U_FnQ?p};6_LmyQSfpS^rFIi{6%lw z5b@dp@$f?PYb=4mSPHX9o=#j$lIZY|2JU7u~Aq5+TbUwbIZlMDRiSxSsA&shwy zm_34CwH{U-mNKT3(R@SU^9#M#(4sf_wQk}s=zkq{9*dX6U66o)7XM*${|Ab^wCR5z zcK&0FT%rm4kLC&Zo0r9_Xupf?`VerZK!Hkv=rt6DY)S{rCIy@~Gz}j^#_D7~C|WZj zDPGg^Qoz1UuMNA5p;Mlzq-hjwsiV`ivnsi^+S+w})9Jp}YO~h`;6Ll)^q?>TDf&Db z<2>8-?tRR8efRge-zgdcZeHLMB;lf&V%GXmNVWLZ3_K$5KVK3kRTw|ogMEeP;Uxx-InhTQ|4kQ;sHD*Yu|el>fSMD*JqLHvd~G<$!D z>h@7fT|2&)BstA9_1Xz0{Jcl)J{VB^e#7>=88hv^8W8+smTzSk>4Vy0G<`3j`%5#` z7n$IXc_FX$Bl@zStWkc27qOOBsbH~CQN`fqd zZRvVvK~92T%3G3!PB%lw!TwTuC*{vgT888}Ud}lCF?{Xx{F){I;?~io8aaL^h4*XIqvf8#CSlYcm>*Ykf?4%Hs{c3X3)} z&EV8S_I*@R`J#ribjcR#c=2U7Gvf+JFR;8L-XKAHck$28rnF40!R3DeOl38^ zncLf|8S<1#S(qGWJapUIl*qBrducIF%6 zfg(o6Valz>)LR+r%V~fps_`)bsu{R5T%7<$5)fJw-}B}SywR)pQ~vh%VJY3n^>rUL zVL?;x-_R?eedMN9w5b=e=JZ;!U0vK#c#IyK(~bxYwfqbCiDZ(r*sP>@?J%boSU*v; zsj)P&Ty-QgrM0C}VgjmeVF|GMl%T>IeUk=JG$Ghfp71r2n+!(A~A+vg)WXFWNB6dKTw7O_#ibBQ`dd*+-Ufm^M%#HR_x|V({ zGP`(*IIenGfK;3}ZuMJNCz|C1g4r|Gqwhf62-OMO->r4kZwW!FV;>)Qtc&UEBcYz| zK)l~EA%^5mpPutqcoy26xmNA+A9Gs5VME-E@)OXom&Z)PKN-f;NrO^X?u#Q-3=@dh zF@$K`3CTXC$GJeUZnoV)HZiZPq-W*D>Q%TFJ++UDbtkTw(rl%lUji^JMn~`jjwLD& z!L2}j*UgpKSFqlg+_BqH2@kBeSd#hBm@MgXB-7JB(avu;I3>H%N;zMj@7O$+ALid7 zz{O|ZSkrl%w#V@lf~_lN^M6}2S>nZVmM2m_HPKpv$g^1{wfhSauv)ULBAxa*kj<(u zp#_&dU~@%K!e@q!!CMDeDY3dcxsN#K4CN!SuP5SGo}9zYcEMX0)Q4-sXDZmm2uIVQ zaDRdz&M;Y0WQjJ_Pl-0ccPbH_)=yd0hIDjTZb=Bf%gs`sEiVj0t%#1GXyv5o#dh3P zbhOg|^k(yEa>ovJT7F-(6@3?6c{-CFZ1`41&eFj|>r(#Z^5IXvNeM@- z#Pss{PSi{+zZAQ^_(X6tB13l@rPV~jRNgk<#Hd7L*TN9gqtXFZk8k2>qc-)HTb7Y# zoRe%!_&~tqG8(8PDFxs*n%R2FHYo9Z%a=h!iIg|;K(XyCGCnPI_i7UAMORCIYh-Rs z+iztE2n%sI)686|DckK5gg%GRndLXJCG&P=lfzrt=}A~;!t9Du$<8ysXS}bYWrO0G4hf_6e12rKM0eGW zRq*4Wqo^JMe9?leZh(+b9ry=OE~5~Ha43sWZa1q(S~joSB8&JUT>>-_IhaZcAaI=k z^zOtiHmRDc)yD~>tModSJt*9(#uKPs?6n8C?Clt98$k@gwFobbMCwX}75nUW^DSO5 zzwxc~buyLKNGG?+_NP)mF$+!a;SDVit1s9YZcmqE_4C#C~77>;_V9i4^o#s0iJIyb+P~F#Z*CLC?R7g!v*lut`nlC2XM)~40x&*L{nojNOTmsF6=hA z_n2J&wpBlHd_31luM62@;cB@Sn4Dwy(K}q%D}Y-OE$n%n->9MGFRq@7K2v>L@3gbs zac{MU)M-nu>B2txgTb~CJ}=W|%&=2Rr#;A{R|nI-&%YF*IZmWV%e|Bd%L zkC}p4w{M&4@Hs!Tn^*cUG=k2$F^l*Tc{JmV@33p*twL21hLY+O{!lf$_pWbrHn!#N zSFPfwr@I$VZTwCUQ)MB^V0BlITXhl65>^$gXW3QbG;Wuqwz68w{7`EI#C}yG4CXA* zna&FQBtDx($>q@dFEBl#;fd_xoHkv`KpfViiHSc}>j@5H0qD~@q3Q@q^rR@}DQ^Ve zx;;@5nH{W75qskA1fY#>k9MV&Ib=SLcWV{g-WD2hKZo{7ZnWE*n@fsq!r%H%U2va) ze1vDSof;)To0{e2DkM>8G@ENMD^pUKYjWE=rhCJnm~Uea)gN~KEo~*3<*PUQNtZ*J zzr5hpTJ&fud3GK*>%-jS<~J0lA^DA*eY@;hvodu7`k|jfAnGWpc1?7lupVfQrN3jQ z?zV=QpIf9V7!mgG*HC^;>^m@G5@91VV^NI0Fnmvx_HX#)b2pAtO1x4|rf|Qg&?i>9 zqC6As?;w?rGzCve6h=zk8id26R6%OD%KO5Ng(IMYK z1ORiD6Rc?-g4>Wx9rlP{z`_n~L{RkW!UEX}wo)GGcw8N(s2chG$M;N>8eOL=lx zr~d7+JRLP|$)rRYcE2*TMtL!&RN*Q6AZ?$p=PAqf%pII*7bm}R@`-q7TRw_zR~u1D z6C_!$z-?`aR!^cO07q=zu;!ekm*NMI5z_%Q_FCYp@ z!-on@07RV#uM$_N>M0Od&LH0f^3IXg5*8f0UbkOSpV)kyg|++)M)82fj^1YzK((}L zRNV^fwkaXES}T(5&OW%=l3t+~&b|4pS#CEdu04IeQ5|KX$tz&zU8$E*M13L55QvgH zadeNARnx?sH!#%7?Q%WL*rJ^tODpN=B&!dfvKg*6nb&JejM%93tN0qr+%6%GtBbVR zXhmA~7%TFXh=C6oMiA8C(gkwgAiqrjb6FAZRCH3a&Z^rDM|-)>?TTwaMH}%;JLx-7 zMCejH*qxNZ+DdMX#Y=1PbbZ%+>t+niC$)|er|J#rXI1?^**40sd2}9mT5JDsV-aUQ zxK?;tZy$sIQYY9xZ1vIks8mK-=!l}|TCBw#b<~EFS5s4gkf#kfPlcOGH4O(_MA|Nu z%DN7R#eTUmqFrf*A?3-X$uItpS*I`jE&7fT#VmL9YvkG6IrnH-Td7YYm-6v(5EbL+ z@y-Su@v;h|1#Zokq)pb6Fic|$T(k?Gee=3}?PlMn6V+~0k}LdX^6`LVEcIVVnkRP? zoes^t7oYtlmI=O|XooVUJvy3z!!WtjCl#TmfxdGp&!B7$3xnFt0-71HP(kD5FP`50 zV>M>@KY=c6`MwIldbYBUk6CoW>|*#cdAk*lHBln-?ssS*5MB;&}!m3Lyp zz_|jc5p#D42q+iYWW+lKj=|GU`8q6%s443V1R2rZ+?a$XngU_k*N+Gw7Ra;0ZhSa3 z(T+KjGV;GfxoQ=(3Tgj65P*FzzLYu)(?j{X_qv8AGvTZ;c#+m$fuU58sk{Kt7z>7gL$+Xig&QRRm6=hBOR(E?n}+z>Ba<`$T`O-1J7+4Ry%9RY zOobBdk*s&9nkRsDpI!YxavRy;jPA`T7w28e5h~c42I65kp=(7&j_{Xr-#>SYafsH{ z4r2bxe^36&mJSh=ga-nu!vCKIVRnuV&aP(8st%5FX6|PHse!Bcx4lqV!Ty_fdb;qm zm?{KY0FDl}SzLgM-w2~7R0*6(f(FJhlAtfbByXKW(mvA>J5!OR@EXEzYOh^p56Y>N zLY=R|d3L&s$ocB1$jQ0$S+Vt(x1$HXB=KU7@M+s+mjCSYXYaGi>uTha0BF9l^s@o4 z&5L|Z==BW?HCImkp|+_0I5D6;4GMh?|3NfcxH%&kAydV^3IH~S2=R* zPK}TN)7l{U;8NrkI>UD;UczT7-r-=&&j)f3aNzBHt54X=I7j&A*n_C?`(D)RxtP#m zUoz-+?BRhLd7m=qsf^__9Z*rV4*4H1Ne zhZ~=h6`$2aZ}ex5EQhUrPia+GmG{xbNfx+{-F^0oN!~PVb|X!eZ0n18om9!vy?S7> z;<2(X_&^g`TJ$XmNmIhLPS*H~7XG~GGAI9zfV(cA*GmE;d(R6HE9ou-qj&17+ zI<{@wb~?6g+qP}9gZ^^rz4um~^W(dxYVBR?@7jA|t~urygZyhuc8WX%2plb9kyK(A zA%{K5j&o~!v3wGCQaQYtj-03d;AEIZU8CQ?pnwT$dhE(^t1dZJR%udvEWF3PIXj&p zgMHK=LD1RQ?`*9-bCVqLFHUDLFlwv^H7pySIvrJ1XP{9d{tKHPh4CvVEBQt~(af*V znnN$U0M{{C$7zc%Sb=N4&W*TfK&uboop7v-;6s}FwX$)^(pV%lQI{Wc2WBKFw;!V> z1S_hqY_m%L{fzTg%Fj8R2m4MtA?+9Noz+7Ju$lc1`{h{Gos}Gh)p%h$6Kg~ojA1q8Ku!MdLh)xx#a$K78ETro_n4&FLQi-UzQQ9x%h7@tbcY0LhxhupN z_72n@6Eq%m7tg}7Br`cH47So&|ASGq99>*Wk-5J)bx7TP(c+>NZZ=czmZ1(g!NS9k zqzA$8g<)OY%#!9XS+Ug)sm({|i`!DlSdzbJC2Q;vqv)}PZC=VHH45`(O?3Hj+?Xth z*=*lV72gb(>ucT2pIXbUq_lP}#+pHiE^7sjwl7Ip+DNgi-<2hsCNW`0Ji3%9W7-my znzk=6@Q6cxfW9=y`kIZ^gOxGkaR-Iwi_WA3#c^aK9t6C=W4}%hxD;9*wiYfKmAHFH2BooH<;WSQ;w0J zZl$j)w0(**phop?VzB4#C)&RuI11fCIGN#*tfzh7Vo){3(>?FDvZV6dq;X>!;WpVL zMP21Ll_K>wS=HbwUE>UkfO3Fpba_+oxgmM_is77dC84sc%8%f5Qa&`+ykbTmDvWN~>7ah9D0sEA(-5p2Ld>TCRf^kmA6i45txTTw<)P{1gp4IYnv%?sOOW!Sy;e4^ zd8vpcvB~ik7>z<_g%c+nZ!~Uz|6TUm3_0$ z`tA(-(-t1*-M7zfhe6yk`XLTL-|mT2Pm1Oyn0J>kH;%Xt%BT(Wlx+~zL3}uq+L{;) z#d)jZ=69T7-onO8s%sx#Zf(N zs3U)j5T);9K1-u0U7)d=P-2}jG^6m~_1&U(e;t~q|5@6t>kV9aRH2B!x-!%xhBVJ^ zq@;0*>G7qxi4NaxrJxKUyoToux4zp<5K^p}u!B7uf#?k_JMDE>;MD70M;T(HhRBi^ zrZkxL!CI-1UdFQPDmLm$xwtl5#+YY6<=TMYqkJIPK!~Y1v7pw@`q7j}TsljvVuc@Y zL5L0Y7|mf<8SUQ% zQu@=a7sLr>^ZKT4NgEh@9%F9@RJWfk$hE+cPiVAwPj{;b7(3uhimYym0*w;epY;y; zV-ScD=>}fyzGs$9VfIK!GdB+|JS2@v{74skl`$rQR}pK)K+eOgu|7AqVeQh;PwbFx zr$5>nI{p%*ZG>aF31(}Ayp$&}MPwlkGMU>hXrPPAGAI70HR>x>m~^8feN_|GETy1R zGv?l8&5uI)OV@~v=s5(C8{IsIE3}tFEVC)?Jx*rFL9qo}!wfRuyh4@ST{ozOfH(jd zFn;!eFsh7YK>wTt$eeJ~0)b?I8mkK{zKOYHbchrcyHrEs7^$GT0+#)4Q9QC8LBC{( zXE|j;;FbvlC^K$ZLXj$d{JqzIwqUqx z-I)M)AYJH_Wm|Z6JNa}9cu_d~rG;ZjH7}GU2em3XK_|*uox7_$sZZlUnix^ad{avE z-E1qybMeqsRY#O<`!m}LRq&)vYZg0P{X;V-cnXA!d4t<;Ca-W^>yw$6*d`reC|6m zZYYyC2&-|8k6VooG%KV60Vnk-Usxj2e$qe(g4W)bgc~v|X`bLDjeR3TTCcsIR%f={ zgZcU?;`)i)`5i;VBM#lLsXZc}xb^n5h)0}DYbw*t0!a(nsml46#raG$4JO!JYhDwe zG9)r9%Pt;M*P)-=!mGhW&IfbVU?gIoZ801_QPH7^0B;JnR-<_7$7Z=c&9$zl zklhogjT|-SoVTW3EZXJ@^zH@t3wWP*rE%9-G@(OAHklveOJtFL8U);HP26{ zCV57&=grJH(=m98+DY6t7CHMon zPb*XHCZ77B)4#n);m?xypUm?7qKo{3Xg=e3@_TH&Q|*s%&Coqg4o2*Tf47pvw0j2P ziv#UDrKJbt4S*T)@zoLwV!uCj=GW$xcx;hT4iW?>BZCLMf$5d-+1!?aVy|kiU^U_B zPe1pg7sOJdc9bq=nA&~CqyObV{~7Y)6%U$84YJM*EQ@|S7BjfJTa=x|!06=4bf*-* zTzI?rY>ZKE%eJqBv1fyEj+r4%o;bq(DS6Oz zgf_LZ;tX3s)bHDy-QsM>3wF`s)C%fp82 zu_nGdxHHOM?<%s#BJk^d81(~*P?k^~tVOHm6vxtowzSd=CRKLBYFK@Li#{ccK1gRR zNyID49~b<9ylNT zo-^Z{%OVd-*k*zM{zv)j;eLH2{kQ!n`~TgST+-(II%cA8Xe?-?Z};6LWBw1K+@-u_ zgDUu~6y$5yl&qD6i$SlYv2Ih*Rl#g7A;YA?$kcUbp;64_yhc1BP>ZxzG?N!@wjYeN zD~vN^6;6y!r*6YyI-Sn7^Y%7G5_#M1mzG9~;&t$c%I_uJY zuI)kS3g3JKSznSZ)_PY=iAYJ^F662bsc%RlN+kDdd=Ed=^)Q_!M@9ON{?%5e7HT`` z`_QkD`}|3Ey~y39j{VXh&qCZ;$1~~AfIUNV^Tne>>BjcfCa$R@d29pKB@$fq^LeZq zsI6k??F<1Eb!kyA5or@5p!9J*WD&p0jcC=z12&(IU#S!cncpXYO3K=ghBI z?-#BY3E$5dN@t6dhT5GnqiHI+dnge6g9R*viFd6EyXAl5 z11N6~h-~`h2REHS_=mm~n8k#cjDd;DBT*vbwd5);vF8UK%0e85vLiDwxQZpJ0gM)S z?S>NAFs?wCN@{bRFiKR9L}Xd0+S23AlHyZbq`bg0Fdw(#N&;r{Dux{EU&6EBx{5_K?igIEtlB;TxtVr$}=)qiq;}S!%dz?$4#y8OU)LfE!6)E zy8SAC{}(Z7Fl;|2`8-yOTFldt`OfEswxthmso(^V;6h-IC6tu%r2p#(8gvmo@y0;n zIgF5fy*}T@juh2~`iD>np);MQ)a+?>D~{`R%B)s|*o5cuo*Ju!4d=-|FT36*e#xE*O498@`u6^Bu+%C*hFfKFQ4%O$H7jvWt_K0tni&>V+~D_SMfxj+XcEKV1m;Dw zkem3lW%#mm4hO4=q%mbAT1b0H*-fjz4`Zbr6^68!@>?iDW1cBHW~?+GHLm;>kQ0Ab z8F6B#IQ;#-3y8qFLsiyKEF(QI#;Dm<#i-eHKK5lHuw<(eBTaWG#yyzmk5-((=eT5x z9(NNS%4{v%r|+!#7I2aoGXD7X1IFm-WrX=A&^stnmx{J-=k2SzsSkV79N$`EgxZS? z+1>(|+t}NR_q{)2o_;4X6ST{Ml9lQdo3B=blG4L}=??!?`9S$8v8tXwDY@F5f=k0U zsEXsObca$6!;XXT;07EHh={c>iIA@yrKQW6?jX(M)pi{Bu2;ifkL#oymZ8i+e}R8+ z?3IEMcMxqZFe*l;Pg+Ud10%0s)N!sDsLRJxr>3)bY`5qRgk8yr4I0>cI%-s4xZdKl zJ4RbNnUDW~#(FWof*=As)9ti-_Os({cT}{_-mKcQ4p;tMK{Fh-Pl+Jii-wbS32o&t zpN~#14YGvY9AJU)a25k`|dA(rmF+DKV#HP9;+>UQBY7McBwm<42gl^|n>$Z>hylFWSYB)IklVc&q zCgPEHeTq(cq2Q{RIsTRuAeyktkpz!kYMy65ezY(6FUE6fv2LVS0225C7!MbR@n2w*0A` zXy=)?xFvGS+54y7ljv`V)LgjTq5sboqRDhzxqoS$x@%70a=QytMz^nGvmOI4DIc# zzGaEth5R7&ah>5`8Td+@W4V~x^PpMxQ+auvq6lTznZ*#o77duY2Rd~sTvbwz|2|h5 z`%e-|hJN0|8E!0N1A}-A-_DQge(e|4WN-wISFGl_^9v=5nO@+rKzsLMPbf^BP`TW> zqXX~gRrUzGx1^2M6-U(0)tqu6vRmO^@}Ra(g&9L$@rS{f>_O2^MtxQ1A73ty(@zXtGp#h{#n7l+>ztVVjU2^6J3vgN}F@=5?(?q&0WZ*~FG z5N7WPYzG&-4Sc*Iw!4|Uv^fYTwosdM1g(jblwv52EcrAa(c6TgTnDe9uB;SD1)4_M z*0=Lt>|!g^tPE(`=FgL71v2ixO|N*n)uc<$dH>{lly-LW2WGD*Jn0iwz^Y&KI#Vbh zOhlXdx-cqQIC`(2X~k{E-&RK*yxY;4Ucjs;yy3qF`_yI)4Up0nvecBsdQ zeguPoc1Hh(VI8U8xHl<(Fe#rCB}r{7usStx;um~uEwCZXPW3P%+_n!v40scWxi+6J z&q_zZPnkFo@S$sZJ?9^hMQJ16M|$H$@{RZv49Nvh4i*9LU7j1n4i=FF5DM) z!{Xw|RZ8uQkimg&mBO;R!%sja`LAp&>%r1L*1k6~jD!sz-Kr-db4OSpg33{WT@;RC z7g;?y`Ie_HdxkRnRhf681ZS94 zx1h=NVREc?O^Y_LcWoDlwg;m04S7Et7s6?rROJL7tq?~Fq!Ss!>2&-ojI@4`r?*p` z^`jh_pUQ{-6dj!S4JN|~S=@p!PRO3Z`TJb<2{x&lDe>wF3i5I5SFMQFLaD3$II})uZg1|w8un}M^ z>epIP>8!y5m|*~@V5soHDjQ?hwK$tVQ&Zx;0IFuyi>en3VBND2z1bWpYN1dMx-Wmv zBGQxNzr^O5^z<&HhD^F1rHxNJn+M&T7l-YaOUi#Ax43@D)$jI{IhCRW20nxFal-Sl z=-p+#j{_%O(i45EYIg02GrO8^S5f#miIY1i zDm!I;uH;h>4sLz1Sa-kNKN12`Kg|-$<@PY#KgxN1WD$2#2apbLg(3KrZVmmH%(vJY zSA%SdqmB0K;)#FU)e3z6W{GcZ3}Vk4Vrf_BV&%a8cx-?J)g{f>%n(>Hn~w_FA43zP zD-Mpa7-@7`Wm8f!Bhx=K8DHc=jCbe|_=XKlWd<^eWF};W4ce(^m1BIpV3EL%TsHqGSt*MF;Vvgv*~D|0omMmkl{Hj_y9*{#6+}NzvGfGL3swSBwyV zSRF-NztNPmyTT%uf-_jT2?5-_+S2i?}x>(dylzXgi%HMu|JE!)s=7&xhLr>f~yis)Y@@RGedgK_!0kd&88%)P#Hh+b}o17(iRA ziy4IK0(03-PH_v$F5*l}>mn1$dTZIy4wqoI$r3G+)XH0l&-`s&l=*{^D4i~Ol)Su( zqyobgyfj@A(p45l&S%loNi8j~Wzf0^y|VacD4IUz_NW_+VaVC27$L%$a=MvHy)5=$ zdw+Tz;|C5BNnv+L@q$b3BvvV79QyJOf&{Lmr70=(8TofMsZK4umxTAZc{MvrquzWsj03;8gWi8H0b| zf@ZsS2IE6$i1DsiKwS36;TkbCdR zNbDsz#ECe%1V*zxTo|BN@rvM6vFl1Rz4ro|sRrK^;HvWR<3v?EE??{}EP~HU^^Rd1 z%`bv~KR@E-&Od;^tTl)WBbAxTZUhx>WR2hn^x>GfY#)ZMv^78wjLUp%%f1Ra#{?95N)z>(U)?&d=9 z@APl4xFyI4b@f!cF{+GgnkfgG(^tE zCfU^&@(lAMq&Ol}igtkP1`TFgI@}Z*fQJ2CwGrMi#v{L6LiDN1-{jkrpSF-fx@QxK z_U3hVD+)(yr6`tAo@yIlzC$f%=<@~slugdWH3vIc7geilc)BT?^mbY;FzfTN+P@IY zw{k5!s&$@izXCKPu5(Jjus7PTF7b)sB zHLI;Ub(D#Y`-J&87*SFK_pMUu1G|#w11XXhTiouY)YgPb(pe!h>=xCW{tTFPAU|6K z^&vk?(bUwdE4j13eKb47R(Z)w9$7zVG(|Z?3bCm8Scx8iH77fedux{B-!~o6{7XvD zm$-qvv;%m-8~><4dZx=|_H?q&ELnR%$@tr~wBa??Z8D?T*y5Jy-StZ_HGgfz6~dAi z+jp9B`t#x^{WkA8Vg@X)=p$viUde1oNgYm!dr^+Qk^BOTsRNEDM^6+=#Y~I~fOgpG zBB(22Syge`#bl9heNn81PYMx<3v9Bo%4PW8`dq7|gKGizbnggw(ck6&*Ux*FH`Mt} z#kyYSfp@9LZ^;b>?@mdOrs){uzgoK=IN?B0g@a$iNAtE~^OxZwn>8m?Psfz!uxVnK zNreIdraHtw>Ai~TR(SdZW*cJ>t!<*)oZq&Qra$l)P1LJ~s2x(Oy&_Yut^&|C5xcYr z_Q&h)nJCVn`YIk<;r7VLM{S8mf;Mzhhbp3nE}kzCOI3qVKR{etOS6oB(3L>WLb-*? z@y+1gG8{P9^|s~VcPb$2Qk`s4I!s?VW&=s{=yJPOGgIL@H4`6>SMCr}`48_s$$gn0 zmOxEvCNBL$%9O?#^%sIkzIu`rt_551eZ`so=}F&`Tufc!BMiX{Y=QgJFi&4j$3FF9X#GZBB!H#$}s)eq_h+= zSPwQV!d~IpNC~#IF`wmXo8*#qHhlx)i6Zp$&QyCYQeq4dGEE2;{=B`JGC)EN4}Vt z;cUGvA!YHK&^FN*%dz;_ z*AKlWsW9VmgL1FhagH6YyBdw0Yl0ujdG*(FPb=PkvsicDjvps)eE)qw3%~%mj1;Hx zkd_!SmK-$tbh@;gZo`9};a(h0t*mXxo|(H|7li~5Ofe%c`C4v+gBfu=NQrf>t6*{3 z{C!(kMtW_Sol?R0l{VEYHX}ukXKcS-ub3*mrs9y=(7Uzbynswj$!#a(jvf2&LMgup zMM(_OwBd~!8VN2taz>`Rz5=K5v%-ekQ zI3rvnuYjw2-Aklg8Zr2fEf%IwUtchFnUYEx7xn zkmuWp&+QwijYtk&&B>zm%;jSLNi7qI8-$c^?zJmHN?W&~)ETupXr-hCbzY~xrqt17 zJaiDNGPlpEX{bd|J(s3@m4q)Wt+OjJDUo1sFXHDpibrH?j(M9#<}o^H?bEe)6VVsW zC-4YTu~B!E;*NkGO=-D~vsBfu=m%xbE$X@I#btwM@SidD+H~rGHhB->uY)ff}tFCT;2|6j1`+Y#M-NGD&0_Ti} zhzkG*(6gPHeg32_HC&(b(|=v9+IP>FED^LPkKwiI3}VJ(Eck7RFS`F>WH_hjwXaqs z?lG*fm8-&f!|d8)OlU367V=Qi>U}tmKp*O137}A9P>jUi>B4;<-@>H)X+P|QUiTJz zFc;tYVFkd>b9MZw^sV?ZJ^v3rr^E%PFx3ZEm@Q{O^mGTV)hI3}rw_}1Z5Ja7my8%8 zAq7%WE)Y%fV~Ol58JzO0Am3M6vfI*aY1h(iYZuRLVHfDOvCH%QLt*47-F}68GHUKH zrBOUDTB(dhy?M>i`ZFne`7I(9H)`TG48LNHv#rxZO_DpE)Ww1SliD`#f7*|g@P)ge zbgINaig%B?+;^?D`V^~x0(it0X4HW?O_%sd z^y}`|7M1)tQomFfMtlKlrg+ZNZ@(wQxF>_KC;c=8{fO)#c%D$24nKC6xwxOi0m6?@ zpCCV#AoDYlm<2>t%!;Ku!bR6JnWb0`ik7|!--fkEc7_wUu; z1jpazm)jYZ*>2Y0%J=-erea*p#~AXjWQ5G8h8e53+ltAlcFTbuuZ9-JK^;#0%++WA zlpS#nZX&h`pGC}4Gg9r8fUFXz=l$gE6ge$}=xRy?q${$M>F6diHQ#}V>AG&Z;1iNt5bM8U$6VIAEz9!aFN zZ=eX27oAFmt+HkP6QFtIK9W|u5_};0RUl*UwWSF(JjGBea1K2izZ7po=KuzssrNq# zVJ8X$_BJhN1(+^5p$kVUOVmC&Ymf2^ZcU%b@zp(x?BU75uohmCSs@uv9H8=;qWO## zuoVn2OXgppHNhOslbHVugJRpzd{e`rxV_NNaYxzDVS_dKVT z9cAPNrCS@`2FF||H~BZaVYtologG;B(jCnQbe83qEO~R-9@L@48NDzWgG|{Y-&`+A zEQMSWDV2V@soyaSdxjZ9sx$|XQwJ3EzXMZ{=PPhDcZ$26vI^;5k&-&r;@$L95H#WQRV z^=EFjpvT_mpW^)YB|0KrPSWQN0z&!)0z&n_TB841k(b`4zcEBtZr98^UQ7}7hZ|i)Z)%`~ z4+gibV}EY@{XZlb-CmWG?%5z_6#PwPzp}6l-qc`oUhc78Ba=Q7#`K==)n6-;?lZ7Z z-!76qLZA$7m5y4d+%_h5_HI0)t-c5$Zj|GZWWMsS=3m8C9t|VBh3e#~pK*rxN>;HJ zUsJ(-M0Zyf*E!I=r2Aaaz2y6lR1U>0UMLy=rQhT#ehHcPWPEUd`n=S;e;~nr749;^ zeii3p(8BcQ_vd04V2{i}3o=Xk=l2%&=EEZmb)rY+r^(itMGPs>r5Nx<3@Os(NPNIS zlKA(EjNfMF;}J(U%Ajviw?UCpx{J!kUt&;`ETO+ENHN0B=MQ%0b0n|Nz@M*cSkLD9)!ouhNCV~j0vSu0zQD92y1*3AwrFQ6? zm0+J3WQs6$XW|U&4TM=tcA&=Q=ub8tR&NBSaawtBDH?yS~l*lrS3tdIwt&Ol%T181gR1_3_vH8B9h?CmO0TadF8FJSHzEKM7PstxLYghp0EU6KZV~R~UYx#ek~Sr>K=!(1 z(2z<)u&*wSKBi&t?vc+w0FC;MEW$W#--wY{?sR9OMa!UwTrM27Bx0d7a=~6UoRt?_ z1=WqhepVAbOBOpv80SREE=N6!k>Qr)TlTM)A%E9^#x-1An}*>5H*n~vSmP+zb;tq< zQr&GZd7sAOzyfy*7k5Fc+y`N(x@eahwz^~&64r)I6t2rQ|C~eF4$k@hCz6W;?a-IB zd5hwu3ymujgsYMr)}DO}^|JdOM_mrARc=x=x>f!zA?$V0E*~sF*^VCqD0Anxg1j#X zN|>L4q+FY<)fE7`wMClrPBql5XvG5&t9Z)^A+K;t1|hF_`(IQ2mJVV@@s<~YF>PPe zqerA~0=-kHuL8YOtnUK7Q?M@+y;F41GtY#&RJsWYNsU~Y>I{YU5N9v#jy zmGtfr?Os}CWUG8_I?kuk&6q46PkHnup_)!e{yqU;7&2Mt(m*vT#*hj|Wlbch=I@Um zRFE1-&lR*SEb9&uqhq2J2&I&a4;zBw7DtZsJg&`!4-<0%pD3=tgeu4tVNf9J9)>lR zEZ&O^JFMiFe~tsxOZKccYImQ^84PUN$#{1nXu*f4Fa%1f;?)D#!+1r(RoE&MoC%%F=t z2&AYpb2!qKzF^te+Ege%!U;lAP2{PmGPP9X&U~?v4+^njXgS$5{GBym2%d2Y#mxIM5fOuKbtZhQ9ihQaP+hz$qzrSg zTy!X;h;g!90KrfLgQzpsn}=+L4)B30S^#IMzRQ3C3i-UO8rN}ZTE^wWe>5Wgb?%~~ z#))vln8z53!>M`h=}HQGO=La4@r!))1(FiE2{&+rCI5uNrX-)pQoAbilQzStxi0V_ z*h?zvhf~Z@=50?cguQ79x>~k7_wJV9L z2mRHJB=ks=nH734oykIO3z?GF`68SMDEiIolEm+MNhIZKd-B+q^mRRbmhrx`#^p^_ z)YIko_eav#^7I*$(%(!JvX!&;6^`|ib3Q%WKjlE5D%lC+Bjrt$u6D1G1?LOK zo2+W_N2N?%W}TLMgLjp!VYn-0_K=wZ0ehU%T>O=0o82}A15M7mHROum)|+%>uqnDU zB`Iq8&_S890Y&-X3>qpyu~Ggc)Iad#m>9bO&ZvK&>onYT_2W%^rF?iNC5zHR;EIXl zAGQsNFmCCi1sAIv(*f!VcIoWPKh3KMzKgaWzfVzyxW%+!9EEa!wKdmrx{#mrK= zO^($9Sy4z>C44RHaLfYj0tkD4dvm*a(huIQe{5jjbqEaGOo6SB(JRV4Rrz`CB%{7n@6%gw7kjJG4D&To*DD|!7OPkPLP~d5h6AF3`RqwX)MYsU3+1P*lIOM$e=*>Bjwj3p11S+1$L{MdV6GAioM+*B@NXDQv!EQHH z0gORVX~VcNWZ@Me@nOpFc)Ledz-PN3-u?Lph}Ij5A)}KUL%F#i5wD`RYv>=^Kf+aK zYQx{UAq*>*@ypc2&Z1g>I>WVL0haJ$c$v6nT#ITDcB27CS=5ReTES#j8Rtx_9dHR9 z^0k~Owrbr!$~r{){jLQsr9q=*{mXY(6%cRBdwJop0BQx(1C$;)nH3F@#hC0ev98~>OYWsc%zadS-FTo+9dY7vc!_xDDe-CYX-g^rwH*=&)D}-h6}U1LRl?ycE&1c=b$cD@bzz9bL@?!8P(mKTYJU^XhtDY%r)2$y zevrg*)ilqh%dyuqdvV>BR1&vIqk@-3CjvF+u&L}1^A2>Mw=p2SOW~gjGiY#+p=y0D zJI}S8#8XMh%k7`->|BgRm5)G0^7G8^H3rA%k)@b2aZ`8*C?Eq`c?M}5m>$lP4?!_g zmQ}|>@2=iF&}dsx7n7>hx@N}Y($in7db`bD$_z61?<(;fuiV+;zXDhuodU-M{p7izYBAV z6({VyMA4&Gp5WFgw4M++OG7A(+;lfOv2ob`q?E-BGa#C6MRdhFwyso+oaLJkF5#PL z$StedU-QoWjp)V$3Fy$evrD# zwr-7om-@r{Xj`{#U!AXyLt3@wwdUKSC;^cM^D3&|omc2kb5o8Na12xq^3Oef9W+{_ zViYDf&v}g!XZ#r^N~FsW%D$9i!-V9LQWpdaQ{byDxR6$no)C1j=IbkF;y2`%TX^Z9 zRa>(E)Dv;u7J1Hrl)eZrb9NsW1n3rDC`OB+@)_Ce&(8jRMC|}q<*5*t8ZlTfw5v{0 zV{6qJeH5BXix^i5v>=S|jTj^~Tv?)niK?)K#-hxGk``}sXUK4VIA%X*KNJ~{>mFQF zjrs2B6olt1S6F5u_E)FQ5~9h)WwLQXW#%Wa5r{C3z(7~`KYEeSR8-knL?O+C9+*KW zC85Mul4Bs)BvVZ~RAP@`rRcUcI12~fo%7W}CPyGFrAJMwbVW_}$5ae~S3tl~{1%eP zkSi^%Dkru-76iqbb_%;(DmJj=vdGQFR1fazrM^0LE1xr;?GKNV7^#0kQ-)Glw!rw+ zoZk(Ki?vZ*#U41i=6BV&{%-*NHa~ zqL)M9xb6opD#CI~GdC0UUw<1U9vc-kdx0YHSaj&Fbs?;Ni;`o`s?Tk2X0TG7J%w@^ z>b78&o=a;kY_D#cQx%A6Enh$gbWQ=r-?$_*N?mA> zQGq|1A&jn7aWGdH_9!a-BvX=5Nj%%5kphe8km^JvlNbMmL$!{eg!WVj>eX~gOAm9} zJ&s2s@%liq{;VJEh;Uk`3}%>dGPUq!$40D;Sz2RP=R zCA-897CAeLSB;aRmTr53uhax#ojs4DqX$obGE)2*R4c#Os-88lMS|`ijNc(otk@)) z-9)J>i2WOMO(W?Zm!*p7{>xGNISXwNd;k z__e4srZTVCck+rr`j{bM5T4Ev0kRQ2Rc!_G6WZ2K%h{g_;nZaexNMWEdoLOTupIp( z?PC({a~A?}IJ=@yni8ie>!qSx6v=j)>TfYdL?8Y9$I(Z!ScWraz72~nwzw{ab1nlb z0o_E$Q90*WnkVhljV0S=4K;fc0atTN163oU|4&x?n8#hmH-JFx?+54H9;~9Vn}nA8V1zIRKv0D`74c`BOCefc zW6;-JLN3JYpXRfOaz7hYUNu~O;I&9f&eSL!o;5>|_&d}jCMlA-AA{_5238u)Ge*4p#A>LS@ zMVGGjCzuzl;$5}I($mwf$U?R3W`oDF{{24q4&#s&o!J=reKJtZtg6lPg~OiBGkOWD zblF+)mV3&8uJq}qM_8EG2v4iuVvz;&>$`tWH1_H;yh(7TE0l}DGw_7_bNh5KDar(8 zRo5|TfC{pn2I)2|GizGp%qU4O3?1AoO;FrzD%E}x8nu4aY+`beE$z%Z>1i}q zrBEwyDqrvG=~gq4t`MHM{S$z8=2;PpzzQB;B=c@Z^*4{u0+#%#Q>NT^8N2B0=HsoT zE*WssKqBy6SkRnrl{qV1iC+_YoPH))rNbGkIi!Bq zHVyD8<_(foyZ{115#sTkHw<>pR}=0B=rVhtoYC9j7Zd<*WO$=8E`Sr$R-i}c@*{sh zXM?k*THijmFD20^o;uQ6lSJBjIs56f(}G8SIVsWFo$7rqMcD|4gm}XG*mTQ^E17)# z8=0OrX;{NomTNe2a!;c-9Zhe}B1dY`1eIp{-NS(YzIG37@lWCa6*!&ZXr<{dJJGh9 zU1_xHiBSYWl_rk!a0Hr3pC5xq#TheIx26{HD;ABYVof`f949r+A&(ww3>U~yJZ#Bz zpHS1KXgt9k&iaD2oFc9Wg-}12BCC>@t|dd9lu~PvX{=~PePKCaoYaxkTR_bj5`ck@ zPaE5Cbm!GZFCRy_eoy9JPp@vE-yGo}pJ!2`bjcQxEmy~SnBL4AN#Ag^b~!TLMrR;q z2ij^r;kc^U%==vuHU41b-rd=ogtdN8;%=Ww%x&49l1lV2Dy`W~&Dd~sta_&nmc2-dvdVv zy|plYDxEMY%_a^zz~$KocFv{HgLez!e5Ys-Jy%jV#xkv+DfFN8Tr%lxQ5-2RSIyrZ} zaMPPf0fv9`B5iF24DB3el44iy72Bp#HjWINy|nrCCn%4Uo4vH=yLjY9l`|Gdi+H8` z95wv%q@9>+*7QnlIHz=W!HXKGad%=)H|0L6EKBB!>1$K)C zd1eQ29A*}KO{CaPxJrz7Sw1wpaRFuy46WXBympd)uHFmNyvB`DG;_MtLPaSh^stfxN5X zviiZ`(?ahX-?M(t@zz2AFLzh|EtURXN>wu`Ec}qw(9w;xNTOr=Z(4s#dCAJ5mAfav zPQPu-8^MPhklJ|N3v9=XR@&X_NL8`9UbV5xK&7(Ei)LEwj;2p7eB8FeCTUscsa7@N z+`Pgl*`Put*rV0-q=T;cylCF4spj0e;*)Aw{HaNmzp1BcUey<9Tq*-JF0%q6D1ceB zhf(bDb+4%fF2zk_c-gHC9YgK$mgb#<00~MRtbC}Y*_N1q1civ#SAAMdXAdLwEBOVF7+Aq}}=<%-R?RfuO^mBi?(Ik<)ubu>F_5EfZg z!xb=q4gY|MPr1I}@>w;sB{J>TNW2py0ZJ>7b~XQTTp&i-{`6IxOUJKf8pR?i9O_n} zZ1Yl{MMTv&6_vWOHG4Ew=4{_|bX9T1fEBy&RO1qzb8A(Mg7~^cbB19BEPHBz6i~Gc z1mZyfaN7sa8&cn}=+^pOVbL_J7Ku*Mp|PiMvDnvKUIH1TG};r5eLL}bR4la5UO^5} z-xQJiqt#K`Y-4Vn!KW@eA!=__M3A7S7p@4T7Zt2dDLZQB)*=Xe+!_N}4@Q{bvx|oib?E^@zg&iAgTtTl{1PfKYL%lDkjeIk=Mk>%`ob#*XlqfeWinxc= zO3D|koZGnv)J##0rl}qij=F8b0TPv_Q808ka#k4T8Z`RLwoqbN~ zD@1-G&$ZVrL7WQ#bqX1pm&nhRfI7tt9J{^LXt2^!3&kl%(Toz`$-tt*S|cwTEgkx{ zGxJt$O!XC#y7KuHH4b_Sxa`~vi{vV`0^{83+##=`_Hi}!f+SVTRZGahU>K%h`%tSU z%qo6ogmYMTJSjAH4Cec$!lY`Ym9=vZ7QMetg2zYzB1fd_o}M-XpWj-!eQj~*1l-F` z028zY9$q5pn^Oak5m&;>;`YD!y{PR)^XX}SRJIChTGb$i*=EE^>AX3yH-?wym=?J>UxRsGcscuC;xBt1+s=CTo3_fxfxTJE97Q&FQL2-J_(y z*?kArhjn&2Pq@NI^FV8rt8S-maItSUDk3gWo5o z&i@BnK%~ENQ&m*e(V-Pxe3=wj-hQoxc1q}ujC*P#YLTNHOd`H^a6W%1Xm=|mL0=(2 z$04tlE;|KJ)39W5#j*jJV2u#ayK^=QU;OS&!#Og= zm6(Wf<$?em8-y+l8!&FS@~YGB+g?154Gpu*y~7+HxO>sFvu%<#2t~VJHaLj}9JYIb z+7-pq(R9)(X@3LT<6fhpE74K&=(w@Sz3zj0D>yQfE@EooNSvt;C0&^mukWg%JB#IT zfs+;N6fbdRw!XP3lZq4p?!B80!1b z-8z!0giOa7(;S>o_BA@f087TvT4-*d1FO)INTkEz2wmu&gmh+3wY^Hz_7F1SHd;bN zGR?X3VcR~zOJouK71l063F$6xQ6C5_q7ij;)q_qm^d&=ga^mVM%R<)^T=}FwWsBI# zRyFSBx%AE!wfhCj)TU~bN7W=xiAs)In;g2I-LE4?=twS``plLr*=`+F(ep(&Jsa|x zoXdt|>BzTvZtzouZp5G+wW})X>-9a$tS(^^x ztN-_}aP6UG89)ca>C5@xvhLr+*zxAV$m*j>?}CcP^16BwIR@;vdqsg{O^RGw?Y^{% zX>6AeA55SY8tQ8Fz23}DN3m1k;hnqBI~OKf9S1TU-OXVC4|epq**~Ol=-STz?wz>) zT{;XLtR<1BsxCB}w{z&wo;~sFR)nEp=(Pd4+|I9*XU1>T)(7hZ(afH z{L)6}h*lrfjP^OMGWHtP!0X{Zum&Fd;vOR3+l++5cSQC3!LvQ zj;4#fj_Q5Vcl?2%+X{?fQXPh>DkXPt_*k{0uy)w*>J*O~93-sO7m=NrG0v*YY{Qn_IovwC6 z(!I+%F^%oU)e%uUkYWF9{^%ZWm*=mGJ#{>Psv$6MJh`xwJO4r@Fz=rYgW4{mw&(7; z?Y%=Z>McLu+@hZsCf=d{qj7aiv~Keq`5ts5LZ9s}>%alr3$ncPjj`|@dc9Xr)>PMk zW=yE2{-ue3y6x3QrFC=nP<9&f{JkVYcRxZxfmZ&WqR?fg+C2*0gFDhY;V|_dxL953 z(bxX6I@(aRfu&{jfy!$7vf$V~*)r@~`3ddb5dUo` z?W?T|9n-jXE(UevH}3j`*;5&ulU+Fk|I-fxyD}a{KOs^#uigG`2crn>!+M<>j^|al zhu+MtHjb1=R&drPE2>`GOC* zo%PK@w{zki*i5^0L}}Bc@Sio-AvNT3>F6^U5*gTa4=v-aA6tUzruIzePQ z_RKoo15+B4Dt(5$cYGCZqhm2?6JqYaYe75qfXDgGBHdx--ts4R*<66&u$Gb zeN+`_BQ=rj51x`C4sHM(^Ys8~!0);nPMCtrG`cUY9#j-#8r!3$=jI%{c) z_Q2^5>s$R3koEd^w}Rgu@8WlQB8W3zpB;5}?W1i$=h~c0&VPOi64@vr@33CyJl(-Z z(lO4h9b8PV8Pd1&W4bm=qDR}irjd6pPwM=aDu!6Z(#N=)yf0{d1A} zLx!&Wve(Rx$C%K8WW_1aGPuUQM(tkLaOFhz$g{Jiy1d$|$?gwAm3F}!-U9_ajc&5y zT5f-X!fc{T%XFx0yI-RRkDiscvVHWsmxg5>0S3NP zGd6;eaUZZ5zQm2d*MmSn&e#ZQJ(zdus-rQC$Kn77WB4G%!4r^Tq_IOV#daEDd29^6 zy=*MYcRQE}T<7)Zxe2V*5PKhZW?^d+-3kZH|s6j;qjC&&*ienSph6;CXNMbwDJ$*%;HS|E6 zh9@vPxgKKfgIJsi zU)BbQ^NUsB$>JLzzBnUmJtW{PCC!AliJ;ZuQqT*hh+MX>C zl|e-|LNeursXhd;02Hgzcm{mNOW;QlnQXiUX($SZ8E?U8;~mIHF*m_@4FXQ zxF6u)=gv6AXxSM$R)PzS=~yY7OtXryLvb-8tFbAp%pKz_EJJzzOv2~}FgHQUbc$we zg4FhG@i|y13vJ_T-Fcc*G1R%A6|i#Mxt~qN7|tl0#-_U+HDJetY>(`Sjxw_dND`Z1 zpZ0zIgnjM6zJ84uXpc}|J=kGvhRc>S*(^QK9=d<7W7NOE_6`rNv74|Am71J^Q__oO z;Xz0%qV93x_FWIX-ROSnp^qEwyB_-CYyZ`HVq-Qy`YN12XHxrTU=Ge{a(G#0fEV%p z8zgoU%@|_AVLv8d0Lt3~nS#+MXUC%~EoHVIQ#S`6cTCYRmL0*4#4$1Y)fNY9_7sjA zM{aD!t}^k-%E;UZ*%%o>c&vlotHG1u8?_MzI`E(^_#V6l_M_KktJqEDS)39!!4N&Q z>tPVS#ReF<8e%8~Es_ITkk8j?rlpMg;Xq7tfSh7v`eFDSv>Fb;*TE0MfhG9P%@I!f z2l&O1ZDH2Y3E5>>Vt7mIlbA9h+|9@q2Zwbql29GtpgLl+>7qK)L3KnJ)sgrfwJKO^ zG}RjA)Ec$f>((0W)EX78HQF5uF2_UGL!Jv^(LCohW{&e7J7+!QhszeMhjC$O{Cb!W zh6>li#4t2zJrsqZ;`LC1F>?cyu7Wr>9ihqV;m|OL+z9H~p`)WW40&HO0DxTZ- z8tfr95FSU(@+KP$AE3ti5w+AGEXRmLP1J+s8vWS_V=x^AUS5{3Z5hV5-CD!Ji#wFz^q&qj2@nACJDdH&Pq~A<~?wP zfU=bm$Njt`Sl7dm;el%{gA-=qR7JBz$a*!7Gq88E&1ziDK!j>XoQcwuivt?Q| zFAoYiWG=3WHVj4T?2##m`J6S7m2w57J8QJ!N=NLbtcQvW4CZ9`KG_I!Gg9I!kJ|`U z;Q{t0T4M8(EyuwfjVK?3vwAF~v*S<-ACGf(Vua=z7Sble*wLClB@XBqM4sko1=e%W zI|NIUq_*#a0BQMo8)5zfZA}SwN`yqWL+#pbyNrGb%W2JAf`p3#5JRw~1tT%2E=ln?o&;nb0{=^M zyYt4r`M3Bk#(Gq)8lU&^sl|RS$M;fv55@O#%s&F(D_rOfD>H!M1(KI z_et*iWPB6;E8YAv@LiROT4bTt772cg#-qk1o>ps7FZjOli;b|T1)}{@tkGKJ0W8>S zH5y62uXSDq1~nPJKWNes`I;8?CF#M%+1uC$8E9-}XK#Sol9tvVGP02dbs3WMp;PeT z423`oyBBq4eU8YK)c;X#ZSb|N?R(7Wj>3i(cB(Gsv`J+igvMNvB(_0$5;oH0t6PI+ zT@sdUet;5|iPo z$TL#n;Ka3H`TlGH88HXO{7j9#rob^dQWIEZ_H*D-9CN2GG!1gCBx{?t!B%7> zSsUTl0Xd!wzv=h*J=`y;`f)^@<8wVpo=`cDF6X6kUcXnkDrcGkr0{ zaT5DIAy?_%gEYi~C+ZnKDZ_UVO^#m%9fXZ=vNJX~E0O@d!BmXIk|S{3GV`4>z9G6# z&BEnD#_E=lEvTv);zT$o!}kReuLTpFdStb=z`j8$2U~HAdkAi(m9TP^vnWDx4*kh< zF+3CH+*#=SoDE;G^HJYlU>IzbVY1amEW5&pXIG-$zsg8qHyHb|8;wlXVhmz889D4` zV>r9j7{%5ZW7&FRJlkLtv5m%|Y?D#WHXAe9{l;vz#i(Kr81vb~Mh)9))UoYGGkeTf z!5%kGWKS5UuqTZ(*;B@O>}lgd_KdNbJ!`CG&!Y|Tl5rDz&A5%dZfs<4px%Gm*v8&5 zo@VbFFR}NG*V+5VJM07FWA>r(CHu(uj(uwU!9GKA`zDKKU$6xBCF{YyX36Y3md3tk z`>`D?i~YieuwU81>^C-w{eiNzl}$u}d?;tEoGW$&H(7vt*a9BI7V}uv#C>c9k7FnD zcy|WlBJ;2l0!@LiBjQ3^F@qX+Tp3dIk z8SEpT$v)#*>}#IQe&7Sx&wLR3lMm(wAHrk!0X&r-#QX4rd4HbEbNC2e!1H)9AH&Od zKA*-X@FRF35Acb65ue2Cc@bZNxhr@HKZ%#})A?k6DL<57fu*m;(%13n{APX_zn#zE z_wt$i0X~aA%#Y;T`E33IpTl3~mHZ7}#oxgeKjQQF=X^f@hA-gX^J@MJ_V7Ee<*mF< zNM0{2-Xvmpv*^K>h*Z8*r17IgKYpyp=EsS_`~tOa z2V-Yo%*!5wv)GxsmFM7Ob{6%s8!Kd zvu2YH9z{Ahmvqz09GQ9x*)YSjAp>aZf<%2LChmo&rtQO?k4PVY&l(s0&dF0*_>6bn z=EAm5uuby}C!g@8Czy_w3#iBN`6Zl3kGa%+7P|0S=Mm@QIP;x1^=%>%tn~0>KHT<+ zY_p?>UA+4;?H~S%`##Zm)JW&i?Un3#d+i^hb63mCH?hyh-8uQrP0Mdb%N@IE<8~}F z$gz7IV_lIeVruTb?AYS$+sedo|3DQM3TAzwPBKQlv2oG zAYEBYR>XT`2nf_rbuDtKTe&XPx6fLLc59JZA$5H!&r!PCj9ft~+R0t1&~f-O)92+I z;ItgmZ?1v?8NM%F1#6Oa)UAb;WmqS+KvJr&?^>`CfmNVI;w!Vv-G_a!ifR8IE1G6D2}q&{n~j zEn=aQp^_B6%wQMPu$AEpx0IyZdX(eIuqeZi;hAV7tcR5uNoKHJk8U^KZ7JBVZ(oX? zuo2E`;XB&pxqYUF3arUMX zh&RqAre|v*A;b5BQ&le_wB~#{#Bk@h_@`-?A~7R1)0u6j7~>h4w7AY~F@D30^A1)$ z)VVp9-#V>_x@Swuh>Vx%^7B7kzqSVUphxxOg&rPiYfzgx|WzZ>t0GZXdKQW~%GmK^K;8wZ&tPYjJ!)!C47Nf9j z@wR*wUM}Ikf{~^!c>>QamTP(pQ>BXvJ)A{o0jG8NzQ?=~gE?7I~0uo(#$p zNAzUqx=z*;RP*8%WS+=%88p_>fu(K5m5z9y9x~YZC-57FE75Q{1)}(=5XVnrbNE?o zK0li^@N?NQ{5*C%zkr>_FJx!)i_u`coL$OSv8(xNb{)Tx-N@InTlqEYZhkEqt=F*! z`St8kegk`o-^iZjXmayg*qi)z_8z~3eaJVk&-q679pA)$+lr7tx4) zi8u0B`7!);ej1vi=kvGuMf?N4nt#aGpjmo7|CryxKjHWAPqBy3u;tIOl`r_S{7e1{ z|C+yxChN!iJIwisf6IU7JMiCM{1?IbufoHBL!tHpt04YqWx7%pxWBgAdk;+@ug(-3)cIngx>RgZ*NA&mi?~nS zAvUYK#r^6Yu|+)~9#jvDhtw0|VfBJ|M7=7usW-$E>ND}A`bIpZeiKidhIqzQ;yKeJ zUNXCjm(6{|D`sEus+lETGlz-S&C%jbbBuV`oGjimr;GQ^BgF@1KzwM{i;v9Z;uCX) z_{Ka@d~2R6zBA7dKbaSapUum~4)Y4}yLqkn!@NcOY2GgWHt&+myhn0#vsC6*X`0VV z%X~@3ns3WE^F5hhekv2qFQni6UUoBg$nNG}vWF#QPs@_MtZ12LCCYuRp0c;qOYUd& zm3^#%vadBv?r-JFEGtiDTjS&at56QMO65>%raZtpQs$6zWh{g~Y(DhW&Xr;f(34%p zjzrhyQi#@WjAFN()@_ z+mOy~(6RTBE_Ct6wEChm*+OaLh6Nosj5!V*#ct9LoU~?YSB^uJRjyq*0dZCdyIJo$ zGx|Mw$Eh>MU>Q14I9qS5(w-_nle3Wu`{F~Jr~A3@ezaLkO0guv_kA{LaH$o+6uloC z-to&7DZYKtrgHR}%iMBaFB8Yq{~r| zEf0YMWF8zW$G`|V4)Wx97%wM4u`Gl#IT2>cB0%{8^JNJvl%;T#JQSA7GB{dJhZE!s zI91Msv*Z!lou2?EWTUHnp+2CQiF79(kbtdg=bS?^WV8Qh+97>H+tX*WTitE%(_D9% z(eLiNM~??!Jrn7wGJVmgibrK3S#yM65MjS_Hl#IOPjKnl;?gzX(s(dFdHB5C)E-BP|^9ePJ(Ezcr%UAp_L)JCmi-1vTROg1WuGr4my zG82_EK|5%IQp4MQecF`H@ckUj52^O>OkN0maPSpi%DE6NE8!3sfD$ebnq)1`SRI@s>)|wc6r3#^;5^w3m&he>rCbU(%4KkyTn=~3qhW(Q7BYHo{%TN^YTP^Rh|TI$&=xIxe`8-r@LQixDkAgoPf=^Hl4I5P*PQqjDat(#vM8hXFqg^ zr-Ew}W3&z#az`t>Q?Jcv_>JAA4+RG@-cdw#mJSZzR~DU@Enmvz8E^5 zD}~|sWU8h0`xfY%>N{jDBxU++ZO~nU|I?Y@mK+h@5A}WM>|oP^&DsXjG+Qdaii3;D zUZ#n3=5V`Sll>{@;4bWUtWmIHneH21JXZE;KMts2b{nZ78E#ijT^p}U>T^U>Pe zOLdQWwJTxL2rkR;y-$YiqKHhTGo{Wv#IZP88<}tmWFRM@9Fv!UB`=2SyC$z}B;8uAz+%DI_dUR&DB3_Rn4WE&lkkjsgH{`wWp}Y^i zl=s6oatm_U11K0CG%WeB5iPfdI4lw6_Bzcaai|;C>p4fs>&E87M9l{Z-henq55QLB zunnv)rv2ikDdLF`U&Vy@D#qn2X?R?jKMA(FEnCQS8|i2dX}5{p;~vc&>fT<7%~X1> zE-%i)aV-pA^zqVpn%oW^`B=osUu;MO#=4z*P#NE=J7@H#Ox)%_!0t$7&P4`ZH8O>* z0hw|u&gyEqldxhN*mPF8V#`{6GP`0s9cHC%_O6E&4i~K0A{T7-(!GEcJe#M`<%Dd^ z%t#S)*28K_PGO~)DI4I5lrYAlAQmxx8kyo5@XBYwmd_(oya4;k7g2G%1cT(uFjT&R zOz|pAkguV_coRj>TQEz$19RlNdXyQ6^+;UebP`YFof{hOT&)mDofOT!%8jbw!U2rY__!6!e3MEN=FBfp3sb+1s@z1*%9 zB!#-(65NtCirs_oOLW(xhmOaP#o9ZQ87Z_&vktD*>+Py- z5UqEXuEJRvN^d6@e0!&P+HLOD1qQMt5qui{B2_bZy1Bohl{_!Ujfm6YXIsi*kT zmiy%?Cr%CzxC9b#z~A72zlC`D9rTnxKpGlW`^%poL;j4jvjYy4zrb+$D-_A!aH;-| zGxG-=DgT6O`4=paf5Qr8z)Hp7VkI=8=y<&v5^%QCak&fvI(Z@EW;o1X4?4>QE(wwG z5|@k=dq|T}!FigX9D2er>|s|7Zw=is*zPED7|Tb{wX-X)g&Z1S^1!?_U)nLJ=ZLh^ zb4Vet@QVQ?N!eO=chWgyyLzQzw6s2!!I3awLJXioY-NF0c_2=Cp@)is6lFtS6%Cmx z76zi&9ftWMRRWAriF%-;wAARw9$}9n+C7jXHfv;4Aen8`Lnf54x*9y4P;* zg|+Z?wkLJ3jQ%i@+r#JX1(}MJ6T^*XRqr8~-GF(*f)re3rLG92S-&35O~(S5LX z#zweiJ*;ul{Q||ywS1I&4~(>_U!?l1qc13@n3$7#L3z6iA}Sq(%7A#4iRflQs>+7_ z)c`n94Z?{W4Ebs(6srSZx;hZ%sGQKmBBG(;RJg;Tm_tN?^5$7h#O|mfp3~D_42i6s z&DA3P`4C}?-Ftd*$(ta0b$C`!Zcou%h*HDBr$$6jG%kdKb2pSI`a-DbL)|&^C+oYR zZqsqldRzz1AA-$~fkZVnqWQ?XjuYJGUko*Wsmqc>lH*$8xK*K>3`F>1hfT9kDtX9| zy{WYdYzOHIOMRSX%b1O}_p2(}HKd|^!AuSfN~ zkESVuBowm`x@`M$2*(?+9@QL~9DjYsD9SlmTdqeWrHiD`T5&;n7UHSVm2J`Ohl&$a z8Ir0TSJhOM0@EN(O^1GJ1`JR$k!fbZ2z7V_$|FN4k91K^fD9Mq9_SqgQGO+a@?9>< z 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�Qu{R%p=FsNg>|VcjiLriSlFP*Ei}ey^CMY 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≠~4lad5dSTig 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

}=Snd;H#JggEM%V}{pir6U*mroI(i#2Eg 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

uV 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 z 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℞7U4etLYpfSi8S{t;R}`VBTgH#Z9rV$ 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%0AQ*-S?JMQp0A|{yn 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ð8YOVE$r*JuWuADXzbk>iak~ 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%0D~{^xD3~PjH(T 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�z^ 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¶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.2,<2.4" + }, + "require-dev": { + "alcaeus/mongo-php-adapter": "^1.1", + "cache/integration-tests": "dev-master", + "doctrine/coding-standard": "^9", + "mongodb/mongodb": "^1.1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "predis/predis": "~1.0", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" + }, + "suggest": { + "alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", + "keywords": [ + "abstraction", + "apcu", + "cache", + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" + ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/1.13.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "type": "tidelift" + } + ], + "time": "2022-05-20T20:06:54+00:00" + }, + { + "name": "firebase/php-jwt", + "version": "v6.5.0", + "source": { + "type": "git", + "url": "https://github.com/firebase/php-jwt.git", + "reference": "e94e7353302b0c11ec3cfff7180cd0b1743975d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/e94e7353302b0c11ec3cfff7180cd0b1743975d2", + "reference": "e94e7353302b0c11ec3cfff7180cd0b1743975d2", + "shasum": "" + }, + "require": { + "php": "^7.4||^8.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^6.5||^7.4", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "psr/cache": "^1.0||^2.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0" + }, + "suggest": { + "ext-sodium": "Support EdDSA (Ed25519) signatures", + "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" + }, + "type": "library", + "autoload": { + "psr-4": { + "Firebase\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } + ], + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt", + "keywords": [ + "jwt", + "php" + ], + "support": { + "issues": "https://github.com/firebase/php-jwt/issues", + "source": "https://github.com/firebase/php-jwt/tree/v6.5.0" + }, + "time": "2023-05-12T15:47:07+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.5.5", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.6.1", + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.17.0" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/6.5" + }, + "time": "2020-06-16T21:01:06+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2021-10-22T20:56:57+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.8.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/1afdd860a2566ed3c2b0b4a3de6e23434a79ec85", + "reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.8.3" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2021-10-05T13:56:00+00:00" + }, + { + "name": "kairos/phpqrcode", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/kairosagency/phpqrcode.git", + "reference": "6770ecbe0e8c7d806c5779ad38b20c9acf5427d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kairosagency/phpqrcode/zipball/6770ecbe0e8c7d806c5779ad38b20c9acf5427d9", + "reference": "6770ecbe0e8c7d806c5779ad38b20c9acf5427d9", + "shasum": "" + }, + "require": { + "php": ">=4.3.10" + }, + "type": "library", + "autoload": { + "files": [ + "qrlib.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL" + ], + "authors": [ + { + "name": "Kairos Agency" + } + ], + "description": "A PHP class to generate QR Code", + "homepage": "http://github.com/kairosagency/phpqrcode", + "keywords": [ + "php", + "qrcode" + ], + "support": { + "source": "https://github.com/kairosagency/phpqrcode/tree/master" + }, + "abandoned": "chillerlan/php-qrcode", + "time": "2013-03-20T17:48:23+00:00" + }, + { + "name": "league/oauth2-client", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/oauth2-client.git", + "reference": "badb01e62383430706433191b82506b6df24ad98" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/badb01e62383430706433191b82506b6df24ad98", + "reference": "badb01e62383430706433191b82506b6df24ad98", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0 || ^7.0", + "paragonie/random_compat": "^1 || ^2 || ^9.99", + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpunit/phpunit": "^5.7 || ^6.0 || ^9.3", + "squizlabs/php_codesniffer": "^2.3 || ^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\OAuth2\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alex Bilbie", + "email": "hello@alexbilbie.com", + "homepage": "http://www.alexbilbie.com", + "role": "Developer" + }, + { + "name": "Woody Gilk", + "homepage": "https://github.com/shadowhand", + "role": "Contributor" + } + ], + "description": "OAuth 2.0 Client Library", + "keywords": [ + "Authentication", + "SSO", + "authorization", + "identity", + "idp", + "oauth", + "oauth2", + "single sign on" + ], + "support": { + "issues": "https://github.com/thephpleague/oauth2-client/issues", + "source": "https://github.com/thephpleague/oauth2-client/tree/2.6.0" + }, + "time": "2020-10-28T02:03:40+00:00" + }, + { + "name": "league/oauth2-google", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/oauth2-google.git", + "reference": "18d1889897a8b18d85ecadacf74c9274d678d943" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/oauth2-google/zipball/18d1889897a8b18d85ecadacf74c9274d678d943", + "reference": "18d1889897a8b18d85ecadacf74c9274d678d943", + "shasum": "" + }, + "require": { + "league/oauth2-client": "^2.0" + }, + "require-dev": { + "eloquent/phony-phpunit": "^2.0", + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^6.0", + "squizlabs/php_codesniffer": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\OAuth2\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Woody Gilk", + "email": "woody.gilk@gmail.com", + "homepage": "http://shadowhand.me" + } + ], + "description": "Google OAuth 2.0 Client Provider for The PHP League OAuth2-Client", + "keywords": [ + "Authentication", + "authorization", + "client", + "google", + "oauth", + "oauth2" + ], + "support": { + "issues": "https://github.com/thephpleague/oauth2-google/issues", + "source": "https://github.com/thephpleague/oauth2-google/tree/3.0.3" + }, + "time": "2020-07-24T15:16:12+00:00" + }, + { + "name": "maennchen/zipstream-php", + "version": "v0.5.2", + "source": { + "type": "git", + "url": "https://github.com/maennchen/ZipStream-PHP.git", + "reference": "95922b6324955974675fd4923f987faa598408af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/95922b6324955974675fd4923f987faa598408af", + "reference": "95922b6324955974675fd4923f987faa598408af", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">= 7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZipStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paul Duncan", + "email": "pabs@pablotron.org" + }, + { + "name": "Jesse Donat", + "email": "donatj@gmail.com" + }, + { + "name": "Jonatan Männchen", + "email": "jonatan@maennchen.ch" + } + ], + "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", + "keywords": [ + "stream", + "zip" + ], + "support": { + "issues": "https://github.com/maennchen/ZipStream-PHP/issues", + "source": "https://github.com/maennchen/ZipStream-PHP/tree/master" + }, + "time": "2018-02-09T09:26:57+00:00" + }, + { + "name": "monolog/monolog", + "version": "1.23.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/1.23.0" + }, + "time": "2017-06-19T01:22:40+00:00" + }, + { + "name": "onelogin/php-saml", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/onelogin/php-saml.git", + "reference": "42d6c1f7aaa242fc38e9b3a9c93746f18b641d90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/onelogin/php-saml/zipball/42d6c1f7aaa242fc38e9b3a9c93746f18b641d90", + "reference": "42d6c1f7aaa242fc38e9b3a9c93746f18b641d90", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "pdepend/pdepend": "1.1.0", + "phploc/phploc": "*", + "phpunit/phpunit": "3.7.31", + "satooshi/php-coveralls": "dev-master", + "sebastian/phpcpd": "*", + "squizlabs/php_codesniffer": "*" + }, + "suggest": { + "ext-gettext": "Install gettext and php5-gettext libs to handle translations", + "ext-mcrypt": "Install mcrypt and php5-mcrypt libs in order to support encryption", + "lib-openssl": "Install openssl lib in order to handle with x509 certs (require to support sign and encryption)" + }, + "type": "library", + "autoload": { + "classmap": [ + "extlib/xmlseclibs", + "lib/Saml", + "lib/Saml2" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "OneLogin PHP SAML Toolkit", + "homepage": "https://onelogin.zendesk.com/hc/en-us/sections/200245634-SAML-Toolkits", + "keywords": [ + "SAML2", + "onelogin", + "saml" + ], + "support": { + "email": "sixto.garcia@onelogin.com", + "issues": "https://github.com/onelogin/php-saml/issues", + "source": "https://github.com/onelogin/php-saml/" + }, + "time": "2015-01-13T12:56:33+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.100", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "shasum": "" + }, + "require": { + "php": ">= 7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "support": { + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" + }, + "time": "2020-10-15T08:29:30+00:00" + }, + { + "name": "phpmailer/phpmailer", + "version": "v6.5.3", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "baeb7cde6b60b1286912690ab0693c7789a31e71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/baeb7cde6b60b1286912690ab0693c7789a31e71", + "reference": "baeb7cde6b60b1286912690ab0693c7789a31e71", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "php": ">=5.5.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.2", + "php-parallel-lint/php-console-highlighter": "^0.5.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcompatibility/php-compatibility": "^9.3.5", + "roave/security-advisories": "dev-latest", + "squizlabs/php_codesniffer": "^3.6.0", + "yoast/phpunit-polyfills": "^1.0.0" + }, + "suggest": { + "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", + "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", + "league/oauth2-google": "Needed for Google XOAUTH2 authentication", + "psr/log": "For optional PSR-3 debug logging", + "stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication", + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPMailer\\PHPMailer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-only" + ], + "authors": [ + { + "name": "Marcus Bointon", + "email": "phpmailer@synchromedia.co.uk" + }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, + { + "name": "Andy Prevost", + "email": "codeworxtech@users.sourceforge.net" + }, + { + "name": "Brent R. Matzelle" + } + ], + "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "support": { + "issues": "https://github.com/PHPMailer/PHPMailer/issues", + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.5.3" + }, + "funding": [ + { + "url": "https://github.com/Synchro", + "type": "github" + } + ], + "time": "2021-11-25T16:34:11+00:00" + }, + { + "name": "phpoffice/phpexcel", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PHPExcel.git", + "reference": "1441011fb7ecdd8cc689878f54f8b58a6805f870" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PHPExcel/zipball/1441011fb7ecdd8cc689878f54f8b58a6805f870", + "reference": "1441011fb7ecdd8cc689878f54f8b58a6805f870", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "php": "^5.2|^7.0" + }, + "require-dev": { + "squizlabs/php_codesniffer": "2.*" + }, + "type": "library", + "autoload": { + "psr-0": { + "PHPExcel": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "http://blog.maartenballiauw.be" + }, + { + "name": "Erik Tilt" + }, + { + "name": "Franck Lefevre", + "homepage": "http://rootslabs.net" + }, + { + "name": "Mark Baker", + "homepage": "http://markbakeruk.net" + } + ], + "description": "PHPExcel - OpenXML - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", + "homepage": "https://github.com/PHPOffice/PHPExcel", + "keywords": [ + "OpenXML", + "excel", + "php", + "spreadsheet", + "xls", + "xlsx" + ], + "support": { + "issues": "https://github.com/PHPOffice/PHPExcel/issues", + "source": "https://github.com/PHPOffice/PHPExcel/tree/master" + }, + "abandoned": "phpoffice/phpspreadsheet", + "time": "2018-11-22T23:07:24+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "rebuy/ezpdf", + "version": "0.0.9", + "source": { + "type": "git", + "url": "https://github.com/rebuy-de/ezpdf.git", + "reference": "5f906c3b74e1d14db57d6cf4c09cc8918dd67390" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rebuy-de/ezpdf/zipball/5f906c3b74e1d14db57d6cf4c09cc8918dd67390", + "reference": "5f906c3b74e1d14db57d6cf4c09cc8918dd67390", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "support": { + "issues": "https://github.com/rebuy-de/ezpdf/issues", + "source": "https://github.com/rebuy-de/ezpdf/tree/0.0.9" + }, + "time": "2012-12-12T15:33:59+00:00" + }, + { + "name": "seatgeek/djjob", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/SIU-Toba/djjob.git", + "reference": "cefe5229ee061a8e3a6a113fd7a50549f6fce2c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SIU-Toba/djjob/zipball/cefe5229ee061a8e3a6a113fd7a50549f6fce2c9", + "reference": "cefe5229ee061a8e3a6a113fd7a50549f6fce2c9", + "shasum": "" + }, + "require": { + "php": ">=5.1.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "DJJob": "" + } + }, + "description": "Allows PHP web applications to process long-running tasks asynchronously", + "keywords": [ + "PHP", + "asynchronous", + "job", + "task" + ], + "support": { + "source": "https://github.com/SIU-Toba/djjob/tree/v1.0.1" + }, + "time": "2017-01-13T13:51:05+00:00" + }, + { + "name": "siu-toba/jwt-util", + "version": "v1.0.5", + "source": { + "type": "git", + "url": "https://github.com/SIU-Toba/jwt-util.git", + "reference": "15f7387de95505551047bd1a5945db1ea2c337b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SIU-Toba/jwt-util/zipball/15f7387de95505551047bd1a5945db1ea2c337b0", + "reference": "15f7387de95505551047bd1a5945db1ea2c337b0", + "shasum": "" + }, + "require": { + "firebase/php-jwt": "~6.4", + "php": ">=7.1.0" + }, + "require-dev": { + "phpunit/phpunit": "9.5.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "SIU\\JWT\\": "src/SIU/JWT" + } + }, + "notification-url": "https://packagist.org/downloads/", + "authors": [ + { + "name": "Sistema de Información Universitaria - SIU", + "email": "info@siu.edu.ar" + } + ], + "description": "Una pequeña librería que autentica con Web Tokens JSON (JWT)", + "homepage": "http://www.siu.edu.ar", + "support": { + "issues": "https://github.com/SIU-Toba/jwt-util/issues", + "source": "https://github.com/SIU-Toba/jwt-util/tree/v1.0.5" + }, + "time": "2023-04-17T20:28:44+00:00" + }, + { + "name": "siu-toba/rest", + "version": "v1.1.8", + "source": { + "type": "git", + "url": "https://github.com/SIU-Toba/rest.git", + "reference": "ca41d0fc3cc1f598835c10e32658ed8bbb96089d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SIU-Toba/rest/zipball/ca41d0fc3cc1f598835c10e32658ed8bbb96089d", + "reference": "ca41d0fc3cc1f598835c10e32658ed8bbb96089d", + "shasum": "" + }, + "require": { + "doctrine/cache": "~1.4", + "php": ">=5.5.0", + "siu-toba/jwt-util": "~1.0.0", + "siu-toba/ssl-cert-utils": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "SIUToba\\rest\\": "src/SIUToba/rest" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "SIU" + ], + "description": "Libreria para servicios REST", + "homepage": "http://toba.siu.edu.ar", + "support": { + "issues": "https://github.com/SIU-Toba/rest/issues", + "source": "https://github.com/SIU-Toba/rest/tree/v1.1.8" + }, + "time": "2017-04-12T19:50:23+00:00" + }, + { + "name": "siu-toba/ssl-cert-utils", + "version": "v1.0", + "source": { + "type": "git", + "url": "https://github.com/SIU-Toba/ssl-cert-utils.git", + "reference": "41d21366183d843f91834b47888d5d17198ca527" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SIU-Toba/ssl-cert-utils/zipball/41d21366183d843f91834b47888d5d17198ca527", + "reference": "41d21366183d843f91834b47888d5d17198ca527", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "php": ">=5.3.0" + }, + "type": "project", + "autoload": { + "psr-4": { + "": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "authors": [ + { + "name": "Andrés Blanco", + "email": "ablanco@siu.edu.ar" + } + ], + "description": "Utilidades para manipular y sacar información de certificados SSL", + "support": { + "issues": "https://github.com/SIU-Toba/ssl-cert-utils/issues", + "source": "https://github.com/SIU-Toba/ssl-cert-utils/tree/v1.0" + }, + "time": "2016-04-12T18:08:51+00:00" + }, + { + "name": "siu/chulupi-framework", + "version": "v2.6.0", + "source": { + "type": "git", + "url": "https://gitlab.siu.edu.ar/chulupi/framework.git", + "reference": "8df4317b8b5c5edab49bebb0b8b7ecbbfa9884a3" + }, + "require": { + "guzzlehttp/guzzle": "6.5.*", + "kairos/phpqrcode": "1.0.*", + "league/oauth2-client": "2.6.0", + "league/oauth2-google": "3.0.3", + "maennchen/zipstream-php": "0.5.*", + "monolog/monolog": "1.23.*", + "onelogin/php-saml": "2.3.*", + "phpmailer/phpmailer": "~6.1", + "phpoffice/phpexcel": "1.8.*", + "rebuy/ezpdf": "0.0.*", + "seatgeek/djjob": "1.0.*", + "siu-toba/rest": "^1.0.0", + "siu/rdi": "~0.9", + "symfony/console": "3.1.*", + "symfony/translation": "2.8.*", + "symfony/twig-bridge": "2.8.*", + "symfony/yaml": "2.8.*", + "twig/twig": "1.44.*", + "wikimedia/composer-merge-plugin": "2.0.1", + "zendframework/zendframework1": "1.12.*" + }, + "require-dev": { + "phpunit/phpunit": "4.5.*" + }, + "type": "library", + "autoload": { + "psr-0": { + "": "src/" + } + }, + "scripts": { + "post-install-cmd": [ + "SIU\\Chulupi\\Scripts\\Composer::postInstallCmd" + ], + "post-update-cmd": [ + "SIU\\Chulupi\\Scripts\\Composer::postUpdateCmd" + ] + }, + "license": [ + "proprietary" + ], + "authors": [ + { + "name": "SIU", + "email": "guarani@siu.edu.ar" + } + ], + "description": "Framework de Desarrollo Web MVC desarrollado por el SIU.", + "time": "2024-06-14T19:43:46+00:00" + }, + { + "name": "siu/rdi", + "version": "0.9.11", + "source": { + "type": "git", + "url": "https://gitlab.siu.edu.ar/siu/rdi.git", + "reference": "73018cf02442e837f21b6fdc3925e701261089b6" + }, + "type": "library", + "autoload": { + "classmap": [ + "RDILib/" + ], + "exclude-from-classmap": [ + "/RDILib/RDIAutoload.php", + "/RDILib/conectores/CMIS_ATOM/original/", + "/RDILib/conectores/CMIS_BROWSER/", + "/RDILib/conectores/CMIS_REST/" + ] + }, + "authors": [ + { + "name": "SIU", + "email": "toba@siu.edu.ar" + } + ], + "description": "Librería de interacción con repositorios digitales", + "time": "2020-10-01T20:03:28+00:00" + }, + { + "name": "symfony/console", + "version": "v3.1.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "047f16485d68c083bd5d9b73ff16f9cb9c1a9f52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/047f16485d68c083bd5d9b73ff16f9cb9c1a9f52", + "reference": "047f16485d68c083bd5d9b73ff16f9cb9c1a9f52", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/debug": "~2.8|~3.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/process": "~2.8|~3.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/console/tree/3.1" + }, + "time": "2017-01-08T20:43:43+00:00" + }, + { + "name": "symfony/debug", + "version": "v3.4.47", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "ab42889de57fdfcfcc0759ab102e2fd4ea72dcae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/ab42889de57fdfcfcc0759ab102e2fd4ea72dcae", + "reference": "ab42889de57fdfcfcc0759ab102e2fd4ea72dcae", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/http-kernel": "~2.8|~3.0|~4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/debug/tree/v3.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "abandoned": "symfony/error-handler", + "time": "2020-10-24T10:57:07+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", + "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T09:27:20+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.23.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T12:26:48+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T09:17:38+00:00" + }, + { + "name": "symfony/translation", + "version": "v2.8.52", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "fc58c2a19e56c29f5ba2736ec40d0119a0de2089" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/fc58c2a19e56c29f5ba2736ec40d0119a0de2089", + "reference": "fc58c2a19e56c29f5ba2736ec40d0119a0de2089", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/config": "<2.7" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.8", + "symfony/intl": "~2.7.25|^2.8.18|~3.2.5", + "symfony/yaml": "~2.2|~3.0.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Translation Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v2.8.50" + }, + "time": "2018-11-24T21:16:41+00:00" + }, + { + "name": "symfony/twig-bridge", + "version": "v2.8.52", + "source": { + "type": "git", + "url": "https://github.com/symfony/twig-bridge.git", + "reference": "ecc1e30d05fa99f25b504e2d6a8684555ae39f7c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/ecc1e30d05fa99f25b504e2d6a8684555ae39f7c", + "reference": "ecc1e30d05fa99f25b504e2d6a8684555ae39f7c", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "twig/twig": "~1.34|~2.4" + }, + "conflict": { + "symfony/form": "<2.8.23" + }, + "require-dev": { + "symfony/asset": "~2.7|~3.0.0", + "symfony/console": "~2.8|~3.0.0", + "symfony/expression-language": "~2.4|~3.0.0", + "symfony/finder": "~2.3|~3.0.0", + "symfony/form": "^2.8.23", + "symfony/http-foundation": "^2.8.29|~3.0.0", + "symfony/http-kernel": "~2.8|~3.0.0", + "symfony/polyfill-intl-icu": "~1.0", + "symfony/routing": "~2.2|~3.0.0", + "symfony/security": "^2.8.31|^3.3.13", + "symfony/security-acl": "~2.6|~3.0.0", + "symfony/stopwatch": "~2.2|~3.0.0", + "symfony/templating": "~2.1|~3.0.0", + "symfony/translation": "~2.7|~3.0.0", + "symfony/var-dumper": "~2.7.16|~2.8.9|~3.0.9", + "symfony/yaml": "^2.0.5|~3.0.0" + }, + "suggest": { + "symfony/asset": "For using the AssetExtension", + "symfony/expression-language": "For using the ExpressionExtension", + "symfony/finder": "", + "symfony/form": "For using the FormExtension", + "symfony/http-kernel": "For using the HttpKernelExtension", + "symfony/routing": "For using the RoutingExtension", + "symfony/security": "For using the SecurityExtension", + "symfony/stopwatch": "For using the StopwatchExtension", + "symfony/templating": "For using the TwigEngine", + "symfony/translation": "For using the TranslationExtension", + "symfony/var-dumper": "For using the DumpExtension", + "symfony/yaml": "For using the YamlExtension" + }, + "type": "symfony-bridge", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Bridge\\Twig\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Twig Bridge", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/twig-bridge/tree/v2.8.52" + }, + "time": "2018-11-11T11:18:13+00:00" + }, + { + "name": "symfony/yaml", + "version": "v2.8.52", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "02c1859112aa779d9ab394ae4f3381911d84052b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/02c1859112aa779d9ab394ae4f3381911d84052b", + "reference": "02c1859112aa779d9ab394ae4f3381911d84052b", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v2.8.52" + }, + "time": "2018-11-11T11:18:13+00:00" + }, + { + "name": "twig/twig", + "version": "v1.44.6", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "ae39480f010ef88adc7938503c9b02d3baf2f3b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/ae39480f010ef88adc7938503c9b02d3baf2f3b3", + "reference": "ae39480f010ef88adc7938503c9b02d3baf2f3b3", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "^1.8" + }, + "require-dev": { + "psr/container": "^1.0", + "symfony/phpunit-bridge": "^4.4.9|^5.0.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.44-dev" + } + }, + "autoload": { + "psr-0": { + "Twig_": "lib/" + }, + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v1.44.6" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2021-11-25T13:31:46+00:00" + }, + { + "name": "wikimedia/composer-merge-plugin", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/wikimedia/composer-merge-plugin.git", + "reference": "8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912", + "reference": "8ca2ed8ab97c8ebce6b39d9943e9909bb4f18912", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1||^2.0", + "php": ">=7.2.0" + }, + "require-dev": { + "composer/composer": "^1.1||^2.0", + "php-parallel-lint/php-parallel-lint": "~1.1.0", + "phpunit/phpunit": "^8.5||^9.0", + "squizlabs/php_codesniffer": "~3.5.4" + }, + "type": "composer-plugin", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "class": "Wikimedia\\Composer\\Merge\\V2\\MergePlugin" + }, + "autoload": { + "psr-4": { + "Wikimedia\\Composer\\Merge\\V2\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bryan Davis", + "email": "bd808@wikimedia.org" + } + ], + "description": "Composer plugin to merge multiple composer.json files", + "support": { + "issues": "https://github.com/wikimedia/composer-merge-plugin/issues", + "source": "https://github.com/wikimedia/composer-merge-plugin/tree/v2.0.1" + }, + "time": "2021-02-24T05:28:06+00:00" + }, + { + "name": "zendframework/zendframework1", + "version": "1.12.20", + "source": { + "type": "git", + "url": "https://github.com/zendframework/zf1.git", + "reference": "737ef159654fbbef37cf9af742b2c8f9690c2ece" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zendframework/zf1/zipball/737ef159654fbbef37cf9af742b2c8f9690c2ece", + "reference": "737ef159654fbbef37cf9af742b2c8f9690c2ece", + "shasum": "" + }, + "require": { + "php": ">=5.2.11" + }, + "require-dev": { + "phpunit/dbunit": "1.3.*", + "phpunit/phpunit": "3.7.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.12.x-dev" + } + }, + "autoload": { + "psr-0": { + "Zend_": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "library/" + ], + "license": [ + "BSD-3-Clause" + ], + "description": "Zend Framework 1", + "homepage": "http://framework.zend.com/", + "keywords": [ + "ZF1", + "framework" + ], + "support": { + "issues": "https://github.com/zendframework/zf1/issues", + "source": "https://github.com/zendframework/zf1/tree/release-1.12.20" + }, + "abandoned": "zendframework/zendframework", + "time": "2016-09-08T14:50:34+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "7.4.*", + "ext-curl": "*", + "ext-mbstring": "*", + "ext-pdo_pgsql": "*", + "lib-openssl": "*", + "ext-apcu": "*", + "ext-gd": "*", + "composer-plugin-api": "^2.0" + }, + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/db/migrations/20200819191727_es_mayor25_sin_secundario.php b/db/migrations/20200819191727_es_mayor25_sin_secundario.php new file mode 100644 index 0000000..71299a3 --- /dev/null +++ b/db/migrations/20200819191727_es_mayor25_sin_secundario.php @@ -0,0 +1,102 @@ +execute($sql); + + $this->execute("INSERT INTO app_versiones_base (version_base, fecha_actualizacion, observaciones) VALUES ('3.12', CURRENT_TIMESTAMP, 'Versión 3.12 de la base de Preinscripción')"); + + $sga_preinscripcion = $this->table('sga_preinscripcion'); + + // Si no existe la columna 'es_mayor_25_sin_secundario' en la tabla 'sga_preinscripcion' + if (!$sga_preinscripcion->hasColumn('es_mayor_25_sin_secundario')) { + + /** + * @see https://phinx.readthedocs.io/en/latest/migrations.html#adding-a-column-after-another-column + * Se agrega la columna 'es_mayor_25_sin_secundario' en la tabla 'sga_preinscripcion'. + */ + $sga_preinscripcion->addColumn('es_mayor_25_sin_secundario', 'char', ['length' => 1, 'null' => false, 'default' => 'N','after' => 'estado']); + $sga_preinscripcion->update(); + + // También se puede agregar de esta forma + //$this->execute("ALTER TABLE sga_preinscripcion ADD COLUMN es_mayor_25_sin_secundario Char(1) NOT NULL DEFAULT 'N'"); + + // Se agrega la CONSTRAINT + $this->execute("ALTER TABLE sga_preinscripcion ADD CONSTRAINT ck_sga_preinscripcion_es_mayor_25_sin_secundario CHECK (es_mayor_25_sin_secundario IN ('N', 'S'))"); + + /** + * Se insertan datos en las tablas 'sga_campos_form' y 'sga_campos_conf' + * @see https://phinx.readthedocs.io/en/latest/migrations.html#inserting-data. + */ + $row = [ + 'columna' => 'es_mayor_25_sin_secundario', + 'descripcion' => 'Es mayor de 25 años y no tiene estudios secundarios' + ]; + + $sga_campos_form = $this->table('sga_campos_form'); + $sga_campos_form->insert($row); + $sga_campos_form->saveData(); + + $row = [ + 'propuesta_tipo' => '200', + 'columna' => 'es_mayor_25_sin_secundario', + 'visible' => 1, + 'obligatorio' => 1, + 'se_imprime' => 1 + ]; + + $sga_campos_conf = $this->table('sga_campos_conf'); + $sga_campos_conf->insert($row); + $sga_campos_conf->saveData(); + + // También se pueden insertan datos de esta forma + //$this->execute("INSERT INTO sga_campos_form (columna, descripcion) VALUES ('es_mayor_25_sin_secundario', 'Es mayor de 25 años y no tiene estudios secundarios')"); + //$this->execute("INSERT INTO sga_campos_conf (propuesta_tipo, columna, visible, obligatorio, se_imprime) VALUES ('200', 'es_mayor_25_sin_secundario', 1, 1, 1)"); + + } + + } + + /** + * @see https://phinx.readthedocs.io/en/latest/migrations.html#the-down-method + * Migrate Down (Revierte cambios en la DB). + */ + public function down() + { + $this->execute("DELETE FROM app_versiones_base WHERE version_base = '3.12'"); + + $sga_preinscripcion = $this->table('sga_preinscripcion'); + + // Si existe la columna 'es_mayor_25_sin_secundario' en la tabla 'sga_preinscripcion' + if ($sga_preinscripcion->hasColumn('es_mayor_25_sin_secundario')) { + + $this->execute("DELETE FROM sga_campos_conf WHERE columna = 'es_mayor_25_sin_secundario'"); + $this->execute("DELETE FROM sga_campos_form WHERE columna = 'es_mayor_25_sin_secundario'"); + + // Se borra la CONSTRAINT + $this->execute("ALTER TABLE sga_preinscripcion DROP CONSTRAINT ck_sga_preinscripcion_es_mayor_25_sin_secundario"); + + /** + * @see https://phinx.readthedocs.io/en/latest/migrations.html#dropping-a-column + * Se borra la columna 'es_mayor_25_sin_secundario' de la tabla 'sga_preinscripcion'. + */ + $sga_preinscripcion->removeColumn('es_mayor_25_sin_secundario')->save(); + + // También se puede borrar de esta forma + //$this->execute("ALTER TABLE sga_preinscripcion DROP COLUMN es_mayor_25_sin_secundario"); + + } + } +} diff --git a/instalacion/alias_template.conf b/instalacion/alias_template.conf new file mode 100644 index 0000000..8a6a596 --- /dev/null +++ b/instalacion/alias_template.conf @@ -0,0 +1,89 @@ +# En esta plantilla se muestra cómo definir los puntos de acceso del sistema +# SIU-Preinscripción. + +# A partir de este template, crear el archivo alias.conf en esta misma carpeta. +# Ese archivo debe ser incluido en la configuración de Apache. Ejemplo: +# Include "/path/a/preinscripcion/instalacion/alias.conf" + +# Si bien los alias apuntan al mismo directorio, para cada punto de acceso +# se define una variable de servidor "ACC_ID" que identifica el punto de acceso, +# además del perfil funcional asociado (alumno / admin). + +# ------------------------------------------------------------------------------ +# Si se desea utilizar una misma instalación de Preinscripción como front-end de +# varias bases (por ejemplo, una por unidad académica), replicar todas las +# configuraciones mostradas a continuación, utilizando distintos alias y definiendo +# el bloque de configuración correspondiente en la sección 'accesos' del config.php +# Ejemplo: +# * Alias /preinscripcion/ua2 "/path/a/preinscripcion/src/siu/www/" +# * Alias /preinscripcion_admin/ua2 "/path/a/preinscripcion/src/siu/www/" +# ... +# ------------------------------------------------------------------------------ + +# Alias del punto de acceso de ALUMNOS del punto de acceso [pto_acc] +# Ejemplo: /preinscripcion/ingenieria +# Reemplazarlo según corresponda +Alias /preinscripcion/[pto_acc] "/path/a/preinscripcion/src/siu/www/" + +# Alias del punto de acceso ADMINISTRADOR del punto de acceso [pto_acc] +# Ejemplo: /preinscripcion_admin/ingenieria +# Reemplazarlo según corresponda +Alias /preinscripcion_admin/[pto_acc] "/path/a/preinscripcion/src/siu/www/" + +# Configuración del directorio navegable + + Options FollowSymLinks + DirectoryIndex index.php + + Order allow,deny + Allow from all + + + Require all granted + + include /path/a/preinscripcion/instalacion/rewrite.conf + + +#### CONFIGURACION DE ACCESO [pto_acc] + + + # -------------------------------------------------------------------------- + # PUNTO DE ACCESO: alumnos de la instalación del punto de acceso [pto_acc] + # -------------------------------------------------------------------------- + + # Nombre o ID del Punto de Acceso. No utilizar espacios. + # Si se definen varios puntos de acceso, no debe repetirse este valor + SetEnv ID_PTO_ACCESO [id_pto_acc] + + # Setea el perfil funcional de quienes acceden por este punto de acceso. + # NO MODIFICAR ESTE VALOR + SetEnv PERFIL alumno + + # se setea de esta manera para que esta variable sea accesible desde mod_rewrite + # ATENCIÓN: el alias debe empezar con '/' + SetEnvIf always_match ^ ACC_ALIAS=/preinscripcion/[pto_acc] + + + + # -------------------------------------------------------------------------- + # PUNTO DE ACCESO: admin del punto de acceso [pto_acc] + # -------------------------------------------------------------------------- + + # Nombre o ID del Punto de Acceso. No utilizar espacios. + # Si se definen puntos de acceso, tener cuidado de no repetir este valor + # Debe corresponderse con el ID_PTO_ACCESO del perfil 'alumno' que administra este panel de admin. + SetEnv ID_PTO_ACCESO [id_pto_acc] + + # Setea el perfil funcional de quienes acceden por este punto de acceso. + # NO MODIFICAR ESTE VALOR + SetEnv PERFIL admin + + # se setea de esta manera para que esta variable sea accesible desde mod_rewrite + # ATENCIÓN: el alias debe empezar con '/' + SetEnvIf always_match ^ ACC_ALIAS=/preinscripcion_admin/[pto_acc] + + # Si se desea restringir las IP desde las cuales acceder al panel de + # administración, hacerlo aquí. + + +#### FIN CONFIGURACION DE ACCESO [pto_acc] \ No newline at end of file diff --git a/instalacion/arai_documentos_template.ini b/instalacion/arai_documentos_template.ini new file mode 100644 index 0000000..30c7b4b --- /dev/null +++ b/instalacion/arai_documentos_template.ini @@ -0,0 +1,3 @@ +host_arai = "" +usr_arai = "" +pass_arai = "" \ No newline at end of file diff --git a/instalacion/config_template.php b/instalacion/config_template.php new file mode 100644 index 0000000..37d9100 --- /dev/null +++ b/instalacion/config_template.php @@ -0,0 +1,470 @@ + [ + /** + * Indica si el sistema está o no en un entorno de producción + * - Valores posibles: true|false + */ + 'produccion' => false, + + /** + * Indica si el sistema utiliza personalizaciones. Se debe complementar indicando + * el ID de personalización en la configuración de los puntos de acceso. + * - Valores posibles: true|false + */ + 'usar_personalizaciones' => false, + + /** + * Path al directorio donde se guardarán los attachments de los mensajes. + * En esta carpeta apache debe tener permisos de escritura. + * - Valores posibles: string (un path) + */ + 'dir_attachment' => '/tmp', + + /** + * Máximo tiempo de inactividad (en minutos). Vencido el mismo, + * se pedirá identificarse nuevamente + * - Valores posibles: números enteros + */ + 'sesion_timeout' => 30, + + /** + * Máxima duración de la sesión (en minutos) + * - Valores posibles: números enteros + */ + 'sesion_maxtime' => 120, + + /** + * Sufijo del archivo de idioma, donde se definen todos los mensajes y + * etiquetas del sistema. En la carpeta src/siu/mensajes debe existir + * un archivo llamado "mensajes..php". + * El archivo por defecto entregado por el SIU es "mensajes.es.php" + */ + 'locale' => 'es', + + /** + * En algunos lugares de la aplicación se encriptan cadenas con sha1. + * Se utiliza este SALT para hacer la encriptación de las claves de los + * alumnos preinscriptos. Cambiar este valor no reviste inconvenientes. + * - Valores posibles: string + */ + 'salt' => '9bf057558b90263987bd8f99caf2e92f7efc1a13', + + /** + * Valor de SALT usado para cifrar las claves default de la sección de + * administración (usuarios administradores). + * + */ + 'salt_admin' => '9bf057558b90263987bd8f99caf2e92f7efc1a13', + + /** + * Configuracion Google Analytics + * + */ + 'google_analytics' => + [ + 'activo' => true, + 'account' => 'UA-xxx-y' + ], + + /** + * Configuración de logging. Si no se especifica este bloque no se usa + * el log (es lo mismo que setear activo en false). + */ + 'log' => [ + /** + * Indica si el log está activo o no + * - Valores posibles: true|false + */ + 'activo' => true, + + /** + * Niveles de log: + * - 'log::NIVEL_DEBUG' -> Recomendado en Desarrollo + * - 'log::NIVEL_INFO' -> Solo muestra información de tiempo y memoria consumida + * - 'log::NIVEL_ERROR' -> Recomendado en Producción + */ + 'nivel' => log::NIVEL_DEBUG, + + /** + * Nivel mínimo de log para consola (CLI): + * - 'Logger::DEBUG' -> Recomendado en Desarrollo + * - 'Logger::INFO' + * - 'Logger::NOTICE' + * - 'Logger::WARNING' + * - 'Logger::ERROR' -> Recomendado en Producción + * - 'Logger::CRITICAL' + * - 'Logger::ALERT' + * - 'Logger::EMERGENCY' + */ + 'nivel_consola' => Logger::DEBUG, + + /** + * Nivel mínimo de log para Web: + * - 'Logger::DEBUG' -> Recomendado en Desarrollo + * - 'Logger::INFO' + * - 'Logger::NOTICE' + * - 'Logger::WARNING' + * - 'Logger::ERROR' -> Recomendado en Producción + * - 'Logger::CRITICAL' + * - 'Logger::ALERT' + * - 'Logger::EMERGENCY' + */ + 'nivel_web' => Logger::DEBUG, + + 'barra_dev' => true, + + ], + + /** + * URL de la de ayuda para identidad de genero + * - Ejemplo: https://drive.google.com/file/d/1WFW6s9CAZro2mtOs1JIkBX0la6fzJP_o/view + */ + 'url_identidad_genero' => 'https://drive.google.com/file/d/1WFW6s9CAZro2mtOs1JIkBX0la6fzJP_o/view', + + /** + * E-mail de ayuda para contactarse con la Universidad. + * - Ejemplo: uunn@edu.ar + */ + 'email_ayuda' => '', + + //-------------------------------------------------------------------------- + //---- Configuración de captcha -------------------------------------------- + //-------------------------------------------------------------------------- + + /** + * Configuración de captchas (se usa recaptcha). Si no se especifica este + * bloque no se usa captcha (es lo mismo que setear activo en false) + */ + 'captcha' => [ + /** + * Indica si se activan los captchas a través de toda la aplicación + * - Valores posibles: true|false + */ + 'activo' => true, + + /** + * Cantidad de intentos fallidos permitidos antes + * de exigir que se complete un captcha en el login + */ + 'intentos_login' => 2, + + /** + * Configuración de reCAPTCHA 2 + * Para obtener el par de API keys ('site_key' y 'secret_key') + * ir a https://www.google.com/recaptcha/admin + * + * Los provistos en este ejemplo fueron generados para la URL http://localhost + */ + 'site_key' => '6LeA9yEUAAAAAL804tNWD5g2IfN6hca7s3a-KzbD', + 'secret_key' => '6LeA9yEUAAAAAKYf2iTtWq5t3moHOG4Bwk8TX3Pv', + /** + * Son las opciones de Guzzle (http://docs.guzzlephp.org/en/stable/request-options.html) + */ + 'opciones' => [ + //'proxy' => 'tcp://localhost:8125', + //'verify' => false, + ] + ], + + /** + * Configuración de Proxy (por defecto desactivado) + */ + 'proxy' => [ + 'activo' => false, + 'proxy_host' => 'proxy.xxxxxxxxx', + 'proxy_port' => 8080, + 'proxy_username' => 'PROXY-USERNAME', + 'proxy_password' => 'PROXY-PASSWORD' + ], + + /** + * Configuración de proxypass de Apache + */ + //'server_name' => '192.168.126.180', + + //-------------------------------------------------------------------------- + //---- Servidor de correo -------------------------------------------------- + //-------------------------------------------------------------------------- + + /** + * Se provee un ejemplo de configuración del correo usando el servidor de GMail + */ + 'smtp' => [ + 'from' => 'preinscripcion@gmail.com', + 'from_name' => 'SIU-Preinscripción', + 'host' => 'smtp.gmail.com', + 'seguridad' => mail::SSL, + 'auth' => true, + 'port' => 465, + 'reply_to' => 'preinscripcion@gmail.com', + /** + * Debug output level. + * Options: + * * SMTP::DEBUG_OFF (`0`) No debug output, default + * * SMTP::DEBUG_CLIENT (`1`) Client commands + * * SMTP::DEBUG_SERVER (`2`) Client commands and server responses + * * SMTP::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status + * * SMTP::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages. + */ + 'smtp_debug' => SMTP::DEBUG_OFF, + + /** + * RECOMENDADO + * Si se usa OAUTH2 se debe configurar lo siguiente + * Obtener los tokens de aquí: https://github.com/PHPMailer/PHPMailer/wiki/Using-Gmail-with-XOAUTH2 + */ + 'auth_type' => mail::AUTH_TYPE_XOAUTH2, + 'oauth2_email' => 'preinscripcion@gmail.com', + 'oauth2_client_id' => 'RANDOMCHARS-----duv1n2.apps.googleusercontent.com', + 'oauth2_client_secret' => 'RANDOMCHARS-----lGyjPcRtvP', + 'oauth2_refresh_token' => 'RANDOMCHARS-----DWxgOvPT003r-yFUV49TQYag7_Aod7y0', + + /** + * NO RECOMENDADO: Se debe dar "Acceso de apps menos seguras" en Gmail + * Si se usa autenticación simple configurar 'usuario' y 'clave' + */ + //'auth_type' => mail::AUTH_TYPE_USER_PASS, + //'usuario' => 'preinscripcion@gmail.com', + //'clave' => '**********', + + // Decidir si se verifican los certificados en una conexión SSL + // Ver: https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#php-56-certificate-verification-failure + /* + 'ssl' => [ + 'verify_peer' => false, + 'verify_peer_name' => false, + 'allow_self_signed' => true + ] + */ + ], + + //-------------------------------------------------------------------------- + //---- Configuración de Repositorio Digital Integrado (RDI) ---------------- + //-------------------------------------------------------------------------- + + /** + * Configuración de Repositorio Digital Integrado (RDI). + * Para utilizarlo, es necesario tener establecido el parámetro de Guarani + * "usa_repositorio_digital" en "S: Se almacenan los documentos en el repositorio digital" + */ + 'rdi' => [ + 'config' => [ + 'proyecto' => 'preinscripcion', + 'repositorio' => 'url_repositorio', // Ejemplo: 'http://192.168.125.1:8081/nuxeo/atom/cmis', + 'usuario' => '****', + 'clave' => '****', + 'conector' => 'CMIS_ATOM', + ], + ], + + //-------------------------------------------------------------------------- + //---- Configuración del logo de página ------------------------------------ + //-------------------------------------------------------------------------- + + /** + * Nombre del archivo del logo de página, relativa a la carpeta www/img/ + * del proyecto o de la carpeta de la personalización activa + */ + 'logo_pagina' => 'logo-transparente.png', + + //-------------------------------------------------------------------------- + //---- Configuración de SSL, la cual define si la aplicación es accedida --- + //---- vía el protocolo HTTP o HTTPS. -------------------------------------- + //-------------------------------------------------------------------------- + + /** + * + alcance: valores posibles 'all' | 'none' + * - 'all': la aplicación es accedida vía el protocolo HTTPS + * - 'none': se accede vía el protocolo HTTP, esta ultima es la opción por defecto. Los + * + redirigir_ssl: indica si se debe redirigir en el caso que se haya accedido con el protocolo incorrecto. + * - valores posibles: 'true' | 'false' + */ + 'ssl' => [ + 'alcance' => 'none', + 'redirigir_ssl' => true, + ], + + /* + * + *tiempo definido para la confirmación del alta de preinscripción (en horas): + */ + 'tiempo_confirmacion_alta_preinscripcion' => 24, + + //-------------------------------------------------------------------------- + //---- Configuración de puntos de acceso ----------------------------------- + //-------------------------------------------------------------------------- + + 'accesos' => [ + '[id_pto_acc]' => [ + /** + * Id de la personalización que se va a utilizar. + * Representa el nombre de carpeta dentro de src/pers. + * Si se deja en NULL no se utiliza ninguna personalización. + */ + 'personalizacion' => NULL, + + /** + * Información de conexión de la base de datos + */ + 'database' => [ + 'vendor' => 'pgsql', + 'dbname' => 'nombre_base_preinscripcion', + 'host' => 'host_base_preinscripcion', + 'port' => 'puerto_base_preinscripcion', + 'pdo_user' => 'usuario_base_preinscripcion', + 'pdo_passwd' => 'password_base_preinscripcion', + ], + + /** + * Forma de obtener información de Guaraní + * - Valores posibles: 'consultas_bd' + */ + 'modo_consultas_g3' => 'consultas_bd', + + /** + * Si el parámetro 'modo_consultas_g3' está definido como 'consultas_bd', + * aquí se configura la información de conexión de la base de datos de Guaraní + */ + 'database_guarani' => [ + 'vendor' => 'pgsql', + 'dbname' => 'nombre_base_gestion', + 'schema' => 'schema_base_gestion', + 'host' => 'host_base_gestion', + 'port' => 'puerto_base_gestion', + 'pdo_user' => 'usuario_base_gestion', + 'pdo_passwd' => 'password_base_gestion', + ], + + //------------------------------------------------------------------ + //-- Parámetros sistema -------------------------------------------- + //-- + //-- Desde versión 3.5.0 estos parámetros se incluyen dentro de este + //-- bloque, para permitir mayor flexibilidad de configuración en + //-- instalaciones que manejan varios puntos de acceso + //------------------------------------------------------------------ + + /** + * Longitud mínima de la clave de usuario + * - Valores permitidos: números enteros + */ + 'clave_long_minima' => 6, + + /** + * Formatea uniformemente los campos de texto que ingresa el usuario en el sistema + * - Valores posibles: + * + 'libre' : Se deja la entrada tal cual como la ingresa el usuario + * + 'mayusculas' : Se formatea todo en mayúsculas + * + 'capitalizar' : Se deja la primera letra de cada palabra en mayúsculas y el resto en minúsculas. + */ + 'formateo_campos' => 'libre', + + /** + * Determina si el aspirante debe elegir un turno para la presentación de documentación + * - Valores posibles: true | false + */ + 'carga_turno_presentacion' => false, + + /** + * Forma de generación de comprobante para presentar en la Institución + * - Valores posibles: + * + ra: un comprobante por cada Responsable Académica + * + propuesta: un comprobante por cada Propuesta elegida + * + unico: un sólo comprobante por aspirante + */ + 'modo_impresion_comprobante' => 'ra', + + //------------------------------------------------------------------ + //---- Parámetros del reporte (comprobante del alumno) ------------- + //------------------------------------------------------------------ + + /** + * Nombre de la institución que se mostrará en el encabezado de página + */ + 'rep_nombre_institucion' => 'INSTITUCIÓN SIU', + + /** + * Determina si se imprime el período de inscripción (ID) junto con las propuestas elegidas + * - 1: Se imprime + * - 0: No se imprime + */ + 'rep_imprime_periodo_insc' => '0', + + /** + * Determina si se imprime tabla para completar resultado de CBC + * - 1: Se imprime + * - 0: No se imprime + */ + 'rep_imprime_CBC' => '0', + + /** + * Determina si se imprime credencial provisoria + * - 1: Se imprime + * - 0: No se imprime + */ + 'rep_imprime_credencial_provisoria' => '0', + + /** + * URL del logo que se imprime en el encabezado de página, relativa a + * la carpeta www/img/ del proyecto. + * IMPORTANTE: el logo debe estar en formato PNG y sin canal alfa + * Si se elimina o comenta esta entrada, no se imprime logo. + */ + 'rep_encabezado_logo' => 'logo2.png', + /** + * Si se desea imprimir el nombre de localidad junto con la fecha, a la altura + * de la firma, consignarla aquí. Si no se desea, dejar un string vacío ('') + * + * Ejemplo de salida (asumiendo fecha actual: 15/11/2012): + * - Completando este valor: Buenos Aires, 15/11/2012 + * - Si no se ingresa valor: 15/11/2012 + */ + 'rep_localidad' => 'Buenos Aires', + + /** + * Arreglo para poner los ítems que se quieran imprimir como avisos en + * la impresión. + * Aparecerán en forma de lista numerada, respetando el orden de definición. + * Se proveen valores de ejemplo. + */ + 'rep_avisos' => [ + 'La presente tiene carácter de DECLARACIÓN JURADA, la cual deberá ser completada personalmente por el firmante.', + //'-- Completar aquí avisos que serán listados en el comprobante --', + //'-- Cada línea de este arreglo aparecerá como un ítem de una lista numerada --', + ], +/** + * Datos de ayuda al alumno + * - email de contacto + * - telefono de contacto + * - url de 3w + * - portal de ayuda + */ + 'datos_ayuda' => [ 'datos_ayuda_email' => '0', + 'datos_ayuda_telefono' => '0', + 'datos_ayuda_url_3w' => '0', + 'datos_ayuda_url_ayuda' => '0', + ] + + ], + ], + /* + * + *tiempo definido para la confirmación del alta de preinscripción (en horas): + */ + 'tiempo_confirmacion_alta_preinscripcion' => 24, + + /** + * Tiempo de expiración del código validación para recuperar contraseña (sga_preinscripcion.codigo_validacion) + * Debe ser un interval de PostgreSQL (ver: https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-interval/) + * - Ejemplos: '30 minutes', '1 hour', '2 hours', '1 day', '3 days', '1 month' + */ + 'ttl_codigo_validacion' => '1 day', + + ], +]; \ No newline at end of file diff --git a/instalacion/login_template.php b/instalacion/login_template.php new file mode 100644 index 0000000..a06f950 --- /dev/null +++ b/instalacion/login_template.php @@ -0,0 +1,90 @@ + [ + 'activo' => (!empty($_SERVER['PERFIL'])) && ($_SERVER['PERFIL'] == 'alumno'), + 'clase' => 'modelo\\autenticacion\\auth_form', + 'parametros' => [ + 'clase_login' => "extension_kernel\\login" + ] + ], + + 'form_documento' => [ + 'activo' => (!empty($_SERVER['PERFIL'])) && ($_SERVER['PERFIL'] == 'alumno'), + 'clase' => 'modelo\\autenticacion\\auth_form_documento', + 'parametros' => [ + 'clase_login' => "extension_kernel\\login" + ] + ], + + 'admin' => [ + 'activo' => (!empty($_SERVER['PERFIL'])) && ($_SERVER['PERFIL'] == 'admin'), + 'clase' => 'modelo\\autenticacion\\auth_admin', + 'parametros' => [ + 'clase_login' => "extension_kernel\\login_admin" + ] + ], + + 'token' => [ + 'activo' => (!empty($_SERVER['PERFIL'])) && ($_SERVER['PERFIL'] == 'alumno'), + 'clase' => 'modelo\\autenticacion\\auth_token', + 'parametros' => [], + ], + + 'cuentas_ext' => [ + /** + * Si desea habilitarse alguno de los servicios de login con servicios externos, + * primero se debe establecer la siguiente directiva en true + */ + 'activo' => false, + 'clase' => 'modelo\\autenticacion\\auth_cuenta_ext', + 'parametros' => [ + 'clase_login' => "extension_kernel\\login", + 'proveedores' => [ + 'google' => [ + /** + * Para habilitar el login mediante Google: + * + establecer 'activo' => true, + * + crear un proyecto en https://console.developers.google.com/ + * + habilitar la Google+ API y obtener los valores de ID y secreto de cliente para completar aquí. + * + En la sección URIs de redireccionamiento completar http:///acceso/index?auth=cuentas_ext&f=google + */ + 'activo' => false, + 'tipo' => 'oauth2', + 'icono' => 'img/login/google.jpg', + 'app_key' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.apps.googleusercontent.com', + 'app_secret' => 'xxxxxxxxxxxxxxxxxxxxxxx', + 'scope' => 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email', + + 'auth_url' => 'https://accounts.google.com/o/oauth2/auth', + 'acc_url' => 'https://accounts.google.com/o/oauth2/token', + 'id_url' => 'https://www.googleapis.com/oauth2/v1/userinfo', + + 'id_path' => 'id', //de que campo saca el id + 'email_path' => 'email', //de que campo saca el mail + ], + + 'facebook' => [ + /** + * Para habilitar el login mediante Facebook, establecer 'activo' => true + * y generar valores para app_key y app_secret como se explica en + * https://repositorio.siu.edu.ar/trac/Portal-G3/wiki/G2/Preinscripcion/2.9.0/DocTecnica/Instalacion/ConfigFacebook + */ + 'activo' => false, + 'tipo' => 'oauth2', + 'icono' => 'img/login/facebook.jpg', + 'app_key' => 'xxxxxxxxxxxxxxx', + 'app_secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + 'scope' => 'email', + + 'auth_url' => 'https://www.facebook.com/dialog/oauth', + 'acc_url' => 'https://graph.facebook.com/oauth/access_token', + 'id_url' => 'https://graph.facebook.com/me', + + 'id_path' => 'id', + 'email_path' => 'email', + ], + ], + ], + ], +]; \ No newline at end of file diff --git a/instalacion/rewrite.conf b/instalacion/rewrite.conf new file mode 100644 index 0000000..433b9c6 --- /dev/null +++ b/instalacion/rewrite.conf @@ -0,0 +1,22 @@ +RewriteEngine On +RewriteCond %{ENV:ACC_ALIAS} ^(.*)$ +RewriteRule .* - [E=ALIAS:%1,NE] + +# punto de entrada de la aplicación +RewriteCond %{REQUEST_URI} .*/index\.php [OR] +# ignoramos el acceso a recursos a través de rs.php +RewriteCond %{REQUEST_URI} .*/rs\.php.* [OR] +RewriteCond %{REQUEST_URI} .*/clearapc\.php.* [OR] +RewriteCond %{REQUEST_URI} .*/favicon\.ico [OR] +# ignoramos el acceso a recursos en las carpetas js, css e img +RewriteCond %{REQUEST_URI} .*/(js|css|img|temp|_comp).* +RewriteRule (.*) - [L,NS] + +# las expresiones a matchear pueden o no empezar con una / dependiendo de si vienen +# a través de un alias o un vhost (estos vienen con una barra adelante). Por eso el ^/? +# http://www.regular-expressions.info/reference.html + +RewriteRule ^/?(.+?)/(.+?)/(.+)/?$ %{ENV:ALIAS}/index.php?__o=$1&__a=$2&__p=$3 [L,NS,QSA] +RewriteRule ^/?(.+?)/(.+?)/?$ %{ENV:ALIAS}/index.php?__o=$1&__a=$2 [L,NS,QSA] +RewriteRule ^/?(.*?)/?$ %{ENV:ALIAS}/index.php?__o=$1 [L,NS,QSA] + diff --git a/instalacion/servicios_web_config_template.php b/instalacion/servicios_web_config_template.php new file mode 100644 index 0000000..8e24bab --- /dev/null +++ b/instalacion/servicios_web_config_template.php @@ -0,0 +1,22 @@ + [ + + 'arai_usuarios' => [ + 'tipo' => 'rest', + 'parametros' => [ + 'base_uri' => '', + 'auth' => ['', '', ''] + ] + ], + 'renaper' => [ + 'tipo' => 'rest', + 'parametros' => [ + 'base_uri' => '',//EJEMPLO: https://URL_RENAPER.gob.ar/ + 'url_header' => '',//EJEMPLO: URL-Method/personData + 'apiKey_personData' => '',//EJEMPLO: 12345678-1234-4321-1234-9s8e6g57h3f4 + ] + ], + + ] +]; \ No newline at end of file diff --git a/phinx.php b/phinx.php new file mode 100644 index 0000000..ea39e81 --- /dev/null +++ b/phinx.php @@ -0,0 +1,29 @@ +get_accesos_bd()); + +return +[ + 'paths' => [ + 'migrations' => '%%PHINX_CONFIG_DIR%%/db/migrations', + 'seeds' => '%%PHINX_CONFIG_DIR%%/db/seeds' + ], + + 'environments' => [ + 'default_database' => 'development', + 'development' => [ + 'name' => $acceso['dbname'], + 'connection' => preinscripcion::admin()->get_db()->get_pdo() + ] + ], + 'version_order' => 'creation' +]; \ No newline at end of file diff --git a/src/pers/composer.json b/src/pers/composer.json new file mode 100644 index 0000000..4b0e199 --- /dev/null +++ b/src/pers/composer.json @@ -0,0 +1,4 @@ +{ + "require": { + } +} \ No newline at end of file diff --git a/src/pers/ejemplo/mensajes/mensajes.es.php b/src/pers/ejemplo/mensajes/mensajes.es.php new file mode 100644 index 0000000..fda53c9 --- /dev/null +++ b/src/pers/ejemplo/mensajes/mensajes.es.php @@ -0,0 +1,35 @@ + 'Administración :: PERSONALIZADO', + + //-------------------------------------------------------------------------- + //---- PERFIL: Alumno ------------------------------------------------------ + //-------------------------------------------------------------------------- + + 'nombre_sistema' => 'SIU-Preinscripción :: PERSONALIZADO', + + //------------------------------------------------------------------------- + //---- Personalización de etiquetas de campos de formulario en reporte ---- + //------------------------------------------------------------------------- + + /** + * Si se desea que la etiqueta de un campo de formulario se vea distinto en + * el PDF respecto a la etiqueta que se muestra en pantalla, agregar aquí + * entradas respetando la siguiente convención: + * + * 'pdf_' => '', + * + * Ej: Si se quiere que para la etiqueta 'nro_documento' se imprima + * 'Nro. documento' en lugar de 'Número de documento' como está definida + * para la salida en pantalla, agregar una entrada: + * + * 'pdf_nro_documento' => 'Nro. documento', + * + */ + 'pdf_nro_documento' => 'Nro. documento', +); \ No newline at end of file diff --git a/src/pers/ejemplo/modelo/manejador_datos.php b/src/pers/ejemplo/modelo/manejador_datos.php new file mode 100644 index 0000000..5460dc8 --- /dev/null +++ b/src/pers/ejemplo/modelo/manejador_datos.php @@ -0,0 +1,107 @@ +datos_formulario = parent::get_datos_formularios_preinsc(); + + /** + * Se obtienen los datos propios almacenados en la tabla anexa y se + * efectúa un merge con los datos por defecto. + * + $id_preinscripcion = kernel::db()->quote($this->get_id_preinscripcion()); + $sql = "SELECT campo1, + campo2 + FROM Uxyz_sga_preinscripcion + WHERE id_preinscripcion = $id_preinscripcion"; + $datos_propios = kernel::db()->consultar_fila($sql); + + $this->datos_formulario = array_merge($this->datos_formulario, $datos_propios); + * + */ + + return $this->datos_formulario; + } + + function set_datos_preinscripcion($datos) + { + /** + * + // Completar este arreglo con los campos agregados en la tabla anexa + $campos_propios = array('campo1', 'campo2'); + + // Se guardan en el arreglo $datos_propios los datos que persisten en la tabla anexa, + // ya que luego serán filtrados por el método "filtrar_datos_preinscripcion" + // ( al invocar parent::set_datos_preinscripcion($datos); ) + $datos_propios = array(); + foreach ($campos_propios as $campo) { + if (isset($datos[$campo])) { + $datos_propios[$campo] = $datos[$campo]; + unset($datos[$campo]); + } + } + + if (!empty($datos_propios)) { + // Se procede a realizar el UPDATE sobre la tabla anexa con los datos propios + $clave = array('id_preinscripcion' => $this->get_id_preinscripcion()); + abm::modificacion('Uxyz__sga_preinsincripcion', $datos_propios, $clave); + } + * + */ + + // Se setean los datos por defecto del SIU + parent::set_datos_preinscripcion($datos); + } +} +?> \ No newline at end of file diff --git a/src/pers/ejemplo/operaciones/_comun/generador_pdf.php b/src/pers/ejemplo/operaciones/_comun/generador_pdf.php new file mode 100644 index 0000000..9252e29 --- /dev/null +++ b/src/pers/ejemplo/operaciones/_comun/generador_pdf.php @@ -0,0 +1,169 @@ +pdf = kernel::localizador()->instanciar('operaciones\\_comun\\preinscripcion_PDF', 'A4'); + + $this->modo_comprobante = kernel::proyecto()->modo_impresion_comprobante(); + if ($this->modo_comprobante == preinscripcion::modo_comp_PROPUESTA) { + $propuestas = $this->obtener_propuestas(); + $this->cant_comprobantes = count($propuestas); + } elseif ($this->modo_comprobante == preinscripcion::modo_comp_RA) { + $propuestas = $this->obtener_propuestas_por_ra(); + $this->cant_comprobantes = count($propuestas); + } else { + $propuestas = $this->obtener_propuestas(); + $this->cant_comprobantes = 1; + } + + $this->inicializar_pagina(); + + for ($i = 0; $i < $this->cant_comprobantes; $i++) { + if ($i > 0) { + // Se genera una nueva página + $this->pdf->ezNewPage(); + } + + $this->encabezado(); + + if ($this->modo_comprobante == preinscripcion::modo_comp_PROPUESTA) { + // Un comprobante por propuesta + $datos = array(); + $datos[] = $propuestas[$i]; + $this->propuestas($datos); + } elseif ($this->modo_comprobante == preinscripcion::modo_comp_RA) { + // Un comprobante por RA + $this->propuestas($propuestas[$i]); + } else { + // Un comprobante por aspirante + $this->propuestas($propuestas); + } + +// if (kernel::proyecto()->get_parametro('rep_imprime_CBC')) { +// $this->CBC(); +// } + + $this->datos_seccion('datos_principales'); + $this->datos_seccion('datos_personales'); + $this->datos_seccion('financiamiento'); + $this->datos_seccion('datos_laborales'); + $this->datos_seccion('datos_familiares'); + $this->datos_seccion('datos_estudios'); + $this->datos_seccion('tecnologia'); + $this->datos_seccion('deportes'); + $this->datos_seccion('idiomas'); + +// $this->avisos(); +// $this->fecha_y_firma(); +// if (kernel::proyecto()->get_parametro('rep_imprime_credencial_provisoria')) { +// $this->credencial_provisoria(); +// } + } + } + + //-------------------------------------------------------------------------- + + /** + * Datos que se imprimen: + * + Código de preinscripción + * + Fecha última modificiación + * + Apellido y nombre + * + Espacio para completar nro. LU + * + Espacio para foto + * + * - Se elimina código QR (se deja comentado) + */ + protected function encabezado() + { + // Datos básicos de la ficha + $codigo_preinsc = kernel::persona()->datos()->get_codigo_preinscripcion(); + $this->pos_y = $this->puntos_cm(26.5); + $texto = kernel::traductor()->trans('rep_ficha_nro') . $codigo_preinsc; + $texto = $this->bold($texto); + $this->pdf->ezSetY($this->pos_y); + $new_y = $this->pdf->ezText($texto, 11); + + // Se calcula el Delta Y para futuros posicionamientos + $this->delta_y = $new_y - $this->pos_y; + + $this->pos_y = $new_y; + + $texto = kernel::traductor()->trans('rep_fecha_ult_modif') . kernel::persona()->datos()->get_campo_comprobante('fecha_ult_modif'); + $texto = $this->bold($texto); + $this->pdf->ezSetY($this->pos_y); + $this->pos_y = $this->pdf->ezText($texto, 11); + + $apellido = kernel::persona()->datos()->get_campo_comprobante('apellido'); + if (strlen($apellido) < 20) { + $texto = $this->bold(kernel::traductor()->trans('apellido') . ': ') . kernel::persona()->datos()->get_campo_comprobante('apellido'); + $this->pdf->ezSetY($this->pos_y + $this->delta_y); + $this->pos_y = $this->pdf->ezText($texto, 11); + } else { + // Apellido largo: en dos líneas + $texto = kernel::traductor()->trans('apellido') . ': '; + $texto = $this->bold($texto); + $this->pdf->ezSetY($this->pos_y + $this->delta_y); + $this->pos_y = $this->pdf->ezText($texto, 11); + + $texto = kernel::persona()->datos()->get_campo_comprobante('apellido'); + $this->pos_y = $this->pdf->ezText($texto, 10); + } + + $nombres = kernel::persona()->datos()->get_campo_comprobante('nombres'); + if (strlen($nombres) < 20) { + $texto = $this->bold(kernel::traductor()->trans('nombres') . ': ') . kernel::persona()->datos()->get_campo_comprobante('nombres'); + $this->pdf->ezSetY($this->pos_y + $this->delta_y); + $this->pos_y = $this->pdf->ezText($texto, 11); + } else { + // Nombre largo: en dos líneas + $texto = kernel::traductor()->trans('nombres') . ': '; + $texto = $this->bold($texto); + $this->pdf->ezSetY($this->pos_y + $this->delta_y); + $this->pos_y = $this->pdf->ezText($texto, 11); + + $texto = kernel::persona()->datos()->get_campo_comprobante('nombres'); + $this->pos_y = $this->pdf->ezText($texto, 10); + } + + $texto = kernel::traductor()->trans('rep_nro_lu') . '..........................'; + $texto = $this->bold($texto); + $this->pdf->ezSetY($this->pos_y + $this->delta_y); + $this->pos_y = $this->pdf->ezText($texto, 11); + + $texto = kernel::traductor()->trans('rep_nro_lu_leyenda'); + $this->pos_y = $this->pdf->ezText($texto, 7); + +// // Código QR +// $outfile_QR = preinscripcion::dir_temp() . '/qr' . kernel::persona()->datos()->get_id_preinscripcion() . '.png'; +// \QRcode::png($codigo_preinsc, $outfile_QR, 'QR_ECLEVEL_H', 5, 0); +// $this->pdf->addPngFromFile($outfile_QR, $this->puntos_cm(11.6), $this->puntos_cm(23), 100); +// unlink($outfile_QR); + + // Espacio para la foto + $this->pdf->rectangle($this->puntos_cm(15.5), $this->puntos_cm(23), $this->puntos_cm($this->dim_cuadro_foto), $this->puntos_cm($this->dim_cuadro_foto)); + + // Línea separadora + $this->pos_y += 1.5 * $this->delta_y; + $this->linea($this->pos_y); + + $this->pos_y += 0.5 * $this->delta_y; + } + +} +?> \ No newline at end of file diff --git a/src/pers/ejemplo/operaciones/_comun/templates/header.twig b/src/pers/ejemplo/operaciones/_comun/templates/header.twig new file mode 100644 index 0000000..2dc575a --- /dev/null +++ b/src/pers/ejemplo/operaciones/_comun/templates/header.twig @@ -0,0 +1,63 @@ +

+ +{% if menu %} + +{% endif %} \ No newline at end of file diff --git a/src/pers/ejemplo/operaciones/censo/idiomas/default.css b/src/pers/ejemplo/operaciones/censo/idiomas/default.css new file mode 100644 index 0000000..675f0ee --- /dev/null +++ b/src/pers/ejemplo/operaciones/censo/idiomas/default.css @@ -0,0 +1,11 @@ +#idiomas .well { + background-color: wheat; +} + +#idiomas select { + width: 540px; +} + +#idiomas .margen-idiomas { + padding-left: 70px; +} \ No newline at end of file diff --git a/src/pers/ejemplo/operaciones/censo/idiomas/default.twig b/src/pers/ejemplo/operaciones/censo/idiomas/default.twig new file mode 100644 index 0000000..7b5a2c2 --- /dev/null +++ b/src/pers/ejemplo/operaciones/censo/idiomas/default.twig @@ -0,0 +1,46 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% set form = this.get_form() %} + {% autoescape false %} + {{ form.encabezado }} +
+
+
+

{{this.get_nombre()|trans}}

+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+
+ + {%if form.hay_visibles_agrupado('conoc_idiomas') %} +
+

{{'conoc_idiomas'|trans}}

+
+
+
+ {{ form.control_group('alu_idioma_ingl') }} + {{ form.control_group('alu_idioma_alem') }} + {{ form.control_group('alu_idioma_fran') }} + {{ form.control_group('alu_idioma_ital') }} + {{ form.control_group('alu_idioma_port') }} + {{ form.control_group('alu_idioma_otro') }} +
+
+
+
+ {% endif %} + +
+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+ + {% endautoescape %} + +{% endblock %} \ No newline at end of file diff --git a/src/pers/ejemplo/operaciones/censo/idiomas/form_idiomas.php b/src/pers/ejemplo/operaciones/censo/idiomas/form_idiomas.php new file mode 100644 index 0000000..e520089 --- /dev/null +++ b/src/pers/ejemplo/operaciones/censo/idiomas/form_idiomas.php @@ -0,0 +1,81 @@ +crear('censo', 'guardar', array('idiomas')); + } + + protected function generar_definicion() + { + $this->set_campo('alu_idioma_ingl', array( + form::label => 'alu_idioma_ingl', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::filtro_params => array('allowempty' => true), + form::elemento => array('tipo' => 'select'), + form::multi_options => opciones::get_niveles_idiomas() + )); + + $this->set_campo('alu_idioma_alem', array( + form::label => 'alu_idioma_alem', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::filtro_params => array('allowempty' => true), + form::elemento => array('tipo' => 'select'), + form::multi_options => opciones::get_niveles_idiomas() + )); + + $this->set_campo('alu_idioma_fran', array( + form::label => 'alu_idioma_fran', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::filtro_params => array('allowempty' => true), + form::elemento => array('tipo' => 'select'), + form::multi_options => opciones::get_niveles_idiomas() + )); + + $this->set_campo('alu_idioma_ital', array( + form::label => 'alu_idioma_ital', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::filtro_params => array('allowempty' => true), + form::elemento => array('tipo' => 'select'), + form::multi_options => opciones::get_niveles_idiomas() + )); + + $this->set_campo('alu_idioma_port', array( + form::label => 'alu_idioma_port', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::filtro_params => array('allowempty' => true), + form::elemento => array('tipo' => 'select'), + form::multi_options => opciones::get_niveles_idiomas() + )); + + $this->set_campo('alu_idioma_otro', array( + form::label => 'alu_idioma_otro', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 20, + form::clase_css => 'input-xxlarge' + )); + } + +} +?> diff --git a/src/pers/ejemplo/www/css/preinscripcion.css b/src/pers/ejemplo/www/css/preinscripcion.css new file mode 100644 index 0000000..5ae8299 --- /dev/null +++ b/src/pers/ejemplo/www/css/preinscripcion.css @@ -0,0 +1,28 @@ +/** + * Se personaliza el color de los títulos (exceptuando h3, que se utiliza como + * título de un agrupado dentro de una sección). + */ +h1, h2, h4, h5, h6 { + color: #6495ED; +} + +/** + * Se personaliza color de fondo de la cabecera. + */ +.brand-nav { + background-color: #E9E9FA; +} + +/** + * Se personaliza el color de la clase well, que define los agrupados. + */ +.well { + background-color: #E9E9FA; +} + +/** + * Se personaliza el estilo del label obligatorio para que se vea en cursiva. + */ +.label-obligatorio { + font-style: italic; +} \ No newline at end of file diff --git a/src/pers/ejemplo/www/img/favicon.ico b/src/pers/ejemplo/www/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..417ba6e8a47e95f0f37b21316d30fda071b06257 GIT binary patch literal 596 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%0A-t!l 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 DUc8G2 literal 0 HcmV?d00001 diff --git a/src/siu/Install.php b/src/siu/Install.php new file mode 100644 index 0000000..37856e7 --- /dev/null +++ b/src/siu/Install.php @@ -0,0 +1,35 @@ +getComposer()->getConfig()->get('vendor-dir'); + $chulupiJs = $vendorDir . '/siu/chulupi-framework/js'; + if (!is_dir($chulupiJs)) { + return; + } + $dst = __DIR__ . '/www/js/lib'; + ManejadorArchivos::borrar_directorio($dst); + ManejadorArchivos::copiar_directorio($chulupiJs, $dst); + + //Agrega fuentes en la carpeta 'fonts' de la librería ezpdf + $fontsToAdd = $vendorDir . '/siu/chulupi-framework/fonts'; + $fontsEzpdf = $vendorDir . '/rebuy/ezpdf/src/ezpdf/fonts'; + ManejadorArchivos::copiar_directorio($fontsToAdd, $fontsEzpdf); + + Composer::fixBugContinue($vendorDir); + Composer::fixBugConstructors($vendorDir); + Composer::fixCountTwig($vendorDir); + Composer::fixArrayKeyExistsObjetos($vendorDir); + Composer::fixDeprecationExcel($vendorDir); + Composer::fixWarningRDI($vendorDir); + + } + +} \ No newline at end of file diff --git a/src/siu/bootstrap.php b/src/siu/bootstrap.php new file mode 100644 index 0000000..2189e27 --- /dev/null +++ b/src/siu/bootstrap.php @@ -0,0 +1,492 @@ +_cargar($consola, $perfil); + } + + static function registrar_autoload() + { + if (!isset(self::$instancia)) { + self::$instancia = new bootstrap(); + } + self::$instancia->configurar_autoloader(true); + } + + private function __construct() + { + + } + + private function _cargar($consola, $perfil) + { + $this->acceso_consola = $consola; + $this->perfil = $perfil; + $this->cargar_config(); + $this->configurar_autoloader(); + $this->configurar_localizador(); + // @todo la carga del proyecto no es necesario si el request es de tipo "carga de recurso web". + $this->cargar_proyecto(); + } + + //-------------------------------------------------------------------------- + + static function get_dir_raiz() + { + return \realpath(static::get_dir_siu() . '/../..'); + } + + static function get_dir_instalacion() + { + return static::get_dir_raiz() . '/instalacion'; + } + + static function get_dir_siu() + { + return dirname(__FILE__); + } + + //-------------------------------------------------------------------------- + // 1) Cargar Configuracion + //-------------------------------------------------------------------------- + + /** + * @todo cache + */ + private function cargar_config() + { + $this->config = $this->cargar_config_archivo(); + if (!$this->acceso_consola) { + $this->bloque_acceso = $this->config['accesos'][$this->get_id_pto_acceso()]; + } + $this->cargar_login_config(); + } + + private function cargar_login_config() + { + $path = static::get_dir_instalacion() . '/login.php'; + if(!file_exists($path)){ + throw new \Exception("No se encuetra el archivo '$path', es obligatorio."); + } + $this->login_config = array(); + $config = config::load($path); + foreach ($config as $service => $conf) { + $this->login_config[$service] = $conf; + } + } + + private function cargar_config_archivo() + { + $path = static::get_dir_instalacion() . '/config.php'; + if (!file_exists($path)) { + echo("No se definió el archivo 'instalacion/config.php'. Puede hacerlo a partir del archivo de configuación de ejemplo 'instalacion/config_template.php'"); + die(); + } + + $config = \SIU\Chulupi\util\config::load($path); + if(!isset($config['global'])) { + throw new \Exception('Error en la configuración, falta bloque \'global\''); + } + + if (!isset($config['global']['accesos'])) { + throw new \Exception("Error en la configuración, falta bloque 'accesos' dentro del bloque 'global'"); + } + + $id_pto_acceso = $this->get_id_pto_acceso(); + + if ((!$this->acceso_consola) && (!isset($config['global']['accesos'][$id_pto_acceso]))) { + throw new \Exception("Error en la configuración, falta bloque '$id_pto_acceso' dentro del bloque 'global::accesos'"); + } + + return $config['global']; + } + + private function test_errores_configuracion() + { + $this->test_error_config_global_activo('google_analytics', 'account'); + } + + /** + * Testea que si existe un parametro activo en true en la entrada de configuración + * testea que todos los parámetros en la lista de $obligatorios estén seteados. + * Si existe la entrada pero no tiene el parametro activo se pone en false + */ + private function test_error_config_global_activo($entrada, $obligatorios) + { + if (! is_array($obligatorios)) { + $obligatorios = array($obligatorios); + } + if (isset($this->config[$entrada])) { + if (! isset($this->config[$entrada]['activo'])) { + $this->config[$entrada]['activo'] = false; + return; + } + if (isset($this->config[$entrada]['activo']) && $this->config[$entrada]['activo'] == true) { + foreach ($obligatorios as $obligatorio) { + if (! isset($this->config[$entrada][$obligatorio]) || empty($this->config[$entrada][$obligatorio])) { + $error = "Error en configuración (instalacion/config.php). La entrada '$entrada' se encuentra activa pero no se incluye el parametro '$obligatorio'"; + echo $error; + die(); + } + } + } + } + } + + /** + * Recupera el perfil asociado al bloque de acceso + * @return string + */ + private function get_perfil() + { + if ($this->acceso_consola) { + return $this->perfil; + } + if (isset($_SERVER['PERFIL'])) { + return $_SERVER['PERFIL']; + } + return null; + } + + /** + * Recupera el perfil asociado al bloque de acceso + * @return string + */ + private function get_id_pto_acceso() + { + if (isset($_SERVER['ID_PTO_ACCESO'])) { + return $_SERVER['ID_PTO_ACCESO']; + } + return null; + } + + /** + * Genera el ACC_ID concatenando el perfil y el ID de pto. de acceso + * + * @return string + */ + private function get_acc_id() + { + if ($this->acceso_consola) { + return 'consola'; + } + if ((isset($_SERVER['PERFIL'])) && (isset($_SERVER['ID_PTO_ACCESO']))) { + return $_SERVER['PERFIL'] . '_' . $_SERVER['ID_PTO_ACCESO']; + } + return null; + } + + /** + * Obtiene todos los accesos de las BD configuradas + * @return array + */ + private function get_accesos_bd() + { + $accesos = array(); + foreach ($this->config['accesos'] as $acceso) { + if (!in_array($acceso['database'], $accesos)) { + $accesos[] = $acceso['database']; + } + } + return $accesos; + } + + private function get_alias() + { + if ($this->acceso_consola) { + return 'SHELL'; + } + if (isset($_SERVER['ACC_ALIAS'])) { + return $_SERVER['ACC_ALIAS']; + } + return null; + } + + //-------------------------------------------------------------------------- + // 2) Autoload y Localizador + //-------------------------------------------------------------------------- + + private function configurar_autoloader($delay_pers = false) + { + $loader = new UniversalClassLoader(); + util::agregar_dir_include_path(static::get_dir_raiz().'/vendor/siu/chulupi-framework'); + if (!$delay_pers && $this->existe_pers()) { + $this->registrar_namespaces_pers($loader); + } + $loader->register(); + + require_once(realpath(static::get_dir_raiz() . '/vendor/siu/rdi/RDILib/RDIAutoload.php')); + require_once(realpath(static::get_dir_raiz() . '/vendor/siu/rdi/RDILib/RDICliente.php')); + require_once(realpath(static::get_dir_raiz() . '/vendor/siu/rdi/RDILib/RDIServicios.php')); + } + + private function existe_pers() + { + return $this->config['usar_personalizaciones'] && isset($this->bloque_acceso['personalizacion']); + } + + private function get_pers() + { + if (!$this->existe_pers()) { + throw new \Exception('No hay una personalizacion definida'); + } + + $pers = $this->bloque_acceso['personalizacion']; + if (is_string($pers)) { + $pers = array($pers); + } + + return $pers; + } + + private function get_pers_activa() + { + if (!$this->existe_pers()) { + throw new \Exception('No hay una personalizacion definida'); + } + + $pers = $this->bloque_acceso['personalizacion']; + return $pers; + } + + private function registrar_namespaces_pers($loader) + { + $pers = $this->get_pers(); + $dir_pers = static::get_dir_raiz() . '/src/pers'; + + foreach ($pers as $plugin) { + $loader->registerNamespace($plugin, $dir_pers); + } + } + + private function configurar_localizador() + { + $dir = static::get_dir_raiz() . '/src'; + kernel::localizador()->nuevo_namespace('siu', $dir, 'original'); + if ($this->existe_pers()) { + $this->config_pers_localizador(); + } + } + + private function config_pers_localizador() + { + $pers = $this->get_pers(); + $dir_pers = static::get_dir_raiz() . '/src/pers'; + + foreach ($pers as $plugin) { + kernel::localizador()->nuevo_namespace($plugin, $dir_pers); + } + } + + //-------------------------------------------------------------------------- + // 3) Proyecto y eventos del kernel + //-------------------------------------------------------------------------- + + private function cargar_proyecto() + { + $ini_file = static::get_dir_raiz() . '/version.ini'; + $datos_version = parse_ini_file($ini_file); + + // VALORES por DEFECTO + if (!isset($this->config['intentos_login_captcha'])) { + $this->config['intentos_login_captcha'] = 3; + } + $produccion = $this->config['produccion']; + $perfil = $this->get_perfil(); + $acc_id = $this->get_acc_id(); + $dir_log = static::get_dir_instalacion() . '/log/' . $acc_id; + $dir_cache = static::get_dir_instalacion() . '/cache/' . $acc_id; + $dir_temp = (isset($this->config['dir_temp'])) ? $this->config['dir_temp'] : static::get_dir_instalacion() . '/temp/' . $acc_id; + $dir_attachment = (isset($this->config['dir_attachment'])) ? $this->config['dir_attachment'] : $dir_temp; + $dir_www_temp = static::get_dir_siu() . '/www/temp'; + $clase_persona = "extension_kernel\\persona"; + $clase_persona_anonima = "extension_kernel\\persona_anonima"; + $clase_login = "extension_kernel\\login"; + $clase_pagina = "extension_kernel\\pagina"; + $clase_login_admin = "extension_kernel\\login_admin"; + + $url_recursos = (isset($this->config['url_recursos'])) ? $this->config['url_recursos'] : $this->get_alias() . '/_comp'; + + $ssl_alcance = (isset($this->config['ssl']['alcance'])) ? $this->config['ssl']['alcance'] : 'none'; + $ssl_redirigir_ssl = (isset($this->config['ssl']['redirigir_ssl'])) ? $this->config['ssl']['redirigir_ssl'] : true; + + $memcached = (isset($this->config['memcached'])) ? $this->config['memcached'] : null; + $smtp = (isset($this->config['smtp'])) ? $this->config['smtp'] : null; + $locale = (isset($this->config['locale'])) ? $this->config['locale'] : 'es'; + + $login_externo = (isset($this->config['login_externo'])) ? $this->config['login_externo'] : null; + $login_config = (isset($this->login_config)) ? $this->login_config : array(); + + $usa_captcha = (isset($this->config['captcha']['activo']) && $this->config['captcha']['activo'] === true); + $intentos_login_captcha = ($usa_captcha) ? $this->config['captcha']['intentos_login'] : 0; + $site_key_captcha = ($usa_captcha) ? $this->config['captcha']['site_key'] : 0; + $secret_key_captcha = ($usa_captcha) ? $this->config['captcha']['secret_key'] : 0; + $opciones_captcha = ($usa_captcha && isset($this->config['captcha']['opciones'])) ? $this->config['captcha']['opciones'] : []; + + $salt = ($this->config['salt']) ? $this->config['salt'] : 'no_salt'; + $salt_admin = ($this->config['salt_admin']) ? $this->config['salt_admin'] : 'no_salt_admin'; + + $ga_params = (isset($this->config['google_analytics'])) ? $this->config['google_analytics'] : array('activo' => false); + + $usa_proxy = (isset($this->config['proxy']['activo']) && $this->config['proxy']['activo'] === true); + $parametros_proxy = ($usa_proxy) ? $this->config['proxy'] : 0; + + $server_name = (isset($this->config['server_name'])) ? $this->config['server_name'] : null; + + $parametros_rdi = (!empty($this->config['rdi']['config'])) ? $this->config['rdi']['config'] : array(); + + $accesos_bd = $this->get_accesos_bd(); + + $pers = ($this->existe_pers()) ? $this->get_pers_activa() : ''; + + $personalizaciones = []; + if ($this->existe_pers()) { + $personalizaciones = $this->get_pers(); + } + + $log_nivel_default = Logger::DEBUG; + // Si es producción + if ($produccion) { + $log_nivel_default = Logger::ERROR; + } + + // Logs + $log_activo = (isset($this->config['log']['activo'])) ? $this->config['log']['activo'] : false; + $log_nivel_cli = (isset($this->config['log']['nivel_consola'])) ? $this->config['log']['nivel_consola'] : $log_nivel_default; + $log_nivel_web = (isset($this->config['log']['nivel_web'])) ? $this->config['log']['nivel_web'] : $log_nivel_default; + $url_identidad_genero = (isset($this->config['url_identidad_genero'])) ? $this->config['url_identidad_genero'] : die('Tiene que setear em cofig.php el url_identidad_genero'); + $email_ayuda = (isset($this->config['email_ayuda']) && !empty($this->config['email_ayuda'])) ? $this->config['email_ayuda'] : die("Tiene que setear en 'instalacion/config.php' el parámetro 'email_ayuda'"); + + // Tiempo de expiración del código validación para recuperar contraseña (sga_preinscripcion.codigo_validacion) + $ttl_codigo_validacion = (isset($this->config['ttl_codigo_validacion'])) ? $this->config['ttl_codigo_validacion'] : '1 day'; + + $proyecto = new extension_kernel\proyecto(array( + 'db' => $this->bloque_acceso['database'] ?? [], + 'accesos' => $this->config['accesos'], + 'accesos_bd' => $accesos_bd, + 'alias' => $this->get_alias(), + 'produccion' => $produccion, + 'personalizacion' => $pers, + 'personalizaciones' => $personalizaciones, + 'sesion_maxtime' => $this->config['sesion_maxtime'], + 'sesion_timeout' => $this->config['sesion_timeout'], + 'url_recursos' => $url_recursos, + 'memcached' => $memcached, + 'dir_log' => $dir_log, + 'dir_cache' => $dir_cache, + 'dir_temp' => $dir_temp, + 'dir_www_temp' => $dir_www_temp, + 'dir_instalacion' => static::get_dir_instalacion(), + 'salt' => $salt, + 'salt_admin' => $salt_admin, + 'dir_attachment' => $dir_attachment, + 'clase_persona' => $clase_persona, + 'clase_persona_anonima' => $clase_persona_anonima, + 'clase_login' => $clase_login, + 'clase_login_admin' => $clase_login_admin, + 'clase_pagina' => $clase_pagina, + 'usa_captcha' => $usa_captcha, + 'intentos_login_captcha' => $intentos_login_captcha, + 'captcha_site_key' => $site_key_captcha, + 'captcha_secret_key' => $secret_key_captcha, + 'captcha_opciones' => $opciones_captcha, + 'usa_proxy' => $usa_proxy, + 'parametros_proxy' => $parametros_proxy, + 'server_name' => $server_name, + 'parametros_rdi' => $parametros_rdi, + 'barra_dev' => + isset($this->config['log']['activo']) && + $this->config['log']['activo'] == true && + isset($this->config['log']['barra_dev']) && + $this->config['log']['barra_dev'] == true, + 'smtp' => $smtp, + 'ga_params' => $ga_params, + 'ssl_alcance' => $ssl_alcance, + 'ssl_redirigir_ssl' => $ssl_redirigir_ssl, + 'clave_long_minima' => (isset($this->bloque_acceso['clave_long_minima'])) ? $this->bloque_acceso['clave_long_minima'] : 6, + 'carga_turno_presentacion' => (isset($this->bloque_acceso['carga_turno_presentacion'])) ? $this->bloque_acceso['carga_turno_presentacion'] : false, + 'modo_impresion_comprobante' => (isset($this->bloque_acceso['modo_impresion_comprobante'])) ? $this->bloque_acceso['modo_impresion_comprobante'] : 'ra', + 'formateo_campos' => (isset($this->bloque_acceso['formateo_campos'])) ? $this->bloque_acceso['formateo_campos'] : 'libre', + 'locale' => $locale, + 'login_externo' => $login_externo, + 'login_config' => $login_config, + //---- Parametros de reporte --------------------------------------- + 'rep_encabezado_logo' => (isset($this->bloque_acceso['rep_encabezado_logo'])) ? $this->bloque_acceso['rep_encabezado_logo'] : '', + 'rep_nombre_institucion' => (isset($this->bloque_acceso['rep_nombre_institucion'])) ? $this->bloque_acceso['rep_nombre_institucion'] : '', + 'rep_imprime_CBC' => (isset($this->bloque_acceso['rep_imprime_CBC'])) ? $this->bloque_acceso['rep_imprime_CBC'] : false, + 'rep_imprime_periodo_insc' => (isset($this->bloque_acceso['rep_imprime_periodo_insc'])) ? $this->bloque_acceso['rep_imprime_periodo_insc'] : false, + 'rep_avisos' => (!empty($this->bloque_acceso['rep_avisos'])) ? $this->bloque_acceso['rep_avisos'] : array(), + 'rep_imprime_credencial_provisoria' => (isset($this->bloque_acceso['rep_imprime_credencial_provisoria'])) ? $this->bloque_acceso['rep_imprime_credencial_provisoria'] : false, + 'rep_localidad' => (isset($this->bloque_acceso['rep_localidad'])) ? $this->bloque_acceso['rep_localidad'] : 'Buenos Aires', + //---- Logo del sistema -------------------------------------------- + 'logo_pagina' => isset($this->config['logo_pagina']) ? $this->config['logo_pagina'] : 'logo.png', + 'version_sistema' => $datos_version['version'], + //---- Acceso a datos de G3 ---------------------------------------- + 'modo_consultas_g3' => (!empty($this->bloque_acceso['modo_consultas_g3'])) ? $this->bloque_acceso['modo_consultas_g3'] : 'consultas_bd', + 'db_guarani' => (isset($this->bloque_acceso['modo_consultas_g3']) && ($this->bloque_acceso['modo_consultas_g3'] == 'consultas_bd')) ? $this->bloque_acceso['database_guarani'] : null, + 'log_activo' => $log_activo, + 'log_nivel_cli' => $log_nivel_cli, + 'log_nivel_web' => $log_nivel_web, + //--------validacion del link confirmacion de correo + 'tiempo_confirmacion_alta_preinscripcion' => isset($this->config['tiempo_confirmacion_alta_preinscripcion']) ? $this->config['tiempo_confirmacion_alta_preinscripcion'] : '24', + 'url_identidad_genero' => $url_identidad_genero, + 'email_ayuda' => $email_ayuda, + 'datos_ayuda' =>(!empty($this->bloque_acceso['datos_ayuda'])) ? $this->bloque_acceso['datos_ayuda'] : array(), + 'ttl_codigo_validacion'=> $ttl_codigo_validacion, + )); + + try { + $eventos = kernel::localizador()->instanciar('extension_kernel\eventos_aplicacion'); + } catch (\Exception $e) { + die('Debe crear la clase eventos_aplicacion a partir del archivo eventos_aplicacion_template.php. Mensaje: "' . $e->getMessage() . '"'); + } + + // Registro del proyecto + kernel::registrar_proyecto($proyecto, $eventos); + kernel::proyecto()->set_encoding('iso-8859-1'); + kernel::proyecto()->set_bloque_acceso($perfil); + + // Inicializacion del LOG + if (isset($this->config['log']['activo']) && + $this->config['log']['activo'] == true) { + kernel::log()->set_activo(true); + if (isset($this->config['log']['nivel'])) { + try { + kernel::log()->set_nivel($this->config['log']['nivel']); + } catch (\Exception $e) { + die($e->getMessage()); + } + } + } + + AdminCache::set_manejador_memoria(AdminCache::manejador_memoria_apc); + } + +} \ No newline at end of file diff --git a/src/siu/conf/acceso/acc_admin.xml b/src/siu/conf/acceso/acc_admin.xml new file mode 100644 index 0000000..ce54dc3 --- /dev/null +++ b/src/siu/conf/acceso/acc_admin.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/siu/conf/acceso/acc_alumno.xml b/src/siu/conf/acceso/acc_alumno.xml new file mode 100644 index 0000000..8fbead1 --- /dev/null +++ b/src/siu/conf/acceso/acc_alumno.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/siu/conf/acceso/acc_anonimo_admin.xml b/src/siu/conf/acceso/acc_anonimo_admin.xml new file mode 100644 index 0000000..06b1630 --- /dev/null +++ b/src/siu/conf/acceso/acc_anonimo_admin.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/siu/conf/acceso/acc_anonimo_alumno.xml b/src/siu/conf/acceso/acc_anonimo_alumno.xml new file mode 100644 index 0000000..5db75e1 --- /dev/null +++ b/src/siu/conf/acceso/acc_anonimo_alumno.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/siu/errores/error_preinscripcion.php b/src/siu/errores/error_preinscripcion.php new file mode 100644 index 0000000..8164229 --- /dev/null +++ b/src/siu/errores/error_preinscripcion.php @@ -0,0 +1,15 @@ + \ No newline at end of file diff --git a/src/siu/errores/error_preinscripcion_alumno_g3.php b/src/siu/errores/error_preinscripcion_alumno_g3.php new file mode 100644 index 0000000..a1288bb --- /dev/null +++ b/src/siu/errores/error_preinscripcion_alumno_g3.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/src/siu/errores/error_preinscripcion_clave.php b/src/siu/errores/error_preinscripcion_clave.php new file mode 100644 index 0000000..7afd730 --- /dev/null +++ b/src/siu/errores/error_preinscripcion_clave.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/src/siu/errores/error_preinscripcion_cnx_bd.php b/src/siu/errores/error_preinscripcion_cnx_bd.php new file mode 100644 index 0000000..836b797 --- /dev/null +++ b/src/siu/errores/error_preinscripcion_cnx_bd.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/src/siu/errores/error_preinscripcion_login.php b/src/siu/errores/error_preinscripcion_login.php new file mode 100644 index 0000000..efa1efe --- /dev/null +++ b/src/siu/errores/error_preinscripcion_login.php @@ -0,0 +1,25 @@ +error_code = $error_code; + } + + function get_mensaje() + { + return $this->error_code; + } + + function clave_expiro() + { + return $this->error_code == -3; + } + +} +?> diff --git a/src/siu/errores/error_preinscripcion_login_externo.php b/src/siu/errores/error_preinscripcion_login_externo.php new file mode 100644 index 0000000..869eca8 --- /dev/null +++ b/src/siu/errores/error_preinscripcion_login_externo.php @@ -0,0 +1,9 @@ + diff --git a/src/siu/errores/error_preinscripcion_mail_no_validado.php b/src/siu/errores/error_preinscripcion_mail_no_validado.php new file mode 100644 index 0000000..0fff461 --- /dev/null +++ b/src/siu/errores/error_preinscripcion_mail_no_validado.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/src/siu/errores/error_preinscripcion_persona_g3.php b/src/siu/errores/error_preinscripcion_persona_g3.php new file mode 100644 index 0000000..d4e3005 --- /dev/null +++ b/src/siu/errores/error_preinscripcion_persona_g3.php @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/src/siu/errores/error_preinscripcion_token.php b/src/siu/errores/error_preinscripcion_token.php new file mode 100644 index 0000000..8c3168e --- /dev/null +++ b/src/siu/errores/error_preinscripcion_token.php @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/src/siu/errores/error_preinscripcion_usuario.php b/src/siu/errores/error_preinscripcion_usuario.php new file mode 100644 index 0000000..2f6cfa2 --- /dev/null +++ b/src/siu/errores/error_preinscripcion_usuario.php @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/src/siu/extension_kernel/chulupi_logger_rdi.php b/src/siu/extension_kernel/chulupi_logger_rdi.php new file mode 100644 index 0000000..dfe22d9 --- /dev/null +++ b/src/siu/extension_kernel/chulupi_logger_rdi.php @@ -0,0 +1,60 @@ +log = kernel::log(); + } + + function set_activo($activo) + { + $this->_activo = $activo; + } + + function add_debug($etiqueta, $valor_a_dumpear, $tabla=false) + { + + if (! $this->_activo) { + return; + } + + $this->log->add_debug('DEBUG RDI', $etiqueta); + if (is_array($valor_a_dumpear)) { + if (!$tabla) { + $this->log->add_debug('DEBUG RDI', $valor_a_dumpear); + } else { + $this->log->add_debug('DEBUG RDI', var_export($valor_a_dumpear, true)); + } + } else { + if(is_object($valor_a_dumpear)) { + $this->log->add_debug('DEBUG RDI', var_export($valor_a_dumpear, true)); + } else { + $this->log->add_debug('DEBUG RDI', $valor_a_dumpear); + } + } + } + + function add_error($excepcion) + { + if (! $this->_activo){ + return; + } + $this->log->add_error($excepcion); + } +} \ No newline at end of file diff --git a/src/siu/extension_kernel/controlador_preinscripcion.php b/src/siu/extension_kernel/controlador_preinscripcion.php new file mode 100644 index 0000000..2fb420c --- /dev/null +++ b/src/siu/extension_kernel/controlador_preinscripcion.php @@ -0,0 +1,127 @@ +getPost($key) : kernel::url()->get_param($key); + return u::sanitize_value($value, $type, $options); + } + + protected function force_ssl() + { + if ((kernel::proyecto()->get_ssl_alcance() == ruteador::SSL_ALCANCE_NONE) || (!kernel::proyecto()->get_ssl_redirigir_ssl())) { + return; + } + + if (!isset($_SERVER['HTTPS']) || $_SERVER["HTTPS"] != "on") { + header("Location: " . kernel::url()->self(true)); + die; + } + } + + //-------------------------------------------------------------------------- + //---- RECAPTCHA ----------------------------------------------------------- + //-------------------------------------------------------------------------- + + function usa_captcha() + { + return kernel::proyecto()->get('usa_captcha'); + } + + protected function accion__recaptcha() + { + $error = null; + $public_key = kernel::proyecto()->get_captcha_public_key(); + echo $this->recaptcha_get_html($public_key, $error); + $this->finalizar_request(); + } + + protected function recaptcha_get_html($public_key, $error) + { + $html = ''; + $html .= ''; + $use_ssl = (kernel::proyecto()->get_ssl_alcance() == 'all') ? true : false; + $html .= recaptcha_get_html($public_key, $error, $use_ssl); + $html .= ''; + return $html; + } + + protected function check_recaptcha() + { + $remote_addr = $_SERVER["REMOTE_ADDR"]; + $recaptcha_challenge_field = $this->get_post('recaptcha_challenge_field'); + $recaptcha_response_field = $this->get_post('recaptcha_response_field'); + $private_key = kernel::proyecto()->get_captcha_private_key(); + + $parametros_extra = array(); + if (kernel::proyecto()->usa_proxy()) { + $parametros_extra['parametros_proxy'] = kernel::proyecto()->get_parametros_proxy(); + } + + if ($recaptcha_response_field) { + $resp = recaptcha_check_answer($private_key, $remote_addr, $recaptcha_challenge_field, $recaptcha_response_field, $parametros_extra); + if ($resp->is_valid) { + return true; + } else { + return false; + } + } + + return false; + } + + //-------------------------------------------------------------------------- + + protected function guardar_archivos_subidos($indice, $path) + { + if (!isset($_FILES[$indice])) { + return array(); + } + + $descriptor = $_FILES[$indice]; + + $archivo = array( + 'nombre' => $descriptor['name'], + 'tmp_name' => $descriptor['tmp_name'], + 'error' => isset($_FILES['error']) ? $_FILES['error'] : '', + 'size' => $descriptor['size'] + ); + + $nombres = array(); + + if (!is_uploaded_file($archivo['tmp_name']) || $archivo['error'] > 0) { + throw new ErrorKernel('Error subiendo archivo'); + } + + $nombre_fs = $this->get_nombre_archivo_subido($archivo['nombre']); + $destino = "$path/$nombre_fs"; + move_uploaded_file($archivo['tmp_name'], $destino); + $nombres = array( + 'nombre_fs' => $nombre_fs, + 'nombre_original' => $archivo['nombre'], + 'size' => $descriptor['size'] + ); + + return $nombres; + } + +} \ No newline at end of file diff --git a/src/siu/extension_kernel/eventos_aplicacion.php b/src/siu/extension_kernel/eventos_aplicacion.php new file mode 100644 index 0000000..3d833bb --- /dev/null +++ b/src/siu/extension_kernel/eventos_aplicacion.php @@ -0,0 +1,49 @@ +add_debug('ALIAS', kernel::proyecto()->get_alias()); + if (kernel::proyecto()->get('barra_dev')) { + header('guarani-log: ' . kernel::log()->get_id()); + } + } + + function fin() + { + + } + + function pre_ini__sesion() + { + + } + + function ini__conexion($db) + { + + } + + function fin__conexion($db) + { + + } + + function fin__request() + { + + } + + function fin__response() + { + + } + +} +?> \ No newline at end of file diff --git a/src/siu/extension_kernel/log.php b/src/siu/extension_kernel/log.php new file mode 100644 index 0000000..a315774 --- /dev/null +++ b/src/siu/extension_kernel/log.php @@ -0,0 +1,146 @@ +info_catalogo[] = $acceso; + } + + function ejecutar_control($punto, $control, $comportamiento, $medio, $resultado, $mensaje, $tiempo) + { + $cc['punto'] = $punto; + $cc['control'] = $control; + $cc['comportamiento'] = $comportamiento; + $cc['medio'] = $medio; + $cc['resultado'] = $resultado; + $cc['mensaje'] = $mensaje; + $cc['tiempo'] = $tiempo; + $this->info_controles[] = $cc; + } + + function get_medio($tipo_cache) + { + switch ($tipo_cache) { + case admin_cache::tipo_memoria : + return self::CATALOGO_MEDIO_MEMCACHE; + break; + case admin_cache::tipo_sesion : + return self::CATALOGO_MEDIO_SESSION; + break; + case admin_cache::tipo_archivo : + return self::CATALOGO_MEDIO_ARCHIVO; + break; + default: + throw new error_preinscripcion('LOG: medio incorrecto'); + } + } + + function generar_resumen_extendido() + { + $salida = ""; + foreach ($this->info_catalogo as $acceso) { + $salida .= "--REXCAT_C<{$acceso['clase']}>" . + "MET<{$acceso['metodo']}>" . + "MED<{$acceso['medio']}>" . + "A<{$acceso['accion']}>" . + "T<{$acceso['tiempo']}>--\n"; + } + foreach ($this->info_controles as $control) { + $salida .= "--REXCON_P<{$control['punto']}>" . + "CC<{$control['control']}>" . + "COMP<{$control['comportamiento']}>" . + "MED<{$control['medio']}>" . + "RES<{$control['resultado']}>" . + "TIEMPO<{$control['tiempo']}>" . + "MENS<{$control['mensaje']}>--\n"; + } + return $salida; + } + + static function get_resumen($id) + { + $path = kernel::proyecto()->get_dir_log() . '/' . $id . '.log'; + $log = file_get_contents($path); + $match = array(); + $ereg = "/F<(.*?)>:E<(.*?)>:W<(.*?)>:T<(.*?)>:M<(.*?)>/"; + preg_match_all($ereg, $log, $match, PREG_SET_ORDER); + if (isset($match[0]) && is_array($match[0]) && isset($match[0][0])) { + $data = array('parse' => true, + 'end' => $match[0][1], + 'exception' => $match[0][2], + 'warning' => $match[0][3], + 'time' => $match[0][4], + 'memory' => $match[0][5], + 'session'=>round(strlen( serialize( $_SESSION ) ) / 1024, 2), // en kbytes + ); + // CATALOGO + $match2 = array(); + $ereg = "/REXCAT_C<(.*?)>MET<(.*?)>MED<(.*?)>A<(.*?)>T<(.*?)>/"; + preg_match_all($ereg, $log, $match2, PREG_SET_ORDER); + $accesos = array(); + foreach ($match2 as $acc) { + $accesos[] = array('clase' => $acc[1], + 'metodo' => $acc[2], + 'medio' => $acc[3], + 'accion' => $acc[4], + 'tiempo' => $acc[5]); + } + $data['catalogo'] = $accesos; + // CONTROLES + $match2 = array(); + $ereg = "/REXCON_P<(.*?)>CC<(.*?)>COMP<(.*?)>MED<(.*?)>RES<(.*?)>TIEMPO<(.*?)>MENS<(.*?)>/"; + preg_match_all($ereg, $log, $match2, PREG_SET_ORDER); + $accesos = array(); + $controles = array(); + foreach ($match2 as $acc) { + $controles[] = array('punto' => $acc[1], + 'control' => $acc[2], + 'comportamiento' => $acc[3], + 'medio' => $acc[4], + 'resultado' => $acc[5], + 'tiempo' => $acc[6], + 'mensaje' => $acc[7]); + } + $data['controles'] = $controles; + } else { + $data = array('parse' => false); + } + return $data; + } + +} +?> \ No newline at end of file diff --git a/src/siu/extension_kernel/login.php b/src/siu/extension_kernel/login.php new file mode 100644 index 0000000..93ab974 --- /dev/null +++ b/src/siu/extension_kernel/login.php @@ -0,0 +1,28 @@ +login($id, $clave); + return $usuario; + } + + function autenticar_login_externo($datos) + { + $id = $datos['id']; + $proveedor = $datos['proveedor']; + $login = 'login_' . $proveedor; + $usuario = preinscripcion::usuario()->$login($id); + return $usuario; + } + +} +?> \ No newline at end of file diff --git a/src/siu/extension_kernel/login_admin.php b/src/siu/extension_kernel/login_admin.php new file mode 100644 index 0000000..f0c9ad2 --- /dev/null +++ b/src/siu/extension_kernel/login_admin.php @@ -0,0 +1,18 @@ +login($usuario, $clave); + } + +} +?> \ No newline at end of file diff --git a/src/siu/extension_kernel/pagina.php b/src/siu/extension_kernel/pagina.php new file mode 100644 index 0000000..e00c4d2 --- /dev/null +++ b/src/siu/extension_kernel/pagina.php @@ -0,0 +1,63 @@ +trans('nombre_sistema'); + $titulo = $this->get_etiqueta('titulo'); + if (!empty($titulo)) { + $nombre .= ' :: ' . $this->get_etiqueta('titulo'); + } + return $nombre; + } + + protected function get_contexto_template() + { + $contexto = parent::get_contexto_template(); + + // Logo + $logo = kernel::proyecto()->get_parametro('logo_pagina'); + $contexto['url_img_logo'] = kernel::vinculador()->vinculo_img($logo); + + $contexto['url_inicio'] = kernel::vinculador()->crear_home(); + $contexto['urls_preinscripcion_css'] = kernel::vinculador()->vinculo_css('preinscripcion'); + $contexto['personalizacion'] = kernel::proyecto()->get_personalizacion_activa(); + $contexto['personalizaciones'] = kernel::proyecto()->get_personalizaciones(); + $contexto['url_img_logo_celular'] = kernel::vinculador()->vinculo_recurso('img/logo-celular.png'); + $contexto['mash_personalizado'] = count($contexto['urls_preinscripcion_css']) > 1; + $contexto['url_favicon'] = kernel::vinculador()->vinculo_img('favicon.ico'); + $contexto['version'] = kernel::traductor()->trans('version') . ' ' . kernel::proyecto()->get_version_sistema(); + + if (!kernel::sesion()->abierta()) { + return $contexto; + } + + $contexto['persona']['email'] = kernel::persona()->get_mail(); + $contexto['persona']['url_logout'] = kernel::vinculador()->crear('acceso', 'logout'); + $contexto['es_produccion'] = kernel::proyecto()->get_produccion(); + $contexto['log_activo'] = kernel::log()->esta_activo(); + $contexto['barra_dev'] = kernel::proyecto()->get('barra_dev'); + $contexto['log_id'] = kernel::log()->get_id(); + $contexto['url_log'] = kernel::vinculador()->crear_sin_chequeo('logger'); + $contexto['url_log_info'] = kernel::vinculador()->crear_sin_chequeo('logger', 'ajax_info_log'); + $contexto['ga_params'] = kernel::proyecto()->get_ga_params(); + + return $contexto; + } + + function get_etiqueta($id) + { + if (isset($this->etiquetas[$id])) { + return $this->etiquetas[$id]; + } else { + return ''; + } + } + +} \ No newline at end of file diff --git a/src/siu/extension_kernel/persona.php b/src/siu/extension_kernel/persona.php new file mode 100644 index 0000000..9bd847a --- /dev/null +++ b/src/siu/extension_kernel/persona.php @@ -0,0 +1,104 @@ +set_perfil_activo($this->get_perfil()); + $this->id_usuario = $id_usuario; + } + + function get_perfil() + { + return $_SERVER['PERFIL']; + } + + function get_id() + { + return $this->id_usuario; + } + + function set_email($email) + { + kernel::sesion()->set('__preinscripcion_email', $email); + } + + function get_mail() + { + return kernel::sesion()->get('__preinscripcion_email'); + } + + function get_locale() + { + return 'es_AR'; + } + + function get_perfiles() + { + return array($this->get_perfil()); + } + + function perfil() + { + return $this->perfil; + } + + function set_perfil_activo($id_perfil) + { + $this->perfil = factory_perfil::instancia()->construir($id_perfil); + } + + //-------------------------------------------------------------------------- + //---- Datos preinscripción ------------------------------------------------ + //-------------------------------------------------------------------------- + + function get_id_persona() + { + $perfil = $this->get_perfil(); + if ($perfil == preinscripcion::perfil_alumno) { + return $this->datos()->get_id_persona(); + } + return null; + } + + function get_nombre() + { + $perfil = $this->get_perfil(); + if ($perfil == preinscripcion::perfil_alumno) { + $datos = $this->datos()->get_datos_preinscripcion(); + if ((!empty($datos['apellido'])) && (!empty($datos['nombres']))) { + $nombre = $datos['apellido'] . ' ' . $datos['nombres']; + } else { + $nombre = ''; + } + return $nombre; + } + return ''; + } + + /** + * + * @return manejador_datos + */ + function datos() + { + if (!isset($this->manejador_datos)) { + $this->manejador_datos = kernel::localizador()->instanciar('modelo\manejador_datos', $this->id_usuario); + } + return $this->manejador_datos; + } + +} +?> \ No newline at end of file diff --git a/src/siu/extension_kernel/persona_anonima.php b/src/siu/extension_kernel/persona_anonima.php new file mode 100644 index 0000000..9747e97 --- /dev/null +++ b/src/siu/extension_kernel/persona_anonima.php @@ -0,0 +1,16 @@ +perfil = FactoryPerfil::instancia()->construir('anonimo_' . $_SERVER['PERFIL']); + } + +} +?> \ No newline at end of file diff --git a/src/siu/extension_kernel/proyecto.php b/src/siu/extension_kernel/proyecto.php new file mode 100644 index 0000000..f3b5539 --- /dev/null +++ b/src/siu/extension_kernel/proyecto.php @@ -0,0 +1,250 @@ +get_alias(); + return "siu_sesspreinscripcion_$alias"; + } + + function memcached() + { + if (!isset($this->m)) { + $conf_memcached = $this->get('memcached'); + if (empty($conf_memcached)) { + return null; + } + + $this->m = new \Memcached(); + $servers = array(); + foreach ($conf_memcached as $key => $data) { + $servers[] = array( + $data['host'], $data['port'], $data['peso'] + ); + } + $this->m->addServers($servers); + } + return $this->m; + } + + /** + * Retorna todos los paths donde hay archivos de mensajes + * @param type $dominio + * @param type $locale + * @return type + */ + protected function get_paths_mensajes($dominio, $locale) + { + $path_relativo = "mensajes/mensajes.$locale.php"; + return kernel::localizador()->encontrar_archivos($path_relativo); + } + + function get_mensajes($dominio, $locale) + { + $apc_enabled = extension_loaded('apcu'); + $id_pto_acceso = $_SERVER['ID_PTO_ACCESO']; + $apc_key = "siu__preinscripcion__mensajes__$id_pto_acceso"; + + if ($this->get_produccion() && $apc_enabled && \apcu_fetch($apc_key) !== false) { + $mensajes = \apcu_fetch($apc_key); + return $mensajes; + } + + $paths = $this->get_paths_mensajes('mensajes', $locale); + + if (empty($paths)) { // puede ser vacío si se pide una locale especifica; por ej: es_AR + return array(); + } + + $mensajes = array(); + foreach ($paths as $path) { + $mensajes = array_merge($mensajes, config::load($path)); + } + + if ($this->get_produccion()) { // hay que guardar en apc + \apcu_store($apc_key, $mensajes); + } + + return $mensajes; + } + + function get_default_locale() + { + return kernel::proyecto()->get('locale'); + } + + function get_dir_attachment() + { + $dir = $this->get('dir_attachment') . '/' . $this->get_bloque_acceso(); + if (!is_dir($dir)) { + manejador_archivos::crear_arbol_directorios($dir); + } + return $dir; + } + + function get_www_temp() + { + $dir = $this->get('dir_www_temp'); + if (! is_dir($dir)) { + manejador_archivos::crear_arbol_directorios($dir); + } + return $dir; + } + + function get_clave_long_minima() + { + if ($this->tiene('clave_long_minima')) { + return $this->get('clave_long_minima'); + } + return 8; + } + + function get_cant_max_propuestas_insc() + { + return g3::parametros()->get_valor('pre_cant_max_propuestas_preinsc'); + } + + function carga_turno_presentacion() + { + if (!$this->tiene('carga_turno_presentacion')) { + return false; + } + return $this->get('carga_turno_presentacion'); + } + + function modo_impresion_comprobante() + { + if (!$this->tiene('modo_impresion_comprobante')) { + return false; + } + return $this->get('modo_impresion_comprobante'); + } + + function get_formateo_campos() + { + if ($this->tiene('formateo_campos')) { + return $this->get('formateo_campos'); + } + return 'libre'; + } + + function get_parametro($param) + { + if ($this->tiene($param)) { + return $this->get($param); + } + return ''; + } + + function get_version_sistema() + { + return $this->get_parametro('version_sistema'); + } + + function usa_rdi() + { + return g3::parametros()->get_valor('usa_repositorio_digital') == comunes::si; + } + + function get_parametros_rdi() + { + return $this->get('parametros_rdi'); + } + + /** + * + * @return \siu\modelo\clienteRDI + */ + function rdi() + { + if (!isset(self::$rdi)){ + self::$rdi = kernel::localizador()->instanciar('modelo\\clienteRDI'); + } + return self::$rdi->get_cliente(); + } + + //-------------------------------------------------------------------------- + + function set_punto_acceso($punto_acceso) + { + $this->punto_acceso = $punto_acceso; + } + + function get_clase_login() + { + switch ($this->punto_acceso) { + case preinscripcion::perfil_admin : + return $this->get('clase_login_admin'); + case preinscripcion::perfil_gerencial : + /** + * @todo: clase login del perfil gerencial + */ + return $this->get('clase_login_admin'); + case preinscripcion::perfil_alumno : + return $this->get('clase_login'); + default : + return $this->get('clase_login'); + } + } + + function get_accesos_bd() + { + return $this->get('accesos_bd'); + } + + + function get_modo_consultas_g3() + { + return $this->get('modo_consultas_g3'); + } + + function get_parametros_db_gestion() + { + return $this->get('db_guarani'); + } + + function get_personalizaciones() + { + return $this->get('personalizaciones'); + } + + function get_url_identidad_genero() + { + return $this->get('url_identidad_genero'); + } + + function get_email_ayuda() + { + return $this->get('email_ayuda'); + } + + function get_mat_validacion_renaper() + { + return g3::parametros()->get_valor('mat_validacion_renaper'); + } + + /** + * @return string Tiempo de expiración del código validación para recuperar contraseña (sga_preinscripcion.codigo_validacion) + */ + function get_ttl_codigo_validacion() + { + return $this->get_parametro('ttl_codigo_validacion'); + } + +} \ No newline at end of file diff --git a/src/siu/extension_kernel/servicios_externos_preinscripcion.php b/src/siu/extension_kernel/servicios_externos_preinscripcion.php new file mode 100644 index 0000000..8f3a96c --- /dev/null +++ b/src/siu/extension_kernel/servicios_externos_preinscripcion.php @@ -0,0 +1,35 @@ + \ No newline at end of file diff --git a/src/siu/extension_kernel/vista_preinscripcion.php b/src/siu/extension_kernel/vista_preinscripcion.php new file mode 100644 index 0000000..6e4d485 --- /dev/null +++ b/src/siu/extension_kernel/vista_preinscripcion.php @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/src/siu/func_util.php b/src/siu/func_util.php new file mode 100644 index 0000000..221d71b --- /dev/null +++ b/src/siu/func_util.php @@ -0,0 +1,343 @@ + array('campo' => 'cero'), 1 => array('campo' => 'uno')) ---> array('cero', 'uno') + * + */ +function aplanar_matriz($matriz, $campo = null) +{ + $aplanado = array(); + foreach ($matriz as $clave => $arreglo) { + if ($campo === null) { + $aplanado[$clave] = current($arreglo); + } elseif (isset($arreglo[$campo])) { + $aplanado[$clave] = $arreglo[$campo]; + } + } + return $aplanado; +} + +//------------------------------------------------------------------------------ +//---- Funciones de rest ------------------------------------------------------- +//------------------------------------------------------------------------------ + +/** + * Transforma un json o arreglo en utf8 a un arreglo en latin1 + */ +function rest_decode($datos) +{ + if (is_string($datos)) { + $datos = json_decode($datos, true); + } //es un json ya decodificada guzzle->response->json + return array_a_latin1($datos); +} + +/** + * Transforma un arreglo en latin1 a un json en utf8 + */ +function rest_encode($datos) +{ + $array = array_a_utf8($datos); + return json_encode($array); +} + +function array_a_latin1($arreglo) +{ + $salida = array(); + foreach ($arreglo as $clave => $valor) { + if (is_array($valor)) { + $salida[$clave] = array_a_latin1($valor); + } elseif (is_string($valor)) { + $salida[$clave] = utf8_decode($valor); + } else { + $salida[$clave] = $valor; + } + } + return $salida; +} + +function array_a_utf8($datos) +{ + if (is_string($datos)) { + return utf8_encode($datos); + } + if (!is_array($datos)) { + return $datos; + } + $ret = array(); + foreach ($datos as $i => $d) { + $ret[$i] = array_a_utf8($d); + } + return $ret; +} + +//------------------------------------------------------------------------------ +//---- Funciones de log -------------------------------------------------------- +//------------------------------------------------------------------------------ + +function klog($var) +{ + static $_log_count = 0; + SIU\Chulupi\kernel::log()->add_debug("LOG #$_log_count", $var); + $_log_count++; +} + +function klog2($nombre, $var) +{ + SIU\Chulupi\kernel::log()->add_debug($nombre, $var); +} + +//------------------------------------------------------------------------------ +//---- Funciones de fechas ----------------------------------------------------- +//------------------------------------------------------------------------------ + +function convertir_fecha_formato_base($fecha) +{ + $date = \date_parse_from_format('d/m/Y', $fecha); + return $date['year'] . '-' . $date['month'] . '-' . $date['day']; +} + +function convertir_fecha_formato_frontend($fecha) +{ + $date = \date_parse_from_format('Y-m-d', $fecha); + return $date['day'] . '/' . $date['month'] . '/' . $date['year']; +} + +/** + * Obtiene una nueva fecha, a partir de $fecha desplazada en $cant, + * ya sean días, meses o años. + * Por defecto, año. + * + */ +function get_fecha_desplazada($fecha, $cant, $parte = 'anio') +{ + $fecha = SIU\Chulupi\kernel::db()->quote($fecha); + + switch ($parte) { + case 'dia' : + $parte = 'day'; + break; + case 'mes': + $parte = 'month'; + break; + case 'anio': + $parte = 'year'; + break; + } + + $sql = "SELECT ($fecha::date + interval '$cant $parte')::date as fecha"; + + $rs = SIU\Chulupi\kernel::db()->consultar_fila($sql); + return $rs['fecha']; +} + +/** + * Obtiene una nueva fecha, a partir de $fecha desplazada en $cant, + * ya sean horas, días, meses o años. + * Por defecto, año. + * + */ +function get_fecha_hora_desplazada($fecha, $cant, $parte = 'anio') +{ + $fecha = SIU\Chulupi\kernel::db()->quote($fecha); + + switch ($parte) { + case 'dia' : + $parte = 'day'; + break; + case 'mes': + $parte = 'month'; + break; + case 'anio': + $parte = 'year'; + break; + case 'hora': + $parte = 'hours'; + break; + } + + $sql = "SELECT ($fecha::TIMESTAMP + interval '$cant $parte')::TIMESTAMP as fecha"; + + $rs = SIU\Chulupi\kernel::db()->consultar_fila($sql); + return $rs['fecha']; +} + +function fecha_es_menor($fecha1, $fecha2, $igual = false, $timestamp = false) +{ + if (!empty($fecha1) && !empty($fecha2)) { + $fecha1 = SIU\Chulupi\kernel::db()->quote($fecha1); + $fecha2 = SIU\Chulupi\kernel::db()->quote($fecha2); + $tipo = $timestamp ? 'TIMESTAMP' : 'DATE'; + $igual ? $operador = ' <= ' : $operador = ' < '; + $sql = "SELECT ($tipo $fecha1 $operador $tipo $fecha2) as es_menor"; + $rs = SIU\Chulupi\kernel::db()->consultar_fila($sql); + return $rs['es_menor']; + } +} + +function fecha_es_menor_a_fecha_actual($fecha1, $igual = false) +{ + if (!empty($fecha1)) { + $fecha1 = SIU\Chulupi\kernel::db()->quote($fecha1); + $igual ? $operador = ' <= ' : $operador = ' < '; + $sql = "SELECT (DATE $fecha1 $operador CURRENT_DATE) as es_menor"; + $rs = SIU\Chulupi\kernel::db()->consultar_fila($sql); + return $rs['es_menor']; + } +} + +function fecha_es_mayor_a_fecha_actual($fecha1, $igual = false) +{ + if (!empty($fecha1)) { + $fecha1 = SIU\Chulupi\kernel::db()->quote($fecha1); + $igual ? $operador = ' >= ' : $operador = ' > '; + $sql = "SELECT (DATE $fecha1 $operador CURRENT_DATE) as es_mayor"; + $rs = SIU\Chulupi\kernel::db()->consultar_fila($sql); + return $rs['es_mayor']; + } +} + +function fecha_siguiente($fecha) +{ + if (!empty($fecha)) { + $fecha = SIU\Chulupi\kernel::db()->quote($fecha); + $sql = "SELECT CAST((DATE $fecha + interval '1 DAYS') AS DATE) as result"; + $rs = SIU\Chulupi\kernel::db()->consultar_fila($sql); + return $rs['result']; + } +} + +function dia_de_la_semana($fecha) +{ + if (!empty($fecha)) { + $fecha = SIU\Chulupi\kernel::db()->quote($fecha); + $sql = "SELECT EXTRACT (DOW FROM DATE $fecha) AS result"; + $rs = SIU\Chulupi\kernel::db()->consultar_fila($sql); + return $rs['result']; + } +} + +/** + * Valida fecha en formato 'd/m/Y'. + * + * @param string $fecha Fecha en el formato 'd/m/Y'. + * + * @return boolean TRUE si la fecha es válida, FALSE en caso contrario. + */ +function es_fecha_valida($fecha) +{ + $dateTime = \DateTime::createFromFormat(\siu\modelo\comunes::formato_fecha_visual_php, $fecha); + // Si la fecha es inválida + if ($dateTime === false) { + return false; + } + + $fragmentos = explode("/", $fecha); + $day = $fragmentos[0]; + $month = $fragmentos[1]; + $year = $fragmentos[2]; + // Si la fecha es inválida, ej: 30/02/2023 es inválida, tiene en cuenta años bisiestos + if (!checkdate($month, $day, $year)) { + return false; + } + + return true; +} +//------------------------------------------------------------------------------ +//---- Funciones de hora ------------------------------------------------------- +//------------------------------------------------------------------------------ + +function hora_es_menor($hora1, $hora2, $igual = false) +{ + if (!empty($hora1) && !empty($hora2)) { + $hora1 = SIU\Chulupi\kernel::db()->quote($hora1); + $hora2 = SIU\Chulupi\kernel::db()->quote($hora2); + $tipo = 'TIME'; + $igual ? $operador = ' <= ' : $operador = ' < '; + $sql = "SELECT ($tipo $hora1 $operador $tipo $hora2) as es_menor"; + $rs = SIU\Chulupi\kernel::db()->consultar_fila($sql); + return $rs['es_menor']; + } +} + +function minutos_entre_horas($hora1, $hora2) +{ + if (!empty($hora1) && !empty($hora2)) { + $hora1 = SIU\Chulupi\kernel::db()->quote($hora1); + $hora2 = SIU\Chulupi\kernel::db()->quote($hora2); + $sql = "SELECT EXTRACT (EPOCH FROM (TIME $hora1 - TIME $hora2) ) / 60 AS minutos"; + $rs = SIU\Chulupi\kernel::db()->consultar_fila($sql); + return $rs['minutos']; + } +} + +function sumar_minutos_a_hora($hora1, $minutos) +{ + if (!empty($hora1)) { + $hora1 = SIU\Chulupi\kernel::db()->quote($hora1); + $sql = "SELECT (TIME $hora1 + interval '$minutos MINUTES') as result"; + $rs = SIU\Chulupi\kernel::db()->consultar_fila($sql); + return $rs['result']; + } +} + +function convertir_hora_formato_frontend($hora) +{ + $datos_hora = explode(':', $hora); + return $datos_hora[0] . ':' . $datos_hora[1]; +} + +//------------------------------------------------------------------------------ +//---- Funciones de cadenas ---------------------------------------------------- +//------------------------------------------------------------------------------ + +function a_minusculas($cadena) +{ + $cadena = trim($cadena); + return mb_convert_case($cadena, MB_CASE_LOWER, SIU\Chulupi\kernel::proyecto()->get_encoding()); +} + +function a_mayusculas($cadena) +{ + $cadena = trim($cadena); + return mb_convert_case($cadena, MB_CASE_UPPER, SIU\Chulupi\kernel::proyecto()->get_encoding()); +} + +function capitalizar($cadena) +{ + return mb_convert_case(a_minusculas($cadena), MB_CASE_TITLE, SIU\Chulupi\kernel::proyecto()->get_encoding()); +} + +function formatear($cadena) +{ + $formateo = SIU\Chulupi\kernel::proyecto()->get_formateo_campos(); + switch ($formateo) { + case 'mayusculas': + $salida = a_mayusculas($cadena); + break; + case 'capitalizar': + $salida = capitalizar($cadena); + break; + case 'libre': + default: + $salida = $cadena; + break; + } + return $salida; +} + +//------------------------------------------------------------------------------ +//---- Funciones de imágenes --------------------------------------------------- +//------------------------------------------------------------------------------ + +/** + * Determina si un archivo en un path consignado es una imagen + * + * @param string $path + * @return boolean + */ +function es_imagen($path) +{ + return (@is_array(getimagesize($path))); +} \ No newline at end of file diff --git a/src/siu/mensajes/mensajes.es.php b/src/siu/mensajes/mensajes.es.php new file mode 100644 index 0000000..4804968 --- /dev/null +++ b/src/siu/mensajes/mensajes.es.php @@ -0,0 +1,1338 @@ + 'Administración', + + 'header.menu.formulario_preinscripcion' => 'Configuración de formulario', + 'header.menu.config_form' => 'Configuración de campos de formulario de Preinscripción', + 'header.menu.copiar_config_form' => 'Copiar configuración', + 'header.menu.importar_config_form' => 'Importar configuración de otra base', + 'header.menu.limpiar_cache' => 'Borrar caché APC', + 'header.menu.perfil_datos' => 'Perfil de datos', + 'header.menu.admin_turnos' => 'Turnos', + 'header.menu.tests' => 'Pruebas', + 'header.menu.test_mail' => 'Probar correo', + 'header.menu.test_cnx' => 'Probar conexión con G3', + + 'login_admin_título' => 'Identificación', + 'tit_cambio_clave_default' => 'Cambio de clave default', + + 'admin_login_error_clave' => 'El usuario no existe o la clave es incorrecta', + + 'admin_error_user_vacio' => 'Debe ingresar un nombre de usuario', + 'admin_error_user_repetido' => 'Ya existe un administrador con ese nombre de usuario', + + 'cambiar_clave' => 'Cambiar clave', + 'desc_cambio_clave_default' => 'Para ingresar al sistema, es necesario cambiar la clave por defecto', + 'nueva_clave' => 'Nueva clave', + 'repetir_nueva_clave' => 'Repetir nueva clave', + 'cambio_clave_admin_ok' => 'Clave cambiada exitosamente', + + 'configuracion_campos' => 'Configuración de campos de formulario', + + 'pantalla' => 'PANTALLA', + 'seccion' => 'SECCIÓN', + + 'campo' => 'Campo', + 'etiqueta' => 'Etiqueta', + 'visible' => 'Visible', + 'obligatorio' => 'Obligatorio', + 'se_imprime' => 'Se imprime', + 'genera_reporte' => 'Genera reporte', + + 'tit_limpiar_cache' => 'Borrado de caché APC', + 'limpiar_cache' => 'Limpiar caché', + 'msj_limpieza_cache' => 'Presionar el botón para comenzar el proceso de borrado de caché.', + 'cache_borrado_ok' => 'La caché APC ha sido borrada exitosamente.', + 'cache_borrado_error' => 'Ocurrió un problema en el proceso de borrado. Una forma alternativa de borrar la caché APC es reiniciando el servidor Apache.', + + //---- Copiar configuración ------------------------------------------------ + 'tit_copiar_config' => 'Copiar configuración de campos de formulario', + + 'tipo_propuesta_origen' => 'Tipo de propuesta origen', + 'tipo_propuesta_destino' => 'Tipo de propuesta destino', + 'copiar' => 'Copiar', + 'error_tipos_iguales' => 'Los tipos seleccionados deben ser distintos', + 'copia_config_ok' => 'La configuración ha sido copiada exitosamente', + 'copia_config_error' => 'Ha ocurrido un error durante la copia de configuración', + + //---- Importar configuración de otra base --------------------------------- + 'tit_import_config' => 'Importar configuración de otra base', + + 'import.db.dbname' => 'Base de datos origen', + 'import.db.host' => 'Host', + 'import.db.port' => 'Puerto', + 'import.db.pdo_user' => 'Usuario', + 'import.db.pdo_passwd' => 'Password', + 'importar' => 'Importar', + 'importar_msj' => 'Importar a la base %1%, corriendo en %2%:%3%, la configuración de campos de formulario definida en la siguiente base:', + + 'import_config_ok' => 'Configuración importada con éxito.', + 'import_error_bd' => 'Se ha producido un error de conexión. Por favor, verificar los parámetros ingresados.', + 'import_config_error' => 'Se han detectado errores en los datos ingresados.', + + //---- Configuración de perfil de datos ------------------------------------ + 'perfil_datos.titulo' => 'Configuración de perfil de datos', + 'perfil_datos.info' => '
    ' + . '
  • Con esta operación se puede restringir la oferta de propuestas según los filtros especificados.
  • ' + . '
  • Si para algún grupo no se especifican restricciones, es equivalente a que estén todos habilitados.
  • ' + . '
  • Después de guardar, podrá verse en el esquema de la derecha la oferta resultante.
  • ' + . '
  • Tener en cuenta que si no hay propuestas o ubicaciones disponibles, el aspirante no tendrá opciones para preinscribirse en esa línea.
  • ' + . '
', + 'perfil_datos.ras' => 'Responsables académicas', + 'perfil_datos.tipos_propuesta' => 'Tipos de propuestas', + 'perfil_datos.propuestas' => 'Propuestas', + 'perfil_datos.tipos_ubicaciones' => 'Ubicaciones', + 'perfil_datos.sin_propuestas' => '-- Sin propuestas --', + 'perfil_datos.sin_ubicaciones' => '-- Sin ubicaciones --', + 'perfil_datos.todos' => 'Seleccionar todos', + 'perfil_datos.ninguno' => 'Deseleccionar todos', + + //---- Configuración de turnos --------------------------------------------- + 'turnos.error_asignacion_turno' => 'No pudo asignarse el turno solicitado. Por favor, intentá nuevamente.', + + 'tit_admin_turnos' => 'Administración de turnos', + + 'turnos.descripcion' => 'Se generarán turnos automáticamente siguiendo la configuración que se complete a continuación:', + + 'turno.msg_config_error' => 'Se han encontrado errores en la configuración', + 'turno.cant_turnos' => 'Se han generado %1% turnos con las configuraciones ingresadas. Quedan %2% disponibles.', + + 'turnos.sin_configuracion' => 'No se han configurado turnos.', + + 'turnos.periodos_configurados' => 'Períodos configurados', + 'turnos.th.fecha_desde' => 'Fecha desde', + 'turnos.th.fecha_hasta' => 'Fecha hasta', + 'turnos.th.ras' => 'Responsables Académicas', + + 'turnos.agregar_periodo' => 'Agregar período', + + 'turnos.fechas' => 'Fechas', + 'turnos.intervalo_atencion' => 'Intervalos de atención', + 'turnos.intervalo_atencion_descr' => 'Se debe ingresar al menos un intervalo de atención', + 'turnos.intervalo_1' => 'Intervalo #1', + 'turnos.intervalo_2' => 'Intervalo #2', + 'turnos.opciones' => 'Opciones', + 'turnos.dias_atencion' => 'Días de atención', + 'turno.ayuda_hora_hasta' => 'La hora hasta no se incluye en la generación de turnos. Opera como límite de rango en modo menor estricto.', + 'turnos.ras' => 'Responsables Académicas', + 'turnos.fecha_inicio' => 'Inicio', + 'turnos.hora_inicio' => 'Hora desde', + 'turnos.fecha_fin' => 'Fin', + 'turnos.hora_fin' => 'Hora hasta', + 'turnos.minutos_intervalo' => 'Intervalo entre turnos', + 'turnos.cant_operadores' => 'Cantidad de operadores', + 'turno.atiende_feriados' => 'Generar turnos para días feriados y no laborables', + 'turno.atiende_feriados_ayuda' => 'Si se marca esta opción, se generarán turnos INCLUSO para las fechas cargadas en la tabla "sga_diasnohabiles"', + 'turno.atiende_lunes' => 'Lunes', + 'turno.atiende_martes' => 'Martes', + 'turno.atiende_miercoles' => 'Miércoles', + 'turno.atiende_jueves' => 'Jueves', + 'turno.atiende_viernes' => 'Viernes', + 'turno.atiende_sabado' => 'Sábado', + 'turno.atiende_domingo' => 'Domingo', + + 'turnos.generar_turnos' => 'Generar turnos', + + 'turnos.error_fecha_fin' => 'No puede ser anterior a la fecha desde', + 'turnos.error_hora_fin' => 'No puede ser anterior a la hora desde', + 'turnos.error_hora_intervalos' => 'El intervalo #2 debe comenzar luego de la finalización del intervalo #1', + 'turnos.error_intervalo' => 'El menor intervalo entre turnos permitido es un (1) minuto', + 'turnos.error_operadores' => 'La cantidad de operadores debe ser mayor o igual que uno (1)', + 'turnos.error_dias_atencion' => 'Debe seleccionarse al menos un día de atención', + 'turnos.error_solapamiento' => 'Las fechas ingresadas se solapan con otro período de turnos de alguna de las Resp. Acad. seleccionadas', + 'turnos.error_ras' => 'Debe seleccionarse al menos una Responsable Académica', + + //---- Testear configuración de correo ------------------------------------- + 'tit_test_mail' => 'Probar correo', + 'test_mail' => 'Probar correo', + 'config_mail' => 'Configuración de correo', + 'mail_de_prueba' => 'E-mail de prueba', + + 'config_mail_default' => 'Este es el usuario de ejemplo.
La configuración debe ser modificada en la sección \'smtp\' del archivo config.php', + 'desc_datos_mail' => 'Esta es la configuración del servidor de e-mail, según consta en la sección \'smtp\' del archivo config.php:', + + 'mail_from' => 'From', + 'mail_from_name' => 'From name', + 'mail_host' => 'Host', + 'mail_seguridad' => 'Seguridad', + 'mail_auth' => 'Autenticación', + 'mail_port' => 'Puerto', + 'mail_usuario' => 'Usuario', + 'mail_clave' => 'Clave', + 'mail_reply_to' => 'Responder a', + 'mail_smtp_debug' => 'SMTP Debug', + 'mail_auth_type' => 'Tipo autenticación', + 'mail_oauth2_email' => 'Email para XOAUTH2', + 'mail_oauth2_client_id' => 'ID de cliente para XOAUTH2', + 'mail_oauth2_client_secret' => 'Secreto de cliente para XOAUTH2', + 'mail_oauth2_refresh_token' => 'Refresh Token para XOAUTH2', + + 'prueba_mail' => 'Ingresar una dirección de correo para intentar enviar un e-mail de prueba', + 'enviar_mail' => 'Enviar e-mail', + + 'asunto_email_prueba' => 'SIU-Preinscripción :: Prueba de envío exitosa', + 'cuerpo_email_prueba' => 'Este es un e-mail enviado automáticamente por el sistema SIU-Preinscripción para verificar que la configuración del servidor de correo es correcta.', + + 'mensaje_prueba_enviado' => 'Se ha enviado un mensaje de prueba a la casilla ingresada. Por favor, verificar si ha sido recibido correctamente.', + 'mensaje_prueba_error' => 'El mensaje de prueba no ha podido ser enviado. Por favor, revisar los parámetros de configuración del servidor de correo.', + + //---- Prueba de conexión con entidades G3 --------------------------------- + + 'test_cnx.titulo' => 'Prueba de conexión con G3', + + 'test_cnx.desc_datos_cnx' => 'Esta es la configuración de la conexión con la base de datos de Guaraní 3, según consta en el archivo config.php:', + 'test_cnx.vendor' => 'Vendor', + 'test_cnx.dbname' => 'Base', + 'test_cnx.schema' => 'Esquema', + 'test_cnx.host' => 'Host', + 'test_cnx.port' => 'Puerto', + 'test_cnx.pdo_user' => 'Usuario', + 'test_cnx.pdo_pass' => 'Password', + + //---- Módulo de turnos: e-mail de recordatorio ---------------------------- + 'turnos.recordatorio.asunto' => 'SIU-Preinscripción :: Recordatorio de turnos', + 'turnos.recordatorio.cuerpo' => '%nombre%,

+ Te recordamos que se encuentra próximo tu turno para presentar la documentación de inscripción a propuestas:
+
    +
  • Fecha: %fecha%
  • +
  • Hora: %hora%
  • +
  • Ventanilla: %operador%
  • +
+ Propuestas en las que te preinscribiste:
+ %propuestas% + Recordá llevar impreso el comprobante y los requisitos solicitados.

+ Te esperamos!', + + //-------------------------------------------------------------------------- + //---- PERFIL: Alumno ------------------------------------------------------ + //-------------------------------------------------------------------------- + + 'nombre_sistema' => 'SIU-Preinscripción', + 'tit_acceso' => 'Acceso al sistema', + 'tit_alta' => 'Crear nuevo usuario', + 'header.menu.censo' => 'Datos personales', + 'header.menu.impresion' => 'Imprimir formulario', + 'header.bienvenido' => 'Bienvenido', + 'header.cerrar_sesion' => 'Cerrar sesión', + 'ingresa_tus_datos' => 'Ingresá tus datos', + 'email' => 'E-mail', + 'email_rep' => 'Repetir e-mail', + 'clave' => 'Clave', + 'repetir_clave' => 'Reingresá la clave', + 'ingresar' => 'Ingresar', + + 'usuario_nuevo' => '¿Usuario nuevo en el sistema?', + 'crear_nuevo_usuario' => 'Registrate', + + 'olvidaste_clave' => '¿No recordás tu contraseña?', + 'recuperar_clave' => 'Recuperar acceso', + + 'login.con_email' => 'Ingresá con tu Email', + 'login.con_documento' => 'Ingresá con tu Documento', + 'login.con_cuentas_ext' => 'Ingresá con Cuentas Externas', + 'login.msg_alta_se' => 'El usuario creado en esta pantalla quedará asociado a la cuenta de %1% %2%', + 'login.se.aclaracion_clave' => 'La clave solicitada es para el ingreso tradicional al sistema. No necesariamente tiene que ser la misma que en %1%.', + 'login.sep_msg' => 'O ingresá con:', + 'login.msg_alta_se' => 'El usuario creado en esta pantalla quedará asociado a la cuenta de %1% %2%', + 'login.se.aclaracion_clave' => 'La clave solicitada es para el ingreso tradicional al sistema. No necesariamente tiene que ser la misma que en %1%.', + + 'login.error.incorporado_g3' => 'Ya sos alumno de la Institución. En adelante, utilizá la interfaz de autogestión para tus trámites.', + 'login.error.preinsc_copiadas' => 'Las preinscripciones que no hiciste efectivas podés gestionarlas con la operación Trámites » Preinscripción a Propuestas', + + 'login.error.campo_obligatorio' => 'El campo %campo% es obligatorio.', + 'login.error.campo_invalido' => 'El campo %campo% es inválido.', + 'login.error.usuario_no_encontrado' => 'No se encontró usuario con el número de documento %documento%.', + + 'generar_usuario' => 'Generar usuario', + 'aceptar' => 'Aceptar', + 'cancelar' => 'Cancelar', + 'volver' => 'Volver', + 'limpiar' => 'Limpiar', + 'error' => 'Error', + 'buscar' => 'Buscar', + 'seleccionar' => 'Seleccionar', + 'ocultar' => 'Ocultar', + 'version' => 'Versión', + + 'pagina' => 'Página', + 'de' => 'de', + + 'form_sin_cambios' => 'No hay cambios para guardar', + 'busqueda_sin_resultados' => 'La búsqueda no arrojó resultados', + + 'titulo_datos_personales' => 'SIU-Preinscripción', + 'guardar_datos_personales' => 'Guardar', + + 'texto_portada' => 'Antes de comenzar el proceso de preinscripción asegurate de tener + una dirección de correo electrónico válida y que funcione correctamente.

+ Si ya te preinscribiste, podés ingresar para completar tus datos escribiendo + el e-mail y la clave que ingresaste en el proceso de preinscripción.

+ Tu preinscripción no está completa hasta que presentes toda la documentación + y el formulario obtenido por este sistema, firmado por vos, en Sección Alumnos de la Facultad.', + + 'confirmar' => 'Confirmar', + 'operacion_invalida' => 'Operación inválida', + + //---- Error configuración SMTP -------------------------------------------- + 'asoc_se.titulo' => 'Autenticación externa', + 'asoc_se.nombre_operacion' => 'Asociación con servicios de autenticación externos', + 'asoc_se.descripcion' => 'La casilla de e-mail %1%, correspondiente a tu usuario de %2%, ya se encuentra registrada para otro usuario de Preinscripción.

+ Si sos el usuario asociado a ese e-mail, por favor ingresá tu clave de Preinscripción para poder acceder con %2%.

+ Si no recordás tu clave de Preinscripción podés recuperarla mediante el siguiente link:', + 'asoc_se.error_clave' => 'La clave ingresada no coincide con la registrada en el sistema', + 'asoc_se.cuenta_vinculada_ok' => 'Tu cuenta de Preinscripción ha sido vinculada con %1%. Ahora podrás ingresar por este medio o por el método de acceso tradicional.', + + + //---- Error configuración SMTP -------------------------------------------- + 'smpt_no_configurado' => 'El servidor de correo no ha sido configurado todavía. Es un requisito indispensable para el funcionamiento del sistema.', + + //---- Error versiones de sistema y BD no compatibles ---------------------- + 'versiones_no_compatibles' => 'Las versiones del sistema y de la base de datos no son compatibles', + + //---- Error de configuración de conexión a la BD -------------------------- + 'error_cnx_bd' => 'Error de conexión con la base de datos.', + + //---- Impresión de formulario --------------------------------------------- + 'imprimir' => 'Imprimir', + 'header_imprimir' => 'Imprimir formulario', + //'faltan_completar_campos' => 'Te faltan completar los siguientes campos del formulario:', + 'impresion_campos_faltantes' => 'Para finalizar la preinscripción es necesario que completes todos los campos obligatorios.', + 'impresion_campos_faltantes_y_turno' => 'Para finalizar la preinscripción es necesario que completes todos los campos obligatorios y que selecciones un turno para concurrir a presentar la documentación.', + 'cambios_desde_impresion' => 'ATENCIÓN: has realizado modificaciones desde la última impresión. Deberás generar un nuevo comprobante para que el mismo sea válido al momento de presentarlo.', + + //---- Registro de nuevo usuario ------------------------------------------- + 'msj_advertencia_alta' => 'ATENCIÓN: Los datos que cargues en esta pantalla serán utilizados para validar tu identidad y acceder a tu cuenta. Por favor verificá que los mismos sean correctos antes de generar el Usuario.', + 'datos_usuario' => 'Datos del usuario', + 'mensaje_alta_iniciada' => 'Tus datos se grabaron correctamente.
+ Para activar tu acceso a Preinscripción, ingresá a tu cuenta de correo y seguí los pasos indicados en el mail que te enviamos.
+ Si no lo recibiste, puede estar en la carpeta de correo no deseado (SPAM).
+ Si no, podés solicitar el reenvío del mail clickeando en este link.', + 'mensaje_clave_reset' => 'Tu clave fue actualizada correctamente.
+ Ya podés utilizarla para ingresar al sistema.', + 'mensaje_primer_acceso' => 'Tu cuenta ha sido confirmada exitosamente. Ahora podés elegir la propuesta. Luego, completá los datos solicitados, + y cuando termines imprimí el formulario para presentar en la Sección Alumnos de tu Facultad.', + 'no_existen_periodos' => 'No existen períodos de inscripción definidos', + 'alta.error.alumno_g3' => 'Ya sos alumno de la Institución. Si querés preinscribirte a una nueva Propuesta, utilizá la operación Trámites » Preinscripción a Propuestas de la interfaz de autogestión.', + 'alta.error.alumno_g3_ayuda' => '
Si tenés problemas con la preinscripción podés utilizar la %link% para contactarte con la universidad.', + 'alta.error.email_duplicado' => 'Ya existe el email en la base de datos ', + 'alta.error.docente_g3' => 'Sos docente de la Institución. Si querés preinscribirte a una nueva Propuesta, utilizá la operación Trámites » Preinscripción a Propuestas del perfil Preinscripción de la interfaz de autogestión.', + 'alta.error.persona_g3' => 'Ya estás registrado en la Institución. Si querés preinscribirte a una nueva Propuesta, utilizá la operación Trámites » Preinscripción a Propuestas de la interfaz de autogestión.', + 'alta.error.perfil_valido_g3' => 'Ya estás registrado en la Institución. Si querés preinscribirte a una nueva Propuesta, utilizá la operación Trámites » Preinscripción a Propuestas de la interfaz de autogestión.', + + //---- Mail ---------------------------------------------------------------- + 'remitente_email_crear_usuario' => 'SIU-Preinscripción', + 'asunto_email_crear_usuario' => 'Creación de usuario de SIU-Preinscripción', + 'cuerpo_email_crear_usuario' => 'Este e-mail fue enviado para iniciar el proceso de activación de la cuenta de Preinscripción asociada con la dirección de e-mail %mail%. + Por favor, verificá que los datos ingresados sean correctos:
+
    +
  • Apellido: %apellido%
  • +
  • Nombres: %nombres%
  • +
  • Nacionalidad: %nacionalidad%
  • +
  • País emisor del documento: %pais_documento%
  • +
  • Tipo de Documento: %tipo_documento%
  • +
  • Nro. Documento: %nro_documento%
  • +
+ Si los datos son correctos, entonces seguí este link para completar el alta en Preinscripción: %link%
+ Si clickear el link no funciona intentá copiarlo y pegarlo en la barra de direcciones de tu navegador.
+ Si no solicitaste este mail, simplemente ignoralo. +

Guardá este código para recuperar la cuenta en caso que lo necesites: %nro_preincripcion%

', + 'asunto_email_recuperar_clave' => 'Asistencia de recuperación de clave - SIU-Preinscripción', + 'cuerpo_email_recuperar_clave' => 'Este mail fue enviado para iniciar el proceso de recuperación de la cuenta asociada + con la dirección de mail %mail%.
+ Para reestablecer tu clave por favor seguí este link: %link%
+ Si clickear el link no funciona intenta copiarlo y pegarlo en la barra de direcciones.
+ Si no solicitaste este mail simplemente ignoralo.', + 'se_envio_email_a' => 'Se ha enviado un e-mail a %1%', + 'login_error_formato_mail' => 'El formato del e-mail es inválido', + 'login_error_clave_invalida' => 'El %campo% no existe o la clave es incorrecta. +
Si olvidaste tu clave podes solicitar una nueva', + 'email_no_validado' => 'Todavía no confirmaste cuenta, por favor chequeá tu correo. Si no recibiste el e-mail de confirmación, puede estar en la carpeta de correo no deseado. Si no, clickeando aquí te lo reenviaremos.', + 'error_recaptcha' => 'El captcha no es válido', + 'error_csrf' => 'Se ha producido un error de seguridad, por favor intentá nuevamente.', + 'recuperar_clave' => 'olvide mi contraseña', + 'descripcion_recuperar_clave' => 'Ingresá tu cuenta de correo y recibirás un mail con instrucciones para reestablecer tu clave', + 'no_se_envio_email_recuperar_clave' => 'No se pudo enviar el mail para recuperar la clave', + 'descripcion_mail_no_existente_recuperar_clave' => 'Lamentablemente no tenemos registrado los datos que especificaste', + + 'descripcion_mail_recuperar_clave' => 'Para ingresar a tu cuenta seguí las instrucciones que enviamos a tu e-mail (%1%).', + 'descripcion_nueva_clave' => 'Ingresá tu nueva clave y podrás ingresar al sistema.', + 'nueva_clave' => 'Nueva clave', + 'repetir_nueva_clave' => 'Repetir nueva clave', + 'no_se_puede_recuperar_clave' => 'No se puede reestablecer la clave', + 'desc_no_se_puede_recuperar_clave' => 'Intenta copiar y pegar la dirección desde tu e-mail, o repetir el proceso de recuperación de clave.', + 'acceso.token_expirado' => 'No se puede reestablecer la contraseña debido a que el token ha expirado', + 'acceso.desc_token_expirado' => 'Volvé a reestablecer la contraseña nuevamente.', + 'crear_usuario' => 'Crear nuevo usuario', + + 'error_emails_no_coinciden' => 'Las casillas de e-mail ingresadas no coinciden', + 'error_clave_no_coinciden' => 'Las claves ingresadas no coinciden', + 'error_documento_no_coinciden' => 'Los números de documento ingresados no coinciden', + 'error_clave_igual_usuario' => 'La clave no puede ser igual al nombre de usuario', + 'error_clave_corta' => 'La clave debe contener al menos %1% caracteres', + + 'error_alta' => 'Ha ocurrido un error dando de alta el usuario.', + 'error_email_repetido' => 'El e-mail seleccionado ya está registrado.', + 'error_token' => 'Este link no es válido. Puede que tu cuenta ya se encuentre activada o que lo hayas copiado mal del mail que te enviamos.', + 'error_token_expiro' => 'Token vencido. Generar una nueva preinscripción', + 'descripcion_mail_crear_usuario' => 'Se ha creado la cuenta. Para completar la registración seguí el link que se te + envió en el mail.', + + 'texto_alta' => 'Antes de comenzar la preinscripción asegurate de tener una dirección de e-mail válida y que funcione correctamente. Completá los campos de este formulario con atención ya que te acompañarán a lo largo de tu recorrido académico en esta institución. +

+ Una vez completados todos los campos obligatorios deberás hacer clic en el botón Finalizar.
+ Tu preinscripción no estará completa hasta que la documentación presentada sea revisada y validada por la institución. +

+ Podrás ingresar nuevamente a tu cuenta de preinscripción con el Usuario y la Clave que generarás durante este proceso. ', + + 'confirm_doc_existente_1' => 'Detectamos un usuario registrado con ese número de documento, por favor verificá si son tus datos así no duplicás tu preinscripción (la información se muestra en forma parcial por seguridad):

+ Apellido y Nombre: %1%
+ Inscripto el dia: %2%
+ Se envió un mail a la cuenta: %3%

', + 'confirm_doc_existente_2_1' => '¿Olvidaste tu clave? Te enviamos una nueva clave al correo declarado: ', + 'confirm_doc_existente_2_2' => 'Si sos la misma persona, todavía te falta activar la cuenta. Por favor revisá tu casilla de correo, te enviamos allí las instrucciones (puede estar en correo no deseado). Si no lo recibiste hacé click en reenviar correo. +


+ Si no sos la misma persona te dejamos las vías de contacto para que te comuniques con nosotros para resolver el problema.', + 'confirm_doc_existente_2_3' => 'Si no podés ingresar a esa cuenta de correo:', + 'confirm_doc_existente_3' => 'Si no sos la misma persona:', + 'reenviar_mail_alta' => 'Reenviar mail', + 'cambiar_correo_asociado' => 'Cambiar correo asociado', + 'continuar_otra_persona_alta' => 'Generar una nueva preinscripción', + 'mensaje_recuperacion' => 'Se ha enviado un nuevo mail de activación.
+ Para activar tu cuenta, ingresá a tu casilla y seguí los pasos indicados.', + + 'guardar' => 'Guardar', + + 'mensaje_carga_datos' => 'Completá los campos de este formulario. Una vez completado podés + imprimirlo y presentarte en la sede, o podés guardarlo e imprimirlo posteriormente.

+ Los campos marcados con (*) son obligatorios.

+ No necesitás cargar todos los campos obligatorios en una sola sesión. ', + + 'carga_datos_censales' => 'Carga de datos censales', + + //---- Mensajes de estado -------------------------------------------------- + 'alta_error' => 'Se han encontrado errores. No se pudo completar el registro', + 'guardado_datos_error' => 'Se han encontrado errores. No se pudieron guardar los cambios', + 'guardado_datos_exitoso' => 'Se guardó correctamente', + + //---- Validaciones -------------------------------------------------------- + 'form_validacion_error.vacio_impr' => 'Es necesario completar este campo para finalizar', + 'form_validacion_error.vacio' => 'Este campo es obligatorio', + 'form_validacion_error.filtro_1' => 'El campo sólo acepta letras', + 'form_validacion_error.filtro_2' => 'El campo sólo acepta valores alfanuméricos', + 'form_validacion_error.filtro_3' => 'El campo sólo acepta dígitos', + 'form_validacion_error.filtro_4' => 'El formato de la fecha es incorrecto', + 'form_validacion_error.filtro_5' => 'El formato de la hora es incorrecto', + 'form_validacion_error.filtro_6' => 'El formato del valor introducido es incorrecto', + 'form_validacion_error.filtro_7' => 'El formato del mail es incorrecto', + 'form_validacion_error.filtro_8' => 'El formato del campo es incorrecto', + 'form_validacion_error.select' => 'El valor provisto es inválido', + 'form_validacion_error.largo' => 'El largo del valor provisto excede el máximo', + 'form_validacion_error.error_cuil' => 'El Número de CUIL no es válido', + 'faltan_datos_discapacidad' => 'Debe seleccionar al menos una opción de la lista de discapacidad', + + 'error_pais_doc_0' => 'No coinciden país y tipo de documento', + 'error_pais_doc_1' => 'El país del documento debe ser Argentina', + + 'error_tipo_doc_1' => 'El tipo de documento no puede ser Pasaporte', + 'error_tipo_doc_2' => 'El tipo de documento no puede ser DNI Temporario', + 'error_tipo_doc_3' => 'El tipo de documento tiene que ser DNI, DNI temporario, Cédula o Pasaporte', + 'error_tipo_doc_4' => 'El tipo de documento no puede ser Cédula de Identidad', + 'error_tipo_doc_5' => 'El tipo de documento tiene que ser DNI o DNI Temporario', + 'error_tipo_doc_6' => 'El tipo de documento debe ser DNI o CI', + + 'error_nro_documento_1' => 'Para el tipo de documento seleccionado sólo se aceptan dígitos', + 'error_nro_documento_2' => 'Para el tipo de documento seleccionado sólo se aceptan letras y dígitos', + + 'error_fecha_nacimiento' => 'Tenés que ser mayor de 15 años', + 'error_fecha_antigua' => 'El año debe ser posterior a 1900', + 'error_fecha_posterior' => 'La fecha no puede ser posterior a la fecha actual', + 'error_fecha_egreso_posterior' => 'La fecha de egreso no puede ser anterior a la fecha de ingreso', + + 'error_fecha_vencimiento_otorg' => 'La fecha de vencimiento no puede ser menor o igual a la fecha de otorgamiento', + 'error_fecha_vencimiento_hoy' => 'La fecha de vencimiento no puede ser menor a la fecha actual', + 'error_fecha_vencimiento_req' => 'Se debe ingresar una fecha de vencimiento para este tipo de residencia', + + 'error_indefinido' => 'Ha ocurrido un error.', + + //---- Nombres de pagelets ------------------------------------------------- + 'propuestas' => 'Propuestas', + 'datos_adicionales' => 'Datos adicionales', + 'datos_principales' => 'Datos principales', + 'datos_personales' => 'Datos personales', + 'financiamiento' => 'Financiamiento de estudios', + 'datos_laborales' => 'Situación laboral', + 'datos_familiares' => 'Situación familiar', + 'datos_estudios' => 'Estudios', + 'tecnologia' => 'Tecnología', + 'deportes' => 'Deportes', + 'idiomas' => 'Idiomas', + 'datos_salud' => 'Datos de salud', + 'datos_discapacidad' => 'Discapacidad', + 'turno_presentacion' => 'Presentación de documentación', + 'actuacion_docente' => 'Actuación docente', + 'actuacion_profesional' => 'Actuación profesional', + 'formacion_acad' => 'Formación académica', + + //---- PANTALLA: propuestas ----------------------------------------------- + 'seleccion_propuesta' => 'Selección de propuesta', + 'elegir_propuesta' => 'Elegir Propuesta', + 'inscribir_propuesta' => 'Aceptar', + 'mensaje_elegir_propuesta' => 'Como primer paso, elegí la propuesta a la que querés preinscribirte.', + 'sin_inscripciones' => 'Todavía no te preinscribiste a ninguna propuesta', + 'propuestas_elegidas' => 'Propuestas elegidas', + 'msj_confirmar_baja' => '¿Confirmás que querés eliminar la preinsripción a ', + 'msj_una_insc_posgrado_baja'=> 'Al eliminar esta inscripción a propuesta de posgrado se eliminarán también los registros de Actuación docente, Actuación profesional y Formación académica que hayas ingresado. ¿Estás seguro de continuar?', + 'tipo_de_propuesta' => 'Tipo de propuesta', + 'sin_propuestas' => '-- No se encontraron propuestas disponibles --', + + //---- PANTALLA: Datos principales ----------------------------------------- + 'datos_principales_pers' => 'Datos personales', + 'datos_principales_nacim' => 'Datos de nacimiento', + 'datos_principales_ci' => 'Cédula de Identidad Argentina', + 'datos_principales_pasap' => 'Pasaporte', + 'datos_principales_visa' => 'Visa', + 'datos_principales_res' => 'Residencia', + + 'pueblos_originarios' => 'Pueblos originarios', + 'pertenece_pueblo_originario' => '¿Pertenecés a algún pueblo originario?', + 'pueblo_originario' => '¿A cuál?', + 'pueblo_originario_otro' => 'Nombre', + + //---- PANTALLA: Datos personales ------------------------------------------ + 'domicilio_per_clases' => 'Domicilio durante el período de clases', + 'celular_caracteristica' => 'Característica de celular (sin 0)', + 'celular_valor' => 'Número de celular (sin 15)', + 'domicilio_procedencia' => 'Domicilio de procedencia (donde vivís fuera del período de clases)', + 'persona_allegada' => 'Datos de una persona allegada', + 'obra_social' => 'Obra social', + 'copiar_domicilio' => 'Copiar domicilio del período de clases', + 'copiar_domicilio_proc' => 'Copiar domicilio de procedencia', + + //---- PANTALLA: Financiamiento de estudios -------------------------------- + 'financ_fuente' => '¿Cómo costeás tus estudios?', + 'financ_beca_fuente' => 'Fuente de la beca', + 'financ_beca_tipo' => 'Tipo de beca', + 'financ_beca_tipo_econom' => 'Tipo de ayuda económica', + + //---- PANTALLA: Situación laboral ----------------------------------------- + 'datos_laborales_sit' => 'Situación laboral', + 'datos_laborales_adic' => 'Datos adicionales', + + //---- PANTALLA: Situación familiar ---------------------------------------- + 'situacion_familiar' => 'Situacion familiar', + 'datos_madre' => 'Datos de tu madre', + 'datos_padre' => 'Datos de tu padre', + + //---- PANTALLA: Estudios -------------------------------------------------- + 'datos_estudios_sec' => 'Nivel secundario / Polimodal', + 'datos_estudios_sup' => 'Otros estudios superiores', + + //---- PANTALLA: Tecnología ------------------------------------------------ + 'dispon_pc' => 'Disponés de PC', + 'accede_internet_en' => 'Accedés a Internet', + + //---- PANTALLA: Deportes -------------------------------------------------- + 'pract_deportes' => 'Deportes', + 'listado_deportes_lugares' => '¿Dónde practicás?', + 'listado_deportes' => '¿Qué practicás?', + + //---- PANTALLA: Idiomas --------------------------------------------------- + 'conoc_idiomas' => 'Conocimiento de idiomas', + + //---- PANTALLA: Datos de salud -------------------------------------------- + 'salud' => 'Datos de salud', + 'es_celiaco' => '¿Sos celíaco?', + 'discapacidad.sin_datos' => 'No has ingresado datos de discapacidad.', + 'discapacidad.agregar_dato' => 'Agregar dato', + + 'discapacidad.datos_discapacidad' => 'Datos de discapacidad', + 'discapacidad.carga_datos_discapacidad' => 'Carga de datos de discapacidad', + 'discapacidad.tipo' => 'Tipo', + 'discapacidad.grado' => 'Grado', + 'discapacidad.caracter' => 'Carácter', + 'discapacidad.tiene_cobertura_salud' => '¿Tenés cobertura de salud?', + 'discapacidad.certificado' => '¿Tenés certificado?', + 'discapacidad.fecha_desde' => 'Desde', + 'discapacidad.fecha_hasta' => 'Hasta', + 'discapacidad.observaciones' => 'Observaciones', + 'discapacidad.th_certificado' => 'Certificado', + + //---- PANTALLA: Discapacidad ---------------------------------------- + 'discapacidad' => 'Discapacidad', + 'cond_discapacidad' => 'Condición de Discapacidad', + 'listado_discapacidad_tipos' => 'Discapacidad', + 'condicion_discapacidad' => 'Condición de Discapacidad', + 'tiene_cud' => 'Tenés CUD', + + 'disc_auditiva' => 'Auditiva', + 'disc_visual' => 'Visual', + 'disc_motora' => 'Motora', + 'disc_cond_psicosocial' => 'Condición Psicosocial', + 'disc_otra' => 'Otra', + + 'auditiva' => 'Auditiva', + 'aud_tipo' => '¿Tenés dificultad para oír, incluso si usás un audífono o implante coclear?', + 'forma_habitual_comunicacion' => '¿Cuál es tu forma habitual de comunicación?', + 'aud_lenguaje_senias' => 'Lengua de Señas', + 'aud_lenguaje_labial' => 'Lectura labial', + 'aud_comunicacion_otra' => 'Otra forma', + 'apoyos_requeridos' => 'Apoyos que requerís', + 'aud_apoyo_vida_diaria' => '¿Qué apoyos utilizás en tu vida diaria?', + 'aud_req_interprete_lengua_senias' => 'Requerís Intérprete de Lengua de Señas Argentina', + 'aud_req_aro_magnetico' => 'Requerís Aro magnético', + 'aud_req_otros_apoyos' => '¿Requerís otros apoyos?', + 'aud_otros_apoyos' => 'Especificar cuáles', + + 'visual' => 'Visual', + 'vis_dificultad_para_ver' => '¿Tenés dificultad para ver, incluso si usás lentes?', + 'vis_apoyo_vida_diaria' => '¿Qué apoyos utilizás en tu vida diaria?', + 'vis_req_archivo_audio' => 'Requerís Archivos de audio', + 'vis_req_texto_digital' => 'Requerís Texto digital accesible', + 'vis_req_texto_braile' => 'Requerís Texto en Braille', + 'vis_req_otros_apoyos' => '¿Requerís otros apoyos?', + 'vis_otros_apoyos' => 'Especificar cuáles', + + 'motora' => 'Motora', + 'mot_apoyo_vida_diaria' => '¿Qué apoyos utilizás en tu vida diaria?', + 'mot_req_apoyo_aula' => '¿Requerís apoyos para la permanencia en el aula?', + 'mot_apoyo_aula' => '¿Cuáles?', + 'mot_req_otros_apoyos' => '¿Requerís otros apoyos?', + 'mot_otros_apoyos' => 'Especificar cuáles', + + 'psicosocial' => 'Condición Psicosocial', + 'psi_descripcion' => '¿Cuál?', + 'psi_apoyo_vida_diaria' => '¿Qué apoyos utilizás en tu vida diaria?', + 'psi_req_otros_apoyos' => '¿Requerís otros apoyos?', + 'psi_otros_apoyos' => 'Especificar cuáles', + + 'otras' => 'Otra situación de discapacidad', + 'otra_descripcion' => '¿Cuál/cuáles?', + 'otra_req_apoyo_vida_diaria' => '¿Requiere otros apoyos?', + 'otra_apoyo_vida_diaria' => 'Especificar cuáles', + + 'importante' => 'Alguna otra información que consideres importante comunicar', + 'informacion_importante' => 'Alguna otra información que consideres importante comunicar', + + 'sin_discapacidad_descr' => 'No presento ninguna condición que implique Discapacidad', + 'con_discapacidad_descr' => 'Declaro condición de discapacidad', + + //---- PANTALLA: Documentación --------------------------------------------- + 'documentacion' => 'Documentación', + 'doc.descargar' => 'Descargar', + 'doc.modificar' => 'Modificar', + 'doc.eliminar' => 'Eliminar', + 'doc.msj_extensiones' => 'Las extensiones de archivo soportadas son: ', + 'doc.msj_tamanio_max' => 'El tamaño máximo permitido por archivo es: ', + 'doc.msj_error_rdi' => 'En estos momentos el servidor de archivos digitales no está disponible.
Por favor, intentar nuevamente más tarde.', + 'doc.msj_error_tamanio' => 'El tamaño del archivo supera el máximo permitido', + 'doc.msj_no_hay_requisitos_ingreso' => 'No tenés requisitos de ingreso pendientes de presentación', + + //---- PANTALLA: Presentación de documentación (turno) --------------------- + 'sel_turno.descripcion' => 'Seleccioná el día para concurrir a presentar la documentación requerida haciendo click sobre el mismo. Luego seleccioná una franja horaria disponible y hacé click en "SOLICITAR TURNO".', + 'sel_turno.turno_existente_descr' => 'Tenés asignado el siguiente turno para presentar la documentación requerida:', + + 'sel_turno.confirmar' => 'Solicitar turno', + 'sel_turno.modificar' => 'Modificar turno', + + 'sel_turno.fecha' => 'Fecha', + 'sel_turno.franja' => 'Franjas horarias disponibles', + + 'sel_turno.hora' => 'Hora', + 'sel_turno.operador' => 'Ventanilla', + + 'sel_turno.error_sin_turnos' => 'Por favor, elegí un nuevo turno porque se han ocupado todos los disponibles para esa fecha y franja horaria.', + + + //---- PANTALLA: datos extra de posgrado ----------------------------------- + 'edicion_interna.alerta' => 'ATENCIÓN: no olvides presionar el botón "Guardar" para salvar los cambios efectuados en este formulario.', + + 'sin_antecedentes_docentes' => 'No has ingresado antecedentes docentes.', + 'sin_antecedentes_prof' => 'No has ingresado antecedentes profesionales.', + 'sin_antecedentes_acad' => 'No has ingresado antecedentes académicos.', + + 'msj_confirmar_eliminar' => '¿Estás seguro que deseás eliminar el registro?', + 'agregar_antecedente' => 'Agregar antecedente', + 'carga_antecedente_doc' => 'Carga de antecedente docente', + 'carga_antecedente_prof' => 'Carga de antecedente profesional', + 'carga_antecedente_acad' => 'Carga de antecedente académico', + 'guardar_antecedente' => 'Guardar', + + 'antec_institucion' => 'Institución', + 'antec_cargo' => 'Cargo', + 'antec_materia' => 'Materia', + 'antec_hs_semanales' => 'Hs. Semanales', + 'antec_fecha_desde' => 'Fecha desde', + 'antec_fecha_hasta' => 'Fecha hasta', + + 'antec_empresa' => 'Empresa', + 'antec_area' => 'Área', + + 'antec_fa_titulo_sup_prein' => 'Título', + 'antec_fa_institucion_prein'=> 'Institución', + 'antec_fa_fecha_ingreso' => 'Fecha ingreso', + 'antec_fa_fecha_egreso' => 'Fecha egreso', + 'antec_fa_titulo_tesis' => 'Título tesis', + 'antec_fa_director_tesis' => 'Director tesis', + 'antec_fa_categoria_coneau' => 'Categoría CONEAU', + 'antec_fa_duracion_teorica_tit' => 'Duración teórica', + 'antec_fa_duracion_teorica' => 'Duración teórica (en años)', + 'antec_fa_nivel_estudio' => 'Nivel de estudio', + 'antec_fa_estado' => 'Estado', + + 'editar' => 'Editar', + 'eliminar' => 'Eliminar', + 'mas_informacion' => 'Más información', + + 'error_fechas' => 'La fecha hasta no puede ser anterior a la fecha desde', + + //---- Selector de localidad ----------------------------------------------- + 'busqueda_avanzada' => 'Búsqueda avanzada', + 'ayuda_lista_localidades' => 'Seleccioná el país y tipeá las primeras letras de la localidad buscada para ver una lista de opciones. También podés usar la búsqueda avanzada.', + 'seleccion_localidad' => 'Selección de localidad', + 'seleccionar_localidad' => 'Seleccionar localidad', + 'nota_indeterminado' => 'Nota: Si no encontrás los datos de tu localidad + seleccioná "Indeterminado" en los lugares correspondientes.', + 'pais' => 'País', + 'provincia' => 'Provincia', + 'departamento' => 'Departamento', + 'localidad' => 'Localidad', + 'codigo_postal' => 'Código postal', + + 'busqueda_cp' => 'Buscar código postal', + 'seleccion_cp' => 'Seleccionar Código Postal', + + 'loc_sin_cp' => 'No se encontraron códigos postales para la localidad seleccionada.', + + //---- Selector de colegio secundario -------------------------------------- + 'seleccion_colegio' => 'Selección de colegio secundario', + 'seleccionar_colegio' => 'Seleccionar colegio', + 'colegio_nombre' => 'Nombre del colegio', + 'mensaje_filtrar_colegio' => 'Debés ingresar la localidad para buscar colegios', + 'mensaje_filtrar_caract' => 'Debés ingresar una opción de filtrado de al menos tres caracteres', + 'descr_filtro_colegio' => 'Primero ingresá la localidad de tu colegio. Luego, podés ingresar algunas palabras del nombre de la Institución (ejemplo: Manuel Belgrano) y presionar "Buscar"', + 'ayuda_filtro_colegio' => 'Ingresá algunas palabras (ejemplo: Manuel Belgrano) y presioná Buscar', + + //---- Selector de título secundario --------------------------------------- + 'seleccion_titulo_sec' => 'Selección de título secundario', + 'seleccionar_titulo' => 'Seleccionar título', + 'mensaje_filtrar_titulo_sec'=> 'Debés ingresar algún nombre para obtener colegios', + 'ayuda_filtro_titulo_sec' => 'Ingresá algunas palabras (ejemplo: ciencias naturales) y presioná Buscar', + + //-------------------------------------------------------------------------- + //---- Campos de formulario ------------------------------------------------ + //-------------------------------------------------------------------------- + + 'fecha_registro' => 'Fecha de registro en el sistema', + 'fecha_ult_modif' => 'Fecha de la última modificación de datos', + 'version_modificacion' => 'Versión de modificación', + 'version_impresa' => 'Última versión impresa', + 'estado' => 'Estado', + + //---- Propuesta ----------------------------------------------------------- + 'responsable_academica' => 'Responsable Académica', + 'ubicacion' => 'Ubicación', + 'propuesta' => 'Propuesta', + 'modalidad' => 'Modalidad', + 'fecha_fin_vigencia' => 'Vigente hasta', + 'observaciones' => 'Obs.', + 'pre_prop_observaciones' => 'Observaciones:', + 'turno_preferido' => 'Turno preferido', + 'turno' => 'Turno', + 'periodo_inscripcion' => 'Per. Insc.', + + 'inscripciones' => '', + 'otras_inscripciones' => 'Otras inscripciones', + 'insc_otra_inst' => '¿Te preinscribís simultáneamente a una segunda propuesta en otra Institución?', + 'insc_otra_inst_descr' => '¿En qué propuesta?', + 'como_conocio_institucion' => '¿Cómo conociste la Institución?', + + 'motivo_eleccion_inst' => 'Motivos por los que elegiste esta Institución educativa', + 'mot_inst_econom' => 'Por cuestiones económicas / bajo costo', + 'mot_inst_prestigio' => 'Por el prestigio', + 'mot_inst_difusion' => 'Por la difusión', + 'mot_inst_rec_estud' => 'Por recomendación de otros estudiantes / graduados', + 'mot_inst_rec_amigos' => 'Por recomendación de amigos / familiares', + 'mot_inst_sist_ing' => 'Por el sistema de ingreso', + 'mot_inst_ubicacion' => 'Ubicación geográfica', + 'mot_inst_otros' => 'Otros', + + 'motivo_eleccion_prop' => '¿Cuál de los siguientes motivos tuvo mayor peso en tu elección de propuesta?', + 'mot_prop_vocacion' => 'Vocación', + 'mot_prop_sug_fam' => 'Sugerencia del núcleo familiar', + 'mot_prop_rec_social' => 'Reconocimiento social', + 'mot_prop_ins_lab' => 'Rápida inserción laboral', + 'mot_prop_perf_prof' => 'Perfil profesional', + 'mot_prop_mejora_ec' => 'Mejora de las condiciones económicas', + 'mot_prop_util_soc' => 'Deseo de ser útil a la sociedad', + 'mot_prop_otros' => 'Otros', + + 'adeudas_materias' => 'Colegio secundario', + 'adeuda_materias' => '¿Adeudás materias?', + + //---- Propuesta Finalizada --------------------------------------------------- + 'prop_finalizada.msj' => 'Tu preinscripción está finalizada. Si querés realizar cambios o inscribirte a otra propuesta, debés reabrir la preinscripción.', + 'prop_finalizada.reabrir' => 'Reabrir Preinscripcion', + 'prop_finalizada.imprimir' => 'Imprimir Formulario', + 'prop_finalizada.error' => 'Ocurrió un error al finalizar la preinscripción', + + //---- Datos principales --------------------------------------------------- + 'apellido' => 'Apellido', + 'nombres' => 'Nombres', + 'apellido_elegido' => 'Apellido elegido', + 'nombres_elegido' => 'Nombre de Pila Elegido', + 'nombres_elegido_leyenda' => ' Ley de Identidad de Género 26.743', + 'nombres_elegido_ayuda' => 'Este campo no debe utilizarse como un _nickname o nombre de usuario , sino que refiere al nombre por el que desea ser identificada la persona de acuerdo a su identidad de género, amparada en la Ley 26.743. Bajo este nombre será reconocida la persona en el sistema.', + 'pais_documento_desc' => 'País emisor del documento', + 'tipo_documento_desc' => 'Tipo de documento', + 'nro_documento' => 'Número de documento', + 'nro_documento_rep' => 'Repetir número de documento', + 'nacionalidad_desc' => 'Nacionalidad', + 'e_mail' => 'E-mail', + 'sexo' => 'Género', + 'identidad_genero' =>'Identidad de Género y Diversidad: ¿Cuál de estas opciones considerás que te describe mejor?', + 'identidad_genero_otro' => 'Especifique', + 'mensaje_identidad_genero' => 'En esta parte del formulario te encontrás con un relevamiento de información que permite incorporar la perspectiva de géneros y diversidad en las políticas universitarias. Si tenés dudas, por favor apoyate en el material de ayuda', + 'ayuda_identidad_genero' => 'Material de ayuda .', + 'numero_cuil' => 'Número de CUIL (sin guiones)', + 'pais_documento' => 'País emisor del documento', + 'tipo_documento' => 'Tipo de Documento', + 'nacionalidad' => 'Nacionalidad', + 'nro_tramite_dni' => 'Número de Trámite', + + 'celular_numero' => 'Número de celular', + + 'fecha_nacimiento' => 'Fecha de Nacimiento', + 'loc_nacimiento' => 'Localidad', + + 'ent_emisora_ci' => 'Entidad emisora', + 'nro_ci' => 'Número de Cédula', + + 'pais_emisor_pasap' => 'País emisor', + 'nro_pasap' => 'Número de Pasaporte', + + 'tipo_visa' => 'Tipo de visa', + 'otorgamiento_visa' => 'Fecha de otorgamiento', + 'vencimiento_visa' => 'Vencimiento', + + 'tipo_residencia' => '¿La residencia es por cupo?', + 'residencia' => 'Tipo de residencia', + 'fecha_respre_otorg' => 'Fecha de otorgamiento de la residencia', + 'fecha_respre_venc' => 'Fecha de vencimiento de la residencia', + + //---- Datos personales ---------------------------------------------------- + 'tipo_res_per_lect' => 'Tipo de residencia', + 'calle_per_lect' => 'Calle', + 'numero_per_lect' => 'Número', + 'piso_per_lect' => 'Piso', + 'dpto_per_lect' => 'Departamento', + 'unidad_per_lect' => 'Unidad', + 'loc_per_lect' => 'Localidad', + 'cp_per_lect' => 'Código Postal', + 'te_per_lect' => 'Teléfono fijo', + 'barrio_per_lec' => 'Barrio', + + 'calle_proc' => 'Calle', + 'numero_proc' => 'Número', + 'piso_proc' => 'Piso', + 'dpto_proc' => 'Departamento', + 'unidad_proc' => 'Unidad', + 'loc_proc' => 'Localidad', + 'cp_proc' => 'Código Postal', + 'te_proc' => 'Teléfono fijo', + 'barrio_proc' => 'Barrio', + + 'apellido_pers_alleg' => 'Apellido', + 'nombre_pers_alleg' => 'Nombre', + 'tipo_allegado' => 'Relación', + 'calle_pers_alleg' => 'Calle', + 'nro_pers_alleg' => 'Número', + 'piso_pers_alleg' => 'Piso', + 'dpto_pers_alleg' => 'Departamento', + 'unidad_pers_alleg' => 'Unidad', + 'loc_pers_alleg' => 'Localidad', + 'cp_pers_alleg' => 'Código Postal', + 'te_pers_alleg' => 'Teléfono', + 'barrio_alleg' => 'Barrio', + + //---- Estudios ------------------------------------------------------------ + 'orientacion_vocacional' => 'Orientacion Vocacional', + 'orientacion_recibida' => 'Orientacion vocacional recibida', + + 'colegio_secundario' => 'Colegio Secundario', + 'titulo_secundario' => 'Título Secundario', + 'anio_egreso_sec' => 'Año de egreso', + + 'alu_otestsup_uni' => 'Universidad o Institución', + 'alu_otestsup_tipo' => 'Tipo', + 'alu_otestsup_area' => 'Áreas', + 'alu_otestsup_carr' => 'Propuesta', + 'alu_otestsup_esta' => 'Estado', + 'alu_otestsup_egre' => 'Año de egreso', + 'alu_otestsup_niv' => 'Nivel', + 'alu_otestsup_razon_abandono' => 'Razón de abandono', + 'alu_otestsup_razon_abandono_otros' => 'Especificar razón de abandono', + + + 'es_mayor_25_sin_secundario' => '¿Es mayor a 25 años y no realizó el colegio secundario?', + 'error_es_mayor_25_sin_secundario' => 'Ud. no es mayor de 25 años', + 'error_fecha_nacimiento_vacia' => 'Debe completar la fecha de nacimiento en la solapa Datos principales', + + //---- Financiamiento ------------------------------------------------------ + 'alu_cos_est_ap_fam' => 'Con el aporte de familiares', + 'alu_cos_est_trab' => 'Con tu trabajo', + 'alu_cos_est_beca' => 'Con beca', + 'alu_cos_est_plsoc' => 'Con planes sociales', + 'alu_cos_est_otra' => 'Otra fuente', + 'alu_cos_est_espec' => 'Describí la otra fuente', + + 'tiene_beca' => '¿Tenés beca?', + 'tiene_beca_univ' => 'Universitaria', + 'tiene_beca_nacio' => 'Nacional', + 'tiene_beca_inter' => 'Internacional', + + 'alu_beca_muni' => 'Municipal', + 'alu_beca_otra' => 'Otra', + 'alu_beca_prov' => 'Provincial', + 'alu_beca_tipo_eco' => 'De ayuda económica', + 'alu_beca_tipo_ser' => 'De contraprestación de servicios', + 'alu_beca_tipo_inv' => 'De investigación', + 'alu_beca_eco_tran' => 'Transporte', + 'alu_beca_eco_come' => 'Comedor', + 'alu_beca_eco_foto' => 'Fotocopias', + 'alu_beca_eco_efec' => 'Efectivo', + 'alu_beca_eco_habi' => 'Habitacional', + + //---- Situación laboral --------------------------------------------------- + 'existe_trab_alum' => 'Condición de actividad durante la semana pasada', + 'alu_trab_hace' => 'En ese trabajo sos', + 'alu_trab_desjub' => '¿Te hacen descuentos jubilatorios? (sólo para los asalariados)', + 'alu_trab_fami' => '¿Trabajás en el negocio o empresa de un familiar?', + 'alu_trab_ocup' => 'Esa ocupación es', + 'alu_trab_tarea' => 'Describí la tarea que realizás', + 'remuneracion' => '¿Recibís u obtienés pago por tu trabajo? (en dinero o especies)', + 'hora_sem_trab_alum' => 'Horas semanales de trabajo', + 'rel_trab_carrera' => 'Relación del trabajo con tu propuesta', + 'rel_trab_propuesta' => 'Relación del trabajo con tu propuesta', + + //---- Situación familiar -------------------------------------------------- + 'apellido_padre' => 'Apellido', + 'nombres_padre' => 'Nombres', + 'padre_vive' => '¿Vive?', + 'ult_est_cur_padre' => 'Máximo nivel de estudios cursados', + 'sit_laboral_padre' => 'Condición de actividad durante la semana pasada', + 'act_econom_padre' => '', + 'det_rama_act_padre' => '', + 'categ_ocup_padre' => '', + 'padre_trab_hace' => 'En ese trabajo es', + 'padre_trab_ocup' => 'Esa ocupación es', + 'padre_trab_otro' => 'Si no trabaja y no busca trabajo', + 'padre_trab_tarea' => 'Describí la tarea que realiza', + + 'apellido_madre' => 'Apellido', + 'nombres_madre' => 'Nombres', + 'madre_vive' => '¿Vive?', + 'sit_laboral_madre' => 'Condición de actividad durante la semana pasada', + 'ult_est_cur_madre' => 'Máximo nivel de estudios cursados', + 'act_econom_madre' => '', + 'det_rama_act_madre' => '', + 'categ_ocup_madre' => '', + 'madre_trab_hace' => 'En ese trabajo es', + 'madre_trab_ocup' => 'Esa ocupación es', + 'madre_trab_otro' => 'Si no trabaja y no busca trabajo', + 'madre_trab_tarea' => 'Describí la tarea que realiza', + + //---- Tecnología ---------------------------------------------------------- + 'alu_tec_pc_casa' => 'En tu casa', + 'alu_tec_pc_trab' => 'En el trabajo', + 'alu_tec_pc_univ' => 'En la universidad', + 'alu_tec_pc_otro' => 'En otro lugar', + + 'alu_tec_int_casa' => 'En tu casa', + 'alu_tec_int_trab' => 'En el trabajo', + 'alu_tec_int_univ' => 'En la universidad', + 'alu_tec_int_movil' => 'En dispositivos móviles', + 'alu_tec_int_otro' => 'En otro lugar', + + //---- Deportes ------------------------------------------------------------ + 'practica_deportes' => '¿Practicás deportes?', + + 'hace_dep_univ' => 'En la universidad', + 'hace_dep_gim_priv' => 'En un gimnasio privado', + 'hace_dep_partic' => 'Particular', + 'hace_dep_otros' => 'Otros lugares', + + 'prac_dep_futbol' => 'Fútbol', + 'prac_dep_basquet' => 'Básquet', + 'prac_dep_voley' => 'Vóley', + 'prac_dep_gimnasia' => 'Gimnasia', + 'prac_dep_tenis' => 'Tenis', + 'prac_dep_natacion' => 'Natación', + 'prac_dep_handball' => 'Handball', + 'prac_dep_otros' => 'Otros', + + //---- Idiomas ------------------------------------------------------------- + 'alu_idioma_ingl' => 'Inglés', + 'alu_idioma_fran' => 'Francés', + 'alu_idioma_port' => 'Portugués', + 'alu_idioma_ital' => 'Italiano', + 'alu_idioma_alem' => 'Alemán', + 'alu_idioma_chino' => 'Chino', + 'alu_idioma_otro' => 'Otro', + 'alu_idioma_otro_nivel' => 'Nivel', + + //-------------------------------------------------------------------------- + + 'alu_est_civil_uh' => '¿Convivís con alguien (unión de hecho)?', + + 'sec_egreso' => '', + 'o_est_ter_estado' => '', + 'o_est_uni_estado' => '', + 'sit_actual_padre' => '', + 'sit_actual_madre' => '', + 'tit_obt_padre' => '', + 'tit_obt_madre' => '', + 'cant_fami_cargo' => 'Cantidad de familiares a cargo', + 'cant_empl_cargo' => '', + 'pais_nacionalidad' => '', + + 'cant_hijos_alum' => 'Cantidad de hijos', + 'vive_actual_con' => '¿Con quién vivís durante este período?', + 'obra_social_alu' => 'Cobertura de salud', + 'obra_social_trab' => '', + 'obra_social_fami' => '', + 'obra_social_univ' => '', + 'costea_estudios' => '', + + 'vive_con_conyuge' => '', + 'vive_con_padre' => '', + 'vive_con_madre' => '', + 'vive_con_hijos' => '', + 'vive_con_hermanos' => '', + + 'estado_civil' => 'Estado civil', + + 'otros_estud_super' => '', + 'fliares_cargo_alum' => '', + 'sit_laboral_alu' => '', + 'categ_ocup_alum' => '', + 'act_econom_alum' => '', + 'det_rama_act_alum' => '', + + + + 'terciario_nombre_1' => '', + 'terciario_titulo_1' => '', + 'terciario_estado_1' => '', + 'terciario_nombre_2' => '', + 'terciario_titulo_2' => '', + 'terciario_estado_2' => '', + 'universit_nombre_1' => '', + 'universit_titulo_1' => '', + 'universit_estado_1' => '', + 'universit_nombre_2' => '', + 'universit_titulo_2' => '', + 'universit_estado_2' => '', + 'postgrado_nombre_1' => '', + 'postgrado_titulo_1' => '', + 'postgrado_estado_1' => '', + 'postgrado_nombre_2' => '', + 'postgrado_titulo_2' => '', + 'postgrado_estado_2' => '', + 'antecedente_1' => '', + 'antecedente_2' => '', + 'antecedente_3' => '', + 'actividad_academica' => '', + 'titulo_tentativo' => '', + 'area_tematica' => '', + + 'turno.msj_confirmar_baja' => '¿Confirmás que querés cancelar el turno de la Responsable Académica ', + 'turno.info' => 'En esta sección podrás solicitar un turno para presentar la documentación. Tené en cuenta que, si te has preinscripto en propuestas de distintas Responsables Académicas, deberás solicitar un turno por cada una.', + 'turno.ra' => 'Responsable Académica', + 'turno.fecha' => 'Fecha', + 'turno.hora' => 'Hora', + 'turno.operador' => 'Ventanilla', + 'turno.cancelar' => 'Cancelar turno', + 'turno.no_asignado' => '-- No asignado --', + 'turno.sin_turnos' => 'No se encontraron turnos para presentar la documentación.', + + //-------------------------------------------------------------------------- + //---- Opciones de selección múltiple -------------------------------------- + //-------------------------------------------------------------------------- + + 'si' => 'Sí', + 'no' => 'No', + 'desconoce' => 'Desconoce', + 'no_desea_contestar' => 'No deseo contestar', + + 'descr_no_seleccion' => '-- Seleccioná --', + + 'genero_masculino' => 'Masculino', + 'genero_femenino' => 'Femenino', + 'genero_no_binario' => 'No Binario', + + 'turno_mañana' => 'Mañana', + 'turno_tarde' => 'Tarde', + 'turno_noche' => 'Noche', + + 'temporal' => 'Temporal', + 'permanente' => 'Permanente', + + 'residencia_1' => 'Sin residencia', + 'residencia_2' => 'Precaria', + 'residencia_3' => 'Temporal', + 'residencia_4' => 'Definitiva', + + 'existe_trab_alum_1' => 'Trabajaste al menos una hora (incluye a los que no trabajaron por licencia, vacaciones, enfermedad)', + 'existe_trab_alum_2' => 'No trabajaste y buscaste trabajo en algún momento de los últimos 30 días', + 'existe_trab_alum_3' => 'No trabajaste y no buscaste trabajo (no estás pensando en trabajar)', + + 'alu_trab_hace_1' => 'Patrón (tenés empleados)', + 'alu_trab_hace_2' => 'Cuenta propia / independiente', + 'alu_trab_hace_3' => 'Obrero o empleado (asalariado)', + 'alu_trab_hace_4' => 'Pasante', + + 'alu_trab_ocup_1' => 'Permanente (incluye fijo, estable, de planta)', + 'alu_trab_ocup_2' => 'Temporaria (incluye changa, trabajo transitorio, estacionales, contrato por tarea u obra, suplencia, etc.)', + + 'hora_sem_trab_alum_1' => 'Hasta 10 horas', + 'hora_sem_trab_alum_2' => 'Más de 10 y hasta 20 horas', + 'hora_sem_trab_alum_3' => 'Más de 20 y menos de 35 horas', + 'hora_sem_trab_alum_4' => '35 o más horas', + + 'rel_trab_propuesta_1' => 'Total', + 'rel_trab_propuesta_2' => 'Parcial', + 'rel_trab_propuesta_3' => 'Sin Relación', + + 'nivel_estudio_1' => 'No realizó estudios', + 'nivel_estudio_2' => 'Estudios primarios incompletos', + 'nivel_estudio_3' => 'Estudios primarios completos', + 'nivel_estudio_4' => 'Estudios secundarios incompletos', + 'nivel_estudio_5' => 'Estudios secundarios completos', + 'nivel_estudio_8' => 'Estudios superiores incompletos', + 'nivel_estudio_9' => 'Estudios superiores completos', + 'nivel_estudio_10' => 'Estudios universitarios incompletos', + 'nivel_estudio_11' => 'Estudios universitarios completos', + 'nivel_estudio_12' => 'Estudios de postgrado', + 'nivel_estudio_13' => 'Desconoce', + + 'sit_laboral_1' => 'Trabajó al menos una hora (incluye ausencia por licencia, vacaciones, enfermedad)', + 'sit_laboral_2' => 'No trabajó y buscó trabajo en algún momento de los últimos 30 días', + 'sit_laboral_3' => 'No trabajó y no buscó trabajo (no esta pensando en trabajar)', + 'sit_laboral_4' => 'Desconoce', + + 'existe_trab_alum_2' => 'No trabajaste y buscaste trabajo en algún momento de los últimos 30 días', + 'existe_trab_alum_3' => 'No trabajaste y no buscaste trabajo (no estás pensando en trabajar)', + + 'padre_trab_hace_1' => 'Patrón (tiene empleados)', + 'padre_trab_hace_2' => 'Cuenta propia', + 'padre_trab_hace_3' => 'Obrero o empleado (asalariado)', + 'padre_trab_hace_4' => 'Desconoce', + + 'otra_ocup_1' => 'Es jubilado o pensionado', + 'otra_ocup_2' => 'Es rentista', + 'otra_ocup_3' => 'Es estudiante', + 'otra_ocup_4' => 'Realiza tareas del hogar', + 'otra_ocup_5' => 'Otro', + 'otra_ocup_6' => 'Desconoce', + + 'orient_voc_rec_1' => 'Ninguna', + 'orient_voc_rec_2' => 'Entidad privada', + 'orient_voc_rec_3' => 'Entidad oficial', + 'orient_voc_rec_4' => 'Profesional especializado', + 'orient_voc_rec_5' => 'De la universidad', + + 'alu_otestsup_tipo_1' => 'Pública', + 'alu_otestsup_tipo_2' => 'Privada', + + 'alu_otestsup_esta_1' => 'Finalizado', + 'alu_otestsup_esta_2' => 'Abandonado', + 'alu_otestsup_esta_3' => 'En curso', + + 'alu_otestsup_area_1' => 'Educación', + 'alu_otestsup_area_2' => 'Ciencias Básicas', + 'alu_otestsup_area_3' => 'Ciencias Aplicadas', + 'alu_otestsup_area_4' => 'Ciencias Sociales', + 'alu_otestsup_area_5' => 'Ciencias Jurídicas', + 'alu_otestsup_area_6' => 'Ciencias Humanas', + 'alu_otestsup_area_7' => 'Ciencias de la Salud', + 'alu_otestsup_area_8' => 'Sin especificación', + + 'alu_otestsup_niv_1' => 'Universitario', + 'alu_otestsup_niv_2' => 'Superior no universitario', + + 'idiomas_nivel_1' => 'Muy bueno', + 'idiomas_nivel_2' => 'Bueno', + 'idiomas_nivel_3' => 'Básico', + 'idiomas_nivel_4' => 'Desconoce', + + 'vive_con_1' => 'Solo', + 'vive_con_2' => 'Con compañeros' , + 'vive_con_3' => 'Con familia de origen (padres, hermanos, abuelos)', + 'vive_con_4' => 'Con tu pareja / hijos', + 'vive_con_5' => 'Otros', + + 'estado_civil_1' => 'Soltero', + 'estado_civil_2' => 'Casado', + 'estado_civil_3' => 'Separado', + 'estado_civil_4' => 'Divorciado', + 'estado_civil_6' => 'Viudo', + + 'no_tiene' => 'No tenés', + 'uno' => 'Uno', + 'dos' => 'Dos', + 'mas_de_dos' => 'Más de dos', + + 'categ_coneau_a' => 'A', + 'categ_coneau_b' => 'B', + 'categ_coneau_c' => 'C', + 'categ_coneau_t' => 'En trámite', + 'categ_coneau_n' => 'Ninguna', + + 'antec_fa_nivel_estudio_4' => 'Superior', + 'antec_fa_nivel_estudio_5' => 'Universitario', + 'antec_fa_nivel_estudio_6' => 'Posgrado', + + 'antec_fa_estado_F' => 'Finalizado', + 'antec_fa_estado_A' => 'Abandonado', + 'antec_fa_estado_C' => 'En curso', + + 'discapacidad.grado.transitoria' => 'Transitoria', + 'discapacidad.grado.permanente' => 'Permanente', + + //-------------------------------------------------------------------------- + //---- Reporte ------------------------------------------------------------- + //-------------------------------------------------------------------------- + + 'rep_ficha_aspirante' => 'Ficha del aspirante: ', + 'rep_ficha_nro' => 'Ficha de inscripción nro.: ', + 'rep_fecha_ult_modif' => 'Fecha de última modificación: ', + 'rep_nro_lu' => 'Nro. de Libreta Universitaria: ', + 'rep_nro_lu_leyenda' => '(a completar por la Dir. de Alumnos y Graduados)', + 'rep_propuestas_a_insc' => 'PROPUESTA(S) A INSCRIBIRSE:', + 'ubicacion' => 'Ubicación', + + //---- Turno de presentación ---------------------------------------------- + 'rep_turno_mensaje' => 'Se deberá presentar la documentación solicitada en el siguiente turno:', + + //---- CBC ---------------------------------------------------------------- + 'rep_titulo_cbc' => 'SITUACIÓN ACADÉMICA CORRESPONDIENTE AL C.B.C.', + 'cbc_codigo' => 'COD.', + 'cbc_asignaturas' => 'ASIGNATURA', + 'cbc_calificacion' => 'CALIFICACIÓN', + 'cbc_fecha' => 'FECHA', + 'cbc_leyenda_cuadro' => 'Consigná si la materia fue realizada en CBC, UBA XXI, CNBA, ILSE o CPEL', + //------------------------------------------------------------------------- + + 'rep_firma' => 'FIRMA', + 'rep_titulo_credencial' => 'CREDENCIAL PROVISORIA', + 'rep_apellido_y_nombre' => 'Apellido y nombres', + 'rep_identificacion' => 'Identificación', + 'rep_telefono' => 'TE', + 'rep_propuestas' => 'Propuesta(s)', + + + 'nro_documento_rep' => 'Repetir el número de documento', + 'mail_asunto_fin' => 'Recibimos tu solicitud de preinscripción - %1%', + 'mail_cuerpo_fin' => '¡Hola!

Recibimos tu solicitud de preinscripción a la %1% correctamente. Analizaremos la documentación que presentaste y, en caso de cumplir con todos los requisitos, recibirás la confirmación de inscripción.

Una vez aceptada tu preinscripción podrás modificar los datos declarados (o solicitar la modificación de aquellos que no puedas editar).', + 'notificacion_email_puede_continuar' => 'Hubo un problema al enviar el mail de confirmación, intentá loguearte más tarde', + + //------------------------------------------------------------------------- + //---- Personalización de etiquetas de campos de formulario en reporte ---- + //------------------------------------------------------------------------- + + /** + * Si se desea que la etiqueta de un campo de formulario se vea distinto en + * el PDF respecto a la etiqueta que se muestra en pantalla, agregar aquí + * entradas respetando la siguiente convención: + * + * 'pdf_' => '', + * + * Ej: Si se quiere que para la etiqueta 'nro_documento' se imprima + * 'Nro. documento' en lugar de 'Número de documento' como está definida + * para la salida en pantalla, agregar una entrada: + * + * 'pdf_nro_documento' => 'Nro. documento', + * + */ + 'pdf_nro_documento' => 'Nro. documento', + + //------------------------------------------------------------------------- + //----- Personalización formulario en ayuda_email -------------------------- + //-------------------------------------------------------------------------- + //Operacion Ayuda_Menu + 'header.menu.ayuda_menu' => 'Ayuda', + 'ayuda_menu.titulo' => '¿Ténes problemas para ingresar?', + 'ayuda_menu.titulo_check' => 'Gracias por ponerte en contacto con nosotros.', + 'ayuda_menu.sub_titulo' => 'Completa el siguiente formulario para enviar tu consulta, te responderemos a la brevedad al correo electrónico que indiques a continuación.', + 'ayuda_menu.nombres' => 'Nombres y Apellidos', + 'ayuda_menu.documento' => 'D.N.I', + 'ayuda_menu.email' => 'Correo electrónico', + 'ayuda_menu.mensaje' => 'Mensaje', + 'ayuda_menu.siguiente' => 'Continuar', + 'ayuda_menu.enviar' => 'Enviar mensaje', + 'ayuda_menu.alta_error' => 'Se han encontrado errores. Por favor, verificá el formulario.', + 'ayuda_menu.error_emails' => 'El e-mail ingresado es incorrecto, verificá el formulario', + 'ayuda_menu.asunto_email' => '[SIU-Preinscripión] Formulario de contacto', + 'ayuda_menu.cuerpo_email' => 'Recibiste un mensaje de %nombres%,

+ E-mail: %email%
+ D.N.I: %nro_documento%
+ Mensaje:
%mensaje%


', + 'ayuda_menu.alta_error' => 'Se han encontrado errores. Por favor, verificá los datos ingresados.', + 'ayuda_menu.msj_info_enviado' => 'El mensaje fue enviado con éxito.', + 'ayuda_menu.ayuda_dni' => 'El documento no debe contener puntos ni caracteres extraños.', + 'ayuda_menu.ayuda_nombres' => 'El nombre y el apellido no debe superar los sesenta caracteres.', + 'ayuda_menu.ayuda_email' => 'Por este e-mail que ingresaste vamos a comunicarnos.', + 'ayuda_menu.error_email' => 'Falló al enviar el email, intente nuevamente.', + 'ayuda_menu.error_vacio' => 'No debe ser vacío.', + 'ayuda_menu.error_dni' => 'Ingrese un D.N.I correcto.', + 'ayuda_menu.error_email' => 'Ingrese un e-mail correcto.', + + + //------------------------------------------------------------------------- + //----- Número de documento -------------------------- + //-------------------------------------------------------------------------- + 'nro_documento.dni.leyenda' => 'Ingrese el Documento Nacional de Identidad sin puntos, ej: 32753951', + 'nro_documento.dni.error' => 'El Documento Nacional de Identidad debe ser mayor a un millón y menor a cien millones.', + 'nro_documento.cuil.leyenda' => 'Ingrese el CUIL/CUIT sin guiones, ej: 20327539517', + 'nro_documento.cuil.error' => 'El CUIL/CUIT es inválido', + 'nro_documento.dni.rep' => 'Los Documentos de Identidad no coinciden.', + + //------------------------------------------------------------------------- + //----- Número de trámite del dni -------------------------- + //-------------------------------------------------------------------------- + 'nro_tramite.dni.leyenda' => 'Ingrese el Número de trámite con un máximo de once (11) caracteres, ej: 00234587632', + 'nro_tramite.dni.error' => 'El Número de trámite es incorrecto, ingrese nuevamente.', + 'nro_tramite.dni.error_ws_renaper' => 'RENAPER no encontró la persona con los datos ingresados.', + 'ws_renaper.validar' => 'Validar con renaper', + 'ayuda_numero_tramite' => 'La validación con renaper autocompletará los siguientes datos de la persona: apellido, nombres, domicilio y fecha de nacimiento', + 'info_dni_en_tramite' => 'Si no contás con la última copia de tu DNI para poder registrarte debes comunicarte con la institución para que puedas realizar la preinscripción.', + 'ayuda_documento' => 'El tipo de documento Documento/Cédula de Identidad refiere al "Documento de identidad principal del país emisor"', + + 'seleccione_una_opcion' => 'Seleccione al menos una opción', + //pregunta secreta// + 'pregunta_mascota' =>'¿Cuál es el nombre de tu mascota?', + 'pregunta_escuela' =>'¿Cuál es el nombre de tu escuela primaria?', + 'pregunta_vacaciones' =>'¿Cuál es tu ciudad favorita para ir de vacaciones?', + 'no_puedo_arcceder_email' =>'No puedo acceder a mi email', + 'para_recuperar_tu_acceso_contacta' =>'Para recuperar tu acceso comunicate con la Universidad:', + 'datos_de_contacto' =>'TEL:%1%
Email:%2%', + 'ingresa_nuevo_email' =>'Ingresá nuevo e-mail', + 'descripcion_ingresa_nuevo_email' =>'Ingresá un nuevo e-mail para recibir el instructivo de recupero de tu cuenta de preinscripción. Será utilizado para identificarte en la Universidad y allí te llegarán las notificaciones. La nueva dirección que ingreses pasará a ser la principal.', + 'nuevo_email' =>'Nuevo e-mail', + 'no_puedo_acceder_a_mi_mail' =>'No puedo acceder a mi e-mail', + 'pregunta_secreta' =>'Pregunta secreta', + 'propuestas_preinscriptas' =>'Propuestas preinscriptas', + 'sin_puntos_ni_guiones' =>'sin puntos ni guiones', + 'respuesta_secreta' =>'Respuesta secreta', + 'email_principal' =>'Email principal', + 'descripcion_recuperar_codigo' =>'Para recuperar tu acceso ingresá el código que te enviamos por e-mail cuando creaste tu usuario.', + 'codigo' =>'código', + 'leyenda_ayuda_datos_usuario' =>'Ingresa la información necesaria para validar tu cuenta en caso de recuperación', + 'selecciona_metodo_recuperacion' =>'Selecciona un método de recuperación', + +); diff --git a/src/siu/modelo/admin.php b/src/siu/modelo/admin.php new file mode 100644 index 0000000..e8045d6 --- /dev/null +++ b/src/siu/modelo/admin.php @@ -0,0 +1,147 @@ +instanciar("modelo\\admin"); + } + return self::$instancia; + } + + function login($usuario, $clave) + { + $q_usuario = kernel::db()->quote($usuario); + $q_clave = kernel::db()->quote($this->cifrar_clave(trim($clave))); + $id_pto_acceso = kernel::db()->quote($_SERVER['ID_PTO_ACCESO']); + + $sql = "SELECT + id_usuario, + usuario, + clave, + id_pto_acceso + FROM + admin_usuarios + WHERE + usuario = $q_usuario + AND clave = $q_clave + AND id_pto_acceso = $id_pto_acceso + "; + + $datos = kernel::db()->consultar_fila($sql); + + if (empty($datos)) { + throw new error_preinscripcion_login('admin_login_error_clave'); + } + + kernel::proyecto()->set_punto_acceso(preinscripcion::perfil_admin); + return $datos['id_usuario']; + } + + protected function cifrar_clave($clave) + { + $salt = kernel::proyecto()->get('salt_admin'); + return sha1($salt . $clave); + } + + //-------------------------------------------------------------------------- + //---- Funciones auxiliares para la consola -------------------------------- + //-------------------------------------------------------------------------- + + function crear_usuario($usuario, $clave, $id_pto_acceso) + { + $db = $this->get_db(); + + $q_usuario = $db->quote(trim($usuario)); + $q_clave = $db->quote($this->cifrar_clave(trim($clave))); + $q_id_pto_acceso = $db->quote(trim($id_pto_acceso)); + + $sql = "INSERT INTO admin_usuarios ( + usuario, + clave, + id_pto_acceso + ) VALUES ( + $q_usuario, + $q_clave, + $q_id_pto_acceso + )"; + + $db->ejecutar($sql); + } + + /** + * Determina si un nombre de usuario administrador es válido + * @param string $usuario + * @throws error_preinscripcion_usuario + */ + function usuario_valido($usuario) + { + if (empty($usuario)) { + $mensaje = kernel::traductor()->trans('admin_error_user_vacio'); + throw new error_preinscripcion_usuario($mensaje); + } + if ($this->existe_usuario($usuario)) { + $mensaje = kernel::traductor()->trans('admin_error_user_repetido'); + throw new error_preinscripcion_usuario($mensaje); + } + } + + function clave_valida($usuario, $clave) + { + // La clave debe ser distinta al nombre de usuario + if ($clave == $usuario) { + $mensaje = kernel::traductor()->trans('error_clave_igual_usuario'); + throw new error_preinscripcion_clave($mensaje); + } + + // La clave debe tener una longitud determinada. + $longitud_minima = kernel::proyecto()->get_clave_long_minima(); + if (strlen($clave) < $longitud_minima) { + $mensaje = kernel::traductor()->trans('error_clave_corta', array('%1%' => $longitud_minima)); + throw new error_preinscripcion_clave($mensaje); + } + } + + protected function existe_usuario($usuario) + { + $db = $this->get_db(); + $q_usuario = $db->quote($usuario); + + $sql = "SELECT + 1 AS existe + FROM + admin_usuarios + WHERE + usuario = $q_usuario"; + + $datos = $db->consultar_fila($sql); + return !empty($datos['existe']); + } + + /** + * + * @return \siu\modelo\DbPdo + */ + function get_db() + { + if (empty($this->db)) { + $acceso = current(kernel::proyecto()->get_accesos_bd()); + $this->db = new DbPdo($acceso); + } + return $this->db; + } +} +?> \ No newline at end of file diff --git a/src/siu/modelo/autenticacion/auth_admin.php b/src/siu/modelo/autenticacion/auth_admin.php new file mode 100644 index 0000000..260e5b3 --- /dev/null +++ b/src/siu/modelo/autenticacion/auth_admin.php @@ -0,0 +1,86 @@ +isPost()) { + $usuario = kernel::request()->getPost('usuario'); + $pass = kernel::request()->getPost('password'); + try { + $this->usuario = $usuario; + return $this->id_persona = $this->validar_user_pass($usuario, $pass); + } catch (error_preinscripcion_login $e) { + $this->error_login = $e; + intentos_login::error($usuario); + kernel::log()->add_error($e); + } + } + return null; + } + + public function get_modelo() + { + $datos = array(); + + $datos['accion'] = kernel::vinculador()->crear('acceso_admin', 'index', array('auth' => 'admin')); + + $datos['campos'] = array( + "usuario" => array('name' => "usuario", 'type' => "text", 'value' => ''), + "password" => array('name' => "password", 'type' => "password", 'value' => ''), + "submit" => array('name' => "login", 'type' => "submit", 'value' => 'Ingresar') + ); + + if (isset($this->error_login)) { + $datos['error'] = $this->error_login->get_mensaje(); + } + + return $datos; + } + + protected function validar_user_pass($usuario, $password) + { + $parametros = $this->get_parametros(); + $clase_login = kernel::localizador()->instanciar($parametros['clase_login']); + return $clase_login->autenticar($usuario, $password); + } + + /** + * Se invoca luego de abrir sesion en el kernel (luego de una autenticacion exitosa) + */ + public function evt_sesion_abierta() + { + parent::evt_sesion_abierta(); + kernel::sesion()->set('_usuario_', $this->usuario); + } + + /** + * Cerrar sesion en el proveedor. + */ + public function logout() + { + // Como es la misma sesión que el kernel no se toca. + } + + function evt_persona_instanciada($persona, $autenticada) + { + if (($autenticada) && (kernel::sesion()->esta_seteada('_usuario_'))) { + $persona->set_email(kernel::sesion()->get('_usuario_')); + } + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/autenticacion/auth_con_sesion.php b/src/siu/modelo/autenticacion/auth_con_sesion.php new file mode 100644 index 0000000..7df8d37 --- /dev/null +++ b/src/siu/modelo/autenticacion/auth_con_sesion.php @@ -0,0 +1,74 @@ +session = kernel::sesion(); + } + + public function esta_logueado() + { + if ($this->session->abierta()) { + if ($this->excede_maxtime() || $this->excede_timeout()) { + return false; + } + return true; + } + return false; + } + + /** + * Se invoca luego de abrir sesion en el kernel (luego de una autenticacion exitosa) + */ + public function evt_sesion_abierta() + { + $this->session->set('__kernel_ses_start', time()); + $this->session->set('__kernel_ses_last_request', time()); + } + + public function evt_nuevo_request() + { + $this->session->set('__kernel_ses_last_request', time()); + } + + protected function excede_maxtime() + { + $maxtime = kernel::proyecto()->get('sesion_maxtime') * 60; + $hora_entrada = $this->session->get('__kernel_ses_start'); + + return (time() - $hora_entrada) > $maxtime; + } + + protected function excede_timeout() + { + $timeout = kernel::proyecto()->get('sesion_timeout') * 60; + $hora_ultimo_request = $this->session->get('__kernel_ses_last_request'); + + return (time() - $hora_ultimo_request) > $timeout; + } + + protected function validate_param($key, $method = 'post', $type = validador::TIPO_ALPHA, $options = array()) + { + $value = ($method == 'post') ? kernel::request()->getPost($key, '') : kernel::url()->get_param($key, false, ''); + return $this->validate_value($value, $type, $options, $key, $method); + } + + protected function validate_value($value, $type, $options, $key = '-', $method = '-') + { + $rs = validador::validar($value, $type, $options); + return $rs; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/autenticacion/auth_cuenta_ext.php b/src/siu/modelo/autenticacion/auth_cuenta_ext.php new file mode 100644 index 0000000..2569d9b --- /dev/null +++ b/src/siu/modelo/autenticacion/auth_cuenta_ext.php @@ -0,0 +1,158 @@ +get_url_procesar($proveedor); + $datos = $this->autenticar_proveedor($proveedor, $url_procesar); + + $datos_usuario = preinscripcion::usuario()->get_datos_usuario($datos['mail']); + if (!empty($datos_usuario) && empty($datos_usuario[$proveedor])) { + $this->datos = $datos; + $this->asociar_usuario_se = true; + $this->datos_usuario = $datos_usuario; + } else { + $parametros = $this->get_parametros(); + $clase_login = kernel::localizador()->instanciar($parametros['clase_login']); + $persona = $clase_login->autenticar_login_externo($datos); + if (is_null($persona)) { + $this->persona_existe = false; + $this->datos = $datos; + } + $this->usuario = $datos['mail']; + return $persona; + } + } catch (error_preinscripcion_login $e) { + kernel::log()->add_error($e); + if ($e->getCode() == -1) { + $this->error = 'login.errores.cuenta_externa_invalida'; + } + } catch (error_preinscripcion_mail_no_validado $e) { + kernel::log()->add_error($e); + $this->error = $e->get_mensaje(); + } catch (error_kernel $e) { + kernel::log()->add_error($e); + $this->error = $e->get_mensaje(); + } + return false; + } + + public function obtener_datos_cuenta($proveedor, $url_procesar) + { + $datos = $this->autenticar_proveedor($proveedor, $url_procesar); + return $datos; + } + + public function logout() + { + + } + + /** + * Retorna un arreglo con datos necesarios para renderizar este tipo de autenticacion. Queda a cargo del cliente + * la visualizacion + * @return array + */ + public function get_modelo() + { + $modelo = array(); + + $modelo['proveedores'] = array(); + foreach ($this->conf['proveedores'] as $proveedor_id => $proveedor) { + if ($proveedor['activo']) { + $icono = isset($proveedor['icono']) ? $proveedor['icono'] : 'img/login/openid.png'; + $datos_proveedor = array( + 'id' => $proveedor_id, + 'url' => $this->get_url_procesar($proveedor_id), + 'icono' => kernel::vinculador()->vinculo_recurso($icono) + ); + $modelo['proveedores'][] = $datos_proveedor; + } + } + + $modelo['error'] = isset($this->error) ? $this->error : null; + return $modelo; + } + + protected function autenticar_proveedor($proveedor_id, $url_procesar) + { + if ((!isset($this->conf['proveedores'][$proveedor_id])) || (!$this->conf['proveedores'][$proveedor_id]['activo'])) { + throw new error_preinscripcion("El servicio $proveedor_id no está configurado como cuenta externa"); + } + $conf_proveedor = $this->conf['proveedores'][$proveedor_id]; + + $se = new servicios_externos_preinscripcion(); + + if ($conf_proveedor['tipo'] == 'openid') { + $datos = $se->openid_mail($conf_proveedor, $url_procesar); + } else if ($conf_proveedor['tipo'] == 'oauth2') { + $datos = $se->oauth2_mail($conf_proveedor, $url_procesar); + } else { + throw new error_kernel_login('No se encuentra como manejar al servicio. De que "tipo" es?'); + } + $datos['proveedor'] = $proveedor_id; + return $datos; + } + + /** + * @param $proveedor_id + * @return string + */ + protected function get_url_procesar($proveedor_id) + { + return kernel::vinculador()->crear_sin_chequeo('acceso', 'index', array('auth' => $this->get_id(), 'f' => $proveedor_id)); // . "&auth=openid&f=$proveedor"; + } + + public function evt_sesion_abierta() + { + parent::evt_sesion_abierta(); + kernel::sesion()->set('_usuario_alumno_', $this->usuario); + } + + function evt_persona_instanciada($persona, $autenticada) + { + if (($autenticada) && (kernel::sesion()->esta_seteada('_usuario_alumno_'))) { + $persona->set_email(kernel::sesion()->get('_usuario_alumno_')); + } + if ($this->asociar_usuario_se) { + kernel::sesion()->set('id_se', $this->datos['id']); + kernel::sesion()->set('mail_se', $this->datos['mail']); + kernel::sesion()->set('medio_se', $this->datos['proveedor']); + kernel::sesion()->set('datos_usuario', $this->datos_usuario); + throw new nuevo_request('asociar_usuario_se'); + } + if (!$this->persona_existe) { + kernel::sesion()->set('alta_se_medio', $this->datos['proveedor']); + kernel::sesion()->set('alta_se_id', $this->datos['id']); + kernel::sesion()->set('alta_se_mail', $this->datos['mail']); + throw new nuevo_request('alta_usuario'); + } + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/autenticacion/auth_form.php b/src/siu/modelo/autenticacion/auth_form.php new file mode 100644 index 0000000..1e0d273 --- /dev/null +++ b/src/siu/modelo/autenticacion/auth_form.php @@ -0,0 +1,182 @@ +session->abrir_sesion($id_persona, false); + * Si no guardar los errores necesarios para renderizarse en render_login + * @return bool si tuvo exito + */ + public function autenticar() + { + if (kernel::request()->isPost()) { + + try { + + $usuario = trim(a_minusculas(kernel::request()->getPost('usuario'))); + + // Guardo en sesión por si falla la validación y hay que repopular los campos + kernel::sesion()->set('form_usuario', $usuario); + + $usa_captcha = kernel::proyecto()->get('usa_captcha'); + // Si usa captcha valido el mismo + if ($usa_captcha && $this->controlar_captcha_login($usuario)) { + $this->check_recaptcha_login2(); + } + + $campo = 'E-mail'; + // Si "Fecha de Nacimiento" es vacío + if ($usuario == '') { + $msg_campo_obligatorio = kernel::traductor()->trans('login.error.campo_obligatorio', ['%campo%' => $campo]); + throw new error_preinscripcion($msg_campo_obligatorio); + } + + $pass = trim(kernel::request()->getPost('password')); + $campo = 'Clave'; + // Si "Clave" es vacío + if ($pass == '') { + $msg_campo_obligatorio = kernel::traductor()->trans('login.error.campo_obligatorio', ['%campo%' => $campo]); + throw new error_preinscripcion($msg_campo_obligatorio); + } + + } catch (error_preinscripcion $e) { + $this->error_login = $e; + intentos_login::error($usuario); + kernel::log()->add_error($e); + return null; + } + + if (!empty($usuario)) { + // Login tradicional + $this->usuario = $usuario; + $pass = kernel::request()->getPost('password'); + + try { + $this->id_persona = $this->validar_user_pass($usuario, $pass); + + // Borro de la sesión si autentica bien + kernel::sesion()->borrar('form_usuario'); + + return $this->id_persona; + } catch (error_preinscripcion_login $e) { + //guardar errores para mostrar en el render_login() + $this->error_login = $e; + intentos_login::error($usuario); + kernel::log()->add_error($e); + } catch (error_preinscripcion_mail_no_validado $e) { + //guardar errores para mostrar en el render_login() + $this->error_login = $e; + intentos_login::error($usuario); + kernel::log()->add_error($e); + } + } else { + // Login desde asociación de SE + $id_se = kernel::sesion()->get('id_se'); + $mail_se = kernel::sesion()->get('mail_se'); + $medio_se = kernel::sesion()->get('medio_se'); + } + } + return null; + } + + public function get_modelo() + { + $datos = []; + $datos['accion'] = kernel::vinculador()->crear('acceso', 'index', ['auth' => 'form']); + $datos['campos'] = array( + "usuario" => array('name' => "usuario", 'type' => "text", 'value' => ''), + "password" => array('name' => "password", 'type' => "password", 'value' => ''), + "submit" => array('name' => "login", 'type' => "submit", 'value' => 'Ingresar'), + "recaptcha_challenge_field" => array('name' => "recaptcha_challenge_field", 'type' => "hidden", 'value' => ''), + "recaptcha_response_field" => array('name' => "recaptcha_response_field", 'type' => "hidden", 'value' => ''), + ); + + // Si falló la validación tomo los datos previamente ingresados + if (kernel::sesion()->esta_seteada('form_usuario')) { + $datos['usuario'] = kernel::sesion()->get('form_usuario'); + kernel::sesion()->borrar('form_usuario'); + } else { // Sino por defecto vacío + $datos['usuario'] = ''; + } + + $datos['usar_captcha'] = false; //se pisa si es post el usuario excede el limite + if (kernel::request()->isPost()) { + $usuario = trim(a_minusculas(kernel::request()->getPost('usuario'))); + $datos['usar_captcha'] = $this->usar_captcha_login($usuario); + if ($this->error_login) { + $datos['error'] = $this->error_login->get_mensaje(); + } + } + return $datos; + } + + protected function validar_user_pass($usuario, $password) + { + $parametros = $this->get_parametros(); + $clase_login = kernel::localizador()->instanciar($parametros['clase_login']); + $id_persona = $clase_login->autenticar($usuario, $password); + intentos_login::eliminar($usuario); + return $id_persona; + } + + /** + * Cerrar sesion en el proveedor. + */ + public function logout() + { + //como es la misma sesion que el kernel no la toco. + } + + //-------------------------------------------------------------------------- + //---- RECAPTCHA ----------------------------------------------------------- + //-------------------------------------------------------------------------- + + protected function check_recaptcha_login2() + { + $rs = controlador_preinscripcion::check_recaptcha2(); + if (!$rs) { + $msg_error_recaptcha = kernel::traductor()->trans('error_recaptcha'); + throw new error_preinscripcion($msg_error_recaptcha); + } + } + + protected function usar_captcha_login($identificador_usuario) + { + return intentos_login::usar_recaptcha($identificador_usuario); + } + + function controlar_captcha_login($identificador_usuario) + { + return intentos_login::controlar_recaptcha($identificador_usuario); + } + + /** + * Se invoca luego de abrir sesion en el kernel (luego de una autenticacion exitosa) + */ + public function evt_sesion_abierta() + { + parent::evt_sesion_abierta(); + kernel::sesion()->set('_usuario_alumno_', $this->usuario); + } + + function evt_persona_instanciada($persona, $autenticada) + { + if (($autenticada) && (kernel::sesion()->esta_seteada('_usuario_alumno_'))) { + $persona->set_email(kernel::sesion()->get('_usuario_alumno_')); + } + } + +} \ No newline at end of file diff --git a/src/siu/modelo/autenticacion/auth_form_documento.php b/src/siu/modelo/autenticacion/auth_form_documento.php new file mode 100644 index 0000000..0b41230 --- /dev/null +++ b/src/siu/modelo/autenticacion/auth_form_documento.php @@ -0,0 +1,267 @@ +session->abrir_sesion($id_persona, false); + * Si no guardar los errores necesarios para renderizarse en render_login + * @return bool si tuvo exito + */ + public function autenticar() + { + if (kernel::request()->isPost()) { + + try { + + $pais_documento = trim(kernel::request()->getPost('pais_documento')); + $tipo_documento = trim(kernel::request()->getPost('tipo_documento')); + $nro_documento = trim(kernel::request()->getPost('nro_documento')); + $fecha_nacimiento = trim(kernel::request()->getPost('fecha_nacimiento')); + + // Guardo en sesión por si falla la validación y hay que repopular los campos + kernel::sesion()->set('form_documento_pais_documento', $pais_documento); + kernel::sesion()->set('form_documento_tipo_documento', $tipo_documento); + kernel::sesion()->set('form_documento_nro_documento', $nro_documento); + kernel::sesion()->set('form_documento_fecha_nacimiento', $fecha_nacimiento); + + $clave_captcha = $this->generar_clave_captcha($pais_documento, $tipo_documento, $nro_documento, $fecha_nacimiento); + $usa_captcha = kernel::proyecto()->get('usa_captcha'); + // Si usa captcha valido el mismo + if ($usa_captcha && $this->controlar_captcha_login($clave_captcha)) { + $this->check_recaptcha_login2(); + } + + // Valido todos los campos + $campo = 'País emisor del documento'; + // Si "País emisor del documento" no es un integer + if (filter_var($pais_documento, FILTER_VALIDATE_INT) === false) { + $msg_campo_invalido = kernel::traductor()->trans('login.error.campo_invalido', ['%campo%' => $campo]); + throw new error_preinscripcion($msg_campo_invalido); + } + $campo = 'Tipo de Documento'; + // Si "Tipo de Documento" no es un integer + if (filter_var($tipo_documento, FILTER_VALIDATE_INT) === false) { + $msg_campo_invalido = kernel::traductor()->trans('login.error.campo_invalido', ['%campo%' => $campo]); + throw new error_preinscripcion($msg_campo_invalido); + } + + $campo = 'Número de documento'; + // Si "Número de documento" es vacío + if ($nro_documento == '') { + $msg_campo_obligatorio = kernel::traductor()->trans('login.error.campo_obligatorio', ['%campo%' => $campo]); + throw new error_preinscripcion($msg_campo_obligatorio); + } + + $campo = 'Fecha de Nacimiento'; + // Si "Fecha de Nacimiento" es vacío + if ($fecha_nacimiento == '') { + $msg_campo_obligatorio = kernel::traductor()->trans('login.error.campo_obligatorio', ['%campo%' => $campo]); + throw new error_preinscripcion($msg_campo_obligatorio); + } + + // Si "Fecha de Nacimiento" es inválida + if (!es_fecha_valida($fecha_nacimiento)) { + $msg_campo_invalido = kernel::traductor()->trans('login.error.campo_invalido', ['%campo%' => $campo]); + throw new error_preinscripcion($msg_campo_invalido); + } + + $pass = trim(kernel::request()->getPost('password')); + $campo = 'Clave'; + // Si "Clave" es vacío + if ($pass == '') { + $msg_campo_obligatorio = kernel::traductor()->trans('login.error.campo_obligatorio', ['%campo%' => $campo]); + throw new error_preinscripcion($msg_campo_obligatorio); + } + + $fecha_nacimiento_obj = \DateTime::createFromFormat(comunes::formato_fecha_visual_php, $fecha_nacimiento); + $fecha_nacimiento_db = $fecha_nacimiento_obj->format(comunes::formato_fecha_php); + $usuario = preinscripcion::usuario()->get_usuario_by_documento($pais_documento, $tipo_documento, $nro_documento, $fecha_nacimiento_db); + + // Si no existe el usuario + if (is_null($usuario)) { + $msg_usuario_no_encontrado = kernel::traductor()->trans('login.error.usuario_no_encontrado', ['%documento%' => $nro_documento]); + throw new error_preinscripcion($msg_usuario_no_encontrado); + } + + } catch (error_preinscripcion $e) { + $this->error_login = $e; + intentos_login::error($clave_captcha); + kernel::log()->add_error($e); + return null; + } + + if (!empty($usuario)) + { + // Login tradicional + $this->usuario = $usuario; + + try { + + $this->id_persona = $this->validar_user_pass($usuario, $pass, $clave_captcha); + + // Borro de la sesión si autentica bien + kernel::sesion()->borrar('form_documento_pais_documento'); + kernel::sesion()->borrar('form_documento_tipo_documento'); + kernel::sesion()->borrar('form_documento_nro_documento'); + kernel::sesion()->borrar('form_documento_fecha_nacimiento'); + + return $this->id_persona; + } catch (error_preinscripcion_login $e) { + //guardar errores para mostrar en el render_login() + $this->error_login = $e; + intentos_login::error($clave_captcha); + kernel::log()->add_error($e); + } catch (error_preinscripcion_mail_no_validado $e) { + //guardar errores para mostrar en el render_login() + $this->error_login = $e; + intentos_login::error($clave_captcha); + kernel::log()->add_error($e); + } + } else { + // Login desde asociación de SE + $id_se = kernel::sesion()->get('id_se'); + $mail_se = kernel::sesion()->get('mail_se'); + $medio_se = kernel::sesion()->get('medio_se'); + } + } + return null; + } + + public function get_modelo() + { + $datos = []; + $datos['accion'] = kernel::vinculador()->crear('acceso', 'index', ['auth' => 'form_documento']); + + // Si falló la validación tomo los datos previamente ingresados + if (kernel::sesion()->esta_seteada('form_documento_pais_documento')) { + $datos['pais'] = kernel::sesion()->get('form_documento_pais_documento'); + kernel::sesion()->borrar('form_documento_pais_documento'); + } else { // Sino por defecto Argentina + $datos['pais'] = paises::ARGENTINA; + } + + // Si falló la validación tomo los datos previamente ingresados + if (kernel::sesion()->esta_seteada('form_documento_tipo_documento')) { + $datos['tipo_documento'] = kernel::sesion()->get('form_documento_tipo_documento'); + kernel::sesion()->borrar('form_documento_tipo_documento'); + } else { // Sino por defecto DNI + $datos['tipo_documento'] = tipos_documentos::DNI; + } + + // Si falló la validación tomo los datos previamente ingresados + if (kernel::sesion()->esta_seteada('form_documento_nro_documento')) { + $datos['nro_documento'] = kernel::sesion()->get('form_documento_nro_documento'); + kernel::sesion()->borrar('form_documento_nro_documento'); + } else { // Sino por defecto vacío + $datos['nro_documento'] = ''; + } + + // Si falló la validación tomo los datos previamente ingresados + if (kernel::sesion()->esta_seteada('form_documento_fecha_nacimiento')) { + $datos['fecha_nacimiento'] = kernel::sesion()->get('form_documento_fecha_nacimiento'); + kernel::sesion()->borrar('form_documento_fecha_nacimiento'); + } else { // Sino por defecto vacío + $datos['fecha_nacimiento'] = ''; + } + + // Recupero todos los países + $datos['paises'] = util::opciones()->get_paises(false); + + // Recupero todos los tipos de documentos del país + $condicion = "mdp_tipo_documento_pais.pais = {$datos['pais']}"; + $datos['tipos_documentos'] = g3::entidad('tipos_documentos_pais')->get_opciones_pais($condicion); + + + $datos['usar_captcha'] = false; //se pisa si es post el usuario excede el limite + if (kernel::request()->isPost()) { + $clave_captcha = $this->generar_clave_captcha($datos['pais'], $datos['tipo_documento'], $datos['nro_documento'], $datos['fecha_nacimiento']); + $datos['usar_captcha'] = $this->usar_captcha_login($clave_captcha); + if ($this->error_login) { + $datos['error'] = $this->error_login->get_mensaje(); + } + } + return $datos; + } + + protected function validar_user_pass($usuario, $password, $clave_captcha) + { + $parametros = $this->get_parametros(); + $clase_login = kernel::localizador()->instanciar($parametros['clase_login']); + $id_persona = $clase_login->autenticar($usuario, $password); + intentos_login::eliminar($clave_captcha); + return $id_persona; + } + + protected function generar_clave_captcha($pais_documento, $tipo_documento, $nro_documento, $fecha_nacimiento) + { + $clave_captcha = "{$pais_documento}|{$tipo_documento}|{$nro_documento}|{$fecha_nacimiento}"; + return base64_encode($clave_captcha); + } + + /** + * Cerrar sesion en el proveedor. + */ + public function logout() + { + //como es la misma sesion que el kernel no la toco. + } + + //-------------------------------------------------------------------------- + //---- RECAPTCHA ----------------------------------------------------------- + //-------------------------------------------------------------------------- + + protected function check_recaptcha_login2() + { + $rs = controlador_preinscripcion::check_recaptcha2(); + if (!$rs) { + $msg_error_recaptcha = kernel::traductor()->trans('error_recaptcha'); + throw new error_preinscripcion($msg_error_recaptcha); + } + } + + protected function usar_captcha_login($identificador_usuario) + { + return intentos_login::usar_recaptcha($identificador_usuario); + } + + function controlar_captcha_login($identificador_usuario) + { + return intentos_login::controlar_recaptcha($identificador_usuario); + } + + /** + * Se invoca luego de abrir sesion en el kernel (luego de una autenticacion exitosa) + */ + public function evt_sesion_abierta() + { + parent::evt_sesion_abierta(); + kernel::sesion()->set('_usuario_alumno_', $this->usuario); + } + + function evt_persona_instanciada($persona, $autenticada) + { + if (($autenticada) && (kernel::sesion()->esta_seteada('_usuario_alumno_'))) { + $persona->set_email(kernel::sesion()->get('_usuario_alumno_')); + } + } + +} \ No newline at end of file diff --git a/src/siu/modelo/autenticacion/auth_token.php b/src/siu/modelo/autenticacion/auth_token.php new file mode 100644 index 0000000..7cdaa2f --- /dev/null +++ b/src/siu/modelo/autenticacion/auth_token.php @@ -0,0 +1,68 @@ +validate_param('t', 'get', validador::TIPO_ALPHANUM); + try { + $expiracion_token = preinscripcion::usuario()->validar_expiracion_token($token); + $datos = preinscripcion::usuario()->validar_mail($token); + $this->e_mail = $datos['e_mail']; + kernel::sesion()->set('mensaje_primer_acceso', 'mensaje_primer_acceso'); + return $datos['id_preinscripcion']; + } catch (error_preinscripcion_token $e) { + kernel::sesion()->set('mensaje_vista_acceso_error_token', 'error_token_expiro'); + $this->error_login = $e; + } catch (error_preinscripcion $e) { + kernel::sesion()->set('mensaje_vista_acceso_error', 'error_token'); + $this->error_login = $e; + } + return false; + } + + public function get_modelo() + { + $datos = array(); + if ($this->error_login) { + $datos['error'] = $this->error_login->get_mensaje(); + } + return $datos; + } + + /** + * Cerrar sesion en el proveedor. + */ + public function logout() + { + //como es la misma sesion que el kernel no la toco. + } + + /** + * Se invoca luego de abrir sesion en el kernel (luego de una autenticacion exitosa) + */ + public function evt_sesion_abierta() + { + parent::evt_sesion_abierta(); + kernel::sesion()->set('_usuario_alumno_', $this->e_mail); + } + + function evt_persona_instanciada($persona, $autenticada) + { + if (($autenticada) && (kernel::sesion()->esta_seteada('_usuario_alumno_'))) { + $persona->set_email(kernel::sesion()->get('_usuario_alumno_')); + } + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/clienteRDI.php b/src/siu/modelo/clienteRDI.php new file mode 100644 index 0000000..fe32057 --- /dev/null +++ b/src/siu/modelo/clienteRDI.php @@ -0,0 +1,46 @@ +usa_rdi()) { + throw new error_preinscripcion('El sistema no está configurado para usar RDI.'); + } + \RDIAutoload::registrar(); + } + + function get_cliente() + { + if (!isset($this->clienteRdi)) { + $this->clienteRdi = $this->instanciar_cliente(); + } + return $this->clienteRdi; + } + + //-------------------------------------------------------------------------- + //---- Métodos auxiliares + //-------------------------------------------------------------------------- + + protected function instanciar_cliente() + { + $parametros = kernel::proyecto()->get_parametros_rdi(); + $rdi = new \RDICliente( + $parametros['conector'], $parametros['repositorio'], $parametros['usuario'], $parametros['clave'], $parametros['proyecto'], $_SERVER['ID_PTO_ACCESO'] // Instalación + ); + $log = new chulupi_logger_rdi(); + $log->set_activo(true); + $rdi->asociarLog($log); + return $rdi; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/comunes.php b/src/siu/modelo/comunes.php new file mode 100644 index 0000000..ef87480 --- /dev/null +++ b/src/siu/modelo/comunes.php @@ -0,0 +1,175 @@ +diff(new \DateTime('now'))->y; + kernel::log()->add_debug("=== edad ===", $edad); + return $edad; + } + + /** + * Adaptación del count de PHP para que en la versión 7.2 no se muestre el + * warning: "Parameter must be an array or an object that implements Countable". + * @param mixed $dato + * @return int 0 o el tamaño de un arreglo u objeto contable + */ + static function count($dato) { + return (is_array($dato) || $dato instanceof Countable) ? count($dato) : 0; + } + + // https://es.wikipedia.org/wiki/Clave_%C3%9Anica_de_Identificaci%C3%B3n_Tributaria + static function validarCUIT( $cuit ){ + $cuit = preg_replace( '/[^\d]/', '', (string) $cuit ); + if( strlen( $cuit ) != 11 ){ + return false; + } + $acumulado = 0; + $digitos = str_split( $cuit ); + $digito = array_pop( $digitos ); + + for( $i = 0; $i < static::count( $digitos ); $i++ ){ + $acumulado += $digitos[ 9 - $i ] * ( 2 + ( $i % 6 ) ); + } + $verif = 11 - ( $acumulado % 11 ); + $verif = $verif == 11? 0 : $verif; + + return $digito == $verif; + } + +} \ No newline at end of file diff --git a/src/siu/modelo/consultas.php b/src/siu/modelo/consultas.php new file mode 100644 index 0000000..127b163 --- /dev/null +++ b/src/siu/modelo/consultas.php @@ -0,0 +1,617 @@ +consultar_fila($sql); + $salida = $datos['version_base']; + } catch (error_kernel_db $e) { + throw new error_preinscripcion_cnx_bd('error_cnx_bd'); + } + + return $salida; + } + + //-------------------------------------------------------------------------- + //---- Configuración del formulario de Preinscripción ---------------------- + //-------------------------------------------------------------------------- + + /** + * Tipos de propuestas + * + * @return array + */ + function get_propuestas_tipos() + { + $sql = "SELECT + propuesta_tipo, + descripcion + FROM + sga_propuestas_tipos; + "; + + return util::catalogo()->consultar($sql); + } + + /** + * Campos de la tabla sga_preinscripcion + * + * @return array + */ + function get_campos_formulario_preinscripcion() + { + $sql = "SELECT column_name + FROM information_schema.columns + WHERE table_name = 'sga_preinscripcion' + "; + + $datos = util::catalogo()->consultar($sql); + return aplanar_matriz($datos, 'column_name'); + } + + function get_parametros_campos_form($propuesta_tipo = null) + { + if ($propuesta_tipo) { + $where = 'WHERE propuesta_tipo = ' . kernel::db()->quote($propuesta_tipo); + } else { + $where = ''; + } + + $sql = "SELECT + propuesta_tipo, + columna, + visible, + obligatorio, + se_imprime, + genera_reporte + FROM + sga_campos_conf + $where"; + + return kernel::db()->consultar($sql); + } + + //-------------------------------------------------------------------------- + //---- Datos de Preinscripción --------------------------------------------- + //-------------------------------------------------------------------------- + + /** + * Obtiene los datos básicos de una cuenta a partir del nombre de e_mail + * + * @param string $e_mail + * @return array + */ + function get_datos_basicos_cuenta($e_mail) + { + $e_mail = kernel::db()->quote($e_mail); + + $sql = "SELECT + sga_preinscripcion.id_preinscripcion, + sga_preinscripcion.e_mail, + + COALESCE(sga_preinscripcion.apellido_elegido, sga_preinscripcion.apellido) as apellido, + COALESCE(sga_preinscripcion.nombres_elegido, sga_preinscripcion.nombres) as nombres, + + sga_preinscripcion.pais_documento, + sga_preinscripcion.tipo_documento, + sga_preinscripcion.nro_documento, + sga_preinscripcion.nacionalidad + FROM + sga_preinscripcion + WHERE + sga_preinscripcion.e_mail = $e_mail + "; + + $datos = kernel::db()->consultar_fila($sql); + + // Campos descriptivos que se obtienen de G3 + $datos['pais_documento_desc'] = g3::entidad('paises')->get_nombre($datos['pais_documento']); + $datos['tipo_documento_desc'] = g3::entidad('tipos_documentos_pais')->get_nombre($datos['pais_documento']."_".$datos['tipo_documento']); + //g3::entidad('tipos_documentos_pais')->get_nombre($datos['tipo_documento']); + $datos['tipo_documento_desc_abreviada'] = g3::entidad('tipos_documentos_pais')->get_nombre_abreviado($datos['pais_documento']."_".$datos['tipo_documento']); + $datos['nacionalidad_desc'] = g3::entidad('nacionalidades')->get_nombre($datos['nacionalidad']); + + return $datos; + } + + /** + * Obtiene todos los datos del formulario de preinscripción + * + * @param int $id_preinscripcion + * @return array + */ + function get_datos_preinscripcion($id_preinscripcion) + { + $id_preinscripcion = kernel::db()->quote($id_preinscripcion); + + $sql = "SELECT + * + FROM + sga_preinscripcion + WHERE + id_preinscripcion = $id_preinscripcion"; + + $datos = kernel::db()->consultar_fila($sql); + + return $datos; + } + + /** + * Obtiene los campos del formulario de preinscripción con los formateos que + * correspondan para visualización y los campos descriptivos. + * + * @param int $id_preinscripcion + * @return array + */ + function get_datos_preinscripcion_formateados($id_preinscripcion) + { + $id_preinscripcion = kernel::db()->quote($id_preinscripcion); + + $sql = "SELECT + * + FROM + sga_preinscripcion + WHERE + id_preinscripcion = $id_preinscripcion"; + + $datos = kernel::db()->consultar_fila($sql); + + // Se descompone el número de celular para mostrarlo en el formulario + if (!empty($datos['celular_numero'])) { + $datos_cel = explode('-', $datos['celular_numero']); + $datos['celular_caracteristica'] = trim($datos_cel[1]); + $datos['celular_valor'] = trim($datos_cel[3]); + } + + // Formateo de fechas + if (!empty($datos['fecha_nacimiento'])) { + $datos['fecha_nacimiento'] = convertir_fecha_formato_frontend($datos['fecha_nacimiento']); + } + if (!empty($datos['fecha_respre_otorg'])) { + $datos['fecha_respre_otorg'] = convertir_fecha_formato_frontend($datos['fecha_respre_otorg']); + } + if (!empty($datos['fecha_respre_venc'])) { + $datos['fecha_respre_venc'] = convertir_fecha_formato_frontend($datos['fecha_respre_venc']); + } + if (!empty($datos['otorgamiento_visa'])) { + $datos['otorgamiento_visa'] = convertir_fecha_formato_frontend($datos['otorgamiento_visa']); + } + if (!empty($datos['vencimiento_visa'])) { + $datos['vencimiento_visa'] = convertir_fecha_formato_frontend($datos['vencimiento_visa']); + } + if (!empty($datos['fecha_ult_modif'])) { + $datos['fecha_ult_modif'] = convertir_fecha_formato_frontend($datos['fecha_ult_modif']); + } + + // Campos descriptivos que se obtiene de G3 + $datos['pais_documento_desc'] = g3::entidad('paises')->get_nombre($datos['pais_documento']); + $datos['tipo_documento_desc'] = g3::entidad('tipos_documentos_pais')->get_nombre($datos['pais_documento']."_".$datos['tipo_documento']); + $datos['tipo_documento_desc_abreviada'] = g3::entidad('tipos_documentos_pais')->get_nombre_abreviado($datos['pais_documento']."_".$datos['tipo_documento']); + $datos['nacionalidad_desc'] = g3::entidad('nacionalidades')->get_nombre($datos['nacionalidad']); + + $datos['loc_nac_descr'] = g3::entidad('localidades')->get_nombre($datos['loc_nacimiento']); + $datos['loc_per_lect_descr'] = g3::entidad('localidades')->get_nombre($datos['loc_per_lect']); + $datos['loc_proc_descr'] = g3::entidad('localidades')->get_nombre($datos['loc_proc']); + $datos['loc_pers_alleg_descr'] = g3::entidad('localidades')->get_nombre($datos['loc_pers_alleg']); + + $datos['colegio_secundario_descr'] = g3::entidad('colegios')->get_nombre($datos['colegio_secundario']); + $datos['titulo_secundario_descr'] = g3::titulos_secundario()->get_nombre($datos['titulo_secundario']); + + return $datos; + } + + /** + * Obtiene las propuestas en las que está inscripto el aspirante + * + * @param string $id_preinscripcion + * @return array + */ + function get_propuestas_insc($id_preinscripcion) + { + $id_preinscripcion = kernel::db()->quote($id_preinscripcion); + + $sql = "SELECT + id_preinscripcion, + responsable_academica, + propuesta, + ubicacion, + modalidad, + periodo_insc, + estado, + fecha_preinscripcion, + fecha_fin_vigencia, + observaciones + FROM + sga_preinscripcion_propuestas + WHERE + sga_preinscripcion_propuestas.id_preinscripcion = $id_preinscripcion + AND fecha_fin_vigencia >= CURRENT_DATE + ORDER BY + responsable_academica + "; + + $datos = kernel::db()->consultar($sql); + + // Si corresponde, se obtienen las descripciones + $salida = array(); + foreach ($datos as $dato) { + $dato['ra_nombre'] = g3::responsables_academicas()->get_nombre($dato['responsable_academica']); + $dato['propuesta_nombre'] = g3::propuestas()->get_nombre($dato['propuesta']); + $dato['ubicacion_nombre'] = g3::entidad('ubicaciones')->get_nombre($dato['ubicacion']); + $dato['modalidad_nombre'] = g3::entidad('modalidades')->get_nombre($dato['modalidad']); + $dato['propuesta_tipo'] = g3::propuestas()->get_id_tipo_propuesta($dato['propuesta']); + $dato['tipo_propuesta_descr'] = g3::propuestas()->get_tipo_propuesta($dato['propuesta']); + // Si se obtuvieron descripciones es porque pasó el filtro de perfil de datos + if ((!empty($dato['ra_nombre'])) && (!empty($dato['propuesta_nombre'])) && (!empty($dato['ubicacion_nombre'])) + && (!empty($dato['modalidad_nombre'])) && (!empty($dato['propuesta_tipo'])) && (!empty($dato['tipo_propuesta_descr']))) { + $salida[] = $dato; + } + } + + return $salida; + } + + /** + * Obtiene los datos de actuación docente cargados por el aspirante + * + * @param int $id_preinscripcion + * @return array + */ + function get_datos_actuacion_docente($id_preinscripcion) + { + $id_preinscripcion = kernel::db()->quote($id_preinscripcion); + + $sql = "SELECT + actuacion_doc, + id_preinscripcion, + institucion, + institucion_prein, + cargo, + materia, + hora_sem_trab, + fecha_desde, + fecha_hasta + FROM + sga_actuacion_doc + WHERE + id_preinscripcion = $id_preinscripcion"; + + $datos = kernel::db()->consultar($sql); + + // Ajuste de datos para visualización + $nuevo = array(); + foreach ($datos as $dato) { + if (!empty($dato['hora_sem_trab'])) { + $horas_descr = util::opciones()->get_hora_sem_trab_alum(); + $dato['hora_sem_trab_descr'] = $horas_descr[$dato['hora_sem_trab']]; + } else { + $dato['hora_sem_trab_descr'] = ''; + } + + if (!empty($dato['fecha_desde'])) { + $dato['fecha_desde'] = convertir_fecha_formato_frontend($dato['fecha_desde']); + } + + if (!empty($dato['fecha_hasta'])) { + $dato['fecha_hasta'] = convertir_fecha_formato_frontend($dato['fecha_hasta']); + } + + //---- ID encriptado ------------------------------------------- + $id = util::catalogo()->generar_id($dato['actuacion_doc']); + $nuevo[$id] = $dato; + $nuevo[$id][catalogo::id] = $id; + } + + return $nuevo; + } + + /** + * Obtiene los datos de actuación profesional cargados por el aspirante + * + * @param int $id_preinscripcion + * @return array + */ + function get_datos_actuacion_profesional($id_preinscripcion) + { + $id_preinscripcion = kernel::db()->quote($id_preinscripcion); + + $sql = "SELECT + actuacion_prof, + id_preinscripcion, + empresa, + cargo, + area, + hora_sem_trab, + fecha_desde, + fecha_hasta + FROM + sga_actuacion_prof + WHERE + id_preinscripcion = $id_preinscripcion"; + + $datos = kernel::db()->consultar($sql); + + // Ajuste de datos para visualización + $nuevo = array(); + foreach ($datos as $dato) { + + $dato['antec_empresa'] = $dato['empresa']; + + if (!empty($dato['hora_sem_trab'])) { + $horas_descr = util::opciones()->get_hora_sem_trab_alum(); + $dato['hora_sem_trab_descr'] = $horas_descr[$dato['hora_sem_trab']]; + } else { + $dato['hora_sem_trab_descr'] = ''; + } + + if (!empty($dato['fecha_desde'])) { + $dato['fecha_desde'] = convertir_fecha_formato_frontend($dato['fecha_desde']); + } + + if (!empty($dato['fecha_hasta'])) { + $dato['fecha_hasta'] = convertir_fecha_formato_frontend($dato['fecha_hasta']); + } + + //---- ID encriptado ------------------------------------------- + $id = util::catalogo()->generar_id($dato['actuacion_prof']); + $nuevo[$id] = $dato; + $nuevo[$id][catalogo::id] = $id; + } + + return $nuevo; + } + + /** + * Obtiene los datos de formación académica cargados por el aspirante + * + * @param int $id_preinscripcion + * @return array + */ + function get_datos_formacion_acad($id_preinscripcion) + { + $id_preinscripcion = kernel::db()->quote($id_preinscripcion); + + $sql = "SELECT + formacion_acad, + id_preinscripcion, + titulo_superior, + titulo_sup_prein, + institucion, + institucion_prein, + fecha_ingreso, + fecha_egreso, + titulo_tesis, + director_tesis, + categoria_coneau, + duracion_teorica, + nivel_estudio, + estado + FROM + sga_formacion_acad + WHERE + id_preinscripcion = $id_preinscripcion"; + + $datos = kernel::db()->consultar($sql); + + // Ajuste de datos para visualización + $nuevo = array(); + foreach ($datos as $key => $dato) { + // Ajustes para visualización + if (!empty($dato['categoria_coneau'])) { + $categorias_coneau = util::opciones()->get_categorias_coneau(); + $categoria = trim($dato['categoria_coneau']); + $dato['categoria_coneau'] = $categoria; + $dato['categoria_coneau_descr'] = $categorias_coneau[$categoria]; + } else { + $dato['categoria_coneau_descr'] = ''; + } + + if (!empty($dato['nivel_estudio'])) { + $niveles = util::opciones()->get_niveles_estudio_fa(); + $dato['nivel_estudio_descr'] = $niveles[$dato['nivel_estudio']]; + } else { + $dato['nivel_estudio_descr'] = ''; + } + + if (!empty($dato['estado'])) { + $estados = util::opciones()->get_estados_antecedente_fa(); + $dato['estado_descr'] = $estados[$dato['estado']]; + } else { + $dato['estado_descr'] = ''; + } + + if (!empty($dato['fecha_ingreso'])) { + $dato['fecha_ingreso'] = convertir_fecha_formato_frontend($dato['fecha_ingreso']); + } + + if (!empty($dato['fecha_egreso'])) { + $dato['fecha_egreso'] = convertir_fecha_formato_frontend($dato['fecha_egreso']); + } + + //---- ID encriptado ------------------------------------------- + $id = util::catalogo()->generar_id($dato['formacion_acad']); + $nuevo[$id] = $dato; + $nuevo[$id][catalogo::id] = $id; + } + + return $nuevo; + } + + //-------------------------------------------------------------------------- + //---- PERFIL DE DATOS ----------------------------------------------------- + //-------------------------------------------------------------------------- + + /** + * Obtiene la configuración establecida de perfil de datos + * + * @return array + */ + function get_config_perfil_datos() + { + $id_pto_acceso = kernel::db()->quote($_SERVER['ID_PTO_ACCESO']); + + $sql = "SELECT + id_pto_acceso, + ra, + propuesta_tipo, + propuesta, + ubicacion + FROM + cfg_perfiles_datos + WHERE + id_pto_acceso = $id_pto_acceso + ORDER BY + ra, + propuesta_tipo, + propuesta + "; + + $datos = kernel::db()->consultar($sql); + $salida = array( + 'ra' => array(), + 'propuesta_tipo' => array(), + 'propuesta' => array(), + 'ubicacion' => array(), + ); + foreach ($datos as $dato) { + if (!is_null($dato['ra'])) { + $salida['ra'][] = $dato['ra']; + } + if (!is_null($dato['propuesta_tipo'])) { + $salida['propuesta_tipo'][] = $dato['propuesta_tipo']; + } + if (!is_null($dato['propuesta'])) { + $salida['propuesta'][] = $dato['propuesta']; + } + if (!is_null($dato['ubicacion'])) { + $salida['ubicacion'][] = $dato['ubicacion']; + } + } + return $salida; + } + + //-------------------------------------------------------------------------- + //---- Turno de presentación de documentación ------------------------------ + //-------------------------------------------------------------------------- + + function get_turnos_presentacion($id_preinscripcion) + { + // Recupero las preinscripciones a propuestas + $preinscripcion_propuestas = kernel::persona()->datos()->get_datos_inscripciones(); + + $salida = []; + // Recorro las preinscripciones a propuestas + foreach ($preinscripcion_propuestas as $preinscripcion_propuesta) { + + $responsable_academica = $preinscripcion_propuesta['responsable_academica']; + + // Hay turnos de presentación de documentación disponibles + $hay_turnos = g3::turnos()->hay_turnos_preinscripcion_propuesta( + $responsable_academica, + $preinscripcion_propuesta['ubicacion'], + $preinscripcion_propuesta['modalidad']); + + // Turno asignado + $turno_asignado = g3::turnos()->get_turno_presentacion($id_preinscripcion, $responsable_academica); + + // Hay turno asignado + $hay_turno_asignado = !empty($turno_asignado); + + // Si no hay turnos de presentación de documentación disponibles + // ni tampoco turno asignado + // salteo a la siguiente preinscripción a propuesta + if (!$hay_turnos && !$hay_turno_asignado) { + continue; + } + + // Si ya existe la RA en $salida salteo a la siguiente preinscripción a propuesta + if (isset($salida[$responsable_academica])) { + continue; + } + + $nombre = g3::responsables_academicas()->get_nombre($responsable_academica); + + // Si la RA tiene nombre + if (!empty($nombre)) { + + // Si hay turno asignado + if ($hay_turno_asignado) { + $pre_turno = $turno_asignado['pre_turno']; + $turno_fecha = convertir_fecha_formato_frontend($turno_asignado['fecha']); + $turno_hora = convertir_hora_formato_frontend($turno_asignado['hora']); + $turno_operador = $turno_asignado['operador']; + $asignado = true; + } else {// Si no hay turno asignado + $msg_no_asignado = kernel::traductor()->trans('turno.no_asignado'); + $pre_turno = null; + $turno_fecha = $msg_no_asignado; + $turno_hora = $msg_no_asignado; + $turno_operador = $msg_no_asignado; + $asignado = false; + } + + $salida[$responsable_academica] = [ + 'pre_turno' => $pre_turno, + 'responsable_academica_plana' => $responsable_academica, + 'responsable_academica' => util::catalogo()->generar_id($responsable_academica), + 'responsable_academica_nombre' => $nombre, + 'fecha' => $turno_fecha, + 'hora' => $turno_hora, + 'operador' => $turno_operador, + 'asignado' => $asignado, + ]; + } + } + + return $salida; + } + + //-------------------------------------------------------------------------- + //---- Requisitos digitales ------------------------------------------------ + //-------------------------------------------------------------------------- + + /** + * Obtiene todos los datos del formulario de preinscripción + * + * @param int $id_preinscripcion + * @return array + */ + function get_requisitos_digitales($id_preinscripcion) + { + $id_preinscripcion = kernel::db()->quote($id_preinscripcion); + + $sql = "SELECT + requisito_digital, + id_preinscripcion, + requisito, + id_documento + FROM + sga_requisitos_digitales + WHERE + id_preinscripcion = $id_preinscripcion"; + + $datos = kernel::db()->consultar($sql); + return $datos; + } +} \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/_consultas_bd.php b/src/siu/modelo/g3/consultas_bd/_consultas_bd.php new file mode 100644 index 0000000..c158960 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/_consultas_bd.php @@ -0,0 +1,182 @@ + '', + 'from' => '', + 'where' => '', + 'order_by' => '', + 'clave' => '', + 'campo_nombre' => '' + ); + + abstract static function instancia(); + + protected function consultar($sql, $clave_cache = null) + { + if (util::catalogo()->usa_cache()) { + + if (is_null($clave_cache)) { + $clave_cache = util::catalogo()->generar_id($sql); + } + + if (util::catalogo()->existe($clave_cache)) { + $datos = util::catalogo()->buscar($clave_cache); + } else { + $datos = static::db_g3()->consultar($sql); + util::catalogo()->guardar($clave_cache, $datos, $this->tiempo_cache); + } + } else { + $datos = static::db_g3()->consultar($sql); + } + + return $datos; + } + + protected function ejecutar($sql) + { + static::db_g3()->ejecutar($sql); + } + + protected function consultar_fila($sql, $clave_cache = null) + { + return current($this->consultar($sql, $clave_cache)); + } + + protected static function db_g3() + { + if (!self::$db) { + $param = kernel::proyecto()->get_parametros_db_gestion(); + self::$db = dba::conectar($param); + } + return self::$db; + } + + /** + * + * @param $where Condición adicional para la cláusula WHERE + * @param $id ID de una entidad particular (si es null, se omite) + * Cuando la clave es un campo simple, se espera directamente el valor + * Cuando la clave es compuesta, se espera un array de la forma: + * [ + * 'campo_clave_1' => valor, + * 'campo_clave_2' => valor, + * ... + * ] + * @param $con_perfil_datos boolean + */ + protected function armar_sql($where = '', $id = null, $con_perfil_datos = true) + { + //---- Select / From --------------------------------------------------- + $sql = "SELECT + {$this->sql['select']} + FROM + {$this->sql['from']} + "; + + //---- Where ----------------------------------------------------------- + $clausula_where = ''; + if (!empty($this->sql['where'])) { + $clausula_where .= " + WHERE + {$this->sql['where']} + "; + } + + // Condiciones de filtrado adicionales + if (!empty($where)) { + $conector = (empty($clausula_where)) ? 'WHERE ' : 'AND '; + $clausula_where .= " $conector $where "; + } + + if ($con_perfil_datos) { + $filtro_perfil_datos = $this->filtro_perfil_datos(); + if (!empty($filtro_perfil_datos)) { + $conector = (empty($clausula_where)) ? 'WHERE ' : 'AND '; + $clausula_where .= " $conector $filtro_perfil_datos "; + } + } + + $sql .= $clausula_where; + + if (!is_null($id)) { + $conector = (empty($clausula_where)) ? 'WHERE ' : 'AND '; + + $sql .= " $conector "; + $claves = explode(',', $this->sql['clave']); + $cant_claves = count($claves); + + if ($cant_claves == 1) { + // Clave simple + $sql .= $this->sql['clave'] . ' = ' . kernel::db()->quote($id); + } else { + // Clave compuesta + for ($i = 0; $i < $cant_claves; $i++) { + if ($i > 0) { + $sql .= " AND "; + } + $campo_clave = trim($claves[$i]); + $sql .= $campo_clave . ' = ' . kernel::db()->quote($id[$campo_clave]); + } + } + } + + + + //---- Order by -------------------------------------------------------- + if (!empty($this->sql['order_by'])) { + $sql .= " + ORDER BY + {$this->sql['order_by']} + "; + } + + return $sql; + } + + /** + * La mayoría de las entidades consultadas de G3 no son afectadas por las + * configuraciones de perfil de datos, por eso la salida por defecto es un + * string vacío. Las entidades que necesitan filtrar por perfil de datos + * redefinen esta función. + * + * @return string + */ + protected function filtro_perfil_datos() + { + return ''; + } + +} \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/abandono_estudio.php b/src/siu/modelo/g3/consultas_bd/abandono_estudio.php new file mode 100644 index 0000000..21dc910 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/abandono_estudio.php @@ -0,0 +1,29 @@ + 'razon_abandono, nombre, orden', + 'from' => 'mdp_estudio_abandono', + 'where' => '', + 'order_by' => 'orden', + 'clave' => 'razon_abandono', + 'campo_nombre' => 'nombre' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/cobertura_salud.php b/src/siu/modelo/g3/consultas_bd/cobertura_salud.php new file mode 100644 index 0000000..a9a99a8 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/cobertura_salud.php @@ -0,0 +1,29 @@ + 'cobertura_salud, descripcion', + 'from' => 'mdp_cobertura_salud', + 'where' => '', + 'order_by' => '', + 'clave' => 'cobertura_salud', + 'campo_nombre' => 'descripcion' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/cod_postales.php b/src/siu/modelo/g3/consultas_bd/cod_postales.php new file mode 100644 index 0000000..f3ac858 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/cod_postales.php @@ -0,0 +1,71 @@ + 'localidad, codigo_postal', + 'from' => 'mug_cod_postales', + 'where' => '', + 'order_by' => 'codigo_postal', + 'clave' => 'localidad, codigo_postal', + 'campo_nombre' => 'codigo_postal' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + /** + * Listado de opciones. + * + * @param string $condiciones + * @param boolean $con_no_seleccion + */ + function get_opciones($condiciones = null, $con_no_seleccion = true) + { + $sql = $this->armar_sql($condiciones); + $datos = $this->consultar($sql); + return util::opciones()->armar_combo_opciones($datos, 'codigo_postal', 'codigo_postal', $con_no_seleccion); + } + + /** + * Se ejecutan las funciones de acceso a datos + * + * @return boolean + */ + function test($id) + { + try { + $datos = array(); + $datos['entidad'] = $this->get_entidad($id); + $datos['nombre'] = $this->get_nombre($id); + $datos['nombre_abreviado'] = $this->get_nombre_abreviado($id); + $datos['descr_comprobante'] = $this->get_descr_comprobante($id); + $salida = array( + 'resultado' => true, + 'datos' => $datos, + 'msj' => 'OK', + ); + } catch (\Exception $ex) { + $salida = array( + 'resultado' => false, + 'msj' => $ex->getMessage(), + ); + } + return $salida; + } +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/colegios.php b/src/siu/modelo/g3/consultas_bd/colegios.php new file mode 100644 index 0000000..3ba1c3d --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/colegios.php @@ -0,0 +1,125 @@ + 'sga_colegios_secundarios.colegio, sga_colegios_secundarios.nombre, mug_localidades.nombre AS localidad_nombre', + 'from' => 'sga_colegios_secundarios + LEFT JOIN mug_localidades ON mug_localidades.localidad = sga_colegios_secundarios.localidad', + 'where' => '', + 'order_by' => 'nombre', + 'clave' => 'colegio', + 'campo_nombre' => 'nombre' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + /** + * Nombre de colegio y localidad + * + * @param $id + * @return string + */ + function get_nombre($id = null) + { + if (is_null($id)) { + return null; + } + + $colegio = kernel::db()->quote($id); + + $sql = "SELECT + sga_colegios_secundarios.colegio, + sga_colegios_secundarios.nombre || ' (' || mug_localidades.nombre || ')' AS colegio_nombre_localidad + FROM + sga_colegios_secundarios, + mug_localidades + WHERE + sga_colegios_secundarios.colegio = $colegio + AND sga_colegios_secundarios.localidad = mug_localidades.localidad"; + + $datos = $this->consultar_fila($sql); + + return formatear($datos['colegio_nombre_localidad']); + } + + /** + * Para el caso de colegios, con esta función se obtiene sólo el nombre de Colegio + * + * @param $id + * @return string + */ + function get_nombre_abreviado($id = null) + { + if (is_null($id)) { + return null; + } + $datos = $this->get_entidad($id); + return formatear($datos[$this->sql['campo_nombre']]); + } + + /** + * Obtiene una lista de colegios a partir de una parte de su nombre y su ciudad. + * Para usar con el autocomplete de colegios secundarios. + * + * @param string $colegio_nombre + * @param int $localidad + * @return array + */ + function get_colegios($colegio_nombre, $localidad) + { + $localidad = kernel::db()->quote($localidad); + + if ($colegio_nombre) { + $colegio_nombre = "'%$colegio_nombre%'"; + $where_colegio = "AND f_limpiar_acentos(sga_colegios_secundarios.nombre) ILIKE f_limpiar_acentos($colegio_nombre::text)"; + } else { + $where_colegio = ''; + } + + $sql = "SELECT + sga_colegios_secundarios.colegio, + sga_colegios_secundarios.nombre, + mug_localidades.nombre AS localidad_nombre + FROM + sga_colegios_secundarios + LEFT JOIN mug_localidades ON + mug_localidades.localidad = sga_colegios_secundarios.localidad + WHERE + sga_colegios_secundarios.localidad = $localidad + $where_colegio + "; + + return $this->consultar($sql); + } + + /** + * Prueba las funciones de la interfaz + * + * @param $id + * @return array + */ + function test($id) + { + $salida = parent::test($id); + // Se elimina de la respuesta el listado de opciones para evitar saturar + // el log por la gran cantidad de datos + unset($salida['datos']['opciones']); + $salida['lista_colegios'] = $this->get_colegios('don bo', 17159); + return $salida; + } + +} \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/continentes.php b/src/siu/modelo/g3/consultas_bd/continentes.php new file mode 100644 index 0000000..6d5b1c4 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/continentes.php @@ -0,0 +1,32 @@ + 'continente, nombre', + 'from' => 'mug_continentes', + 'where' => '', + 'order_by' => 'nombre', + 'clave' => 'continente', + 'campo_nombre' => 'nombre' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/dias_no_laborables.php b/src/siu/modelo/g3/consultas_bd/dias_no_laborables.php new file mode 100644 index 0000000..ef4f2d5 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/dias_no_laborables.php @@ -0,0 +1,30 @@ + 'fecha', + 'from' => 'sga_dias_no_laborables', + 'where' => '', + 'order_by' => 'fecha', + 'clave' => 'fecha', + 'campo_nombre' => 'fecha' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/discapacidades_dificultad.php b/src/siu/modelo/g3/consultas_bd/discapacidades_dificultad.php new file mode 100644 index 0000000..d0dc9f5 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/discapacidades_dificultad.php @@ -0,0 +1,42 @@ + 'dificultad, descripcion', + 'from' => 'mdp_dificultad_discapacidad', + 'where' => '', + 'order_by' => 'dificultad', + 'clave' => 'dificultad', + 'campo_nombre' => 'descripcion' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + /** + * Listado de opciones. + * + * @param string $condiciones + * @param boolean $con_no_seleccion + */ + function get_opciones($condiciones = null, $con_no_seleccion = false) + { + $sql = $this->armar_sql($condiciones); + $datos = $this->consultar($sql); + return util::opciones()->armar_combo_opciones($datos, $this->sql['clave'], $this->sql['campo_nombre'], $con_no_seleccion); + } +} \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/dptos_partidos.php b/src/siu/modelo/g3/consultas_bd/dptos_partidos.php new file mode 100644 index 0000000..74dc47d --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/dptos_partidos.php @@ -0,0 +1,58 @@ + 'dpto_partido, nombre', + 'from' => 'mug_dptos_partidos', + 'where' => '', + 'order_by' => 'nombre', + 'clave' => 'dpto_partido', + 'campo_nombre' => 'nombre' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + /** + * Se ejecutan las funciones de acceso a datos + * + * @return boolean + */ + function test($id) + { + try { + $datos = array(); + $datos['entidad'] = $this->get_entidad($id); + $datos['nombre'] = $this->get_nombre($id); + $datos['nombre_abreviado'] = $this->get_nombre_abreviado($id); + $datos['descr_comprobante'] = $this->get_descr_comprobante($id); + $salida = array( + 'resultado' => true, + 'datos' => $datos, + 'msj' => 'OK', + ); + } catch (\Exception $ex) { + $salida = array( + 'resultado' => false, + 'msj' => $ex->getMessage(), + ); + } + return $salida; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/entes_emisores_ci.php b/src/siu/modelo/g3/consultas_bd/entes_emisores_ci.php new file mode 100644 index 0000000..c79e122 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/entes_emisores_ci.php @@ -0,0 +1,30 @@ + 'entidad, nombre', + 'from' => 'mdp_entes_emisores_ci', + 'where' => '', + 'order_by' => 'entidad', + 'clave' => 'entidad', + 'campo_nombre' => 'nombre' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/entidad_g3.php b/src/siu/modelo/g3/consultas_bd/entidad_g3.php new file mode 100644 index 0000000..ba9c05a --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/entidad_g3.php @@ -0,0 +1,134 @@ + '', + 'from' => '', + 'where' => '', + 'order_by' => '', + 'clave' => '', + 'campo_nombre' => '' + ); + + /** + * Listado de opciones. + * + * @param string $condiciones + * @param boolean $con_no_seleccion + */ + function get_opciones($condiciones = null, $con_no_seleccion = true) + { + $sql = $this->armar_sql($condiciones); + $datos = $this->consultar($sql); + return util::opciones()->armar_combo_opciones($datos, $this->sql['clave'], $this->sql['campo_nombre'], $con_no_seleccion); + } + + /** + * Información completa de una entidad particular + * + * @param $id + * @return array + */ + function get_entidad($id) + { + $sql = $this->armar_sql('', $id); + return $this->consultar_fila($sql); + } + + /** + * Determina si un ID corresponde a un valor existente + * + * @param $id + * @return boolean + */ + function existe($id) + { + return !empty($this->get_entidad($id)); + } + + /** + * Nombre o campo descriptivo de una entidad particular + * + * @param $id + * @return string + */ + function get_nombre($id = null) + { + $datos = $this->get_entidad($id); + return formatear($datos[$this->sql['campo_nombre']]); + } + + /** + * Nombre o campo descriptivo abreviado de una entidad particular + * Si la entidad no lleva registro de nombre abreviado, toma el nombre general + * + * @param $id + * @return string + */ + function get_nombre_abreviado($id = null) + { + return formatear($this->get_nombre($id)); + } + + /** + * Nombre o descripción a mostrar en el comprobante PDF. Por defecto se + * retrona el nombre, pero se deja la ventana de extensión por si se necesita + * una descripción diferente. + * + * @param $id + * @return string + */ + function get_descr_comprobante($id) + { + return formatear($this->get_nombre($id)); + } + + /** + * Prueba las funciones de la interfaz + * + * @param $id + * @return array + */ + function test($id) + { + try { + $datos = array(); + $datos['opciones'] = $this->get_opciones(); + $datos['entidad'] = $this->get_entidad($id); + $datos['nombre'] = $this->get_nombre($id); + $datos['nombre_abreviado'] = $this->get_nombre_abreviado($id); + $datos['descr_comprobante'] = $this->get_descr_comprobante($id); + $salida = array( + 'resultado' => true, + 'datos' => $datos, + 'msj' => 'OK', + ); + } catch (\Exception $ex) { + $salida = array( + 'resultado' => false, + 'msj' => $ex->getMessage(), + ); + } + return $salida; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/extensiones.php b/src/siu/modelo/g3/consultas_bd/extensiones.php new file mode 100644 index 0000000..4fd7c5e --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/extensiones.php @@ -0,0 +1,62 @@ +instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + //-------------------------------------------------------------------------- + //---- Implementación interface_extensiones -------------------------------- + //-------------------------------------------------------------------------- + + /** + * Obtiene las extensiones aceptadas para los archivos RDI + * + * @return array + */ + function get_extensiones_permitidas() + { + $sql = "SELECT + LOWER(extension) AS extension + FROM + rdi_extensiones_permitidas + "; + + return $this->consultar($sql); + } + + function test() + { + // Se testean las funciones particualres + try { + $datos = array(); + $datos['extensiones'] = $this->get_extensiones_permitidas(); + $salida = array( + 'resultado' => true, + 'datos' => $datos, + 'msj' => 'OK', + ); + } catch (\Exception $ex) { + $salida = array( + 'resultado' => false, + 'msj' => $ex->getMessage(), + ); + } + return $salida; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/identidad_genero.php b/src/siu/modelo/g3/consultas_bd/identidad_genero.php new file mode 100644 index 0000000..157e656 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/identidad_genero.php @@ -0,0 +1,42 @@ + 'mdp_identidad_genero.identidad_genero as valor, + mdp_identidad_genero.nombre as descr', + 'from' => 'mdp_identidad_genero', + 'where' => '', + 'clave' => 'valor', + 'campo_nombre' => 'descr' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + /** + * Listado de opciones. + * + * @param string $condiciones + * @param boolean $con_no_seleccion + */ + function get_opciones($condiciones = null, $con_no_seleccion = false) + { + $sql = $this->armar_sql($condiciones); + $datos = $this->consultar($sql); + return util::opciones()->armar_combo_opciones($datos, $this->sql['clave'], $this->sql['campo_nombre'], $con_no_seleccion); + } +} \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/localidades.php b/src/siu/modelo/g3/consultas_bd/localidades.php new file mode 100644 index 0000000..77c41b1 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/localidades.php @@ -0,0 +1,157 @@ + 'localidad, nombre, nombre_abreviado', + 'from' => 'mug_localidades', + 'where' => '', + 'order_by' => 'nombre', + 'clave' => 'localidad', + 'campo_nombre' => 'nombre' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + /** + * Nombre de localidad, provincia y país + * Para el caso de la CABA, sólo localidad y país + * + * @param $id + * @return string + */ + function get_nombre($id = null) + { + if (is_null($id)) { + return null; + } + + $localidad = kernel::db()->quote($id); + + $sql = "SELECT + mug_localidades.localidad, + CASE WHEN mug_localidades.localidad = '1' -- CABA + THEN mug_localidades.nombre || ', ' || mug_paises.nombre + ELSE mug_localidades.nombre || ', ' || mug_provincias.nombre || ', ' || mug_paises.nombre + END AS localidad_descr + FROM + mug_localidades, + mug_dptos_partidos, + mug_provincias, + mug_paises + WHERE + mug_localidades.localidad = $localidad + AND mug_localidades.dpto_partido = mug_dptos_partidos.dpto_partido + AND mug_dptos_partidos.provincia = mug_provincias.provincia + AND mug_provincias.pais = mug_paises.pais"; + + $datos = $this->consultar_fila($sql); + + return formatear($datos['localidad_descr']); + } + + /** + * Para el caso de localidades, con esta función se obtiene sólo el nombre + * de la localidad + * + * @param $id + * @return string + */ + function get_nombre_abreviado($id = null) + { + if (is_null($id)) { + return null; + } + $datos = $this->get_entidad($id); + return formatear($datos[$this->sql['campo_nombre']]); + } + + /** + * Obtiene una lista de localidades a partir de una parte de su nombre y el país. + * Para usar principalmente con el autocomplete de localidades. + * + * @param string $localidad_nombre + * @param int $pais + * @return array + */ + function get_lista_localidades($localidad_nombre = '', $pais = null) + { + $where_localidad = ''; + + if (!empty($localidad_nombre)) { + $localidad_nombre = "'%$localidad_nombre%'"; + $where_localidad .= " AND f_limpiar_acentos(mug_localidades.nombre) ILIKE f_limpiar_acentos($localidad_nombre)::text"; + } + + if (!empty($pais)) { + $pais = kernel::db()->quote($pais); + $where_localidad .= " AND mug_paises.pais = $pais"; + } + + $sql = "SELECT + mug_localidades.localidad, + CASE WHEN mug_localidades.localidad = '1' -- CABA + THEN mug_localidades.nombre || ', ' || mug_paises.nombre + ELSE mug_localidades.nombre || ', ' || mug_provincias.nombre || ', ' || mug_paises.nombre + END AS localidad_descr + FROM + mug_localidades, + mug_dptos_partidos, + mug_provincias, + mug_paises + WHERE + mug_localidades.dpto_partido = mug_dptos_partidos.dpto_partido + AND mug_dptos_partidos.provincia = mug_provincias.provincia + AND mug_provincias.pais = mug_paises.pais + $where_localidad + ORDER BY + lower(mug_localidades.nombre), + lower(mug_provincias.nombre) + "; + + return $this->consultar($sql); + } + + /** + * Se ejecutan las funciones de acceso a datos + * + * @return boolean + */ + function test($id) + { + try { + $datos = array(); + $datos['entidad'] = $this->get_entidad($id); + $datos['nombre'] = $this->get_nombre($id); + $datos['nombre_abreviado'] = $this->get_nombre_abreviado($id); + $datos['descr_comprobante'] = $this->get_descr_comprobante($id); + $datos['lista_localidades'] = $this->get_lista_localidades('bahia blan', 54); + $salida = array( + 'resultado' => true, + 'datos' => $datos, + 'msj' => 'OK', + ); + } catch (\Exception $ex) { + $salida = array( + 'resultado' => false, + 'msj' => $ex->getMessage(), + ); + } + return $salida; + } + +} \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/modalidades.php b/src/siu/modelo/g3/consultas_bd/modalidades.php new file mode 100644 index 0000000..c597bc7 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/modalidades.php @@ -0,0 +1,30 @@ + 'modalidad, nombre', + 'from' => 'sga_modalidad_cursada', + 'where' => '', + 'order_by' => '', + 'clave' => 'modalidad', + 'campo_nombre' => 'nombre' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/nacionalidades.php b/src/siu/modelo/g3/consultas_bd/nacionalidades.php new file mode 100644 index 0000000..9eca948 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/nacionalidades.php @@ -0,0 +1,30 @@ + 'nacionalidad, descripcion', + 'from' => 'mdp_nacionalidades', + 'where' => '', + 'order_by' => 'nacionalidad', + 'clave' => 'nacionalidad', + 'campo_nombre' => 'descripcion' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/orientacion_vocacional.php b/src/siu/modelo/g3/consultas_bd/orientacion_vocacional.php new file mode 100644 index 0000000..865b09c --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/orientacion_vocacional.php @@ -0,0 +1,29 @@ + 'orientacion_recibida, nombre, orden', + 'from' => 'mdp_orientacion_recibida', + 'where' => '', + 'order_by' => 'orden', + 'clave' => 'orientacion_recibida', + 'campo_nombre' => 'nombre' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/paises.php b/src/siu/modelo/g3/consultas_bd/paises.php new file mode 100644 index 0000000..7745a1b --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/paises.php @@ -0,0 +1,111 @@ + 'pais, nombre', + 'from' => 'mug_paises', + 'where' => '', + 'order_by' => 'nombre', + 'clave' => 'pais', + 'campo_nombre' => 'nombre' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + /** + * Determina si, de acuerdo a lo configurado en G3, un país requiere visa + * + * @param int $pais + * @return boolean + */ + function necesita_visa($pais) + { + $datos = $this->get_datos_paises_hab($pais); + return (!empty($datos['necesita_visa'])) && ($datos['necesita_visa'] == preinscripcion::si); + } + + /** + * Determina si, de acuerdo a lo configurado en G3, un país permite cédula + * + * @param int $pais + * @return boolean + */ + function permite_cedula($pais) + { + $datos = $this->get_datos_paises_hab($pais); + return (!empty($datos['permite_cedula'])) && ($datos['permite_cedula'] == preinscripcion::si); + } + + /** + * Obtiene los datos de configuración de un país a partir de la tabla mdp_paises_habilitados + * + * @param int $pais + * @return array + */ + protected function get_datos_paises_hab($pais) + { + $pais = kernel::db()->quote($pais); + + $sql = "SELECT + pais, + permite_cedula, + necesita_visa + FROM + mdp_paises_habilitados + WHERE + pais = $pais + "; + + return $this->consultar_fila($sql); + } + + /** + * Se ejecutan las funciones de acceso a datos + * + * @return boolean + */ + function test($id) + { + try { + $datos = array(); + $datos['entidad'] = $this->get_entidad($id); + $datos['nombre'] = $this->get_nombre($id); + $datos['nombre_abreviado'] = $this->get_nombre_abreviado($id); + $datos['descr_comprobante'] = $this->get_descr_comprobante($id); + $datos['necesita_visa'] = $this->necesita_visa($id); + $datos['permite_cedula'] = $this->permite_cedula($id); + $salida = array( + 'resultado' => true, + 'datos' => $datos, + 'msj' => 'OK', + ); + } catch (\Exception $ex) { + $salida = array( + 'resultado' => false, + 'msj' => $ex->getMessage(), + ); + } + return $salida; + } + +} \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/parametros.php b/src/siu/modelo/g3/consultas_bd/parametros.php new file mode 100644 index 0000000..ff65f4e --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/parametros.php @@ -0,0 +1,71 @@ +instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + /** + * Obtiene el valor de un parámetro de Guaraní. + * LIMITACIÓN: únicamente parámetros definidos en nivel 1 (Para toda la Institución) + * + * Uso: para obtener los valores de + * + pre_meses_vigencia_preinsc: Cantidad de meses de vigencia de la preinscripción a propuesta + * + pre_cant_max_propuestas_preinsc: Cantidad máxima de propuestas en las que se puede preinscribir el aspirante + * + * @param string $parametro + */ + function get_valor($parametro) + { + $parametro = kernel::db()->quote(strtoupper($parametro)); + + $sql = "SELECT par_parametros_sistema.valor_default as valor + FROM par_parametros_sistema + WHERE upper(par_parametros_sistema.parametro) = $parametro"; + + $res = $this->consultar_fila($sql); + return $res['valor']; + } + + /** + * Prueba las funciones de la interfaz + * + * @param $parametro + * @return array + */ + function test($parametro) + { + try { + $datos = array(); + $datos['valor'] = $this->get_valor($parametro); + $salida = array( + 'resultado' => true, + 'datos' => $datos, + 'msj' => 'OK', + ); + } catch (\Exception $ex) { + $salida = array( + 'resultado' => false, + 'msj' => $ex->getMessage(), + ); + } + return $salida; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/periodos.php b/src/siu/modelo/g3/consultas_bd/periodos.php new file mode 100644 index 0000000..eefc07f --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/periodos.php @@ -0,0 +1,164 @@ +instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + //-------------------------------------------------------------------------- + //---- Implementación interface_periodos ----------------------------------- + //-------------------------------------------------------------------------- + + /** + * Determina si existe un período de inscripción vigente de tipos + * "Preinscripción" o "Todos" + * + * @return boolean + */ + function existe_periodo_abierto() + { + $periodos = $this->get_periodos_preinscripcion_vigentes(); + return (count($periodos) > 0); + } + + protected function get_periodos_preinscripcion_vigentes() + { + $sql = "SELECT + sga_periodos_inscripcion.periodo_inscripcion, + sga_periodos_inscripcion.nombre + FROM + sga_periodos_inscripcion, + sga_periodos_inscripcion_propuesta + WHERE + sga_periodos_inscripcion.periodo_inscripcion = sga_periodos_inscripcion_propuesta.periodo_inscripcion + AND sga_periodos_inscripcion_propuesta.periodo_insc_tipo IN ('3', '4') -- Períodos de tipo: 'Todos' y 'Preinscripcion' + AND EXISTS ( + SELECT 1 + FROM sga_periodos_inscripcion_fechas + WHERE sga_periodos_inscripcion_fechas.periodo_inscripcion = sga_periodos_inscripcion.periodo_inscripcion + AND CURRENT_DATE BETWEEN sga_periodos_inscripcion_fechas.fecha_inicio AND sga_periodos_inscripcion_fechas.fecha_fin + ) + "; + + return $this->consultar($sql); + } + + /** + * Obtiene el período de Preinscripción vigente (periodo_insc) para una propuesta dada. + * Da prioridad a los períodos de tipo Preinscripción (por encima de los de tipo "Todos"). + * En caso de haber más de uno, decide por el que comience primero. + * + * @param int $propuesta + * @param int $ubicacion + * @param $modalidad + * @return integer $periodo_insc + */ + function get_periodo_preinscripcion($propuesta, $ubicacion, $modalidad) + { + $propuesta = kernel::db()->quote($propuesta); + $ubicacion = kernel::db()->quote($ubicacion); + $modalidad = kernel::db()->quote($modalidad); + + $sql = "SELECT DISTINCT + vw_periodos_insc_propuesta.periodo_insc, + vw_periodos_insc_propuesta.periodo_inscripcion, + vw_periodos_insc_propuesta.fecha_inicio, + vw_periodos_insc_propuesta.periodo_insc_tipo + FROM vw_periodos_insc_propuesta + JOIN sga_periodos_inscripcion_aplanado ON (sga_periodos_inscripcion_aplanado.periodo_insc = vw_periodos_insc_propuesta.periodo_insc) + JOIN sga_per_insc_ubicacion ON (sga_per_insc_ubicacion.periodo_inscripcion = vw_periodos_insc_propuesta.periodo_inscripcion) + JOIN sga_per_insc_modalidad ON (sga_per_insc_modalidad.periodo_inscripcion = vw_periodos_insc_propuesta.periodo_inscripcion) + JOIN sga_planes_versiones ON (sga_planes_versiones.plan_version = sga_periodos_inscripcion_aplanado.plan_version) + JOIN sga_planes ON (sga_planes.plan = sga_planes_versiones.plan) + WHERE + -- Períodos de tipo: 'Todos' y 'Preinscripcion' + vw_periodos_insc_propuesta.periodo_insc_tipo IN ('3', '4') + -- De la propuesta especificada + AND sga_planes.propuesta = $propuesta + -- De la ubicacion especificada + AND sga_per_insc_ubicacion.ubicacion = $ubicacion + -- De la modalidad especificada + AND sga_per_insc_modalidad.modalidad = $modalidad + -- Vigente y habilitada + AND CURRENT_DATE BETWEEN vw_periodos_insc_propuesta.fecha_inicio AND vw_periodos_insc_propuesta.fecha_fin + AND vw_periodos_insc_propuesta.habilitado = '" . comunes::si . "' + ORDER BY + -- Prioridad para los períodos especificos de tipo 'Preinscripción' + periodo_insc_tipo DESC, + -- Prioridad para los primeros en comenzar + fecha_inicio + LIMIT 1 + "; + + $datos = $this->consultar_fila($sql); + return $datos['periodo_insc']; + } + + /** + * Determina si un período de Preinscripción dado se encuentra vigente + * + * @param int $periodo_preinscripcion + * @return boolean + */ + function periodo_vigente($periodo_preinscripcion) + { + $periodo_preinscripcion = kernel::db()->quote($periodo_preinscripcion); + + $sql = "SELECT + 1 AS vigente + FROM + sga_periodos_inscripcion, + sga_periodos_inscripcion_fechas + WHERE + sga_periodos_inscripcion.periodo_inscripcion = $periodo_preinscripcion + AND sga_periodos_inscripcion.periodo_inscripcion = sga_periodos_inscripcion_fechas.periodo_inscripcion + AND CURRENT_DATE BETWEEN sga_periodos_inscripcion_fechas.fecha_inicio AND sga_periodos_inscripcion_fechas.fecha_fin + "; + + $res = $this->consultar_fila($sql); + return !empty($res['vigente']); + } + + /** + * Se ejecutan las funciones de acceso a datos + * + * @return boolean + */ + function test($id) + { + try { + $datos = array(); + $datos['periodo_abierto'] = $this->existe_periodo_abierto(); + $salida = array( + 'resultado' => true, + 'datos' => $datos, + 'msj' => 'OK', + ); + } catch (\Exception $ex) { + $salida = array( + 'resultado' => false, + 'msj' => $ex->getMessage(), + ); + } + return $salida; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/personas.php b/src/siu/modelo/g3/consultas_bd/personas.php new file mode 100644 index 0000000..a4e0eed --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/personas.php @@ -0,0 +1,191 @@ +instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + //-------------------------------------------------------------------------- + //---- Implementación interface_personas ----------------------------------- + //-------------------------------------------------------------------------- + + /** + * Determina si un documento pertenece a un alumno ya registrado en Guaraní + * + * @param $pais_documento + * @param $tipo_documento + * @param $nro_documento + * @return boolean + */ + function es_alumno($pais_documento, $tipo_documento, $nro_documento) + { + $pais_documento = kernel::db()->quote($pais_documento); + $tipo_documento = kernel::db()->quote($tipo_documento); + $nro_documento = kernel::db()->quote($nro_documento); + + $param_pre_preinsc_alumnos_solo_cursos = g3::parametros()->get_valor('pre_preinsc_alumnos_solo_cursos'); + if ($param_pre_preinsc_alumnos_solo_cursos == 'A') { + $filtro_cursos = ''; + } else { + $filtro_cursos = " AND sga_propuestas.propuesta_tipo <> '" . propuesta::tipo_CURSOS . "'"; + } + + $sql = "SELECT + 1 as es_alumno + FROM + mdp_personas_documentos, + sga_alumnos, + sga_propuestas + WHERE + mdp_personas_documentos.pais_documento = $pais_documento + AND mdp_personas_documentos.tipo_documento = $tipo_documento + AND mdp_personas_documentos.nro_documento = $nro_documento + AND mdp_personas_documentos.persona = sga_alumnos.persona + AND sga_alumnos.propuesta = sga_propuestas.propuesta + $filtro_cursos + "; + + $datos = $this->consultar_fila($sql); + return $datos['es_alumno'] ?? false; + } + + /** + * Determina si un documento pertenece a un docente ya registrado en Guaraní + * + * @param $pais_documento + * @param $tipo_documento + * @param $nro_documento + * @return boolean + */ + function es_docente($pais_documento, $tipo_documento, $nro_documento) + { + $pais_documento = kernel::db()->quote($pais_documento); + $tipo_documento = kernel::db()->quote($tipo_documento); + $nro_documento = kernel::db()->quote($nro_documento); + + $sql = "SELECT + 1 as es_docente + FROM + mdp_personas_documentos, + sga_docentes, + sga_propuestas + WHERE + mdp_personas_documentos.pais_documento = $pais_documento + AND mdp_personas_documentos.tipo_documento = $tipo_documento + AND mdp_personas_documentos.nro_documento = $nro_documento + AND mdp_personas_documentos.persona = sga_docentes.persona + "; + + $datos = $this->consultar_fila($sql); + return $datos['es_docente']; + + + } + + + function existe_persona_en_base($pais_documento, $tipo_documento, $nro_documento) + {//sea por alumno o docente controlo que exista la persona + $pais_documento = kernel::db()->quote($pais_documento); + $tipo_documento = kernel::db()->quote($tipo_documento); + $nro_documento = kernel::db()->quote($nro_documento); + + $sql = "SELECT + mptu.tipo_usuario as tipo_usuario + FROM + mdp_personas_documentos + JOIN mdp_personas_tipo_usuario as mptu ON mptu.persona = mdp_personas_documentos.persona + JOIN acc_tipos_usuarios as atu ON mptu.tipo_usuario = atu.tipo_usuario + WHERE + mdp_personas_documentos.pais_documento = $pais_documento + AND mdp_personas_documentos.tipo_documento = $tipo_documento + AND mdp_personas_documentos.nro_documento = $nro_documento + "; + $datos = $this->consultar($sql); + $perfiles = []; + foreach ($datos as $dato) { + $perfiles[$dato['tipo_usuario']] = $dato['tipo_usuario']; + } + $perfil_valido = $this->perfiles_validos($perfiles); + return $perfil_valido; + } + + function perfiles_validos($perfiles) + { + //El metodo consiste en validar el parametro pre_preinsc_alumnos_solo_cursos y en el caso de ser 'P' + //Debo comprobar si el usuario es solo tipo curso, para este caso podra prinscribirse a propuesta + //caso contrario, si el usuario ademas del perfil curso tiene un perfil, docente, administrativo3w o gestion hago la vista gorda =) + $array_perfiles_validos = [preinscripcion::perfil_alumno, //3w + preinscripcion::perfil_administrador_3w, //3w + preinscripcion::perfil_docente, //3w + preinscripcion::perfil_gerencial, //3w + //preinscripcion::perfil_preinscripcion, //segun parametro + preinscripcion::perfil_cursos, //segun parametro + preinscripcion::perfil_gestion//3w + ]; + + $persona_verificada = false; + if (!empty($perfiles)) { + if (g3::parametros()->get_valor('pre_preinsc_alumnos_solo_cursos') == 'P') { + //saco el perfil curso por que el parametro esta en P entonces se tiene que preinscribir por preinscripcion + if (($key = array_search(preinscripcion::perfil_cursos, $array_perfiles_validos)) !== false) { + unset($array_perfiles_validos[$key]); + } + foreach ($array_perfiles_validos as $perfil_valido) { + if (in_array($perfil_valido, $perfiles)) { + //tiene un perfil valido debe ir por 3w + $persona_verificada = true; + break; + } + } + } else { + //'pre_preinsc_alumnos_solo_cursos') == 'A' tiene perfiles y debe inscribirse por 3w + $persona_verificada = true; + } + } + + return $persona_verificada; + } + + /** + * Prueba las funciones de la interfaz + * + * @param $id = array('pais_documento' => x, 'tipo_documento' => y, 'nro_documento' => 'z') + * @return array + */ + function test($id) + { + // Se testean las funciones particualres + try { + $datos = array(); + $datos['es_alumno'] = $this->es_alumno($id['pais_documento'], $id['tipo_documento'], $id['nro_documento']); + $salida = array( + 'resultado' => true, + 'datos' => $datos, + 'msj' => 'OK', + ); + } catch (\Exception $ex) { + $salida = array( + 'resultado' => false, + 'msj' => $ex->getMessage(), + ); + } + return $salida; + } + +} \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/propuestas.php b/src/siu/modelo/g3/consultas_bd/propuestas.php new file mode 100644 index 0000000..d35b1d1 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/propuestas.php @@ -0,0 +1,364 @@ + 'propuesta, nombre, nombre_abreviado, codigo, propuesta_tipo, estado', + 'from' => 'sga_propuestas', + 'where' => // Activas + "estado = 'A' " . + // Que tengan planes activos (vigentes o no vigentes) + "AND EXISTS( + SELECT 1 + FROM sga_planes + WHERE sga_propuestas.propuesta = sga_planes.propuesta + AND sga_planes.estado in ('".planes::estado_activo."', '".planes::estado_vigente."') + )" . + // Que no sean propuestas de tipo Cursos + "AND propuesta_tipo <> '" . propuesta::tipo_CURSOS . "'", + 'order_by' => 'nombre', + 'clave' => 'propuesta', + 'campo_nombre' => 'nombre' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + function test($id) + { + // Se ejecuta el test general + $resultado = parent::test($id); + + // Si falla el test general, no se continúa con el test particular + if (!$resultado['resultado']) { + return $resultado; + } + + // Se testean las funciones particualres + try { + $datos = $resultado['datos']; + $datos['nombre_abreviado'] = $this->get_nombre_abreviado($id); + $datos['tipo'] = $this->get_tipo_propuesta($id); + $datos['tipos_propuesta'] = $this->get_tipos_propuesta_sin_perfil_datos(); + $datos['ubicaciones'] = $this->get_ubicaciones_propuesta($id); + $datos['modalidades'] = $this->get_modalidades_propuesta($id); + $datos['descr_comprobante'] = $this->get_descr_comprobante($id); + $datos['propuestas_1'] = $this->get_propuestas_disponibles_preinscripcion($id); + $datos['propuestas_2'] = $this->get_propuestas_disponibles_preinscripcion($id, array('1')); + $datos['propuestas_sin_pd'] = $this->get_propuestas_sin_perfil_datos(); + $salida = array( + 'resultado' => true, + 'datos' => $datos, + 'msj' => 'OK', + ); + } catch (\Exception $ex) { + $salida = array( + 'resultado' => false, + 'msj' => $ex->getMessage(), + ); + } + return $salida; + } + + //-------------------------------------------------------------------------- + //---- Implementación interface_propuestas --------------------------------- + //-------------------------------------------------------------------------- + + /** + * Obtiene el nombre abreviado de una propuesta + * + * @param int $id + * @return string + */ + function get_nombre_abreviado($id = null) + { + $datos = $this->get_entidad($id); + return $datos['nombre_abreviado']; + } + + /** + * Obtiene el ID de tipo de propuesta a partir de una propuesta dada. + * + * @param int $propuesta + * @return int + */ + function get_id_tipo_propuesta($propuesta) + { + $propuesta = kernel::db()->quote($propuesta); + + $sql = "SELECT + sga_propuestas_tipos.propuesta_tipo + FROM + sga_propuestas, + sga_propuestas_tipos + WHERE + sga_propuestas.propuesta = $propuesta + AND sga_propuestas.propuesta_tipo = sga_propuestas_tipos.propuesta_tipo"; + + $datos = $this->consultar_fila($sql); + return $datos['propuesta_tipo']; + } + + /** + * Obtiene la DESCRIPCIÓN de tipo de propuesta a partir de una propuesta dada. + * + * @param int $propuesta + * @return string + */ + function get_tipo_propuesta($propuesta) + { + $propuesta = kernel::db()->quote($propuesta); + + $sql = "SELECT + sga_propuestas_tipos.propuesta_tipo, + sga_propuestas_tipos.descripcion + FROM + sga_propuestas, + sga_propuestas_tipos + WHERE + sga_propuestas.propuesta = $propuesta + AND sga_propuestas.propuesta_tipo = sga_propuestas_tipos.propuesta_tipo"; + + $datos = $this->consultar_fila($sql); + return formatear($datos['descripcion']); + } + + /** + * Obtiene la lista de todos los tipos de propuesta (sin perfil de datos) + */ + function get_tipos_propuesta_sin_perfil_datos() + { + $sql = "SELECT + sga_propuestas_tipos.propuesta_tipo, + sga_propuestas_tipos.descripcion + FROM + sga_propuestas, + sga_propuestas_tipos + WHERE + -- Se excluye el tipo de propuesta curso + sga_propuestas_tipos.propuesta_tipo <> '" . propuesta::tipo_CURSOS . "' + "; + + $datos = $this->consultar($sql); + return util::opciones()->armar_combo_opciones($datos, 'propuesta_tipo', 'descripcion', false, false); + } + + /** + * Obtiene las ubicaciones donde se ofrece una propuesta y habilitadas + * + * @param int $propuesta + * @return array + */ + function get_ubicaciones_propuesta($propuesta) + { + $propuesta = kernel::db()->quote($propuesta); + $plan_estado_activo = kernel::db()->quote(planes::estado_activo); + $plan_estado_vigente = kernel::db()->quote(planes::estado_vigente); + $pi_tipo_todos = kernel::db()->quote(periodo_de_inscripcion::tipo_todos); + $pi_tipo_preinscripcion = kernel::db()->quote(periodo_de_inscripcion::tipo_preinscripcion); + $si = kernel::db()->quote(comunes::si); + + $where_perfil_datos = $this->filtro_perfil_datos_ubicacion(); + if (!empty($where_perfil_datos)) { + $where_perfil_datos = ' AND ' . $where_perfil_datos; + } + + $sql = "SELECT DISTINCT + sga_ubicaciones.ubicacion, + sga_ubicaciones.nombre + FROM sga_planes + JOIN sga_planes_versiones ON (sga_planes_versiones.plan = sga_planes.plan) + JOIN sga_propuestas_oferta ON (sga_propuestas_oferta.propuesta = sga_planes.propuesta) + JOIN sga_ubicaciones ON (sga_ubicaciones.ubicacion = sga_propuestas_oferta.ubicacion) + JOIN sga_per_insc_ubicacion ON (sga_per_insc_ubicacion.ubicacion = sga_propuestas_oferta.ubicacion) + JOIN vw_periodos_insc_propuesta ON (vw_periodos_insc_propuesta.periodo_inscripcion = sga_per_insc_ubicacion.periodo_inscripcion) + JOIN sga_periodos_inscripcion_aplanado ON (sga_periodos_inscripcion_aplanado.periodo_insc = vw_periodos_insc_propuesta.periodo_insc AND sga_periodos_inscripcion_aplanado.plan_version = sga_planes.version_actual) + + WHERE sga_planes.propuesta = $propuesta + AND sga_planes_versiones.estado IN ($plan_estado_activo, $plan_estado_vigente) + AND vw_periodos_insc_propuesta.periodo_insc_tipo IN ($pi_tipo_todos, $pi_tipo_preinscripcion) + AND CURRENT_DATE BETWEEN vw_periodos_insc_propuesta.fecha_inicio AND vw_periodos_insc_propuesta.fecha_fin + AND vw_periodos_insc_propuesta.habilitado = $si + AND vw_periodos_insc_propuesta.habilitado_interfaz IN (0,3) + AND sga_planes.inscripcion_habilitada = $si + $where_perfil_datos + "; + + $datos = $this->consultar($sql); + return util::opciones()->armar_combo_opciones($datos, 'ubicacion', 'nombre', true, false); + } + + /** + * Obtiene las modalidades disponibles y habilitadas para una propuesta + * + * @param int $propuesta + * @return array + */ + function get_modalidades_propuesta($propuesta, $ubicacion) + { + $propuesta = kernel::db()->quote($propuesta); + $ubicacion = kernel::db()->quote($ubicacion); + $plan_estado_activo = kernel::db()->quote(planes::estado_activo); + $plan_estado_vigente = kernel::db()->quote(planes::estado_vigente); + $pi_tipo_todos = kernel::db()->quote(periodo_de_inscripcion::tipo_todos); + $pi_tipo_preinscripcion = kernel::db()->quote(periodo_de_inscripcion::tipo_preinscripcion); + $si = kernel::db()->quote(comunes::si); + + $sql = "SELECT DISTINCT + sga_planes_modalidad.modalidad, + sga_modalidad_cursada.nombre + FROM sga_planes + JOIN sga_planes_versiones ON (sga_planes_versiones.plan = sga_planes.plan) + JOIN sga_planes_modalidad ON (sga_planes_modalidad.plan = sga_planes.plan) + JOIN sga_modalidad_cursada ON (sga_modalidad_cursada.modalidad = sga_planes_modalidad.modalidad) + JOIN sga_per_insc_modalidad ON (sga_per_insc_modalidad.modalidad = sga_planes_modalidad.modalidad) + JOIN vw_periodos_insc_propuesta ON (vw_periodos_insc_propuesta.periodo_inscripcion = sga_per_insc_modalidad.periodo_inscripcion) + JOIN sga_per_insc_ubicacion ON (sga_per_insc_ubicacion.periodo_inscripcion = vw_periodos_insc_propuesta.periodo_inscripcion AND sga_per_insc_ubicacion.ubicacion = $ubicacion) + JOIN sga_periodos_inscripcion_aplanado ON (sga_periodos_inscripcion_aplanado.periodo_insc = vw_periodos_insc_propuesta.periodo_insc AND sga_periodos_inscripcion_aplanado.plan_version = sga_planes.version_actual) + + WHERE sga_planes.propuesta = $propuesta + AND sga_planes_versiones.estado IN ($plan_estado_activo, $plan_estado_vigente) + AND vw_periodos_insc_propuesta.periodo_insc_tipo IN ($pi_tipo_todos, $pi_tipo_preinscripcion) + AND CURRENT_DATE BETWEEN vw_periodos_insc_propuesta.fecha_inicio AND vw_periodos_insc_propuesta.fecha_fin + AND vw_periodos_insc_propuesta.habilitado = $si + AND vw_periodos_insc_propuesta.habilitado_interfaz IN (0,3) + AND sga_planes.inscripcion_habilitada = $si + "; + + $datos = $this->consultar($sql); + return util::opciones()->armar_combo_opciones($datos, 'modalidad', 'nombre', true, false); + } + + /** + * Obtiene todas las propuestas disponibles y habilitadas para Preinscripción, a partir de + * una Responsable Académica dada, excluyendo las recibidas como segundo parámetro + * + * @param int $ra + * @param array $excluir propuestas a excluir del listado + * @return array + */ +function get_propuestas_disponibles_preinscripcion($ra, $excluir = array()) + { + $si = kernel::db()->quote(comunes::si); + $ra = kernel::db()->quote($ra); + + if (!empty($excluir)) { + $where_excluir = ' AND sga_propuestas.propuesta NOT IN (' . implode(',', $excluir) . ')'; + } else { + $where_excluir = ''; + } + + $filtro_perfil_datos = $this->filtro_perfil_datos(); + if (!empty($filtro_perfil_datos)) { + $where_perfil_datos = ' AND ' . $filtro_perfil_datos; + } else { + $where_perfil_datos = ''; + } + + $sql = "SELECT DISTINCT + sga_planes.propuesta, + sga_propuestas.nombre + FROM sga_propuestas_ra + JOIN sga_propuestas ON (sga_propuestas.propuesta = sga_propuestas_ra.propuesta) + JOIN sga_planes ON (sga_planes.propuesta = sga_propuestas.propuesta) + JOIN sga_planes_versiones ON (sga_planes_versiones.plan = sga_planes.plan) + JOIN sga_periodos_inscripcion_aplanado ON (sga_periodos_inscripcion_aplanado.plan_version = sga_planes_versiones.plan_version) + JOIN sga_periodos_inscripcion_fechas ON (sga_periodos_inscripcion_fechas.periodo_insc = sga_periodos_inscripcion_aplanado.periodo_insc) + JOIN sga_periodos_inscripcion ON (sga_periodos_inscripcion.periodo_inscripcion = sga_periodos_inscripcion_fechas.periodo_inscripcion) + JOIN sga_periodos_inscripcion_propuesta ON (sga_periodos_inscripcion_propuesta.periodo_inscripcion = sga_periodos_inscripcion.periodo_inscripcion) + + WHERE sga_propuestas_ra.responsable_academica = $ra + AND sga_periodos_inscripcion_fechas.habilitado = 'S' + AND sga_periodos_inscripcion_fechas.habilitado_interfaz IN (0,3) + AND CURRENT_DATE BETWEEN sga_periodos_inscripcion_fechas.fecha_inicio AND sga_periodos_inscripcion_fechas.fecha_fin + AND sga_periodos_inscripcion_propuesta.periodo_insc_tipo IN ('3', '4') -- Períodos de tipo: 'Todos' y 'Preinscripcion' + AND sga_propuestas.propuesta_tipo <> '" . propuesta::tipo_CURSOS . "' + AND sga_planes.inscripcion_habilitada = $si + $where_excluir + $where_perfil_datos + "; + + $datos = $this->consultar($sql); + + $salida = util::opciones()->armar_combo_opciones($datos, 'propuesta', 'nombre', true, false); + if (empty($salida)) { + $salida[opciones::NO_SELECCION] = kernel::traductor()->trans('sin_propuestas'); + } + return $salida; + } + + /** + * Obtiene el listado de propuestas que tienen planes vigentes y no sean de tipo Cursos, sin pasar + * por el filtro del perfil de datos + * + * @return array + */ + function get_propuestas_sin_perfil_datos() + { + $sql = "SELECT sga_propuestas.propuesta, + sga_propuestas.nombre + FROM sga_propuestas + WHERE EXISTS(SELECT 1 + FROM sga_planes + WHERE sga_propuestas.propuesta = sga_planes.propuesta + AND sga_planes.estado in ('".planes::estado_activo."', '".planes::estado_vigente."') + ) + AND sga_propuestas.propuesta_tipo <> '" . propuesta::tipo_CURSOS . "' + "; + + $datos = $this->consultar($sql); + return util::opciones()->armar_combo_opciones($datos, 'propuesta', 'nombre', false, false); + } + + //-------------------------------------------------------------------------- + + protected function filtro_perfil_datos() + { + $config = util::consultas()->get_config_perfil_datos(); + $filtro = ''; + // Perfil de datos por tipo de propuesta + if (!empty($config['propuesta_tipo'])) { + $filtro = "sga_propuestas.propuesta_tipo IN ('" . implode("', '", $config['propuesta_tipo']) . "')"; + } + // Perfil de datos por propuesta + if (!empty($config['propuesta'])) { + if (!empty($filtro)) { + $filtro .= ' AND '; + } + $filtro .= "sga_propuestas.propuesta IN ('" . implode("', '", $config['propuesta']) . "')"; + } + return $filtro; + } + + protected function filtro_perfil_datos_ubicacion() + { + $config = util::consultas()->get_config_perfil_datos(); + $filtro = ''; + // Perfil de datos por ubicacion + if (!empty($config['ubicacion'])) { + $filtro = "sga_ubicaciones.ubicacion IN ('" . implode("', '", $config['ubicacion']) . "')"; + } + return $filtro; + } +} diff --git a/src/siu/modelo/g3/consultas_bd/provincias.php b/src/siu/modelo/g3/consultas_bd/provincias.php new file mode 100644 index 0000000..f5a14be --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/provincias.php @@ -0,0 +1,57 @@ + 'provincia, nombre', + 'from' => 'mug_provincias', + 'where' => '', + 'order_by' => 'nombre', + 'clave' => 'provincia', + 'campo_nombre' => 'nombre' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + /** + * Se ejecutan las funciones de acceso a datos + * + * @return boolean + */ + function test($id) + { + try { + $datos = array(); + $datos['entidad'] = $this->get_entidad($id); + $datos['nombre'] = $this->get_nombre($id); + $datos['nombre_abreviado'] = $this->get_nombre_abreviado($id); + $datos['descr_comprobante'] = $this->get_descr_comprobante($id); + $salida = array( + 'resultado' => true, + 'datos' => $datos, + 'msj' => 'OK', + ); + } catch (\Exception $ex) { + $salida = array( + 'resultado' => false, + 'msj' => $ex->getMessage(), + ); + } + return $salida; + } +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/pueblos_originarios.php b/src/siu/modelo/g3/consultas_bd/pueblos_originarios.php new file mode 100644 index 0000000..7103398 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/pueblos_originarios.php @@ -0,0 +1,29 @@ + 'pueblo_originario, nombre', + 'from' => 'mdp_pueblos_originarios', + 'where' => '', + 'order_by' => '', + 'clave' => 'pueblo_originario', + 'campo_nombre' => 'nombre' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/requisitos.php b/src/siu/modelo/g3/consultas_bd/requisitos.php new file mode 100644 index 0000000..99b4827 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/requisitos.php @@ -0,0 +1,113 @@ +instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + /** + * Obtiene el conjunto de requisitos documentales que tienen un tipo de requisito + * digital asociado, que aplican como requisito de ingreso de las propuestas en las + * que se preinscribe el aspirante. + * + * @param array $propuestas + * @return array + */ + function requisitos_a_solicitar($propuestas) + { + $in_propuestas = implode(',', $propuestas); + /* + Listado de requisitos de ingreso de las propuestas pasadas por parametro. + Requisitos que estan visibles en el módulo de preinsripción y que tienen asociado un tipo de documento digital. + */ + $sql = "SELECT DISTINCT + sga_requisitos.requisito, + sga_requisitos.nombre as nombre, + sga_requisitos_propuestas.restrictivo, + sga_requisitos.tipo_documento_digital, + sga_requisitos.descripcion, + sga_requisitos_propuestas.visible_en_preinscripcion, + sga_requisitos_propuestas.doc_digital_obligatorio_preinscripcion, + get_requisito_subordinado_de(sga_requisitos.requisito, '') as subordinado_de + FROM sga_requisitos_propuestas_aplanado + JOIN sga_requisitos_propuestas ON sga_requisitos_propuestas.requisito_propuesta = sga_requisitos_propuestas_aplanado.requisito_propuesta + JOIN sga_planes_versiones ON sga_planes_versiones.plan_version = sga_requisitos_propuestas_aplanado.plan_version + JOIN sga_planes ON sga_planes_versiones.plan = sga_planes.plan + JOIN sga_propuestas ON sga_planes.propuesta = sga_propuestas.propuesta + JOIN sga_requisitos ON sga_requisitos_propuestas.requisito = sga_requisitos.requisito + WHERE sga_requisitos_propuestas.visible_en_preinscripcion = 'S' + AND sga_requisitos_propuestas.requisito_para = 'I' + AND sga_propuestas.propuesta IN ($in_propuestas) + -- Que tenga un tipo de requisito digital asociado + AND sga_requisitos.tipo_documento_digital IS NOT NULL + ORDER BY + sga_requisitos.nombre"; + + $datos = $this->consultar($sql); + return $datos; + } + + /** + * Obtiene el tipo de documento digital de un requisito dado + * + * @param int $requisito + * @return string + */ + function tipo_documento_digital($requisito) + { + $requisito = kernel::db()->quote($requisito); + + $sql = "SELECT + tipo_documento_digital + FROM + sga_requisitos + WHERE + requisito = $requisito + "; + + $datos = $this->consultar_fila($sql); + $salida = (!empty($datos['tipo_documento_digital'])) ? $datos['tipo_documento_digital'] : null; + return $salida; + } + + function test($id) + { + // Se testean las funciones particualres + try { + $datos = array(); + $datos['requisitos'] = $this->requisitos_a_solicitar($id); + $datos['tipo_documento_digital'] = $this->tipo_documento_digital(current($id)); + $salida = array( + 'resultado' => true, + 'datos' => $datos, + 'msj' => 'OK', + ); + } catch (\Exception $ex) { + $salida = array( + 'resultado' => false, + 'msj' => $ex->getMessage(), + ); + } + return $salida; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/responsables_academicas.php b/src/siu/modelo/g3/consultas_bd/responsables_academicas.php new file mode 100644 index 0000000..fd52550 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/responsables_academicas.php @@ -0,0 +1,105 @@ + 'responsable_academica, nombre, codigo', + 'from' => 'sga_responsables_academicas', + 'where' => '', + 'order_by' => 'nombre', + 'clave' => 'responsable_academica', + 'campo_nombre' => 'nombre' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + /** + * Listado de opciones. + * + * @param string $condiciones + * @param boolean $con_no_seleccion + */ + function get_opciones($condiciones = null, $con_no_seleccion = true) + { + $sql = $this->armar_sql($condiciones); + $datos = $this->consultar($sql); + return util::opciones()->armar_combo_opciones($datos, $this->sql['clave'], $this->sql['campo_nombre'], $con_no_seleccion, false); + } + + /** + * Obtiene todas las Responsables Académicas sin perfil de datos + * + * @param string $condiciones + * @return array + */ + function get_opciones_sin_perfil_datos($condiciones = null) + { + $sql = $this->armar_sql($condiciones, null, false); + $datos = $this->consultar($sql); + return util::opciones()->armar_combo_opciones($datos, $this->sql['clave'], $this->sql['campo_nombre'], false, false); + } + + protected function filtro_perfil_datos() + { + $config = util::consultas()->get_config_perfil_datos(); + if (!empty($config['ra'])) { + $filtro = "responsable_academica IN ('" . implode("', '", $config['ra']) . "')"; + } else { + $filtro = ''; + } + return $filtro; + } + + /** + * Prueba las funciones de la interfaz + * + * @param $id + * @return array + */ + function test($id) + { + // Se ejecuta el test general + $resultado = parent::test($id); + + // Si falla el test general, no se continúa con el test particular + if (!$resultado['resultado']) { + return $resultado; + } + + // Se testean las funciones particualres + try { + $datos = $resultado['datos']; + $datos['opciones_sin_pd'] = $this->get_opciones_sin_perfil_datos(); + $salida = array( + 'resultado' => true, + 'datos' => $datos, + 'msj' => 'OK', + ); + } catch (\Exception $ex) { + $salida = array( + 'resultado' => false, + 'msj' => $ex->getMessage(), + ); + } + return $salida; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/tipos_allegados.php b/src/siu/modelo/g3/consultas_bd/tipos_allegados.php new file mode 100644 index 0000000..8c470e2 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/tipos_allegados.php @@ -0,0 +1,30 @@ + 'tipo_allegado, descripcion', + 'from' => 'mdp_tipo_allegado', + 'where' => '', + 'order_by' => 'tipo_allegado', + 'clave' => 'tipo_allegado', + 'campo_nombre' => 'descripcion' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/tipos_documentos.php b/src/siu/modelo/g3/consultas_bd/tipos_documentos.php new file mode 100644 index 0000000..b5e59ef --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/tipos_documentos.php @@ -0,0 +1,49 @@ + 'tipo_documento, descripcion, desc_abreviada, orden_principal, habilita_inscripcion, + tipo_de_dato, puede_eliminarse, exp_regular_validacion, exp_regular_mensaje', + 'from' => 'mdp_tipo_documento', + 'where' => '', + 'order_by' => 'tipo_documento', + 'clave' => 'tipo_documento', + 'campo_nombre' => 'descripcion' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + /** + * Nombre o campo descriptivo abreviado de una entidad particular + * Si la entidad no lleva registro de nombre abreviado, toma el nombre general + * + * @param $id + * @return string + */ + function get_nombre_abreviado($id = null) + { + if (is_null($id)) { + return null; + } + $datos = $this->get_entidad($id); + return $datos['desc_abreviada']; + } + +} \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/tipos_documentos_pais.php b/src/siu/modelo/g3/consultas_bd/tipos_documentos_pais.php new file mode 100644 index 0000000..783a509 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/tipos_documentos_pais.php @@ -0,0 +1,65 @@ + "mdp_tipo_documento.tipo_documento, + COALESCE(mdp_tipo_documento_pais.descripcion, mdp_tipo_documento.descripcion) as descripcion , + COALESCE(mdp_tipo_documento_pais.desc_abreviada, mdp_tipo_documento.desc_abreviada) as desc_abreviada , + mdp_tipo_documento.orden_principal, + mdp_tipo_documento.habilita_inscripcion, + mdp_tipo_documento.tipo_de_dato, + mdp_tipo_documento.puede_eliminarse, + COALESCE(mdp_tipo_documento_pais.exp_regular_validacion, mdp_tipo_documento.exp_regular_validacion) as exp_regular_validacion , + COALESCE(mdp_tipo_documento_pais.exp_regular_mensaje, mdp_tipo_documento.exp_regular_mensaje) as exp_regular_mensaje, + mdp_tipo_documento_pais.pais, + + ( mdp_tipo_documento_pais.pais|| '_' || mdp_tipo_documento.tipo_documento) as pais_tipo", + 'from' => 'mdp_tipo_documento, mdp_tipo_documento_pais ', + 'where' => "mdp_tipo_documento.tipo_documento = mdp_tipo_documento_pais.tipo_documento + AND mdp_tipo_documento_pais.activo = '".comunes::si."' + AND mdp_tipo_documento.habilita_inscripcion = '".comunes::si."'", + 'order_by' => 'tipo_documento', + 'clave' => " mdp_tipo_documento_pais.pais|| '_' || mdp_tipo_documento.tipo_documento", + 'campo_nombre' => 'descripcion' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + /** + * Nombre o campo descriptivo abreviado de una entidad particular + * Si la entidad no lleva registro de nombre abreviado, toma el nombre general + * + * @param $id + * @return string + */ + function get_nombre_abreviado($id = null) + { + if (is_null($id)) { + return null; + } + $datos = $this->get_entidad($id); + return $datos['desc_abreviada']; + } + function get_opciones_pais($condiciones = null, $con_no_seleccion = false) + { + $sql = $this->armar_sql($condiciones); + $datos = $this->consultar($sql); + return util::opciones()->armar_combo_opciones($datos, 'tipo_documento', 'descripcion', $con_no_seleccion); + } +} \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/tipos_vivienda.php b/src/siu/modelo/g3/consultas_bd/tipos_vivienda.php new file mode 100644 index 0000000..e8ecd98 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/tipos_vivienda.php @@ -0,0 +1,29 @@ + 'tipo_vivienda, descripcion, orden', + 'from' => 'mdp_tipo_vivienda', + 'where' => '', + 'order_by' => 'orden', + 'clave' => 'tipo_vivienda', + 'campo_nombre' => 'descripcion' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/titulos_secundario.php b/src/siu/modelo/g3/consultas_bd/titulos_secundario.php new file mode 100644 index 0000000..7558403 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/titulos_secundario.php @@ -0,0 +1,76 @@ + 'titulo, nombre', + 'from' => 'mdp_titulos', + 'where' => "titulo_tipo = 'C'", + 'order_by' => 'nombre', + 'clave' => 'titulo', + 'campo_nombre' => 'nombre' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + /** + * Nombre o campo descriptivo de una entidad particular + * + * @param $id + * @return string + */ + function get_nombre($id = null) + { + if (empty($id)) { + return ''; + } + $datos = $this->get_entidad($id); + return formatear($datos[$this->sql['campo_nombre']]); + } + + /** + * Obtiene una lista de títulos secundarios a partir de una parte de su nombre. + * Para usar con el selector de títulos secundario. + * + * @param string $titulo_nombre + * @return array + */ + function get_titulos($titulo_nombre) + { + $titulo_nombre = kernel::db()->quote("%$titulo_nombre%"); + $condiciones = " f_limpiar_acentos(mdp_titulos.nombre) ILIKE f_limpiar_acentos($titulo_nombre)::text"; + $sql = $this->armar_sql($condiciones); + return $this->consultar($sql); + } + + /** + * Prueba las funciones de la interfaz + * + * @param $id + * @return array + */ + function test($id) + { + $salida = parent::test($id); + $salida['titulos'] = $this->get_titulos('ciencias natu'); + // Se elimina de la respuesta el listado de opciones para evitar saturar + // el log por la gran cantidad de datos + unset($salida['datos']['opciones']); + return $salida; + } + +} \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/turnos.php b/src/siu/modelo/g3/consultas_bd/turnos.php new file mode 100644 index 0000000..5912038 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/turnos.php @@ -0,0 +1,389 @@ +instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + + //-------------------------------------------------------------------------- + //---- Implementación interface_turnos ------------------------------------- + //-------------------------------------------------------------------------- + + /** + * Determina si existen turnos disponibles (no ocupados, vigentes) para una + * Responsable Académica (RA) dada + * + * @param int $ra + * @return boolean + */ + function hay_turnos_disponibles($ra) + { + $fechas = $this->get_fechas_turnos_disponibles($ra); + return count($fechas) > 0; + } + + /** + * Obtiene las fechas en las que exiten turnos disponibles + * + * @param int $ra + * @return array + */ + function get_fechas_turnos_disponibles($ra) + { + $where_ra = $this->get_where_ra($ra); + + $sql = "SELECT + distinct(fecha) AS fecha + FROM + pre_turnos + WHERE + id_preinscripcion IS NULL + AND persona IS NULL + AND ( + fecha > CURRENT_DATE + OR ( + fecha = CURRENT_DATE + AND hora >= CURRENT_TIME + ) + ) + $where_ra + ORDER BY + fecha + "; + $res = $this->consultar($sql); + $salida = array(); + foreach ($res as $fecha) { + $salida[] = convertir_fecha_formato_frontend($fecha['fecha']); + } + return $salida; + } + + /** + * Obtiene la primera fecha en la que hay un turno disponible, o el string + * vacío en caso de no existir turnos disponibles + * + * @param int $ra + * @return string + */ + function get_fecha_minima($ra) + { + $where_ra = $this->get_where_ra($ra); + + $sql = "SELECT + MIN(fecha) as fecha + FROM + pre_turnos + WHERE + id_preinscripcion IS NULL + AND persona IS NULL + AND fecha >= CURRENT_DATE + $where_ra + "; + $res = $this->consultar_fila($sql); + if (!empty($res['fecha'])) { + $salida = convertir_fecha_formato_frontend($res['fecha']); + } else { + $salida = ''; + } + return $salida; + } + + /** + * Obtiene la última fecha en la que hay un turno disponible, o el string + * vacío en caso de no existir turnos disponibles + * + * @param int $ra + * @return string + */ + function get_fecha_maxima($ra) + { + $where_ra = $this->get_where_ra($ra); + + $sql = "SELECT + MAX(fecha) as fecha + FROM + pre_turnos + WHERE + id_preinscripcion IS NULL + AND persona IS NULL + $where_ra + "; + $res = $this->consultar_fila($sql); + if (!empty($res['fecha'])) { + $salida = convertir_fecha_formato_frontend($res['fecha']); + } else { + $salida = ''; + } + return $salida; + } + + /** + * Obtiene las franjas horarias en las que hay turnos disponibles para una + * RA dada en una determinada fecha + * + * @param string $fecha + * @param int $ra + * @return array + */ + function get_franjas_horarias_disponibles($fecha, $ra) + { + $fecha = kernel::db()->quote(convertir_fecha_formato_base($fecha)); + $where_ra = $this->get_where_ra($ra); + + $sql = "SELECT + DISTINCT EXTRACT(HOUR FROM hora) AS hora + FROM + pre_turnos + WHERE + fecha = $fecha + AND id_preinscripcion IS NULL + AND persona IS NULL + AND ( + fecha > CURRENT_DATE + OR ( + fecha = CURRENT_DATE + AND hora >= CURRENT_TIME + ) + ) + $where_ra + ORDER BY hora + "; + + $datos = $this->consultar($sql); + foreach ($datos as $key => $dato) { + $hora = $dato['hora']; + $hora_sig = $hora + 1; + + $hora_str = ($hora < 10) ? '0' . $hora : $hora; + $hora_sig_str = ($hora_sig < 10) ? '0' . $hora_sig : $hora_sig; + + $datos[$key]['descr'] = "De $hora_str:00 a $hora_sig_str:00"; + } + + return util::opciones()->armar_combo_opciones($datos, 'hora', 'descr', true, false); + } + + /** + * Asigna un turno según la solicitud (fecha, rango horario, RA) + * + * @param int $id_preinscripcion + * @param int $ra + * @param array $datos_turno + * @throws error_preinscripcion + */ + function reservar_turno($id_preinscripcion, $ra, $datos_turno) + { + $pre_turno = $this->asignar_turno($datos_turno, $ra); + $ra = kernel::db()->quote($ra); + + if (empty($pre_turno)) { + $mensaje = kernel::traductor()->trans('turnos.error_asignacion_turno'); + throw new error_preinscripcion($mensaje); + } + + $sql = "UPDATE pre_turnos + SET id_preinscripcion = $id_preinscripcion, + responsable_academica = $ra + WHERE pre_turno = $pre_turno; + "; + + $this->ejecutar($sql); + } + + /** + * Deja nuevamente disponible un turno solicitado por un aspirante, para una + * RA dada. + * + * @param int $id_preinscripcion + * @param int $ra + */ + function devolver_turno($id_preinscripcion, $ra) + { + $sql = "UPDATE pre_turnos + SET id_preinscripcion = NULL, + persona = NULL, + responsable_academica = NULL + WHERE id_preinscripcion = $id_preinscripcion + AND responsable_academica = $ra; + "; + + $this->ejecutar($sql); + } + + /** + * Determina qué turno de presentación(en caso que haya sido solicitado) de + * un aspirante en una RA dada. + * + * @param int $id_preinscripcion + * @param int $ra + * @return array + */ + function get_turno_presentacion($id_preinscripcion, $ra) + { + $sql = "SELECT + pre_turnos.pre_turno, + pre_turnos.turno_config, + pre_turnos.id_preinscripcion, + pre_turnos.persona, + pre_turnos.responsable_academica, + pre_turnos.operador, + pre_turnos.fecha, + pre_turnos.hora, + pre_turnos.recordatorio_enviado + FROM + pre_turnos + WHERE + pre_turnos.id_preinscripcion = $id_preinscripcion + AND pre_turnos.responsable_academica = $ra + AND pre_turnos.fecha >= CURRENT_DATE + + "; + + return $this->consultar_fila($sql, "turno_presentacion_{$id_preinscripcion}_{$ra}"); + } + + /** + * Invalida cache de turno de presentación(en caso que haya sido solicitado) de + * un aspirante en una RA dada. + * + * @param int $id_preinscripcion + * @param int $ra + * @return void + */ + function invalidar_cache_turno_presentacion($id_preinscripcion, $ra) + { + util::catalogo()->invalidar_por_id("turno_presentacion_{$id_preinscripcion}_{$ra}"); + } + + /** + * Prueba las funciones de la interfaz + * + * @param $id = array('ra' => x, 'fecha' => y) + * @return array + */ + function test($id) + { + // Se testean las funciones particualres + try { + $datos = array(); + $datos['fechas_turnos_disponibles'] = $this->get_fechas_turnos_disponibles($id['ra']); + $datos['fecha_minima'] = $this->get_fecha_minima($id['ra']); + $datos['fecha_maxima'] = $this->get_fecha_maxima($id['ra']); + $datos['franjas_horarias'] = $this->get_franjas_horarias_disponibles($id['fecha'], $id['ra']); + $salida = array( + 'resultado' => true, + 'datos' => $datos, + 'msj' => 'OK', + ); + } catch (\Exception $ex) { + $salida = array( + 'resultado' => false, + 'msj' => $ex->getMessage(), + ); + } + return $salida; + } + + /** + * Determina si existen turnos vigentes para una preinscripción dada + * + * @param int $responsable_academica + * @param int $ubicacion + * @param string $modalidad + * @return boolean + */ + function hay_turnos_preinscripcion_propuesta($responsable_academica, $ubicacion, $modalidad) + { + $modalidad = kernel::db()->quote($modalidad); + + $sql = "SELECT COUNT(pre_turnos.pre_turno) AS cant_turnos + FROM pre_turnos_config + JOIN pre_turnos_config_ra ON (pre_turnos_config.turno_config = pre_turnos_config_ra.turno_config) + JOIN pre_turnos_config_ubicacion ON (pre_turnos_config.turno_config = pre_turnos_config_ubicacion.turno_config) + JOIN pre_turnos_config_modalidad ON (pre_turnos_config.turno_config = pre_turnos_config_modalidad.turno_config) + JOIN pre_turnos ON (pre_turnos_config.turno_config = pre_turnos.turno_config) + WHERE pre_turnos_config_ra.responsable_academica = {$responsable_academica} + AND pre_turnos_config_ubicacion.ubicacion = {$ubicacion} + AND pre_turnos_config_modalidad.modalidad = {$modalidad} + -- Turnos de presentación de documentación vigentes + AND ((pre_turnos.fecha > CURRENT_DATE) OR (pre_turnos.fecha = CURRENT_DATE AND pre_turnos.hora >= CURRENT_TIME)) + -- Turnos no tomados desde Preinscripción + AND pre_turnos.id_preinscripcion IS NULL + -- Turnos no tomados desde Autogestión + AND pre_turnos.persona IS NULL + "; + + $fila = $this->consultar_fila($sql); + return $fila['cant_turnos'] > 0; + } + + //-------------------------------------------------------------------------- + //---- Auxiliares ---------------------------------------------------------- + //-------------------------------------------------------------------------- + + protected function get_where_ra($ra) + { + $ra = kernel::db()->quote($ra); + return " AND EXISTS ( + SELECT 1 + FROM pre_turnos_config_ra + WHERE pre_turnos_config_ra.turno_config = pre_turnos.turno_config + AND pre_turnos_config_ra.responsable_academica = $ra + )"; + } + + protected function asignar_turno($datos_turno, $ra) + { + $fecha = kernel::db()->quote(convertir_fecha_formato_base($datos_turno['fecha'])); + $franja = kernel::db()->quote($datos_turno['franja']); + + $where_ra = $this->get_where_ra($ra); + + $sql = "SELECT + pre_turno + FROM + pre_turnos + WHERE + id_preinscripcion IS NULL + AND persona IS NULL + AND fecha = $fecha + AND EXTRACT(HOUR FROM hora) = $franja + AND ( + fecha > CURRENT_DATE + OR ( + fecha = CURRENT_DATE + AND hora >= CURRENT_TIME + ) + ) + $where_ra + ORDER BY + hora, + operador + LIMIT 1 + "; + + $res = $this->consultar_fila($sql); + if (empty($res)) { + $mje = kernel::traductor()->trans('sel_turno.error_sin_turnos'); + throw new error_preinscripcion($mje); + } + return $res['pre_turno']; + } + +} \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/turnos_cursada.php b/src/siu/modelo/g3/consultas_bd/turnos_cursada.php new file mode 100644 index 0000000..8bde07f --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/turnos_cursada.php @@ -0,0 +1,30 @@ + 'turno, nombre', + 'from' => 'sga_turnos_cursadas', + 'where' => '', + 'order_by' => 'turno', + 'clave' => 'turno', + 'campo_nombre' => 'nombre' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/consultas_bd/ubicaciones.php b/src/siu/modelo/g3/consultas_bd/ubicaciones.php new file mode 100644 index 0000000..de0f8a9 --- /dev/null +++ b/src/siu/modelo/g3/consultas_bd/ubicaciones.php @@ -0,0 +1,30 @@ + 'ubicacion, nombre', + 'from' => 'sga_ubicaciones', + 'where' => '', + 'order_by' => '', + 'clave' => 'ubicacion', + 'campo_nombre' => 'nombre' + ); + + static function instancia() + { + $clase = substr(strrchr(get_class(), "\\"), 1); + if (!isset(self::$instancia)) { + self::$instancia = kernel::localizador()->instanciar("modelo\\g3\\consultas_bd\\$clase"); + } + return self::$instancia; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/g3.php b/src/siu/modelo/g3/g3.php new file mode 100644 index 0000000..ebb8b73 --- /dev/null +++ b/src/siu/modelo/g3/g3.php @@ -0,0 +1,175 @@ +get_modo_consultas_g3(); + return kernel::localizador()->instanciar_singleton("modelo\\g3\\$modo_consultas\\$entidad_nombre"); + } + + /** + * Instancia el objeto de consultas de Responsables Académicas mediante el + * patrón Singleton. + * + * Es equivalente a g3::entidad('responsables_academicas'), sólo que de esta + * forma se indica el tipo que retorna, habilitando las funcionalidades de + * autocompletado. + * + * @return interface_responsables_academicas + */ + static function responsables_academicas() + { + $modo_consultas = kernel::proyecto()->get_modo_consultas_g3(); + return kernel::localizador()->instanciar_singleton("modelo\\g3\\$modo_consultas\\responsables_academicas"); + } + + /** + * Instancia el objeto de consultas de Propuestas mediante el patrón Singleton. + * + * Es equivalente a g3::entidad('propuestas'), sólo que de esta forma se indica + * el tipo que retorna, habilitando las funcionalidades de autocompletado. + * + * @return interface_propuestas + */ + static function propuestas() + { + $modo_consultas = kernel::proyecto()->get_modo_consultas_g3(); + return kernel::localizador()->instanciar_singleton("modelo\\g3\\$modo_consultas\\propuestas"); + } + + /** + * Instancia el objeto de consultas de Personas mediante el patrón Singleton. + * + * @return interface_personas + */ + static function personas() + { + $modo_consultas = kernel::proyecto()->get_modo_consultas_g3(); + return kernel::localizador()->instanciar_singleton("modelo\\g3\\$modo_consultas\\personas"); + } + + /** + * Instancia el objeto de consultas de Países mediante el patrón Singleton. + * + * @return interface_paises + */ + static function paises() + { + $modo_consultas = kernel::proyecto()->get_modo_consultas_g3(); + return kernel::localizador()->instanciar_singleton("modelo\\g3\\$modo_consultas\\paises"); + } + + /** + * Instancia el objeto de consultas de Localidades mediante el patrón Singleton. + * + * @return interface_localidades + */ + static function localidades() + { + $modo_consultas = kernel::proyecto()->get_modo_consultas_g3(); + return kernel::localizador()->instanciar_singleton("modelo\\g3\\$modo_consultas\\localidades"); + } + + /** + * Instancia el objeto de consultas de Períodos mediante el patrón Singleton. + * + * @return interface_periodos + */ + static function periodos() + { + $modo_consultas = kernel::proyecto()->get_modo_consultas_g3(); + return kernel::localizador()->instanciar_singleton("modelo\\g3\\$modo_consultas\\periodos"); + } + + /** + * Instancia el objeto de consultas de Colegios Secundarios mediante el patrón Singleton. + * + * @return interface_colegios + */ + static function colegios() + { + $modo_consultas = kernel::proyecto()->get_modo_consultas_g3(); + return kernel::localizador()->instanciar_singleton("modelo\\g3\\$modo_consultas\\colegios"); + } + + /** + * Instancia el objeto de consultas de Títulos Secundario mediante el patrón Singleton. + * + * @return interface_titulos_secundario + */ + static function titulos_secundario() + { + $modo_consultas = kernel::proyecto()->get_modo_consultas_g3(); + return kernel::localizador()->instanciar_singleton("modelo\\g3\\$modo_consultas\\titulos_secundario"); + } + + /** + * Instancia el objeto de consultas de Parámetros mediante el patrón Singleton. + * + * @return interface_parametros + */ + static function parametros() + { + $modo_consultas = kernel::proyecto()->get_modo_consultas_g3(); + return kernel::localizador()->instanciar_singleton("modelo\\g3\\$modo_consultas\\parametros"); + } + + /** + * Instancia el objeto de consultas de Parámetros mediante el patrón Singleton. + * + * @return interface_turnos + */ + static function turnos() + { + $modo_consultas = kernel::proyecto()->get_modo_consultas_g3(); + return kernel::localizador()->instanciar_singleton("modelo\\g3\\$modo_consultas\\turnos"); + } + + /** + * Instancia el objeto de consultas de Requisitos mediante el patrón Singleton. + * + * @return interface_requisitos + */ + static function requisitos() + { + $modo_consultas = kernel::proyecto()->get_modo_consultas_g3(); + return kernel::localizador()->instanciar_singleton("modelo\\g3\\$modo_consultas\\requisitos"); + } + + /** + * Instancia el objeto de consultas de Extensiones para los archivos RDI + * + * @return interface_extensiones + */ + static function extensiones() + { + $modo_consultas = kernel::proyecto()->get_modo_consultas_g3(); + return kernel::localizador()->instanciar_singleton("modelo\\g3\\$modo_consultas\\extensiones"); + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/interface_colegios.php b/src/siu/modelo/g3/interface_colegios.php new file mode 100644 index 0000000..babf11c --- /dev/null +++ b/src/siu/modelo/g3/interface_colegios.php @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/src/siu/modelo/g3/interface_entidades_g3.php b/src/siu/modelo/g3/interface_entidades_g3.php new file mode 100644 index 0000000..ef1ff10 --- /dev/null +++ b/src/siu/modelo/g3/interface_entidades_g3.php @@ -0,0 +1,66 @@ + \ No newline at end of file diff --git a/src/siu/modelo/g3/interface_extensiones.php b/src/siu/modelo/g3/interface_extensiones.php new file mode 100644 index 0000000..f6d7427 --- /dev/null +++ b/src/siu/modelo/g3/interface_extensiones.php @@ -0,0 +1,20 @@ + \ No newline at end of file diff --git a/src/siu/modelo/g3/interface_localidades.php b/src/siu/modelo/g3/interface_localidades.php new file mode 100644 index 0000000..e8fa02b --- /dev/null +++ b/src/siu/modelo/g3/interface_localidades.php @@ -0,0 +1,18 @@ + \ No newline at end of file diff --git a/src/siu/modelo/g3/interface_paises.php b/src/siu/modelo/g3/interface_paises.php new file mode 100644 index 0000000..d161a95 --- /dev/null +++ b/src/siu/modelo/g3/interface_paises.php @@ -0,0 +1,24 @@ + \ No newline at end of file diff --git a/src/siu/modelo/g3/interface_parametros.php b/src/siu/modelo/g3/interface_parametros.php new file mode 100644 index 0000000..0dd7f2a --- /dev/null +++ b/src/siu/modelo/g3/interface_parametros.php @@ -0,0 +1,26 @@ + \ No newline at end of file diff --git a/src/siu/modelo/g3/interface_periodos.php b/src/siu/modelo/g3/interface_periodos.php new file mode 100644 index 0000000..8c8c614 --- /dev/null +++ b/src/siu/modelo/g3/interface_periodos.php @@ -0,0 +1,43 @@ + \ No newline at end of file diff --git a/src/siu/modelo/g3/interface_personas.php b/src/siu/modelo/g3/interface_personas.php new file mode 100644 index 0000000..52b27a6 --- /dev/null +++ b/src/siu/modelo/g3/interface_personas.php @@ -0,0 +1,36 @@ + x, 'tipo_documento' => y, 'nro_documento' => 'z') + * @return array + */ + function test($id); + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/g3/interface_propuestas.php b/src/siu/modelo/g3/interface_propuestas.php new file mode 100644 index 0000000..7164dfb --- /dev/null +++ b/src/siu/modelo/g3/interface_propuestas.php @@ -0,0 +1,63 @@ + \ No newline at end of file diff --git a/src/siu/modelo/g3/interface_requisitos.php b/src/siu/modelo/g3/interface_requisitos.php new file mode 100644 index 0000000..5192a50 --- /dev/null +++ b/src/siu/modelo/g3/interface_requisitos.php @@ -0,0 +1,33 @@ + \ No newline at end of file diff --git a/src/siu/modelo/g3/interface_responsables_academicas.php b/src/siu/modelo/g3/interface_responsables_academicas.php new file mode 100644 index 0000000..d2148f5 --- /dev/null +++ b/src/siu/modelo/g3/interface_responsables_academicas.php @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/src/siu/modelo/g3/interface_titulos_secundario.php b/src/siu/modelo/g3/interface_titulos_secundario.php new file mode 100644 index 0000000..b276105 --- /dev/null +++ b/src/siu/modelo/g3/interface_titulos_secundario.php @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/src/siu/modelo/g3/interface_turnos.php b/src/siu/modelo/g3/interface_turnos.php new file mode 100644 index 0000000..e42f4bc --- /dev/null +++ b/src/siu/modelo/g3/interface_turnos.php @@ -0,0 +1,90 @@ + x, 'fecha' => y) + * @return array + */ + function test($id); + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/lib/abm.php b/src/siu/modelo/lib/abm.php new file mode 100644 index 0000000..93c5dca --- /dev/null +++ b/src/siu/modelo/lib/abm.php @@ -0,0 +1,140 @@ +quote($valor); + } elseif (($valor === null) || empty($valor)) { + return 'NULL'; + } elseif (is_bool($valor)) { + return $valor ? '1' : '0'; + } else { + return kernel::db()->quote($valor); + } + } + + /** + * Alta de datos en una tabla + * + * @param String $tabla + * @param recordset $datos + * @return mixed + */ + static function alta($tabla, $datos, $datos_quoteados = array()) + { + $valores = array(); + foreach ($datos as $clave => $valor) { + $valores[$clave] = static::get_valor_sql($valor); + } + + foreach ($datos_quoteados as $clave => $valor) { + if ($valor === null) { + $valor = "NULL"; + } + $valores[$clave] = $valor; + } + $campos = implode(', ', array_keys($valores)); + $valores = implode(", ", $valores); + $sql = "INSERT INTO $tabla ($campos) VALUES ($valores)"; + kernel::db()->ejecutar($sql); + } + + static function baja($tabla, $clave) + { + $where = static::get_where_de_clave($clave); + $sql = "DELETE FROM $tabla WHERE $where"; + kernel::db()->ejecutar($sql); + } + + static function modificacion($tabla, $datos, $clave, $where_extra = null, $set_extra = null) + { + $where = static::get_where_de_clave($clave); + $valores = array(); + foreach ($datos as $campo => $valor) { + $valores[] = $campo . ' = ' . static::get_valor_sql($valor); + } + + $valores = implode(', ', $valores); + if (isset($set_extra)) { + $valores .= ', ' . $set_extra; + } + + if (isset($where_extra)) { + $where .= ' ' . $where_extra; + } + $sql = "UPDATE $tabla SET $valores WHERE $where"; + kernel::db()->ejecutar($sql); + } + + /** + * Determina si una tabla contiene registro/s con una clave dada + * Una pavada, pero para ahorrar 3 lineas de codigo sirve! + */ + static function existe_registro($tabla, $clave, $clave_excluir = null) + { + $where = static::get_where_de_clave($clave); + if (isset($clave_excluir)) { + $where .= ' AND NOT (' . static::get_where_de_clave($clave_excluir) . ')'; + } + $sql = "SELECT COUNT(*) as cant FROM $tabla WHERE $where"; + $rs = kernel::db()->consultar_fila($sql); + return $rs['cant'] > 0; + } + + /** + * Determina si el nuevo set de datos difiere del actualmente cargado en base, esto evita que se haga un update y se actualize una vigencia por ejemplo + */ + static function hubo_cambios_tabla($tabla, $clave, $datos_nuevos) + { + $campos = array_keys($datos_nuevos); + $where = static::get_where_de_clave($clave); + $sql = "SELECT " . implode(', ', $campos) . " FROM $tabla WHERE $where"; + $rs = kernel::db()->consultar_fila($sql); + if (empty($rs)) { + return true; + } else { + foreach ($datos_nuevos as $campo => $valor) { + if (is_bool($rs[$campo])) { //Caso particular campos boolean en base + $rs[$campo] = ($rs[$campo]) ? 1 : 0; + } + if (is_bool($valor)) { //Caso particular campos boolean en php + $valor = ($valor) ? 1 : 0; + } + + if (trim($rs[$campo]) != trim($valor)) { + return true; + } + } + return false; + } + } + + static function get_where_de_clave($clave) + { + $where = 'TRUE'; + if (!empty($clave)) { + $where = array(); + foreach ($clave as $campo => $valor) { + $where[] = $campo . ' = ' . kernel::db()->quote($valor); + } + $where = implode(' AND ', $where); + } + return $where; + } + + static function recuperar_secuencia($secuencia) + { + $secuencia = kernel::db()->quote($secuencia); + $sql = "SELECT currval($secuencia) as seq;"; + $datos = kernel::db()->consultar_fila($sql); + return $datos['seq']; + } + +} +?> diff --git a/src/siu/modelo/lib/catalogo.php b/src/siu/modelo/lib/catalogo.php new file mode 100644 index 0000000..1c69b1b --- /dev/null +++ b/src/siu/modelo/lib/catalogo.php @@ -0,0 +1,232 @@ +usar_cache = $activo; + } + + /** + * Consulta para saber si se usa caché + * + * @return boolean + */ + function usa_cache() + { + return $this->usar_cache; + } + + /** + * + * @return cache + */ + function cache() + { + return admin_cache::instancia(admin_cache::tipo_memoria); + } + + /** + * Establecer el tiempo de vida por defecto de un dato en caché + * + * @param int $tiempo valor expresado en segundos + */ + function set_tiempo_cache($tiempo) + { + $this->tiempo_cache = $tiempo; + } + + /** + * Genera una clave única para un valor dado, concatenando: + * ID de punto de acceso + ID de persona + SALT + parámetro recibido + * + * @param $clave + * @param $personal Si es true, se concatena también el ID de persona + * @return string + */ + function generar_id($clave, $personal = false) + { + $salt = kernel::proyecto()->get('salt'); + $id = ($personal) ? kernel::persona()->get_id() . '_' : ''; + $id .= $_SERVER['ID_PTO_ACCESO'] . '_' . $salt . '_' . $clave; + return sha1($id); + } + + //-------------------------------------------------------------------------- + //---- Manejo de cache ----------------------------------------------------- + //-------------------------------------------------------------------------- + + /** + * Borra la caché del sistema + * + * @return boolean + */ + function limpiar_cache() + { + $path_clearapc = bootstrap::get_dir_siu() . '/www/clearapc.php'; + file_put_contents($path_clearapc, " + true)); + } catch (Exception \$e) { + echo json_encode(array('success' => false)); + } + ?>"); + $alias = kernel::proyecto()->get_alias(); + $url = $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'] . ':' . $_SERVER['SERVER_PORT'] . $alias . "/clearapc.php"; + $result = json_decode(file_get_contents($url)); + unlink($path_clearapc); + return $result->success; + } + + /** + * Determina si existe una clave en caché + * + * @param string $clave + * @return boolean + */ + function existe($clave) + { + return $this->cache()->existe($clave); + } + + /** + * Obtiene un valor almacenado en caché + * + * @param string $clave + * @return array + */ + function buscar($clave) + { + return $this->cache()->buscar($clave); + } + + /** + * Almacena un valor en caché + * + * @param string $clave + * @param array $valor + */ + function guardar($clave, $valor, $tiempo_cache = 0) + { + $this->cache()->guardar($clave, $valor, $tiempo_cache); + } + + //-------------------------------------------------------------------------- + //---- Manejo de consultas ------------------------------------------------- + //-------------------------------------------------------------------------- + + function consultar($sql, $clave_cache = null) + { + if ($this->usar_cache) { + if (is_null($clave_cache)) { + $clave_cache = $this->generar_id($sql); + } + if ($this->existe($clave_cache)) { + $datos = $this->buscar($clave_cache); + kernel::log()->add_debug('CATALOGO', 'BUSCAR: ' . $clave_cache . ' -- ' . $sql); + } else { + $datos = kernel::db()->consultar($sql); + $this->guardar($clave_cache, $datos); + kernel::log()->add_debug('CATALOGO', 'GUARDAR: ' . $clave_cache . ' -- ' . $sql); + } + } else { + $datos = kernel::db()->consultar($sql); + } + return $datos; + } + + function consultar_fila($sql, $clave_cache = null) + { + $datos = $this->consultar($sql, $clave_cache); + if (isset($datos[0])) { + return $datos[0]; + } + return array(); + } + + function invalidar($clave) + { + $id = $this->generar_id($clave); + $this->cache()->eliminar($id); + kernel::log()->add_debug('CATALOGO', 'INVALIDAR: ' . $id . ' -- ' . $clave); + } + + function invalidar_por_id($id) + { + $this->cache()->eliminar($id); + kernel::log()->add_debug('CATALOGO', 'INVALIDAR: ' . $id . ' -- ' . $id); + } + + //-------------------------------------------------------------------------- + //---- Manejo de configuración de campos del formulario -------------------- + //-------------------------------------------------------------------------- + + function get_configuracion_formulario($tipos_propuestas) + { + if ($this->usar_cache) { + $clave_config = $this->generar_clave_configuracion_formulario($tipos_propuestas); + $clave_cache = $this->generar_id($clave_config); + if ($this->existe($clave_cache)) { + $configuracion = $this->buscar($clave_cache); + kernel::log()->add_debug('CATALOGO', 'BUSCAR CONFIGURACIÓN FORM: ' . $clave_cache . ' -- ' . $clave_config); + } else { + $configuracion = $this->obtener_configuracion_formulario($tipos_propuestas); + $this->guardar($clave_cache, $configuracion); + kernel::log()->add_debug('CATALOGO', 'GUARDAR CONFIGURACIÓN FORM: ' . $clave_cache . ' -- ' . $clave_config); + } + } else { + $configuracion = $this->obtener_configuracion_formulario($tipos_propuestas); + } + return $configuracion; + } + + protected function generar_clave_configuracion_formulario($tipos_propuestas) + { + return implode('__', $tipos_propuestas); + } + + protected function obtener_configuracion_formulario($tipos_propuestas) + { + // Se obtiene la configuración del primer tipo de propuestas + $primer_tipo = current($tipos_propuestas); + $datos = util::consultas()->get_parametros_campos_form($primer_tipo); + $parametros_campos = array(); + foreach ($datos as $dato) { + $parametros_campos[$dato['columna']] = array('visible' => $dato['visible'], 'obligatorio' => $dato['obligatorio'], 'se_imprime' => $dato['se_imprime']); + } + // En caso de que haya más de un tipo de propuesta, se obtiene la configuración + // final como la unión lógica de los conjuntos + for ($i = 1; $i < count($tipos_propuestas); $i++) { + $datos = util::consultas()->get_parametros_campos_form($tipos_propuestas[$i]); + foreach ($datos as $dato) { + $parametros_campos[$dato['columna']]['visible'] = $parametros_campos[$dato['columna']]['visible'] || $dato['visible']; + $parametros_campos[$dato['columna']]['obligatorio'] = $parametros_campos[$dato['columna']]['obligatorio'] || $dato['obligatorio']; + $parametros_campos[$dato['columna']]['se_imprime'] = $parametros_campos[$dato['columna']]['se_imprime'] || $dato['se_imprime']; + } + } + + return $parametros_campos; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/manejador_datos.php b/src/siu/modelo/manejador_datos.php new file mode 100644 index 0000000..52ff68e --- /dev/null +++ b/src/siu/modelo/manejador_datos.php @@ -0,0 +1,1484 @@ +id_preinscripcion = $id_preinscripcion; + } + + function get_id_preinscripcion() + { + return $this->id_preinscripcion; + } + + /** + * id_preinscripcion / version_impresa + */ + function get_codigo_preinscripcion() + { + $datos = $this->get_datos_preinscripcion(); + return $datos['id_preinscripcion'] . '/' . $datos['version_impresa']; + } + + function get_estado_cuenta_preinscripcion() + { + $datos = $this->get_datos_preinscripcion(); + return $datos['estado']; + } + + function get_apellido_y_nombres() + { + $datos = $this->get_datos_preinscripcion(); + return $datos['apellido'] . ', ' . $datos['nombres']; + } + + function hay_datos_preinscripcion() + { + $datos = $this->get_datos_preinscripcion(); + return !empty($datos); + } + + function get_datos_preinscripcion() + { + if (!isset($this->datos)) { + $this->datos = util::consultas()->get_datos_preinscripcion($this->id_preinscripcion); + } + return $this->datos; + } + + function set_datos_preinscripcion($datos) + { + $datos = $this->controlar_hiddens($datos); + $datos = $this->filtrar_datos_preinscripcion($datos); + + // Limpio los datos de discapacidad + $this->limpiar_discapacidad($datos); + + // Siempre opera en modo UPDATE sobre , el registro se da de alta en la creación de usuario + $clave = array('id_preinscripcion' => $this->get_id_preinscripcion()); + abm::modificacion('sga_preinscripcion', $datos, $clave, null, 'version_modificacion = version_modificacion + 1'); + + // borrar cache + unset($this->datos); + unset($this->datos_formulario); + } + + //-------------------------------------------------------------------------- + + function actualizar_version_modificacion() + { + $id_preinscripcion = kernel::db()->quote($this->id_preinscripcion); + + $sql = "UPDATE sga_preinscripcion + SET version_modificacion = version_modificacion + 1 + WHERE id_preinscripcion = $id_preinscripcion + "; + + kernel::db()->ejecutar($sql); + + // Borrar cache + unset($this->datos); + } + + function actualizar_version_impresa() + { + $id_preinscripcion = kernel::db()->quote($this->id_preinscripcion); + + $sql = "UPDATE sga_preinscripcion + SET version_impresa = version_modificacion + WHERE id_preinscripcion = $id_preinscripcion + "; + + kernel::db()->ejecutar($sql); + + // Borrar cache + unset($this->datos); + } + + function actualizar_estado($estado) + { + $estado = kernel::db()->quote($estado); + $id_preinscripcion = kernel::db()->quote($this->id_preinscripcion); + + $sql = "UPDATE sga_preinscripcion + SET estado = $estado + WHERE id_preinscripcion = $id_preinscripcion + "; + + kernel::db()->ejecutar($sql); + + // Borrar cache + unset($this->datos); + } + + function eliminar_observaciones() + { + $estado = kernel::db()->quote(preinscripcion::estado_preinsc_pendiente); + $id_preinscripcion = kernel::db()->quote($this->id_preinscripcion); + + $sql = "UPDATE sga_preinscripcion_propuestas + SET observaciones = NULL, + estado = $estado + WHERE id_preinscripcion = $id_preinscripcion; + "; + + kernel::db()->ejecutar($sql); + } + + + //-------------------------------------------------------------------------- + //---- Datos de nacionalidad / documentación ------------------------------- + //-------------------------------------------------------------------------- + + function permite_cedula() + { + if (!isset($this->datos)) { + $this->datos = $this->get_datos_preinscripcion(); + } + $pais = $this->datos['pais_documento']; + return g3::paises()->permite_cedula($pais); + } + + function necesita_visa() + { + if (!isset($this->datos)) { + $this->datos = $this->get_datos_preinscripcion(); + } + $pais = $this->datos['pais_documento']; + return g3::paises()->necesita_visa($pais); + } + + function get_nacionalidad() + { + if (!isset($this->datos)) { + $this->datos = $this->get_datos_preinscripcion(); + } + return $this->datos['nacionalidad']; + } + + function get_tipo_doc() + { + if (!isset($this->datos)) { + $this->datos = $this->get_datos_preinscripcion(); + } + return $this->datos['tipo_documento']; + } + + function get_pais_documento() + { + if (!isset($this->datos)) { + $this->datos = $this->get_datos_preinscripcion(); + } + return $this->datos['pais_documento']; + } + + function es_argentino() + { + if (!isset($this->datos)) { + $this->datos = $this->get_datos_preinscripcion(); + } + return $this->datos['pais_documento'] == 54; + } + + //-------------------------------------------------------------------------- + //---- Datos de inscripciones ---------------------------------------------- + //-------------------------------------------------------------------------- + + /** + * Determina si se efectuó alguna inscripción a propuesta + * + * @return boolean + */ + function hay_inscripcion_propuesta() + { + $propuestas_insc = util::consultas()->get_propuestas_insc($this->id_preinscripcion); + return !empty($propuestas_insc); + } + + /** + * Obtiene los distintos tipos de propuetas en las que se inscribió el aspirante + * + * @return array + */ + function get_tipos_propuestas_insc() + { + // Se obtienen las inscripciones a propuestas (sin descripciones) + $propuestas_insc = util::consultas()->get_propuestas_insc($this->id_preinscripcion); + // Se construye un array con los tipos de propuestas (sin repeticiones) + $tipos_propuesta = array(); + foreach ($propuestas_insc as $propuesta) { + $tipo = g3::propuestas()->get_id_tipo_propuesta($propuesta['propuesta']); + if (!in_array($tipo, $tipos_propuesta)) { + $tipos_propuesta[] = $tipo; + } + } + return $tipos_propuesta; + } + + /** + * Obtiene la cantidad de inscripciones del aspirante + * + * @return int + */ + function get_cantidad_inscripciones() + { + // Se obtienen las propuestas (sin descripciones) + $propuestas_insc = util::consultas()->get_propuestas_insc($this->id_preinscripcion); + return count($propuestas_insc); + } + + + /** + * Determina si el aspirante se inscribió a alguna propuesta de posgrado + * + * @return boolean + */ + function hay_insc_posgrado() + { + $tipos_propuesta = $this->get_tipos_propuestas_insc(); + foreach ($tipos_propuesta as $tipo) { + if ($tipo == propuesta::tipo_POSGRADO) { + return true; + } + } + return false; + } + + /** + * Obtiene la cantidad de inscripciones a propuestas de posgrado + * + * @return int + */ + function get_cantidad_inscripciones_posgrado() + { + $tipos_propuesta = $this->get_tipos_propuestas_insc(); + $cont = 0; + foreach ($tipos_propuesta as $tipo) { + if ($tipo == propuesta::tipo_POSGRADO) { + $cont++; + } + } + return $cont; + } + + /** + * Obtiene los datos de las inscripciones efectuadas por el aspirante + * + * @return array + */ + function get_datos_inscripciones() + { + if (!isset($this->datos_insc)) { + $propuestas_insc = util::consultas()->get_propuestas_insc($this->id_preinscripcion); + $nuevo = array(); + foreach ($propuestas_insc as $dato) { + $dato['fecha_fin_vigencia_visual'] = convertir_fecha_formato_frontend($dato['fecha_fin_vigencia']); + $clave = $dato['id_preinscripcion'] . '_' . $dato['propuesta']; + $id = util::catalogo()->generar_id($clave); + $nuevo[$id] = $dato; + $nuevo[$id][catalogo::id] = $id; + } + $this->datos_insc = $nuevo; + } + return $this->datos_insc; + } + + /** + * Retorna un string con los nombres abreviados de las propuestas elegidas por el aspirante. + * Si hay más de una, se muestran separan por " / " + * + * @return array + */ + function get_nombres_propuestas_insc() + { + $propuestas_insc = $this->get_datos_inscripciones(); + $salida = ''; + foreach ($propuestas_insc as $propuesta) { + if ($salida) { + $salida .= ' / '; + } + $salida .= g3::propuestas()->get_nombre_abreviado($propuesta['propuesta']); + } + return $salida; + } + + function set_propuesta_insc($datos) + { + try { + kernel::db()->abrir_transaccion(); + + // Se obtiene fecha de vencimiento de la preinsripción + $sql_fecha = 'SELECT CURRENT_DATE as fecha'; + $res_fecha = kernel::db()->consultar_fila($sql_fecha); + $hoy = $res_fecha['fecha']; + $pre_meses_vigencia_preinsc = g3::parametros()->get_valor('pre_meses_vigencia_preinsc'); + $fecha_vencimiento = get_fecha_desplazada($hoy, $pre_meses_vigencia_preinsc, 'mes'); + + $datos_alta = array( + 'id_preinscripcion' => $this->id_preinscripcion, + 'responsable_academica' => $datos['responsable_academica'], + 'propuesta' => $datos['propuesta'], + 'ubicacion' => $datos['ubicacion'], + 'modalidad' => $datos['modalidad'], + 'periodo_insc' => g3::periodos()->get_periodo_preinscripcion($datos['propuesta'], $datos['ubicacion'], $datos['modalidad']), + 'fecha_fin_vigencia' => $fecha_vencimiento, + ); + abm::alta('sga_preinscripcion_propuestas', $datos_alta); + + // Se actualiza versión de modificación y fecha de última modificación + $id_preinscripcion = kernel::db()->quote($this->id_preinscripcion); + $sql = "UPDATE sga_preinscripcion + SET version_modificacion = version_modificacion + 1, + fecha_ult_modif = 'now()' + WHERE id_preinscripcion = $id_preinscripcion"; + kernel::db()->ejecutar($sql); + + // Borrar caché + unset($this->datos_insc); + + kernel::db()->cerrar_transaccion(); + } catch (Exception $e) { + kernel::db()->abortar_transaccion(); + } + } + + function eliminar_insc($id) + { + /** + * Se recuperan los datos de la inscripción a partir del ID encriptado + */ + $datos_insc = $this->get_datos_inscripciones(); + if (empty($datos_insc[$id])) { + return; + } + $datos = $datos_insc[$id]; + + try { + kernel::db()->abrir_transaccion(); + + $tipo_propuesta = g3::propuestas()->get_id_tipo_propuesta($datos['propuesta']); + + if ($tipo_propuesta == propuesta::tipo_POSGRADO) { + $cantidad_insc_posgrado = $this->get_cantidad_inscripciones_posgrado(); + } + + $clave = array(); + $clave['id_preinscripcion'] = $datos['id_preinscripcion']; + $clave['propuesta'] = $datos['propuesta']; + abm::baja('sga_preinscripcion_propuestas', $clave); + + if (($tipo_propuesta == propuesta::tipo_POSGRADO) && ($cantidad_insc_posgrado == 1)) { + // Si se elimina la única propuesta de posgrado, se eliminan también + // los registros de Actuación docente, Actuación profesional y + // Antecedentes académico + $clave = array('id_preinscripcion' => $datos['id_preinscripcion']); + abm::baja('sga_actuacion_doc', $clave); + abm::baja('sga_actuacion_prof', $clave); + abm::baja('sga_formacion_acad', $clave); + } + + // Se actualiza versión de modificación y fecha de última modificación + $id_preinscripcion = kernel::db()->quote($this->id_preinscripcion); + $sql = "UPDATE sga_preinscripcion + SET version_modificacion = version_modificacion + 1, + fecha_ult_modif = 'now()' + WHERE id_preinscripcion = $id_preinscripcion"; + kernel::db()->ejecutar($sql); + + $ra_inscripcion_eliminada = $datos['responsable_academica']; + $inscripciones_restantes = $datos_insc; + // Quito la inscripción eliminada + unset($inscripciones_restantes[$id]); + $ra_inscripciones_restantes = array_column($inscripciones_restantes, 'responsable_academica'); + // Si no hay otras inscripciones para la RA de la inscripción eliminada + // entonces devuelvo el turno + if (!in_array($ra_inscripcion_eliminada, $ra_inscripciones_restantes)) { + $this->devolver_turno($ra_inscripcion_eliminada); + } + + // Borrar caché + unset($this->datos_insc); +// catalogo::invalidar($this->get_sql_propuestas_insc()); +// catalogo::invalidar($this->get_sql_tipos_de_propuesta_insc()); +// catalogo::cache()->eliminar($_SERVER['UA'] . 'parametros_campos'); + + kernel::db()->cerrar_transaccion(); + } catch (Exception $e) { + kernel::db()->abortar_transaccion(); + } + } + + //-------------------------------------------------------------------------- + //---- Actuación docente --------------------------------------------------- + //-------------------------------------------------------------------------- + + function get_datos_actuacion_docente() + { + if (!isset($this->datos_actuacion_docente)) { + $this->datos_actuacion_docente = util::consultas()->get_datos_actuacion_docente($this->id_preinscripcion); + } + return $this->datos_actuacion_docente; + } + + function set_actuacion_docente($datos) + { + $datos['id_preinscripcion'] = $this->id_preinscripcion; + $datos = $this->filtrar_datos_comunes($datos, 'fecha_desde', 'fecha_hasta'); + + if (empty($datos[catalogo::id])) { + unset($datos[catalogo::id]); + abm::alta('sga_actuacion_doc', $datos); + } else { + $datos_act_doc = $this->get_datos_actuacion_docente(); + if (!empty($datos_act_doc[$datos[catalogo::id]])) { + $clave = array('actuacion_doc' => $datos_act_doc[$datos[catalogo::id]]['actuacion_doc']); + unset($datos[catalogo::id]); + abm::modificacion('sga_actuacion_doc', $datos, $clave); + } + } + + // Borrar caché + unset($this->datos_actuacion_docente); + } + + function eliminar_actuacion_docente($id) + { + $datos_insc = $this->get_datos_actuacion_docente(); + if (empty($datos_insc[$id])) { + return; + } + $datos = $datos_insc[$id]; + + $clave = array(); + $clave['actuacion_doc'] = $datos['actuacion_doc']; + abm::baja('sga_actuacion_doc', $clave); + + // Borrar caché + unset($this->datos_actuacion_docente); + } + + //-------------------------------------------------------------------------- + //---- Actuación profesional ----------------------------------------------- + //-------------------------------------------------------------------------- + + function get_datos_actuacion_profesional() + { + if (!isset($this->datos_actuacion_profesional)) { + $this->datos_actuacion_profesional = util::consultas()->get_datos_actuacion_profesional($this->id_preinscripcion); + } + return $this->datos_actuacion_profesional; + } + + function set_actuacion_profesional($datos) + { + $datos['id_preinscripcion'] = $this->id_preinscripcion; + $datos = $this->filtrar_datos_comunes($datos, 'fecha_desde', 'fecha_hasta'); + + // Reemplazo de claves para almacenar en la tabla 'sga_actuacion_prof' + $datos['empresa'] = $datos['antec_empresa']; + unset($datos['antec_empresa']); + + if (empty($datos[catalogo::id])) { + unset($datos[catalogo::id]); + abm::alta('sga_actuacion_prof', $datos); + } else { + $datos_act_prof = $this->get_datos_actuacion_profesional(); + if (!empty($datos_act_prof[$datos[catalogo::id]])) { + $clave = array('actuacion_prof' => $datos_act_prof[$datos[catalogo::id]]['actuacion_prof']); + unset($datos[catalogo::id]); + abm::modificacion('sga_actuacion_prof', $datos, $clave); + } + } + + // Borrar caché + unset($this->datos_actuacion_profesional); + } + + function eliminar_actuacion_profesional($id) + { + $datos_insc = $this->get_datos_actuacion_profesional(); + if (empty($datos_insc[$id])) { + return; + } + $datos = $datos_insc[$id]; + + $clave = array(); + $clave['actuacion_prof'] = $datos['actuacion_prof']; + abm::baja('sga_actuacion_prof', $clave); + + // Borrar caché + unset($this->datos_actuacion_profesional); + } + + //-------------------------------------------------------------------------- + //---- Antecedentes académicos --------------------------------------------- + //-------------------------------------------------------------------------- + + function get_datos_formacion_acad() + { + if (!isset($this->datos_formacion_acad)) { + $this->datos_formacion_acad = util::consultas()->get_datos_formacion_acad($this->id_preinscripcion); + } + return $this->datos_formacion_acad; + } + + function set_formacion_acad($datos) + { + $datos['id_preinscripcion'] = $this->id_preinscripcion; + $no_formatear = array('categoria_coneau', 'nivel_estudio', 'estado'); + $datos = $this->filtrar_datos_comunes($datos, 'fecha_ingreso', 'fecha_egreso', $no_formatear); + + if (empty($datos[catalogo::id])) { + unset($datos[catalogo::id]); + abm::alta('sga_formacion_acad', $datos); + } else { + $datos_form_acad = $this->get_datos_formacion_acad(); + if (!empty($datos_form_acad[$datos[catalogo::id]])) { + $clave = array('formacion_acad' => $datos_form_acad[$datos[catalogo::id]]['formacion_acad']); + unset($datos[catalogo::id]); + abm::modificacion('sga_formacion_acad', $datos, $clave); + } + } + + // Borrar caché + unset($this->datos_formacion_acad); + } + + function eliminar_formacion_acad($id) + { + $datos_insc = $this->get_datos_formacion_acad(); + if (empty($datos_insc[$id])) { + return; + } + $datos = $datos_insc[$id]; + + $clave = array(); + $clave['formacion_acad'] = $datos['formacion_acad']; + abm::baja('sga_formacion_acad', $clave); + + // Borrar caché + unset($this->datos_formacion_acad); + } + + //-------------------------------------------------------------------------- + //---- Turno de presentación ----------------------------------------------- + //-------------------------------------------------------------------------- + + function get_listado_turnos() + { + return util::consultas()->get_turnos_presentacion($this->id_preinscripcion); + } + + function devolver_turno($ra) + { + g3::turnos()->devolver_turno($this->id_preinscripcion, $ra); + } + + function set_turno($ra, $datos) + { + try { + kernel::db()->abrir_transaccion(); + // Se registra el nuevo turno + g3::turnos()->reservar_turno($this->id_preinscripcion, $ra, $datos); + // Se incrementa la versión de modificación de la preinscripción + $this->actualizar_version_modificacion(); + kernel::db()->cerrar_transaccion(); + } catch (\siu\errores\error_preinscripcion $e) { + kernel::db()->abortar_transaccion(); + throw $e; + } + } + + /** + * Invalida cache de turno de presentación(en caso que haya sido solicitado) de + * un aspirante en una RA dada. + * + * @param int $ra + * @return void + */ + function invalidar_cache_turno_presentacion($ra) + { + g3::turnos()->invalidar_cache_turno_presentacion($this->id_preinscripcion, $ra); + } + + //-------------------------------------------------------------------------- + //---- Configuración de formulario ----------------------------------------- + //-------------------------------------------------------------------------- + + function get_config_campos_aspirante() + { + $tipos_propuestas = $this->get_tipos_propuestas_insc(); + return util::catalogo()->get_configuracion_formulario($tipos_propuestas); + } + + /** + * Control de hiddens: se valida que los valores provinientes de inputs de tipo + * 'hidden' estén entre los posibles para cada caso. Si no es válido, se fuerza + * el valor null. + * + * @param array $datos + * @return array + */ + protected function controlar_hiddens($datos) + { + if ( isset($datos['colegio_secundario']) && ($datos['colegio_secundario'] == 'null') || ((!empty($datos['colegio_secundario'])) && (!g3::entidad('colegios')->existe($datos['colegio_secundario'])))) { + $datos['colegio_secundario'] = null; + } + if ( isset($datos['titulo_secundario']) && ($datos['titulo_secundario'] == 'null') || ((!empty($datos['titulo_secundario'])) && (!g3::titulos_secundario()->existe($datos['titulo_secundario'])))) { + $datos['titulo_secundario'] = null; + } + if ( isset($datos['loc_per_lect']) && ($datos['loc_per_lect'] == 'null') || ((!empty($datos['loc_per_lect'])) && (!g3::entidad('localidades')->existe($datos['loc_per_lect'])))) { + $datos['loc_per_lect'] = null; + } + if ( isset($datos['loc_proc']) && ($datos['loc_proc'] == 'null') || ((!empty($datos['loc_proc'])) && (!g3::entidad('localidades')->existe($datos['loc_proc'])))) { + $datos['loc_proc'] = null; + } + + if ( isset($datos['loc_nacimiento']) && ($datos['loc_nacimiento'] == 'null') || ((!empty($datos['loc_nacimiento'])) && (!g3::entidad('localidades')->existe($datos['loc_nacimiento'])))) { + $datos['loc_nacimiento'] = null; + } + + return $datos; + } + + protected function limpiar_discapacidad(&$datos) + { + // Si no se trata de datos de discapacidad salgo + if (!isset($datos['condicion_discapacidad'])) { + return false; + } + + if ($datos['condicion_discapacidad'] == comunes::no) { + $datos['tiene_cud'] = comunes::no; + $datos['disc_auditiva'] = comunes::no; + $datos['disc_visual'] = comunes::no; + $datos['disc_motora'] = comunes::no; + $datos['disc_cond_psicosocial'] = comunes::no; + $datos['disc_otra'] = comunes::no; + $datos['informacion_importante'] = ""; + } + + $this->limpiar_discapacidad_auditiva($datos); + $this->limpiar_discapacidad_visual($datos); + $this->limpiar_discapacidad_motora($datos); + $this->limpiar_discapacidad_psicosocial($datos); + $this->limpiar_discapacidad_otras($datos); + } + + protected function limpiar_discapacidad_auditiva(&$datos) + { + if ($datos['disc_auditiva'] == comunes::no) { + $datos['aud_tipo'] = comunes::NO_HAY_DIFICULTAD_VAL; + $datos['aud_lenguaje_senias'] = comunes::no; + $datos['aud_lenguaje_labial'] = comunes::no; + $datos['aud_comunicacion_otra'] = ""; + $datos['aud_apoyo_vida_diaria'] = ""; + $datos['aud_req_interprete_lengua_senias'] = comunes::no; + $datos['aud_req_aro_magnetico'] = comunes::no; + $datos['aud_req_otros_apoyos'] = comunes::no; + $datos['aud_otros_apoyos'] = ""; + } + + if ($datos['aud_req_otros_apoyos'] == comunes::no) { + $datos['aud_otros_apoyos'] = ""; + } + } + + protected function limpiar_discapacidad_visual(&$datos) + { + if ($datos['disc_visual'] == comunes::no) { + $datos['vis_dificultad_para_ver'] = comunes::NO_HAY_DIFICULTAD_VAL; + $datos['vis_apoyo_vida_diaria'] = ""; + $datos['vis_req_archivo_audio'] = comunes::no; + $datos['vis_req_texto_digital'] = comunes::no; + $datos['vis_req_texto_braile'] = comunes::no; + $datos['vis_req_otros_apoyos'] = comunes::no; + $datos['vis_otros_apoyos'] = ""; + } + + if ($datos['vis_req_otros_apoyos'] == comunes::no) { + $datos['vis_otros_apoyos'] = ""; + } + } + + protected function limpiar_discapacidad_motora(&$datos) + { + if ($datos['disc_motora'] == comunes::no) { + $datos['mot_apoyo_vida_diaria'] = ""; + $datos['mot_req_apoyo_aula'] = comunes::no; + $datos['mot_apoyo_aula'] = ""; + $datos['mot_req_otros_apoyos'] = comunes::no; + $datos['mot_otros_apoyos'] = ""; + } + + if ($datos['mot_req_apoyo_aula'] == comunes::no) { + $datos['mot_apoyo_aula'] = ""; + } + + if ($datos['mot_req_otros_apoyos'] == comunes::no) { + $datos['mot_otros_apoyos'] = ""; + } + } + + protected function limpiar_discapacidad_psicosocial(&$datos) + { + if ($datos['disc_cond_psicosocial'] == comunes::no) { + $datos['psi_descripcion'] = ""; + $datos['psi_apoyo_vida_diaria'] = ""; + $datos['psi_req_otros_apoyos'] = comunes::no; + $datos['psi_otros_apoyos'] = ""; + } + + if ($datos['psi_req_otros_apoyos'] == comunes::no) { + $datos['psi_otros_apoyos'] = ""; + } + } + + protected function limpiar_discapacidad_otras(&$datos) + { + if ($datos['disc_otra'] == comunes::no) { + $datos['otra_descripcion'] = ""; + $datos['otra_req_apoyo_vida_diaria'] = comunes::no; + $datos['otra_apoyo_vida_diaria'] = ""; + } + + if ($datos['otra_req_apoyo_vida_diaria'] == comunes::no) { + $datos['otra_apoyo_vida_diaria'] = ""; + } + } + + protected function filtrar_datos_comunes($datos, $campo_fecha_desde = '', $campo_fecha_hasta = '', $campos_no_formatear = array()) + { + //---- Filtrado de datos ----------------------------------------------- + $salida = array(); + $no_formatear = array_merge(array(catalogo::id), $campos_no_formatear); + + foreach ($datos as $campo => $dato) { + if (is_null($dato) || ($dato == opciones::NO_SELECCION)) { + $dato = null; + } + if (!in_array($campo, $no_formatear)) { + $dato = formatear($dato); + } + $salida[$campo] = $dato; + } + + if ((!empty($campo_fecha_desde)) && (!empty($datos[$campo_fecha_desde]))) { + $salida[$campo_fecha_desde] = convertir_fecha_formato_base($datos[$campo_fecha_desde]); + } + if ((!empty($campo_fecha_hasta)) && (!empty($datos[$campo_fecha_hasta]))) { + $salida[$campo_fecha_hasta] = convertir_fecha_formato_base($datos[$campo_fecha_hasta]); + } + + return $salida; + } + + protected function filtrar_datos_preinscripcion($datos) + { + //---- Conversiones de formato / unificaciones de campos --------------- + $celular_numero = $this->get_nro_celular($datos); + if (!is_null($celular_numero)) { + $datos['celular_numero'] = $celular_numero; + } + if (!empty($datos['fecha_nacimiento'])) { + $datos['fecha_nacimiento'] = convertir_fecha_formato_base($datos['fecha_nacimiento']); + } + if (!empty($datos['fecha_respre_otorg'])) { + $datos['fecha_respre_otorg'] = convertir_fecha_formato_base($datos['fecha_respre_otorg']); + } + if (!empty($datos['fecha_respre_venc'])) { + $datos['fecha_respre_venc'] = convertir_fecha_formato_base($datos['fecha_respre_venc']); + } + if (!empty($datos['otorgamiento_visa'])) { + $datos['otorgamiento_visa'] = convertir_fecha_formato_base($datos['otorgamiento_visa']); + } + if (!empty($datos['vencimiento_visa'])) { + $datos['vencimiento_visa'] = convertir_fecha_formato_base($datos['vencimiento_visa']); + } + + //---- Filtrado de datos ----------------------------------------------- + $campos = util::form()->get_campos_preinscripcion(); + $salida = array(); + $no_formatear = array('e_mail'); + foreach ($datos as $campo => $dato) { + if (in_array($campo, $campos)) { + if (is_null($dato) || ($dato == opciones::NO_SELECCION)) { + $dato = null; + } + if (!in_array($campo, $no_formatear)) { + $dato = formatear($dato); + } + $salida[$campo] = $dato; + } + } + + $salida['fecha_ult_modif'] = 'now()'; + return $salida; + } + + function get_datos_formularios_preinsc() + { + if (empty($this->datos_formulario)) { + $this->datos_formulario = util::consultas()->get_datos_preinscripcion_formateados($this->id_preinscripcion); + } + return $this->datos_formulario; + } + + /** + * Se deja esta ventana de extensión por si se requiere modificar el formateo + * de campos para mostrar en el comprobante. + * + * @return array + */ + function get_datos_formulario_impresion() + { + return $this->get_datos_formularios_preinsc(); + } + + protected function get_nro_celular($datos) + { + if (isset($datos['celular_caracteristica']) && isset($datos['celular_valor'])) { + return '0-' . $datos['celular_caracteristica'] . '-15-' . $datos['celular_valor']; + } else { + return null; + } + } + + //-------------------------------------------------------------------------- + //---- Control de campos faltantes ----------------------------------------- + //-------------------------------------------------------------------------- + + /** + * Determina si faltan completar campos definidos como obligatorios. + * + * @return boolean + */ + function hay_datos_faltantes() + { + $hay_faltantes = false; + $datos = $this->get_datos_preinscripcion(); + if (!empty($datos['celular_numero'])) { + $datos_cel = explode('-', $datos['celular_numero']); + $datos['celular_caracteristica'] = trim($datos_cel[1]); + $datos['celular_valor'] = trim($datos_cel[3]); + } + if(!empty($datos['es_mayor_25_sin_secundario']) && $datos['es_mayor_25_sin_secundario']== comunes::si){ + //quito del array los campos de secundario + unset($datos['colegio_secundario']); + unset($datos['titulo_secundario']); + unset($datos['anio_egreso_sec']); + unset($datos['adeuda_materias']); + unset($datos['sec_egreso']); + } + + foreach ($datos as $campo => $dato) { + if (array_key_exists($campo, $datos) && (is_null($dato)) && (util::form()->visible($campo)) && (util::form()->obligatorio($campo))) { + $hay_faltantes = true; + break; + } + } + if (!$hay_faltantes) { + if (((empty($datos['celular_caracteristica'])) || (empty($datos['celular_valor']))) && (util::form()->visible('celular_numero')) && (util::form()->obligatorio('celular_numero'))) { + $hay_faltantes = true; + } + /*Discapacidad*/ + //si tiene discapacidad pero no marca una de la lista + if ( $datos['condicion_discapacidad']=='S'&&( + $datos['disc_auditiva']=='N' && + $datos['disc_visual']=='N' && + $datos['disc_motora']=='N' && + $datos['disc_cond_psicosocial']=='N' && + $datos['disc_otra']=='N')) { + $hay_faltantes = true; + + } + if ($datos['aud_req_otros_apoyos']=='S' && empty($datos['aud_otros_apoyos'])) { + $hay_faltantes = true; + } + if ($datos['vis_req_otros_apoyos']=='S' && empty($datos['vis_otros_apoyos'])) { + $hay_faltantes = true; + } + if ($datos['mot_req_otros_apoyos']=='S' && empty($datos['mot_otros_apoyos'])) { + $hay_faltantes = true; + } + if ($datos['psi_req_otros_apoyos']=='S' && empty($datos['psi_otros_apoyos'])) { + $hay_faltantes = true; + } + if ($datos['otra_req_apoyo_vida_diaria']=='S' && empty($datos['otra_apoyo_vida_diaria'])) { + $hay_faltantes = true; + } + } + + if ((!$hay_faltantes) && (kernel::proyecto()->carga_turno_presentacion())) { + if ($this->falta_turno_presentacion()) { + $hay_faltantes = true; + } + } + //chequeo de requisitos visibles obligatorios + if ((!$hay_faltantes) && (kernel::proyecto()->usa_rdi())) { + if ($this->falta_requisitos_visibles_obligatorio()) { + + $hay_faltantes = true; + + } + } + + return $hay_faltantes; + } + function falta_requisitos_visibles_obligatorio() + { + $faltantes = ''; + + $requisitos_a_presentar_obligatorios = kernel::persona()->datos()->get_requisitos_obligatorios_a_presentar(); + $requisitos_aspirante = kernel::persona()->datos()->get_requisitos_aspirante(); + //si hay $requisitos_a_presentar_obligatorios que no estan en $requisitos_aspirante faltantes =true + if (!empty($requisitos_a_presentar_obligatorios)) { + if (!empty($requisitos_aspirante)) { + $faltantes = array_diff(array_column($requisitos_a_presentar_obligatorios, 'requisito'), array_column($requisitos_aspirante, 'requisito')); + if (!empty($faltantes)) { + return true; + } + } else { + return true; + } + } + return false; + } + + function falta_turno_presentacion() + { + $turnos = $this->get_listado_turnos(); + foreach ($turnos as $turno) { + if (!$turno['asignado']) { + return true; + } + } + return false; + } + + function get_datos_faltantes($vista_censo) + { + $datos = $this->get_datos_preinscripcion(); + //quito del array los campos de secundario + + if (!empty($datos['es_mayor_25_sin_secundario']) && $datos['es_mayor_25_sin_secundario'] == comunes::si) { + unset($datos['colegio_secundario']); + unset($datos['titulo_secundario']); + unset($datos['anio_egreso_sec']); + unset($datos['adeuda_materias']); + unset($datos['sec_egreso']); + } + if (!empty($datos['celular_numero'])) { + $datos_cel = explode('-', $datos['celular_numero']); + $datos['celular_caracteristica'] = trim($datos_cel[1]); + $datos['celular_valor'] = trim($datos_cel[3]); + } + + $forms = $vista_censo->get_forms(); + $campos_pagelets = util::form()->get_campos_secciones_aplanado(); + $datos_faltantes = array(); + + foreach ($forms as $form) { + if (isset($campos_pagelets[$form])) { + $campos_pagelet = $campos_pagelets[$form]; + $hay_faltantes = false; + foreach ($campos_pagelet as $campo) { + if (array_key_exists($campo, $datos) && (is_null($datos[$campo])) && (util::form()->visible($campo)) && (util::form()->obligatorio($campo))) { + if (!$hay_faltantes) { + $datos_faltantes[$form] = array(); + } + $datos_faltantes[$form][] = $campo; + $hay_faltantes = true; + } + if (($form == 'datos_principales') && (($campo == 'celular_caracteristica') || ($campo == 'celular_valor')) && (empty($datos[$campo])) && + (util::form()->visible('celular_numero')) && (util::form()->obligatorio('celular_numero'))) { + /** + * Caso especial: celular_numero + */ + + if (!$hay_faltantes) { + $datos_faltantes[$form] = array(); + } + $datos_faltantes[$form][] = $campo; + $hay_faltantes = true; + } + /*Discapacidad*/ + + if ($form == 'discapacidad'){ + //si tiene discapacidad pero no marca una de la lista + if ( $datos['condicion_discapacidad']=='S'&&( + $datos['disc_auditiva']=='N' && + $datos['disc_visual']=='N' && + $datos['disc_motora']=='N' && + $datos['disc_cond_psicosocial']=='N' && + $datos['disc_otra']=='N')) { + $hay_faltantes = true; + $datos_faltantes[$form] = [ 'disc_auditiva', 'disc_visual','disc_motora','disc_cond_psicosocial','disc_otra']; + + } + if ( $datos['aud_req_otros_apoyos']=='S' && empty($datos['aud_otros_apoyos'])) { + $hay_faltantes = true; + $datos_faltantes[$form][] = 'aud_otros_apoyos'; + } + if ($datos['vis_req_otros_apoyos']=='S' && empty($datos['vis_otros_apoyos'])) { + $hay_faltantes = true; + $datos_faltantes[$form][] = 'vis_otros_apoyos'; + } + if ( $datos['mot_req_otros_apoyos']=='S' && empty($datos['mot_otros_apoyos'])) { + $hay_faltantes = true; + $datos_faltantes[$form][] = 'mot_otros_apoyos'; + } + if ( $datos['psi_req_otros_apoyos']=='S' && empty($datos['psi_otros_apoyos'])) { + $hay_faltantes = true; + $datos_faltantes[$form][] = 'psi_otros_apoyos'; + } + if ( $datos['otra_req_apoyo_vida_diaria']=='S' && empty($datos['otra_apoyo_vida_diaria'])) { + $hay_faltantes = true; + $datos_faltantes[$form][] = 'otra_apoyo_vida_diaria'; + } + + } + } + } + } + + // Se controla que haya cargado documentacion + if (kernel::proyecto()->usa_rdi()) { + if($this->falta_requisitos_visibles_obligatorio()){ + $datos_faltantes['documentacion'] = array(); + $hay_faltantes = true; + } + } + + // Se controla que haya cargado un turno de presentación si corresponde + if (kernel::proyecto()->carga_turno_presentacion()) { + if ($this->falta_turno_presentacion()) { + $datos_faltantes['turno_presentacion'] = array(); + $hay_faltantes = true; + } + } + + return $datos_faltantes; + } + function es_la_primera_impresion() + { + $id_preinscripcion = kernel::db()->quote($this->id_preinscripcion); + + $sql = "SELECT version_modificacion, + version_impresa, + estado + FROM sga_preinscripcion + WHERE id_preinscripcion = $id_preinscripcion + AND version_impresa='0'"; + + $datos = kernel::db()->consultar_fila($sql); + + return (isset($datos['estado']) && ($datos['estado'] == 'C')); + } + + function hay_cambios_desde_impresion() + { + $id_preinscripcion = kernel::db()->quote($this->id_preinscripcion); + + $sql = "SELECT version_modificacion, + version_impresa, + estado + FROM sga_preinscripcion + WHERE id_preinscripcion = $id_preinscripcion"; + + $datos = kernel::db()->consultar_fila($sql); + + return ($datos['estado'] == 'C') && ($datos['version_impresa'] != $datos['version_modificacion']); + } + + //-------------------------------------------------------------------------- + + /** + * Obtiene el valor a mostrar en el comprobante de un campo dado + * + * @param $campo + * @return string + */ + function get_campo_comprobante($campo) + { + $datos = $this->get_datos_formulario_impresion(); + + if (!is_null($datos[$campo])) { + $salida = $datos[$campo]; + + $campos_si_no = ['tipo_residencia', 'alu_cos_est_ap_fam', 'alu_cos_est_plsoc', + 'alu_cos_est_trab', 'alu_cos_est_beca', 'alu_cos_est_otra', 'tiene_beca_univ', + 'tiene_beca_inter', 'tiene_beca_nacio', 'alu_beca_prov', 'alu_beca_muni', 'alu_beca_otra', + 'alu_beca_tipo_eco', 'alu_beca_tipo_ser', 'alu_beca_tipo_inv', 'alu_beca_eco_tran', + 'alu_beca_eco_efec', 'alu_beca_eco_foto', 'alu_beca_eco_habi', 'alu_beca_eco_come', + 'alu_trab_desjub', 'alu_trab_fami', 'remuneracion', 'alu_est_civil_uh', 'alu_tec_pc_casa', + 'alu_tec_pc_trab', 'alu_tec_pc_univ', 'alu_tec_pc_otro', 'alu_tec_int_casa', 'alu_tec_int_trab', + 'alu_tec_int_univ', 'alu_tec_int_movil', 'alu_tec_int_otro', 'practica_deportes', + 'hace_dep_gim_priv', 'hace_dep_univ', 'hace_dep_partic', 'hace_dep_otros', 'prac_dep_futbol', + 'prac_dep_basquet', 'prac_dep_voley', 'prac_dep_gimnasia', 'prac_dep_tenis', 'prac_dep_natacion', + 'prac_dep_handball', 'prac_dep_otros', 'insc_otra_inst', 'mot_inst_econom', 'mot_inst_prestigio', + 'mot_inst_difusion', 'mot_inst_rec_estud', 'mot_inst_rec_amigos', 'mot_inst_sist_ing', + 'mot_inst_ubicacion', 'mot_inst_otros', 'mot_prop_vocacion', 'mot_prop_sug_fam', 'mot_prop_rec_social', + 'mot_prop_ins_lab', 'mot_prop_perf_prof', 'mot_prop_mejora_ec', 'mot_prop_util_soc', 'mot_prop_otros', + 'adeuda_materias', 'insc_otra_inst', 'es_celiaco','es_mayor_25_sin_secundario', + 'tiene_cud', 'disc_auditiva', 'disc_visual', 'disc_motora', 'disc_cond_psicosocial', 'disc_otra', + 'aud_lenguaje_senias', 'aud_lenguaje_labial', 'aud_req_interprete_lengua_senias', 'aud_req_aro_magnetico', 'aud_req_otros_apoyos', + 'vis_req_archivo_audio', 'vis_req_texto_digital', 'vis_req_texto_braile', 'vis_req_otros_apoyos', + 'mot_req_apoyo_aula', 'mot_req_otros_apoyos', + 'psi_req_otros_apoyos', + 'otra_req_apoyo_vida_diaria']; + + if (in_array($campo, $campos_si_no)) { + //---- Campos de selección Sí / No ----------------------------- + if ($salida == preinscripcion::si) { + $salida = kernel::traductor()->trans('si'); + } elseif ($salida == preinscripcion::no) { + $salida = kernel::traductor()->trans('no'); + } + } else { + //---- Control de datos obtenidos de selección múltiple -------- + switch ($campo) : + //---- Carreras -------------------------------------------- + case 'turno_preferido' : + $opciones = util::opciones()->get_turnos(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + //---- Datos principales ----------------------------------- + case 'sexo' : + $opciones = util::opciones()->get_generos(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'identidad_genero' : + $opciones = util::opciones()->get_identidad_genero(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'ent_emisora_ci' : + $opciones = util::opciones()->get_entidades_emisoras_ci(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'pais_emisor_pasap' : + $opciones = util::opciones()->get_paises(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'tipo_visa' : + $opciones = util::opciones()->get_tipos_visa(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'residencia' : + $opciones = util::opciones()->get_residencia(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'pertenece_pueblo_originario' : + $opciones = util::opciones()->get_si_no_no_desea_contestar(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'pueblo_originario' : + $opciones = util::opciones()->get_pueblos_originarios(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + if (($datos[$campo] == preinscripcion::pueblo_originario_OTRO) && (!empty($datos['pueblo_originario_otro']))) { + $salida = $datos['pueblo_originario_otro']; + } + break; + //---- Datos personales ----------------------------------- + case 'obra_social_alu' : + $opciones = util::opciones()->get_obra_social(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'tipo_res_per_lect' : + $opciones = util::opciones()->get_tipos_vivienda(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'vive_actual_con' : + $opciones = util::opciones()->get_vive_con(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'tipo_allegado' : + $opciones = util::opciones()->get_tipos_allegado(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + //---- Datos laborales ------------------------------------- + case 'existe_trab_alum' : + $opciones = util::opciones()->get_existe_trab_alu(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'alu_trab_hace' : + $opciones = util::opciones()->get_alu_trab_hace(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'alu_trab_ocup' : + $opciones = util::opciones()->get_trab_ocup(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'hora_sem_trab_alum' : + $opciones = util::opciones()->get_hora_sem_trab_alum(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'rel_trab_propuesta' : + $opciones = util::opciones()->get_rel_trab_propuesta(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + //---- Datos familiares ------------------------------------ + case 'estado_civil' : + $opciones = util::opciones()->get_estados_civiles(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'cant_hijos_alum' : + $opciones = util::opciones()->get_cant_hijos_o_fam_a_cargo(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'cant_fami_cargo' : + $opciones = util::opciones()->get_cant_hijos_o_fam_a_cargo(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'padre_vive' : + $opciones = util::opciones()->get_si_no_desconoce(true); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'ult_est_cur_padre' : + $opciones = util::opciones()->get_niveles_estudio(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'sit_laboral_padre' : + $opciones = util::opciones()->get_sit_laboral_padres(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'padre_trab_hace' : + $opciones = util::opciones()->get_padres_trab_hace(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'padre_trab_ocup' : + $opciones = util::opciones()->get_trab_ocup(true); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'padre_trab_otro' : + $opciones = util::opciones()->get_otra_ocupacion(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'madre_vive' : + $opciones = util::opciones()->get_si_no_desconoce(true); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'ult_est_cur_madre' : + $opciones = util::opciones()->get_niveles_estudio(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'sit_laboral_madre' : + $opciones = util::opciones()->get_sit_laboral_padres(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'madre_trab_hace' : + $opciones = util::opciones()->get_padres_trab_hace(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'madre_trab_ocup' : + $opciones = util::opciones()->get_trab_ocup(true); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'madre_trab_otro' : + $opciones = util::opciones()->get_otra_ocupacion(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + //---- Datos estudios -------------------------------------- + case 'orientacion_recibida' : + $opciones = util::opciones()->get_orientacion_vocacional(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'alu_otestsup_tipo' : + $opciones = util::opciones()->get_tipos_estudios_superiores(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'alu_otestsup_esta' : + $opciones = util::opciones()->get_estados_estudios_sup(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'alu_otestsup_area' : + $opciones = util::opciones()->get_areas_estudios_sup(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'alu_otestsup_niv' : + $opciones = util::opciones()->get_niveles_otestsup(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'alu_otestsup_razon_abandono' : + $opciones = util::opciones()->get_razones_abandono_estudio(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + if (($datos[$campo] == preinscripcion::razon_abandono_OTRO) && (!empty($datos['alu_otestsup_razon_abandono_otros']))) { + $salida = $datos['alu_otestsup_razon_abandono_otros']; + } + break; + //---- Idiomas --------------------------------------------- + case 'alu_idioma_ingl' : + $opciones = util::opciones()->get_niveles_idiomas(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'alu_idioma_alem' : + $opciones = util::opciones()->get_niveles_idiomas(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'alu_idioma_fran' : + $opciones = util::opciones()->get_niveles_idiomas(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'alu_idioma_ital' : + $opciones = util::opciones()->get_niveles_idiomas(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'alu_idioma_port' : + $opciones = util::opciones()->get_niveles_idiomas(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'alu_idioma_chino' : + $opciones = util::opciones()->get_niveles_idiomas(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'alu_idioma_otro_nivel' : + $opciones = util::opciones()->get_niveles_idiomas(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + //---- Discapacidad --------------------------------------------- + case 'condicion_discapacidad' : + $opciones = util::opciones()->get_condicion_discapacidad(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'aud_tipo' : + $opciones = util::opciones()->get_dificultades_discapacidad(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + case 'vis_dificultad_para_ver' : + $opciones = util::opciones()->get_dificultades_discapacidad(); + $salida = (!empty($opciones[$salida])) ? $opciones[$salida] : '--'; + break; + endswitch; + } + return $salida; + } + return '--'; + } + + //-------------------------------------------------------------------------- + //---- Requisitos + //-------------------------------------------------------------------------- + + /** + * Obtiene el conjunto de requisitos de ingreso que debe presentar el aspirante + * en función de las propuestas en las que esté inscripto. + * + * @return array + */ + function get_requisitos_a_presentar() + { + $propuestas = array(); + $inscripciones = $this->get_datos_inscripciones(); + foreach ($inscripciones as $inscripcion) { + $propuestas[] = $inscripcion['propuesta']; + } + if (!empty($propuestas)) { + $requisitos = g3::requisitos()->requisitos_a_solicitar($propuestas); + $nuevo = array(); + foreach ($requisitos as $dato) { + //---- ID encriptado ------------------------------------------- + $id = util::catalogo()->generar_id($dato['requisito']); + $nuevo[$id] = $dato; + $nuevo[$id][catalogo::id] = $id; + } + $requisitos = $nuevo; + } else { + $requisitos = array(); + } + return $requisitos; + } +/** + * Obtiene el conjunto de requisitos obligatorios de ingreso que debe presentar el aspirante + * en función de las propuestas en las que esté inscripto. + * + * @return array + */ + function get_requisitos_obligatorios_a_presentar() + { + $propuestas = array(); + $inscripciones = $this->get_datos_inscripciones(); + foreach ($inscripciones as $inscripcion) { + $propuestas[] = $inscripcion['propuesta']; + } + if (!empty($propuestas)) { + $requisitos = g3::requisitos()->requisitos_a_solicitar($propuestas); + $nuevo = array(); + foreach ($requisitos as $key => $dato) { + if ($dato['doc_digital_obligatorio_preinscripcion']=='S'){ + //---- ID encriptado ------------------------------------------- + $id = util::catalogo()->generar_id($dato['requisito']); + $nuevo[$id] = $dato; + $nuevo[$id][catalogo::id] = $id; + } + } + $requisitos = $nuevo; + } else { + $requisitos = array(); + } + return $requisitos; + } + + /** + * Obtiene los requisitos digitales que ya fueron cargados por el aspirante + * + * @return array + */ + function get_requisitos_aspirante() + { + if (!isset($this->requisitos)) { + $datos = util::consultas()->get_requisitos_digitales($this->id_preinscripcion); + $nuevo = array(); + foreach ($datos as $dato) { + //---- ID encriptado ------------------------------------------- + $id = util::catalogo()->generar_id($dato['requisito']); + $nuevo[$id] = $dato; + $nuevo[$id][catalogo::id] = $id; + } + $this->requisitos = $nuevo; + } + return $this->requisitos; + } + + function set_requisito($datos) + { + $datos['id_preinscripcion'] = $this->id_preinscripcion; + abm::alta('sga_requisitos_digitales', $datos); + unset($this->requisitos); + } + + function eliminar_requisito($datos) + { + $datos['id_preinscripcion'] = $this->id_preinscripcion; + abm::baja('sga_requisitos_digitales', $datos); + unset($this->requisitos); + } + +} \ No newline at end of file diff --git a/src/siu/modelo/opciones.php b/src/siu/modelo/opciones.php new file mode 100644 index 0000000..0201faf --- /dev/null +++ b/src/siu/modelo/opciones.php @@ -0,0 +1,536 @@ +instanciar("modelo\\opciones"); + } + return self::$instancia; + } + + function armar_combo_opciones($datos, $campo_clave, $campo_valor, $con_no_seleccion = true, $omitir_no_seleccion_opcion_unica = true) + { + $combo = array(); + if (!empty($datos)) { + if (($con_no_seleccion) && ((count($datos) > 1) || ((count($datos) <= 1) && !$omitir_no_seleccion_opcion_unica) )) { + $combo[self::NO_SELECCION] = kernel::traductor()->trans('descr_no_seleccion'); + } + foreach ($datos as $dato) { + $combo[$dato[$campo_clave]] = $dato[$campo_valor]; + } + } + return $combo; + } + + function tipos_propuestas() + { + $datos = util::consultas()->get_propuestas_tipos(); + return static::armar_combo_opciones($datos, 'propuesta_tipo', 'descripcion', true, false); + } + + //-------------------------------------------------------------------------- + //---- Opciones obtenidas desde G3 ----------------------------------------- + //-------------------------------------------------------------------------- + + function get_responsables_academicas() + { + return g3::entidad('responsables_academicas')->get_opciones(); + } + + function get_propuestas_disponibles($ra, $excluir = array()) + { + return g3::propuestas()->get_propuestas_disponibles_preinscripcion($ra, $excluir); + } + + function get_ubicaciones_propuesta($propuesta) + { + return g3::propuestas()->get_ubicaciones_propuesta($propuesta); + } + + function get_modalidades_propuesta($propuesta) + { + return g3::propuestas()->get_modalidades_propuesta($propuesta); + } + + //-------------------------------------------------------------------------- + + function get_tipos_vivienda() + { + return g3::entidad('tipos_vivienda')->get_opciones(); + } + + function get_tipos_allegado() + { + return g3::entidad('tipos_allegados')->get_opciones(); + } + + function get_condicion_discapacidad() + { + return [ + comunes::no => kernel::traductor()->trans('sin_discapacidad_descr'), + comunes::si => kernel::traductor()->trans('con_discapacidad_descr') + ]; + } + + function get_dificultades_discapacidad() + { + return g3::entidad('discapacidades_dificultad')->get_opciones(); + } + function get_identidad_genero() + { + return g3::entidad('identidad_genero')->get_opciones(null, true); + } + function get_razones_abandono_estudio() + { + return g3::entidad('abandono_estudio')->get_opciones(); + } + + function get_pueblos_originarios() + { + return g3::entidad('pueblos_originarios')->get_opciones(); + } + + function get_orientacion_vocacional() + { + return g3::entidad('orientacion_vocacional')->get_opciones(); + } + + function get_obra_social() + { + return g3::entidad('cobertura_salud')->get_opciones(); + } + + //-------------------------------------------------------------------------- + + function get_paises($con_no_seleccion = true, $condicion = null) + { + return g3::entidad('paises')->get_opciones($condicion, $con_no_seleccion); + } + + function get_paises_nacionalidad( $con_no_seleccion = true) + { + $nacionalidad = kernel::persona()->datos()->get_nacionalidad(); + + //2=Extranjeros + if ($nacionalidad == comunes::NACIONALIDAD_EXTRANJERO){ + return $this->get_paises($con_no_seleccion); + }else{ + $condicion="pais = '54'"; + return $this->get_paises($con_no_seleccion, $condicion); + } + } + + function get_provincias($pais) + { + $condicion = 'mug_provincias.pais = ' . kernel::db()->quote($pais); + return g3::entidad('provincias')->get_opciones($condicion); + } + + function get_departamentos($provincia) + { + $condicion = 'mug_dptos_partidos.provincia = ' . kernel::db()->quote($provincia); + return g3::entidad('dptos_partidos')->get_opciones($condicion); + } + + function get_localidades($departamento) + { + $condicion = 'mug_localidades.dpto_partido = ' . kernel::db()->quote($departamento); + return g3::entidad('localidades')->get_opciones($condicion); + } + + function get_cod_postales($localidad) + { + $condicion = 'mug_cod_postales.localidad = ' . kernel::db()->quote($localidad); + return g3::entidad('cod_postales')->get_opciones($condicion); + } + + //-------------------------------------------------------------------------- + + function get_nacionalidades() + { + return g3::entidad('nacionalidades')->get_opciones(); + } + + function get_tipos_documentos() + { + return g3::entidad('tipos_documentos')->get_opciones(); + } + + function get_tipos_documentos_pais() + { + + //$tipo = kernel::persona()->datos()->get_tipo_doc(); + $pais_documento = kernel::persona()->datos()->get_pais_documento(); + + $condicion="mdp_tipo_documento_pais.pais = '".$pais_documento."'";// and mdp_tipo_documento_pais.tipo_documento = '".$tipo."'"; + $datos = g3::entidad('tipos_documentos_pais')->get_opciones_pais($condicion); + return $datos; + } + + + function get_entidades_emisoras_ci() + { + return g3::entidad('entes_emisores_ci')->get_opciones(); + } + + //-------------------------------------------------------------------------- + //---- Opciones propias (construidas en Preinscripción) -------------------- + //-------------------------------------------------------------------------- + + function get_si_no_desconoce($con_no_seleccion = false) + { + $salida = array(); + if ($con_no_seleccion) { + $salida[self::NO_SELECCION] = kernel::traductor()->trans('descr_no_seleccion'); + } + $salida = array_merge($salida, array( + 'S' => kernel::traductor()->trans('si'), + 'N' => kernel::traductor()->trans('no'), + 'D' => kernel::traductor()->trans('desconoce'))); + return $salida; + } + + function get_si_no_no_desea_contestar($con_no_seleccion = true) + { + $salida = array(); + if ($con_no_seleccion) { + $salida[self::NO_SELECCION] = kernel::traductor()->trans('descr_no_seleccion'); + } + $salida = array_merge($salida, array( + 'S' => kernel::traductor()->trans('si'), + 'N' => kernel::traductor()->trans('no'), + 'X' => kernel::traductor()->trans('no_desea_contestar'))); + return $salida; + } + function get_preguntas_secretas() + { + $salida = array( + 'pregunta_mascota' => kernel::traductor()->trans('pregunta_mascota'), + 'pregunta_escuela' => kernel::traductor()->trans('pregunta_escuela'), + 'pregunta_vacaciones' => kernel::traductor()->trans('pregunta_vacaciones')); + return $salida; + } + function get_anios($cantidad = '70') + { + if ($cantidad < 0) { + return array(); + } + $anio = date('Y'); + $salida = array(); + $salida[self::NO_SELECCION] = kernel::traductor()->trans('descr_no_seleccion'); + for ($i = 0; $i < $cantidad; $i++) { + $salida[$anio] = $anio; + $anio--; + } + return $salida; + } + + function get_generos() + { + return array( + 'null' => kernel::traductor()->trans('descr_no_seleccion'), + '1' => kernel::traductor()->trans('genero_masculino'), + '2' => kernel::traductor()->trans('genero_femenino'), + '3' => kernel::traductor()->trans('genero_no_binario'), + ); + } + + function get_turnos() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + 'M' => kernel::traductor()->trans('turno_mañana'), + 'T' => kernel::traductor()->trans('turno_tarde'), + 'N' => kernel::traductor()->trans('turno_noche'), + ); + } + + function get_tipos_visa() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + 'TEMPORAL' => kernel::traductor()->trans('temporal'), + 'PERMANENTE' => kernel::traductor()->trans('permanente'), + ); + } + + function get_tipos_residencia() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + 'C' => kernel::traductor()->trans('si'), + 'R' => kernel::traductor()->trans('no'), + ); + } + + function get_residencia() + { + $opciones = array(); + $tipo_doc = kernel::persona()->datos()->get_tipo_doc(); + // Las opciones de residencia dependen del tipo de documento principal + $nacionalidad = kernel::persona()->datos()->get_nacionalidad(); + + if($nacionalidad === comunes::NACIONALIDAD_EXTRANJERO){ + $opciones[self::NO_SELECCION] = kernel::traductor()->trans('descr_no_seleccion'); + $opciones['4'] = kernel::traductor()->trans('residencia_4'); // Definitiva + $opciones['1'] = kernel::traductor()->trans('residencia_1'); // Sin Residencia + $opciones['2'] = kernel::traductor()->trans('residencia_2'); // Precaria + $opciones['3'] = kernel::traductor()->trans('residencia_3'); // Temporal + + } + return $opciones; + } + + function get_existe_trab_alu() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '1' => kernel::traductor()->trans('existe_trab_alum_1'), + '2' => kernel::traductor()->trans('existe_trab_alum_2'), + '3' => kernel::traductor()->trans('existe_trab_alum_3'), + ); + } + + function get_alu_trab_hace() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '1' => kernel::traductor()->trans('alu_trab_hace_1'), + '2' => kernel::traductor()->trans('alu_trab_hace_2'), + '3' => kernel::traductor()->trans('alu_trab_hace_3'), + '4' => kernel::traductor()->trans('alu_trab_hace_4'), + ); + } + + function get_padres_trab_hace() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '1' => kernel::traductor()->trans('padre_trab_hace_1'), + '2' => kernel::traductor()->trans('padre_trab_hace_2'), + '3' => kernel::traductor()->trans('padre_trab_hace_3'), + '4' => kernel::traductor()->trans('padre_trab_hace_4'), + ); + } + + function get_trab_ocup($agregar_desconoce = false) + { + $salida = array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '1' => kernel::traductor()->trans('alu_trab_ocup_1'), + '2' => kernel::traductor()->trans('alu_trab_ocup_2'), + ); + if ($agregar_desconoce) { + $salida['3'] = kernel::traductor()->trans('desconoce'); + } + return $salida; + } + + function get_hora_sem_trab_alum() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '1' => kernel::traductor()->trans('hora_sem_trab_alum_1'), + '2' => kernel::traductor()->trans('hora_sem_trab_alum_2'), + '3' => kernel::traductor()->trans('hora_sem_trab_alum_3'), + '4' => kernel::traductor()->trans('hora_sem_trab_alum_4'), + ); + } + + function get_rel_trab_propuesta() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '1' => kernel::traductor()->trans('rel_trab_propuesta_1'), + '2' => kernel::traductor()->trans('rel_trab_propuesta_2'), + '3' => kernel::traductor()->trans('rel_trab_propuesta_3'), + ); + } + + function get_niveles_estudio() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '1' => kernel::traductor()->trans('nivel_estudio_1'), + '2' => kernel::traductor()->trans('nivel_estudio_2'), + '3' => kernel::traductor()->trans('nivel_estudio_3'), + '4' => kernel::traductor()->trans('nivel_estudio_4'), + '5' => kernel::traductor()->trans('nivel_estudio_5'), + '8' => kernel::traductor()->trans('nivel_estudio_8'), + '9' => kernel::traductor()->trans('nivel_estudio_9'), + '10' => kernel::traductor()->trans('nivel_estudio_10'), + '11' => kernel::traductor()->trans('nivel_estudio_11'), + '12' => kernel::traductor()->trans('nivel_estudio_12'), + '13' => kernel::traductor()->trans('nivel_estudio_13'), + ); + } + + function get_titulos_sec_por_nombre($titulo_nombre) + { + return g3::titulos_secundario()->get_titulos($titulo_nombre); + } + + function get_sit_laboral_padres() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '1' => kernel::traductor()->trans('sit_laboral_1'), + '2' => kernel::traductor()->trans('sit_laboral_2'), + '3' => kernel::traductor()->trans('sit_laboral_3'), + '4' => kernel::traductor()->trans('sit_laboral_4'), + ); + } + + function get_otra_ocupacion() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '1' => kernel::traductor()->trans('otra_ocup_1'), + '2' => kernel::traductor()->trans('otra_ocup_2'), + '3' => kernel::traductor()->trans('otra_ocup_3'), + '4' => kernel::traductor()->trans('otra_ocup_4'), + '5' => kernel::traductor()->trans('otra_ocup_5'), + '6' => kernel::traductor()->trans('otra_ocup_6'), + ); + } + + function get_tipos_estudios_superiores() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '1' => kernel::traductor()->trans('alu_otestsup_tipo_1'), + '2' => kernel::traductor()->trans('alu_otestsup_tipo_2'), + ); + } + + function get_estados_estudios_sup() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '1' => kernel::traductor()->trans('alu_otestsup_esta_1'), + '2' => kernel::traductor()->trans('alu_otestsup_esta_2'), + '3' => kernel::traductor()->trans('alu_otestsup_esta_3'), + ); + } + + function get_areas_estudios_sup() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '1' => kernel::traductor()->trans('alu_otestsup_area_1'), + '2' => kernel::traductor()->trans('alu_otestsup_area_2'), + '3' => kernel::traductor()->trans('alu_otestsup_area_3'), + '4' => kernel::traductor()->trans('alu_otestsup_area_4'), + '5' => kernel::traductor()->trans('alu_otestsup_area_5'), + '6' => kernel::traductor()->trans('alu_otestsup_area_6'), + '7' => kernel::traductor()->trans('alu_otestsup_area_7'), + '8' => kernel::traductor()->trans('alu_otestsup_area_8'), + ); + } + + function get_niveles_otestsup() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '1' => kernel::traductor()->trans('alu_otestsup_niv_1'), + '2' => kernel::traductor()->trans('alu_otestsup_niv_2'), + ); + } + + function get_niveles_idiomas() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '1' => kernel::traductor()->trans('idiomas_nivel_1'), + '2' => kernel::traductor()->trans('idiomas_nivel_2'), + '3' => kernel::traductor()->trans('idiomas_nivel_3'), + '4' => kernel::traductor()->trans('idiomas_nivel_4'), + ); + } + + function get_vive_con() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '1' => kernel::traductor()->trans('vive_con_1'), + '2' => kernel::traductor()->trans('vive_con_2'), + '3' => kernel::traductor()->trans('vive_con_3'), + '4' => kernel::traductor()->trans('vive_con_4'), + '5' => kernel::traductor()->trans('vive_con_5'), + ); + } + + function get_estados_civiles() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '1' => kernel::traductor()->trans('estado_civil_1'), + '2' => kernel::traductor()->trans('estado_civil_2'), + '3' => kernel::traductor()->trans('estado_civil_3'), + '4' => kernel::traductor()->trans('estado_civil_4'), + '6' => kernel::traductor()->trans('estado_civil_6'), + ); + } + + function get_cant_hijos_o_fam_a_cargo() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '0' => kernel::traductor()->trans('no_tiene'), + '1' => kernel::traductor()->trans('uno'), + '2' => kernel::traductor()->trans('dos'), + '3' => kernel::traductor()->trans('mas_de_dos') + ); + } + + function get_categorias_coneau() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + 'A' => kernel::traductor()->trans('categ_coneau_a'), + 'B' => kernel::traductor()->trans('categ_coneau_b'), + 'C' => kernel::traductor()->trans('categ_coneau_c'), + 'T' => kernel::traductor()->trans('categ_coneau_t'), + 'N' => kernel::traductor()->trans('categ_coneau_n'), + ); + } + + function get_niveles_estudio_fa() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + '4' => kernel::traductor()->trans('antec_fa_nivel_estudio_4'), + '5' => kernel::traductor()->trans('antec_fa_nivel_estudio_5'), + '6' => kernel::traductor()->trans('antec_fa_nivel_estudio_6'), + ); + } + + function get_estados_antecedente_fa() + { + return array( + self::NO_SELECCION => kernel::traductor()->trans('descr_no_seleccion'), + 'F' => kernel::traductor()->trans('antec_fa_estado_F'), + 'A' => kernel::traductor()->trans('antec_fa_estado_A'), + 'C' => kernel::traductor()->trans('antec_fa_estado_C'), + ); + } + +} \ No newline at end of file diff --git a/src/siu/modelo/periodo_de_inscripcion.php b/src/siu/modelo/periodo_de_inscripcion.php new file mode 100644 index 0000000..5565d23 --- /dev/null +++ b/src/siu/modelo/periodo_de_inscripcion.php @@ -0,0 +1,24 @@ + \ No newline at end of file diff --git a/src/siu/modelo/turnos.php b/src/siu/modelo/turnos.php new file mode 100644 index 0000000..c4f902e --- /dev/null +++ b/src/siu/modelo/turnos.php @@ -0,0 +1,349 @@ +instanciar("modelo\\turnos"); + } + return self::$instancia; + } + + function existe_configuracion() + { + $sql = "SELECT COUNT(1) AS cant + FROM trn_configuracion"; + $res = kernel::db()->consultar_fila($sql); + return $res['cant'] > 0; + } + + function get_cant_periodos_turnos_configurados() + { + $sql = "SELECT COUNT(1) AS cant + FROM trn_configuracion"; + $res = kernel::db()->consultar_fila($sql); + return $res['cant']; + } + + function get_datos_turnos() + { + if (!isset($this->datos_turnos)) { + $sql = "SELECT + trn_configuracion.configuracion, + trn_configuracion.fecha_inicio, + trn_configuracion.fecha_fin + FROM + trn_configuracion + ORDER BY + fecha_inicio DESC + "; + + $datos = kernel::db()->consultar($sql); + $nuevo = array(); + + foreach ($datos as $key => $dato) { + $dato['fecha_inicio'] = convertir_fecha_formato_frontend($dato['fecha_inicio']); + $dato['fecha_fin'] = convertir_fecha_formato_frontend($dato['fecha_fin']); + $dato['ras'] = $this->get_nombres_ras_configuracion($dato['configuracion']); + + //---- ID encriptado ------------------------------------------- + $id = util::catalogo()->generar_id($dato['configuracion']); + $nuevo[$id] = $dato; + $nuevo[$id][catalogo::id] = $id; + } + $this->datos_turnos = $nuevo; + } + return $this->datos_turnos; + } + + protected function get_nombres_ras_configuracion($configuracion) + { + $configuracion = kernel::db()->quote($configuracion); + + $sql = "SELECT responsable_academica + FROM trn_configuracion_ra + WHERE configuracion = $configuracion"; + $ras = kernel::db()->consultar($sql); + + $salida = ''; + foreach ($ras as $ra) { + if (!empty($salida)) { + $salida .= ' / '; + } + $salida .= g3::entidad('responsables_academicas')->get_nombre_abreviado($ra['responsable_academica']); + } + + return $salida; + } + + function get_datos_configuracion($seleccion) + { + $sql = "SELECT + configuracion, + fecha_inicio, + fecha_fin, + minutos_intervalo, + cant_operadores, + atiende_feriados, + atiende_lunes, + atiende_martes, + atiende_miercoles, + atiende_jueves, + atiende_viernes, + atiende_sabado, + atiende_domingo + FROM + trn_configuracion"; + + $datos = kernel::db()->consultar($sql); + + foreach ($datos as $key => $dato) { + if (util::catalogo()->generar_id($dato['configuracion']) == $seleccion) { + $res = $dato; + break; + } + } + + if (!empty($res)) { + //---- Intervalos -------------------------------------------------- + $res['fecha_inicio'] = \convertir_fecha_formato_frontend($res['fecha_inicio']); + $res['fecha_fin'] = \convertir_fecha_formato_frontend($res['fecha_fin']); + + $configuracion = kernel::db()->quote($res['configuracion']); + $sql_int = "SELECT + intervalo, + hora_inicio, + hora_fin + FROM + trn_configuracion_intervalos + WHERE + configuracion = $configuracion + ORDER BY + hora_inicio"; + $intervalos = kernel::db()->consultar($sql_int); + + $res['hora_inicio'] = \convertir_hora_formato_frontend($intervalos[0]['hora_inicio']); + $res['hora_fin'] = \convertir_hora_formato_frontend($intervalos[0]['hora_fin']); + + if (!empty($intervalos[1])) { + $res['hora_inicio_2'] = \convertir_hora_formato_frontend($intervalos[1]['hora_inicio']); + $res['hora_fin_2'] = \convertir_hora_formato_frontend($intervalos[1]['hora_fin']); + } + + //---- Responsables Académicas ------------------------------------- + $sql = "SELECT responsable_academica + FROM trn_configuracion_ra + WHERE configuracion = $configuracion"; + $ras = kernel::db()->consultar($sql); + + if (!empty($ras)) { + foreach ($ras as $ra) { + $clave = 'ra_' . $ra['responsable_academica']; + $res[$clave] = 1; + } + } + } else { + $res = array(); + } + + return $res; + } + + function get_fecha_minima() + { + $sql = "SELECT MIN(fecha) as fecha + FROM trn_turnos + WHERE id_preinscripcion IS NULL + AND fecha >= CURRENT_DATE; + "; + $res = kernel::db()->consultar_fila($sql); + if (!empty($res['fecha'])) { + $salida = convertir_fecha_formato_frontend($res['fecha']); + } else { + $salida = ''; + } + return $salida; + } + + function get_fecha_maxima() + { + $sql = "SELECT MAX(fecha) as fecha + FROM trn_turnos + WHERE id_preinscripcion IS NULL; + "; + $res = kernel::db()->consultar_fila($sql); + if (!empty($res['fecha'])) { + $salida = convertir_fecha_formato_frontend($res['fecha']); + } else { + $salida = ''; + } + return $salida; + } + + function get_fechas_turnos_disponibles() + { + $sql = "SELECT distinct(fecha) AS fecha + FROM trn_turnos + WHERE id_preinscripcion IS NULL + AND ( + fecha > CURRENT_DATE + OR + ( + fecha = CURRENT_DATE + AND hora >= CURRENT_TIME + ) + ) + ORDER BY fecha + "; + $res = kernel::db()->consultar($sql); + $salida = array(); + foreach ($res as $fecha) { + $salida[] = convertir_fecha_formato_frontend($fecha['fecha']); + } + return $salida; + } + + function get_franjas_horarias_disponibles($fecha) + { + $fecha = kernel::db()->quote(convertir_fecha_formato_base($fecha)); + + $sql = "SELECT DISTINCT EXTRACT(HOUR FROM hora) AS hora + FROM trn_turnos + WHERE fecha = $fecha + AND id_preinscripcion IS NULL + AND ( + fecha > CURRENT_DATE + OR + ( + fecha = CURRENT_DATE + AND hora >= CURRENT_TIME + ) + ) + ORDER BY hora + "; + + $datos = kernel::db()->consultar($sql); + foreach ($datos as $key => $dato) { + $hora = $dato['hora']; + $hora_sig = $hora + 1; + + $hora_str = ($hora < 10) ? '0' . $hora : $hora; + $hora_sig_str = ($hora_sig < 10) ? '0' . $hora_sig : $hora_sig; + + $datos[$key]['descr'] = "De $hora_str:00 a $hora_sig_str:00"; + } + return opciones::armar_combo_opciones($datos, 'hora', 'descr', true, false); + } + + function reservar_turno($id_preinscripcion, $datos_turno) + { + $clave = array('turno' => $this->asignar_turno($datos_turno)); + $datos = array('id_preinscripcion' => $id_preinscripcion); + abm::modificacion('trn_turnos', $datos, $clave); + } + + static protected function asignar_turno($datos_turno) + { + $fecha = kernel::db()->quote(convertir_fecha_formato_base($datos_turno['fecha'])); + $franja = kernel::db()->quote($datos_turno['franja']); + + $sql = "SELECT turno + FROM trn_turnos + WHERE id_preinscripcion IS NULL + AND fecha = $fecha + AND EXTRACT(HOUR FROM hora) = $franja + AND ( + fecha > CURRENT_DATE + OR + ( + fecha = CURRENT_DATE + AND hora >= CURRENT_TIME + ) + ) + ORDER BY hora, + operador + LIMIT 1 + "; + + $res = kernel::db()->consultar_fila($sql); + if (empty($res)) { + $mje = kernel::traductor()->trans('sel_turno.error_sin_turnos'); + throw new error_preinscripcion($mje); + } + return $res['turno']; + } + + function devolver_turno($id_preinscripcion) + { + $id_preinscripcion = kernel::db()->quote($id_preinscripcion); + + $sql = "UPDATE trn_turnos + SET id_preinscripcion = NULL + WHERE id_preinscripcion = $id_preinscripcion; + "; + + kernel::db()->ejecutar($sql); + } + + function get_turno_presentacion($id_preinscripcion) + { + $sql = "SELECT + turno, + operador, + fecha, + hora + FROM + trn_turnos + WHERE + id_preinscripcion = $id_preinscripcion + "; + + return kernel::db()->consultar_fila($sql); + } + + //-------------------------------------------------------------------------- + + function get_cantidad_turnos_generados() + { + $sql = "SELECT COUNT(1) AS cant + FROM trn_turnos + "; + + $res = kernel::db()->consultar_fila($sql); + return $res['cant']; + } + + function get_cantidad_turnos_disponibles() + { + $sql = "SELECT COUNT(1) AS cant + FROM trn_turnos + WHERE id_preinscripcion IS NULL + AND ( + fecha > CURRENT_DATE + OR + ( + fecha = CURRENT_DATE + AND hora >= CURRENT_TIME + ) + ) + "; + + $res = kernel::db()->consultar_fila($sql); + return $res['cant']; + } + +} +?> \ No newline at end of file diff --git a/src/siu/modelo/usuario.php b/src/siu/modelo/usuario.php new file mode 100644 index 0000000..f655c38 --- /dev/null +++ b/src/siu/modelo/usuario.php @@ -0,0 +1,660 @@ +instanciar("modelo\\usuario"); + } + return self::$instancia; + } + + function nuevo($valores, $medio_se = null) + { + $datos = array(); + + $clave = trim($valores['password']); + $e_mail = a_minusculas($valores['e_mail']); + $apellido = formatear($valores['apellido']); + $apellido_elegido = formatear($valores['apellido_elegido']); + $nombres = formatear($valores['nombres']); + $nombres_elegido = formatear($valores['nombres_elegido']); + + //$datos['usuario'] = $e_mail; + $datos['clave'] = $this->cifrar_clave($clave); + $datos['e_mail'] = $e_mail; + + $datos['apellido'] = $apellido; + $datos['nombres'] = $nombres; + $datos['apellido_elegido'] = $apellido_elegido; + $datos['nombres_elegido'] = $nombres_elegido; + $datos['nacionalidad'] = $valores['nacionalidad']; + $datos['pais_documento'] = $valores['pais_documento']; + $datos['tipo_documento'] = $valores['tipo_documento']; + $datos['nro_documento'] = $valores['nro_documento']; + $datos['fecha_nacimiento'] = convertir_fecha_formato_base($valores['fecha_nacimiento']); + $datos['pregunta_secreta'] = $valores['pregunta_secreta']; + $datos['respuesta_secreta'] = $valores['respuesta_secreta']; + $datos['duplicada'] = $valores['duplicada']; + $datos['celular_numero'] = $valores['telefono']; + $datos['fecha_registro'] = 'now()'; + $datos['fecha_ult_modif'] = 'now()'; + $datos['version_modificacion'] = '0'; + $datos['version_impresa'] = '0'; + + if(isset($valores['validado_con_renaper']) && ($valores['validado_con_renaper'] == comunes::si)){ + $datos['sexo'] = $valores['sexo']; + $datos['fecha_nacimiento'] = convertir_fecha_formato_base($valores['fecha_nacimiento']); + $datos['calle_proc'] = $valores['calle_proc']; + $datos['numero_proc'] = $valores['numero_proc']; + $datos['piso_proc'] = $valores['piso_proc']; + $datos['dpto_proc'] = $valores['dpto_proc']; + $datos['cp_proc'] = $valores['cp_proc']; + $datos['barrio_proc'] = $valores['barrio_proc']; + $datos['validado_con_renaper'] = $valores['validado_con_renaper']; + } + + if ($medio_se) { + $datos[$medio_se] = $valores[$medio_se]; + } + + $datos['estado'] = preinscripcion::estado_pendiente; + + $datos['codigo_validacion'] = $this->generar_codigo_validacion(); + + abm::alta('sga_preinscripcion', $datos); + if ($datos['duplicada']== comunes::si){ + $this->marcar_duplicadas($datos); + } + return $datos['codigo_validacion']; + } + //marco como ducplicadas las preinscripciones que tengan mismo pais tipo y nro documento + function marcar_duplicadas($datos) + { + $datos_duplicada = kernel::db()->quote($datos['duplicada']); + $pais_documento = kernel::db()->quote($datos['pais_documento']); + $tipo_documento = kernel::db()->quote($datos['tipo_documento']); + $nro_documento = kernel::db()->quote($datos['nro_documento']); + + $sql = "UPDATE + sga_preinscripcion + SET + duplicada = $datos_duplicada + WHERE + pais_documento = $pais_documento" + . " AND tipo_documento = $tipo_documento" + . " AND nro_documento = $nro_documento "; + + kernel::db()->ejecutar($sql); + return $datos; + } + function validar_mail($codigo_validacion) + { + $datos = $this->controlar_codigo_validacion($codigo_validacion); + $codigo_validacion = kernel::db()->quote($codigo_validacion); + $estado_activado = kernel::db()->quote(preinscripcion::estado_activado); + + $sql = "UPDATE + sga_preinscripcion + SET + codigo_validacion = NULL, + email_valido = now(), + estado = $estado_activado + WHERE + codigo_validacion = $codigo_validacion"; + + kernel::db()->ejecutar($sql); + return $datos; + } + + function login($e_mail, $clave) + { + $e_mail = kernel::db()->quote($e_mail); + $clave = kernel::db()->quote($this->cifrar_clave(trim($clave))); + + $sql = "SELECT + id_preinscripcion, + e_mail, + email_valido, + codigo_validacion, + estado + FROM + sga_preinscripcion + WHERE + e_mail = $e_mail + AND clave = $clave"; + + $datos = kernel::db()->consultar_fila($sql); + + if (!$datos) { + throw new error_preinscripcion_login('login_error_clave_invalida'); + } + + // Si el mail no esta validado no se puede loguear + if (is_null($datos['email_valido'])) { + kernel::sesion()->set('__datos_reenvio_mail__', $datos); + throw new error_preinscripcion_mail_no_validado('email_no_validado'); + } + + $this->controlar_estado($datos['id_preinscripcion'], $datos['estado']); + + return $datos['id_preinscripcion']; + } + + function login_facebook($id) + { + $id = kernel::db()->quote($id); + + $sql = "SELECT id_preinscripcion, + e_mail, + clave, + codigo_validacion, + email_valido, + estado + FROM sga_preinscripcion + WHERE facebook is not null + AND facebook = $id"; + + $datos = kernel::db()->consultar_fila($sql); + + // Si el mail no esta validado (independientemente de la vinculación con + // Facebook) no se puede loguear. + if ((!empty($datos)) && (is_null($datos['email_valido']))) { + kernel::sesion()->set('__datos_reenvio_mail__', $datos); + throw new error_preinscripcion_mail_no_validado('email_no_validado'); + } + + $this->controlar_estado($datos['id_preinscripcion'], $datos['estado']); + + if (empty($datos['id_preinscripcion'])) { + $salida = null; + } else { + $salida = $datos['id_preinscripcion']; + } + + return $salida; + } + + function login_google($id) + { + $id = kernel::db()->quote($id); + + $sql = "SELECT id_preinscripcion, + e_mail, + clave, + codigo_validacion, + email_valido, + estado + FROM sga_preinscripcion + WHERE google is not null + AND google = $id"; + + $datos = kernel::db()->consultar_fila($sql); + + // Si el mail no esta validado (independientemente de la vinculación con + // un Servicio Externo) no se puede loguear. + if ((!empty($datos)) && (is_null($datos['email_valido']))) { + kernel::sesion()->set('__datos_reenvio_mail__', $datos); + throw new error_preinscripcion_mail_no_validado('email_no_validado'); + } + + $this->controlar_estado($datos['id_preinscripcion'], $datos['estado']); + + if (empty($datos['id_preinscripcion'])) { + $salida = null; + } else { + $salida = $datos['id_preinscripcion']; + } + + return $salida; + } + + function vincular_usuario_se($e_mail, $id_se, $medio) + { + $e_mail = kernel::db()->quote($e_mail); + $id_se = kernel::db()->quote($id_se); + + $sql = "UPDATE sga_preinscripcion + SET $medio = $id_se + WHERE e_mail = $e_mail;"; + + kernel::db()->ejecutar($sql); + } + + //-------------------------------------------------------------------------- + //---- RECUPERAR CLAVE ----------------------------------------------------- + //-------------------------------------------------------------------------- + + function solicitud_resetear_clave($e_mail) + { + // el mail tiene que ser correcto (existente, validado) + $e_mail = kernel::db()->quote($e_mail); + + $codigo = $this->generar_codigo_validacion(); + + $sql = "UPDATE + sga_preinscripcion + SET + codigo_validacion = '$codigo', + codigo_validacion_alta = CURRENT_TIMESTAMP + WHERE + e_mail = $e_mail"; + + $filas_afectadas = kernel::db()->ejecutar($sql); + + // Si el UPDATE no impactó en ninguna fila es pq no existe el usuario en sga_preinscripcion + if ($filas_afectadas == 0) { + throw new error_preinscripcion_login('EMAIL inexistente'); + } + + return $codigo; + } + function solicitud_resetear_clave_documento($e_mail) + { + // el mail tiene que ser correcto (existente, validado) + $e_mail = kernel::db()->quote($e_mail); + + $codigo = $this->generar_codigo_validacion(); + + $sql = "UPDATE + sga_preinscripcion + SET + codigo_validacion = '$codigo', + codigo_validacion_alta = CURRENT_TIMESTAMP + WHERE + e_mail = $e_mail"; + + $filas_afectadas = kernel::db()->ejecutar($sql); + + // Si el UPDATE no impactó en ninguna fila es pq no existe el usuario en sga_preinscripcion + if ($filas_afectadas == 0) { + throw new error_preinscripcion_login('EMAIL inexistente'); + } + + return $codigo; + } + function cambiar_email($viejo, $nuevo) + { + $viejo = kernel::db()->quote($viejo); + $nuevo = kernel::db()->quote($nuevo); + + $sql = "UPDATE + sga_preinscripcion + SET + e_mail = $nuevo + WHERE + e_mail = $viejo"; + + kernel::db()->ejecutar($sql); + return $nuevo; + } + function validar_resetear_clave($codigo_validacion) + { + return $this->controlar_codigo_validacion($codigo_validacion); + } + + function resetear_clave($clave, $codigo_validacion) + { + // Validación de datos + $datos = $this->controlar_codigo_validacion($codigo_validacion); + $clave = kernel::db()->quote($this->cifrar_clave(trim($clave))); + $codigo_validacion = kernel::db()->quote($codigo_validacion); + + $sql = "UPDATE + sga_preinscripcion + SET + clave = $clave, + codigo_validacion = NULL, + codigo_validacion_alta = NULL, + email_valido = now() + WHERE + codigo_validacion = $codigo_validacion"; + + kernel::db()->ejecutar($sql); + return $datos; + } + + function get_usuario_asociado_token($token) + { + $token = kernel::db()->quote($token); + + $sql = "SELECT + e_mail + FROM + sga_preinscripcion + WHERE + codigo_validacion = $token"; + + $datos = kernel::db()->consultar_fila($sql); + return (isset($datos['e_mail'])) ? ($datos['e_mail']) : null; + } + function get_usuario_codigo($e_mail, $codigo) + { + $e_mail = kernel::db()->quote($e_mail); + $codigo = kernel::db()->quote($codigo); + + $sql = "SELECT + e_mail + FROM + sga_preinscripcion + WHERE + e_mail = $e_mail + AND id_preinscripcion = $codigo"; + + $datos = kernel::db()->consultar_fila($sql); + return (isset($datos['e_mail'])) ? ($datos['e_mail']) : null; + } + + //-------------------------------------------------------------------------- + //---- CAMBIAR MAIL -------------------------------------------------------- + //-------------------------------------------------------------------------- + + function solicitud_cambiar_mail($cod_usuario_frontend, $email_nuevo) + { + $codigo = $this->generar_codigo_validacion(); + return $codigo; + } + + function validar_nuevo_mail($codigo_validacion) + { + $datos_usuario = $this->controlar_codigo_validacion($codigo_validacion, false); + } + + //-------------------------------------------------------------------------- + + protected function cifrar_clave($clave) + { + $salt = kernel::proyecto()->get('salt'); + return sha1($salt . $clave); + } + + protected function generar_codigo_validacion() + { + return sha1(uniqid(rand(0, 100), true)); + } + + protected function controlar_codigo_validacion($codigo_validacion) + { + $codigo_validacion = kernel::db()->quote($codigo_validacion); + $interval = kernel::db()->quote(kernel::proyecto()->get_ttl_codigo_validacion()); + + $sql = "SELECT + id_preinscripcion, + e_mail, + email_valido, + fecha_registro, + codigo_validacion_alta, + codigo_validacion_alta + interval $interval AS codigo_validacion_expiracion, + COALESCE((codigo_validacion_alta + interval $interval) < CURRENT_TIMESTAMP, true) AS codigo_validacion_expirado + FROM + sga_preinscripcion + WHERE + codigo_validacion = $codigo_validacion"; + + $datos = kernel::db()->consultar_fila($sql); + if (empty($datos)) { + throw new error_preinscripcion('TOKEN inexistente'); + } + return $datos; + } + + function clave_permitida($clave, $usuario) + { + $clave = trim($clave); + + // La clave debe ser distinta al nombre de usuario + if ($clave == $usuario) { + $mensaje = kernel::traductor()->trans('error_clave_igual_usuario'); + throw new error_preinscripcion_clave($mensaje); + } + + // La clave debe tener una longitud determinada. + $longitud_minima = kernel::proyecto()->get_clave_long_minima(); + if (strlen($clave) < $longitud_minima) { + $mensaje = kernel::traductor()->trans('error_clave_corta', array('%1%' => $longitud_minima)); + throw new error_preinscripcion_clave($mensaje); + } + } + + function get_datos_usuario($e_mail) + { + $e_mail = kernel::db()->quote($e_mail); + + $sql = "SELECT + sga_preinscripcion.id_preinscripcion, + sga_preinscripcion.e_mail, + sga_preinscripcion.clave, + sga_preinscripcion.codigo_validacion, + sga_preinscripcion.email_valido, + sga_preinscripcion.facebook, + sga_preinscripcion.google, + COALESCE(sga_preinscripcion.apellido_elegido, sga_preinscripcion.apellido) as apellido, + COALESCE(sga_preinscripcion.nombres_elegido, sga_preinscripcion.nombres) as nombres, + sga_preinscripcion.tipo_documento, + sga_preinscripcion.nro_documento, + sga_preinscripcion.pregunta_secreta + FROM + sga_preinscripcion + WHERE + sga_preinscripcion.e_mail = $e_mail + "; + + return kernel::db()->consultar_fila($sql); + } + + function get_usuario_by_documento($pais_documento, $tipo_documento, $nro_documento, $fecha_nacimiento) + { + $nro_documento = kernel::db()->quote($nro_documento); + $fecha_nacimiento = kernel::db()->quote($fecha_nacimiento); + + $sql = "SELECT e_mail + FROM sga_preinscripcion + WHERE pais_documento = {$pais_documento} + AND tipo_documento = {$tipo_documento} + AND nro_documento = {$nro_documento} + AND fecha_nacimiento = {$fecha_nacimiento} + "; + + $fila = kernel::db()->consultar_fila($sql); + return $fila['e_mail'] ?? null; + } + + //-------------------------------------------------------------------------- + //---- Validación de documento existente + //-------------------------------------------------------------------------- + + function documento_existente($pais_documento, $tipo_documento, $nro_documento) + { + $pais_documento = kernel::db()->quote($pais_documento); + $tipo_documento = kernel::db()->quote($tipo_documento); + $nro_documento = kernel::db()->quote($nro_documento); + + $sql = "SELECT + sga_preinscripcion.id_preinscripcion, + sga_preinscripcion.e_mail, + COALESCE(sga_preinscripcion.apellido_elegido, sga_preinscripcion.apellido) as apellido, + COALESCE(sga_preinscripcion.nombres_elegido, sga_preinscripcion.nombres) as nombres, + sga_preinscripcion.fecha_registro, + sga_preinscripcion.codigo_validacion, + sga_preinscripcion.email_valido + FROM + sga_preinscripcion + WHERE + sga_preinscripcion.pais_documento = $pais_documento + AND sga_preinscripcion.nro_documento = $nro_documento + AND sga_preinscripcion.nro_documento = $nro_documento + "; + + return kernel::db()->consultar_fila($sql); + } + //existen el documento, y no tiene preinscripciones procesesadas I + function documento_no_procesado($pais_documento, $tipo_documento, $nro_documento) + { + $pais_documento = kernel::db()->quote($pais_documento); + $tipo_documento = kernel::db()->quote($tipo_documento); + $nro_documento = kernel::db()->quote($nro_documento); + + $sql = "SELECT sga_preinscripcion_propuestas.estado, + sga_preinscripcion.id_preinscripcion, + sga_preinscripcion.e_mail, + COALESCE(sga_preinscripcion.apellido_elegido, sga_preinscripcion.apellido) as apellido, + COALESCE(sga_preinscripcion.nombres_elegido, sga_preinscripcion.nombres) as nombres, + sga_preinscripcion.fecha_registro, + sga_preinscripcion.codigo_validacion, + sga_preinscripcion.email_valido + FROM + sga_preinscripcion + left Join sga_preinscripcion_propuestas on sga_preinscripcion_propuestas.id_preinscripcion= sga_preinscripcion.id_preinscripcion + + WHERE + sga_preinscripcion.pais_documento = $pais_documento + AND sga_preinscripcion.nro_documento = $nro_documento + AND sga_preinscripcion.nro_documento = $nro_documento + and ( sga_preinscripcion_propuestas.estado <> 'I' or sga_preinscripcion_propuestas.estado is null) + "; + + return kernel::db()->consultar_fila($sql); + } + + function documento_email_existente($pais_documento, $tipo_documento, $nro_documento, $e_mail) + { + $pais_documento = kernel::db()->quote($pais_documento); + $tipo_documento = kernel::db()->quote($tipo_documento); + $nro_documento = kernel::db()->quote($nro_documento); + $e_mail = kernel::db()->quote($e_mail); + + $sql = "SELECT + sga_preinscripcion.id_preinscripcion, + sga_preinscripcion.e_mail, + COALESCE(sga_preinscripcion.apellido_elegido, sga_preinscripcion.apellido) as apellido, + COALESCE(sga_preinscripcion.nombres_elegido, sga_preinscripcion.nombres) as nombres, + sga_preinscripcion.fecha_registro, + sga_preinscripcion.codigo_validacion, + sga_preinscripcion.email_valido + FROM + sga_preinscripcion + WHERE + sga_preinscripcion.pais_documento = $pais_documento + AND sga_preinscripcion.tipo_documento = $tipo_documento + AND sga_preinscripcion.nro_documento = $nro_documento + AND sga_preinscripcion.e_mail = $e_mail + "; + + return kernel::db()->consultar_fila($sql); + } +function documento_nacimiento_existente($pais_documento, $tipo_documento, $nro_documento, $fecha_nacimiento) + { + $pais_documento = kernel::db()->quote($pais_documento); + $tipo_documento = kernel::db()->quote($tipo_documento); + $nro_documento = kernel::db()->quote($nro_documento); + $fecha_nacimiento = kernel::db()->quote(convertir_fecha_formato_base($fecha_nacimiento)); + + $sql = "SELECT + sga_preinscripcion.id_preinscripcion, + sga_preinscripcion.e_mail, + COALESCE(sga_preinscripcion.apellido_elegido, sga_preinscripcion.apellido) as apellido, + COALESCE(sga_preinscripcion.nombres_elegido, sga_preinscripcion.nombres) as nombres, + sga_preinscripcion.fecha_registro, + sga_preinscripcion.codigo_validacion, + sga_preinscripcion.email_valido + FROM + sga_preinscripcion + WHERE + sga_preinscripcion.pais_documento = $pais_documento + AND sga_preinscripcion.tipo_documento = $tipo_documento + AND sga_preinscripcion.nro_documento = $nro_documento + AND sga_preinscripcion.fecha_nacimiento = $fecha_nacimiento + "; + + return kernel::db()->consultar_fila($sql); + } +function email_pregunta_secreta_fecha_nacimento_existente($e_mail, $respuesta_secreta, $fecha_nacimento) + { + $e_mail = kernel::db()->quote($e_mail); + $respuesta_secreta = kernel::db()->quote($respuesta_secreta); + $fecha_nacimento = kernel::db()->quote(convertir_fecha_formato_base($fecha_nacimento)); + + $sql = "SELECT + sga_preinscripcion.id_preinscripcion + FROM + sga_preinscripcion + WHERE + sga_preinscripcion.e_mail = $e_mail + AND sga_preinscripcion.respuesta_secreta = $respuesta_secreta + AND sga_preinscripcion.fecha_nacimiento = $fecha_nacimento + "; + + return kernel::db()->consultar_fila($sql); + } + function usuario_existente($e_mail) + { + $e_mail = kernel::db()->quote($e_mail); + + $sql = "SELECT + 1 as existe + FROM + sga_preinscripcion + WHERE + sga_preinscripcion.e_mail = $e_mail + "; + + $res = kernel::db()->consultar_fila($sql); + return $res['existe']; + } + + protected function controlar_estado($id_preinscripcion, $estado) + { + if ($estado == preinscripcion::estado_inscripto) { + $mensaje = kernel::traductor()->trans('login.error.incorporado_g3'); + if ((!empty($id_preinscripcion)) && ($this->hay_propuestas_copiadas_g3($id_preinscripcion))) { + $mensaje .= '

'; + $mensaje .= kernel::traductor()->trans('login.error.preinsc_copiadas'); + } + throw new error_preinscripcion_login($mensaje); + } + } + + protected function hay_propuestas_copiadas_g3($id_preinscripcion) + { + $propuestas_preinsc = util::consultas()->get_propuestas_insc($id_preinscripcion); + foreach ($propuestas_preinsc as $preinsc) { + if ($preinsc['estado'] == preinscripcion::estado_preinsc_copiada_g3) { + return true; + } + } + return false; + } + function validar_expiracion_token($codigo_validacion) { + /* Validar que la recha de registro no sea mayor a fecha de actual mas parametro + cantitidad de horas */ + $datos_usuario = $this->controlar_codigo_validacion($codigo_validacion, false); + $cantidad_horas = kernel::proyecto()->get_parametro('tiempo_confirmacion_alta_preinscripcion'); + $fecha_limite = get_fecha_hora_desplazada($datos_usuario['fecha_registro'], $cantidad_horas, 'hora'); + $hoy = date("Y-m-d H"); + $codigo_validacion = kernel::db()->quote($codigo_validacion); + if ($fecha_limite < $hoy) { + //borro registro de la base de datos + $sql = "DELETE FROM sga_preinscripcion + WHERE codigo_validacion = $codigo_validacion"; + + kernel::db()->ejecutar($sql); + throw new error_preinscripcion_token('TOKEN_expiro'); + } + } + +} \ No newline at end of file diff --git a/src/siu/modelo/util.php b/src/siu/modelo/util.php new file mode 100644 index 0000000..a975f3c --- /dev/null +++ b/src/siu/modelo/util.php @@ -0,0 +1,48 @@ +instanciar_singleton("modelo\\opciones"); + } + + /** + * + * @return consultas + */ + static function consultas() + { + return kernel::localizador()->instanciar("modelo\\consultas"); + } + + /** + * + * @return catalogo + */ + static function catalogo() + { + return kernel::localizador()->instanciar("modelo\\lib\\catalogo"); + } + + /** + * + * @return util_formulario_preinscripcion + */ + static function form() + { + return kernel::localizador()->instanciar("operaciones\\_comun\\util_formulario_preinscripcion"); + } +} +?> \ No newline at end of file diff --git a/src/siu/modelo/ws_renaper.php b/src/siu/modelo/ws_renaper.php new file mode 100644 index 0000000..3908922 --- /dev/null +++ b/src/siu/modelo/ws_renaper.php @@ -0,0 +1,56 @@ +content_type = $content_type; + $this->url = $url; + $this->url_header = $url_header; + $this->apiKey = $apiKey; + $this->cliente_renaper = new Client(['base_uri' => $this->url]); + } + + + + public function post_cliente_rest($number = '', $gender = '', $order = '') + { + $options = []; + $headers = ['Content-Type' => $this->content_type, 'apiKey'=> $this->apiKey, 'url'=> $this->url_header]; + $options['headers'] = $headers; + + try { + + $URI_Response = $this->cliente_renaper->request('POST', $this->url, [ + 'headers'=> $headers, + 'json' => ['number' => $number,'gender' => $gender, 'order' => $order] + ]); + + return $URI_Response->getBody()->getContents(); + } catch (RequestException $e) { + echo Psr7\Message::toString($e->getRequest()); + if ($e->hasResponse()) { + echo Psr7\Message::toString($e->getResponse()); + } + } + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/_comun/form.php b/src/siu/operaciones/_comun/form.php new file mode 100644 index 0000000..d54759e --- /dev/null +++ b/src/siu/operaciones/_comun/form.php @@ -0,0 +1,44 @@ +check_activo($nombre)) { + return ''; + } + if ($this->get_elemento_html_tipo($nombre) == 'hidden') { + return $this->elemento($nombre); + } + $label = $this->label($nombre); + + if (!$this->get_obligatorio($nombre)) { + $label = '' . $label . ''; + } else { + $label = str_replace('class="optional"', 'class="label-obligatorio"', $label); + $label = str_replace('', ' (*)', $label); + } + + $elemento = $this->elemento($nombre); + $tiene_error = $this->tiene_error($nombre); + $clase_error = ($tiene_error) ? 'error' : ''; + + $id_cg = 'cg-' . $nombre; + $id_inline_help = 'msg-' . $nombre; + + $html = "
"; + $html .= $label; + $html .= $elemento; + $html .= $this->ayuda($nombre); + $html .= "
"; + $html .= "
"; + + return $html; + } + +} +?> diff --git a/src/siu/operaciones/_comun/generador_pdf.php b/src/siu/operaciones/_comun/generador_pdf.php new file mode 100644 index 0000000..78b27ed --- /dev/null +++ b/src/siu/operaciones/_comun/generador_pdf.php @@ -0,0 +1,767 @@ +pdf = kernel::localizador()->instanciar('operaciones\\_comun\\preinscripcion_PDF', 'A4'); + + $this->modo_comprobante = kernel::proyecto()->modo_impresion_comprobante(); + if ($this->modo_comprobante == preinscripcion::modo_comp_PROPUESTA) { + $propuestas = $this->obtener_propuestas(); + $this->cant_comprobantes = count($propuestas); + } elseif ($this->modo_comprobante == preinscripcion::modo_comp_RA) { + $propuestas = $this->obtener_propuestas_por_ra(); + $this->cant_comprobantes = count($propuestas); + } else { + $propuestas = $this->obtener_propuestas(); + $this->cant_comprobantes = 1; + } + + $this->inicializar_pagina(); + + for ($i = 0; $i < $this->cant_comprobantes; $i++) { + if ($i > 0) { + // Se genera una nueva página + $this->pdf->ezNewPage(); + } + + $this->encabezado(); + + if ($this->modo_comprobante == preinscripcion::modo_comp_PROPUESTA) { + // Un comprobante por propuesta + $datos = array(); + $datos[] = $propuestas[$i]; + $this->propuestas($datos); + } elseif ($this->modo_comprobante == preinscripcion::modo_comp_RA) { + // Un comprobante por RA + $this->propuestas($propuestas[$i]); + } else { + // Un comprobante por aspirante + $this->propuestas($propuestas); + } + + if (kernel::proyecto()->get_parametro('rep_imprime_CBC')) { + $this->CBC(); + } + + $this->datos_seccion('datos_adicionales'); + $this->datos_seccion('datos_principales'); + $this->datos_seccion('datos_personales'); + $this->datos_seccion('financiamiento'); + $this->datos_seccion('datos_laborales'); + $this->datos_seccion('datos_familiares'); + $this->datos_seccion('datos_estudios'); + $this->datos_seccion('tecnologia'); + $this->datos_seccion('deportes'); + $this->datos_seccion('idiomas'); + $this->datos_seccion('datos_salud'); + $this->datos_seccion('discapacidad'); + + $this->avisos(); + $this->fecha_y_firma(); + if (kernel::proyecto()->get_parametro('rep_imprime_credencial_provisoria')) { + $this->credencial_provisoria(); + } + } + } + + /** + * Genera la salida PDF del comprobante. + */ + function get_comprobante() + { + $this->pdf->ezStream(); + } + + //-------------------------------------------------------------------------- + + protected function obtener_propuestas() + { + $salida = array(); + $datos = kernel::persona()->datos()->get_datos_inscripciones(); + foreach ($datos as $dato) { + $salida[] = $dato; + } + return $salida; + } + + protected function obtener_propuestas_por_ra() + { + // Se agrupan las propuestas por Responsable Académica + $aux = array(); + $datos = kernel::persona()->datos()->get_datos_inscripciones(); + foreach ($datos as $dato) { + $ra = $dato['responsable_academica']; + if (empty($aux[$ra])) { + $aux[$ra] = array(); + } + $aux[$ra][] = $dato; + } + + // Se aplana la estructura para normalizarla con la forma esperada para recorrerla + $salida = array(); + foreach($aux as $grupo) { + $salida[] = $grupo; + } + + return $salida; + } + + protected function inicializar_pagina() + { + $this->pdf->ezSetCmMargins($this->margen_arriba, $this->margen_abajo, $this->margen_izq, $this->margen_der); + $this->inicializar_fuentes(); + $this->header(); + if ($this->cant_comprobantes == 1) { + $this->footer(); + } + } + + protected function header() + { + $header = $this->pdf->openObject(); + + // Logo + $archivo_logo = kernel::proyecto()->get_parametro('rep_encabezado_logo'); + if (!empty($archivo_logo)) { + $path_img = recursos::get_dir_img(); + $desc_archivo = kernel::localizador()->encontrar_img($path_img, $archivo_logo); + $path = $desc_archivo['path']; + + $this->pdf->addPngFromFile($path, $this->puntos_cm(2), $this->puntos_cm(27.2), 99); + $margen = 6; + } else { + $margen = 2; + } + + + // Texto de encabezado + $nombre_institucion = kernel::proyecto()->get_parametro('rep_nombre_institucion'); + $nombre_institucion = $this->bold($nombre_institucion); + $this->pdf->addText($this->puntos_cm($margen), $this->puntos_cm(28.4), 13, $nombre_institucion); + + $texto_aspirante = $this->bold(kernel::traductor()->trans('rep_ficha_aspirante')); + $this->pdf->addText($this->puntos_cm($margen), $this->puntos_cm(27.7), 12, $texto_aspirante); + + $apellido = kernel::persona()->datos()->get_campo_comprobante('apellido'); + $nombres = kernel::persona()->datos()->get_campo_comprobante('nombres'); + + if (strlen($apellido . ', ' . $nombres) < 30) { + $this->pdf->addText($this->puntos_cm(3.8 + $margen), $this->puntos_cm(27.7), 12, $apellido . ', ' . $nombres); + } else { + $this->pdf->addText($this->puntos_cm(3.8 + $margen), $this->puntos_cm(27.7), 10, $apellido . ','); + $this->pdf->addText($this->puntos_cm(3.8 + $margen), $this->puntos_cm(27.2), 10, $nombres); + } + + // Línea separadora + $this->linea($this->puntos_cm(27)); + + $this->pdf->closeObject(); + $this->pdf->addObject($header, "all"); + } + + protected function footer() + { + $footer = $this->pdf->openObject(); + + // Nro. de página + $pattern = kernel::traductor()->trans('pagina') . " {PAGENUM} " . kernel::traductor()->trans('de') . " {TOTALPAGENUM}"; + $setNum = $this->pdf->ezStartPageNumbers($this->puntos_cm(18), $this->puntos_cm(1), 8, 'left', $pattern); + + $this->pdf->closeObject(); + $this->pdf->addObject($footer, "all"); + } + + //-------------------------------------------------------------------------- + + /** + * Datos que se imprimen: + * - Código de preinscripción + * - Fecha última modificiación + * - Apellido y nombre + * - Espacio para completar nro. LU + * - Código QR de la preinscripción + * - Espacio para foto + */ + protected function encabezado() + { + // Datos básicos de la ficha + $codigo_preinsc = kernel::persona()->datos()->get_codigo_preinscripcion(); + $this->pos_y = $this->puntos_cm(26.5); + $texto = kernel::traductor()->trans('rep_ficha_nro') . $codigo_preinsc; + $texto = $this->bold($texto); + $this->pdf->ezSetY($this->pos_y); + $new_y = $this->pdf->ezText($texto, 11); + + // Se calcula el Delta Y para futuros posicionamientos + $this->delta_y = $new_y - $this->pos_y; + + $this->pos_y = $new_y; + + $texto = kernel::traductor()->trans('rep_fecha_ult_modif') . kernel::persona()->datos()->get_campo_comprobante('fecha_ult_modif'); + $texto = $this->bold($texto); + $this->pdf->ezSetY($this->pos_y); + $this->pos_y = $this->pdf->ezText($texto, 11); + + $apellido = kernel::persona()->datos()->get_campo_comprobante('apellido'); + if (strlen($apellido) < 20) { + $texto = $this->bold(kernel::traductor()->trans('apellido') . ': ') . kernel::persona()->datos()->get_campo_comprobante('apellido'); + $this->pdf->ezSetY($this->pos_y + $this->delta_y); + $this->pos_y = $this->pdf->ezText($texto, 11); + } else { + // Apellido largo: en dos líneas + $texto = kernel::traductor()->trans('apellido') . ': '; + $texto = $this->bold($texto); + $this->pdf->ezSetY($this->pos_y + $this->delta_y); + $this->pos_y = $this->pdf->ezText($texto, 11); + + $texto = kernel::persona()->datos()->get_campo_comprobante('apellido'); + $this->pos_y = $this->pdf->ezText($texto, 10); + } + + $nombres = kernel::persona()->datos()->get_campo_comprobante('nombres'); + if (strlen($nombres) < 20) { + $texto = $this->bold(kernel::traductor()->trans('nombres') . ': ') . kernel::persona()->datos()->get_campo_comprobante('nombres'); + $this->pdf->ezSetY($this->pos_y + $this->delta_y); + $this->pos_y = $this->pdf->ezText($texto, 11); + } else { + // Nombre largo: en dos líneas + $texto = kernel::traductor()->trans('nombres') . ': '; + $texto = $this->bold($texto); + $this->pdf->ezSetY($this->pos_y + $this->delta_y); + $this->pos_y = $this->pdf->ezText($texto, 11); + + $texto = kernel::persona()->datos()->get_campo_comprobante('nombres'); + $this->pos_y = $this->pdf->ezText($texto, 10); + } + + $texto = kernel::traductor()->trans('rep_nro_lu') . '..........................'; + $texto = $this->bold($texto); + $this->pdf->ezSetY($this->pos_y + $this->delta_y); + $this->pos_y = $this->pdf->ezText($texto, 11); + + $texto = kernel::traductor()->trans('rep_nro_lu_leyenda'); + $this->pos_y = $this->pdf->ezText($texto, 7); + + // Código QR + $outfile_QR = preinscripcion::dir_temp() . '/qr' . kernel::persona()->datos()->get_id_preinscripcion() . '.png'; + \QRcode::png($codigo_preinsc, $outfile_QR, 'QR_ECLEVEL_H', 5, 0); + $this->pdf->addPngFromFile($outfile_QR, $this->puntos_cm(11.6), $this->puntos_cm(23), 100); + unlink($outfile_QR); + + // Espacio para la foto + $this->pdf->rectangle($this->puntos_cm(15.5), $this->puntos_cm(23), $this->puntos_cm($this->dim_cuadro_foto), $this->puntos_cm($this->dim_cuadro_foto)); + + // Línea separadora + $this->pos_y += 1.5 * $this->delta_y; + $this->linea($this->pos_y); + + $this->pos_y += 0.5 * $this->delta_y; + } + + protected function turno_presentacion($propuestas) + { + // Se obtienen los turnos + $turnos = $this->get_turnos_presentacion($propuestas); + + // Si no hay turno de presentación no imprimo dicha sección + if (empty($turnos)) { + return false; + } + + $texto = $this->italic($this->bold(kernel::traductor()->trans('rep_turno_mensaje'))); + $this->pdf->ezSetY($this->pos_y + $this->delta_y); + $this->pos_y = $this->pdf->ezText($texto, 11); + + $cols = array( + 'responsable_academica_nombre' => $this->bold(kernel::traductor()->trans('turno.ra')), + 'fecha' => $this->bold(kernel::traductor()->trans('turno.fecha')), + 'hora' => $this->bold(kernel::traductor()->trans('turno.hora')), + 'operador' => $this->bold(kernel::traductor()->trans('turno.operador')), + ); + + $opciones = array( + 'showLines' => '1', + 'showHeadings' => '1', + 'shaded' => '1', + 'maxWidth' => $this->puntos_cm(16.2), + 'xOrientation' => 'center', + ); + + $this->pos_y += $this->delta_y; + $this->pdf->ezSetY($this->pos_y); + $this->pdf->setLineStyle(1); + $this->pos_y = $this->pdf->ezTable($turnos, $cols, '', $opciones); + + // Línea separadora + $this->pos_y += 1.5 * $this->delta_y; + $this->linea($this->pos_y); + + $this->pos_y += 0.5 * $this->delta_y; + } + + /** + * Obtiene el listado de turnos correspondientes a las Responsables Académicas + * de las Propuestas recibidas + * + * @param array $propuestas + * @return array + */ + protected function get_turnos_presentacion($propuestas) + { + $turnos = kernel::persona()->datos()->get_listado_turnos(); + $ras = array_unique(aplanar_matriz($propuestas, 'responsable_academica')); + + $salida = array(); + foreach ($turnos as $turno) { + if (in_array($turno['responsable_academica_plana'], $ras)) { + $salida[] = $turno; + } + } + return $salida; + } + + protected function propuestas($datos) + { + // Si carga turno de presentación, se muestra en la ficha antes de las propuestas + if (kernel::proyecto()->carga_turno_presentacion()) { + $this->turno_presentacion($datos); + } + + // Título + $texto = kernel::traductor()->trans('rep_propuestas_a_insc'); + $texto = $this->bold($texto); + $this->pdf->ezSetY($this->pos_y); + $this->pos_y = $this->pdf->ezText($texto, 12); + + // Tabla de propuestas + foreach ($datos as $indice => $inscripcion) { + foreach ($inscripcion as $key => $value) { + $datos[$indice][$key] = $value; + } + } + + $cols = array( + 'ra_nombre' => $this->bold(kernel::traductor()->trans('responsable_academica')), + 'propuesta_nombre' => $this->bold(kernel::traductor()->trans('propuesta')), + 'ubicacion_nombre' => $this->bold(kernel::traductor()->trans('ubicacion')), + 'modalidad_nombre' => $this->bold(kernel::traductor()->trans('modalidad')), + ); + + if (kernel::proyecto()->get_parametro('rep_imprime_periodo_insc')) { + $cols['periodo_insc'] = $this->bold(kernel::traductor()->trans('periodo_inscripcion')); + } + + $opciones = [ + 'showLines' => '1', + 'showHeadings' => '1', + 'shaded' => '1', + 'maxWidth' => $this->puntos_cm(16.2), + 'xOrientation' => 'center', + 'cols' => [ + 'ra_nombre' => ['width' => $this->puntos_cm(4.3)], + 'propuesta_nombre' => ['width' => $this->puntos_cm(4.5)], + 'ubicacion_nombre' => ['width' => $this->puntos_cm(4.3)], + 'modalidad_nombre' => ['width' => $this->puntos_cm(3.1)], + ], + ]; + + $this->pos_y += $this->delta_y; + $this->pdf->ezSetY($this->pos_y); + $this->pdf->setLineStyle(1); + $this->pos_y = $this->pdf->ezTable($datos, $cols, '', $opciones); + + // Se resetean los colores y se actualiza el puntero de altura + $this->pdf->setColor(0, 0, 0); + $this->pdf->setStrokeColor(0, 0, 0); + + $this->pos_y += $this->delta_y; + } + + protected function CBC() + { + // Línea separadora + $this->linea($this->pos_y); + + // Título + $this->pos_y += 0.5 * $this->delta_y; + $texto = kernel::traductor()->trans('rep_titulo_cbc'); + $texto = $this->bold($texto); + $this->pdf->ezSetY($this->pos_y); + $this->pos_y = $this->pdf->ezText($texto, 12); + + $cols = array( + 'cbc_codigo' => $this->bold(kernel::traductor()->trans('cbc_codigo')), + 'cbc_asignaturas' => $this->bold(kernel::traductor()->trans('cbc_asignaturas')), + 'cbc_calificacion' => $this->bold(kernel::traductor()->trans('cbc_calificacion')), + 'cbc_fecha' => $this->bold(kernel::traductor()->trans('cbc_fecha')), + ); + + $opciones = array( + 'showLines' => '2', + 'showHeadings' => '1', + 'shaded' => '0', + 'width' => $this->puntos_cm(16.2), + 'xOrientation' => 'center', + 'rowGap' => '4', + 'cols' => array( + 'cbc_codigo' => array('width' => $this->puntos_cm(2)), + 'cbc_asignaturas' => array('width' => $this->puntos_cm(8)), + ), + ); + + $datos = array(); + for ($i = 0; $i < 7; $i++) { + $datos[$i] = array( + 'cbc_codigo' => ' ', + 'cbc_asignaturas' => ' ', + 'cbc_calificacion' => ' ', + 'cbc_fecha' => ' ', + ); + } + + $this->pdf->ezSetY($this->pos_y + ($this->delta_y)); + $this->pos_y = $this->pdf->ezTable($datos, $cols, '', $opciones); + + // Se resetean los colores y se actualiza el puntero de altura + $this->pdf->setColor(0, 0, 0); + $this->pdf->setStrokeColor(0, 0, 0); + $this->pos_y += $this->delta_y * 0.5; + + $texto = kernel::traductor()->trans('cbc_leyenda_cuadro'); + $this->pdf->ezSetY($this->pos_y); + $this->pos_y = $this->pdf->ezText($texto, 9); + + $this->pos_y += $this->delta_y; + } + + //-------------------------------------------------------------------------- + + protected function datos_seccion($seccion) + { + if (util::form()->hay_imprimibles_seccion($seccion)) { + // Línea separadora + $this->linea($this->pos_y); + + // Título + $this->pos_y += 0.5 * $this->delta_y; + $texto = kernel::traductor()->trans($seccion); + $texto = $this->bold($texto); + $this->pdf->ezSetY($this->pos_y); + $this->pos_y = $this->pdf->ezText($texto, 12); + + $cols = array( + 'label_1' => '', + 'dato_1' => '', + 'label_2' => '', + 'dato_2' => '', + ); + + $opciones = array( + 'showLines' => '0', + 'showHeadings' => '0', + 'shaded' => '0', + 'maxWidth' => $this->puntos_cm(16.2), + 'xOrientation' => 'center', + 'rowGap' => '3', + 'colGap' => '6', + 'fontSize' => '8', + 'cols' => array( + 'label_1' => array('justification' => 'right', 'width' => $this->puntos_cm(3.5)), + 'dato_1' => array('justification' => 'left', 'width' => $this->puntos_cm(4.5)), + 'label_2' => array('justification' => 'right', 'width' => $this->puntos_cm(3.5)), + 'dato_2' => array('justification' => 'left', 'width' => $this->puntos_cm(4.5)), + ), + ); + + // Se obtienen los campos de la sección + $campos = util::form()->get_campos_seccion($seccion); + + foreach ($campos as $nombre_agrupado => $campos_seccion) { + if (util::form()->hay_imprimibles_agrupado($seccion, $nombre_agrupado)) { + $datos = array(); + + // Título + $this->pdf->setColor(0.2, 0.2, 0.2); + $this->pos_y += 0.5 * $this->delta_y; + $texto = ' ' . kernel::traductor()->trans($nombre_agrupado); + $texto = $this->italic($this->bold($texto)); + $this->pdf->ezSetY($this->pos_y); + $this->pos_y = $this->pdf->ezText($texto, 10); //, array('justification' => 'center')); + // Línea separadora + $this->pdf->setLineStyle(1); + $this->pdf->setColor(0.5, 0.5, 0.5); + $this->pdf->setStrokeColor(0.5, 0.5, 0.5); + $y = $this->pos_y + $this->delta_y * 0.5; + $this->pdf->line($this->puntos_cm(2.5), $y, $this->puntos_cm(18.5), $y); + + // Datos + $this->pdf->setColor(0, 0, 0); + $columna_1 = true; + foreach ($campos_seccion as $campo) { + if ((util::form()->visible($campo)) && (util::form()->se_imprime($campo))) { + if ($columna_1) { + $dato = array(); + $dato['label_1'] = $this->etiqueta($campo); + $dato['dato_1'] = kernel::persona()->datos()->get_campo_comprobante($campo); + } else { + $dato['label_2'] = $this->etiqueta($campo); + $dato['dato_2'] = kernel::persona()->datos()->get_campo_comprobante($campo); + $datos[] = $dato; + } + $columna_1 = !$columna_1; + } + } + if (!$columna_1) { + $dato['label_2'] = ' '; + $dato['dato_2'] = ' '; + $datos[] = $dato; + } + + $this->pdf->ezSetY($this->pos_y + ($this->delta_y)); + $this->pos_y = $this->pdf->ezTable($datos, $cols, '', $opciones); + + $this->pos_y += 0.5 * $this->delta_y; + } + } + + $this->pos_y += 0.5 * $this->delta_y; + } + } + + //-------------------------------------------------------------------------- + + protected function avisos() + { + $avisos = kernel::proyecto()->get_parametro('rep_avisos'); + + if (!empty($avisos)) { + // Línea separadora + $this->linea($this->pos_y); + + $cols = array( + 'avisos_nro' => '', + 'avisos_texto' => '', + ); + + $opciones = array( + 'showLines' => '0', + 'showHeadings' => '0', + 'shaded' => '0', + 'width' => $this->puntos_cm(16.2), + 'xOrientation' => 'center', + 'fontSize' => 8, + 'cols' => array( + 'avisos_nro' => array('width' => $this->puntos_cm(0.7)), + 'avisos_texto' => array('justification' => 'full'), + ), + ); + + $datos = array(); + $cant = 1; + + foreach ($avisos as $aviso) { + $datos[] = array( + 'avisos_nro' => $cant . ')', + 'avisos_texto' => trim($aviso), + ); + $cant++; + } + + $this->pdf->ezSetY($this->pos_y + (0.5 * $this->delta_y)); + $this->pos_y = $this->pdf->ezTable($datos, $cols, '', $opciones); + } + } + + protected function fecha_y_firma() + { + $cols = array( + 'fecha' => '', + 'firma' => '', + ); + + $opciones = array( + 'showLines' => '0', + 'showHeadings' => '0', + 'shaded' => '0', + 'width' => $this->puntos_cm(16.2), + 'xOrientation' => 'center', + 'fontSize' => 13, + 'cols' => array( + 'fecha' => array('justification' => 'left'), + 'firma' => array('justification' => 'center', 'width' => $this->puntos_cm(7)), + ), + ); + + $fecha = date('j/n/Y'); + + $localidad = kernel::proyecto()->get_parametro('rep_localidad'); + if ($localidad) { + $fecha = $localidad . ', ' . $fecha; + } + + $datos = array(array( + 'fecha' => $fecha, + 'firma' => '.........................................................' . $this->bold(kernel::traductor()->trans('rep_firma')), + ) + ); + + $this->pos_y += 5 * $this->delta_y; + $this->pdf->ezSetY($this->pos_y); + $this->pos_y = $this->pdf->ezTable($datos, $cols, '', $opciones); + } + + protected function credencial_provisoria() + { + $y = $this->puntos_cm($this->alto_credencial); + + if ($this->pos_y < $y) { + // Si no hay lugar para la credencial, se inserta una nueva página + $this->pdf->ezNewPage(); + } + $this->pos_y = $y; + + // Se elimina nro. de página en la última, si se imprime credencial provisoria + $this->pdf->ezStopPageNumbers(0, 0, 0); + + // Linea punteada + $this->pdf->setLineStyle(1, 'round', '', array(2, 2)); + $this->pdf->line($this->puntos_cm(0.5), $this->pos_y, $this->puntos_cm(20.5), $this->pos_y); + + // Título + $this->pos_y += 0.5 * $this->delta_y; + $texto = kernel::traductor()->trans('rep_titulo_credencial'); + $texto = $this->bold($texto); + $this->pdf->ezSetY($this->pos_y); + $this->pos_y = $this->pdf->ezText($texto, 12); + + // Espacio para la foto + $this->pos_y += $this->delta_y; + $this->pdf->setLineStyle(1, 'square', 'miter', array(100, 1)); + $this->pdf->setColor(0, 0, 0); + $this->pdf->setStrokeColor(0, 0, 0); + $this->pdf->rectangle($this->puntos_cm(2.2), $this->pos_y - $this->puntos_cm($this->dim_cuadro_foto), $this->puntos_cm(3.5), $this->puntos_cm(3.5)); + + // Datos personales + $cols = array( + 'datos' => '', + ); + + $opciones = array( + 'showLines' => '0', + 'showHeadings' => '0', + 'shaded' => '0', + 'width' => $this->puntos_cm(13), + 'xPos' => $this->puntos_cm(19.5), + 'xOrientation' => 'left', + 'fontSize' => 11, + 'cols' => array( + 'datos' => array('justification' => 'left'), + ), + ); + + $datos = array(); + $datos[] = array('datos' => $this->bold(kernel::traductor()->trans('rep_nro_lu')) . '..........................'); + $datos[] = array('datos' => $this->bold(kernel::traductor()->trans('rep_apellido_y_nombre')) . ': ' . kernel::persona()->datos()->get_apellido_y_nombres()); + $identificacion = kernel::persona()->datos()->get_campo_comprobante('tipo_documento_desc_abreviada') . ' ' . kernel::persona()->datos()->get_campo_comprobante('nro_documento'); + $datos[] = array('datos' => $this->bold(kernel::traductor()->trans('rep_identificacion')) . ': ' . $identificacion); + + $mail = kernel::persona()->datos()->get_campo_comprobante('e_mail'); + $dato = $this->bold(kernel::traductor()->trans('email')) . ': ' . $mail; + $celular = kernel::persona()->datos()->get_campo_comprobante('celular_numero'); + if (!empty($celular) && ($celular != '0--15-')) { + $dato .= ' - ' . $this->bold(kernel::traductor()->trans('rep_telefono')) . ': ' . $celular; + } + $datos[] = array('datos' => $dato); + + $propuestas = kernel::persona()->datos()->get_nombres_propuestas_insc(); + $datos[] = array('datos' => $this->bold(kernel::traductor()->trans('rep_propuestas')) . ': ' . $propuestas); + + $this->pdf->ezSetY($this->pos_y); + $this->pos_y = $this->pdf->ezTable($datos, $cols, '', $opciones); + } + + //-------------------------------------------------------------------------- + /** + * + * Función que pasa las medidas en centímetros a puntos (todas las medidas en PDF + * se expresan en puntos, cada punto es aproximadamente la 1/72 parte de una pulgada). + * + * @param $medida en centímetros + * @param $resolucion por defecto le asignaremos '72' (72 puntos por pulgada) + */ + protected function puntos_cm($medida, $resolucion = 72) + { + // 2.54 cm / pulgada + return ($medida / (2.54)) * $resolucion; + } + + protected function bold($texto) + { + return '' . $texto . ''; + } + + protected function italic($texto) + { + return '' . $texto . ''; + } + + protected function inicializar_fuentes() + { + $tmp = array( + 'b' => 'Times-Bold.afm', + 'i' => 'Times-Italic.afm', + 'bi' => 'Times-BoldItalic.afm', + 'ib' => 'Times-BoldItalic.afm', + 'bb' => 'Times-Roman.afm' + ); + + $this->pdf->setFontFamily('Times-Roman', $tmp); + $this->pdf->selectFont(preinscripcion::dir_fonts() . 'Times-Roman'); + } + + protected function etiqueta($campo) + { + $etiqueta = util::form()->get_etiqueta($campo); + return $this->bold($etiqueta); + } + + /** + * Inserta una línea separadora en una altura de la hoja dada + * + * @param float $y Altura donde insertar la línea (en puntos) + * @param array $color Arreglo R G B representando el color de la línea + */ + protected function linea($y, $color = array(0, 0, 0)) + { + $this->pdf->setLineStyle(1); + $this->pdf->setColor(0, 0, 0); + $this->pdf->setStrokeColor(0, 0, 0); + $this->pdf->line($this->puntos_cm(2), $y, $this->puntos_cm(19.2), $y); + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/_comun/pagelet_con_form.php b/src/siu/operaciones/_comun/pagelet_con_form.php new file mode 100644 index 0000000..9bb326b --- /dev/null +++ b/src/siu/operaciones/_comun/pagelet_con_form.php @@ -0,0 +1,36 @@ +controlador->vista()->get_campos_faltantes(); + if (isset($campos_faltantes[$this->get_nombre()])) { + $campos_pagelet = $campos_faltantes[$this->get_nombre()]; + $form = $this->form; + foreach ($campos_pagelet as $campo) { + $campo_descr = preinscripcion_form::get_campo_descr($campo); + if (!empty($campo_descr)) { + // El campo es un ID interno y tiene un campo descriptivo + $form->agregar_error($campo_descr, kernel::traductor()->trans('form_validacion_error.vacio_impr')); + } else { + // Se agrega el error directamente al campo + $form->agregar_error($campo, kernel::traductor()->trans('form_validacion_error.vacio_impr')); + } + } + } + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/_comun/preinscripcion_PDF.php b/src/siu/operaciones/_comun/preinscripcion_PDF.php new file mode 100644 index 0000000..dcd9902 --- /dev/null +++ b/src/siu/operaciones/_comun/preinscripcion_PDF.php @@ -0,0 +1,249 @@ +y; + } + + function decode($cadena) + { + $juegocaractercode = 'UTF-8'; + $estilocomillas = ENT_COMPAT; + + return html_entity_decode($cadena, $estilocomillas, $juegocaractercode); + } + + function addText($x, $y, $size, $text, $angle = 0, $wordSpaceAdjust = 0) + { + $text = $this->decode($text); + return parent::addText($x, $y, $size, $text, $angle, $wordSpaceAdjust); + } + + function ezText($text, $size = 0, $options = array(), $test = 0) + { + $text = $this->decode($text); + return parent::ezText($text, $size, $options, $test); + } + + function stream($options = '') + { + // setting the options allows the adjustment of the headers + // values at the moment are: + // 'Content-Disposition'=>'filename' - sets the filename, though not too sure how well this will + // work as in my trial the browser seems to use the filename of the php file with .pdf on the end + // 'Accept-Ranges'=>1 or 0 - if this is not set to 1, then this header is not included, off by default + // this header seems to have caused some problems despite tha fact that it is supposed to solve + // them, so I am leaving it off by default. + // 'compress'=> 1 or 0 - apply content stream compression, this is on (1) by default + if (!is_array($options)) { + $options = array(); + } + if (isset($options['compress']) && $options['compress'] == 0) { + $tmp = $this->output(1); + } else { + $tmp = $this->output(); + } + header('Content-type: application/octet-stream'); + header("Content-Length: " . strlen(ltrim($tmp))); + $fileName = (isset($options['Content-Disposition']) ? $options['Content-Disposition'] : 'salida.pdf'); + header("Content-Disposition: attachment; filename=" . $fileName); + if (isset($options['Accept-Ranges']) && $options['Accept-Ranges'] == 1) { + header("Accept-Ranges: " . strlen(ltrim($tmp))); + } + header("Content-Description: file"); + + echo ltrim($tmp); + } + + /** + * add a PNG image into the document, from a file + * this should work with remote files + */ + function addPngFromFile($file, $x, $y, $w = 0, $h = 0) + { + // read in a png file, interpret it, then add to the system + $error = 0; + + $fp = @fopen($file, 'rb'); + if ($fp) { + $data = ''; + while (!feof($fp)) { + $data .= fread($fp, 1024); + } + fclose($fp); + } else { + $error = 1; + $errormsg = 'trouble opening file: ' . $file; + } + + if (!$error) { + $header = chr(137) . chr(80) . chr(78) . chr(71) . chr(13) . chr(10) . chr(26) . chr(10); + if (substr($data, 0, 8) != $header) { + $error = 1; + $errormsg = 'this file does not have a valid header'; + } + } + + if (!$error) { + // set pointer + $p = 8; + $len = strlen($data); + // cycle through the file, identifying chunks + $haveHeader = 0; + $info = array(); + $idata = ''; + $pdata = ''; + while ($p < $len) { + $chunkLen = $this->PRVT_getBytes($data, $p, 4); + $chunkType = substr($data, $p + 4, 4); + + switch ($chunkType) { + case 'IHDR': + // this is where all the file information comes from + $info['width'] = $this->PRVT_getBytes($data, $p + 8, 4); + $info['height'] = $this->PRVT_getBytes($data, $p + 12, 4); + $info['bitDepth'] = ord($data[$p + 16]); + $info['colorType'] = ord($data[$p + 17]); + $info['compressionMethod'] = ord($data[$p + 18]); + $info['filterMethod'] = ord($data[$p + 19]); + $info['interlaceMethod'] = ord($data[$p + 20]); + + $haveHeader = 1; + if ($info['compressionMethod'] != 0) { + $error = 1; + $errormsg = 'unsupported compression method'; + } + if ($info['filterMethod'] != 0) { + $error = 1; + $errormsg = 'unsupported filter method'; + } + break; + case 'PLTE': + $pdata.=substr($data, $p + 8, $chunkLen); + break; + case 'IDAT': + $idata.=substr($data, $p + 8, $chunkLen); + break; + case 'tRNS': + //this chunk can only occur once and it must occur after the PLTE chunk and before IDAT chunk + //print "tRNS found, color type = ".$info['colorType']."
"; + $transparency = array(); + if ($info['colorType'] == 3) { // indexed color, rbg + /* corresponding to entries in the plte chunk + Alpha for palette index 0: 1 byte + Alpha for palette index 1: 1 byte + ...etc... + */ + // there will be one entry for each palette entry. up until the last non-opaque entry. + // set up an array, stretching over all palette entries which will be o (opaque) or 1 (transparent) + $transparency['type'] = 'indexed'; + $numPalette = strlen($pdata) / 3; + $trans = 0; + for ($i = $chunkLen; $i >= 0; $i--) { + if (ord($data[$p + 8 + $i]) == 0) { + $trans = $i; + } + } + $transparency['data'] = $trans; + } elseif ($info['colorType'] == 0) { // grayscale + /* corresponding to entries in the plte chunk + Gray: 2 bytes, range 0 .. (2^bitdepth)-1 + */ + $transparency['type'] = 'indexed'; + $transparency['data'] = ord($data[$p + 8 + 1]); + } elseif ($info['colorType'] == 2) { // truecolor + /* corresponding to entries in the plte chunk + Red: 2 bytes, range 0 .. (2^bitdepth)-1 + Green: 2 bytes, range 0 .. (2^bitdepth)-1 + Blue: 2 bytes, range 0 .. (2^bitdepth)-1 + */ + $transparency['r'] = $this->PRVT_getBytes($data, $p + 8, 2); // r from truecolor + $transparency['g'] = $this->PRVT_getBytes($data, $p + 10, 2); // g from truecolor + $transparency['b'] = $this->PRVT_getBytes($data, $p + 12, 2); // b from truecolor + } else { + //unsupported transparency type + } + // KS End new code + break; + default: + break; + } + + $p += $chunkLen + 12; + } + + if (!$haveHeader) { + $error = 1; + $errormsg = 'information header is missing'; + } + if (isset($info['interlaceMethod']) && $info['interlaceMethod']) { + $error = 1; + $errormsg = 'There appears to be no support for interlaced images in pdf.'; + } + } + + if (!$error && $info['bitDepth'] > 8) { + $error = 1; + $errormsg = 'only bit depth of 8 or less is supported'; + } + + if (!$error) { + if ($info['colorType'] != 2 && $info['colorType'] != 0 && $info['colorType'] != 3) { + $error = 1; + $errormsg = 'transparancey alpha channel not supported, transparency only supported for palette images.'; + } else { + switch ($info['colorType']) { + case 3: + $color = 'DeviceRGB'; + $ncolor = 1; + break; + case 2: + $color = 'DeviceRGB'; + $ncolor = 3; + break; + case 0: + $color = 'DeviceGray'; + $ncolor = 1; + break; + } + } + } + if ($error) { + $this->addMessage('PNG error - (' . $file . ') ' . $errormsg); + return; + } + if ($w == 0) { + $w = $h / $info['height'] * $info['width']; + } + if ($h == 0) { + $h = $w * $info['height'] / $info['width']; + } +//print_r($info); + // so this image is ok... add it in. + $this->numImages++; + $im = $this->numImages; + $label = 'I' . $im; + $this->numObj++; + + $options = array('label' => $label, 'data' => $idata, 'bitsPerComponent' => $info['bitDepth'], 'pdata' => $pdata + , 'iw' => $info['width'], 'ih' => $info['height'], 'type' => 'png', 'color' => $color, 'ncolor' => $ncolor); + if (isset($transparency)) { + $options['transparency'] = $transparency; + } + $this->o_image($this->numObj, 'new', $options); + + $this->objects[$this->currentContents]['c'].="\nq"; + $this->objects[$this->currentContents]['c'].="\n" . sprintf('%.3f', $w) . " 0 0 " . sprintf('%.3f', $h) . " " . sprintf('%.3f', $x) . " " . sprintf('%.3f', $y) . " cm"; + $this->objects[$this->currentContents]['c'].="\n/" . $label . ' Do'; + $this->objects[$this->currentContents]['c'].="\nQ"; + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/_comun/preinscripcion_form.php b/src/siu/operaciones/_comun/preinscripcion_form.php new file mode 100644 index 0000000..5aa5de5 --- /dev/null +++ b/src/siu/operaciones/_comun/preinscripcion_form.php @@ -0,0 +1,209 @@ +get_id_html(), 5); + } + + function set_autoset_activo($activo = false) + { + $this->autoset_activo = $activo; + } + + function is_autoset_activo() + { + return $this->autoset_activo; + } + + protected function set_campo($nombre, $def) + { + if ($this->autoset_activo) { + $def[self::clase_css] = isset($def[self::clase_css]) ? $def[self::clase_css] . ' js-editable' : 'js-editable'; + } + parent::set_campo($nombre, $def); + } + + function agregar_error($nombre, $msg) + { + if (!isset($this->errores[$nombre])) { + $this->errores[$nombre] = $msg; + } + } + + //-------------------------------------------------------------------------- + + /** + * Obtiene el campo ID de un campo descriptivo + * Si no tiene, retorna null + */ + function get_campo_id($campo_descr) + { + return util::form()->get_campo_id($campo_descr); + } + + /** + * Obtiene el campo descriptivo a partir de un campo ID + * Si no tiene, retorna null + */ + static function get_campo_descr($campo_id) + { + return util::form()->get_campo_descr($campo_id); + } + + //-------------------------------------------------------------------------- + + static function def_obligatorio($nombre) + { + return util::form()->obligatorio($nombre); + } + + static function def_visible($nombre) + { + return util::form()->visible($nombre); + } + + static function def_se_imprime($nombre) + { + return util::form()->se_imprime($nombre); + } + + //-------------------------------------------------------------------------- + /** + * Verifica si existe al menos un campo en un agrupado que esté definido + * como visible + */ + function hay_visibles_agrupado($agrupado) + { + $seccion = $this->get_id_seccion(); + return util::form()->hay_visibles_agrupado($seccion, $agrupado); + } + + //-------------------------------------------------------------------------- + + function control_group($nombre, $clase_control_group = '') + { + if ($this->def_visible($nombre)) { + if (!$this->check_activo($nombre)) { + return ''; + } + if ($this->get_elemento_html_tipo($nombre) == 'hidden') { + return $this->elemento($nombre); + } + $label = $this->label($nombre); + + if (($this->get_obligatorio($nombre)) || ($this->def_obligatorio($nombre))) { + $label = str_replace('class="optional"', 'class="label-obligatorio"', $label); + $label = str_replace('', ' (*)', $label); + } + + $elemento = $this->elemento($nombre); + $tiene_error = $this->tiene_error($nombre); + $clase_error = ($tiene_error) ? 'error' : ''; + + $html = "
"; + $html .= $label; + $html .= $elemento; + $html .= $this->ayuda($nombre); + if ($tiene_error) { + $html .= "
"; + $html .= "{$this->error($nombre)}"; + } + $html .= "
"; + + return $html; + } else { + return ''; + } + } + + function checkbox($nombre, $clase_control_group = '') + { + if ($this->def_visible($nombre)) { + if (!$this->check_activo($nombre)) { + return ''; + } + + $tiene_error = $this->tiene_error($nombre); + $clase_error = ($tiene_error) ? 'error' : ''; + + $html = "
"; + $id = $this->zend_form->getElement($nombre)->getId(); + $html .= ""; + $html .= "
"; + return $html; + } else { + return ''; + } + } + + protected function validar_campo($nombre, $valor) + { + // http://framework.zend.com/manual/en/zend.form.elements.html#zend.form.elements.validators + $filtro = $this->get_filtro($nombre); + $filtro_params = $this->get_filtro_params($nombre); + $obligatorio = $this->check_activo($nombre) && $this->get_obligatorio($nombre); + $largo = $this->get_largo($nombre); + + $error_filtro = !validador::es_valido($valor, $filtro, $filtro_params); + $error_largo = ($largo > 0) && mb_strlen($valor) > $largo; + + $error_vacio = $obligatorio && ((empty($valor) && $valor !== '0' && $valor !== 0) || (is_null($valor) || ($valor == opciones::NO_SELECCION))); + $error_select = false; + if ($this->get_elemento_html_tipo($nombre) == 'select' && $this->get_validar_select($nombre)) { + // se hace el chequeo del validador inarray + $error_select = !$this->zend_form->getElement($nombre)->isValid($valor); + } + + $es_valido = !$error_filtro && !$error_largo && !$error_vacio && !$error_select; + $msg = ''; + + if (!$es_valido) { + $msg = 'form_validacion_error.'; + if ($error_filtro) { + $msg .= "filtro_$filtro"; + } elseif ($error_largo) { + $msg .= 'largo'; + } elseif ($error_vacio) { + $msg .= 'vacio'; + } elseif ($error_select) { + $msg .= 'select'; + } + } + if (!$es_valido) { + \klog("Error validación => $nombre:$msg"); + } + return array($es_valido, $msg); + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/_comun/templates/footer.twig b/src/siu/operaciones/_comun/templates/footer.twig new file mode 100644 index 0000000..b6320a7 --- /dev/null +++ b/src/siu/operaciones/_comun/templates/footer.twig @@ -0,0 +1,16 @@ +
+
+
+
+
+ +
+
+
+ +
+
+
+
\ No newline at end of file diff --git a/src/siu/operaciones/_comun/templates/full.twig b/src/siu/operaciones/_comun/templates/full.twig new file mode 100644 index 0000000..6d716fd --- /dev/null +++ b/src/siu/operaciones/_comun/templates/full.twig @@ -0,0 +1,86 @@ + + + + {%if url_recursos %} + {%set url_recursos = url_recursos ~ '/' %} + {% else %} + {%set url_recursos = '/g3w2/' %} + {%endif%} + + {% set js_jquery = url_recursos ~ 'js/lib/jquery-1.6.1.min.js' %} + + {% set js_history = url_recursos ~ 'js/lib/history/uncompressed/' %} + {% set js_history_json2 = js_history ~ 'json2.js' %} + {% set js_history_adapter = js_history ~ 'history.adapter.jquery.js' %} + {% set js_history_history = js_history ~ 'history.js' %} + {% set js_history_html4 = js_history ~ 'history.html4.js' %} + + {% set js_lazyload = url_recursos ~ 'js/lib/lazyload.js' %} + {% set js_kernel = url_recursos ~ 'js/lib/kernel.js' %} + {% set js_facebox = url_recursos ~ 'js/facebox.js' %} + {% set js_guarani = url_recursos ~ 'js/guarani.js' %} + {% set js_html5 = url_recursos ~ 'js/html5.js' %} + + {% set css_reset = url_recursos ~ 'css/reset.css' %} + {% set css_estilos = url_recursos ~ 'css/estilos.css' %} + {% set css_layout = url_recursos ~ 'css/layout.css' %} + {% set css_facebox = url_recursos ~ 'css/facebox.css' %} + + + + {{ etiquetas.titulo }} - {{ etiquetas.sub_titulo }} + + + + + + + + + + + + + + + + + + + + {% if vista.get_tipo == 'VistaPagelets' %} + {% set pagelets_count = vista.get_pagelets_count %} + {% set stall_js = 'true' %} + {% else %} + {% set pagelets_count = 0 %} + {% set stall_js = 'false' %} + {% endif %} + + {{ vista.get_css_resources|raw }} + {{ vista.get_js_resources|raw }} + + + {% include 'header.twig' %} +
+
+
+
+ {{ vista.render }} +
+
+
+ + {% include 'footer.twig' %} + + \ No newline at end of file diff --git a/src/siu/operaciones/_comun/templates/header.twig b/src/siu/operaciones/_comun/templates/header.twig new file mode 100644 index 0000000..36d5710 --- /dev/null +++ b/src/siu/operaciones/_comun/templates/header.twig @@ -0,0 +1,95 @@ +{% import _self as current_file_macros %} + +
+
+
+
+ +
+ +
+ {% if persona.logueada %} +
+
+ +
+ {{ version }} +
+
+
+ {% else %} +
+ {{ version }} +
+ {% endif %} +
+
+
+
+ +{% if menu %} + +{% endif %} + + +{% macro recursiveSubmenu(item, primer_nivel) %} + + {% import _self as current_file_macros %} + + {% if primer_nivel %} + {{ item.nombre|trans }} + {% else %} + + {% endif %} + +{% endmacro %} \ No newline at end of file diff --git a/src/siu/operaciones/_comun/templates/header_celular.twig b/src/siu/operaciones/_comun/templates/header_celular.twig new file mode 100644 index 0000000..d84518a --- /dev/null +++ b/src/siu/operaciones/_comun/templates/header_celular.twig @@ -0,0 +1,143 @@ +{% import _self as current_file_macros %} + +{% if menu %} + + +{% else %} + +{% endif %} + + +{% macro recursiveSubmenu(item, primer_nivel) %} + + {% import _self as current_file_macros %} + + {% if primer_nivel %} + {{ item.nombre|trans }} + + {% else %} + +{% endif %} + +{% endmacro %} \ No newline at end of file diff --git a/src/siu/operaciones/_comun/templates/header_tablet.twig b/src/siu/operaciones/_comun/templates/header_tablet.twig new file mode 100644 index 0000000..1214d5c --- /dev/null +++ b/src/siu/operaciones/_comun/templates/header_tablet.twig @@ -0,0 +1,147 @@ +{% import _self as current_file_macros %} + +{% if menu %} + + + +{% else %} + +{% endif %} + + +{% macro recursiveSubmenu(item, primer_nivel) %} + + {% import _self as current_file_macros %} + + {% if primer_nivel %} + {{ item.nombre|trans }} + + {% else %} + +{% endif %} + +{% endmacro %} \ No newline at end of file diff --git a/src/siu/operaciones/_comun/templates/pipe.twig b/src/siu/operaciones/_comun/templates/pipe.twig new file mode 100644 index 0000000..490fdb2 --- /dev/null +++ b/src/siu/operaciones/_comun/templates/pipe.twig @@ -0,0 +1,32 @@ + + + + {%if url_recursos %} + {%set url_recursos = url_recursos ~ '/' %} + {% else %} + {%set url_recursos = alias ~ '/' %} + {%endif%} + + + + {% include 'res.twig' %} + + + + {% include template_header %} + +
+ + +
+ {% if vista.get_tipo == 'VistaPagelets' %} + {{ vista.render_skeleton }} + {{ vista.render_pipe }} + {% else %} {# si no es vista pagelets se renderiza directamente #} + {{ vista.render }} + {% endif %} +
+ + {% include template_footer %} + + \ No newline at end of file diff --git a/src/siu/operaciones/_comun/templates/res.twig b/src/siu/operaciones/_comun/templates/res.twig new file mode 100644 index 0000000..7fb3746 --- /dev/null +++ b/src/siu/operaciones/_comun/templates/res.twig @@ -0,0 +1,151 @@ +{% set js_jquery = url_recursos ~ 'js/lib/jquery-1.12.4.min.js' %} +{% set js_jquery_migrate = url_recursos ~ 'js/lib/jquery-migrate-1.2.1.min.js' %} +{% set js_history = url_recursos ~ 'js/lib/history/uncompressed/' %} +{% set js_history_json2 = js_history ~ 'json2.js' %} + +{% set js_history_adapter = js_history ~ 'history.adapter.jquery.js' %} +{% set js_history_history = js_history ~ 'history.js' %} +{% set js_history_html4 = js_history ~ 'history.html4.js' %} + +{% set js_lazyload = url_recursos ~ 'js/lib/lazyload.js' %} +{% set js_facebox = url_recursos ~ 'js/facebox.js' %} + +{# carga del kernel js #} +{% set js_kernel_loader = url_recursos ~ 'js/lib/kernel.loader.js' %} +{% set js_kernel_renderer = url_recursos ~ 'js/lib/kernel.renderer.js' %} +{% set js_kernel_evts = url_recursos ~ 'js/lib/kernel.evts.js' %} +{% set js_kernel_ajax = url_recursos ~ 'js/lib/kernel.ajax.js' %} +{% set js_kernel_historia = url_recursos ~ 'js/lib/kernel.historia.js' %} +{% set js_kernel_util = url_recursos ~ 'js/lib/kernel.util.js' %} +{% set js_kernel_ui = url_recursos ~ 'js/lib/kernel.ui.js' %} +{% set js_kernel_log = url_recursos ~ 'js/lib/kernel.log.js' %} + +{% set js_dev_bar = url_recursos ~ 'js/lib/dev_bar.js' %} +{% set js_preinscripcion = url_recursos ~ 'js/preinscripcion.js' %} +{% set js_html5 = url_recursos ~ 'js/html5.js' %} +{% set js_jqueryui = url_recursos ~ 'js/jquery-ui.js' %} +{% set js_bootstrap = url_recursos ~ 'js/bootstrap.js' %} + +{% set css_bootstrap = url_recursos ~ 'css/bootstrap.css' %} +{% set css_bootstrap_responsive = url_recursos ~ 'css/bootstrap-responsive.css' %} +{% set css_preinscripcion = url_recursos ~ 'css/preinscripcion.css' %} +{% set css_preinscripcion_responsive = url_recursos ~ 'css/preinscripcion-responsive.css' %} +{% set css_facebox = url_recursos ~ 'css/facebox.css' %} +{% set css_jqueryui = url_recursos ~ 'css/jquery-ui.css' %} +{% set css_dev_bar = url_recursos ~ 'css/dev_bar.css' %} + + +{{ titulo }} + +{% if produccion %} + + {% if es_browser %} + + {% if mash_personalizado %} + + {% for pers in personalizaciones %} + + {% endfor %} + + {% endif %} + {% else %} + + {% if mash_personalizado %} + + {% for pers in personalizaciones %} + + {% endfor %} + + {% endif %} + {% endif %} +{% else %} + + + + + + + + + + + + + + + + + + + + + + + + + + {% if not es_browser %} + + {% endif %} + {##} + + {# Recursos personalizados #} + {% for url in urls_preinscripcion_css %} + + {% endfor %} + + {% if not es_browser %} + + {% endif %} + + +{% endif %} + + + +{% if vista.get_tipo == 'VistaPagelets' %} + {% set pagelets_count = vista.get_pagelets_count %} + {% set stall_js = 'true' %} +{% else %} + {% set pagelets_count = 0 %} + {% set stall_js = 'false' %} +{% endif %} + + + +{% if ga_params.activo %} + + + +{% endif %} + +{% if barra_dev and not es_produccion %} + + +{% endif %} diff --git a/src/siu/operaciones/_comun/templates/vista_error.twig b/src/siu/operaciones/_comun/templates/vista_error.twig new file mode 100644 index 0000000..10006cf --- /dev/null +++ b/src/siu/operaciones/_comun/templates/vista_error.twig @@ -0,0 +1,9 @@ + diff --git a/src/siu/operaciones/_comun/util_formulario_preinscripcion.php b/src/siu/operaciones/_comun/util_formulario_preinscripcion.php new file mode 100644 index 0000000..443a649 --- /dev/null +++ b/src/siu/operaciones/_comun/util_formulario_preinscripcion.php @@ -0,0 +1,462 @@ +inicializar_mapeos_id_descripcion(); + } + + /** + * Configuración de campos de formulario para un aspirante, en función de sus + * propuestas seleccionadas + * + * ============================================= + * Antes llamada get_parametros_campos_form + * ============================================= + * + * @return array + */ + function get_config_campos_aspirante() + { + if (!isset($this->parametros_campos)) { + $this->parametros_campos = kernel::persona()->datos()->get_config_campos_aspirante(); + } + return $this->parametros_campos; + } + + function invalidar_config_campos_conf() + { + + } + + /** + * Determina si un campo es visible para el aspirante y sus propuestas + * seleccionadas, en función de la configuración de formulario establecida + * + * @param string $campo + * @return boolean + */ + function visible($campo) + { + $campos = $this->get_config_campos_aspirante(); + if (isset($campos[$campo])) { + return $campos[$campo]['visible']; + } elseif (($campo == 'celular_caracteristica') || ($campo == 'celular_valor')) { + // Caso especial: celular_numero + return $campos['celular_numero']['visible']; + } else { + // Si el campo es descripción de un id interno, se asocia a la visibilidad de ese campo. + $campo_id = $this->get_campo_id($campo); + if (!is_null($campo_id)) { + return $campos[$campo_id]['visible']; + } + } + return true; + } + + /** + * Determina si un campo es obligatorio para el aspirante y sus propuestas + * seleccionadas, en función de la configuración de formulario establecida + * + * @param string $campo + * @return boolean + */ + function obligatorio($campo) + { + $campos = $this->get_config_campos_aspirante(); + if (isset($campos[$campo])) { + return $campos[$campo]['obligatorio']; + } elseif (($campo == 'celular_caracteristica') || ($campo == 'celular_valor')) { + // Caso especial: celular_numero + return $campos['celular_numero']['obligatorio']; + } else { + // Si el campo es descripción de un id interno, se asocia a la obligatoriedad de ese campo. + $campo_id = $this->get_campo_id($campo); + if (!is_null($campo_id)) { + return $campos[$campo_id]['obligatorio']; + } + } + return false; + } + + /** + * Determina si un campo debe aparecer en la salida PDF para el aspirante y + * sus propuestas seleccionadas, en función de la configuración de formulario + * + * @param string $campo + * @return boolean + */ + function se_imprime($campo) + { + // Primero se controlan campos que no se imprimen nunca en su sección + // (porque se muestran en otros lugares) + $no_se_imprimen = array('apellido', 'nombres', + // Campos que sirven de descripción de opción "Otra" + 'alu_otestsup_razon_abandono_otros', 'pueblo_originario_otro' + ); + if (in_array($campo, $no_se_imprimen)) { + return false; + } + + $campos = $this->get_config_campos_aspirante(); + if (isset($campos[$campo])) { + $campo_descr = $this->get_campo_descr($campo); + if (empty($campo_descr)) { + // No es un ID interno + return $campos[$campo]['se_imprime']; + } + } else { + // Si el campo es descripción de un id interno, se asocia a la configuración + // de impresión de ese campo. + $campo_id = $this->get_campo_id($campo); + if (!is_null($campo_id)) { + return $campos[$campo_id]['se_imprime']; + } + } + return false; + } + + //-------------------------------------------------------------------------- + + /** + * Verifica si existe al menos un campo en un agrupado de una sección que + * esté definido como visible + * + * @param string $seccion + * @param string $agrupado + * @return boolean + */ + function hay_visibles_agrupado($seccion, $agrupado) + { + $campos_seccion = $this->get_campos_seccion($seccion); + $campos_agrupado = $campos_seccion[$agrupado]; + + foreach ($campos_agrupado as $campo) { + if ($this->visible($campo)) { + return true; + } + } + return false; + } + + /** + * Verifica si existe al menos un campo en un agrupado de una sección que + * esté definido como imprimible + * + * @param string $seccion + * @param string $agrupado + * @return boolean + */ + function hay_imprimibles_agrupado($seccion, $agrupado) + { + $campos_seccion = $this->get_campos_seccion($seccion); + $campos_agrupado = $campos_seccion[$agrupado]; + + foreach ($campos_agrupado as $campo) { + if ($this->se_imprime($campo)) { + return true; + } + } + return false; + } + + /** + * Verifica si existen campos imprimibles en una sección de formulario + * + * @param string $seccion + * @return boolean + */ + function hay_visibles_seccion($seccion) + { + $campos_seccion = $this->get_campos_seccion($seccion); + foreach ($campos_seccion as $agrupado => $campos) { + if ($this->hay_visibles_agrupado($seccion, $agrupado)) { + return true; + } + } + return false; + } + + /** + * Verifica si existen campos visibles en una sección de formulario + * + * @param string $seccion + * @return boolean + */ + function hay_imprimibles_seccion($seccion) + { + $campos_seccion = $this->get_campos_seccion($seccion); + foreach ($campos_seccion as $agrupado => $campos) { + if ($this->hay_imprimibles_agrupado($seccion, $agrupado)) { + return true; + } + } + return false; + } + + //-------------------------------------------------------------------------- + + /** + * Mantiene mapeos campo_id => campo_descr + * para campos que almacenan internamente un id, pero se exhibe una + * descripción en el formulario (generalmente se utilizan selectores) + * + * Ejemplo: 'titulo_secundario' => 'titulo_secundario_descr' + */ + protected function inicializar_mapeos_id_descripcion() + { + // Mapeo campo_id => campo_descr + if (!isset($this->campos_id)) { + $this->campos_id = array( + 'tipo_documento' => 'tipo_documento_desc', + 'pais_documento' => 'pais_documento_desc', + 'nacionalidad' => 'nacionalidad_desc', + 'loc_nacimiento' => 'loc_nac_descr', + 'loc_per_lect' => 'loc_per_lect_descr', + 'loc_proc' => 'loc_proc_descr', + 'loc_pers_alleg' => 'loc_pers_alleg_descr', + 'colegio_secundario' => 'colegio_secundario_descr', + 'titulo_secundario' => 'titulo_secundario_descr', + ); + } + + // Mapeo inverso: campo_descr => campo_id + if (!isset($this->campos_descr)) { + $this->campos_descr = []; + foreach ($this->campos_id as $id => $descr) { + $this->campos_descr[$descr] = $id; + } + } + } + + /** + * Obtiene el campo ID de un campo descriptivo + * Si no tiene, retorna null + */ + function get_campo_id($campo_descr) + { + $salida = isset($this->campos_descr[$campo_descr]) ? $this->campos_descr[$campo_descr] : null; + return $salida; + } + + /** + * Obtiene el campo descriptivo a partir de un campo ID + * Si no tiene, retorna null + */ + function get_campo_descr($campo_id) + { + $salida = isset($this->campos_id[$campo_id]) ? $this->campos_id[$campo_id] : null; + return $salida; + } + + function get_etiqueta($campo) + { + if (isset($this->campos_descr[$campo])) { + $campo = $this->campos_descr[$campo]; + } + $campo_pers = 'pdf_' . $campo; + $etiqueta = kernel::traductor()->trans($campo_pers); + if ($campo_pers != $etiqueta) { + return $etiqueta; + } else { + return kernel::traductor()->trans($campo); + } + } + + /** + * Campos del formulario de Preinscripción + * + * @return array + */ + function get_campos_preinscripcion() + { + if (empty($this->campos_preinscripcion)) { + $this->campos_preinscripcion = util::consultas()->get_campos_formulario_preinscripcion(); + } + return $this->campos_preinscripcion; + } + + /** + * Obtiene una estructura de organización de secciones y campos + * + * @return array + */ + function get_campos_secciones() + { + if (!isset($this->campos_secciones)) { + $this->campos_secciones = []; + $this->campos_secciones['datos_adicionales'] = []; + $this->campos_secciones['datos_adicionales']['turno_preferido'] = array('turno_preferido'); + $this->campos_secciones['datos_adicionales']['como_conocio_institucion'] = array('como_conocio_institucion'); + $this->campos_secciones['datos_adicionales']['otras_inscripciones'] = array('insc_otra_inst', 'insc_otra_inst_descr'); + $this->campos_secciones['datos_adicionales']['motivo_eleccion_inst'] = array('mot_inst_econom', 'mot_inst_prestigio', 'mot_inst_difusion', + 'mot_inst_rec_estud', 'mot_inst_rec_amigos', 'mot_inst_sist_ing', 'mot_inst_ubicacion', 'mot_inst_otros'); + $this->campos_secciones['datos_adicionales']['motivo_eleccion_prop'] = array('mot_prop_vocacion', 'mot_prop_sug_fam', + 'mot_prop_rec_social', 'mot_prop_ins_lab', 'mot_prop_perf_prof', 'mot_prop_mejora_ec', 'mot_prop_util_soc', 'mot_prop_otros', ); + + //------------------------------------------------------------------ + $this->campos_secciones['datos_principales'] = []; + $this->campos_secciones['datos_principales']['datos_principales_pers'] = array( + 'apellido', 'nombres','apellido_elegido', 'nombres_elegido', 'pais_documento_desc', 'tipo_documento_desc', 'nro_documento', + 'nacionalidad_desc', 'sexo','identidad_genero','identidad_genero_otro', 'numero_cuil', 'e_mail', 'celular_caracteristica', 'celular_valor', + 'celular_numero'); + $this->campos_secciones['datos_principales']['datos_principales_nacim'] = array('fecha_nacimiento', 'loc_nacimiento', 'loc_nac_descr'); + $this->campos_secciones['datos_principales']['datos_principales_ci'] = array('ent_emisora_ci', 'nro_ci'); + $this->campos_secciones['datos_principales']['datos_principales_pasap'] = array('pais_emisor_pasap', 'nro_pasap'); + $this->campos_secciones['datos_principales']['datos_principales_visa'] = array('tipo_visa', 'otorgamiento_visa', 'vencimiento_visa'); + $this->campos_secciones['datos_principales']['datos_principales_res'] = array('residencia', 'fecha_respre_otorg', 'fecha_respre_venc'); + $this->campos_secciones['datos_principales']['pueblos_originarios'] = array('pertenece_pueblo_originario', 'pueblo_originario', 'pueblo_originario_otro'); + //------------------------------------------------------------------ + $this->campos_secciones['datos_personales'] = []; + $this->campos_secciones['datos_personales']['domicilio_per_clases'] = array('calle_per_lect', + 'numero_per_lect', 'piso_per_lect', 'dpto_per_lect', 'unidad_per_lect', 'loc_per_lect', + 'loc_per_lect_descr', 'cp_per_lect', 'barrio_per_lec', 'te_per_lect', 'tipo_res_per_lect', 'vive_actual_con'); + $this->campos_secciones['datos_personales']['domicilio_procedencia'] = array('calle_proc', + 'numero_proc', 'piso_proc', 'dpto_proc', 'unidad_proc', 'loc_proc', 'loc_proc_descr', 'cp_proc', 'barrio_proc', 'te_proc'); + $this->campos_secciones['datos_personales']['persona_allegada'] = array('apellido_pers_alleg', 'nombre_pers_alleg', 'tipo_allegado', + 'calle_pers_alleg', 'nro_pers_alleg', 'piso_pers_alleg', 'dpto_pers_alleg', 'unidad_pers_alleg', + 'loc_pers_alleg', 'loc_pers_alleg_descr', 'cp_pers_alleg', 'barrio_alleg', 'te_pers_alleg'); + //------------------------------------------------------------------ + $this->campos_secciones['financiamiento'] = []; + $this->campos_secciones['financiamiento']['financ_fuente'] = array('alu_cos_est_ap_fam', + 'alu_cos_est_plsoc', 'alu_cos_est_trab', 'alu_cos_est_beca', 'alu_cos_est_otra', 'alu_cos_est_espec'); + $this->campos_secciones['financiamiento']['financ_beca_fuente'] = array('tiene_beca_univ', + 'tiene_beca_inter', 'tiene_beca_nacio', 'alu_beca_prov', 'alu_beca_muni', 'alu_beca_otra'); + $this->campos_secciones['financiamiento']['financ_beca_tipo'] = array('alu_beca_tipo_eco', + 'alu_beca_tipo_inv', 'alu_beca_tipo_ser'); + $this->campos_secciones['financiamiento']['financ_beca_tipo_econom'] = array('alu_beca_eco_tran', + 'alu_beca_eco_efec', 'alu_beca_eco_foto', 'alu_beca_eco_habi', 'alu_beca_eco_come'); + //------------------------------------------------------------------ + $this->campos_secciones['datos_laborales'] = []; + $this->campos_secciones['datos_laborales']['datos_laborales_sit'] = array('existe_trab_alum', + 'alu_trab_hace', 'alu_trab_ocup', 'hora_sem_trab_alum', 'rel_trab_propuesta', 'alu_trab_tarea'); + $this->campos_secciones['datos_laborales']['datos_laborales_adic'] = array('alu_trab_desjub', + 'alu_trab_fami', 'remuneracion'); + //------------------------------------------------------------------ + $this->campos_secciones['datos_familiares'] = []; + $this->campos_secciones['datos_familiares']['situacion_familiar'] = array('estado_civil', + 'alu_est_civil_uh', 'cant_hijos_alum', 'cant_fami_cargo'); + $this->campos_secciones['datos_familiares']['datos_padre'] = array('apellido_padre', 'nombres_padre', + 'padre_vive', 'ult_est_cur_padre', 'sit_laboral_padre', 'padre_trab_hace', 'padre_trab_ocup', + 'padre_trab_tarea', 'padre_trab_otro'); + $this->campos_secciones['datos_familiares']['datos_madre'] = array('apellido_madre', 'nombres_madre', + 'madre_vive', 'ult_est_cur_madre', 'sit_laboral_madre', 'madre_trab_hace', 'madre_trab_ocup', + 'madre_trab_tarea', 'madre_trab_otro'); + //------------------------------------------------------------------ + $this->campos_secciones['datos_estudios'] = []; + $this->campos_secciones['datos_estudios']['orientacion_vocacional'] = array('orientacion_recibida'); + $this->campos_secciones['datos_estudios']['datos_estudios_sec'] = array('es_mayor_25_sin_secundario','anio_egreso_sec', 'adeuda_materias', + 'colegio_secundario', 'colegio_secundario_descr', 'titulo_secundario', 'titulo_secundario_descr'); + $this->campos_secciones['datos_estudios']['datos_estudios_sup'] = array('alu_otestsup_uni', + 'alu_otestsup_tipo', 'alu_otestsup_carr', 'alu_otestsup_niv', 'alu_otestsup_area', + 'alu_otestsup_esta', 'alu_otestsup_egre', 'alu_otestsup_razon_abandono', 'alu_otestsup_razon_abandono_otros'); + //------------------------------------------------------------------ + $this->campos_secciones['tecnologia'] = []; + $this->campos_secciones['tecnologia']['dispon_pc'] = array('alu_tec_pc_casa', + 'alu_tec_pc_trab', 'alu_tec_pc_univ', 'alu_tec_pc_otro'); + $this->campos_secciones['tecnologia']['accede_internet_en'] = array('alu_tec_int_movil', + 'alu_tec_int_casa', 'alu_tec_int_trab', 'alu_tec_int_univ', 'alu_tec_int_otro'); + //------------------------------------------------------------------ + $this->campos_secciones['deportes'] = []; + $this->campos_secciones['deportes']['deportes'] = array('practica_deportes'); + $this->campos_secciones['deportes']['listado_deportes_lugares'] = array('hace_dep_gim_priv', + 'hace_dep_univ', 'hace_dep_partic', 'hace_dep_otros'); + $this->campos_secciones['deportes']['listado_deportes'] = array('prac_dep_futbol', + 'prac_dep_basquet', 'prac_dep_voley', 'prac_dep_gimnasia', 'prac_dep_tenis', + 'prac_dep_natacion', 'prac_dep_handball', 'prac_dep_otros'); + //------------------------------------------------------------------ + $this->campos_secciones['idiomas'] = []; + $this->campos_secciones['idiomas']['conoc_idiomas'] = array('alu_idioma_ingl', + 'alu_idioma_alem', 'alu_idioma_fran', 'alu_idioma_ital', 'alu_idioma_port', + 'alu_idioma_chino', 'alu_idioma_otro', 'alu_idioma_otro_nivel'); + //------------------------------------------------------------------ + $this->campos_secciones['datos_salud'] = []; + $this->campos_secciones['datos_salud']['salud'] = array('obra_social_alu', 'es_celiaco'); + //------------------------------------------------------------------ + $this->campos_secciones['discapacidad'] = []; + $this->campos_secciones['discapacidad']['cond_discapacidad'] = ['condicion_discapacidad', 'tiene_cud']; + $this->campos_secciones['discapacidad']['listado_discapacidad_tipos'] = ['disc_auditiva', 'disc_visual', 'disc_motora', 'disc_cond_psicosocial', 'disc_otra']; + $this->campos_secciones['discapacidad']['auditiva'] = ['aud_tipo', 'aud_lenguaje_senias', 'aud_lenguaje_labial', 'aud_comunicacion_otra', 'aud_apoyo_vida_diaria', 'aud_req_interprete_lengua_senias', 'aud_req_aro_magnetico', 'aud_req_otros_apoyos', 'aud_otros_apoyos']; + $this->campos_secciones['discapacidad']['visual'] = ['vis_dificultad_para_ver', 'vis_apoyo_vida_diaria', 'vis_req_archivo_audio', 'vis_req_texto_digital', 'vis_req_texto_braile', 'vis_req_otros_apoyos', 'vis_otros_apoyos']; + $this->campos_secciones['discapacidad']['motora'] = ['mot_apoyo_vida_diaria', 'mot_req_apoyo_aula', 'mot_apoyo_aula', 'mot_req_otros_apoyos', 'mot_otros_apoyos']; + $this->campos_secciones['discapacidad']['psicosocial'] = ['psi_descripcion', 'psi_apoyo_vida_diaria', 'psi_req_otros_apoyos', 'psi_otros_apoyos']; + $this->campos_secciones['discapacidad']['otras'] = ['otra_descripcion', 'otra_req_apoyo_vida_diaria', 'otra_apoyo_vida_diaria']; + $this->campos_secciones['discapacidad']['importante'] = ['informacion_importante']; + } + + return $this->campos_secciones; + } + + /** + * Obtiene los campos de las secciones, sin la subdivisión de las subsecciones. + * + * @return array + */ + function get_campos_secciones_aplanado() + { + $campos_secciones = $this->get_campos_secciones(); + $salida = []; + foreach ($campos_secciones as $seccion_nombre => $subseccion) { + $salida[$seccion_nombre] = []; + foreach ($subseccion as $subseccion_campos) { + $salida[$seccion_nombre] = array_merge($salida[$seccion_nombre], $subseccion_campos); + } + } + return $salida; + } + + function get_campos_seccion($seccion) + { + $datos = $this->get_campos_secciones(); + if (isset($datos[$seccion])) { + return $datos[$seccion]; + } + return []; + } + + function get_campos_configurables() + { + $campos_preinsc = $this->get_campos_preinscripcion(); + $campos_no_config = ['id_preinscripcion', 'usuario', 'clave', + 'codigo_validacion', 'e_mail', 'email_valido', 'facebook', 'google', + 'fecha_registro', 'fecha_ult_modif', 'version_modificacion', + 'version_impresa', 'estado', 'apellido', 'nombres']; + return array_diff($campos_preinsc, $campos_no_config); + } + + function get_campos_no_ocultables_obligatorios() + { + $campos = ['pais_documento', 'pais_nacionalidad', 'tipo_documento', + 'apellido', 'nombres', 'fecha_nacimiento', 'nacionalidad', + 'nro_documento', 'sede', 'sexo', 'unidad_academica', 'fecha_respre_venc', 'e_mail', 'es_mayor_25_sin_secundario', + 'condicion_discapacidad', 'tiene_cud', 'disc_auditiva', 'disc_visual', 'disc_motora', 'disc_cond_psicosocial', 'disc_otra', + 'aud_tipo', 'aud_lenguaje_senias', 'aud_lenguaje_labial', 'aud_comunicacion_otra', 'aud_apoyo_vida_diaria', 'aud_req_interprete_lengua_senias', 'aud_req_aro_magnetico', 'aud_req_otros_apoyos', 'aud_otros_apoyos', + 'vis_dificultad_para_ver', 'vis_apoyo_vida_diaria', 'vis_req_archivo_audio', 'vis_req_texto_digital', 'vis_req_texto_braile', 'vis_req_otros_apoyos', 'vis_otros_apoyos', + 'mot_apoyo_vida_diaria', 'mot_req_apoyo_aula', 'mot_apoyo_aula', 'mot_req_otros_apoyos', 'mot_otros_apoyos', + 'psi_descripcion', 'psi_apoyo_vida_diaria', 'psi_req_otros_apoyos', 'psi_otros_apoyos', + 'otra_descripcion', 'otra_req_apoyo_vida_diaria', 'otra_apoyo_vida_diaria', + 'informacion_importante', + 'apellido_elegido', 'nombres_elegido', 'identidad_genero', 'identidad_genero_otro']; + return $campos; + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/acceso/cambiar_email/default.twig b/src/siu/operaciones/acceso/cambiar_email/default.twig new file mode 100644 index 0000000..6d75db3 --- /dev/null +++ b/src/siu/operaciones/acceso/cambiar_email/default.twig @@ -0,0 +1,131 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% if this.estado == 'inicial' %} + {% import "kernel/macro_recaptcha.twig" as recaptcha %} + {{ recaptcha.script() }} +

{{"no_puedo_acceder_a_mi_mail"|trans|capitalize}}

+ {% if this.data.mensajes %} + {% import "kernel/macro_notificaciones.twig" as notificaciones %} + {{ notificaciones.render_notif(this.data.mensajes) }} + {% endif %} + +
+ +
+

{{"descripcion_recuperar_codigo"|trans}}

+
+
+ +
+ +
+
+ +
+ {{ recaptcha.widget() }} +
+ + + + +
+
+
+
+
+ +
+ + + +
+ + +
+ + +
+ +
+ +
+ +
+ +
+
+ {{ recaptcha.widget() }} +
+ +
+
+ +
+
+
+
+
+ {% elseif this.estado == constant('siu\\operaciones\\acceso\\pagelet_cambiar_email::ERROR') %} +

{{"Error" |trans }}

+ + {% if this.data.mensajes %} + {% import "kernel/macro_notificaciones.twig" as notificaciones %} + {{ notificaciones.render_notif(this.data.mensajes) }} + {% endif %} +

{{"para_recuperar_tu_acceso_contacta" | trans }}

+
+

{{"datos_de_contacto" | trans({'%1%': this.data.datos_ayuda.datos_ayuda_telefono,'%2%':this.data.datos_ayuda.datos_ayuda_email} )|raw}}

+
+ {{'volver'|trans|capitalize}} + + {% elseif this.estado == constant('siu\\operaciones\\acceso\\pagelet_cambiar_email::EXITO') %} + + {% if this.data.mensajes %} + {% import "kernel/macro_notificaciones.twig" as notificaciones %} + {{ notificaciones.render_notif(this.data.mensajes) }} + {% endif %} +

{{"Se modifico correctamente el e-mail" | trans }}

+ + {{'volver'|trans|capitalize}} + + {% elseif this.estado == constant('siu\\operaciones\\acceso\\pagelet_cambiar_email::CAMBIAR_EMAIL') %} +

{{"ingresa_nuevo_email"|trans|capitalize}}

+ + {% if this.data.mensajes %} + {% import "kernel/macro_notificaciones.twig" as notificaciones %} + {{ notificaciones.render_notif(this.data.mensajes) }} + {% endif %} +
+

{{ "descripcion_ingresa_nuevo_email"|trans }}

+
+ +
+ + +
+ +
+ {% endif %} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/acceso/cambiar_email/pagelet_cambiar_email.js b/src/siu/operaciones/acceso/cambiar_email/pagelet_cambiar_email.js new file mode 100644 index 0000000..db1643e --- /dev/null +++ b/src/siu/operaciones/acceso/cambiar_email/pagelet_cambiar_email.js @@ -0,0 +1,57 @@ +kernel.renderer.registrar_pagelet('cambiar_email', function(info) { + var id = '#' + info.id; + + var errores_formulario = false; + return { + onload: function() { + $('#formulario_codigo').submit(function () + { + if( $("#codigo").val() ==''){ + + kernel.ui.show_mensaje('Error en el formulario', {tipo: 'alert-error'}); + return false; + } + }); + $('#formulario_pregunta_secreta').submit(function () + { + if(( $("#respuesta_secreta").val() =='') || ( $("#combo_propuestas").val() =='') || ( $("#fecha_nacimiento").val() =='')){ + + kernel.ui.show_mensaje('Error en el formulario', {tipo: 'alert-error'}); + return false; + } + }); + //---- Date Picker ------------------------------------------------- + $.datepicker.setDefaults( $.datepicker.regional["es"] ); + $('input.date').datepicker({ + changeMonth: true, + changeYear: true, + firstDay:0, + dateFormat: 'dd/mm/yy', + yearRange: "-150:+0" + }); + //----Fin Date Picker ------------------------------------------------- + $('#formulario_codigo').hide(); + $('#formulario_pregunta_secreta').hide(); + $('#radio_codigo').click(function(){ + //oculto formulario + $('#formulario_pregunta_secreta').hide(); + $('#formulario_codigo').show(); + $('#radio_pregunta_secreta').prop('checked', false); + resetform() + }); + $('#radio_pregunta_secreta').click(function(){ + //oculto formulario email y muestro docuemento + $('#formulario_codigo').hide(); + $('#formulario_pregunta_secreta').show(); + $('#radio_codigo').prop('checked', false); + resetform() + }); + + + function resetform() { + $("form select").each(function() { this.selectedIndex = 0 }); + $("form input[type=text] , form textarea").each(function() { this.value = '' }); + } + } + } +}) diff --git a/src/siu/operaciones/acceso/contenido_login/default.css b/src/siu/operaciones/acceso/contenido_login/default.css new file mode 100644 index 0000000..e69de29 diff --git a/src/siu/operaciones/acceso/contenido_login/default.twig b/src/siu/operaciones/acceso/contenido_login/default.twig new file mode 100644 index 0000000..c26743e --- /dev/null +++ b/src/siu/operaciones/acceso/contenido_login/default.twig @@ -0,0 +1,5 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} +

{{"nombre_sistema"|trans}}

+ {{"texto_portada"|trans|raw}} +{% endblock %} diff --git a/src/siu/operaciones/acceso/contenido_login/pagelet_contenido_login.js b/src/siu/operaciones/acceso/contenido_login/pagelet_contenido_login.js new file mode 100644 index 0000000..79cc230 --- /dev/null +++ b/src/siu/operaciones/acceso/contenido_login/pagelet_contenido_login.js @@ -0,0 +1,8 @@ +kernel.renderer.registrar_pagelet('contenido_login', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + } + } +}) diff --git a/src/siu/operaciones/acceso/controlador.php b/src/siu/operaciones/acceso/controlador.php new file mode 100644 index 0000000..53aecd0 --- /dev/null +++ b/src/siu/operaciones/acceso/controlador.php @@ -0,0 +1,516 @@ +vista()->set_pagelet('form_login'); + $op_defecto = kernel::persona()->perfil()->get_parametro('index'); + + // Recupero el tipo de Autenticación + $auth = $this->get_param('auth', 'get'); + // Por defecto entra a "Ingresá con tu Email" + $pagelet->data['auth'] = (empty($auth))? 'form' : $auth; + + if (kernel::sesion()->abierta()) { + $this->nuevo_request($op_defecto); + } + + /** + * Se resetean variables de servicios externos de login, en el caso que + * se regrese de la pantalla de alta habiendo accedido desde Facebook o + * Google + */ + if (kernel::sesion()->esta_seteada('alta_se_medio')) { + kernel::sesion()->borrar('alta_se_medio'); + } + if (kernel::sesion()->esta_seteada('alta_se_id')) { + kernel::sesion()->borrar('alta_se_id'); + } + if (kernel::sesion()->esta_seteada('alta_se_mail')) { + kernel::sesion()->borrar('alta_se_mail'); + } + + if (kernel::sesion()->esta_seteada('id_se')) { + kernel::sesion()->borrar('id_se'); + } + if (kernel::sesion()->esta_seteada('mail_se')) { + kernel::sesion()->borrar('mail_se'); + } + if (kernel::sesion()->esta_seteada('medio_se')) { + kernel::sesion()->borrar('medio_se'); + } + if (kernel::sesion()->esta_seteada('datos_usuario')) { + kernel::sesion()->borrar('datos_usuario'); + } + } + + function accion__servicios_externos() + { + try { + $servicio = kernel::url()->get_param(0); + $datos = preinscripcion::servicios_externos()->llamar($servicio); + if (!empty($datos)) { + $this->login_externo($datos['id'], $datos['email'], $servicio); + } + } catch (error_kernel_validacion $e) { + $this->vista()->set_pagelet('form_login'); + $this->add_var('msg_error', $this->trans('login_error_formato_mail')); + } catch (error_preinscripcion_login $e) { + $this->vista()->set_pagelet('form_login'); + $this->add_var('msg_error', $this->trans('login_error_clave_invalida')); + } catch (error_preinscripcion_mail_no_validado $e) { + $this->vista()->set_pagelet('form_login'); + $this->add_var('msg_error', $this->trans('email_no_validado')); + } catch (error_preinscripcion_login_externo $e) { + $this->vista()->set_pagelet('form_login'); + $this->add_var('msg_error', $e->getMessage()); + } + } + + function accion__recuperar() + { + $pagelet = $this->vista()->set_pagelet('recuperar_pass'); + + // Si la petición es POST es porque hizo el submit del formulario donde pide el E-mail + if (kernel::request()->isPost()) { + try { + $email = $this->get_post('e_mail'); + if (empty($email)){ + //busco por los datos del documento el email + $email_xdocumento= $this->validar_email_x_documento(); + if(empty($email_xdocumento)){ + //no son validos los datos + $pagelet->set_estado_info(pagelet_recuperar_pass::MAIL_NO_EXISTENTE); + return; + }else{ + $email=$email_xdocumento['e_mail']; + + } + }else{ + $email = $this->validate_param('e_mail', 'post', validador::TIPO_MAIL); + $email_raw = $this->get_usuario_sin_validar(); + } + + // Validación de reCAPTCHA + $exito = static::check_recaptcha2(); + if (!$exito) { + $this->add_error($this->trans('error_recaptcha')); + return; + } + + // Le cambio 'codigo_validacion' y 'codigo_validacion_alta' para que pueda recuperar clave + $token = preinscripcion::usuario()->solicitud_resetear_clave($email); + // Le envío el email de recuperación + $this->enviar_mail_recuperar_pass($email, $token); + $pagelet->set_estado_info(pagelet_recuperar_pass::MAIL_ENVIADO); + $this->add_var('email', $email); + kernel::sesion()->set('email',$email); + } catch (error_kernel_validacion $e) { + $this->add_error($this->trans('login_error_formato_mail'), $e); + $this->add_var('nombre_usuario', $email_raw); + } catch (error_preinscripcion_login $e) { + $pagelet->set_estado_info(pagelet_recuperar_pass::MAIL_NO_EXISTENTE); + } + } + } + + function accion__reenvio_mail() + { + $cambiar_mensaje = $this->get_param('camb_msj', 'get'); + + $datos_usuario = kernel::sesion()->get('__datos_reenvio_mail__'); + + $email = $datos_usuario['e_mail']; + $token = $datos_usuario['codigo_validacion']; + $this->enviar_mail_crear_usuario($email, $token); + if ($cambiar_mensaje) { + kernel::sesion()->set('mensaje_alta_iniciada', 'mensaje_recuperacion'); + } + + $this->redirigir(); + } + + protected function enviar_mail_crear_usuario($dir_mail, $token) + { + // Obtener datos a partir del e_mail + $datos = util::consultas()->get_datos_basicos_cuenta($dir_mail); + + $asunto = $this->trans('asunto_email_crear_usuario'); + $tpl = kernel::load_template('form_login/mail_crear_usuario.twig'); + $link = kernel::vinculador()->crear('acceso', 'login', array( + 'auth' => 'token', + 't' => $token + )); + $cuerpo = $tpl->render(array( + 'mail' => $dir_mail, + 'link' => $link, + 'apellido' => $datos['apellido'], + 'nombres' => $datos['nombres'], + 'nacionalidad' => $datos['nacionalidad_desc'], + 'pais_documento' => $datos['pais_documento_desc'], + 'tipo_documento' => $datos['tipo_documento_desc'], + 'nro_documento' => $datos['nro_documento'], + 'id_preinscripcion' => $datos['id_preinscripcion'], + )); + + $mail = new mail($dir_mail, $asunto, $cuerpo, null, '', preinscripcion::charset); + $mail->set_html(true); + + $mail->enviar(); + } + + function accion__reset_pass() + { + $pagelet = $this->vista()->set_pagelet('recuperar_pass'); + + // Si la petición es POST es porque hizo el submit del formulario donde pide la nueva contraseña + if (kernel::request()->isPost()) { + try { + $token = $this->validate_param('token', 'post', validador::TIPO_ALPHANUM); + $password = $this->validate_param('password', 'post', validador::TIPO_TEXTO); + $rpassword = $this->validate_param('rpassword', 'post', validador::TIPO_TEXTO); + + // Validación de reCAPTCHA + $exito = static::check_recaptcha2(); + if (!$exito) { + throw new error_preinscripcion_usuario(kernel::traductor()->trans('error_recaptcha')); + } + + // Validación de contraseña + $this->check_passwords($token); + + $datos = preinscripcion::usuario()->resetear_clave($password, $token); + kernel::sesion()->set('mensaje_clave_reset', 'mensaje_clave_reset'); + $this->redirigir(); + } catch (error_preinscripcion_clave $e) {// Cuando falla la contraseña + $this->add_var('token', $token); + $this->add_error($this->trans($e->get_mensaje())); + $pagelet->set_estado_info(pagelet_recuperar_pass::TOKEN_CORRECTO); + } catch (error_preinscripcion_usuario $e) {// Cuando falla el reCAPTCHA + $this->add_var('token', $token); + $this->add_error($this->trans($e->get_mensaje())); + $pagelet->set_estado_info(pagelet_recuperar_pass::TOKEN_CORRECTO); + } catch (error_kernel_validacion $e) { + $pagelet->set_estado_info(pagelet_recuperar_pass::TOKEN_INCORRECTO); + } catch (error_preinscripcion $e) { + $pagelet->set_estado_info(pagelet_recuperar_pass::TOKEN_INCORRECTO); + } + } else {// Si la petición es GET muestro formulario donde pide la nueva contraseña + try { + $token = $this->validate_param('t', 'get', validador::TIPO_ALPHANUM); + $datos = preinscripcion::usuario()->validar_resetear_clave($token); + $this->add_var('token', $token); + + // Si el código validación expiró le muestro un mensaje + if ($datos['codigo_validacion_expirado']) { + $pagelet->set_estado_info(pagelet_recuperar_pass::TOKEN_EXPIRADO); + } else {// Sino lo llevo a la pantalla para cambiar la contraseña + $pagelet->set_estado_info(pagelet_recuperar_pass::TOKEN_CORRECTO); + } + + } catch (error_preinscripcion $e) { + $pagelet->set_estado_info(pagelet_recuperar_pass::TOKEN_INCORRECTO); + } + } + } + + function accion__cambiar_email() + { + $pagelet = $this->vista()->set_pagelet('cambiar_email'); + $pagelet->set_estado_info(pagelet_cambiar_email::INICIAL); + + } + function accion__nuevo_email() + { + $email_nuevo = $this->validate_param('nuevo_email', 'post', validador::TIPO_MAIL); + $email_viejo = kernel::sesion()->get('email'); + try { + $this->controlar_email($email_nuevo); + preinscripcion::usuario()->cambiar_email($email_viejo, $email_nuevo); + $token = preinscripcion::usuario()->solicitud_resetear_clave($email_nuevo); + // Le envío el email de recuperación + $this->enviar_mail_recuperar_pass($email_nuevo, $token); + kernel::sesion()->borrar('email'); + $pagelet = $this->vista()->set_pagelet('cambiar_email'); + $pagelet->set_estado_info(pagelet_cambiar_email::EXITO); + } catch (error_kernel_validacion $e) { + $this->add_error($e->get_mensaje(), $e); + $pagelet = $this->vista()->set_pagelet('cambiar_email'); + $pagelet->set_estado_info(pagelet_cambiar_email::CAMBIAR_EMAIL); + } + } + + function accion__validar() + { + $valido = false; + $email = kernel::sesion()->get('email'); + $codigo = $this->validate_param('codigo', 'post', validador::TIPO_TEXTO); + + + if (empty($codigo)) {//valido por pregunta_secreta + $respuesta_secreta = $this->validate_param('respuesta_secreta', 'post', validador::TIPO_TEXTO); + $fecha_nacimiento = $this->validate_param('fecha_nacimiento', 'post', validador::TIPO_TEXTO); + $propuesta = $this->validate_param('combo_propuestas', 'post', validador::TIPO_TEXTO); + $id_preinscipcion = preinscripcion::usuario()->email_pregunta_secreta_fecha_nacimento_existente($email, $respuesta_secreta, $fecha_nacimiento); + $combo_propuestas = array_keys(kernel::sesion()->get('combo_propuestas')); + if (empty($id_preinscipcion)) { + $valido = false; + } elseif (!empty($respuesta_secreta)) { + $propuestas_ins = array_column(util::consultas()->get_propuestas_insc($id_preinscipcion['id_preinscripcion']), 'propuesta'); + if (in_array($propuesta, $propuestas_ins) or ( $propuesta == 'ninguna' && empty(array_intersect($propuestas_ins, $combo_propuestas)) )) { + $valido = true; + } else { + $valido = false; + } + } else { + $valido = false; + } + } else { + $valido = preinscripcion::usuario()->get_usuario_codigo($email, $codigo); + } + kernel::sesion()->borrar('combo_propuestas'); + if ($valido) { + $pagelet = $this->vista()->set_pagelet('cambiar_email'); + $pagelet->set_estado_info(pagelet_cambiar_email::CAMBIAR_EMAIL); + } else { + //mensaje de error die('no coinciden los datos'); + $pagelet = $this->vista()->set_pagelet('cambiar_email'); + $pagelet->set_estado_info(pagelet_cambiar_email::ERROR); + } + } + + function accion__logout() + { + kernel::sesion()->cerrar(); + $this->nuevo_request('acceso', 'index'); + } + + //-------------------------------------------------------------------------- + //---- Métodos auxiliares -------------------------------------------------- + //-------------------------------------------------------------------------- + + protected function check_passwords($token) + { + $clave = trim($this->validate_param('password', 'post', validador::TIPO_TEXTO)); + $rclave = trim($this->validate_param('rpassword', 'post', validador::TIPO_TEXTO)); + + if ($clave != $rclave) { + $mensaje = kernel::traductor()->trans('error_clave_no_coinciden'); + throw new error_preinscripcion_clave($mensaje); + } + + $usuario = preinscripcion::usuario()->get_usuario_asociado_token($token); + if (empty($usuario)) { + throw new error_preinscripcion(); + } + + // Validaciones genéricas de clave + preinscripcion::usuario()->clave_permitida($clave, $usuario); + + return true; + } + + protected function login($email, $password) + { + kernel::sesion()->abrir($email, $password); + kernel::persona()->set_email($email); + intentos_login::eliminar($email); + } + + protected function login_externo($id, $mail, $medio, $forzar_login_mail = false) + { + if (!empty($mail)) { + /** + * Si existe un usuario registrado con el mail del servicio externo, + * no vinculado al mismo, se redirige a otra operación para asociar + * las cuentas. + */ + $datos = preinscripcion::usuario()->get_datos_usuario($mail); + if (!empty($datos) && empty($datos[$medio])) { + kernel::sesion()->set('id_se', $id); + kernel::sesion()->set('mail_se', $mail); + kernel::sesion()->set('medio_se', $medio); + kernel::sesion()->set('datos_usuario', $datos); + throw new \kernel\nucleo\nuevo_request('asociar_usuario_se'); + } + } + + if (!empty($id)) { + $lm = $this->get_login_manager(); + $id_preinscripcion = $lm->autenticar_login_externo($id, $mail, $medio, $forzar_login_mail); + if (!empty($id_preinscripcion)) { + // Se abre la sesión con el usuario asociado a la persona ingresada. + kernel::sesion()->abrir_login_externo($id, $mail, $medio, false, $forzar_login_mail); + + // Se obtienen los datos para establecer el mail de la persona + $datos = kernel::persona()->datos()->get_datos_formularios_preinsc(); + kernel::persona()->set_email($datos['e_mail']); + + $this->redirigir(); + } else { + kernel::sesion()->set('alta_se_medio', $medio); + kernel::sesion()->set('alta_se_id', $id); + kernel::sesion()->set('alta_se_mail', $mail); + throw new \kernel\nucleo\nuevo_request('alta_usuario'); + } + } + } + + function get_login_manager() + { + if (!isset($this->login_manager)) { + $clase = kernel::proyecto()->get_clase_login(); + if (!isset($clase)) { + throw new error_kernel('SESION: no se seteo el manejador de login'); + } + $this->login_manager = kernel::localizador()->instanciar($clase); + } + return $this->login_manager; + } + + protected function login_post_verificacion($datos) + { + kernel::sesion()->abrir_sin_autenticacion($datos['id_preinscripcion']); + kernel::persona()->set_email($datos['e_mail']); + } + + protected function add_error($mensaje, $e = null) + { + $mensajes = array(); + $mensajes[] = array( + preinscripcion::mensaje_cuerpo => $mensaje, + preinscripcion::mensaje_tipo => preinscripcion::control_error, + ); + $this->add_var('mensajes', $mensajes); + if (!is_null($e)) { + kernel::log()->add_error($e); + } + } + + protected function redirigir() + { + $this->nuevo_request(kernel::persona()->perfil()->get_parametro('index')); + } + + //-------------------------------------------------------------------------- + //---- RECUPERACIÓN DE CUENTA ---------------------------------------------- + //-------------------------------------------------------------------------- + + protected function enviar_mail_recuperar_pass($dir_mail, $token) + { + $asunto = $this->trans('asunto_email_recuperar_clave'); + $tpl = kernel::load_template('recuperar_pass/mail_recover.twig'); + $link = kernel::vinculador()->crear('acceso', 'reset_pass', array( + 't' => $token + )); + $cuerpo = $tpl->render(array( + 'mail' => $dir_mail, + 'link' => $link + )); + + $mail = new mail($dir_mail, $asunto, $cuerpo, null, '', preinscripcion::charset); + $mail->set_html(true); + + $mail->enviar(); + } + + protected function get_usuario_sin_validar() + { + return substr($this->get_post('e_mail'), 0, 100); + } + + function validar_email_x_documento() + { + $pais_documento = $this->validate_param('pais', 'post', validador::TIPO_ALPHANUM); + $tipo_documento = $this->validate_param('tipo_documento', 'post', validador::TIPO_ALPHANUM); + $numero_documento = $this->validate_param('documento', 'post', validador::TIPO_ALPHANUM); + $fecha_nacimiento = $this->validate_param('fecha_nacimiento', 'post', validador::TIPO_TEXTO); + + $datos_usuario = preinscripcion::usuario()->documento_nacimiento_existente($pais_documento, $tipo_documento, $numero_documento, $fecha_nacimiento); + return $datos_usuario; + } + + function get_opciones__paises() + { + return util::opciones()->get_paises(); + } + function get_pregunta_secreta() + { + $email = kernel::sesion()->get('email'); + + $datos= preinscripcion::usuario()->get_datos_usuario($email); + + return trim($datos['pregunta_secreta']); + } + + function get_combo_propuestas_preinscriptas() + { + //$email = $this->validate_param('email', 'get', validador::TIPO_MAIL); + //$datos = preinscripcion::usuario()->get_datos_usuario($email); + //$propuestas_ins = util::consultas()->get_propuestas_insc($datos['id_preinscripcion']); + $propuestas = g3::propuestas()->get_propuestas_sin_perfil_datos(); + $claves = array_keys($propuestas); + shuffle($claves); + $nro_elemento=3; + $valores_aleatorios=['Seleccione' => 'Seleccione','ninguna' => 'Ninguna de las anteriores']; + for ( $i=0; $i<$nro_elemento ; $i++){ + $clave=$claves[$i]; + $valor=$propuestas[$clave]; + $valores_aleatorios[$clave]=$valor; + } + kernel::sesion()->set('combo_propuestas',$valores_aleatorios); + return $valores_aleatorios; + } + protected function controlar_email($valores) + { + if (!empty(preinscripcion::usuario()->get_datos_usuario($valores))) { + $mensaje = kernel::traductor()->trans('alta.error.email_duplicado'); + throw new error_kernel_validacion($mensaje); + } + } + //-------------------------------------------------------------------------- + //---- Ingresá con tu Documento -------------------------------------------- + //-------------------------------------------------------------------------- + + function accion__datos_tipo_documento() + { + $pais = $this->get_param('pais', 'post'); + $condicion = "mdp_tipo_documento_pais.pais = {$pais}"; + $entidad_pais_tipo_doc = g3::entidad('tipos_documentos_pais')->get_opciones_pais($condicion); + $this->render_raw_json($entidad_pais_tipo_doc); + } +} \ No newline at end of file diff --git a/src/siu/operaciones/acceso/form_login/default.css b/src/siu/operaciones/acceso/form_login/default.css new file mode 100644 index 0000000..45195da --- /dev/null +++ b/src/siu/operaciones/acceso/form_login/default.css @@ -0,0 +1,29 @@ +#frameRC { + border: 0; +} + +.login-icon { + width: 30px; + height: 30px; +} + +.login-link { + margin: 3px; + display: inline-block; +} + +.services { + margin-top: 10px; +} + +.mensaje-login-externo { + margin-bottom: 10px; +} + +#form .accordion-toggle { + font-weight: bold; + font-size: 16px; + background-color: #58b1d1; + color: #fff; + text-align: center; +} \ No newline at end of file diff --git a/src/siu/operaciones/acceso/form_login/default.twig b/src/siu/operaciones/acceso/form_login/default.twig new file mode 100644 index 0000000..f1139ed --- /dev/null +++ b/src/siu/operaciones/acceso/form_login/default.twig @@ -0,0 +1,236 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + + {% import "kernel/macro_recaptcha.twig" as recaptcha %} + {{ recaptcha.script() }} + +

{{"ingresa_tus_datos"|trans|capitalize}}

+ + +
+ + {% if this.data.proveedores.form %} + {% set form = this.data.proveedores.form %} + + +
+ +
+
+ +
+
+ +
+ +
+
+
+ +
+ +
+
+ + {% if form.usar_captcha %} +
+ {{ recaptcha.widget() }} +
+ {% endif %} + +
+
+ +
+
+ +
+ + {% if form.error %} +
+ {{ form.error|trans({ + '%1%': this.data.url_reenviar_mail, + '%url_olvide_pass%': this.data.url_recuperar, + '%campo%': 'E-mail' + })|raw + }} +
+ {% endif %} + +
+
+
+ + + {% endif %} + + {% if this.data.proveedores.form_documento %} + {% set form_documento = this.data.proveedores.form_documento %} + + +
+ +
+
+ +
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ + {% if form_documento.usar_captcha %} +
+ {{ recaptcha.widget() }} +
+ {% endif %} + +
+
+ +
+
+ +
+ + {% if form_documento.error %} +
+ {{ form_documento.error|trans({ + '%1%': this.data.url_reenviar_mail, + '%url_olvide_pass%': this.data.url_recuperar, + '%campo%': 'Número de documento' + })|raw + }} +
+ {% endif %} + +
+
+
+ + + {% endif %} + + {% if this.data.proveedores.cuentas_ext and this.data.hay_servicios_externos %} + + {% set cuentas_ext = this.data.proveedores.cuentas_ext %} + + +
+ +
+
+ +
+ {% for serv, d in cuentas_ext.proveedores %} + + {% endfor %} + + {% if cuentas_ext.error %} +
+ {{ cuentas_ext.error + |trans({ + '%1%': this.data.url_reenviar_mail, + '%url_olvide_pass%': this.data.url_recuperar + })|raw + }} +
+ {% endif %} +
+ +
+
+
+ + + {% endif %} + +
+ + +
+ + {{'recuperar_clave'|trans|capitalize}} + +
+ +

{{'usuario_nuevo'|trans}}

+ {{'crear_nuevo_usuario'|trans|capitalize}} + +
+ +

{{'ayuda_menu.titulo'|trans}}

+ {{'header.menu.ayuda_menu'|trans|capitalize}} + +
+ + {#---- Login con servicios externos --------------------------------------#} + {% if this.data.servicios is defined and this.data.servicios %} +
+ + {% for serv, d in this.data.servicios %} + + {% endfor %} +
+ {% endif %} + +{% endblock %} diff --git a/src/siu/operaciones/acceso/form_login/mail_crear_usuario.twig b/src/siu/operaciones/acceso/form_login/mail_crear_usuario.twig new file mode 100644 index 0000000..365bdf2 --- /dev/null +++ b/src/siu/operaciones/acceso/form_login/mail_crear_usuario.twig @@ -0,0 +1,22 @@ + + + + + + +

+ {{ 'cuerpo_email_crear_usuario'|trans({ + '%mail%': mail, + '%link%': link, + '%apellido%': apellido, + '%nombres%': nombres, + '%nacionalidad%': nacionalidad, + '%pais_documento%': pais_documento, + '%tipo_documento%': tipo_documento, + '%nro_documento%': nro_documento, + '%nro_preincripcion%': id_preinscripcion + })|raw + }} +

+ + \ No newline at end of file diff --git a/src/siu/operaciones/acceso/form_login/pagelet_form_login.js b/src/siu/operaciones/acceso/form_login/pagelet_form_login.js new file mode 100644 index 0000000..7e80b0e --- /dev/null +++ b/src/siu/operaciones/acceso/form_login/pagelet_form_login.js @@ -0,0 +1,66 @@ +kernel.renderer.registrar_pagelet('form_login', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + $('#usuario').focus(); + $('#frameRC').contents().on('keypress', function(e) { + if (e.which === 13) { + $('#guarani_form_login').submit(); + } + }); + + // Cuando cambia "País emisor del documento" + $('#pais_documento').on('change', function () + { + cambio_pais_documento(); + }); + + //---- Date Picker ------------------------------------------------- + $.datepicker.setDefaults( $.datepicker.regional["es"] ); + $(id).find('input#fecha_nacimiento').datepicker({ + changeMonth: true, + changeYear: true, + firstDay: 1, + yearRange: "-150:+0", + maxDate: 0 + }); + } + }; + + function cambio_pais_documento() + { + var valor = $('#pais_documento').val(); + // Si no se seleccionó "País emisor del documento" + if (valor === null) { + $('#tipo_documento').children().remove(); + } else {// Si se seleccionó "País emisor del documento" + buscar_tipo_documento_paises(valor); + } + } + + function buscar_tipo_documento_paises(_pais_documento) + { + kernel.ui.show_loading(); + + $.ajax({ + url: info.url_tipo_documentos, + dataType: 'json', + data: {pais: _pais_documento}, + type: 'POST', + success: function (data) + { + kernel.ui.hide_loading(); + + $('#tipo_documento').children().remove(); + $.each(data, function (key, value) + { + $('#tipo_documento').append( + $('').val(key).html(value) + ); + }); + ordenar_combo('tipo_documento'); + } + }); + } +}); diff --git a/src/siu/operaciones/acceso/pagelet_cambiar_email.php b/src/siu/operaciones/acceso/pagelet_cambiar_email.php new file mode 100644 index 0000000..6b53c26 --- /dev/null +++ b/src/siu/operaciones/acceso/pagelet_cambiar_email.php @@ -0,0 +1,40 @@ +data['url_volver'] = kernel::vinculador()->crear('acceso', 'index'); + $this->data['action_validar'] = kernel::vinculador()->crear('acceso', 'validar'); + $this->data['action_nuevo_email'] = kernel::vinculador()->crear('acceso', 'nuevo_email'); + $this->data['datos_ayuda'] = kernel::proyecto()->get_parametro('datos_ayuda'); + + $pregunta_secreta= $this->controlador->get_pregunta_secreta(); + $this->data['combo_propuestas'] = $this->controlador->get_combo_propuestas_preinscriptas(); + $this->data['pregunta_secreta']= kernel::traductor()->trans($pregunta_secreta); + if ($this->controlador->hay_var('mensajes')) { + $this->data['mensajes'] = $this->controlador->get_var('mensajes'); + } + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/acceso/pagelet_contenido_login.php b/src/siu/operaciones/acceso/pagelet_contenido_login.php new file mode 100644 index 0000000..ccdd026 --- /dev/null +++ b/src/siu/operaciones/acceso/pagelet_contenido_login.php @@ -0,0 +1,42 @@ +set('msj_pagina_error', kernel::traductor()->trans('smpt_no_configurado')); + throw new nuevo_request('pagina_error'); + } + try { + if (!preinscripcion::versiones_compatibles()) { + kernel::sesion()->set('msj_pagina_error', kernel::traductor()->trans('versiones_no_compatibles')); + throw new nuevo_request('pagina_error'); + } + } catch (error_preinscripcion_cnx_bd $e) { + $mensaje = kernel::traductor()->trans($e->get_mensaje()); + kernel::sesion()->set('msj_pagina_error', $mensaje); + throw new nuevo_request('pagina_error'); + } + } + + function get_nombre() + { + return 'contenido_login'; + } + + function prepare() + { + + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/acceso/pagelet_form_login.php b/src/siu/operaciones/acceso/pagelet_form_login.php new file mode 100644 index 0000000..04554f5 --- /dev/null +++ b/src/siu/operaciones/acceso/pagelet_form_login.php @@ -0,0 +1,46 @@ +esta_seteada('mensaje_vista_acceso_error_token')) + { + throw new nuevo_request('alta_usuario', 'index'); + } + } + + function get_nombre() + { + return 'form_login'; + } + + function prepare() + { + $lm = kernel::login_manager(); + + $modelo = array(); + foreach ($lm->get_auth_providers() as $auth) { + /** @var $auth authentication_provider */ + $modelo[$auth->get_id()] = $auth->get_modelo(); + } + + $this->data['proveedores'] = $modelo; + $this->data['hay_servicios_externos'] = !empty($modelo['cuentas_ext']['proveedores']); + $this->data['url_crear'] = kernel::vinculador()->crear('alta_usuario', 'index'); + $this->data['url_recuperar'] = kernel::vinculador()->crear('acceso', 'recuperar'); + $this->data['url_reenviar_mail'] = kernel::vinculador()->crear('acceso', 'reenvio_mail', array('camb_msj' => 1)); + $this->data['url_ayuda_menu'] = kernel::vinculador()->crear('ayuda_menu', 'index'); + + $operacion = kernel::ruteador()->get_id_operacion(); + $this->add_var_js('url_tipo_documentos', kernel::vinculador()->crear($operacion, 'datos_tipo_documento')); + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/acceso/pagelet_recuperar_pass.php b/src/siu/operaciones/acceso/pagelet_recuperar_pass.php new file mode 100644 index 0000000..8013f20 --- /dev/null +++ b/src/siu/operaciones/acceso/pagelet_recuperar_pass.php @@ -0,0 +1,71 @@ +data['url_volver'] = kernel::vinculador()->crear('acceso', 'index'); + $this->add_var_js('url_tipo_documentos', kernel::vinculador()->crear('acceso', 'datos_tipo_documento')); + + switch ($this->estado) { + case self::MAIL_ENVIADO: + $this->data['email'] = $this->obfuscate_mail($this->controlador->get_var('email')); + $this->data['url_cambiar_email'] = kernel::vinculador()->crear('acceso', 'cambiar_email'); + break; + case self::MAIL_NO_EXISTENTE: + break; + case self::TOKEN_CORRECTO: + $this->data['token'] = $this->controlador->get_var('token'); + $this->data['mensajes'] = $this->controlador->get_var('mensajes'); + $this->data['action_reset_pass'] = kernel::vinculador()->crear('acceso', 'reset_pass'); + break; + case self::TOKEN_INCORRECTO: + break; + case self::TOKEN_EXPIRADO: + break; + default: + $this->data['nombre_usuario'] = $this->controlador->get_var_default('nombre_usuario', ''); + $this->data['action_recuperar'] = kernel::vinculador()->crear('acceso', 'recuperar'); + $this->data['paises'] = $this->controlador->get_opciones__paises(); + $this->data['tipos_doc'] =[]; + $this->data['documento'] = $this->controlador->get_var('documento'); + //$this->data['action_recuperar'] = kernel::vinculador()->crear('acceso', 'recuperar'); + } + + // Si se seteo un mensaje en el controlador lo agrego para que lo consuma el twig + if ($this->controlador->hay_var('mensajes')) { + $this->data['mensajes'] = $this->controlador->get_var('mensajes'); + } + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/acceso/recuperar_pass/default.css b/src/siu/operaciones/acceso/recuperar_pass/default.css new file mode 100644 index 0000000..4a14c12 --- /dev/null +++ b/src/siu/operaciones/acceso/recuperar_pass/default.css @@ -0,0 +1,11 @@ +#frameRC { + border: 0; +} + +#form .notificaciones { + margin-top: 10px; +} + +#form #continuar, #form .volver { + margin-top: 10px; +} \ No newline at end of file diff --git a/src/siu/operaciones/acceso/recuperar_pass/default.twig b/src/siu/operaciones/acceso/recuperar_pass/default.twig new file mode 100644 index 0000000..0d61ac8 --- /dev/null +++ b/src/siu/operaciones/acceso/recuperar_pass/default.twig @@ -0,0 +1,149 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% if this.estado == 'inicial' %} + + {% import "kernel/macro_recaptcha.twig" as recaptcha %} + {{ recaptcha.script() }} +

{{"selecciona_metodo_recuperacion"|trans|capitalize}}

+ + +
+ +
+

{{"descripcion_recuperar_clave"|trans}}

+
+
+ +
+ +
+
+ +
+ {{ recaptcha.widget() }} +
+ + {% if this.data.mensajes %} + {% import "kernel/macro_notificaciones.twig" as notificaciones %} + {{ notificaciones.render_notif(this.data.mensajes) }} + {% endif %} + + +
+
+
+
+
+ +
+ +
+ + +
+ +
+ +
+ +
+ +
+ +
+
+ {{ recaptcha.widget() }} +
+ + +
+
+ +
+ {% elseif this.estado == constant('siu\\operaciones\\acceso\\pagelet_recuperar_pass::MAIL_ENVIADO') %} +

{{"se_envio_email_a"|trans({'%1%': this.data.email})|capitalize}}

+
+

{{ "descripcion_mail_recuperar_clave"|trans({'%1%': this.data.email}) }}

+

{{ "no_puedo_arcceder_email"|trans({'%link%': this.data.url_cambiar_email}) |raw }}

+
+ {{'volver'|trans|capitalize}} + + {% elseif this.estado == constant('siu\\operaciones\\acceso\\pagelet_recuperar_pass::TOKEN_CORRECTO') %} + + {% import "kernel/macro_recaptcha.twig" as recaptcha %} + {{ recaptcha.script() }} + +

{{"recuperar_clave"|trans|capitalize}}

+

{{ "descripcion_nueva_clave"|trans }}

+ +
+
+ +
+ +
+ +
+ +
+ +
+ +
+ {{ recaptcha.widget() }} +
+ + {% if this.data.mensajes %} + {% import "kernel/macro_notificaciones.twig" as notificaciones %} + {{ notificaciones.render_notif(this.data.mensajes) }} + {% endif %} + +
+
+ +
+
+
+ + {% elseif this.estado == constant('siu\\operaciones\\acceso\\pagelet_recuperar_pass::TOKEN_INCORRECTO') %} +

{{"no_se_puede_recuperar_clave"|trans|capitalize}}

+

{{"desc_no_se_puede_recuperar_clave"|trans|capitalize}}

+
+ {{'volver'|trans|capitalize}} + {% elseif this.estado == constant('siu\\operaciones\\acceso\\pagelet_recuperar_pass::TOKEN_EXPIRADO') %} +

{{"acceso.token_expirado" |trans }}

+

{{"acceso.desc_token_expirado" | trans }}

+
+ {{'volver'|trans|capitalize}} + {% else %} +

{{"no_se_envio_email_recuperar_clave"|trans|capitalize}}

+
+

{{ "descripcion_mail_no_existente_recuperar_clave"|trans }}

+
+ {{'volver'|trans|capitalize}} + {% endif %} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/acceso/recuperar_pass/mail_recover.twig b/src/siu/operaciones/acceso/recuperar_pass/mail_recover.twig new file mode 100644 index 0000000..90e3694 --- /dev/null +++ b/src/siu/operaciones/acceso/recuperar_pass/mail_recover.twig @@ -0,0 +1,15 @@ + + + + + + +

+ {{ 'cuerpo_email_recuperar_clave'|trans({ + '%mail%': mail, + '%link%': link + })|raw + }} +

+ + \ No newline at end of file diff --git a/src/siu/operaciones/acceso/recuperar_pass/pagelet_recuperar_pass.js b/src/siu/operaciones/acceso/recuperar_pass/pagelet_recuperar_pass.js new file mode 100644 index 0000000..2f05a6d --- /dev/null +++ b/src/siu/operaciones/acceso/recuperar_pass/pagelet_recuperar_pass.js @@ -0,0 +1,81 @@ +kernel.renderer.registrar_pagelet('recuperar_pass', function(info) { + var id = '#' + info.id; + + //---- Date Picker ------------------------------------------------- + $.datepicker.setDefaults( $.datepicker.regional["es"] ); + $('input.date').datepicker({ + changeMonth: true, + changeYear: true, + dateFormat: 'dd/mm/yy', + firstDay:0, + yearRange: "-150:+0" + }); + //----Fin Date Picker ------------------------------------------------- + return { + onload: function() { + $('#formulario_email').submit(function () + { + if( $("#e_mail").val() ==''){ + + kernel.ui.show_mensaje('Error en el formulario', {tipo: 'alert-error'}); + return false; + } + }); + $('#formulario_documento').submit(function () + { + if(( $("#pais").val() =='') || ( $("#tipo_documento").val() =='') || ( $("#numero_documento").val() =='') || ( $("#fecha_nacimiento").val() =='')){ + + kernel.ui.show_mensaje('Error en el formulario', {tipo: 'alert-error'}); + return false; + } + }); + $('#frameRC').contents().on('keypress', function(e) { + if(e.which == 13) { + $('#guarani_form_recuperar_pass').submit(); + } + }); + + $('#formulario_email').hide(); + $('#formulario_documento').hide(); + $('#radio_documento').click(function(){ + //oculto formulario email y muestro docuemento + $('#formulario_email').hide(); + $('#formulario_documento').show(); + $('#radio_email').prop('checked', false); + + }); + $('#radio_email').click(function(){ + //oculto formulario email y muestro docuemento + $('#formulario_documento').hide(); + $('#formulario_email').show(); + $('#radio_documento').prop('checked', false); + + }); + buscar_tipo_documento_pais($('#pais').val()) + $('#pais').change(function(){ + buscar_tipo_documento_pais($('#pais').val()) + }); + + function buscar_tipo_documento_pais(_pais) + { + $.ajax({ + url: info.url_tipo_documentos, + dataType: 'json', + async: false, + data: {pais: _pais}, + type: 'post', + success: function (data) { + $('#tipo_documento').children().remove(); + $.each(data, function (key, value) { + $('#tipo_documento').append( + $('').val(key).html(value) + ); + }); + ordenar_combo('tipo_documento'); + + } + }); + } + } + } +}) diff --git a/src/siu/operaciones/acceso/template.twig b/src/siu/operaciones/acceso/template.twig new file mode 100644 index 0000000..6882b08 --- /dev/null +++ b/src/siu/operaciones/acceso/template.twig @@ -0,0 +1,44 @@ +{% if js_vars %} + +{% endif %} + +{% if this.hay_error() %} +
+ + {{ this.get_error()|trans|raw }} +
+{% endif %} + +{% if this.hay_mensaje_alta_iniciada() %} +
+ + {{ this.get_mensaje_alta_iniciada() | raw }} +
+{% endif %} + +{% if this.hay_mensaje_clave_reset() %} +
+ + {{ this.get_mensaje_clave_reset()|trans|raw }} +
+{% endif %} + +{% if this.hay_cuenta_vinculada() %} +
+ + {{ this.get_cuenta_vinculada()|raw }} +
+{% endif %} + +
+
+ {{ form.render }} +
+
+ {{ contenido_login.render }} +
+
\ No newline at end of file diff --git a/src/siu/operaciones/acceso/vista.php b/src/siu/operaciones/acceso/vista.php new file mode 100644 index 0000000..25a900e --- /dev/null +++ b/src/siu/operaciones/acceso/vista.php @@ -0,0 +1,85 @@ +instanciar($clase, 'form'); + $this->add_pagelet($pl); + return $pl; + } + + function ini() + { + $clase = 'operaciones\acceso\pagelet_contenido_login'; + $pl = kernel::localizador()->instanciar($clase, 'contenido_login'); + $this->add_pagelet($pl); + kernel::pagina()->set_etiqueta('titulo', kernel::traductor()->trans('tit_acceso')); + } + + function pagelet($id) + { + $clase = "operaciones\acceso\pagelet_$id"; + return kernel::localizador()->instanciar($clase, $id); + } + + function hay_mensaje_alta_iniciada() + { + return kernel::sesion()->esta_seteada('mensaje_alta_iniciada'); + } + + function get_mensaje_alta_iniciada() + { + $mensaje = kernel::traductor()->trans(kernel::sesion()->get('mensaje_alta_iniciada'), array('%1%' => kernel::vinculador()->crear('acceso', 'reenvio_mail', array('camb_msj' => 0)))); + return $mensaje; + } + + function hay_mensaje_clave_reset() + { + return kernel::sesion()->esta_seteada('mensaje_clave_reset'); + } + + function get_mensaje_clave_reset() + { + $mensaje = kernel::sesion()->get('mensaje_clave_reset'); + kernel::sesion()->borrar('mensaje_clave_reset'); + return $mensaje; + } + + function hay_cuenta_vinculada() + { + return kernel::sesion()->esta_seteada('cuenta_vinculada_ok'); + } + + function get_cuenta_vinculada() + { + $mensaje = kernel::sesion()->get('cuenta_vinculada_ok'); + kernel::sesion()->borrar('cuenta_vinculada_ok'); + return $mensaje; + } + + function hay_error() + { + return kernel::sesion()->esta_seteada('mensaje_vista_acceso_error'); + } + + function get_error() + { + $error = kernel::sesion()->get('mensaje_vista_acceso_error'); + kernel::sesion()->borrar('mensaje_vista_acceso_error'); + return $error; + } + + function set_error($error) + { + kernel::sesion()->set('mensaje_vista_acceso_error', $error); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/acceso_admin/controlador.php b/src/siu/operaciones/acceso_admin/controlador.php new file mode 100644 index 0000000..b4d8a93 --- /dev/null +++ b/src/siu/operaciones/acceso_admin/controlador.php @@ -0,0 +1,74 @@ +vista()->set_pagelet('form_login'); + + if (kernel::sesion()->abierta()) { + $op_defecto = kernel::persona()->perfil()->get_parametro('index'); + $this->nuevo_request($op_defecto); + } + } + + function accion__logout() + { + + } + + //-------------------------------------------------------------------------- + //---- Métodos auxiliares -------------------------------------------------- + //-------------------------------------------------------------------------- + + protected function login($email, $password) + { + kernel::proyecto()->set_punto_acceso(preinscripcion::perfil_admin); + kernel::sesion()->abrir_sesion($email, false); + kernel::persona()->set_email($email); + } + + protected function add_error($mensaje, $e = null) + { + $mensajes = array(); + $mensajes[] = array( + preinscripcion::mensaje_cuerpo => $mensaje, + preinscripcion::mensaje_tipo => preinscripcion::control_error, + ); + $this->add_var('mensajes', $mensajes); + if (!is_null($e)) { + kernel::log()->add_error($e); + } + } + + protected function redirigir() + { + $this->nuevo_request(kernel::persona()->perfil()->get_parametro('index')); + } + + protected function get_usuario_sin_validar() + { + return substr($this->get_post('e_mail'), 0, 100); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/acceso_admin/form_login/default.css b/src/siu/operaciones/acceso_admin/form_login/default.css new file mode 100644 index 0000000..fd35293 --- /dev/null +++ b/src/siu/operaciones/acceso_admin/form_login/default.css @@ -0,0 +1,7 @@ +.centrado{ + position: absolute; + left: 45%; + margin-top: 20px; + margin-left: -100px; + width: 300px; +} diff --git a/src/siu/operaciones/acceso_admin/form_login/default.twig b/src/siu/operaciones/acceso_admin/form_login/default.twig new file mode 100644 index 0000000..82ffdc0 --- /dev/null +++ b/src/siu/operaciones/acceso_admin/form_login/default.twig @@ -0,0 +1,36 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + +
+ {% set form = this.data.form_admin %} +
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+
+ +
+
+
+ + {% if form.error %} +
+
+ {{ form.error|trans|raw }} +
+ {% endif %} +
+ +{% endblock %} diff --git a/src/siu/operaciones/acceso_admin/form_login/pagelet_form_login.js b/src/siu/operaciones/acceso_admin/form_login/pagelet_form_login.js new file mode 100644 index 0000000..4a4d6ff --- /dev/null +++ b/src/siu/operaciones/acceso_admin/form_login/pagelet_form_login.js @@ -0,0 +1,12 @@ +kernel.renderer.registrar_pagelet('form_login', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + $('#form_login_admin').submit(function () { + + }); + $('#usuario').focus(); + } + } +}) diff --git a/src/siu/operaciones/acceso_admin/pagelet_form_login.php b/src/siu/operaciones/acceso_admin/pagelet_form_login.php new file mode 100644 index 0000000..5a0a5dd --- /dev/null +++ b/src/siu/operaciones/acceso_admin/pagelet_form_login.php @@ -0,0 +1,51 @@ +set('msj_pagina_error', kernel::traductor()->trans('versiones_no_compatibles')); + throw new NuevoRequest('pagina_error'); + } + } catch (error_preinscripcion_cnx_bd $e) { + $mensaje = kernel::traductor()->trans($e->get_mensaje()); + kernel::sesion()->set('msj_pagina_error', $mensaje); + throw new NuevoRequest('pagina_error'); + } + } + + function get_nombre() + { + return 'form_login'; + } + + function prepare() + { + $lm = kernel::login_manager(); + + $modelo = array(); + foreach ($lm->get_auth_providers() as $auth) { + /** @var $auth authentication_provider */ + $modelo[$auth->get_id()] = $auth->get_modelo(); + } + + if (!isset($modelo['admin'])) { + throw new error_preinscripcion_login("Falta bloque de configuración 'admin' en login.php"); + } + + $this->data['form_admin'] = $modelo['admin']; + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/acceso_admin/template.twig b/src/siu/operaciones/acceso_admin/template.twig new file mode 100644 index 0000000..9dcbb19 --- /dev/null +++ b/src/siu/operaciones/acceso_admin/template.twig @@ -0,0 +1,7 @@ +{% extends "kernel/una_columna.twig" %} +{% block titulo_operacion %} +

{{'nombre_sistema'|trans}} :: {{'administracion'|trans}}

+{% endblock %} +{% block columna_1 %} + {{ form.render }} +{% endblock %} diff --git a/src/siu/operaciones/acceso_admin/vista.php b/src/siu/operaciones/acceso_admin/vista.php new file mode 100644 index 0000000..d5d5df9 --- /dev/null +++ b/src/siu/operaciones/acceso_admin/vista.php @@ -0,0 +1,40 @@ +instanciar($clase); + $this->add_pagelet($pl); + return $pl; + } + + function ini() + { + $clase = 'operaciones\acceso_admin\pagelet_form_login'; + $pl = kernel::localizador()->instanciar($clase, 'form'); + $this->add_pagelet($pl); + kernel::pagina()->set_etiqueta('titulo', kernel::traductor()->trans('tit_acceso')); + } + + function pagelet($id) + { + $clase = "operaciones\acceso_admin\pagelet_$id"; + return kernel::localizador()->instanciar($clase, $id); + } + + function set_form_activo($pagelet) + { + $this->form_activo = $pagelet; + $this->id_form_activo = $pagelet->get_id(); + $this->add_pagelet($pagelet, 0, 'form'); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/alta_usuario/confirm_doc_existente/default.css b/src/siu/operaciones/alta_usuario/confirm_doc_existente/default.css new file mode 100644 index 0000000..e69de29 diff --git a/src/siu/operaciones/alta_usuario/confirm_doc_existente/default.twig b/src/siu/operaciones/alta_usuario/confirm_doc_existente/default.twig new file mode 100644 index 0000000..eea18bb --- /dev/null +++ b/src/siu/operaciones/alta_usuario/confirm_doc_existente/default.twig @@ -0,0 +1,36 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} +
+
+ {{ this.data.confirm_doc_existente_1 | raw }} + {% if this.data.recuperar_clave %} + + {{ this.data.confirm_doc_existente_2 | raw }} + {{'recuperar_clave'|trans|capitalize}} + + {% else %} + {{ this.data.confirm_doc_existente_2 | raw }} + {{'reenviar_mail_alta'|trans|capitalize}} + {% endif %} + {% if this.data.url_continuar_2_2 %} +

+ {{ this.data.confirm_doc_existente_2_2 | raw }} + {{'cambiar_correo_asociado'|trans|capitalize}} + {% endif %} + {% if this.data.url_continuar %} +

+ {{ this.data.confirm_doc_existente_3 | raw }} + {{'continuar_otra_persona_alta'|trans|capitalize}} +
+ {% endif %} +

+
+

Comunicate con la institución
Telefono:{{ this.data.datos_ayuda.datos_ayuda_telefono | raw }}
Email: {{ this.data.datos_ayuda.datos_ayuda_email| raw }}

+
+
+
+{% endblock %} diff --git a/src/siu/operaciones/alta_usuario/confirm_doc_existente/pagelet_confirm_doc_existente.js b/src/siu/operaciones/alta_usuario/confirm_doc_existente/pagelet_confirm_doc_existente.js new file mode 100644 index 0000000..1e73f16 --- /dev/null +++ b/src/siu/operaciones/alta_usuario/confirm_doc_existente/pagelet_confirm_doc_existente.js @@ -0,0 +1,8 @@ +kernel.renderer.registrar_pagelet('confirm_doc_existente', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + } + } +}) diff --git a/src/siu/operaciones/alta_usuario/contenido_alta/default.css b/src/siu/operaciones/alta_usuario/contenido_alta/default.css new file mode 100644 index 0000000..e69de29 diff --git a/src/siu/operaciones/alta_usuario/contenido_alta/default.twig b/src/siu/operaciones/alta_usuario/contenido_alta/default.twig new file mode 100644 index 0000000..77e3c41 --- /dev/null +++ b/src/siu/operaciones/alta_usuario/contenido_alta/default.twig @@ -0,0 +1,8 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} +
+
+ {{"texto_alta"|trans|raw}} +
+
+{% endblock %} diff --git a/src/siu/operaciones/alta_usuario/contenido_alta/pagelet_contenido_alta.js b/src/siu/operaciones/alta_usuario/contenido_alta/pagelet_contenido_alta.js new file mode 100644 index 0000000..fc84149 --- /dev/null +++ b/src/siu/operaciones/alta_usuario/contenido_alta/pagelet_contenido_alta.js @@ -0,0 +1,8 @@ +kernel.renderer.registrar_pagelet('contenido_alta', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + } + } +}) diff --git a/src/siu/operaciones/alta_usuario/controlador.php b/src/siu/operaciones/alta_usuario/controlador.php new file mode 100644 index 0000000..b649903 --- /dev/null +++ b/src/siu/operaciones/alta_usuario/controlador.php @@ -0,0 +1,449 @@ +vista()->set_pagelet('crear_usuario'); + $op_defecto = kernel::persona()->perfil()->get_parametro('index'); + + if (kernel::sesion()->abierta()) { + $this->nuevo_request($op_defecto); + } + } + + function accion__crear() + { + $exito = false; + $pagelet = $this->vista()->set_pagelet('crear_usuario'); + + if (kernel::request()->isPost()) { + + try { + // Chequeo de CSRF + $this->check_csrf(); + } catch (\Exception $e) { + $this->add_error($this->trans('error_csrf')); + $pagelet->set_estado_info(pagelet_crear_usuario::FORM_ERROR_CSRF); + return; + } + + if ($this->usa_captcha()) { + // Chequeo de recaptcha + if (!static::check_recaptcha2()) { + $this->add_error($this->trans('error_recaptcha')); + $pagelet->set_estado_info(pagelet_crear_usuario::FORM_ERROR_RECAPTCHA); + return; + } + } + + // Validación de formulario y alta de usuario + $form = $pagelet->get_form(); + if ($form->procesar()) { + + $valores = $form->get_datos(); + $valores['duplicada'] = comunes::no; + //existe el documento en preinscripcion + $datos_usuario = preinscripcion::usuario()->documento_no_procesado($valores['pais_documento'],$valores['tipo_documento'], $valores['nro_documento']); + //controles en gestion + try { + + //si ingresa el mismo mail que en al inscripcion lo dejo continuar + //if (!$valores['usuario']==$datos_usuario['usuario']){ + $this->controlar_email($valores['e_mail']); + //} + if (!empty($datos_usuario)) { + // Ya existe el documento en la base + $pagelet = $this->vista()->set_pagelet('confirm_doc_existente'); + kernel::sesion()->set('__doc_ex__datos_usuario', $datos_usuario); + kernel::sesion()->set('__doc_ex__valores_form', $valores); + kernel::sesion()->set('__doc_ex__datos_ayuda', kernel::proyecto()->get_parametro('datos_ayuda')); + }else { + + try { + $this->controlar_perfil_valido_g3($valores); + // Verificar si el documento pertenece a un alumno de G3 + $this->controlar_alumno_g3($valores); + + if (kernel::sesion()->esta_seteada('alta_se_medio')) { + $medio_se = kernel::sesion()->get('alta_se_medio'); + $valores[$medio_se] = kernel::sesion()->get('alta_se_id'); + } else { + $medio_se = null; + } + + $token = preinscripcion::usuario()->nuevo($valores, $medio_se); + $email = $valores['e_mail']; + + $datos_recuperacion = array( + 'e_mail' => $email, + 'codigo_validacion' => $token + ); + kernel::sesion()->set('__datos_reenvio_mail__', $datos_recuperacion); + + $this->enviar_mail_crear_usuario($email, $token); + $pagelet->set_estado_info(pagelet_crear_usuario::MAIL_ENVIADO); + $this->add_var('email', $email); + + if (kernel::sesion()->esta_seteada('id_facebook')) { + kernel::sesion()->borrar('id_facebook'); + } + if (kernel::sesion()->esta_seteada('mail_facebook')) { + kernel::sesion()->borrar('mail_facebook'); + } + + $exito = true; + } catch (error_preinscripcion_alumno_g3 $e) { + $this->add_error($e->get_mensaje(), $e); + $pagelet->set_estado_info(pagelet_crear_usuario::FORM_ERROR_VALIDACION); + }catch (error_preinscripcion_persona_g3 $e) { + $this->add_error($e->get_mensaje(), $e); + $pagelet->set_estado_info(pagelet_crear_usuario::FORM_ERROR_VALIDACION); + } catch (error_kernel_validacion $e) { + $this->add_error($this->trans('login_error_formato_mail'), $e); + $this->add_var('nombre_usuario', $email_raw); + $pagelet->set_estado_info(pagelet_crear_usuario::FORM_ERROR_VALIDACION); + } catch (error_kernel_db $e) { + if ($e->get_sqlstate() == 23505) { + $this->add_error($this->trans('error_email_repetido'), $e); + } else { + $this->add_error($this->trans('error_alta'), $e); + } + $pagelet->set_estado_info(pagelet_crear_usuario::FORM_ERROR_VALIDACION); + } + } + } catch (error_kernel_validacion $e){ + $this->add_error($e->get_mensaje(), $e); + $pagelet->set_estado_info(pagelet_crear_usuario::FORM_ERROR_VALIDACION); + } + + } else { + if ($form->tiene_errores()) { + $this->add_error($this->trans('alta_error')); + $pagelet->set_estado_info(pagelet_crear_usuario::FORM_ERROR_VALIDACION); + } + } + } + + if ($exito) { + kernel::sesion()->set('mensaje_alta_iniciada', 'mensaje_alta_iniciada'); + $this->redirigir(); + } else { + kernel::renderer()->add($pagelet); + } + } + + function accion__reenvio_mail() + { + if (!kernel::sesion()->esta_seteada('__doc_ex__datos_usuario')) { + die(); + } + $datos_usuario = kernel::sesion()->get('__doc_ex__datos_usuario'); + + $email = $datos_usuario['e_mail']; + $token = $datos_usuario['codigo_validacion']; + $this->enviar_mail_crear_usuario($email, $token); + kernel::sesion()->set('mensaje_alta_iniciada', 'mensaje_recuperacion'); + $this->redirigir(); + } + + function accion__continuar_preinscripcion() + { + if (!kernel::sesion()->esta_seteada('__doc_ex__datos_usuario')) { + die(); + } + $valores = kernel::sesion()->get('__doc_ex__valores_form'); + kernel::sesion()->borrar('__doc_ex__valores_form'); + kernel::sesion()->borrar('__doc_ex__datos_usuario'); + + $exito = false; + $pagelet = $this->vista()->set_pagelet('crear_usuario'); + + try { + if (kernel::sesion()->esta_seteada('alta_se_medio')) { + $medio_se = kernel::sesion()->get('alta_se_medio'); + $valores[$medio_se] = kernel::sesion()->get('alta_se_id'); + } else { + $medio_se = null; + } + //marco como duplicada la preinscripcion + $valores['duplicada'] = comunes::si; + $token = preinscripcion::usuario()->nuevo($valores, $medio_se); + $email = $valores['e_mail']; + + $this->enviar_mail_crear_usuario($email, $token); + $pagelet->set_estado_info(pagelet_crear_usuario::MAIL_ENVIADO); + $this->add_var('email', $email); + + if (kernel::sesion()->esta_seteada('id_facebook')) { + kernel::sesion()->borrar('id_facebook'); + } + if (kernel::sesion()->esta_seteada('mail_facebook')) { + kernel::sesion()->borrar('mail_facebook'); + } + + $exito = true; + } catch (error_kernel_validacion $e) { + $this->add_error($this->trans('login_error_formato_mail'), $e); + $this->add_var('nombre_usuario', $email_raw); + $pagelet->set_estado_info(pagelet_crear_usuario::FORM_ERROR_VALIDACION); + } catch (error_kernel_db $e) { + if ($e->get_sqlstate() == 23505) { + $this->add_error($this->trans('error_email_repetido'), $e); + } else { + $this->add_error($this->trans('error_alta'), $e); + } + $pagelet->set_estado_info(pagelet_crear_usuario::FORM_ERROR_VALIDACION); + } + + if ($exito) { + kernel::sesion()->set('mensaje_alta_iniciada', 'mensaje_alta_iniciada'); + $this->redirigir(); + } else { + kernel::renderer()->add($pagelet); + } + } + + function accion__datos_tipo_documento() + { + $pais = $this->get_param('pais', 'post'); + $tipo_documento = $this->get_param('tipo_documento', 'post'); + $condicion="mdp_tipo_documento_pais.pais = '".$pais."' "; + (empty($tipo_documento))?$condicion.="": $condicion.= " AND mdp_tipo_documento_pais.tipo_documento ='".$tipo_documento."'"; + $entidad_pais_tipo_doc = g3::entidad('tipos_documentos_pais')->get_opciones_pais($condicion,true); + $this->render_raw_json($entidad_pais_tipo_doc); + } + + function accion__datos_nro_tramite_dni() + { + //Cargo los datos en los inputs + $nro_tramite_dni = $this->get_param('nro_tramite_dni', 'post'); + $nro_documento = $this->get_param('nro_documento', 'post'); + $genero = $this->get_param('genero', 'post'); + switch ($genero) { + case 1: $genero = 'M'; + break; + case 2: $genero = 'F'; + break; + case 3: $genero = 'X'; + break; + + default: $genero = ''; + break; + } + + try{ + $api_parametros = $this->get_parametros_api(); + $apiKey = $api_parametros['renaper']['parametros']['apiKey_personData']; + $url= $api_parametros['renaper']['parametros']['base_uri']; + $url_header = $api_parametros['renaper']['parametros']['url_header']; + $content_type='application/json'; + $ws = new ws_renaper($apiKey, $content_type, $url, $url_header); + + $response = $ws->post_cliente_rest($nro_documento,$genero,$nro_tramite_dni); + $res = json_decode($response,true); + + if(!empty($res['person']) && $res['person'] != ''){ + $res = json_decode($res['person'],true); + kernel::sesion()->set('renaper_persona', $res); + kernel::sesion()->set('validado_con_renaper', comunes::si); + }else{ + kernel::sesion()->set('validado_con_renaper', comunes::no); + } + + $this->render_raw_json($response); + + } catch (error_preinscripcion_alumno_g3 $e) { + $this->add_error($e->get_mensaje(), $e); + $pagelet->set_estado_info(pagelet_crear_usuario::FORM_ERROR_VALIDACION); + $this->render_raw_json($e->get_mensaje()); + } + + } + + function get_parametros_api(){ + $valor = ''; + $pathInstalacion = realpath(__DIR__.'/../../../../instalacion'); + $WebConf = include "$pathInstalacion/servicios_web_config.php"; + $valor = array_key_exists('renaper',$WebConf['consumidos']); + if($valor){ + $valor = array_search('renaper', array_keys($WebConf['consumidos'])); + $valor = array_slice($WebConf['consumidos'], $valor,1); + } + + return $valor; + } + + function accion__datos_tipo_documento_validar() + { + $tipo_documento = $this->get_param('tipo_documento', 'post'); + $pais = $this->get_param('pais', 'post'); + $nro_documento = $this->get_param('nro_documento', 'post'); + + $entidad_tipo_doc = g3::entidad('tipos_documentos_pais')->get_entidad($pais."_".$tipo_documento); + + $entidad_tipo_doc['mensaje_validacion_cuil'] = ''; + // Si el tipo de documento es CUIL/CUIT y falla la validación + if (($tipo_documento == comunes::TIPO_DOCUMENTO_CUIL_CUIT) && (!comunes::validarCUIT($nro_documento))) { + $entidad_tipo_doc['mensaje_validacion_cuil'] = kernel::traductor()->trans('nro_documento.cuil.error'); + } + + $this->render_raw_json($entidad_tipo_doc); + } + + //-------------------------------------------------------------------------- + //---- Operaciones auxiliares ---------------------------------------------- + //-------------------------------------------------------------------------- + + protected function controlar_email($valores) + { + if (!empty(preinscripcion::usuario()->get_datos_usuario($valores))) { + $mensaje = kernel::traductor()->trans('alta.error.email_duplicado'); + throw new error_kernel_validacion($mensaje); + } + } + protected function controlar_alumno_g3($valores) + { + $datos_ayuda = kernel::proyecto()->get_parametro('datos_ayuda'); + if (g3::personas()->es_alumno($valores['pais_documento'], $valores['tipo_documento'], $valores['nro_documento'])) { + $mensaje = kernel::traductor()->trans('alta.error.alumno_g3'); + $mensaje .= kernel::traductor()->trans('alta.error.alumno_g3_ayuda',['%link%' => $datos_ayuda['datos_ayuda_url_ayuda']] ); + + throw new error_preinscripcion_alumno_g3($mensaje); + } + } + + protected function controlar_perfil_valido_g3($valores) + { + if (g3::personas()->existe_persona_en_base($valores['pais_documento'], $valores['tipo_documento'], $valores['nro_documento'])) { + $mensaje = kernel::traductor()->trans('alta.error.perfil_valido_g3'); + throw new error_preinscripcion_alumno_g3($mensaje); + } + } + + protected function controlar_docente_g3($valores) + { + if (g3::personas()->es_docente($valores['pais_documento'], $valores['tipo_documento'], $valores['nro_documento'])) { + $mensaje = kernel::traductor()->trans('alta.error.docente_g3'); + throw new error_preinscripcion_alumno_g3($mensaje); + } + } + + protected function controlar_persona_g3($valores) + { + if (g3::personas()->existe_persona_enbase($valores['pais_documento'], $valores['tipo_documento'], $valores['nro_documento'])) { + $mensaje = kernel::traductor()->trans('alta.error.persona_g3'); + throw new error_preinscripcion_persona_g3($mensaje); + } + } + + protected function enviar_mail_crear_usuario($dir_mail, $token) + { + $datos = util::consultas()->get_datos_basicos_cuenta($dir_mail); + + $asunto = $this->trans('asunto_email_crear_usuario'); + $tpl = kernel::load_template('crear_usuario/mail_crear_usuario.twig'); + $link = kernel::vinculador()->crear('acceso', 'login', array( + 'auth' => 'token', + 't' => $token + )); + $cuerpo = $tpl->render(array( + 'mail' => $dir_mail, + 'link' => $link, + 'apellido' => $datos['apellido'], + 'nombres' => $datos['nombres'], + 'nacionalidad' => $datos['nacionalidad_desc'], + 'pais_documento' => $datos['pais_documento_desc'], + 'tipo_documento' => $datos['tipo_documento_desc'], + 'nro_documento' => $datos['nro_documento'], + 'id_preinscripcion' => $datos['id_preinscripcion'], + )); + + $mail = new mail($dir_mail, $asunto, $cuerpo, null, '', preinscripcion::charset); + $mail->set_html(true); + + $mail->enviar(); + } + + protected function get_usuario_sin_validar() + { + return substr($this->get_post('e_mail'), 0, 100); + } + + protected function add_error($mensaje, $e = null) + { + $mensajes = array(); + $mensajes[] = array( + preinscripcion::mensaje_cuerpo => $mensaje, + preinscripcion::mensaje_tipo => preinscripcion::control_error, + ); + $this->add_var('mensajes', $mensajes); + if (!is_null($e)) { + kernel::log()->add_error($e); + } + } + + protected function redirigir() + { + $this->nuevo_request(kernel::persona()->perfil()->get_parametro('index')); + } + + //-------------------------------------------------------------------------- + //---- Cascadas ------------------------------------------------------------ + //-------------------------------------------------------------------------- + + function accion__cascada_nacionalidad() + { + $nacionalidad = $this->get_param('nacionalidad', 'post'); + if ($nacionalidad == comunes::NACIONALIDAD_EXTRANJERO) { + $datos = util::opciones()->get_paises(); + } else { + $datos = array('54' => 'Argentina'); + } + $this->render_raw_json($datos); + } + + function accion__tipo_documento() + { + $nacionalidad = $this->get_param('nacionalidad', 'post'); + $pais = $this->get_param('pais', 'post'); + if ($nacionalidad == comunes::NACIONALIDAD_EXTRANJERO) { + $condicion = "pais <> '54'"; + $datos = util::opciones()->get_paises(null, $condicion); + } else { + $datos = array('54' => 'Argentina'); + } + $this->render_raw_json($datos); + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/alta_usuario/crear_usuario/default.css b/src/siu/operaciones/alta_usuario/crear_usuario/default.css new file mode 100644 index 0000000..fb8f584 --- /dev/null +++ b/src/siu/operaciones/alta_usuario/crear_usuario/default.css @@ -0,0 +1,55 @@ +#frameRC { + border: 0; +} +#otra_persona{ + border-top: solid #0088CC; + padding-top: 20px; + margin-top: 20px; +} + +#form #validar{ + margin-left: 2.0744680846382977%; + margin-top: 20px; +} + + +#form .divNroTramite{ + margin-left: 0; +} + +#form #js_nro_documento { + display: none; +} + +#form #js_nro_tramite_dni { + display: none; +} + +#form #js_ayuda_numero_tramite { + display: none; +} + +#form #js_renaper { + display: none; +} + +#form #info_dni_en_tramite { + padding-left: 5px; + display: initial; +} + +.popover-title { + padding: 0px 0px; + margin: 0; + font-size: 14px; + border-radius: 2px 2px 0 0; +} +select { + background-color: white; +} + +#form_crear_usuario-password, +#form_crear_usuario-rpassword, +#form_crear_usuario-respuesta_secreta{ + width: 88%; +} \ No newline at end of file diff --git a/src/siu/operaciones/alta_usuario/crear_usuario/default.twig b/src/siu/operaciones/alta_usuario/crear_usuario/default.twig new file mode 100644 index 0000000..ccec647 --- /dev/null +++ b/src/siu/operaciones/alta_usuario/crear_usuario/default.twig @@ -0,0 +1,151 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% set form = this.get_form() %} + {% autoescape false %} + +
+ {{ 'msj_advertencia_alta' | trans | raw }} +
+ + {% if this.estado in [this.data.inicial, this.data.form_error_validacion, this.data.error_recaptcha, this.data.form_error_csrf] %} + + {% if this.data.usar_captcha %} + + {% endif %} + + {{ form.encabezado }} + {% if this.data.mensajes %} +
+ {% import "kernel/macro_notificaciones.twig" as notificaciones %} + {{ notificaciones.render_notif(this.data.mensajes) }} +
+ {% endif %} + + {% if this.data.msg_alta_se %} +
+ + {{ this.data.msg_alta_se }} +
+ {% endif %} + + {% import "kernel/macro_csrf.twig" as input_csrf %} + {{ input_csrf.mostrar(this.data.csrf) }} + +
+

{{'datos_personales'|trans}}

+
+ {{ form.control_group('sexo', 'span6') }} + {{ form.control_group('fecha_nacimiento', 'span6') }} +
+
+ {{ form.control_group('nacionalidad', 'span6') }} + {{ form.control_group('pais_documento', 'span6') }} +
+
+ {{ form.control_group('tipo_documento', 'span6') }} +
+
+ {{ form.control_group('nro_documento', 'span6') }} + {{ form.control_group('nro_documento_rep', 'span6') }} +
+
+ +
+ {% if this.data.mat_validacion_renaper == 'S' %} +
+

+ {{'ayuda_numero_tramite'|trans|raw}} + + + +

+

+ {{ form.control_group('nro_tramite_dni', 'span6 divNroTramite') }} + +
+ + +
+ {{ form.control_group('fecha_nacimiento', 'span6') }} + {{ form.control_group('calle_proc', 'span6') }} + {{ form.control_group('numero_proc', 'span6') }} + {{ form.control_group('piso_proc', 'span6') }} + {{ form.control_group('dpto_proc', 'span6') }} + {{ form.control_group('cp_proc', 'span6') }} + {{ form.control_group('barrio_proc', 'span6') }} + {{ form.control_group('numero_cuil', 'span6') }} + {{ form.control_group('validado_con_renaper', 'span6') }} +
+ {% endif %} +
+
+ {{ form.control_group('apellido', 'span6 div_apellido') }} + {{ form.control_group('nombres', 'span6 div_nombre') }} +
+
+ {{ form.control_group('nombres_elegido', 'span6 div_nombre_elegido') }} + +
+ {{'nombres_elegido_leyenda'|trans}} +
+
+ +
+

{{'datos_usuario'|trans}}

+
+ {{ 'leyenda_ayuda_datos_usuario'|trans }} +
+
+ {{ form.control_group('telefono', 'span6') }} +
+
+ {{ form.control_group('pregunta_secreta', 'span6') }} + {{ form.control_group('respuesta_secreta', 'span6') }} +
+
+ {{ form.control_group('e_mail', 'span6') }} + {{ form.control_group('e_mail_rep', 'span6') }} +
+
+ {{ form.control_group('password', 'span6') }} + {{ form.control_group('rpassword', 'span6') }} +
+ + {% if this.data.aclaracion_clave %} +
+ {{ this.data.aclaracion_clave }} +
+ {% endif %} +
+ + {% if this.data.usar_captcha %} +
+
+
+
+
+
+ {% endif %} + +
+ {{ form.submit_button('continuar', 'generar_usuario')}} + +
+ + + + + {% elseif this.estado == 'mail_enviado' %} +

{{"se_envio_email_a"|trans({'%1%': this.data.email})|capitalize}}

+

{{ "descripcion_mail_crear_usuario"|trans({'%1%': this.data.email}) }}

+ + {% else %} + {% import "kernel/macro_notificaciones.twig" as notificaciones %} + {{ notificaciones.render_notif(this.data.mensajes) }} +
+ +
+ {% endif %} + + {% endautoescape %} +{% endblock %} diff --git a/src/siu/operaciones/alta_usuario/crear_usuario/form_crear_usuario.php b/src/siu/operaciones/alta_usuario/crear_usuario/form_crear_usuario.php new file mode 100644 index 0000000..e1df897 --- /dev/null +++ b/src/siu/operaciones/alta_usuario/crear_usuario/form_crear_usuario.php @@ -0,0 +1,468 @@ +crear('alta_usuario', 'crear'); + } + + function control_group($nombre, $clase_control_group = '') + { + if (!$this->check_activo($nombre)) { + return ''; + } + if ($this->get_elemento_html_tipo($nombre) == 'hidden') { + return $this->elemento($nombre); + } + + $label = $this->label($nombre); + if ($this->get_obligatorio($nombre)) { + $label = str_replace('class="optional"', 'class="label-obligatorio"', $label); + $label = str_replace('', ' (*)', $label); + } + + $elemento = $this->elemento($nombre); + $tiene_error = $this->tiene_error($nombre); + $clase_error = ($tiene_error) ? 'error' : ''; + + $html = "
"; + $html .= $label; + $html .= $elemento; + $html .= $this->ayuda($nombre); + if ($tiene_error) { + $html .= "{$this->error($nombre)}"; + } + $html .= "
"; + + return $html; + } + + protected function generar_definicion() + { + if (kernel::sesion()->esta_seteada('alta_se_id')) { + $e_mail_readonly = true; + } else { + $e_mail_readonly = false; + } + + //---- Datos del usuario ----------------------------------------------- + $this->set_campo('telefono', array( + form::label => 'Celular', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 20 + )); + $this->set_campo('pregunta_secreta', array( + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::filtro => validador::TIPO_TEXTO, + form::multi_options => util::opciones()->get_preguntas_secretas(), + form::valor_default => opciones::NO_SELECCION, + form::label => 'pregunta_secreta', + form::obligatorio => true, + )); + $this->set_campo('respuesta_secreta', array( + form::label => 'respuesta_secreta', + form::obligatorio => true, + form::filtro => validador::TIPO_TEXTO, + form::elemento => array('tipo' => 'password'), + form::ayuda => 'Te recomendamos que tu respuesta secreta sea una sola palabra, que NO contenga información personal como: e-mail, nombre, apellido, DNI, ni fecha de nacimiento.', + form::largo => 50 + )); + $this->set_campo('e_mail', array( + form::label => 'email_principal', + form::obligatorio => true, + form::filtro => validador::TIPO_MAIL, + form::elemento => array('tipo' => 'text'), + form::readonly => $e_mail_readonly, + form::largo => 100 + )); + + $this->set_campo('e_mail_rep', array( + form::label => 'email_rep', + form::obligatorio => true, + form::filtro => validador::TIPO_MAIL, + form::elemento => array('tipo' => 'text'), + form::readonly => $e_mail_readonly, + form::largo => 100 + )); + + $this->set_campo('password', array( + form::label => 'clave', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'password'), + form::ayuda => 'Te recomendamos que tu clave posea números, letras, caracteres especiales. Que NO contenga información personal como: e-mail, nombre, apellido, DNI, ni fecha de nacimiento.', + form::largo => 30 + )); + + $this->set_campo('rpassword', array( + form::label => 'repetir_clave', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'password'), + form::largo => 30 + )); + /*---- nombre apellido elegido ------------------------------------------------ + $this->set_campo('apellido_elegido', array( + form::label => 'apellido_elegido', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 60 + ));*/ + + $this->set_campo('nombres_elegido', array( + form::label => 'nombres_elegido', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::ayuda => kernel::traductor()->trans('nombres_elegido_ayuda'), + form::largo => 60 + )); + //---- Datos personales ------------------------------------------------ + $this->set_campo('apellido', array( + form::label => 'apellido', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::largo => 60 + )); + + $this->set_campo('nombres', array( + form::label => 'nombres', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::largo => 60 + )); + + $this->set_campo('nacionalidad', array( + form::label => 'nacionalidad', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_nacionalidades(), + form::valor_default => opciones::NO_SELECCION, + )); + + $this->set_campo('pais_documento', array( + form::label => 'pais_documento', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_paises(), + )); + + $this->set_campo('tipo_documento', array( + form::label => 'tipo_documento', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'select'), + form::validar_select => false, + form::multi_options => [], + form::valor_default => opciones::NO_SELECCION, + )); + + $this->set_campo('nro_documento', array( + form::label => 'nro_documento', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::largo => 20 + )); + + $this->set_campo('nro_documento_rep', array( + form::label => 'nro_documento_rep', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::largo => 20 + )); + + $this->set_campo('sexo', array( + form::label => 'sexo', + form::obligatorio => true, + form::filtro => validador::TIPO_TEXTO, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_generos(), + )); + + if (kernel::proyecto()->get_mat_validacion_renaper() == comunes::si){ + + $this->set_campo('nro_tramite_dni', array( + form::label => 'nro_tramite_dni', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 11 + )); + + //---- Datos de nacimiento --------------------------------------------- + $this->set_campo('fecha_nacimiento', array( + form::label => 'fecha_nacimiento', + form::filtro => validador::TIPO_DATE, + form::filtro_params => array('format' => 'd/m/Y', + 'allowempty' => true), + form::clase_css => 'date input-small', + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden') + )); + //---- Domicilio de procedencia ---------------------------------------- + $this->set_campo('calle_proc', array( + form::label => 'calle_proc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::largo => 50 + )); + + $this->set_campo('numero_proc', array( + form::label => 'numero_proc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::largo => 10, + form::clase_css => 'input-medium', + )); + + $this->set_campo('piso_proc', array( + form::label => 'piso_proc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::largo => 3, + form::clase_css => 'input-medium', + )); + + $this->set_campo('dpto_proc', array( + form::label => 'dpto_proc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::largo => 5, + form::clase_css => 'input-medium', + )); + + $this->set_campo('cp_proc', array( + form::label => 'cp_proc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::readonly => false, + form::clase_css => 'input-small', + form::largo => 15 + )); + + $this->set_campo('barrio_proc', array( + form::label => 'barrio_proc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::largo => 60 + )); + + $this->set_campo('validado_con_renaper', array( + form::label => 'validado_con_renaper', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::largo => 1 + )); + //Lo defino para guardar el dato de renaper + $this->set_campo('numero_cuil', array( + form::label => 'numero_cuil', + form::filtro => validador::TIPO_INT, + form::filtro_params => array('allowempty' => true), + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::largo => 15 + )); + }else{ + $this->set_campo('fecha_nacimiento', array( + form::label => 'fecha_nacimiento', + form::filtro => validador::TIPO_DATE, + form::filtro_params => array('format' => 'd/m/Y', + 'allowempty' => true), + form::clase_css => 'date input-small', + form::obligatorio => true, + form::elemento => array('tipo' => 'text') + )); + } + } + + //-------------------------------------------------------------------------- + //---- Validaciones -------------------------------------------------------- + //-------------------------------------------------------------------------- + + function validar() + { + $this->datos['e_mail'] = a_minusculas($this->datos['e_mail']); + $this->datos['e_mail_rep'] = a_minusculas($this->datos['e_mail_rep']); + $esta_seteada = kernel::sesion()->esta_seteada('validado_con_renaper'); + if($esta_seteada == comunes::si && kernel::sesion()->get('validado_con_renaper') == comunes::si){ + $apellido = kernel::sesion()->get('renaper_persona')['lastNames']; + $nombres = kernel::sesion()->get('renaper_persona')['names']; + $this->set_dato('apellido', $apellido); + $this->set_dato('nombres', $nombres); + } + + $form_valido = parent::validar(); + $mail_repetido_valido = $this->validar_emails(); + $clave_valida = $this->validar_clave(); + $documento_valido = $this->validar_documento(); + $nro_documento_valido = $this->validar_nro_documento(); + kernel::sesion()->borrar('validado_con_renaper'); + kernel::sesion()->borrar('renaper_persona'); + return $form_valido && $mail_repetido_valido && $clave_valida && $documento_valido && $nro_documento_valido; + } + + protected function validar_emails() + { + $email_ok = true; + + if ((!empty($this->datos['e_mail'])) && (!empty($this->datos['e_mail_rep']))) { + $usuario = trim($this->datos['e_mail']); + $usuario_rep = trim($this->datos['e_mail_rep']); + + if ($usuario != $usuario_rep) { + // Se valida que las claves sean iguales + $mensaje = kernel::traductor()->trans('error_emails_no_coinciden'); + $this->agregar_error('e_mail', $mensaje); + $this->agregar_error('e_mail_rep', $mensaje); + $email_ok = false; + } + } + + return $email_ok; + } + + protected function validar_clave() + { + $clave_valida = true; + + if ((!empty($this->datos['password'])) && (!empty($this->datos['rpassword']))) { + $clave = trim($this->datos['password']); + $rclave = trim($this->datos['rpassword']); + + if ($clave != $rclave) { + // Se valida que las claves sean iguales + $mensaje = kernel::traductor()->trans('error_clave_no_coinciden'); + $this->agregar_error('password', $mensaje); + $this->agregar_error('rpassword', $mensaje); + $clave_valida = false; + } else { + if (!empty($this->datos['e_mail'])) { + $e_mail = $this->datos['e_mail']; + try { + // Se realizan el resto de las validaciones de clave + preinscripcion::usuario()->clave_permitida($clave, $e_mail); + } catch (error_preinscripcion_clave $e) { + $clave_valida = false; + $this->agregar_error('password', $e->get_mensaje()); + } catch (error_preinscripcion $e) { + $clave_valida = false; + $this->agregar_error('password', $e->get_mensaje()); + } + } + } + } + + return $clave_valida; + } + + protected function validar_documento() + { + $documento_valido = true; + + if ((!$this->tiene_error('nacionalidad')) && (!$this->tiene_error('pais_documento')) && (!$this->tiene_error('tipo_documento'))) { + $nacion = $this->datos['nacionalidad']; + $paisdoc = $this->datos['pais_documento']; + $tipodoc = $this->datos['tipo_documento']; + // Validaciones de País del Documento + if ($nacion != 2 && $paisdoc != 54) { + $mensaje = kernel::traductor()->trans('error_pais_doc_1'); + $this->agregar_error('pais_documento', $mensaje); + $documento_valido = false; + }// Validaciones de País del Documento$documentos_pais mdp_tipo_documento_pais.pais|| '_' || mdp_tipo_documento.tipo_documento + $documentos_pais = g3::entidad('tipos_documentos_pais')->get_entidad($paisdoc.'_'.$tipodoc); + // Validaciones de Tipo de Documento + if (empty($documentos_pais)){ + $mensaje = kernel::traductor()->trans('error_pais_doc_0'); + $this->agregar_error('pais_documento', $mensaje); + $this->agregar_error('tipo_documento', $mensaje); + $documento_valido = false; + } + + } + + return $documento_valido; + } + + function validar_nro_documento() + { + $entidad_tipo_doc = g3::entidad('tipos_documentos_pais')->get_entidad($this->datos['pais_documento']."_".$this->datos['tipo_documento']); + + // Validación en base a la expresión regular + $valido = true; + $exp_reg= '/' . $entidad_tipo_doc['exp_regular_validacion'] . '/'; + if (!preg_match($exp_reg, $this->datos['nro_documento'])) { + // Documento inválido según la expresión regular + $valido = false; + $this->agregar_error('nro_documento', $entidad_tipo_doc['exp_regular_mensaje']); + } + + switch ($this->datos['tipo_documento']) { + case comunes::TIPO_DOCUMENTO_DNI: + // Valida que el DNI sea mayor a 1 millón y menor a 100 millones. + if (($this->datos['nro_documento'] < comunes::NRO_DOCUMENTO_DNI_DNT_MIN) || ($this->datos['nro_documento'] > comunes::NRO_DOCUMENTO_DNI_DNT_MAX)) { + $mensaje = kernel::traductor()->trans('nro_documento.dni.error'); + $this->agregar_error('nro_documento', $mensaje); + $valido = false; + } + break; + case comunes::TIPO_DOCUMENTO_CUIL_CUIT: + // Valida que el CUIL/CUIT sea valido. + if (!comunes::validarCUIT($this->datos['nro_documento'])) { + $mensaje = kernel::traductor()->trans('nro_documento.cuil.error'); + $this->agregar_error('nro_documento', $mensaje); + $valido = false; + } + break; + } + + if ($this->datos['nro_documento'] != $this->datos['nro_documento_rep']) { + // Se valida que las claves sean iguales + $mensaje = kernel::traductor()->trans('error_documento_no_coinciden'); + $this->agregar_error('nro_documento', $mensaje); + $this->agregar_error('nro_documento_rep', $mensaje); + $valido = false; + } + return $valido; + } + + +} \ No newline at end of file diff --git a/src/siu/operaciones/alta_usuario/crear_usuario/mail_crear_usuario.twig b/src/siu/operaciones/alta_usuario/crear_usuario/mail_crear_usuario.twig new file mode 100644 index 0000000..365bdf2 --- /dev/null +++ b/src/siu/operaciones/alta_usuario/crear_usuario/mail_crear_usuario.twig @@ -0,0 +1,22 @@ + + + + + + +

+ {{ 'cuerpo_email_crear_usuario'|trans({ + '%mail%': mail, + '%link%': link, + '%apellido%': apellido, + '%nombres%': nombres, + '%nacionalidad%': nacionalidad, + '%pais_documento%': pais_documento, + '%tipo_documento%': tipo_documento, + '%nro_documento%': nro_documento, + '%nro_preincripcion%': id_preinscripcion + })|raw + }} +

+ + \ No newline at end of file diff --git a/src/siu/operaciones/alta_usuario/crear_usuario/pagelet_crear_usuario.js b/src/siu/operaciones/alta_usuario/crear_usuario/pagelet_crear_usuario.js new file mode 100644 index 0000000..de5a21f --- /dev/null +++ b/src/siu/operaciones/alta_usuario/crear_usuario/pagelet_crear_usuario.js @@ -0,0 +1,602 @@ +var url_cascada_nac; +var url_tipo_documentos; +var url_tipo_documentos_validacion; +var url_nro_tramite_dni_validacion; +var url_img_nro_tramite_dni; + +var tipo_documento_dni; +var tipo_documento_dnt; +var tipo_documento_cuil_cuit; +var tipo_documento_cedula_diplomatica; +var tipo_documento_pasaporte; + +var nro_documento_dni_dnt_min; +var nro_documento_dni_dnt_max; + +var msj_nro_documento_dni_leyenda; +var msj_nro_documento_dni_error; +var msj_nro_documento_cuil_leyenda; +var msj_nro_documento_dni_rep; +var msj_ayuda_numero_tramite; +var msj_ayuda_documento; +var info_dni_en_tramite; + +var msj_nro_tramite_dni_leyenda; +var msj_nro_tramite_dni_error; +var msj_ws_renaper_error; +var msj_Exito; + +var mat_validacion_renaper; + +var tipo_documento; +var no_seleccion = 'null'; +var errores_formulario = false; + +var div_apellido_nombre; +var dt_apellido; +var dt_nombre; + +function set_solo_lectura(elemId, solo_lectura) +{ + elemId = '#' + elemId; + if (solo_lectura) { + $(elemId).attr('readonly', true); + } else { + $(elemId).attr('readonly', false); + } +} + +function set_val(elemId, iniciar, valor) +{ + valor = typeof valor !== 'undefined' ? valor : ''; + + elemId = '#' + elemId; + if (iniciar) { + $(elemId).val(''); + } else { + $(elemId).val(valor); + $(elemId).value = valor; + } +} + +function inicializar_nacionalidad() +{ + var nacionalidad = $('#form_crear_usuario-nacionalidad').val(); + var pais_documento = $('#form_crear_usuario-pais_documento').val(); + + if (nacionalidad === no_seleccion) { + set_solo_lectura('form_crear_usuario-pais_documento', true); + $('#form_crear_usuario-pais_documento').children().remove(); + } else { + buscar_paises(nacionalidad); + set_solo_lectura('form_crear_usuario-pais_documento', false); + if (nacionalidad !== '2') { + set_solo_lectura('form_crear_usuario-tipo_documento', false); + } else { + set_solo_lectura('form_crear_usuario-tipo_documento', true); + } + } + + $('#form_crear_usuario-pais_documento').val(pais_documento); +} + +function cambio_nacionalidad() +{ + var nacionalidad = $('#form_crear_usuario-nacionalidad').val(); + cambio_nro_tramite_dni(); + if (nacionalidad === no_seleccion) { + set_solo_lectura('form_crear_usuario-pais_documento', true); + $('#form_crear_usuario-pais_documento').children().remove(); + } else { + buscar_paises(nacionalidad); + set_solo_lectura('form_crear_usuario-pais_documento', false); + if (nacionalidad !== '2') { + set_solo_lectura('form_crear_usuario-tipo_documento', false); + } else { + set_solo_lectura('form_crear_usuario-tipo_documento', true); + } + } + cambio_pais_documento(); +} + +function buscar_paises(_nacionalidad) +{ + $.ajax({ + url: url_cascada_nac, + dataType: 'json', + async: false, + data: {nacionalidad: _nacionalidad}, + type: 'post', + success: function (data) + { + $('#form_crear_usuario-pais_documento').children().remove(); + $.each(data, function (key, value) + { + $('#form_crear_usuario-pais_documento').append( + $('').val(key).html(value) + ); + }); + ordenar_combo('form_crear_usuario-pais_documento'); + } + }); +} + +function buscar_tipo_documento_paises(_pais_documento) +{ + + $.ajax({ + url:url_tipo_documentos, + dataType: 'json', + async: false, + data: {pais: _pais_documento}, + type: 'post', + success: function (data) + { + $('#form_crear_usuario-tipo_documento').children().remove(); + $.each(data, function (key, value) + { + $('#form_crear_usuario-tipo_documento').append( + $('').val(key).html(value) + ); + }); + ordenar_combo('form_crear_usuario-tipo_documento'); + $("#form_crear_usuario-tipo_documento").val(tipo_documento); + } + }); +} +function cambio_pais_documento() +{ + var valor = $('#form_crear_usuario-pais_documento').val(); + if(mat_validacion_renaper === 'S'){ + cambio_nro_tramite_dni(); + pos_validar_nro_tramite_dni();} + if ((valor === no_seleccion) || (valor === null)) { + set_solo_lectura('form_crear_usuario-tipo_documento', true); + $('#form_crear_usuario-tipo_documento').val(no_seleccion); + } else { + set_solo_lectura('form_crear_usuario-tipo_documento', false); + buscar_tipo_documento_paises(valor); + } + cambio_tipo_documento(); +} + +function cambio_tipo_documento() +{ + var valor = $('#form_crear_usuario-tipo_documento').val(); + var pais = $('#form_crear_usuario-pais_documento').val(); + //paises miembros del mercosur + var paises_mercosur =['54','55','595','591','593','57','598','592','51','597']; + if(mat_validacion_renaper === 'S'){ + cambio_nro_tramite_dni(); + pos_validar_nro_tramite_dni();} + // Activación / desactivación de campo Nro. documento + if (valor === null) { + set_solo_lectura('form_crear_usuario-nro_documento', true); + set_solo_lectura('form_crear_usuario-nro_documento_rep', true); + } else { + set_solo_lectura('form_crear_usuario-nro_documento', false); + set_solo_lectura('form_crear_usuario-nro_documento_rep', false); + } + + switch (valor) { + // Si el tipo de documento es DNI + case tipo_documento_dni: + $("#js_nro_documento").html(msj_nro_documento_dni_leyenda).slideDown("slow"); + var tooltip_info_dni_tramite = "

"; + var input = $('#form_crear_usuario-nro_tramite_dni'); + input = input.after(tooltip_info_dni_tramite); + $('.icon-info-sign').tooltip('show'); + + var nacionalidad = $('#form_crear_usuario-nacionalidad').val(); + if(nacionalidad !== null && nacionalidad === tipo_documento_dnt){ + $("#js_renaper").slideDown("slow"); + }else{ + $("#js_renaper").slideUp("slow"); + if (paises_mercosur.includes(pais)===false){ + $('#js_nro_documento').html(msj_ayuda_documento).slideDown('slow'); + } + } + + break; + // Si el tipo de documento es CUIL/CUIT + case tipo_documento_cuil_cuit: + $("#js_nro_documento").html(msj_nro_documento_cuil_leyenda).slideDown("slow"); + $("#js_renaper").slideUp("slow"); + break; + default: + $("#js_nro_documento").slideUp("slow"); + $("#js_renaper").slideUp("slow"); + break; + } +} + +function cambio_nro_tramite_dni() +{ + if(mat_validacion_renaper === 'S'){ + + var tipo_doc = $('#form_crear_usuario-tipo_documento').val(); + var nacionalidad = $('#form_crear_usuario-nacionalidad').val(); + if(nacionalidad === tipo_documento_dnt){ + if (tipo_doc === null) { + set_solo_lectura('form_crear_usuario-nro_tramite_dni', true); + } else { + if(tipo_doc === tipo_documento_dni){ + set_solo_lectura('form_crear_usuario-nro_tramite_dni', false); + }else{ + set_solo_lectura('form_crear_usuario-nro_tramite_dni', true); + $("#js_nro_tramite_dni").slideUp("slow"); + + } + } + }else{ + $("#js_renaper").slideUp("slow"); + } + + } +} + +function validar_documento(_pais_documento, _tipo_documento, nro_documento) +{ + + $.ajax({ + url: url_tipo_documentos_validacion, + dataType: 'json', + async: false, + data: {tipo_documento: _tipo_documento, pais: _pais_documento, nro_documento: nro_documento}, + type: 'post', + success: function (data) + { + errores_formulario = false; + var exp_reg = new RegExp(data.exp_regular_validacion); + var control_group = $('#form_crear_usuario-nro_documento').parents('.control-group'); + $(control_group).removeClass('error'); + var span = $(control_group).find('span.help-inline'); + $(span).remove(); + if (!exp_reg.test(nro_documento)) { + $(control_group).addClass('error'); + $(control_group).append('' + data.exp_regular_mensaje + ''); + errores_formulario = true; + } else { + + // Validaciones extras + switch (_tipo_documento) { + // Si el tipo de documento es DNI + case tipo_documento_dni: + // Valida que el DNI sea mayor a 1 millón y menor a 100 millones. + if ((parseInt(nro_documento) < parseInt(nro_documento_dni_dnt_min)) || (parseInt(nro_documento) > parseInt(nro_documento_dni_dnt_max))) { + $(control_group).addClass('error'); + $(control_group).append('' + msj_nro_documento_dni_error + ''); + errores_formulario = true; + } + var nro_documento_rep = $('#form_crear_usuario-nro_documento_rep').val(); + if (nro_documento_rep && nro_documento_rep !== nro_documento) { + $(control_group).addClass('error'); + $(control_group).append('' + msj_nro_documento_dni_rep + ''); + errores_formulario = true; + } + + break; + // Si el tipo de documento es CUIL/CUIT + case tipo_documento_cuil_cuit: + // Valida el CUIL/CUIT. + if (data.mensaje_validacion_cuil) { + $(control_group).addClass('error'); + $(control_group).append('' + data.mensaje_validacion_cuil + ''); + errores_formulario = true; + } + + break; + } + } + } + }); + +} + +function validar_nro_tramite_dni() +{ + var _pais_documento = $('#form_crear_usuario-pais_documento').val(); + var _tipo_documento = $('#form_crear_usuario-tipo_documento').val(); + var nro_documento = $('#form_crear_usuario-nro_documento').val(); + var nro_tramite_dni = $('#form_crear_usuario-nro_tramite_dni').val(); + var genero = $('#form_crear_usuario-sexo').val(); + if(_pais_documento && _tipo_documento && nro_documento && nro_tramite_dni && genero){ + $.ajax({ + url: url_nro_tramite_dni_validacion, + dataType: 'json', + async: false, + data: {nro_documento: nro_documento, nro_tramite_dni : nro_tramite_dni ,genero: genero}, + type: 'post', + success: function (data) + { + var objeto = ''; + errores_formulario = false; + if(data !== null && data !== ''){ + objeto = JSON.parse(data); + if(objeto['message'] === msj_Exito && objeto['person'] !== ""){ + //Seteo los valores devueltos por renaper + errores_formulario = false; + pos_validar_nro_tramite_dni(objeto['person']); + }else{ + //Si la persona no se encuentra en RENAPER muestra mensaje de error + var control_group = $('#form_crear_usuario-nro_tramite_dni').parents('.control-group'); + $(control_group).removeClass('error'); + var span = $(control_group).find('span.help-inline'); + $(span).remove(); + $(control_group).addClass('error'); + $(control_group).append('' + msj_ws_renaper_error + ''); + } + }else{ + //Si la persona no se encuentra en RENAPER muestra mensaje de error + var control_group = $('#form_crear_usuario-nro_tramite_dni').parents('.control-group'); + $(control_group).removeClass('error'); + var span = $(control_group).find('span.help-inline'); + $(span).remove(); + $(control_group).addClass('error'); + $(control_group).append('' + msj_ws_renaper_error + ''); + + //Los vuelvo al valor inicial, todos vacios + pos_validar_nro_tramite_dni(objeto, false); + errores_formulario = true; + } + + } + }); + } +} +/* + * Una vez completado el campo del nro de tramite asigna con los datos del renaper los siguientes inputs + * Si no encuentra la persona los vuelve a iniciarlizar, dejando en blanco los campos siguientes + */ +function pos_validar_nro_tramite_dni(persona, setear_valor) +{ + + persona = typeof persona !== 'undefined' ? persona : ''; + setear_valor = typeof setear_valor !== 'undefined' ? setear_valor : true; + + if (setear_valor && persona !== ''){ + //Apellidos + persona = JSON.parse(persona); + + $("#apellido_nombre").children().remove(); + + $("#apellido_nombre").append( + $('
') + .attr("id", "div_apellido") + .addClass("control-group span6") + .append(dt_apellido) + .append("

"+persona['lastNames']+"

") + ); + + $("#apellido_nombre").append( + $('
') + .attr("id", "div_nombres") + .addClass("control-group span6") + .append(dt_nombre) + .append("

"+persona['names']+"

") + ); + //No permito que se cambie el numero de tramite + set_solo_lectura('form_crear_usuario-nro_tramite_dni', true); + set_val('form_crear_usuario-validado_con_renaper', false, mat_validacion_renaper); + set_solo_lectura('form_crear_usuario-apellido', true); + set_val('form_crear_usuario-apellido',false,persona['lastNames']); + //Nombres + set_solo_lectura('form_crear_usuario-nombres', true); + set_val('form_crear_usuario-nombres',false,persona['names']); + + //los inputs ocultos asigno datos de renaper + set_val('form_crear_usuario-fecha_nacimiento',false,persona['birthdate']); + set_val('form_crear_usuario-calle_proc',false,persona['streetAddress']); + set_val('form_crear_usuario-numero_proc',false,persona['numberStreet']); + set_val('form_crear_usuario-piso_proc',false,persona['floor']); + set_val('form_crear_usuario-dpto_proc',false,persona['department']); + set_val('form_crear_usuario-cp_proc',false,persona['zipCode']); + set_val('form_crear_usuario-barrio_proc',false,persona['city']); + set_val('form_crear_usuario-numero_cuil',false,persona['cuil']); + $('#validar').prop('disabled',true); + + } else { + $("#apellido_nombre").children().remove(); + $("#apellido_nombre").append(div_apellido_nombre); + //No permito que se cambie el numero de tramite + set_solo_lectura('form_crear_usuario-nro_tramite_dni', false); + + //serializo y vuelvo a los valores iniciales del formulario, para ser cargados + set_solo_lectura('form_crear_usuario-apellido', false); + set_val('form_crear_usuario-apellido',true); + //Nombres + set_solo_lectura('form_crear_usuario-nombres', false); + set_val('form_crear_usuario-nombres',true); + + //los inputs ocultos + set_val('form_crear_usuario-fecha_nacimiento',true); + set_val('form_crear_usuario-calle_proc',true); + set_val('form_crear_usuario-numero_proc',true); + set_val('form_crear_usuario-piso_proc',true); + set_val('form_crear_usuario-dpto_proc',true); + set_val('form_crear_usuario-cp_proc',true); + set_val('form_crear_usuario-barrio_proc',true); + set_val('form_crear_usuario-validado_con_renaper', false, 'N'); + $('#validar').removeAttr("disabled"); + + } + + +} + +kernel.renderer.registrar_pagelet('crear_usuario', function (info) +{ + var id = '#' + info.id; + url_cascada_nac = info.url_paises; + url_tipo_documentos = info.url_tipo_documentos; + url_tipo_documentos_validacion = info.url_tipo_documentos_validacion; + url_nro_tramite_dni_validacion = info.url_nro_tramite_dni_validacion; + url_img_nro_tramite_dni = info.url_img_nro_tramite_dni; + mat_validacion_renaper = info.mat_validacion_renaper; + tipo_documento = info.tipo_documento; + msj_Exito = info.msj_Exito; + + // Tipos de documentos + tipo_documento_dni = info.tipo_documento_dni; + tipo_documento_dnt = info.tipo_documento_dnt; + tipo_documento_cuil_cuit = info.tipo_documento_cuil_cuit; + tipo_documento_cedula_diplomatica = info.tipo_documento_cedula_diplomatica; + tipo_documento_pasaporte = info.tipo_documento_pasaporte; + + // Máximos y mínimos de números de documento + nro_documento_dni_dnt_min = info.nro_documento_dni_dnt_min; + nro_documento_dni_dnt_max = info.nro_documento_dni_dnt_max; + + // Mensajes + msj_nro_documento_dni_leyenda = info.mensajes.msj_nro_documento_dni_leyenda; + msj_nro_documento_dni_error = info.mensajes.msj_nro_documento_dni_error; + msj_nro_documento_cuil_leyenda = info.mensajes.msj_nro_documento_cuil_leyenda; + msj_nro_documento_dni_rep = info.mensajes.msj_nro_documento_dni_rep; + + msj_nro_tramite_dni_leyenda = info.mensajes.msj_nro_tramite_dni_leyenda; + msj_nro_tramite_dni_error = info.mensajes.msj_nro_tramite_dni_error; + msj_ws_renaper_error = info.mensajes.msj_ws_renaper_error; + msj_ayuda_numero_tramite = info.mensajes.msj_ayuda_numero_tramite; + msj_ayuda_documento = info.mensajes.msj_ayuda_documento; + info_dni_en_tramite = info.mensajes.info_dni_en_tramite; + dt_apellido = $("#form_crear_usuario-apellido-label").clone(); + dt_nombre = $("#form_crear_usuario-nombres-label").clone(); + + div_apellido = $("#div_apellido").clone(); + div_nombre = $("#div_nombres").clone(); + //---- Date Picker ------------------------------------------------- + $.datepicker.setDefaults( $.datepicker.regional["es"] ); + $(id).find('input.date').datepicker({ + changeMonth: true, + changeYear: true, + firstDay: 1, + yearRange: "-150:+0", + maxDate: "-15y" + }); + div_apellido_nombre = $('#apellido_nombre').clone();//Lo uso para crear nuevamente el div cuando se elimina + +return { + onload: function () + { + + var control_group = $('#form_crear_usuario-respuesta_secreta').parents('.control-group'); + $(control_group).append(''); + + var control_group = $('#form_crear_usuario-password').parents('.control-group'); + $(control_group).append(''); + + var control_group = $('#form_crear_usuario-rpassword').parents('.control-group'); + $(control_group).append(''); + $(id).on("click", ".js-cic-icon", function (e) { + + var id_input = $(this).attr("data-id-input") + + // Si se quiere mostrar el "Código inscripción" + if ($(this).hasClass("icon-eye-close")) { + $(this).removeClass("icon-eye-close"); + $(this).addClass("icon-eye-open"); + $("#" + id_input).attr("type", "text"); + } else {// Si se quiere ocultar el "Código inscripción" + $(this).removeClass("icon-eye-open"); + $(this).addClass("icon-eye-close"); + $("#" + id_input).attr("type", "password"); + } + }); + $('#form_crear_usuario').submit(function () + { + if (errores_formulario) { + kernel.ui.show_mensaje('Error en el formulario', {tipo: 'alert-error'}); + return false; + } + }); + + inicializar_nacionalidad(); + cambio_pais_documento(); + + //---- Manejo de visibilidad de secciones por eventos -------------- + $('#form_crear_usuario-nacionalidad').on('change', function () + { + cambio_nacionalidad(); + }); + $('#form_crear_usuario-pais_documento').on('change', function () + { + cambio_pais_documento(); + }); + $('#form_crear_usuario-tipo_documento').on('change', function () + { + cambio_tipo_documento(); + }); + $('#form_crear_usuario-nro_documento').on('change', function () + { + validar_documento($('#form_crear_usuario-pais_documento').val(), $('#form_crear_usuario-tipo_documento').val(), $('#form_crear_usuario-nro_documento').val()); + } + ); + + $('#form_crear_usuario-nro_tramite_dni').on('change', function () + { + var length = $('#form_crear_usuario-nro_tramite_dni').val().length; + var valor = $('#form_crear_usuario-nro_tramite_dni').val(); + var control_group = $('#form_crear_usuario-nro_tramite_dni').parents('.control-group'); + var regex = new RegExp(info.regexp_nro_tramite_dni,'i'); + + $(control_group).removeClass('error'); + var span = $(control_group).find('span.help-inline'); + $(span).remove(); + if(length !== 11 || regex.test(valor) === false){ + $(control_group).addClass('error'); + $(control_group).append('' + msj_nro_tramite_dni_error + ''); + pos_validar_nro_tramite_dni(); + } + } + ); + + $('#form_crear_usuario-nro_documento_rep').on('change', function () + { + var nro_documento = $('#form_crear_usuario-nro_documento').val(); + var nro_documento_rep = $('#form_crear_usuario-nro_documento_rep').val(); + if (nro_documento_rep && nro_documento && nro_documento_rep !== nro_documento) { + var control_group = $('#form_crear_usuario-nro_documento').parents('.control-group'); + $(control_group).removeClass('error'); + var span = $(control_group).find('span.help-inline'); + $(control_group).addClass('error'); + $(control_group).append('' + msj_nro_documento_dni_rep + ''); + errores_formulario = true; + } + } + ); + + //------------------------------------------------------------------ + + $('#frameRC').contents().on('keypress', function (e) + { + if (e.which === 13) { + $('#form_crear_usuario').submit(); + } + }); + $('#form_crear_usuario-telefono').attr('autocomplete', 'off'); + $('#form_crear_usuario-respuesta_secreta').attr('autocomplete', 'off'); + $('#form_crear_usuario-usuario').attr('autocomplete', 'off'); + $('#form_crear_usuario-usuario_rep').attr('autocomplete', 'off'); + $('#form_crear_usuario-password').attr('autocomplete', 'off'); + $('#form_crear_usuario-rpassword').attr('autocomplete', 'off'); + $('#form_crear_usuario-usuario_rep').on('paste', function () + { + return false; + }); + + //--------docuemntorepetir-------------------------------- + $('#form_crear_usuario-nro_documento_rep').on('paste', function () + { + return false; + }); + $('#form_crear_usuario-nro_documento_rep').attr('autocomplete', 'off'); + $('#ayuda_numero_tramite').popover({ + trigger: 'click', + html: true, + content: function(){ + return ''; + } + }); + } + }; +}); diff --git a/src/siu/operaciones/alta_usuario/pagelet_confirm_doc_existente.php b/src/siu/operaciones/alta_usuario/pagelet_confirm_doc_existente.php new file mode 100644 index 0000000..40d389f --- /dev/null +++ b/src/siu/operaciones/alta_usuario/pagelet_confirm_doc_existente.php @@ -0,0 +1,80 @@ +esta_seteada('__doc_ex__datos_usuario')) { + die(); + } + + $datos_usuario = kernel::sesion()->get('__doc_ex__datos_usuario'); + $valores_form = kernel::sesion()->get('__doc_ex__valores_form'); + $datos_ayuda = kernel::sesion()->get('__doc_ex__datos_ayuda'); + + $apellido = $this->ocultar_texto($datos_usuario['apellido']); + $nombres = $this->ocultar_texto($datos_usuario['nombres']); + $fecha_reg = convertir_fecha_formato_frontend($datos_usuario['fecha_registro']); + $mail = $this->ocultar_mail($datos_usuario['e_mail']); + + $this->data['confirm_doc_existente_1'] = kernel::traductor()->trans('confirm_doc_existente_1', array('%1%' => $apellido . ' ' . $nombres, '%2%' => $fecha_reg, '%3%' => $mail)); + + //ayuda + + $this->data['datos_ayuda'] = $datos_ayuda; + if (empty($datos_usuario['email_valido'])) { + + //-- Cuenta no confirmada => se ofrece reenviar mail de alta ------- + $this->data['recuperar_clave'] = false; + $this->data['url_accion'] = kernel::vinculador()->crear('alta_usuario', 'reenvio_mail'); + $this->data['confirm_doc_existente_2'] = kernel::traductor()->trans('confirm_doc_existente_2_2'); + } else { + + //-- Cuenta confirmada => se ofrece recuperar clave ---------------- + $this->data['recuperar_clave'] = true; + $this->data['url_accion'] = kernel::vinculador()->crear('acceso', 'recuperar'); + $this->data['confirm_doc_existente_2'] = kernel::traductor()->trans('confirm_doc_existente_2_1'); + //-- Cuenta confirmada => se ofrece cambiar correo---------------- + $this->data['url_continuar_2_2'] = kernel::vinculador()->crear('acceso', 'recuperar'); + $this->data['confirm_doc_existente_2_2'] = kernel::traductor()->trans('confirm_doc_existente_2_3'); + $this->data['confirm_doc_existente_3'] = kernel::traductor()->trans('confirm_doc_existente_3'); + //-- Cuenta confirmada => si no sos la misma persona---------------- + $this->data['url_continuar'] = kernel::vinculador()->crear('alta_usuario', 'continuar_preinscripcion'); + } + + + } + + //-------------------------------------------------------------------------- + + protected function ocultar_texto($texto) + { + return substr_replace($texto, '***', 3); + } + + protected function ocultar_mail($mail) + { + $aux = substr_replace($mail, '***', 3, strpos($mail, '@') - 3); + $pos_punto = strpos($aux, '.', strpos($aux, '@')); + $aux = substr_replace($aux, '***', $pos_punto); + return $aux; + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/alta_usuario/pagelet_contenido_alta.php b/src/siu/operaciones/alta_usuario/pagelet_contenido_alta.php new file mode 100644 index 0000000..35563d8 --- /dev/null +++ b/src/siu/operaciones/alta_usuario/pagelet_contenido_alta.php @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/src/siu/operaciones/alta_usuario/pagelet_crear_usuario.php b/src/siu/operaciones/alta_usuario/pagelet_crear_usuario.php new file mode 100644 index 0000000..f9c81bb --- /dev/null +++ b/src/siu/operaciones/alta_usuario/pagelet_crear_usuario.php @@ -0,0 +1,142 @@ +existe_periodo_abierto()) { + kernel::sesion()->set('msj_pagina_error', kernel::traductor()->trans('no_existen_periodos')); + throw new nuevo_request('pagina_error'); + } + } + + function get_nombre() + { + return 'crear_usuario'; + } + + function get_form($id_html = null) + { + if (!isset($this->form)) { + $this->form = kernel::localizador()->instanciar('operaciones\alta_usuario\crear_usuario\form_crear_usuario'); + } + return $this->form; + } + + function prepare() + { + $this->add_var_js('url_paises', kernel::vinculador()->crear('alta_usuario', 'cascada_nacionalidad')); + $this->add_var_js('url_tipo_documentos', kernel::vinculador()->crear('alta_usuario', 'datos_tipo_documento')); + $this->add_var_js('url_tipo_documentos_validacion', kernel::vinculador()->crear('alta_usuario', 'datos_tipo_documento_validar')); + $this->add_var_js('url_nro_tramite_dni_validacion', kernel::vinculador()->crear('alta_usuario', 'datos_nro_tramite_dni')); + $this->add_var_js('msj_Exito', ws_renaper::EXITO); + + $nro_tramite_dni = str_replace(['/', 'i'], '', \siu\modelo\comunes::er_numero_entero); + $this->add_var_js('regexp_nro_tramite_dni', $nro_tramite_dni); + //obtengo el parametro de renaper + $parametro = kernel::proyecto()->get_mat_validacion_renaper(); + $this->add_var_js('mat_validacion_renaper', $parametro); + $this->data['mat_validacion_renaper'] = $parametro; + + $this->add_mensaje_js('msj_nro_documento_dni_leyenda', kernel::traductor()->trans('nro_documento.dni.leyenda')); + $this->add_mensaje_js('msj_nro_documento_dni_error', kernel::traductor()->trans('nro_documento.dni.error')); + $this->add_mensaje_js('msj_nro_documento_dni_rep', kernel::traductor()->trans('nro_documento.dni.rep')); + $this->add_mensaje_js('msj_nro_documento_cuil_leyenda', kernel::traductor()->trans('nro_documento.cuil.leyenda')); + + $this->add_mensaje_js('msj_nro_tramite_dni_leyenda', kernel::traductor()->trans('nro_tramite.dni.leyenda')); + $this->add_mensaje_js('msj_nro_tramite_dni_error', kernel::traductor()->trans('nro_tramite.dni.error')); + $this->add_mensaje_js('msj_ws_renaper_error', kernel::traductor()->trans('nro_tramite.dni.error_ws_renaper')); + $this->add_mensaje_js('msj_ayuda_numero_tramite', kernel::traductor()->trans('ayuda_numero_tramite')); + $this->add_mensaje_js('msj_ayuda_documento', kernel::traductor()->trans('ayuda_documento')); + $this->add_mensaje_js('info_dni_en_tramite', kernel::traductor()->trans('info_dni_en_tramite')); + + $this->add_var_js('nro_documento_dni_dnt_min', comunes::NRO_DOCUMENTO_DNI_DNT_MIN); + $this->add_var_js('nro_documento_dni_dnt_max', comunes::NRO_DOCUMENTO_DNI_DNT_MAX); + + $this->add_var_js('tipo_documento_dni', comunes::TIPO_DOCUMENTO_DNI); + $this->add_var_js('tipo_documento_dnt', comunes::TIPO_DOCUMENTO_DNT); + $this->add_var_js('tipo_documento_cuil_cuit', comunes::TIPO_DOCUMENTO_CUIL_CUIT); + $this->add_var_js('tipo_documento_cedula_diplomatica', comunes::TIPO_DOCUMENTO_CEDULA_DIPLOMATICA); + $this->add_var_js('tipo_documento_pasaporte', comunes::TIPO_DOCUMENTO_PASAPORTE); + $this->add_var_js('url_img_nro_tramite_dni', kernel::vinculador()->vinculo_img('img/nro_de_tramite_dni.jpeg')); + + $this->data['url_img_nro_tramite_dni'] = kernel::vinculador()->vinculo_img('img/nro_de_tramite_dni.jpeg'); + $this->data['mensajes'] = $this->controlador->get_var_default('mensajes', array()); + $this->data['url_volver'] = kernel::vinculador()->crear('acceso', 'index'); + $this->data['usar_captcha'] = $this->controlador->usa_captcha(); + $this->data['captcha_site_key'] = kernel::proyecto()->get_captcha_site_key(); + + $this->data['inicial'] = static::FORM_INICIAL; + $this->data['form_error_validacion'] = static::FORM_ERROR_VALIDACION; + $this->data['error_recaptcha'] = static::FORM_ERROR_RECAPTCHA; + $this->data['form_error_csrf'] = static::FORM_ERROR_CSRF; + $this->data['csrf'] = $this->generar_csrf(); + + if (kernel::sesion()->esta_seteada('alta_se_id')) { + $this->data['msg_alta_se'] = kernel::traductor()->trans('login.msg_alta_se', array('%1%' => capitalizar(kernel::sesion()->get('alta_se_medio')), '%2%' => kernel::sesion()->get('alta_se_mail'))); + $this->data['aclaracion_clave'] = kernel::traductor()->trans('login.se.aclaracion_clave', array('%1%' => capitalizar(kernel::sesion()->get('alta_se_medio')))); + } + + $form = $this->get_form(); + + switch ($this->estado) { + case static::MAIL_ENVIADO: + $this->data['email'] = $this->controlador->get_var('email'); + break; + case static::FORM_ERROR_VALIDACION: + $this->data['mensajes'] = $this->controlador->get_var('mensajes'); + $this->data['mensajes'][0]['raw'] = true;//para que haga el link + $this->data['error'] = true; + $this->data['url_recaptcha'] = kernel::vinculador()->crear('alta_usuario', 'recaptcha'); + $form->inicializar(); + $form->set_datos_desde_post(); + break; + case static::FORM_ERROR_RECAPTCHA: + $this->data['mensajes'] = $this->controlador->get_var('mensajes'); + $this->data['error'] = true; + $this->data['url_recaptcha'] = kernel::vinculador()->crear('alta_usuario', 'recaptcha'); + $form->inicializar(); + $form->set_datos_desde_post(); + break; + case static::FORM_ERROR_CSRF: + $this->data['mensajes'] = $this->controlador->get_var('mensajes'); + $this->data['error'] = true; + $this->data['url_recaptcha'] = kernel::vinculador()->crear('alta_usuario', 'recaptcha'); + $form->inicializar(); + $form->set_datos_desde_post(); + break; + default: + $this->data['nombre_usuario'] = $this->controlador->get_var_default('nombre_usuario', ''); + $this->data['action_crear'] = kernel::vinculador()->crear('alta_usuario', 'crear'); + $this->data['url_recaptcha'] = kernel::vinculador()->crear('alta_usuario', 'recaptcha'); + $form->inicializar(); + + if (kernel::sesion()->esta_seteada('alta_se_mail')) { + $datos = array(); + $datos['e_mail'] = kernel::sesion()->get('alta_se_mail'); + $datos['e_mail_rep'] = kernel::sesion()->get('alta_se_mail'); + $form->set_datos($datos); + } + } + + $datos_form = $form->get_datos(); + $this->add_var_js('tipo_documento', $datos_form['tipo_documento'] ?? null); + + $this->add_form($form); + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/alta_usuario/template.twig b/src/siu/operaciones/alta_usuario/template.twig new file mode 100644 index 0000000..3244acc --- /dev/null +++ b/src/siu/operaciones/alta_usuario/template.twig @@ -0,0 +1,17 @@ +{% extends "kernel/dos_columnas.twig" %} +{% block titulo_operacion %} +

{{"crear_usuario"|trans}}

+ +{% if this.hay_error() %} +
+ + {{ this.get_error()|trans|raw }} +
+{% endif %} +{% endblock %} +{% block columna_1 %} + {{ contenido_alta.render }} +{% endblock %} +{% block columna_2 %} + {{ form.render }} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/alta_usuario/vista.php b/src/siu/operaciones/alta_usuario/vista.php new file mode 100644 index 0000000..3978854 --- /dev/null +++ b/src/siu/operaciones/alta_usuario/vista.php @@ -0,0 +1,48 @@ +instanciar($clase, 'form'); + $this->add_pagelet($pl); + return $pl; + } + + function ini() + { + $clase = 'operaciones\alta_usuario\pagelet_contenido_alta'; + $pl = kernel::localizador()->instanciar($clase, 'contenido_alta'); + $this->add_pagelet($pl); + + kernel::pagina()->set_etiqueta('titulo', kernel::traductor()->trans('tit_alta')); + } + + function pagelet($id) + { + $clase = "operaciones\alta_usuario\pagelet_$id"; + return kernel::localizador()->instanciar($clase, $id); + } + function hay_error() + { + return kernel::sesion()->esta_seteada('mensaje_vista_acceso_error_token'); + } + function get_error() + { + $error = kernel::sesion()->get('mensaje_vista_acceso_error_token'); + kernel::sesion()->borrar('mensaje_vista_acceso_error_token'); + return $error; + } + function set_error($error) + { + kernel::sesion()->set('mensaje_vista_acceso_error_token', $error); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/asociar_usuario_se/asociar_usuario/default.css b/src/siu/operaciones/asociar_usuario_se/asociar_usuario/default.css new file mode 100644 index 0000000..faea8e4 --- /dev/null +++ b/src/siu/operaciones/asociar_usuario_se/asociar_usuario/default.css @@ -0,0 +1,3 @@ +#frameRC { + border: 0; +} \ No newline at end of file diff --git a/src/siu/operaciones/asociar_usuario_se/asociar_usuario/default.twig b/src/siu/operaciones/asociar_usuario_se/asociar_usuario/default.twig new file mode 100644 index 0000000..e0520dd --- /dev/null +++ b/src/siu/operaciones/asociar_usuario_se/asociar_usuario/default.twig @@ -0,0 +1,22 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% set form = this.get_form() %} + {% autoescape false %} + {% if this.data.mensajes %} + {% import "kernel/macro_notificaciones.twig" as notificaciones %} + {{ notificaciones.render_notif(this.data.mensajes) }} + {% endif %} + +

{{'datos_usuario'|trans}}

+ {{ this.data.datos_usuario }} + {{ form.encabezado }} +
+ {{ form.control_group('password') }} +
+
+ {{ form.submit_button('confirmar', 'confirmar')}} + +
+ + {% endautoescape %} +{% endblock %} diff --git a/src/siu/operaciones/asociar_usuario_se/asociar_usuario/form_asociar_usuario.php b/src/siu/operaciones/asociar_usuario_se/asociar_usuario/form_asociar_usuario.php new file mode 100644 index 0000000..6c9239f --- /dev/null +++ b/src/siu/operaciones/asociar_usuario_se/asociar_usuario/form_asociar_usuario.php @@ -0,0 +1,64 @@ +crear('asociar_usuario_se', 'asociar'); + } + + function control_group($nombre, $clase_control_group = '') + { + if (!$this->check_activo($nombre)) { + return ''; + } + if ($this->get_elemento_html_tipo($nombre) == 'hidden') { + return $this->elemento($nombre); + } + + $label = $this->label($nombre); + if ($this->get_obligatorio($nombre)) { + $label = str_replace('class="optional"', 'class="label-obligatorio"', $label); + $label = str_replace('', ' (*)', $label); + } + + $elemento = $this->elemento($nombre); + $tiene_error = $this->tiene_error($nombre); + $clase_error = ($tiene_error) ? 'error' : ''; + + $html = "
"; + $html .= $label; + $html .= $elemento; + $html .= $this->ayuda($nombre); + if ($tiene_error) { + $html .= "{$this->error($nombre)}"; + } + $html .= "
"; + + return $html; + } + + protected function generar_definicion() + { + $this->set_campo('password', array( + form::label => 'clave', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'password'), + form::largo => 30 + )); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/asociar_usuario_se/asociar_usuario/mail_crear_usuario.twig b/src/siu/operaciones/asociar_usuario_se/asociar_usuario/mail_crear_usuario.twig new file mode 100644 index 0000000..7c05f36 --- /dev/null +++ b/src/siu/operaciones/asociar_usuario_se/asociar_usuario/mail_crear_usuario.twig @@ -0,0 +1,15 @@ + + + + + + +

+ {{ 'cuerpo_email_crear_usuario'|trans({ + '%mail%': mail, + '%link%': link + })|raw + }} +

+ + \ No newline at end of file diff --git a/src/siu/operaciones/asociar_usuario_se/asociar_usuario/pagelet_crear_usuario.js b/src/siu/operaciones/asociar_usuario_se/asociar_usuario/pagelet_crear_usuario.js new file mode 100644 index 0000000..f70af5a --- /dev/null +++ b/src/siu/operaciones/asociar_usuario_se/asociar_usuario/pagelet_crear_usuario.js @@ -0,0 +1,128 @@ +var url_cascada_nac; + +function set_solo_lectura(elemId, solo_lectura) +{ + elemId = '#' + elemId; + if (solo_lectura) { + $(elemId).attr('disabled', true); + } else { + $(elemId).attr('disabled', false); + } +} + +function inicializar_nacionalidad() +{ + var nacionalidad = $('#form_crear_usuario-nacionalidad').val(); + var pais_documento = $('#form_crear_usuario-pais_documento').val(); + + if (nacionalidad === no_seleccion) { + set_solo_lectura('form_crear_usuario-pais_documento', true); + $('#form_crear_usuario-pais_documento').children().remove(); + } else { + buscar_paises(nacionalidad); + set_solo_lectura('form_crear_usuario-pais_documento', false); + if (nacionalidad !== '2') { + set_solo_lectura('form_crear_usuario-tipo_documento', false); + } else { + set_solo_lectura('form_crear_usuario-tipo_documento', true); + } + } + + $('#form_crear_usuario-pais_documento').val(pais_documento); +} + +function cambio_nacionalidad() +{ + var nacionalidad = $('#form_crear_usuario-nacionalidad').val(); + + if (nacionalidad === no_seleccion) { + set_solo_lectura('form_crear_usuario-pais_documento', true); + $('#form_crear_usuario-pais_documento').children().remove(); + } else { + buscar_paises(nacionalidad); + set_solo_lectura('form_crear_usuario-pais_documento', false); + if (nacionalidad !== '2') { + set_solo_lectura('form_crear_usuario-tipo_documento', false); + } else { + set_solo_lectura('form_crear_usuario-tipo_documento', true); + } + } + cambio_pais_documento(); +} + +function buscar_paises(_nacionalidad) +{ + $.ajax({ + url: url_cascada_nac, + dataType: 'json', + async: false, + data: {nacionalidad: _nacionalidad}, + type: 'post', + success: function(data) { + $('#form_crear_usuario-pais_documento').children().remove(); + $.each(data, function(key, value) { + $('#form_crear_usuario-pais_documento').append( + $('').val(key).html(value) + ); + }); + ordenar_combo('form_crear_usuario-pais_documento'); + } + }); +} + +function cambio_pais_documento() +{ + var valor = $('#form_crear_usuario-pais_documento').val(); + if ((valor === no_seleccion) || (valor === null)) { + set_solo_lectura('form_crear_usuario-tipo_documento', true); + $('#form_crear_usuario-tipo_documento').val(no_seleccion); + } else { + set_solo_lectura('form_crear_usuario-tipo_documento', false); + } + cambio_tipo_documento(); +} + +function cambio_tipo_documento() +{ + var valor = $('#form_crear_usuario-tipo_documento').val(); + if (valor === no_seleccion) { + set_solo_lectura('form_crear_usuario-nro_documento', true);; + $('#form_crear_usuario-nro_documento').val(''); + } else { + set_solo_lectura('form_crear_usuario-nro_documento', false); + } +} + +kernel.renderer.registrar_pagelet('crear_usuario', function(info) { + var id = '#' + info.id; + url_cascada_nac = info.url_paises; + + return { + + onload: function() { + + $('#form_crear_usuario').submit(function() { + var $currentIFrame = $('#frameRC'); + $("#recaptcha_response_field").val($currentIFrame.contents().find("body #recaptcha_response_field").val()); + $("#recaptcha_challenge_field").val($currentIFrame.contents().find("body #recaptcha_challenge_field").val()); + }); + + inicializar_nacionalidad(); + cambio_pais_documento(); + cambio_tipo_documento(); + + //---- Manejo de visibilidad de secciones por eventos -------------- + $('#form_crear_usuario-nacionalidad').on('change', function() {cambio_nacionalidad();}); + $('#form_crear_usuario-pais_documento').on('change', function() {cambio_pais_documento();}); + $('#form_crear_usuario-tipo_documento').on('change', function() {cambio_tipo_documento();}); + + //------------------------------------------------------------------ + + $('#frameRC').contents().on('keypress', function(e) { + if(e.which === 13) { + $('#form_crear_usuario').submit(); + } + }); + } + } +}) diff --git a/src/siu/operaciones/asociar_usuario_se/contenido/default.css b/src/siu/operaciones/asociar_usuario_se/contenido/default.css new file mode 100644 index 0000000..e69de29 diff --git a/src/siu/operaciones/asociar_usuario_se/contenido/default.twig b/src/siu/operaciones/asociar_usuario_se/contenido/default.twig new file mode 100644 index 0000000..89eae58 --- /dev/null +++ b/src/siu/operaciones/asociar_usuario_se/contenido/default.twig @@ -0,0 +1,9 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} +
+
+ {{this.data.mensaje|raw}} + {{'recuperar_clave'|trans}} +
+
+{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/asociar_usuario_se/contenido/pagelet_contenido.js b/src/siu/operaciones/asociar_usuario_se/contenido/pagelet_contenido.js new file mode 100644 index 0000000..3bc52db --- /dev/null +++ b/src/siu/operaciones/asociar_usuario_se/contenido/pagelet_contenido.js @@ -0,0 +1,9 @@ +kernel.renderer.registrar_pagelet('contenido', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + + } + }; +}); diff --git a/src/siu/operaciones/asociar_usuario_se/controlador.php b/src/siu/operaciones/asociar_usuario_se/controlador.php new file mode 100644 index 0000000..3ff020e --- /dev/null +++ b/src/siu/operaciones/asociar_usuario_se/controlador.php @@ -0,0 +1,119 @@ +esta_seteada('medio_se')) { + die(kernel::traductor()->trans('operacion_invalida')); + } + } + + function accion__index() + { + $this->vista()->set_pagelet('asociar_usuario'); + $op_defecto = kernel::persona()->perfil()->get_parametro('index'); + + if (kernel::sesion()->abierta()) { + $this->nuevo_request($op_defecto); + } + } + + function accion__asociar() + { + $exito = false; + $pagelet = $this->vista()->set_pagelet('asociar_usuario'); + + if (kernel::request()->isPost()) { + // Validación de formulario y alta de usuario + $form = $pagelet->get_form(); + if ($form->procesar()) { + $valores = $form->get_datos(); + + try { + $id_se = kernel::sesion()->get('id_se'); + $mail_se = kernel::sesion()->get('mail_se'); + $medio_se = kernel::sesion()->get('medio_se'); + + // Se vincula la cuenta externa con la de preinscripción + preinscripcion::usuario()->vincular_usuario_se($mail_se, $id_se, $medio_se); + + kernel::sesion()->borrar('id_se'); + kernel::sesion()->borrar('mail_se'); + kernel::sesion()->borrar('medio_se'); + + $exito = true; + } catch (error_preinscripcion_login $e) { + $this->add_error($this->trans('asoc_se.error_clave')); + $pagelet->set_estado_info(pagelet_asociar_usuario::FORM_ERROR_VALIDACION); + } catch (ErrorKernel $e) { + $pagelet->set_estado_info(pagelet_asociar_usuario::FORM_ERROR_VALIDACION); + } + } else { + if ($form->tiene_errores()) { + $pagelet->set_estado_info(pagelet_asociar_usuario::FORM_ERROR_VALIDACION); + } + } + } + + if ($exito) { + $mensaje = kernel::traductor()->trans('asoc_se.cuenta_vinculada_ok', array('%1%' => capitalizar($medio_se))); + kernel::sesion()->set('cuenta_vinculada_ok', $mensaje); + $this->redirigir(); + } else { + kernel::renderer()->add($pagelet); + } + } + + //-------------------------------------------------------------------------- + //---- Operaciones auxiliares ---------------------------------------------- + //-------------------------------------------------------------------------- + + protected function get_login_manager() + { + if (!isset($this->login_manager)) { + $clase = kernel::proyecto()->get_clase_login(); + if (!isset($clase)) { + throw new ErrorKernel('SESION: no se seteo el manejador de login'); + } + $this->login_manager = kernel::localizador()->instanciar($clase); + } + return $this->login_manager; + } + + protected function add_error($mensaje, $e = null) + { + $mensajes = array(); + $mensajes[] = array( + preinscripcion::mensaje_cuerpo => $mensaje, + preinscripcion::mensaje_tipo => preinscripcion::control_error, + ); + $this->add_var('mensajes', $mensajes); + if (!is_null($e)) { + kernel::log()->add_error($e); + } + } + + protected function redirigir() + { + $this->nuevo_request(kernel::persona()->perfil()->get_parametro('index')); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/asociar_usuario_se/pagelet_asociar_usuario.php b/src/siu/operaciones/asociar_usuario_se/pagelet_asociar_usuario.php new file mode 100644 index 0000000..ec56d91 --- /dev/null +++ b/src/siu/operaciones/asociar_usuario_se/pagelet_asociar_usuario.php @@ -0,0 +1,47 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\asociar_usuario_se\asociar_usuario\form_asociar_usuario'); + } + return $this->form; + } + + function prepare() + { + $datos = kernel::sesion()->get('datos_usuario'); + $this->data['datos_usuario'] = '' . kernel::traductor()->trans('rep_apellido_y_nombre') . ': ' . $datos['apellido'] . ', ' . $datos['nombres'] . '

'; + $this->data['datos_usuario'] .= '' . kernel::traductor()->trans('rep_identificacion') . ': ' . $datos['tipo_documento_desc_abreviada'] . ' ' . $datos['nro_documento'] . '

'; + $this->data['url_volver'] = kernel::vinculador()->crear('acceso', 'index'); + + $form = $this->get_form(); + + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + $this->data['mensajes'] = $this->controlador->get_var('mensajes'); + $this->data['error'] = true; + break; + default: + $this->data['nombre_usuario'] = $this->controlador->get_var_default('nombre_usuario', ''); + $this->data['action_asociar'] = kernel::vinculador()->crear('asociar_usuario_se', 'asociar'); + $form->inicializar(); + } + + $this->add_form($form); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/asociar_usuario_se/pagelet_contenido.php b/src/siu/operaciones/asociar_usuario_se/pagelet_contenido.php new file mode 100644 index 0000000..298df16 --- /dev/null +++ b/src/siu/operaciones/asociar_usuario_se/pagelet_contenido.php @@ -0,0 +1,30 @@ +get('datos_usuario'); + $mail = $datos['e_mail']; + $medio = capitalizar(kernel::sesion()->get('medio_se')); + $this->data['mensaje'] = kernel::traductor()->trans('asoc_se.descripcion', array('%1%' => $mail, '%2%' => $medio)); + $this->data['url_recuperar'] = kernel::vinculador()->crear('acceso', 'recuperar'); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/asociar_usuario_se/template.twig b/src/siu/operaciones/asociar_usuario_se/template.twig new file mode 100644 index 0000000..0b641a7 --- /dev/null +++ b/src/siu/operaciones/asociar_usuario_se/template.twig @@ -0,0 +1,18 @@ +{% if js_vars %} + +{% endif %} + +
+
+

{{"asoc_se.nombre_operacion"|trans}}

+
+
+ +
+
{{ contenido.render }}
+
{{ form.render }}
+
\ No newline at end of file diff --git a/src/siu/operaciones/asociar_usuario_se/vista.php b/src/siu/operaciones/asociar_usuario_se/vista.php new file mode 100644 index 0000000..34157dc --- /dev/null +++ b/src/siu/operaciones/asociar_usuario_se/vista.php @@ -0,0 +1,34 @@ +instanciar($clase, 'form'); + $this->add_pagelet($pl); + return $pl; + } + + function ini() + { + $clase = 'operaciones\asociar_usuario_se\pagelet_contenido'; + $pl = kernel::localizador()->instanciar($clase, 'contenido'); + $this->add_pagelet($pl); + + kernel::pagina()->set_etiqueta('titulo', kernel::traductor()->trans('asoc_se.titulo')); + } + + function pagelet($id) + { + $clase = "operaciones\asociar_usuario_se\pagelet_$id"; + return kernel::localizador()->instanciar($clase, $id); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/ayuda_menu/confirmacion/default.css b/src/siu/operaciones/ayuda_menu/confirmacion/default.css new file mode 100644 index 0000000..e2ddc39 --- /dev/null +++ b/src/siu/operaciones/ayuda_menu/confirmacion/default.css @@ -0,0 +1,5 @@ +.alert { + color: #333333 !important; + text-align: center; +} + diff --git a/src/siu/operaciones/ayuda_menu/confirmacion/default.twig b/src/siu/operaciones/ayuda_menu/confirmacion/default.twig new file mode 100644 index 0000000..0185534 --- /dev/null +++ b/src/siu/operaciones/ayuda_menu/confirmacion/default.twig @@ -0,0 +1,15 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + +
+

+ {{ "ayuda_menu.titulo_check" | trans }} +

+
+ +
+ {{ "ayuda_menu.msj_info_enviado" | trans }} +
+ {{'volver'|trans|capitalize}} + +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/ayuda_menu/contacto/default.css b/src/siu/operaciones/ayuda_menu/contacto/default.css new file mode 100644 index 0000000..9429482 --- /dev/null +++ b/src/siu/operaciones/ayuda_menu/contacto/default.css @@ -0,0 +1,48 @@ +#contacto .inline-help { + font-size: 75%; + line-height: 10px; + margin-bottom: 5px; +} + +#contacto input { + width: 300px; +} + +#contacto textarea { + width: 300px; +} + +#contacto .alert { + text-align: center; +} + +#contacto h3 { + margin-top: 0px; + border-bottom: 1px solid #ccc; +} + +#contacto .botonera-inferior { + width: 100%; + padding-top: 5px; + border-top: 1px solid #ccc; +} + +#contacto #js-error-nombre{ + display: none; + color: #b94a48; +} + +#contacto #js-error-nro_documento{ + display: none; + color: #b94a48; +} + +#contacto #js-error-email{ + display: none; + color: #b94a48; +} + +#contacto #js-error-mensaje{ + display: none; + color: #b94a48; +} \ No newline at end of file diff --git a/src/siu/operaciones/ayuda_menu/contacto/default.twig b/src/siu/operaciones/ayuda_menu/contacto/default.twig new file mode 100644 index 0000000..1bc3f62 --- /dev/null +++ b/src/siu/operaciones/ayuda_menu/contacto/default.twig @@ -0,0 +1,75 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + + {% import "kernel/macro_recaptcha.twig" as recaptcha %} + {{ recaptcha.script() }} + + {% set form = this.get_form() %} + {% autoescape false %} + + {% if this.estado in [this.data.inicial, this.data.form_error_validacion, this.data.error_recaptcha, this.data.form_error_csrf] %} + + {{ form.encabezado }} + {% if this.data.mensajes %} +
+ {% import "kernel/macro_notificaciones.twig" as notificaciones %} + {{ notificaciones.render_notif(this.data.mensajes) }} +
+ {% endif %} + + + {% import "kernel/macro_csrf.twig" as input_csrf %} + {{ input_csrf.mostrar(this.data.csrf) }} + +
+

+ + {{"ayuda_menu.titulo"|trans}} + +

+

+ + {{"ayuda_menu.sub_titulo"|trans}} + +

+
+
+
+ {{ form.control_group('nombres', 'span12') }} +
+
+ {{ form.control_group('nro_documento', 'span12') }} +
+
+ {{ form.control_group('email', 'span12') }} +
+
+ {{ form.control_group('mensaje', 'span12') }} +
+
+ + {% if this.data.usar_captcha %} +
+
+ {{ recaptcha.widget() }} +
+
+
+ {% endif %} + +
+
+{# #} + {{ form.submit_button('continuar', 'ayuda_menu.enviar')}} +
+
+{% else %} + {% import "kernel/macro_notificaciones.twig" as notificaciones %} + {{ notificaciones.render_notif(this.data.mensajes) }} +
+ +
+{% endif %} + +{% endautoescape %} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/ayuda_menu/contacto/form_contacto.php b/src/siu/operaciones/ayuda_menu/contacto/form_contacto.php new file mode 100644 index 0000000..638925a --- /dev/null +++ b/src/siu/operaciones/ayuda_menu/contacto/form_contacto.php @@ -0,0 +1,167 @@ +crear('ayuda_menu', 'carga_datos_contacto'); + } + + protected function generar_definicion() + { + //---- Datos personales ------------------------------------------------ + + $this->set_campo('nombres', [ + form::label => 'ayuda_menu.nombres', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::largo => 60, + ]); + + $this->set_campo('email', [ + form::label => 'ayuda_menu.email', + form::obligatorio => true, + form::filtro => validador::TIPO_MAIL, + form::elemento => array('tipo' => 'text'), + form::largo => 100, + ]); + + $this->set_campo('nro_documento', [ + form::label => 'ayuda_menu.documento', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::largo => 20, + form::ayuda => kernel::traductor()->trans('ayuda_menu.ayuda_dni') + ]); + + $this->set_campo('mensaje', [ + form::label => 'ayuda_menu.mensaje', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => ['tipo' => 'textarea'], + form::rows => static::FILAS_TEXTAREA, + form::largo => static::LARGO_TEXTAREA, + form::clase_css => 'js_auditiva_forma_habitual_comunicacion', + ]); + } + + //-------------------------------------------------------------------------- + //---- Generación de html -------------------------------------------------- + //-------------------------------------------------------------------------- + + function control_group($nombre, $clase_control_group = '') + { + if (!$this->check_activo($nombre)) { + return ''; + } + if ($this->get_elemento_html_tipo($nombre) == 'hidden') { + return $this->elemento($nombre); + } + + $label = $this->label($nombre); + if ($this->get_obligatorio($nombre)) { + $label = str_replace('class="optional"', 'class="label-obligatorio"', $label); + $label = str_replace('', ' (*)', $label); + } + + $elemento = $this->elemento($nombre); + $tiene_error = $this->tiene_error($nombre); + $clase_error = ($tiene_error) ? 'error' : ''; + + + $html = "
"; + $html .= $label; + $html .= $elemento; + $html .= $this->ayuda($nombre); + if ($tiene_error) { + $html .= "{$this->error($nombre)}"; + } + $html .= "
"; + + return $html; + } + + //-------------------------------------------------------------------------- + //---- Validaciones -------------------------------------------------------- + //-------------------------------------------------------------------------- + + function validar() + { + // Si la carga de datos es correcta, se procede a realizar las validaciones particulares + //$usuario_valido = $this->validar_usuario(); + $mail_valido = $this->validar_email(); + $nro_documento_valido = $this->validar_nro_documento(); + + return parent::validar() && $mail_valido && $nro_documento_valido; + } + + /** + * Se valida que el mail ingresado y su repetición sean idénticos + * + * @return boolean + */ + protected function validar_email() + { + $email_ok = true; + + if ((empty($this->datos['email']))) { + $email = trim($this->datos['email']); + $mensaje = kernel::traductor()->trans('ayuda_menu.error_emails'); + $this->agregar_error('email', $mensaje); + $email_ok = false; + } + + return $email_ok; + } + + function validar_nro_documento() + { + $tipo_doc = 0; + $nro_doc = $this->datos['nro_documento']; + $tipos_documento = g3::entidad('tipos_documentos')->get_entidad($tipo_doc); + $expresion = $tipos_documento['exp_regular_validacion']; + $mensaje = $tipos_documento['exp_regular_mensaje']; + + $es_valido = true; + + $patt = '/' . $expresion . '/'; + if (!preg_match($patt, $nro_doc)) { + //Si el documento es invalido + $es_valido = false; + $this->agregar_error('nro_documento', $mensaje); + } + return $es_valido; + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/ayuda_menu/contacto/mail_contacto.twig b/src/siu/operaciones/ayuda_menu/contacto/mail_contacto.twig new file mode 100644 index 0000000..5bcec5b --- /dev/null +++ b/src/siu/operaciones/ayuda_menu/contacto/mail_contacto.twig @@ -0,0 +1,17 @@ + + + + + + +

+ {{ 'ayuda_menu.cuerpo_email' | trans({ + '%nombres%': nombres, + '%mensaje%': mensaje, + '%nro_documento%': nro_documento, + '%email%': email + })|raw + }} +

+ + diff --git a/src/siu/operaciones/ayuda_menu/contacto/pagelet_contacto.js b/src/siu/operaciones/ayuda_menu/contacto/pagelet_contacto.js new file mode 100644 index 0000000..e6dac88 --- /dev/null +++ b/src/siu/operaciones/ayuda_menu/contacto/pagelet_contacto.js @@ -0,0 +1,147 @@ +kernel.renderer.registrar_pagelet('contacto', function (info) { + + var id = '#' + info.id; + + return { + onload: function () + { + //cargo los span ocultos para luego mostrarlos al validar + $('#form_id_nombres').append(""); + $('#form_id_nro_documento').append(''); + $('#form_id_email').append(''); + $('#form_id_mensaje').append(''); + + //VALIDAR NOMBRE Y APELLIDO + $(id).on('blur', '#form_contacto-nombres', function () + { + validarNombre(); + }); + + function validarNombre() + { + var valido = true; + var nombre = $('#form_contacto-nombres').val(); + + if(nombre == ""){ + $('#form_id_nombres').addClass('error'); + $('#js-error-nombre').text(info.mensajes.error_vacio).show(); + valido = false; + } + if(valido){ + $('#js-error-nombre').hide(); + $('#form_id_nombres').removeClass('error'); + } + return valido; + } + + //VALIDAR DNI + $(id).on('blur', '#form_contacto-nro_documento', function () + { + validarDni(); + }); + function checkDNI(dni){ + var ex_regular_dni = RegExp(info.regexp_doc);; + if(ex_regular_dni.test (dni) == false){ + return true; + }else{ + return false; + } + } + function validarDni() + { + var valido = true; + var nombre = $('#form_contacto-nro_documento').val(); + + if(nombre == ""){ + $('#form_id_nro_documento').addClass('error'); + $('#js-error-nro_documento').text(info.mensajes.error_vacio).show(); + valido = false; + }else{ + if(checkDNI(nombre)){ + $('#form_id_nro_documento').addClass('error'); + $('#js-error-nro_documento').text(info.mensajes.error_dni).show(); + valido = false; + } + } + + if(valido){ + $('#js-error-nro_documento').hide(); + $('#form_id_nro_documento').removeClass('error'); + } + return valido; + } + + //VALIDAR EMAIL + $(id).on('blur', '#form_contacto-email', function () + { + validarEmail(); + }); + function checkEmail(email){ + var ex_regular_email = new RegExp(info.regexp_email,'i'); + if(ex_regular_email.test(email) == false){ + return true; + }else{ + return false; + } + } + function validarEmail() + { + var valido = true; + var nombre = $('#form_contacto-email').val(); + + if(nombre == ""){ + $('#form_id_email').addClass('error'); + $('#js-error-email').text(info.mensajes.error_vacio).show(); + valido = false; + }else{ + if(checkEmail(nombre)){ + $('#form_id_email').addClass('error'); + $('#js-error-email').text(info.mensajes.error_email).show(); + valido = false; + } + } + + if(valido){ + $('#js-error-email').hide(); + $('#form_id_email').removeClass('error'); + } + return valido; + } + + //VALIDAR MENSAJE TEXTAREA + $(id).on('blur', '#form_contacto-mensaje', function () + { + validarMensaje(); + }); + + function validarMensaje() + { + var valido = true; + var nombre = $('#form_contacto-mensaje').val(); + + if(nombre == ""){ + $('#form_id_mensaje').addClass('error'); + $('#js-error-mensaje').text(info.mensajes.error_vacio).show(); + valido = false; + } + if(valido){ + $('#js-error-mensaje').hide(); + $('#form_id_mensaje').removeClass('error'); + } + return valido; + } + + //SUBMIT + $(id).on('submit', '#form_contacto', function (event) + { + if(validarNombre() && validarDni() && validarEmail() && validarMensaje()){ + return true; + }else{ + event.preventDefault(); + return false; + } + }); + } + } + +}); diff --git a/src/siu/operaciones/ayuda_menu/controlador.php b/src/siu/operaciones/ayuda_menu/controlador.php new file mode 100644 index 0000000..679a190 --- /dev/null +++ b/src/siu/operaciones/ayuda_menu/controlador.php @@ -0,0 +1,143 @@ +vista()->set_pagelet('confirmacion'); + $pagelet = $this->vista()->pagelet('contacto'); + } + + function accion__carga_datos_contacto() + { + $pagelet = $this->vista()->set_pagelet('contacto'); + + if (kernel::request()->isPost()) { + + try { + // Chequeo de CSRF + $this->check_csrf(); + } catch (\Exception $e) { + $this->add_error($this->trans('error_csrf')); + $pagelet->set_estado_info(pagelet_contacto::FORM_ERROR_CSRF); + return; + } + + if ($this->usa_captcha()) { + // Chequeo de recaptcha + if (!static::check_recaptcha2()) { + $this->add_error($this->trans('error_recaptcha')); + $pagelet->set_estado_info(pagelet_contacto::FORM_ERROR_RECAPTCHA); + return; + } + } + + // Validación de formulario y alta de usuario + $form = $pagelet->get_form(); + if ($form->procesar()) { + $datos = $form->get_datos(); + + if (!$this->enviar_mensaje($datos)) { + $this->add_error($this->trans('ayuda_menu.error_email')); + $pagelet->set_estado_info(pagelet_contacto::FORM_ERROR_EMAIL); + kernel::renderer()->add($pagelet); + } else { + $operacion = kernel::ruteador()->get_id_operacion(); + $this->nuevo_request($operacion, 'confirmacion'); + } + } else { + if ($form->tiene_errores()) { + $this->add_error($this->trans('ayuda_menu.alta_error')); + $pagelet->set_estado_info(pagelet_contacto::FORM_ERROR_VALIDACION); + kernel::renderer()->add($pagelet); + } + } + } + } + + //-------------------------------------------------------------------------- + //---- RECAPTCHA ----------------------------------------------------------- + //-------------------------------------------------------------------------- + + function usa_captcha() + { + return kernel::proyecto()->get('usa_captcha'); + } + + protected function add_error($mensaje, $e = null) + { + $mensajes = array(); + $mensajes[] = array( + self::mensaje_cuerpo => $mensaje, + self::mensaje_tipo => preinscripcion::control_error, + ); + $this->add_var('mensajes', $mensajes); + if (!is_null($e)) { + kernel::log()->add_error($e); + } + } + + function enviar_mensaje($datos_mail) + { + $email = kernel::proyecto()->get_email_ayuda(); + if ($email) { + $asunto = kernel::traductor()->trans('ayuda_menu.asunto_email'); + $tpl = kernel::load_template('contacto/mail_contacto.twig'); + $cuerpo = $tpl->render($datos_mail); + + $mail = new mail($email, $asunto, $cuerpo); + $mail->set_html(true); + $mail->set_reply($datos_mail['email']); + + try { + $mail->enviar(); + $mail_enviado = true; + } catch (\SIU\Chulupi\ErrorKernel $e) { + $mail_enviado = false; + } + } else { + $mail_enviado = false; + } + + return $mail_enviado; + } + + function exp_reg_dni() + { + try { + $tipo_doc = 0; + $tipos_documento = g3::entidad('tipos_documentos')->get_entidad($tipo_doc); + $expresion = $tipos_documento['exp_regular_validacion']; + $patt = '/' . $expresion . '/'; + } catch (\SIU\Chulupi\ErrorKernel $e) { + $patt = "/^\d{1,8}$/"; + } + + return $patt; + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/ayuda_menu/pagelet_confirmacion.php b/src/siu/operaciones/ayuda_menu/pagelet_confirmacion.php new file mode 100644 index 0000000..cbc5b8f --- /dev/null +++ b/src/siu/operaciones/ayuda_menu/pagelet_confirmacion.php @@ -0,0 +1,21 @@ +get_id_operacion(); + $this->data['url_volver'] = kernel::vinculador()->crear($operacion, 'index'); + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/ayuda_menu/pagelet_contacto.php b/src/siu/operaciones/ayuda_menu/pagelet_contacto.php new file mode 100644 index 0000000..2795812 --- /dev/null +++ b/src/siu/operaciones/ayuda_menu/pagelet_contacto.php @@ -0,0 +1,92 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\ayuda_menu\contacto\form_contacto'); + } + //kernel::log()->add_error($this->form); + return $this->form; + } + + function prepare() + { + //Carga los datos para la vista + $this->data['mensajes'] = $this->controlador->get_var_default('mensajes', array()); + $this->data['url_volver'] = kernel::vinculador()->crear('acceso', 'index'); + $this->data['usar_captcha'] = $this->controlador->usa_captcha(); + + $form = $this->get_form(); + + switch ($this->estado) { + case static::FORM_ERROR_VALIDACION: + $this->data['mensajes'] = $this->controlador->get_var('mensajes'); + $this->data['error'] = true; + break; + case static::FORM_ERROR_RECAPTCHA: + $this->data['mensajes'] = $this->controlador->get_var('mensajes'); + $this->data['error'] = true; + $form->inicializar(); + $form->set_datos_desde_post(); + break; + case static::FORM_ERROR_CSRF: + $this->data['mensajes'] = $this->controlador->get_var('mensajes'); + $this->data['error'] = true; + $form->inicializar(); + $form->set_datos_desde_post(); + break; + case static::FORM_ERROR_EMAIL: + $this->data['mensajes'] = $this->controlador->get_var('mensajes'); + $this->data['error'] = true; + $form->inicializar(); + $form->set_datos_desde_post(); + break; + default: + $form->inicializar(); + break; + } + + $this->data['inicial'] = static::FORM_INICIAL; + $this->data['form_error_validacion'] = static::FORM_ERROR_VALIDACION; + $this->data['error_recaptcha'] = static::FORM_ERROR_RECAPTCHA; + $this->data['form_error_csrf'] = static::FORM_ERROR_CSRF; + $this->data['error_email'] = static::FORM_ERROR_EMAIL; + $this->data['csrf'] = $this->generar_csrf(); + $this->add_form($form); + $string = str_replace(['/', 'i'], '', \siu\modelo\comunes::er_email); + $this->add_var_js('regexp_email', $string); + + $exp_dni = $this->controlador->exp_reg_dni(); + $exp_dni = str_replace('/', '', $exp_dni); + $this->add_var_js('regexp_doc', $exp_dni); + $this->add_mensaje_js('error_vacio', kernel::traductor()->trans('ayuda_menu.error_vacio')); + $this->add_mensaje_js('error_dni', kernel::traductor()->trans('ayuda_menu.error_dni')); + $this->add_mensaje_js('error_email', kernel::traductor()->trans('ayuda_menu.error_email')); + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/ayuda_menu/template.twig b/src/siu/operaciones/ayuda_menu/template.twig new file mode 100644 index 0000000..fe62366 --- /dev/null +++ b/src/siu/operaciones/ayuda_menu/template.twig @@ -0,0 +1,4 @@ +{% extends "kernel/una_columna_sin_titulo.twig" %} +{% block columna_1 %} + {{ contacto.render }} +{% endblock %} diff --git a/src/siu/operaciones/ayuda_menu/vista.php b/src/siu/operaciones/ayuda_menu/vista.php new file mode 100644 index 0000000..898a388 --- /dev/null +++ b/src/siu/operaciones/ayuda_menu/vista.php @@ -0,0 +1,27 @@ +instanciar($clase, 'contacto'); + $this->add_pagelet($pl); + return $pl; + } + + function ini() + { + $clase = 'operaciones\ayuda_menu\pagelet_contacto'; + $pl = kernel::localizador()->instanciar($clase, 'contacto'); + $this->add_pagelet($pl); + + kernel::pagina()->set_etiqueta('titulo', kernel::traductor()->trans('header.menu.ayuda_menu')); + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/_comun/pagelet_con_edicion.php b/src/siu/operaciones/censo/_comun/pagelet_con_edicion.php new file mode 100644 index 0000000..b446f3e --- /dev/null +++ b/src/siu/operaciones/censo/_comun/pagelet_con_edicion.php @@ -0,0 +1,31 @@ +pantalla = $id; + } + + function get_accion_edicion() + { + return kernel::vinculador()->crear('censo', 'edicion', array($this->controlador->vista()->get_id_form_activo())); + } + + function get_accion_volver_edicion() + { + return kernel::vinculador()->crear('censo', 'volver_edicion', array($this->controlador->vista()->get_id_form_activo())); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/_comun/selector_colegio/selector_colegio.twig b/src/siu/operaciones/censo/_comun/selector_colegio/selector_colegio.twig new file mode 100644 index 0000000..1d6c35c --- /dev/null +++ b/src/siu/operaciones/censo/_comun/selector_colegio/selector_colegio.twig @@ -0,0 +1,39 @@ +
+ {% autoescape false %} +

{{'seleccion_colegio'|trans|capitalize}}

+
+

{{'filtro'|trans|capitalize}}

+
+ {{ 'descr_filtro_colegio' | trans }} +
+
+
+ +
+
+ +
+ + + +
+
+ +
+
+ +
+ +
+ +
+
+ +
+
+
+
+ +
+ {% endautoescape %} +
diff --git a/src/siu/operaciones/censo/_comun/selector_localidad/form_cp.php b/src/siu/operaciones/censo/_comun/selector_localidad/form_cp.php new file mode 100644 index 0000000..fda4cfa --- /dev/null +++ b/src/siu/operaciones/censo/_comun/selector_localidad/form_cp.php @@ -0,0 +1,35 @@ +set_campo('codigo_postal', array( + form::label => 'codigo_postal', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::multi_options => array(), // Las opciones se cargan por AJAX en cascada + form::validar_select => true, + form::valor_default => opciones::NO_SELECCION, + )); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/_comun/selector_localidad/form_localidad.php b/src/siu/operaciones/censo/_comun/selector_localidad/form_localidad.php new file mode 100644 index 0000000..6e132d4 --- /dev/null +++ b/src/siu/operaciones/censo/_comun/selector_localidad/form_localidad.php @@ -0,0 +1,76 @@ +set_campo('pais', array( + form::label => 'pais', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'select'), + form::multi_options => util::opciones()->get_paises(), + form::validar_select => true, + form::valor_default => opciones::NO_SELECCION, + )); + + $this->set_campo('provincia', array( + form::label => 'provincia', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'select'), + form::multi_options => array(), // Las opciones se cargan por AJAX en cascada + form::validar_select => true, + form::valor_default => opciones::NO_SELECCION, + )); + + $this->set_campo('departamento', array( + form::label => 'departamento', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'select'), + form::multi_options => array(), // Las opciones se cargan por AJAX en cascada + form::validar_select => true, + form::valor_default => opciones::NO_SELECCION, + )); + + $this->set_campo('localidad', array( + form::label => 'localidad', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'select'), + form::multi_options => array(), // Las opciones se cargan por AJAX en cascada + form::validar_select => true, + form::valor_default => opciones::NO_SELECCION, + )); + + $this->set_campo('codigo_postal', array( + form::label => 'codigo_postal', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::multi_options => array(), // Las opciones se cargan por AJAX en cascada + form::validar_select => true, + form::valor_default => opciones::NO_SELECCION, + )); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/_comun/selector_localidad/selector_cp.twig b/src/siu/operaciones/censo/_comun/selector_localidad/selector_cp.twig new file mode 100644 index 0000000..f382d1b --- /dev/null +++ b/src/siu/operaciones/censo/_comun/selector_localidad/selector_cp.twig @@ -0,0 +1,18 @@ +
+ {% autoescape false %} + {{ form_cp.encabezado }} +
+
+

{{'seleccion_cp'|trans}}

+
+ {{ form_cp.control_group('codigo_postal') }} +
+
+
+ + +
+
+ + {% endautoescape %} +
diff --git a/src/siu/operaciones/censo/_comun/selector_localidad/selector_localidad.twig b/src/siu/operaciones/censo/_comun/selector_localidad/selector_localidad.twig new file mode 100644 index 0000000..669780b --- /dev/null +++ b/src/siu/operaciones/censo/_comun/selector_localidad/selector_localidad.twig @@ -0,0 +1,36 @@ +
+ {% autoescape false %} + {{ form_loc.encabezado }} + +
+

{{'seleccion_localidad'|trans}}

+
+ {{ form_loc.control_group('pais') }} +
+
+ {{ form_loc.control_group('provincia') }} +
+
+ {{ form_loc.control_group('departamento') }} +
+
+ {{ form_loc.control_group('localidad') }} +
+
+ {{ form_loc.control_group('codigo_postal') }} +
+
+ +
+ {{'nota_indeterminado'|trans}} +
+ +
+ + +
+ + + {% endautoescape %} + +
diff --git a/src/siu/operaciones/censo/_comun/selector_titulo_sec/selector_titulo_sec.twig b/src/siu/operaciones/censo/_comun/selector_titulo_sec/selector_titulo_sec.twig new file mode 100644 index 0000000..0a2e4a5 --- /dev/null +++ b/src/siu/operaciones/censo/_comun/selector_titulo_sec/selector_titulo_sec.twig @@ -0,0 +1,27 @@ +
+ {% autoescape false %} +

{{'seleccion_titulo_sec'|trans|capitalize}}

+
+

{{'filtro'|trans|capitalize}}

+
+
+
+
+ +
+ + + {{'ayuda_filtro_titulo_sec'|trans|capitalize}} + +
+
+
+
+ +
+
+
+
+
+ {% endautoescape %} +
diff --git a/src/siu/operaciones/censo/actuacion_docente/default.css b/src/siu/operaciones/censo/actuacion_docente/default.css new file mode 100644 index 0000000..681e387 --- /dev/null +++ b/src/siu/operaciones/censo/actuacion_docente/default.css @@ -0,0 +1,5 @@ +#actuacion_docente .eventos-fila { + padding-right: 0px; + margin-right: 0px; + width: 15%; +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/actuacion_docente/default.twig b/src/siu/operaciones/censo/actuacion_docente/default.twig new file mode 100644 index 0000000..7d8b836 --- /dev/null +++ b/src/siu/operaciones/censo/actuacion_docente/default.twig @@ -0,0 +1,91 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% autoescape false %} + +
+
+
+

{{this.get_nombre()|trans}}

+
+
+
+
+ + {% if this.data.modo == 'listado' %} + {#---- Pantalla listado ----#} + {% if this.data.cant_antecedentes == 0 %} +
+ {{'sin_antecedentes_docentes'|trans|raw}} +
+ {% else %} +
+ + + + + + + + + + + + + + {% for item in this.get_datos_actuacion_docente() %} + + + + + + + + + + {% endfor %} + +
{{'antec_institucion'|trans}}{{'antec_cargo'|trans}}{{'antec_materia'|trans}}{{'antec_hs_semanales'|trans}}{{'antec_fecha_desde'|trans}}{{'antec_fecha_hasta'|trans}} 
{{item.institucion_prein}}{{item.cargo}}{{item.materia}}{{item.hora_sem_trab_descr}}{{item.fecha_desde}}{{item.fecha_hasta}} + + +
+
+ {% endif %} + + + {% else %} +
+ {{ 'edicion_interna.alerta' | trans | raw}} +
+ {#---- Pantalla alta / edición ----#} + {% set form = this.get_form() %} + {{ form.encabezado }} +
+

{{'carga_antecedente_doc'|trans}}

+ {{ form.control_group('__preinsc_ID__') }} +
+ {{ form.control_group('institucion_prein', 'span6') }} + {{ form.control_group('cargo', 'span6') }} +
+
+ {{ form.control_group('materia', 'span6') }} + {{ form.control_group('hora_sem_trab', 'span6') }} +
+
+ {{ form.control_group('fecha_desde', 'span3') }} + {{ form.control_group('fecha_hasta', 'span3') }} +
+
+
+ {{ form.submit_button('guardar_antecedente', 'guardar_antecedente')}} + + {{ 'volver'|trans|capitalize }} + +
+ + {% endif %} + {% endautoescape %} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/actuacion_docente/form_actuacion_docente.php b/src/siu/operaciones/censo/actuacion_docente/form_actuacion_docente.php new file mode 100644 index 0000000..32f78c1 --- /dev/null +++ b/src/siu/operaciones/censo/actuacion_docente/form_actuacion_docente.php @@ -0,0 +1,131 @@ +crear('censo', 'guardar_actuacion_docente', array('actuacion_docente')); + } + + protected function generar_definicion() + { + $this->set_campo(catalogo::id, array( + form::label => 'id', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::valor_default => '' + )); + + $this->set_campo('institucion_prein', array( + form::label => 'antec_institucion', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::largo => 255 + )); + + $this->set_campo('cargo', array( + form::label => 'antec_cargo', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::largo => 255 + )); + + $this->set_campo('materia', array( + form::label => 'antec_materia', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::largo => 255 + )); + + $this->set_campo('hora_sem_trab', array( + form::label => 'antec_hs_semanales', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_hora_sem_trab_alum() + )); + + $this->set_campo('fecha_desde', array( + form::label => 'antec_fecha_desde', + form::filtro => validador::TIPO_DATE, + form::filtro_params => array('format' => 'd/m/Y', + 'allowempty' => true), + form::clase_css => 'date input-small', + form::obligatorio => true, + form::elemento => array('tipo' => 'text') + )); + + $this->set_campo('fecha_hasta', array( + form::label => 'antec_fecha_hasta', + form::filtro => validador::TIPO_DATE, + form::filtro_params => array('format' => 'd/m/Y', + 'allowempty' => true), + form::clase_css => 'date input-small', + form::obligatorio => false, + form::elemento => array('tipo' => 'text') + )); + } + + //-------------------------------------------------------------------------- + + function validar() + { + $form_valido = parent::validar(); + + $fecha_desde = $this->get_dato('fecha_desde'); + $fecha_hasta = $this->get_dato('fecha_hasta'); + + if (!empty($fecha_desde)) { + $fecha_desde = convertir_fecha_formato_base($fecha_desde); + // Se valida que la fecha no sea anterior a 1900 + $fecha_limite = '1901-01-01'; + if (fecha_es_menor($fecha_desde, $fecha_limite)) { + $form_valido = false; + $msg = kernel::traductor()->trans('error_fecha_antigua'); + $this->agregar_error('fecha_desde', $msg); + } + + // Se valida que la fecha desde sea anterior a la fecha actual + if ($form_valido) { + if (!(fecha_es_menor_a_fecha_actual($fecha_desde, true))) { + $form_valido = false; + $msg = kernel::traductor()->trans('error_fecha_posterior'); + $this->agregar_error('fecha_desde', $msg); + } + } + + // Se valida que la fecha hasta sea anterior a la fecha desde + if (($form_valido) && (!empty($fecha_hasta))) { + $fecha_hasta = convertir_fecha_formato_base($fecha_hasta); + if (fecha_es_menor($fecha_hasta, $fecha_desde)) { + $form_valido = false; + $msg = kernel::traductor()->trans('error_fechas'); + $this->agregar_error('fecha_hasta', $msg); + } + } + } + + return $form_valido; + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/actuacion_docente/pagelet_actuacion_docente.js b/src/siu/operaciones/censo/actuacion_docente/pagelet_actuacion_docente.js new file mode 100644 index 0000000..823de9d --- /dev/null +++ b/src/siu/operaciones/censo/actuacion_docente/pagelet_actuacion_docente.js @@ -0,0 +1,24 @@ +kernel.renderer.registrar_pagelet('actuacion_docente', function(info) { + var id = '#' + info.id; + return { + onload: function() { + //---- Date Picker ------------------------------------------------- + $.datepicker.setDefaults( $.datepicker.regional["es"] ); + $(id).find('input.date').datepicker({ + changeMonth: true, + changeYear: true, + firstDay:0, + yearRange: "-70:+0" + }); + + $('.js-btnEliminar').on('click', function() { + if (confirm(info.msj_confirmar_eliminar)) { + submit(); + return true; + } + return false; + }); + } + } + +}); \ No newline at end of file diff --git a/src/siu/operaciones/censo/actuacion_profesional/default.css b/src/siu/operaciones/censo/actuacion_profesional/default.css new file mode 100644 index 0000000..b25cbe6 --- /dev/null +++ b/src/siu/operaciones/censo/actuacion_profesional/default.css @@ -0,0 +1,5 @@ +#actuacion_profesional .eventos-fila { + padding-right: 0px; + margin-right: 0px; + width: 15%; +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/actuacion_profesional/default.twig b/src/siu/operaciones/censo/actuacion_profesional/default.twig new file mode 100644 index 0000000..a6de1fa --- /dev/null +++ b/src/siu/operaciones/censo/actuacion_profesional/default.twig @@ -0,0 +1,90 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% autoescape false %} +
+
+
+

{{this.get_nombre()|trans}}

+
+
+
+
+ + {% if this.data.modo == 'listado' %} + {#---- Pantalla listado ----#} + {% if this.data.cant_antecedentes == 0 %} +
+ {{'sin_antecedentes_prof'|trans|raw}} +
+ {% else %} +
+ + + + + + + + + + + + + + {% for item in this.get_datos_actuacion_profesional() %} + + + + + + + + + + {% endfor %} + +
{{'antec_empresa'|trans}}{{'antec_cargo'|trans}}{{'antec_area'|trans}}{{'antec_hs_semanales'|trans}}{{'antec_fecha_desde'|trans}}{{'antec_fecha_hasta'|trans}} 
{{item.empresa}}{{item.cargo}}{{item.area}}{{item.hora_sem_trab_descr}}{{item.fecha_desde}}{{item.fecha_hasta}} + + +
+
+ {% endif %} + + + {% else %} + {#---- Pantalla alta / edición ----#} +
+ {{ 'edicion_interna.alerta' | trans | raw}} +
+ {% set form = this.get_form() %} + {{ form.encabezado }} +
+

{{'carga_antecedente_prof'|trans}}

+ {{ form.control_group('__preinsc_ID__') }} +
+ {{ form.control_group('antec_empresa', 'span6') }} + {{ form.control_group('cargo', 'span6') }} +
+
+ {{ form.control_group('area', 'span6') }} + {{ form.control_group('hora_sem_trab', 'span6') }} +
+
+ {{ form.control_group('fecha_desde', 'span3') }} + {{ form.control_group('fecha_hasta', 'span3') }} +
+
+
+ {{ form.submit_button('guardar_antecedente', 'guardar_antecedente')}} + + {{ 'volver'|trans|capitalize }} + +
+ + {% endif %} + {% endautoescape %} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/actuacion_profesional/form_actuacion_profesional.php b/src/siu/operaciones/censo/actuacion_profesional/form_actuacion_profesional.php new file mode 100644 index 0000000..f414a44 --- /dev/null +++ b/src/siu/operaciones/censo/actuacion_profesional/form_actuacion_profesional.php @@ -0,0 +1,130 @@ +crear('censo', 'guardar_actuacion_profesional', array('actuacion_profesional')); + } + + protected function generar_definicion() + { + $this->set_campo(catalogo::id, array( + form::label => 'id', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::valor_default => '' + )); + + $this->set_campo('antec_empresa', array( + form::label => 'antec_empresa', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::largo => 255 + )); + + $this->set_campo('cargo', array( + form::label => 'antec_cargo', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::largo => 255 + )); + + $this->set_campo('area', array( + form::label => 'antec_area', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::largo => 255 + )); + + $this->set_campo('hora_sem_trab', array( + form::label => 'antec_hs_semanales', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_hora_sem_trab_alum() + )); + + $this->set_campo('fecha_desde', array( + form::label => 'antec_fecha_desde', + form::filtro => validador::TIPO_DATE, + form::filtro_params => array('format' => 'd/m/Y', + 'allowempty' => true), + form::clase_css => 'date input-small', + form::obligatorio => true, + form::elemento => array('tipo' => 'text') + )); + + $this->set_campo('fecha_hasta', array( + form::label => 'antec_fecha_hasta', + form::filtro => validador::TIPO_DATE, + form::filtro_params => array('format' => 'd/m/Y', + 'allowempty' => true), + form::clase_css => 'date input-small', + form::obligatorio => false, + form::elemento => array('tipo' => 'text') + )); + } + + //-------------------------------------------------------------------------- + + function validar() + { + $form_valido = parent::validar(); + + $fecha_desde = $this->get_dato('fecha_desde'); + $fecha_hasta = $this->get_dato('fecha_hasta'); + + if (!empty($fecha_desde)) { + $fecha_desde = convertir_fecha_formato_base($fecha_desde); + // Se valida que la fecha no sea anterior a 1900 + $fecha_limite = '1901-01-01'; + if (fecha_es_menor($fecha_desde, $fecha_limite)) { + $form_valido = false; + $msg = kernel::traductor()->trans('error_fecha_antigua'); + $this->agregar_error('fecha_desde', $msg); + } + + // Se valida que la fecha desde sea anterior a la fecha actual + if ($form_valido) { + if (!(fecha_es_menor_a_fecha_actual($fecha_desde, true))) { + $form_valido = false; + $msg = kernel::traductor()->trans('error_fecha_posterior'); + $this->agregar_error('fecha_desde', $msg); + } + } + + // Se valida que la fecha hasta sea anterior a la fecha desde + if (($form_valido) && (!empty($fecha_hasta))) { + $fecha_hasta = convertir_fecha_formato_base($fecha_hasta); + if (fecha_es_menor($fecha_hasta, $fecha_desde)) { + $form_valido = false; + $msg = kernel::traductor()->trans('error_fechas'); + $this->agregar_error('fecha_hasta', $msg); + } + } + } + + return $form_valido; + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/actuacion_profesional/pagelet_actuacion_profesional.js b/src/siu/operaciones/censo/actuacion_profesional/pagelet_actuacion_profesional.js new file mode 100644 index 0000000..2c3114e --- /dev/null +++ b/src/siu/operaciones/censo/actuacion_profesional/pagelet_actuacion_profesional.js @@ -0,0 +1,23 @@ +kernel.renderer.registrar_pagelet('actuacion_profesional', function(info) { + var id = '#' + info.id; + return { + onload: function() { + //---- Date Picker ------------------------------------------------- + $.datepicker.setDefaults( $.datepicker.regional["es"] ); + $(id).find('input.date').datepicker({ + changeMonth: true, + changeYear: true, + firstDay:0, + yearRange: "-70:+0" + }); + + $('.js-btnEliminar').on('click', function() { + if (confirm(info.msj_confirmar_eliminar)) { + submit(); + return true; + } + return false; + }); + } + } +}); \ No newline at end of file diff --git a/src/siu/operaciones/censo/controlador.php b/src/siu/operaciones/censo/controlador.php new file mode 100644 index 0000000..2565ec9 --- /dev/null +++ b/src/siu/operaciones/censo/controlador.php @@ -0,0 +1,1013 @@ +tramite_finalizado)) { + $estado = kernel::persona()->datos()->get_estado_cuenta_preinscripcion(); + $this->tramite_finalizado = ($estado == \siu\preinscripcion::estado_preparado); + } + return $this->tramite_finalizado; + } + + function get_clase_vista() + { + if ($this->es_tramite_finalizado()) { + return 'vista_finalizado'; + } else { + return 'vista'; + } + } + + function ini() + { + $this->controlar_csrf_accion('guardar'); + } + + function accion__index() + { + + if (!$this->es_tramite_finalizado()) { + $formulario = $this->load_form_activo(); + kernel::renderer()->add($formulario); + } + } + + function accion__finalizar() + { + $hay_faltantes = kernel::persona()->datos()->hay_datos_faltantes(); + + if ($hay_faltantes) { + $this->vista()->activar_control_faltantes(); + } else { + // Se han completado todos los campos obligatorios -> se procede a imprimir + $this->vista()->desactivar_control_faltantes(); + + + /** + * Se actualiza el estado de la preinscripción + * - C: Formulario impreso. Listo para ingreso en Guarani + */ + try { + kernel::db()->abrir_transaccion(); + kernel::persona()->datos()->actualizar_estado(\siu\preinscripcion::estado_preparado); + kernel::persona()->datos()->eliminar_observaciones(); + // Se actualiza la versión impresa. + kernel::persona()->datos()->actualizar_version_impresa(); + kernel::db()->cerrar_transaccion(); + } catch (\Exception $e) { + kernel::db()->abortar_transaccion(); + kernel::log()->add_error($e); + throw new error_preinscripcion(kernel::traductor()->trans('prop_finalizada.error')); + } + $this->nuevo_request(kernel::ruteador()->get_id_operacion(), 'index'); + } + } + + function accion__reabrir() + { + /** + * Se actualiza el estado de la preinscripción + * - A: Activado. La persona respondió el mail enviado + */ + kernel::persona()->datos()->actualizar_estado(\siu\preinscripcion::estado_activado); + $this->nuevo_request(kernel::ruteador()->get_id_operacion(), 'propuesta'); + } + + function accion__imprimir() + { + //mensaje mail confirmando la recepcion de datos + if ($this->es_la_primera_impresion()){ + try{ + $dir_mail = kernel::persona()->get_mail(); + $nombre_institucion = kernel::proyecto()->get_parametro('rep_nombre_institucion'); + + $asunto = kernel::traductor()->trans('mail_asunto_fin', array('%1%' => $nombre_institucion)); + $cuerpo = kernel::traductor()->trans('mail_cuerpo_fin', array('%1%' => $nombre_institucion)); + + $mail = new mail($dir_mail, $asunto, $cuerpo, null, '', \siu\preinscripcion::charset); + $mail->set_html(true); + $mail->enviar(); + } catch (\Exception $e) { + kernel::sesion()->set('error_mail', kernel::traductor()->trans('notificacion_email_puede_continuar')); + kernel::log()->add_debug('==mensaje===',$e); + } + } + $pdf = kernel::localizador()->instanciar('operaciones\\_comun\\generador_pdf'); + $pdf->get_comprobante(); + } + + function accion__ocultar_msg_impr() + { + $this->vista()->desactivar_control_faltantes(); + + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO, array('default' => 'propuesta')); + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + + kernel::renderer()->add($pagelet); + } + + function hay_cambios_desde_impresion() + { + return kernel::persona()->datos()->hay_cambios_desde_impresion(); + } + function es_la_primera_impresion() + { + return kernel::persona()->datos()->es_la_primera_impresion(); + } + protected function load_form_activo() + { + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO, array( + 'default' => 'propuesta' + )); + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + return $pagelet; + } + + function accion__guardar() + { + if (!kernel::request()->isPost()) { + return; + } + + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO, array('default' => 'propuesta')); + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + + $form = $pagelet->get_form(); + if ($form->procesar()) { + $datos = $form->get_datos(); + + // Si es la solapa "Datos principales" + if ($formulario == "datos_principales") { + // Si en "Identidad de Género y Diversidad" se elige distinto a "Ninguna de las anteriores. Especifique" + if ($datos['identidad_genero'] != comunes::GENERO_DIVERSIDAD_ESPECIFIQUE) { + $datos['identidad_genero_otro'] = ''; + } + } + + kernel::persona()->datos()->set_datos_preinscripcion($datos); + if ($this->hay_cambios_desde_impresion()) { + $pagelet->set_estado_info(pagelet_datos_principales::FORM_CAMBIOS_DESDE_IMPRESION); + } else { + $pagelet->set_estado_info(pagelet_datos_principales::FORM_GUARDADO); + } + } else { + $pagelet->set_estado_info(pagelet_datos_principales::FORM_ERROR_VALIDACION); + } + + kernel::renderer()->add($pagelet); + } + + function accion__guardar_propuesta() + { + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO, array('default' => 'propuesta')); + $pagelet = $this->vista()->pagelet($formulario); + $form = $pagelet->get_form(); + if ($form->procesar()) { + $datos = $form->get_datos(); + kernel::persona()->datos()->set_propuesta_insc($datos); + } + $this->redirigir(); + } + + function accion__eliminar_preinscripcion() + { + if (kernel::request()->isPost()) { + $datos = kernel::request()->getPost(); + kernel::persona()->datos()->eliminar_insc($datos['id']); + } + } + + protected function redirigir() + { + $this->nuevo_request(kernel::persona()->perfil()->get_parametro('index')); + } + + //-------------------------------------------------------------------------- + //---- Edición de pagelets con edición + //-------------------------------------------------------------------------- + + function accion__edicion() + { + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO); + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + + $pagelet->set_pantalla(pagelet_con_edicion::ESTADO_EDICION); + + kernel::renderer()->add($pagelet); + } + + function accion__volver_edicion() + { + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO); + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + + $pagelet->set_pantalla(pagelet_con_edicion::ESTADO_LISTADO); + + kernel::renderer()->add($pagelet); + } + + //-------------------------------------------------------------------------- + //---- ABM's + //-------------------------------------------------------------------------- + + function accion__editar() + { + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO); + $this->seleccion = $this->validate_param(1, 'get', validador::TIPO_ALPHANUM); + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + + $pagelet->set_pantalla(pagelet_con_edicion::ESTADO_EDICION); + kernel::renderer()->add($pagelet); + } + + //-------------------------------------------------------------------------- + //---- Actuación Docente + //-------------------------------------------------------------------------- + + function accion__guardar_actuacion_docente() + { + if (!kernel::request()->isPost()) { + return; + } + + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO, array('default' => 'formacion_acad')); + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + $form = $pagelet->get_form(); + + if ($form->procesar()) { + $datos = $form->get_datos(); + kernel::persona()->datos()->set_actuacion_docente($datos); + $pagelet->set_estado_info(pagelet_datos_principales::FORM_GUARDADO); + $pagelet->set_pantalla(pagelet_con_edicion::ESTADO_LISTADO); + } else { + $pagelet->set_estado_info(pagelet_datos_principales::FORM_ERROR_VALIDACION); + $pagelet->set_pantalla(pagelet_con_edicion::ESTADO_EDICION); + } + + kernel::renderer()->add($pagelet); + } + + function accion__eliminar_actuacion_docente() + { + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO); + + $id = $this->validate_param(1, 'get', validador::TIPO_ALPHANUM); + kernel::persona()->datos()->eliminar_actuacion_docente($id); + + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + } + + function get_actuacion_docente() + { + if (isset($this->seleccion)) { + $datos = kernel::persona()->datos()->get_datos_actuacion_docente(); + $datos_act = $datos[$this->seleccion]; + } else { + $datos_act = array(); + } + return $datos_act; + } + + //-------------------------------------------------------------------------- + //---- Turno + //-------------------------------------------------------------------------- + + function accion__devolver_turno() + { + $ra = $this->decodificar_ra_turno(); + kernel::persona()->datos()->devolver_turno($ra); + + $pagelet = $this->vista()->pagelet('turno_presentacion'); + $this->vista()->set_form_activo($pagelet); + } + + function accion__seleccionar_turno() + { + $pagelet = $this->vista()->pagelet('turno_presentacion'); + $this->vista()->set_form_activo($pagelet); + $pagelet->set_pantalla(pagelet_con_edicion::ESTADO_EDICION); + } + + function accion__volver_seleccionar_turno() + { + $pagelet = $this->vista()->pagelet('turno_presentacion'); + $this->vista()->set_form_activo($pagelet); + $pagelet->set_pantalla(pagelet_con_edicion::ESTADO_LISTADO); + } + + function get_fecha_minima_turno() + { + $ra = $this->decodificar_ra_turno(); + return g3::turnos()->get_fecha_minima($ra); + } + + function get_fecha_maxima_turno() + { + $ra = $this->decodificar_ra_turno(); + return g3::turnos()->get_fecha_maxima($ra); + } + + function get_fechas_turnos_disponibles() + { + $ra = $this->decodificar_ra_turno(); + return g3::turnos()->get_fechas_turnos_disponibles($ra); + } + + function accion__cascada_franjas_turnos() + { + $fecha = $this->get_param('fecha', 'post'); + $ra = $this->decodificar_ra_turno($this->get_param('ra', 'post')); + $datos = g3::turnos()->get_franjas_horarias_disponibles($fecha, $ra); + $this->render_raw_json($datos); + } + + function accion__cascada_tipo_documento() + { + $pais = $this->get_param('pais', 'post'); + $condicion="mdp_tipo_documento_pais.pais = '".$pais."'"; + $entidad_pais_tipo_doc = g3::entidad('tipos_documentos_pais')->get_opciones_pais($condicion, true); + $this->render_raw_json($entidad_pais_tipo_doc); + } + + function accion__cascada_nacionalidad() + { + $nacionalidad = $this->get_param('nacionalidad', 'post'); + if ($nacionalidad == '2') { + $datos = util::opciones()->get_paises(); + } else { + $datos = array('54' => 'Argentina'); + } + $this->render_raw_json($datos); + } + + function accion__datos_tipo_documento_validar() + { + $tipo_documento = $this->get_param('tipo_documento', 'post'); + $pais = $this->get_param('pais', 'post'); + $nro_documento = $this->get_param('nro_documento', 'post'); + + $entidad_tipo_doc = g3::entidad('tipos_documentos_pais')->get_entidad($pais . "_" . $tipo_documento); + + $entidad_tipo_doc['mensaje_validacion_cuil'] = ''; + // Si el tipo de documento es CUIL/CUIT y falla la validación + if (($tipo_documento == comunes::TIPO_DOCUMENTO_CUIL_CUIT) && (!comunes::validarCUIT($nro_documento))) { + $entidad_tipo_doc['mensaje_validacion_cuil'] = kernel::traductor()->trans('nro_documento.cuil.error'); + } + + $this->render_raw_json($entidad_tipo_doc); + } + + function get_ra_turno() + { + $ra = $this->validate_param(0, 'get', validador::TIPO_ALPHANUM); + return $ra; + } + + protected function decodificar_ra_turno($ra = null) + { + if (is_null($ra)) { + $ra = $this->validate_param(0, 'get', validador::TIPO_ALPHANUM); + } + $datos = g3::responsables_academicas()->get_opciones(); + foreach ($datos as $key => $dato) { + if ($ra == util::catalogo()->generar_id($key)) { + return $key; + } + } + return null; + } + + function accion__guardar_turno() + { + if (!kernel::request()->isPost()) { + return; + } + + $formulario = 'turno_presentacion'; + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + $form = $pagelet->get_form(); + + if ($form->procesar()) { + $ra = $this->decodificar_ra_turno(); + $datos = $form->get_datos(); + try { + kernel::persona()->datos()->set_turno($ra, $datos); + // Invalido cache de turno de presentación + kernel::persona()->datos()->invalidar_cache_turno_presentacion($ra); + $pagelet->set_estado_info(pagelet_datos_principales::FORM_GUARDADO); + } catch (error_preinscripcion $e) { + $pagelet->set_mensaje_error($e->get_mensaje()); + $pagelet->set_estado_info(pagelet_datos_principales::FORM_ERROR_VALIDACION); + } + } else { + $pagelet->set_estado_info(pagelet_datos_principales::FORM_ERROR_VALIDACION); + } + + kernel::renderer()->add($pagelet); + } + + //-------------------------------------------------------------------------- + //---- Actuación Profesional + //-------------------------------------------------------------------------- + + function accion__guardar_actuacion_profesional() + { + if (!kernel::request()->isPost()) { + return; + } + + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO, array('default' => 'formacion_acad')); + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + $form = $pagelet->get_form(); + + if ($form->procesar()) { + $datos = $form->get_datos(); + kernel::persona()->datos()->set_actuacion_profesional($datos); + $pagelet->set_estado_info(pagelet_datos_principales::FORM_GUARDADO); + $pagelet->set_pantalla(pagelet_con_edicion::ESTADO_LISTADO); + } else { + $pagelet->set_estado_info(pagelet_datos_principales::FORM_ERROR_VALIDACION); + $pagelet->set_pantalla(pagelet_con_edicion::ESTADO_EDICION); + } + + kernel::renderer()->add($pagelet); + } + + function accion__eliminar_actuacion_profesional() + { + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO); + + $id = $this->validate_param(1, 'get', validador::TIPO_ALPHANUM); + kernel::persona()->datos()->eliminar_actuacion_profesional($id); + + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + } + + function get_actuacion_profesional() + { + if (isset($this->seleccion)) { + $datos = kernel::persona()->datos()->get_datos_actuacion_profesional(); + $datos_act = $datos[$this->seleccion]; + } else { + $datos_act = array(); + } + return $datos_act; + } + + //-------------------------------------------------------------------------- + //---- Formación académica + //-------------------------------------------------------------------------- + + function accion__guardar_formacion_acad() + { + if (!kernel::request()->isPost()) { + return; + } + + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO, array('default' => 'formacion_acad')); + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + $form = $pagelet->get_form(); + + if ($form->procesar()) { + $datos = $form->get_datos(); + kernel::persona()->datos()->set_formacion_acad($datos); + $pagelet->set_estado_info(pagelet_datos_principales::FORM_GUARDADO); + $pagelet->set_pantalla(pagelet_con_edicion::ESTADO_LISTADO); + } else { + $pagelet->set_estado_info(pagelet_datos_principales::FORM_ERROR_VALIDACION); + $pagelet->set_pantalla(pagelet_con_edicion::ESTADO_EDICION); + } + + kernel::renderer()->add($pagelet); + } + + function accion__eliminar_formacion_acad() + { + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO); + + $id = $this->validate_param(1, 'get', validador::TIPO_ALPHANUM); + kernel::persona()->datos()->eliminar_formacion_acad($id); + + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + + kernel::renderer()->add($pagelet); + } + + function get_formacion_acad() + { + if (isset($this->seleccion)) { + $datos = kernel::persona()->datos()->get_datos_formacion_acad(); + $datos_estudios = $datos[$this->seleccion]; + } else { + $datos_estudios = array(); + } + return $datos_estudios; + } + + //-------------------------------------------------------------------------- + //---- CASCADAS: Selector de propuestas ------------------------------------ + //-------------------------------------------------------------------------- + + function accion__cascada_propuestas() + { + $ra = $this->get_param('ra', 'post'); + $inscripciones = kernel::persona()->datos()->get_datos_inscripciones(); + if (!empty($inscripciones)) { + $excluir = aplanar_matriz($inscripciones, 'propuesta'); + } else { + $excluir = array(); + } + $datos = g3::propuestas()->get_propuestas_disponibles_preinscripcion($ra, $excluir); + $this->render_raw_json($datos); + } + + function accion__cascada_ubicaciones() + { + $propuesta = $this->get_param('propuesta', 'post'); + $datos = g3::propuestas()->get_ubicaciones_propuesta($propuesta); + $this->render_raw_json($datos); + } + + function accion__cascada_modalidades() + { + $propuesta = $this->get_param('propuesta', 'post'); + $ubicacion = $this->get_param('ubicacion', 'post'); + $datos = g3::propuestas()->get_modalidades_propuesta($propuesta, $ubicacion); + $this->render_raw_json($datos); + } + + //-------------------------------------------------------------------------- + //---- CASCADAS: Selector de localidades ----------------------------------- + //-------------------------------------------------------------------------- + + function accion__get_descr_localidad() + { + $localidad = $this->get_param('localidad', 'post'); + $this->render_raw_json(array('localidad_descr' => g3::localidades()->get_nombre($localidad))); + } + + function accion__lista_localidades() + { + $criterio = utf8_decode($this->get_param('term', 'get')); + $pais = utf8_decode($this->get_param('pais', 'get')); + if (empty($criterio)) { + return; + } + if (empty($pais)) { + $pais = null; + } + $datos = g3::localidades()->get_lista_localidades($criterio, $pais); + $this->render_autocomplete($datos, 'localidad', 'localidad_descr'); + } + + function render_autocomplete($datos, $campo_valor, $campo_descr) + { + $paquete = []; + foreach ($datos as $key => $dato) { + $valor = $dato[$campo_valor]; + $descripcion = formatear($dato[$campo_descr]); + $paquete[] = ["label" => $descripcion, "value" => [$campo_valor => $valor, $campo_descr => $descripcion]]; + } + echo kernel::renderer()->json_encode($paquete); + throw new FinalizadorRequest(); + } + + protected function to_autocomplete($values) + { + $lista_autocomplete = array(); + foreach ($values as $value) { + $lista_autocomplete[] = array( + 'localidad' => $value['localidad'], + 'localidad_descr' => $value['localidad_descr'], + 'label' => '[' . $value['localidad_descr'] . '] ', + 'value' => '[' . $value['localidad_descr'] . '] ' + ); + } + return $lista_autocomplete; + } + + function accion__cascada_provincias() + { + $pais = $this->get_param('pais', 'post'); + $datos = util::opciones()->get_provincias($pais); + $this->render_raw_json($datos); + } + + function accion__cascada_departamentos() + { + $provincia = $this->get_param('provincia', 'post'); + $datos = util::opciones()->get_departamentos($provincia); + $this->render_raw_json($datos); + } + + function accion__cascada_localidades() + { + $departamento = $this->get_param('departamento', 'post'); + $datos = util::opciones()->get_localidades($departamento); + $this->render_raw_json($datos); + } + + function accion__cascada_cod_postales() + { + $localidad = $this->get_param('localidad', 'post'); + $datos = util::opciones()->get_cod_postales($localidad); + $this->render_raw_json($datos); + } + + function accion__cp_unico() + { + $localidad = $this->get_param('localidad', 'post'); + $datos = util::opciones()->get_cod_postales($localidad); + if (count($datos) == 1) { + $this->render_raw_json(array('cp' => current($datos))); + } else { + return false; + } + } + + //-------------------------------------------------------------------------- + //---- Selector de colegio secundario -------------------------------------- + //-------------------------------------------------------------------------- + + function accion__buscar_colegios() + { + $colegio_nombre = $this->get_param('colegio', 'post'); + $localidad_nombre = $this->get_param('localidad', 'post'); + + $datos = g3::colegios()->get_colegios($colegio_nombre, $localidad_nombre); + if (empty($datos)) { + $html = '
'; + $html .= kernel::traductor()->trans('busqueda_sin_resultados'); + $html .= '
'; + } else { + $html = $this->armar_tabla_resultado_colegios($datos); + } + + $this->render_raw_json(array('html' => $html)); + } + + protected function armar_tabla_resultado_colegios($datos) + { + $html = ' + + + + + + + + '; + foreach ($datos as $dato) { + $html .= ' + + + + '; + } + $html .= ' + + + + '; + $html .= '
' . kernel::traductor()->trans('colegio_secundario') . '' . kernel::traductor()->trans('localidad') . ' 
' . $dato['nombre'] . '' . $dato['localidad_nombre'] . ' + +
+
+ +
+
'; + + return $html; + } + + function accion__buscar_colegio_por_id() + { + $id_colegio = $this->get_param('id_colegio', 'post'); + $this->render_raw_json(array('colegio_descr' => g3::colegios()->get_nombre($id_colegio))); + } + + //-------------------------------------------------------------------------- + //---- Selector de título secundario --------------------------------------- + //-------------------------------------------------------------------------- + + function accion__buscar_titulo_sec() + { + $titulo_nombre = $this->get_param('titulo', 'post'); + $datos = util::opciones()->get_titulos_sec_por_nombre($titulo_nombre); + if (empty($datos)) { + $html = '
'; + $html .= kernel::traductor()->trans('busqueda_sin_resultados'); + $html .= '
'; + } else { + $html = $this->armar_tabla_resultado_titulos_sec($datos); + } + + $this->render_raw_json(array('html' => $html)); + } + + protected function armar_tabla_resultado_titulos_sec($datos) + { + $html = ' + + + + + + + '; + foreach ($datos as $dato) { + $html .= ' + + + '; + } + $html .= ' + + + + '; + $html .= '
' . kernel::traductor()->trans('titulo_secundario') . ' 
' . $dato['nombre'] . ' + +
+
+ +
+
'; + + return $html; + } + + function accion__buscar_titulo_por_id() + { + $id_titulo = $this->get_param('id_titulo', 'post'); + $this->render_raw_json(array('titulo_descr' => g3::titulos_secundario()->get_nombre($id_titulo))); +// $this->render_raw_json(array('titulo_descr' => g3::colegios()->get_nombre($id_titulo))); + } + + //-------------------------------------------------------------------------- + //---- RDI - Documentación ------------------------------------------------- + //-------------------------------------------------------------------------- + + function accion__guardar_documentacion() + { + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO); + $clave_encriptada = $this->validate_param(1, 'get', validador::TIPO_TEXTO); + + $pagelet = $this->vista()->pagelet($formulario); + + $requisitos_a_presentar = kernel::persona()->datos()->get_requisitos_a_presentar(); + $requisito = $requisitos_a_presentar[$clave_encriptada]; + + $temp_path = kernel::proyecto()->get_www_temp(); + $indice_form = 'archivo'; + + if ($_FILES['archivo']['error'] == UPLOAD_ERR_INI_SIZE || $_FILES['archivo']['error'] == UPLOAD_ERR_FORM_SIZE) { + kernel::sesion()->set('error_tamanio', true); + } + + try { + $nombre = $this->guardar_archivos_subidos($indice_form, $temp_path); + + if (!empty($nombre)) { + $path_file = $temp_path . '/' . $nombre['nombre_fs']; + $tipo_documento_digital = $requisito['tipo_documento_digital']; + + $requisitos_aspirante = kernel::persona()->datos()->get_requisitos_aspirante(); + if (empty($requisitos_aspirante[$clave_encriptada]['id_documento'])) { + // Alta de recurso + $id_recurso = $this->enviar_repositorio($path_file, $tipo_documento_digital); + $datos = array( + 'requisito' => $requisito['requisito'], + 'id_documento' => $id_recurso + ); + kernel::persona()->datos()->set_requisito($datos); + } else { + // Actualización de recurso + $id_recurso = $requisitos_aspirante[$clave_encriptada]['id_documento']; + $this->enviar_repositorio($path_file, $tipo_documento_digital, $id_recurso); + } + + // Se elimina el recurso temporal + unlink($path_file); + } + } catch (ErrorKernel $e) { + kernel::log()->add_error($e); + } catch (RDIExcepcion $e) { + kernel::log()->add_error($e); + $pagelet->set_mensaje_error(kernel::traductor()->trans('doc.msj_error_rdi')); + } + + $this->vista()->set_form_activo($pagelet); + + kernel::renderer()->add($pagelet); + } + + function accion__modificar_documentacion() + { + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO); + $clave_encriptada = $this->validate_param(1, 'get', validador::TIPO_TEXTO); + + $requisitos_aspirante = kernel::persona()->datos()->get_requisitos_aspirante(); + + if (!empty($requisitos_aspirante[$clave_encriptada]['id_documento'])) { + $requisito = $requisitos_aspirante[$clave_encriptada]['requisito']; + kernel::sesion()->set('requisito_' . $requisito, 1); + } + + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + + kernel::renderer()->add($pagelet); + } + + function accion__descargar_documentacion() + { + try { + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO); + $clave_encriptada = $this->validate_param(1, 'get', validador::TIPO_TEXTO); + + $pagelet = $this->vista()->pagelet($formulario); + + $requisitos_aspirante = kernel::persona()->datos()->get_requisitos_aspirante(); + $requisito = $requisitos_aspirante[$clave_encriptada]; + + $srv = kernel::proyecto()->rdi()->servicio(g3::requisitos()->tipo_documento_digital($requisito['requisito'])); + $attr = $srv->recuperarAtributos($requisito['id_documento']); + $content = $srv->recuperarContenido($requisito['id_documento']); + + $nombre_descarga = $attr['tipoIdentificacion'] . $attr['numeroIdentificacion'] . $attr['id']; + $archivo_temp = md5($nombre_descarga); + $nombre = kernel::proyecto()->get_www_temp() . '/' . $archivo_temp; + file_put_contents($nombre, $content); + + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $mime_type = finfo_file($finfo, $nombre); + finfo_close($finfo); + $ext = ManejadorArchivos::mime2ext($mime_type); + $newname = "{$nombre}.{$ext}"; + rename($nombre, $newname); + + $this->descargar_archivo($newname); + + unlink($newname); + } catch (RDIExcepcion $e) { + kernel::log()->add_error($e); + $pagelet->set_mensaje_error(kernel::traductor()->trans('doc.msj_error_rdi')); + } + } + + function accion__eliminar_documentacion() + { + try { + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO); + $clave_encriptada = $this->validate_param(1, 'get', validador::TIPO_TEXTO); + $requisitos_aspirante = kernel::persona()->datos()->get_requisitos_aspirante(); + + $pagelet = $this->vista()->pagelet($formulario); + + if (!empty($requisitos_aspirante[$clave_encriptada]['id_documento'])) { + $id_recurso = $requisitos_aspirante[$clave_encriptada]['id_documento']; + + $tipo_documento_digital = g3::requisitos()->tipo_documento_digital($requisitos_aspirante[$clave_encriptada]['requisito']); + $this->eliminar_repositorio($id_recurso, $tipo_documento_digital); + + $requisito = $requisitos_aspirante[$clave_encriptada]['requisito']; + $datos = array('id_documento' => $id_recurso, 'requisito' => $requisito); + + kernel::persona()->datos()->eliminar_requisito($datos); + } + } catch (RDIExcepcion $e) { + kernel::log()->add_error($e); + $pagelet->set_mensaje_error(kernel::traductor()->trans('doc.msj_error_rdi')); + } + + $this->vista()->set_form_activo($pagelet); + + kernel::renderer()->add($pagelet); + } + + protected function enviar_repositorio($path, $tipo_documento_digital, $id_recurso = null) + { + if (file_exists($path)) { + // Validación de extensión permitida. + $extension_partes = explode(".", $path); + $cant_partes = count($extension_partes); + $extension = a_minusculas($extension_partes[$cant_partes - 1]); + $extensiones_validas = aplanar_matriz(g3::entidad('extensiones')->get_extensiones_permitidas(), 'extension'); + if (!in_array($extension, $extensiones_validas)) { + kernel::sesion()->set('error_extension', true); + unlink($path); + return; + } + + $srv = kernel::proyecto()->rdi()->servicio($tipo_documento_digital); + + $datos_archivo = getimagesize($path); + $datos_persona = kernel::persona()->datos()->get_datos_preinscripcion(); + $attr = $this->get_atributos_documento_digital_requisito_documental($tipo_documento_digital, $datos_persona, $datos_archivo); + + $cont = file_get_contents($path); + if (is_null($id_recurso)) { + // Se crea un nuevo recurso en el RDI y se retorna el ID + $ecm_resource_id = $srv->crear($attr, $cont, mime_content_type($path)); + return $ecm_resource_id; + } else { + // Se actualiza el contenido + $srv->modificarContenido($id_recurso, $cont); + } + } else { + return null; + } + } + + protected function eliminar_repositorio($id_recurso, $tipo_documento_digital) + { + $srv = kernel::proyecto()->rdi()->servicio($tipo_documento_digital); + $srv->eliminar($id_recurso); + } + + protected function get_atributos_documento_digital_requisito_documental($tipo_documento_digital, $datos_persona, $datos_archivo) + { + $atributos = []; + + // Atributos de los recursos personales + $atributos['tipoIdentificacion'] = $datos_persona['tipo_documento']; + $atributos['numeroIdentificacion'] = $datos_persona['nro_documento']; + if (isset($datos_persona['apellido'])) { + $atributos['apellido'] = $datos_persona['apellido']; + } + if (isset($datos_persona['nombres'])) { + $atributos['nombres'] = $datos_persona['nombres']; + } + switch ($tipo_documento_digital) { + // Si es de tipo Foto de la persona (tipo 'RecursoPersonalFoto' en NUXEO) + case \RDITipos::FOTO : + if (isset($datos_archivo[0])) { + $atributos['ancho'] = $datos_archivo[0]; + } + if (isset($datos_archivo[0])) { + $atributos['alto'] = $datos_archivo[1]; + } + break; + // Si es de tipo Genérico (tipo 'Recurso' en NUXEO) + case \RDITipos::RECURSO: + // Elimino dichos atributos ya que no los necesita, sino da el siguiente error: + // Parametros invalidos: tipoIdentificacion,numeroIdentificacion,apellido,nombres + unset($atributos['tipoIdentificacion']); + unset($atributos['numeroIdentificacion']); + unset($atributos['apellido']); + unset($atributos['nombres']); + break; + } + return $atributos; + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_adicionales/default.twig b/src/siu/operaciones/censo/datos_adicionales/default.twig new file mode 100644 index 0000000..cb2e26c --- /dev/null +++ b/src/siu/operaciones/censo/datos_adicionales/default.twig @@ -0,0 +1,122 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% set form = this.get_form() %} + {% autoescape false %} + + {% if this.data.cant_inscripciones > 0 %} + + {{ form.encabezado }} + +
+
+
+

{{this.get_nombre()|trans}}

+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+
+ + {% if form.hay_visibles_agrupado('turno_preferido') %} +
+

{{'turno_preferido'|trans}}

+
+
+ {{ form.control_group('turno_preferido') }} +
+
+
+ {% endif %} + + {% if form.hay_visibles_agrupado('como_conocio_institucion') %} +
+

{{'como_conocio_institucion'|trans}}

+
+
+ {{ form.control_group('como_conocio_institucion') }} +
+
+
+ {% endif %} + + {% if form.hay_visibles_agrupado('otras_inscripciones') %} +
+

{{'otras_inscripciones'|trans}}

+
+
+
+ {{ form.checkbox('insc_otra_inst') }} +
+
+ {{ form.control_group('insc_otra_inst_descr') }} +
+
+
+
+ {% endif %} + + {% if form.hay_visibles_agrupado('motivo_eleccion_inst') %} +
+

{{'motivo_eleccion_inst'|trans}}

+
+
+
{{ form.checkbox('mot_inst_econom') }}
+
{{ form.checkbox('mot_inst_prestigio') }}
+
+
+
{{ form.checkbox('mot_inst_difusion') }}
+
{{ form.checkbox('mot_inst_rec_estud') }}
+
+
+
{{ form.checkbox('mot_inst_rec_amigos') }}
+
{{ form.checkbox('mot_inst_sist_ing') }}
+
+
+
{{ form.checkbox('mot_inst_ubicacion') }}
+
{{ form.checkbox('mot_inst_otros') }}
+
+
+
+ {% endif %} + + {% if form.hay_visibles_agrupado('motivo_eleccion_prop') %} +
+

{{'motivo_eleccion_prop'|trans}}

+
+
+
{{ form.checkbox('mot_prop_vocacion') }}
+
{{ form.checkbox('mot_prop_sug_fam') }}
+
+
+
{{ form.checkbox('mot_prop_rec_social') }}
+
{{ form.checkbox('mot_prop_ins_lab') }}
+
+
+
{{ form.checkbox('mot_prop_perf_prof') }}
+
{{ form.checkbox('mot_prop_mejora_ec') }}
+
+
+
{{ form.checkbox('mot_prop_util_soc') }}
+
{{ form.checkbox('mot_prop_otros') }}
+
+
+
+ {% endif %} + +
+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+ + + + {% endif %} + +{% endautoescape %} + +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_adicionales/form_datos_adicionales.php b/src/siu/operaciones/censo/datos_adicionales/form_datos_adicionales.php new file mode 100644 index 0000000..b94adff --- /dev/null +++ b/src/siu/operaciones/censo/datos_adicionales/form_datos_adicionales.php @@ -0,0 +1,101 @@ +crear('censo', 'guardar', array('datos_adicionales')); + } + + protected function generar_definicion() + { + $this->set_campo('turno_preferido', array( + form::label => 'turno_preferido', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_turnos(), + form::valor_default => '', + form::largo => 20 + )); + + //---- Cómo conoció la institución ------------------------------------- + $this->set_campo('como_conocio_institucion', array( + form::label => 'como_conocio_institucion', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 255, + form::clase_css => 'input-xxlarge', + )); + + //---- Otras inscripciones --------------------------------------------- + $this->set_campo('insc_otra_inst', array( + form::label => 'insc_otra_inst', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('insc_otra_inst_descr', array( + form::label => 'insc_otra_inst_descr', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 100, + form::clase_css => 'input-xxlarge', + )); + + //---- Motivos de elección de la institución educativa ----------------- + $campos_motivos_inst = array('mot_inst_econom', 'mot_inst_prestigio', + 'mot_inst_difusion', 'mot_inst_rec_estud', 'mot_inst_rec_amigos', + 'mot_inst_sist_ing', 'mot_inst_ubicacion', 'mot_inst_otros'); + + foreach ($campos_motivos_inst as $campo) { + $this->set_campo($campo, array( + form::label => $campo, + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + } + + //---- Motivos de elección de la propuesta ----------------------------- + $campos_motivos_prop = array('mot_prop_vocacion', 'mot_prop_sug_fam', + 'mot_prop_rec_social', 'mot_prop_ins_lab', 'mot_prop_perf_prof', + 'mot_prop_mejora_ec', 'mot_prop_util_soc', 'mot_prop_otros', ); + + foreach ($campos_motivos_prop as $campo) { + $this->set_campo($campo, array( + form::label => $campo, + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + } + + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_adicionales/pagelet_datos_adicionales.js b/src/siu/operaciones/censo/datos_adicionales/pagelet_datos_adicionales.js new file mode 100644 index 0000000..ebf2673 --- /dev/null +++ b/src/siu/operaciones/censo/datos_adicionales/pagelet_datos_adicionales.js @@ -0,0 +1,79 @@ +kernel.renderer.registrar_pagelet('datos_adicionales', function (info) { + var id = '#' + info.id; + + return { + + onload: function () { + + if (info.autosave) { + $(id).autosave(); + } + + $('#form_datos_adicionales').submit(function () { + var hubo_cambios = formulario_hubo_cambios(); + if (hubo_cambios) { + var $form = $(this); + kernel.ajax.load($form.attr('action'), id, { + historia: false, + type: 'POST', + data: $form.serializeArray(), + success: function (response) { + if (response.info_estado.exitoso) { + if (response.info_estado.cambios_desde_impresion) { + document.location.reload(true); + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-success', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-error', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + + // Si corresponde, se desactiva el autosave + if (info.autosave) { + $(id).autosave('disable'); + } + kernel.renderer.pagelet('datos_adicionales').onload(); + } + }); + } else { + kernel.ui.show_mensaje(info.msj_sin_cambios, { + tipo: 'alert-info', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + return false; + }); + + $('#form_datos_adicionales-insc_otra_inst').on('change', function () { + cambio__insc_otra_inst(); + }); + cambio__insc_otra_inst(); + } + } + + /** + * Cambio del campo "¿Estás inscripto en otra institución?" + */ + function cambio__insc_otra_inst() + { + if ($('#form_datos_adicionales-insc_otra_inst').is(':checked')) { + mostrar('div_insc_otra_inst_descr'); + } else { + ocultar('div_insc_otra_inst_descr', true); + } + } + + +}); \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_estudios/default.css b/src/siu/operaciones/censo/datos_estudios/default.css new file mode 100644 index 0000000..93b5335 --- /dev/null +++ b/src/siu/operaciones/censo/datos_estudios/default.css @@ -0,0 +1,6 @@ +#datos_estudios .input_largo { + width: 653px; +} +#datos_estudios .donde { + padding-top: 5px; +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_estudios/default.twig b/src/siu/operaciones/censo/datos_estudios/default.twig new file mode 100644 index 0000000..cc12871 --- /dev/null +++ b/src/siu/operaciones/censo/datos_estudios/default.twig @@ -0,0 +1,112 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% set form = this.get_form() %} + {% autoescape false %} + {{ form.encabezado }} +
+
+
+

{{this.get_nombre()|trans}}

+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+
+ + {% if form.hay_visibles_agrupado('orientacion_vocacional') %} +
+

{{'orientacion_vocacional'|trans}}

+
+
+ {{ form.control_group('orientacion_recibida') }} +
+
+
+ {% endif %} + + {%if form.hay_visibles_agrupado('datos_estudios_sec') %} +
+

{{'datos_estudios_sec'|trans}}

+
+ {% if form.def_visible('es_mayor_25_sin_secundario') %} +
+ {{ form.checkbox('es_mayor_25_sin_secundario') }} +
+ {% endif %} +
+
+ +
+ {{ form.control_group('anio_egreso_sec', 'span6') }} +
+
+ {{ form.checkbox('adeuda_materias') }} +
+ {% if form.def_visible('colegio_secundario') %} +
+ {{ form.control_group('colegio_secundario') }} + {{ form.control_group('colegio_secundario_descr') }} +
+ + +
+
+ {% endif %} + {% if form.def_visible('titulo_secundario') %} +
+ {{ form.control_group('titulo_secundario') }} + {{ form.control_group('titulo_secundario_descr') }} +
+ + +
+
+ {% endif %} +
+
+ {% endif %} + + {%if form.hay_visibles_agrupado('datos_estudios_sup') %} +
+

{{'datos_estudios_sup'|trans}}

+
+
+ {{ form.control_group('alu_otestsup_uni', 'span6') }} + {{ form.control_group('alu_otestsup_tipo', 'span6') }} +
+
+ {{ form.control_group('alu_otestsup_carr') }} +
+
+ {{ form.control_group('alu_otestsup_niv', 'span6') }} + {{ form.control_group('alu_otestsup_area', 'span6') }} +
+
+ {{ form.control_group('alu_otestsup_esta', 'span6') }} +
+ {{ form.control_group('alu_otestsup_egre') }} +
+
+
+ {{ form.control_group('alu_otestsup_razon_abandono', 'span6') }} +
+ {{ form.control_group('alu_otestsup_razon_abandono_otros') }} +
+
+
+
+ {% endif %} + +
+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+ + + {% endautoescape %} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_estudios/form_datos_estudios.php b/src/siu/operaciones/censo/datos_estudios/form_datos_estudios.php new file mode 100644 index 0000000..826fd8c --- /dev/null +++ b/src/siu/operaciones/censo/datos_estudios/form_datos_estudios.php @@ -0,0 +1,209 @@ +crear('censo', 'guardar', array('datos_estudios')); + } + + protected function generar_definicion() + { + //---- Orientación vocacional ------------------------------------------ + $this->set_campo('orientacion_recibida', array( + form::label => 'orientacion_recibida', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_orientacion_vocacional(), + form::valor_default => '', + form::clase_css => 'combo_medio' + )); + + //---- Datos estudios secundarios / polimodal -------------------------- + $this->set_campo('anio_egreso_sec', array( + form::label => 'anio_egreso_sec', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_anios(), + form::valor_default => '' + )); + + $this->set_campo('adeuda_materias', array( + form::label => 'adeuda_materias', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('colegio_secundario', array( + form::label => 'colegio_secundario', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::valor_default => '' + )); + + $this->set_campo('colegio_secundario_descr', array( + form::label => 'colegio_secundario', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::readonly => true, + form::clase_css => 'input_largo', + )); + + $this->set_campo('titulo_secundario', array( + form::label => 'titulo_secundario', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::valor_default => '' + )); + + $this->set_campo('titulo_secundario_descr', array( + form::label => 'titulo_secundario', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::readonly => true, + form::clase_css => 'input_largo', + )); + + //---- Otros estudios superiores --------------------------------------- + $this->set_campo('alu_otestsup_uni', array( + form::label => 'alu_otestsup_uni', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 255 + )); + + $this->set_campo('alu_otestsup_tipo', array( + form::label => 'alu_otestsup_tipo', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_tipos_estudios_superiores(), + form::valor_default => '' + )); + + $this->set_campo('alu_otestsup_carr', array( + form::label => 'alu_otestsup_carr', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 255 + )); + + $this->set_campo('alu_otestsup_esta', array( + form::label => 'alu_otestsup_esta', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_estados_estudios_sup(), + form::valor_default => '' + )); + + $this->set_campo('alu_otestsup_area', array( + form::label => 'alu_otestsup_area', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_areas_estudios_sup(), + form::valor_default => '' + )); + + $this->set_campo('alu_otestsup_niv', array( + form::label => 'alu_otestsup_niv', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_niveles_otestsup(), + form::valor_default => '' + )); + + $this->set_campo('alu_otestsup_egre', array( + form::label => 'alu_otestsup_egre', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_anios(), + form::valor_default => '' + )); + + //---- Razones de abandono de estudio ---------------------------------- + $this->set_campo('alu_otestsup_razon_abandono', array( + form::label => 'alu_otestsup_razon_abandono', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_razones_abandono_estudio(), + form::valor_default => '' + )); + + $this->set_campo('alu_otestsup_razon_abandono_otros', array( + form::label => 'alu_otestsup_razon_abandono_otros', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 200 + )); + + $this->set_campo('es_mayor_25_sin_secundario', array( + form::label => 'es_mayor_25_sin_secundario', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + )); + } + + function validar() { + $form_valido = parent::validar(); + $datos_db = kernel::persona()->datos()->get_datos_formularios_preinsc(); + $datos_form = $this->get_datos(); + + if (!empty($datos_db['fecha_nacimiento']) && ($datos_form['es_mayor_25_sin_secundario'] == comunes::si)) { + + $edad = comunes::calcular_edad($datos_db['fecha_nacimiento']); + + if ($edad < 25) { + $form_valido = false; + $this->agregar_error('es_mayor_25_sin_secundario', kernel::traductor()->trans('error_es_mayor_25_sin_secundario')); + } + } + + + return $form_valido; + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_estudios/pagelet_datos_estudios.js b/src/siu/operaciones/censo/datos_estudios/pagelet_datos_estudios.js new file mode 100644 index 0000000..b0d0ff1 --- /dev/null +++ b/src/siu/operaciones/censo/datos_estudios/pagelet_datos_estudios.js @@ -0,0 +1,206 @@ +kernel.renderer.registrar_pagelet('datos_estudios', function (info) { + var id = '#' + info.id; + var r = window.matchMedia("(max-width: 700px)") + + return { + onload: function () { + r.addListener(mediaQuerymatch(r)); + $('#form_datos_estudios-alu_otestsup_esta').on('change', function() { cambio__alu_otestsup_esta(); }); + cambio__alu_otestsup_esta(); + + $('#form_datos_estudios-alu_otestsup_razon_abandono').on('change', function() { cambio__alu_otestsup_razon_abandono(); }); + cambio__alu_otestsup_razon_abandono(); + + //checked mayor de 25 sin secundario desactivo campos de datos secundario y limpio valores + checked_mayor_25(); + $('#form_datos_estudios-es_mayor_25_sin_secundario').on('click', function() { + validar_edad_mayor_25(); + }); + //---- Selector de colegio ----------------------------------------- + $('#btnSelectorColegio').on('click', function () { + $.facebox(info.selector_colegio); + var _info = new cloneObject(info); + _info['retorno_valor'] = 'form_datos_estudios-colegio_secundario'; + _info['retorno_descr'] = 'form_datos_estudios-colegio_secundario_descr'; + inicializar_popup_colegios(_info); + popupMovil(r); + }); + + $('#btnLimpiarColegio').on('click', function () { + $('#form_datos_estudios-colegio_secundario').val('null'); + $('#form_datos_estudios-colegio_secundario_descr').val(''); + }); + + //---- Selector de título secundario ------------------------------- + $('#btnSelectorTitulo').on('click', function () { + $.facebox(info.selector_titulo_sec); + var _info = new cloneObject(info); + _info['retorno_valor'] = 'form_datos_estudios-titulo_secundario'; + _info['retorno_descr'] = 'form_datos_estudios-titulo_secundario_descr'; + inicializar_popup_titulos(_info); + popupMovil(r); + }); + + $('#btnLimpiarTitulo').on('click', function () { + $('#form_datos_estudios-titulo_secundario').val('null'); + $('#form_datos_estudios-titulo_secundario_descr').val(''); + }); + + //---- Si corresponde, se activa el autosave ----------------------- + if (info.autosave) { + $(id).autosave(); + } + + //---- Submit ------------------------------------------------------ + $('#form_datos_estudios').submit(function () { + var hubo_cambios = formulario_hubo_cambios(); + if (hubo_cambios) { + var $form = $(this); + kernel.ajax.load($form.attr('action'), id, { + historia: false, + type: 'POST', + data: $form.serializeArray(), + success: function (response) { + if (response.info_estado.exitoso) { + if (response.info_estado.cambios_desde_impresion) { + document.location.reload(true); + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-success', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-error', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + + // Si corresponde, se desactiva el autosave + if (info.autosave) { + $(id).autosave('disable'); + } + kernel.renderer.pagelet('datos_estudios').onload(); + } + }); + } else { + kernel.ui.show_mensaje(info.msj_sin_cambios, { + tipo: 'alert-info', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + return false; + }); + } + }; + + /** + * Cambio del campo estado + */ + function cambio__alu_otestsup_esta() + { + if ($('#form_datos_estudios-alu_otestsup_esta').val() == info.estado_estudio_ABANDONADO) { + mostrar('motivos-abandono'); + } else { + ocultar('motivos-abandono', true); + } + + if ($('#form_datos_estudios-alu_otestsup_esta').val() == info.estado_estudio_FINALIZADO) { + mostrar('div-alu_otestsup_egre'); + } else { + ocultar('div-alu_otestsup_egre', true); + } + } + + /** + * Cambio del campo "Razón de abandono" + */ + function cambio__alu_otestsup_razon_abandono() + { + if ($('#form_datos_estudios-alu_otestsup_razon_abandono').val() == info.razon_abandono_OTRO) { + mostrar('motivo-abandono-otro'); + } else { + ocultar('motivo-abandono-otro', true); + } + } + function mediaQuerymatch(r) + { + //media query matches + if (r.matches) { + $('#form_datos_estudios-colegio_secundario_descr').removeClass('input_largo'); + $('#form_datos_estudios-titulo_secundario_descr').removeClass('input_largo'); + } else { + $('#form_datos_estudios-colegio_secundario_descr').addClass('input_largo'); + $('#form_datos_estudios-titulo_secundario_descr').addClass('input_largo'); + } + } + function popupMovil(r){ + if(r.matches){ + val=$('#facebox').attr('style'); + top = val.split(';'); + $('#facebox').css({ + "left": "0px", + "top": top, + }); + $("#selectorColegio").css({'width': '100%'}); + $("#selectorTituloSec").css({'width': '100%'}); + $('#facebox .content').css({'width':'0px'}); + } + } + + /* + * consulto el chequeo + */ + function checked_mayor_25() { + + if ($('#form_datos_estudios-es_mayor_25_sin_secundario').is(':checked')) { + + $('#datos_estudios_sec').hide(); + $('#form_datos_estudios-anio_egreso_sec').val(''); + $('#form_datos_estudios-anio_egreso_sec_descr').val(''); + $('#form_datos_estudios-colegio_secundario').val(''); + $('#form_datos_estudios-colegio_secundario_descr').val(''); + $('#form_datos_estudios-titulo_secundario').val(''); + $('#form_datos_estudios-titulo_secundario_descr').val(''); + $('#form_datos_estudios-adeuda_materias').prop("checked", false); + } else { + $('#datos_estudios_sec').show(); + } + } + + function validar_edad_mayor_25() { + + if (Boolean(info.fecha_nacimiento)) { + + if (Boolean(info.es_menor_25)) { + + kernel.ui.show_mensaje(info.mensajes.error_es_mayor_25_sin_secundario, { + tipo: 'alert-error', + until_interaction: true + }); + + $('#form_datos_estudios-es_mayor_25_sin_secundario').prop("checked", false); + checked_mayor_25(); + } else { + checked_mayor_25(); + } + + } else { + + kernel.ui.show_mensaje(info.mensajes.error_fecha_nacimiento_vacia, { + tipo: 'alert-error', + until_interaction: true + }); + $('#form_datos_estudios-es_mayor_25_sin_secundario').prop("checked", false); + + } + } + +}); \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_familiares/default.css b/src/siu/operaciones/censo/datos_familiares/default.css new file mode 100644 index 0000000..bf08d94 --- /dev/null +++ b/src/siu/operaciones/censo/datos_familiares/default.css @@ -0,0 +1,7 @@ +#datos_familiares .combo_largo { + width: 663px; +} + +#datos_familiares .input_largo { + width: 653px; +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_familiares/default.twig b/src/siu/operaciones/censo/datos_familiares/default.twig new file mode 100644 index 0000000..5e3101d --- /dev/null +++ b/src/siu/operaciones/censo/datos_familiares/default.twig @@ -0,0 +1,112 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% set form = this.get_form() %} + {% autoescape false %} + {{ form.encabezado }} +
+
+
+

{{this.get_nombre()|trans}}

+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+
+ + {%if form.hay_visibles_agrupado('situacion_familiar') %} +
+

{{'situacion_familiar'|trans}}

+
+
+ {{ form.control_group('estado_civil') }} +
+
+ {{ form.checkbox('alu_est_civil_uh') }} +
+
+ {{ form.control_group('cant_hijos_alum', 'span6') }} + {{ form.control_group('cant_fami_cargo', 'span6') }} +
+
+
+ {% endif %} + + {%if form.hay_visibles_agrupado('datos_padre') %} +
+

{{'datos_padre'|trans}}

+
+
+ {{ form.control_group('apellido_padre', 'span6') }} + {{ form.control_group('nombres_padre', 'span6') }} +
+
+ {{ form.control_group('padre_vive', 'span6') }} + {{ form.control_group('ult_est_cur_padre', 'span6') }} +
+ +
+ {{ form.control_group('sit_laboral_padre') }} +
+ +
+
+ {{ form.control_group('padre_trab_hace', 'span6') }} + {{ form.control_group('padre_trab_ocup', 'span6') }} +
+
+ {{ form.control_group('padre_trab_tarea') }} +
+
+
+ {{ form.control_group('padre_trab_otro') }} +
+ +
+
+ {% endif %} + + {%if form.hay_visibles_agrupado('datos_madre') %} +
+

{{'datos_madre'|trans}}

+
+
+ {{ form.control_group('apellido_madre', 'span6') }} + {{ form.control_group('nombres_madre', 'span6') }} +
+
+ {{ form.control_group('madre_vive', 'span6') }} + {{ form.control_group('ult_est_cur_madre', 'span6') }} +
+
+ {{ form.control_group('sit_laboral_madre') }} +
+
+
+ {{ form.control_group('madre_trab_hace', 'span6') }} + {{ form.control_group('madre_trab_ocup', 'span6') }} +
+
+ {{ form.control_group('madre_trab_tarea') }} +
+
+
+ {{ form.control_group('madre_trab_otro') }} +
+
+
+ {% endif %} + +
+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+ + + {% endautoescape %} + +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_familiares/form_datos_familiares.php b/src/siu/operaciones/censo/datos_familiares/form_datos_familiares.php new file mode 100644 index 0000000..8bdb2e7 --- /dev/null +++ b/src/siu/operaciones/censo/datos_familiares/form_datos_familiares.php @@ -0,0 +1,240 @@ +crear('censo', 'guardar', array('datos_familiares')); + } + + protected function generar_definicion() + { + //---- Situación familiar ---------------------------------------------- + $this->set_campo('estado_civil', array( + form::label => 'estado_civil', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_estados_civiles(), + form::valor_default => '' + )); + + $this->set_campo('alu_est_civil_uh', array( + form::label => 'alu_est_civil_uh', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('cant_hijos_alum', array( + form::label => 'cant_hijos_alum', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_cant_hijos_o_fam_a_cargo(), + )); + + $this->set_campo('cant_fami_cargo', array( + form::label => 'cant_fami_cargo', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_cant_hijos_o_fam_a_cargo(), + )); + + //---- Datos del padre ------------------------------------------------- + $this->set_campo('apellido_padre', array( + form::label => 'apellido_padre', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 60 + )); + + $this->set_campo('nombres_padre', array( + form::label => 'nombres_padre', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 60 + )); + + $this->set_campo('padre_vive', array( + form::label => 'padre_vive', + form::obligatorio => false, + form::filtro => validador::TIPO_ALPHA, + form::filtro_params => array('allowempty' => true), + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_si_no_desconoce(true) + )); + + $this->set_campo('ult_est_cur_padre', array( + form::label => 'ult_est_cur_padre', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_niveles_estudio(), + form::valor_default => '' + )); + + $this->set_campo('sit_laboral_padre', array( + form::label => 'sit_laboral_padre', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_sit_laboral_padres(), + form::valor_default => '', + form::clase_css => 'combo_largo' + )); + + $this->set_campo('padre_trab_hace', array( + form::label => 'padre_trab_hace', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_padres_trab_hace(), + form::valor_default => '' + )); + + $this->set_campo('padre_trab_ocup', array( + form::label => 'padre_trab_ocup', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_trab_ocup(true), + form::valor_default => '' + )); + + $this->set_campo('padre_trab_tarea', array( + form::label => 'padre_trab_tarea', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 255, + form::clase_css => 'input_largo', + )); + + $this->set_campo('padre_trab_otro', array( + form::label => 'padre_trab_otro', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_otra_ocupacion(), + form::valor_default => '' + )); + + //---- Datos de la madre ----------------------------------------------- + $this->set_campo('apellido_madre', array( + form::label => 'apellido_madre', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 60 + )); + + $this->set_campo('nombres_madre', array( + form::label => 'nombres_madre', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 60 + )); + + $this->set_campo('madre_vive', array( + form::label => 'madre_vive', + form::obligatorio => false, + form::filtro => validador::TIPO_ALPHA, + form::filtro_params => array('allowempty' => true), + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_si_no_desconoce(true) + )); + + $this->set_campo('ult_est_cur_madre', array( + form::label => 'ult_est_cur_madre', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_niveles_estudio(), + form::valor_default => '' + )); + + $this->set_campo('sit_laboral_madre', array( + form::label => 'sit_laboral_madre', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_sit_laboral_padres(), + form::valor_default => '', + form::clase_css => 'combo_largo' + )); + + $this->set_campo('madre_trab_hace', array( + form::label => 'madre_trab_hace', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_padres_trab_hace(), + form::valor_default => '' + )); + + $this->set_campo('madre_trab_ocup', array( + form::label => 'madre_trab_ocup', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_trab_ocup(true), + form::valor_default => '', + )); + + $this->set_campo('madre_trab_tarea', array( + form::label => 'madre_trab_tarea', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 255, + form::clase_css => 'input_largo', + )); + + $this->set_campo('madre_trab_otro', array( + form::label => 'madre_trab_otro', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_otra_ocupacion(), + form::valor_default => '' + )); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_familiares/pagelet_datos_familiares.js b/src/siu/operaciones/censo/datos_familiares/pagelet_datos_familiares.js new file mode 100644 index 0000000..d156f41 --- /dev/null +++ b/src/siu/operaciones/censo/datos_familiares/pagelet_datos_familiares.js @@ -0,0 +1,140 @@ +/** + * Cambio del campo "Padre - ¿Vive?" + */ +function cambio_padre_vive() +{ + if ($('#form_datos_familiares-padre_vive').val() === 'S') { + mostrar('div_sit_laboral_padre'); + } else { + ocultar('div_sit_laboral_padre', true); + ocultar('div_trabajo_padre', true); + ocultar('div_padre_no_trabaja', true); + } +} + +/** + * Cambio del campo "Padre - Condición de actividad durante la semana pasada" + */ +function cambio_sit_laboral_padre() +{ + if ($('#form_datos_familiares-sit_laboral_padre').val() === '1') { + mostrar('div_trabajo_padre'); + ocultar('div_padre_no_trabaja', true); + } else { + if ($('#form_datos_familiares-sit_laboral_padre').val() === '3') { + mostrar('div_padre_no_trabaja'); + ocultar('div_trabajo_padre', true); + } else { + ocultar('div_trabajo_padre', true); + ocultar('div_padre_no_trabaja', true); + } + } +} + +/** + * Cambio del campo "Madre - ¿Vive?" + */ +function cambio_madre_vive() +{ + if ($('#form_datos_familiares-madre_vive').val() === 'S') { + mostrar('div_sit_laboral_madre'); + } else { + ocultar('div_sit_laboral_madre', true); + ocultar('div_trabajo_madre', true); + ocultar('div_madre_no_trabaja', true); + } +} + +/** + * Cambio del campo "Madre - Condición de actividad durante la semana pasada" + */ +function cambio_sit_laboral_madre() +{ + if ($('#form_datos_familiares-sit_laboral_madre').val() === '1') { + mostrar('div_trabajo_madre'); + ocultar('div_madre_no_trabaja', true); + } else { + if ($('#form_datos_familiares-sit_laboral_madre').val() === '3') { + mostrar('div_madre_no_trabaja'); + ocultar('div_trabajo_madre', true); + } else { + ocultar('div_trabajo_madre', true); + ocultar('div_madre_no_trabaja', true); + } + } +} + +kernel.renderer.registrar_pagelet('datos_familiares', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + + //---- Inicialización de estado de visibilidad de secciones -------- + cambio_padre_vive(); + cambio_sit_laboral_padre(); + cambio_madre_vive(); + cambio_sit_laboral_madre(); + + //---- Manejo de visibilidad de secciones por eventos -------------- + $('#form_datos_familiares-padre_vive').on('change', function() { cambio_padre_vive(); }); + $('#form_datos_familiares-sit_laboral_padre').on('change', function() { cambio_sit_laboral_padre(); }); + $('#form_datos_familiares-madre_vive').on('change', function() { cambio_madre_vive(); }); + $('#form_datos_familiares-sit_laboral_madre').on('change', function() { cambio_sit_laboral_madre(); }); + + //------------------------------------------------------------------ + + // Si corresponde, se activa el autosave + if (info.autosave) { + $(id).autosave(); + } + + $('#form_datos_familiares').submit(function() { + var hubo_cambios = formulario_hubo_cambios(); + if (hubo_cambios) { + var $form = $(this); + kernel.ajax.load($form.attr('action'), id, { + historia: false, + type: 'POST', + data: $form.serializeArray(), + success: function(response) { + if (response.info_estado.exitoso) { + if (response.info_estado.cambios_desde_impresion) { + document.location.reload(true); + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-success', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-error', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + + // Si corresponde, se desactiva el autosave + if (info.autosave) { + $(id).autosave('disable'); + } + kernel.renderer.pagelet('datos_familiares').onload(); + } + }); + } else { + kernel.ui.show_mensaje(info.msj_sin_cambios, { + tipo: 'alert-info', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + return false; + }); + } + }; +}); \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_laborales/default.css b/src/siu/operaciones/censo/datos_laborales/default.css new file mode 100644 index 0000000..20416dc --- /dev/null +++ b/src/siu/operaciones/censo/datos_laborales/default.css @@ -0,0 +1,7 @@ +#datos_laborales .combo_largo { + width: 663px; +} + +#datos_laborales .input_largo { + width: 653px; +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_laborales/default.twig b/src/siu/operaciones/censo/datos_laborales/default.twig new file mode 100644 index 0000000..df02312 --- /dev/null +++ b/src/siu/operaciones/censo/datos_laborales/default.twig @@ -0,0 +1,69 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% set form = this.get_form() %} + {% autoescape false %} + {{ form.encabezado }} +
+
+
+

{{this.get_nombre()|trans}}

+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+
+ + {%if form.hay_visibles_agrupado('datos_laborales_sit') %} +
+

{{'datos_laborales_sit'|trans}}

+
+
+ {{ form.control_group('existe_trab_alum') }} +
+
+
+ {{ form.control_group('alu_trab_hace') }} +
+
+ {{ form.control_group('alu_trab_ocup') }} +
+
+ {{ form.control_group('hora_sem_trab_alum', 'span6') }} + {{ form.control_group('rel_trab_propuesta', 'span6') }} +
+
+ {{ form.control_group('alu_trab_tarea') }} +
+ +
+
+
+ {% endif %} + + {%if form.hay_visibles_agrupado('datos_laborales_adic') %} +
+

{{'datos_laborales_adic'|trans}}

+
+
+ {{ form.checkbox('alu_trab_desjub') }} + {{ form.checkbox('alu_trab_fami') }} + {{ form.checkbox('remuneracion') }} +
+
+
+ {% endif %} + +
+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+ + + {% endautoescape %} + +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_laborales/form_datos_laborales.php b/src/siu/operaciones/censo/datos_laborales/form_datos_laborales.php new file mode 100644 index 0000000..8adfabc --- /dev/null +++ b/src/siu/operaciones/censo/datos_laborales/form_datos_laborales.php @@ -0,0 +1,124 @@ +crear('censo', 'guardar', array('datos_laborales')); + } + + protected function generar_definicion() + { + //---- Datos Personales ------------------------------------------------ + + $this->set_campo('existe_trab_alum', array( + form::label => 'existe_trab_alum', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_existe_trab_alu(), + form::valor_default => '', + form::clase_css => 'combo_largo', + )); + + $this->set_campo('alu_trab_hace', array( + form::label => 'alu_trab_hace', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_alu_trab_hace(), + form::valor_default => '', + form::clase_css => 'combo_largo', + )); + + $this->set_campo('alu_trab_ocup', array( + form::label => 'alu_trab_ocup', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_trab_ocup(), + form::valor_default => '', + form::clase_css => 'combo_largo', + )); + + $this->set_campo('hora_sem_trab_alum', array( + form::label => 'hora_sem_trab_alum', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_hora_sem_trab_alum(), + form::valor_default => '' + )); + + $this->set_campo('rel_trab_propuesta', array( + form::label => 'rel_trab_propuesta', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_rel_trab_propuesta(), + form::valor_default => '' + )); + + $this->set_campo('alu_trab_tarea', array( + form::label => 'alu_trab_tarea', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 255, + form::clase_css => 'input_largo', + )); + + //---- Datos adicionales ----------------------------------------------- + + $this->set_campo('alu_trab_desjub', array( + form::label => 'alu_trab_desjub', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_trab_fami', array( + form::label => 'alu_trab_fami', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('remuneracion', array( + form::label => 'remuneracion', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + //---------------------------------------------------------------------- + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_laborales/pagelet_datos_laborales.js b/src/siu/operaciones/censo/datos_laborales/pagelet_datos_laborales.js new file mode 100644 index 0000000..efea43b --- /dev/null +++ b/src/siu/operaciones/censo/datos_laborales/pagelet_datos_laborales.js @@ -0,0 +1,104 @@ +var _info; + +/** + * Cambio del campo "Condición de actividad durante la semana pasada" + */ +function cambio_existe_trab_alum() +{ + if ($('#form_datos_laborales-existe_trab_alum').val() == '1') { + mostrar('div_datos_trabajo'); + mostrar('div_datos_adicionales'); + } else { + ocultar('div_datos_trabajo', true); + ocultar('div_datos_adicionales', true); + } +} + +kernel.renderer.registrar_pagelet('datos_laborales', function(info) { + var id = '#' + info.id; + var r = window.matchMedia("(max-width: 700px)") + _info = info; + + return { + onload: function() { + + //---- Inicialización de estado de visibilidad de secciones -------- + cambio_existe_trab_alum(); + r.addListener(mediaQuerymatch(r)); + //---- Manejo de visibilidad de secciones por eventos -------------- + $('#form_datos_laborales-existe_trab_alum').on('change', function() { cambio_existe_trab_alum(); }); + + // Si corresponde, se activa el autosave + if (info.autosave) { + $(id).autosave(); + } + + $('#form_datos_laborales').submit(function() { + var hubo_cambios = formulario_hubo_cambios(); + if (hubo_cambios) { + var $form = $(this); + kernel.ajax.load($form.attr('action'), id, { + historia: false, + type: 'POST', + data: $form.serializeArray(), + success: function(response) { + if (response.info_estado.exitoso) { + if (response.info_estado.cambios_desde_impresion) { + document.location.reload(true); + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-success', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-error', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + + // Si corresponde, se desactiva el autosave + if (info.autosave) { + $(id).autosave('disable'); + } + kernel.renderer.pagelet('datos_laborales').onload(); + } + }); + } else { + kernel.ui.show_mensaje(info.msj_sin_cambios, { + tipo: 'alert-info', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + return false; + }); + + //------------------------------------------------------------------ + //---- Manejo de cascadas ------------------------------------------ + //------------------------------------------------------------------ + + + + + + + function mediaQuerymatch(r) + { + //media query matches + if (r.matches) { + $('#form_datos_laborales-existe_trab_alum').removeClass('combo_largo'); + } else { + $('#form_datos_laborales-existe_trab_alum').addClass('combo_largo'); + } + } + + } + } +}) \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_personales/default.css b/src/siu/operaciones/censo/datos_personales/default.css new file mode 100644 index 0000000..24eb179 --- /dev/null +++ b/src/siu/operaciones/censo/datos_personales/default.css @@ -0,0 +1,3 @@ +#datos_personales .combo_medio { + width: 400px; +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_personales/default.twig b/src/siu/operaciones/censo/datos_personales/default.twig new file mode 100644 index 0000000..8267fce --- /dev/null +++ b/src/siu/operaciones/censo/datos_personales/default.twig @@ -0,0 +1,178 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% set form = this.get_form() %} + {% autoescape false %} + {{ form.encabezado }} +
+
+
+

{{this.get_nombre()|trans}}

+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+
+ + {%if form.hay_visibles_agrupado('domicilio_per_clases') %} +
+

{{'domicilio_per_clases'|trans}}

+
+
+ {{ form.control_group('calle_per_lect') }} +
+
+ {{ form.control_group('numero_per_lect', 'span3') }} + {{ form.control_group('piso_per_lect', 'span3') }} + {{ form.control_group('dpto_per_lect', 'span3') }} + {{ form.control_group('unidad_per_lect', 'span3') }} +
+ + {% if form.def_visible('loc_per_lect') %} +
+ {{ form.control_group_localidad('loc_per_lect', 'loc_per_lect_descr', 'pais_per_lect') }} +
+ {{'ayuda_lista_localidades'|trans}} +
+ + +
+ {% endif %} + +
+ {% if form.def_visible('loc_per_lect') %} +
+ {{ form.control_group('cp_per_lect', 'span4') }} + +
+ {{ form.control_group('barrio_per_lec', 'span6') }} + {% endif %} +
+
+ {{ form.control_group('te_per_lect', 'span6') }} + {{ form.control_group('tipo_res_per_lect', 'span6') }} +
+
+ {{ form.control_group('vive_actual_con') }} +
+
+
+ {% endif %} + + {%if form.hay_visibles_agrupado('domicilio_procedencia') %} +
+

{{'domicilio_procedencia'|trans}}

+ +
+
+
+ {{'copiar_domicilio'|trans}} +
+
+
+ {{ form.control_group('calle_proc') }} +
+
+ {{ form.control_group('numero_proc', 'span3') }} + {{ form.control_group('piso_proc', 'span3') }} + {{ form.control_group('dpto_proc', 'span3') }} + {{ form.control_group('unidad_proc', 'span3') }} +
+ + {% if form.def_visible('loc_proc') %} +
+ {{ form.control_group_localidad('loc_proc', 'loc_proc_descr', 'pais_proc') }} +
+ {{'ayuda_lista_localidades'|trans}} +
+ + +
+ {% endif %} + +
+ {% if form.def_visible('loc_proc') %} +
+ {{ form.control_group('cp_proc', 'span4') }} + +
+ {{ form.control_group('barrio_proc', 'span6') }} + {% endif %} +
+ +
+ {{ form.control_group('te_proc', 'span6') }} +
+
+
+ {% endif %} + + + {%if form.hay_visibles_agrupado('persona_allegada') %} +
+

{{'persona_allegada'|trans}}

+
+
+
+ {{'copiar_domicilio'|trans}} +
+
+ {{'copiar_domicilio_proc'|trans}} +
+
+
+ {{ form.control_group('apellido_pers_alleg', 'span6') }} + {{ form.control_group('nombre_pers_alleg', 'span6') }} +
+
+ {{ form.control_group('tipo_allegado', 'span6') }} + {{ form.control_group('calle_pers_alleg', 'span6') }} +
+
+ {{ form.control_group('nro_pers_alleg', 'span3') }} + {{ form.control_group('piso_pers_alleg', 'span3') }} + {{ form.control_group('dpto_pers_alleg', 'span3') }} + {{ form.control_group('unidad_pers_alleg', 'span3') }} +
+ + {% if form.def_visible('loc_pers_alleg') %} +
+ {{ form.control_group_localidad('loc_pers_alleg', 'loc_pers_alleg_descr', 'pais_pers_alleg') }} +
+ {{'ayuda_lista_localidades'|trans}} +
+ + +
+ {% endif %} + +
+ {% if form.def_visible('loc_pers_alleg') %} +
+ {{ form.control_group('cp_pers_alleg', 'span4') }} + +
+ {{ form.control_group('barrio_alleg', 'span6') }} + {% endif %} +
+ +
+ {{ form.control_group('te_pers_alleg', 'span6') }} +
+
+
+ {% endif %} + +
+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+ + + {% endautoescape %} + +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_personales/form_datos_personales.php b/src/siu/operaciones/censo/datos_personales/form_datos_personales.php new file mode 100644 index 0000000..1b66e08 --- /dev/null +++ b/src/siu/operaciones/censo/datos_personales/form_datos_personales.php @@ -0,0 +1,398 @@ +crear('censo', 'guardar', array('datos_personales')); + } + + protected function generar_definicion() + { + //---- Domicilio durante el período de clases -------------------------- + $this->set_campo('calle_per_lect', array( + form::label => 'calle_per_lect', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 50 + )); + + $this->set_campo('numero_per_lect', array( + form::label => 'numero_per_lect', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 10, + form::clase_css => 'input-medium', + )); + + $this->set_campo('piso_per_lect', array( + form::label => 'piso_per_lect', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 3, + form::clase_css => 'input-medium', + )); + + $this->set_campo('dpto_per_lect', array( + form::label => 'dpto_per_lect', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 5, + form::clase_css => 'input-medium', + )); + + $this->set_campo('unidad_per_lect', array( + form::label => 'unidad_per_lect', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 3, + form::clase_css => 'input-medium', + )); + + $this->set_campo('pais_per_lect', array( + form::label => 'pais_per_lect', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_paises(false), + form::clase_css => 'select-pais' + )); + + $this->set_campo('loc_per_lect', array( + form::label => 'loc_per_lect', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::valor_default => '' + )); + + $this->set_campo('loc_per_lect_descr', array( + form::label => 'loc_per_lect', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::clase_css => 'input-localidad', + )); + + $this->set_campo('cp_per_lect', array( + form::label => 'cp_per_lect', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::readonly => true, + form::clase_css => 'input-small', + form::largo => 15 + )); + + $this->set_campo('te_per_lect', array( + form::label => 'te_per_lect', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 18 + )); + + $this->set_campo('tipo_res_per_lect', array( + form::label => 'tipo_res_per_lect', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_tipos_vivienda(), + )); + + $this->set_campo('vive_actual_con', array( + form::label => 'vive_actual_con', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_vive_con(), + form::valor_default => '', + form::clase_css => 'combo_medio' + )); + + $this->set_campo('barrio_per_lec', array( + form::label => 'barrio_per_lec', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 60 + )); + + //---- Domicilio de procedencia ---------------------------------------- + $this->set_campo('calle_proc', array( + form::label => 'calle_proc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 50 + )); + + $this->set_campo('numero_proc', array( + form::label => 'numero_proc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 10, + form::clase_css => 'input-medium', + )); + + $this->set_campo('piso_proc', array( + form::label => 'piso_proc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 3, + form::clase_css => 'input-medium', + )); + + $this->set_campo('dpto_proc', array( + form::label => 'dpto_proc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 5, + form::clase_css => 'input-medium', + )); + + $this->set_campo('unidad_proc', array( + form::label => 'unidad_proc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 3, + form::clase_css => 'input-medium', + )); + + $this->set_campo('pais_proc', array( + form::label => 'pais_proc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_paises(false), + form::clase_css => 'select-pais' + )); + + $this->set_campo('loc_proc', array( + form::label => 'loc_proc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::valor_default => '' + )); + + $this->set_campo('loc_proc_descr', array( + form::label => 'loc_proc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::clase_css => 'input-localidad', + )); + + $this->set_campo('cp_proc', array( + form::label => 'cp_proc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::readonly => true, + form::clase_css => 'input-small', + form::largo => 15 + )); + + $this->set_campo('te_proc', array( + form::label => 'te_proc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 18 + )); + + $this->set_campo('barrio_proc', array( + form::label => 'barrio_proc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 60 + )); + + //---- Datos de persona allegada --------------------------------------- + $this->set_campo('apellido_pers_alleg', array( + form::label => 'apellido_pers_alleg', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 60 + )); + + $this->set_campo('nombre_pers_alleg', array( + form::label => 'nombre_pers_alleg', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 60 + )); + + $this->set_campo('tipo_allegado', array( + form::label => 'tipo_allegado', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_tipos_allegado(), + form::valor_default => '', + )); + + $this->set_campo('calle_pers_alleg', array( + form::label => 'calle_pers_alleg', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 50 + )); + + $this->set_campo('nro_pers_alleg', array( + form::label => 'nro_pers_alleg', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 10, + form::clase_css => 'input-medium', + )); + + $this->set_campo('piso_pers_alleg', array( + form::label => 'piso_pers_alleg', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 3, + form::clase_css => 'input-medium', + )); + + $this->set_campo('dpto_pers_alleg', array( + form::label => 'dpto_pers_alleg', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 5, + form::clase_css => 'input-medium', + )); + + $this->set_campo('unidad_pers_alleg', array( + form::label => 'unidad_pers_alleg', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 3, + form::clase_css => 'input-medium', + )); + + $this->set_campo('pais_pers_alleg', array( + form::label => 'pais_pers_alleg', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_paises(false), + form::clase_css => 'select-pais' + )); + + $this->set_campo('loc_pers_alleg', array( + form::label => 'loc_pers_alleg', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::valor_default => '' + )); + + $this->set_campo('loc_pers_alleg_descr', array( + form::label => 'loc_pers_alleg', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::readonly => false, + form::clase_css => 'input-localidad', + )); + + $this->set_campo('cp_pers_alleg', array( + form::label => 'cp_pers_alleg', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::readonly => true, + form::clase_css => 'input-small', + form::largo => 15 + )); + + $this->set_campo('te_pers_alleg', array( + form::label => 'te_pers_alleg', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 18 + )); + + $this->set_campo('barrio_alleg', array( + form::label => 'barrio_alleg', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 60 + )); + } + + function control_group_localidad($campo_localidad, $campo_descr, $campo_pais) + { + if ($this->def_visible($campo_localidad)) { + $label = $this->label($campo_localidad); + + if (($this->get_obligatorio($campo_localidad)) || ($this->def_obligatorio($campo_localidad))) { + $label = str_replace('class="optional"', 'class="label-obligatorio"', $label); + $label = str_replace('', ' (*)', $label); + } + + $elemento_localidad = $this->elemento($campo_localidad); + $elemento_pais = $this->elemento($campo_pais); + $elemento_descr = $this->elemento($campo_descr); + + $tiene_error = $this->tiene_error($campo_localidad) || $this->tiene_error($campo_descr); + $clase_error = ($tiene_error) ? 'error' : ''; + + $html = "
"; + $html .= $label; + $html .= $elemento_localidad; + $html .= $elemento_pais; + $html .= $elemento_descr; + $html .= $this->ayuda($campo_localidad); + if ($tiene_error) { + $html .= "
"; + $html .= "{$this->error($campo_descr)}"; + } + $html .= "
"; + + return $html; + } + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_personales/pagelet_datos_personales.js b/src/siu/operaciones/censo/datos_personales/pagelet_datos_personales.js new file mode 100644 index 0000000..5a997b3 --- /dev/null +++ b/src/siu/operaciones/censo/datos_personales/pagelet_datos_personales.js @@ -0,0 +1,413 @@ +var _info; + +function copiar_domicilio(origen, destino) +{ + $('#form_datos_personales-calle_'+destino).val($('#form_datos_personales-calle_'+origen).val()); + $('#form_datos_personales-piso_'+destino).val($('#form_datos_personales-piso_'+origen).val()); + $('#form_datos_personales-dpto_'+destino).val($('#form_datos_personales-dpto_'+origen).val()); + $('#form_datos_personales-unidad_'+destino).val($('#form_datos_personales-unidad_'+origen).val()); + $('#form_datos_personales-loc_'+destino).val($('#form_datos_personales-loc_'+origen).val()); + $('#form_datos_personales-loc_'+destino+'_descr').val($('#form_datos_personales-loc_'+origen+'_descr').val()); + $('#form_datos_personales-cp_'+destino).val($('#form_datos_personales-cp_'+origen).val()); + $('#form_datos_personales-te_'+destino).val($('#form_datos_personales-te_'+origen).val()); + + //-------------------------------------------------------------------------- + var origen_barrio; + var destino_barrio; + if (origen === 'per_lect') { + origen_barrio = 'per_lec'; + } else { + origen_barrio = origen; + } + if (destino === 'pers_alleg') { + destino_barrio = 'alleg'; + } else { + destino_barrio = destino; + } + $('#form_datos_personales-barrio_'+destino_barrio).val($('#form_datos_personales-barrio_'+origen_barrio).val()); + //-------------------------------------------------------------------------- + + if (destino === 'pers_alleg') { + $('#form_datos_personales-nro_'+destino).val($('#form_datos_personales-numero_'+origen).val()); + } else { + $('#form_datos_personales-numero_'+destino).val($('#form_datos_personales-numero_'+origen).val()); + } + + if ($("#form_datos_personales-loc_"+destino+"_descr").val() !== '') { + set_solo_lectura('form_datos_personales-loc_'+destino+'_descr', true); + $("#loc_"+destino+"_descr_help").hide(); + } else { + set_solo_lectura('form_datos_personales-loc_'+destino+'_descr', false); + $("#loc_"+destino+"_descr_help").show(); + } + + handle_combo_pais_localidad('form_datos_personales-pais_'+destino, 'form_datos_personales-loc_'+destino); +} + +//------------------------------------------------------------------------------ + +kernel.renderer.registrar_pagelet('datos_personales', function(info) { + var id = '#' + info.id; + var r = window.matchMedia("(max-width: 700px)") + _info = info; + + return { + onload: function() { + r.addListener(mediaQuerymatch(r)); + //---- Copia de domicilio ------------------------------------------ + $('#btn_copiar_domicilio__proc__per_lect').on('click', function() { + copiar_domicilio('per_lect', 'proc'); + }); + + $('#btn_copiar_domicilio__pers_alleg__per_lect').on('click', function() { + copiar_domicilio('per_lect', 'pers_alleg'); + }); + + $('#btn_copiar_domicilio__pers_alleg__proc').on('click', function() { + copiar_domicilio('proc', 'pers_alleg'); + }); + + //------------------------------------------------------------------ + //---- Selector de localidad (período de clases) ------------------- + //------------------------------------------------------------------ + + //---- Combo de países para el selector de localidades ------------- + handle_combo_pais_localidad('form_datos_personales-pais_per_lect', 'form_datos_personales-loc_per_lect'); + + //---- Lista de localidades (autocompletado) ----------------------- + if ($("#form_datos_personales-loc_per_lect_descr").val() !== '') { + set_solo_lectura('form_datos_personales-loc_per_lect_descr', true); + $("#loc_per_lect_descr_help").hide(); + } else { + $("#loc_per_lect_descr_help").show(); + } + + $("#form_datos_personales-loc_per_lect_descr").attr('campo_id', 'form_datos_personales-loc_per_lect'); + $("#form_datos_personales-loc_per_lect_descr").attr('ayuda', 'loc_per_lect_help'); + $("#form_datos_personales-loc_per_lect_descr").attr('campo_pais', 'form_datos_personales-pais_per_lect'); + $("#form_datos_personales-loc_per_lect_descr").attr('campo_cp', 'form_datos_personales-cp_per_lect'); + $("#form_datos_personales-loc_per_lect_descr").autocomplete({ + source: function(request, response) { + $.ajax({ + url: info.url_lista_localidades, + dataType: "json", + data: { + term : request.term, + pais : $('#form_datos_personales-pais_per_lect').val() + }, + success: function(data) { + response(data); + }, + // A value of 0 means there will be no timeout + timeout: 0 + }); + }, + minLength: 3, + select: localidad_seleccionada_cp, + focus: localidad_foco_cp + + }); + + $('#btnSelectorLocPerLect').on('click', function() { + $.facebox(info.selector_localidad); + var _info = new cloneObject(info); + _info['retorno_valor'] = 'form_datos_personales-loc_per_lect'; + _info['retorno_descr'] = 'form_datos_personales-loc_per_lect_descr'; + _info['retorno_cp'] = 'form_datos_personales-cp_per_lect'; + _info['ayuda'] = 'loc_per_lect_help'; + _info['campo_pais'] = 'form_datos_personales-pais_per_lect'; + inicializar_popup_localidades(_info); + }); + + $('#btnLimpiarLocPerLect').on('click', function() { + $('#form_datos_personales-loc_per_lect').val('null'); + $('#form_datos_personales-loc_per_lect_descr').val(''); + $('#form_datos_personales-cp_per_lect').val(''); + set_solo_lectura('form_datos_personales-loc_per_lect_descr', false); + $('#form_datos_personales-cp_per_lect').children().remove(); + set_solo_lectura('form_datos_personales-cp_per_lect', true); + handle_combo_pais_localidad('form_datos_personales-pais_per_lect', 'form_datos_personales-loc_per_lect'); + $("#loc_per_lect_help").show(); + }); + + $('#btnSelectorCP_PerLect').on('click', function() { + var localidad = $('#form_datos_personales-loc_per_lect').val(); + if ((localidad === 'null') || (localidad === '')) { + return false; + } else { + $.facebox(info.selector_cp); + var _info = new cloneObject(info); + _info['retorno_cp'] = 'form_datos_personales-cp_per_lect'; + _info['localidad'] = localidad; + inicializar_popup_cps(_info); + } + }); + + //------------------------------------------------------------------ + //---- Selector de localidad (procedencia) ------------------------- + //------------------------------------------------------------------ + + //---- Combo de países para el selector de localidades ------------- + handle_combo_pais_localidad('form_datos_personales-pais_proc', 'form_datos_personales-loc_proc'); + + //---- Lista de localidades (autocompletado) ----------------------- + if ($("#form_datos_personales-loc_proc_descr").val() !== '') { + set_solo_lectura('form_datos_personales-loc_proc_descr', true); + $("#loc_proc_descr_help").hide(); + } else { + $("#loc_proc_descr_help").show(); + } + + $("#form_datos_personales-loc_proc_descr").attr('campo_id', 'form_datos_personales-loc_proc'); + $("#form_datos_personales-loc_proc_descr").attr('ayuda', 'loc_proc_descr_help'); + $("#form_datos_personales-loc_proc_descr").attr('campo_pais', 'form_datos_personales-pais_proc'); + $("#form_datos_personales-loc_proc_descr").attr('campo_cp', 'form_datos_personales-cp_proc'); + $("#form_datos_personales-loc_proc_descr").autocomplete({ + source: function(request, response) { + $.ajax({ + url: info.url_lista_localidades, + dataType: "json", + data: { + term : request.term, + pais : $('#form_datos_personales-pais_proc').val() + }, + success: function(data) { + response(data); + }, + // A value of 0 means there will be no timeout + timeout: 0 + }); + }, + minLength: 3, + select: localidad_seleccionada_cp, + focus: localidad_foco_cp + }); + + $('#btnSelectorLocProc').on('click', function() { + $.facebox(info.selector_localidad); + var _info = new cloneObject(info); + _info['retorno_valor'] = 'form_datos_personales-loc_proc'; + _info['retorno_descr'] = 'form_datos_personales-loc_proc_descr'; + _info['retorno_cp'] = 'form_datos_personales-cp_proc'; + _info['ayuda'] = 'loc_proc_descr_help'; + _info['campo_pais'] = 'form_datos_personales-pais_proc'; + inicializar_popup_localidades(_info); + }); + + $('#btnLimpiarLocProc').on('click', function() { + $('#form_datos_personales-loc_proc').val('null'); + $('#form_datos_personales-loc_proc_descr').val(''); + $('#form_datos_personales-cp_proc').val(''); + set_solo_lectura('form_datos_personales-loc_proc_descr', false); + $('#form_datos_personales-cp_proc').children().remove(); + set_solo_lectura('form_datos_personales-cp_proc', true); + handle_combo_pais_localidad('form_datos_personales-pais_proc', 'form_datos_personales-loc_proc'); + $("#loc_proc_descr_help").show(); + }); + + $('#btnSelectorCP_Proc').on('click', function() { + var localidad = $('#form_datos_personales-loc_proc').val(); + if ((localidad === 'null') || (localidad === '')) { + return false; + } else { + $.facebox(info.selector_cp); + var _info = new cloneObject(info); + _info['retorno_cp'] = 'form_datos_personales-cp_proc'; + _info['localidad'] = localidad; + inicializar_popup_cps(_info); + } + }); + + //------------------------------------------------------------------ + //---- Selector de localidad (persona allegada) -------------------- + //------------------------------------------------------------------ + + //---- Combo de países para el selector de localidades ------------- + handle_combo_pais_localidad('form_datos_personales-pais_pers_alleg', 'form_datos_personales-loc_pers_alleg'); + + //---- Lista de localidades (autocompletado) ----------------------- + if ($("#form_datos_personales-loc_pers_alleg_descr").val() !== '') { + set_solo_lectura('form_datos_personales-loc_pers_alleg_descr', true); + $("#loc_pers_alleg_descr_help").hide(); + } else { + $("#loc_pers_alleg_descr_help").show(); + } + + $("#form_datos_personales-loc_pers_alleg_descr").attr('campo_id', 'form_datos_personales-loc_pers_alleg'); + $("#form_datos_personales-loc_pers_alleg_descr").attr('ayuda', 'loc_pers_alleg_descr_help'); + $("#form_datos_personales-loc_pers_alleg_descr").attr('campo_pais', 'form_datos_personales-pais_pers_alleg'); + $("#form_datos_personales-loc_pers_alleg_descr").attr('campo_cp', 'form_datos_personales-cp_pers_alleg'); + $("#form_datos_personales-loc_pers_alleg_descr").autocomplete({ + source: function(request, response) { + $.ajax({ + url: info.url_lista_localidades, + dataType: "json", + data: { + term : request.term, + pais : $('#form_datos_personales-pais_pers_alleg').val() + }, + success: function(data) { + response(data); + }, + // A value of 0 means there will be no timeout + timeout: 0 + }); + }, + minLength: 3, + select: localidad_seleccionada_cp, + focus: localidad_foco_cp + }); + + $('#btnSelectorLocPersAlleg').on('click', function() { + $.facebox(info.selector_localidad); + var _info = new cloneObject(info); + _info['retorno_valor'] = 'form_datos_personales-loc_pers_alleg'; + _info['retorno_descr'] = 'form_datos_personales-loc_pers_alleg_descr'; + _info['retorno_cp'] = 'form_datos_personales-cp_pers_alleg'; + _info['ayuda'] = 'loc_pers_alleg_descr_help'; + _info['campo_pais'] = 'form_datos_personales-pais_pers_alleg'; + inicializar_popup_localidades(_info); + }); + + $('#btnLimpiarLocPersAlleg').on('click', function() { + $('#form_datos_personales-loc_pers_alleg').val('null'); + $('#form_datos_personales-loc_pers_alleg_descr').val(''); + $('#form_datos_personales-cp_pers_alleg').val(''); + set_solo_lectura('form_datos_personales-loc_pers_alleg_descr', false); + $('#form_datos_personales-cp_pers_alleg').children().remove(); + set_solo_lectura('form_datos_personales-cp_pers_alleg', true); + handle_combo_pais_localidad('form_datos_personales-pais_pers_alleg', 'form_datos_personales-loc_pers_alleg'); + $("#loc_pers_alleg_descr_help").show(); + }); + + $('#btnSelectorCP_PersAlleg').on('click', function() { + var localidad = $('#form_datos_personales-loc_pers_alleg').val(); + if ((localidad === 'null') || (localidad === '')) { + return false; + } else { + $.facebox(info.selector_cp); + var _info = new cloneObject(info); + _info['retorno_cp'] = 'form_datos_personales-cp_pers_alleg'; + _info['localidad'] = localidad; + inicializar_popup_cps(_info); + } + }); + + //---- Si corresponde, se activa el autosave ----------------------- + if (info.autosave) { + $(id).autosave(); + } + + //---- Submit ------------------------------------------------------ + $('#form_datos_personales').submit(function() { + var hubo_cambios = formulario_hubo_cambios(); + if (hubo_cambios) { + var $form = $(this); + kernel.ajax.load($form.attr('action'), id, { + historia: false, + type: 'POST', + data: $form.serializeArray(), + success: function(response) { + if (response.info_estado.exitoso) { + if (response.info_estado.cambios_desde_impresion) { + document.location.reload(true); + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-success', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-error', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + + // Si corresponde, se desactiva el autosave + if (info.autosave) { + $(id).autosave('disable'); + } + kernel.renderer.pagelet('datos_personales').onload(); + } + }); + } else { + kernel.ui.show_mensaje(info.msj_sin_cambios, { + tipo: 'alert-info', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + return false; + }); + } + }; + + //-------------------------------------------------------------------------- + //---- Función autocompletar (localidades) --------------------------------- + //-------------------------------------------------------------------------- + + function localidad_seleccionada_cp(event, ui) + { + var campo_id = event.target.attributes.campo_id.nodeValue; + var campo_descr = event.target.attributes.id.nodeValue; + var ayuda = event.target.attributes.ayuda.nodeValue; + var campo_pais = event.target.attributes.campo_pais.nodeValue; + var campo_cp = event.target.attributes.campo_cp.nodeValue; + + var localidad = ui.item.value.localidad; + var localidad_descr = ui.item.value.localidad_descr; + + chequear_cp_unico(localidad, campo_cp); + + $("#"+campo_id).val(localidad); + $("#"+campo_descr).val(localidad_descr); + $("#"+ayuda).hide(); + $("#"+campo_pais).hide(); + event.preventDefault(); + + set_solo_lectura(campo_descr, true); + } + + function localidad_foco_cp(event) + { + event.preventDefault(); + } + + /* + * Si la localidad tiene un único código postal, lo completa automáticamente + */ + function chequear_cp_unico(_localidad, _campo_cp) + { + $.ajax({ + url: info.url_cp_unico, + dataType: 'json', + data: {localidad: _localidad}, + type: 'post', + success: function(data) { + $('#'+_campo_cp).val(data.cp); + } + }); + } + function mediaQuerymatch(r) + { + //media query matches + if (r.matches) { + $('#form_datos_personales-vive_actual_con').removeClass('combo_medio'); + $('#form_datos_personales-loc_per_lect_descr').removeClass('input-localidad'); + $('#form_datos_personales-loc_proc_descr').removeClass('input-localidad'); + $('#form_datos_personales-loc_pers_alleg_descr').removeClass('input-localidad'); + } else { + $('#form_datos_personales-vive_actual_con').addClass('combo_medio'); + $('#form_datos_personales-loc_per_lect_descr').addClass('input-localidad'); + $('#form_datos_personales-loc_proc_descr').addClass('input-localidad'); + $('#form_datos_personales-loc_pers_alleg_descr').addClass('input-localidad'); + } + } + +}) \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_principales/default.css b/src/siu/operaciones/censo/datos_principales/default.css new file mode 100644 index 0000000..86c84bf --- /dev/null +++ b/src/siu/operaciones/censo/datos_principales/default.css @@ -0,0 +1,7 @@ +#datos_principales #js_nro_documento { + display: none; +} + +#datos_principales #js_nro_tramite_dni { + display: none; +} diff --git a/src/siu/operaciones/censo/datos_principales/default.twig b/src/siu/operaciones/censo/datos_principales/default.twig new file mode 100644 index 0000000..6be00ec --- /dev/null +++ b/src/siu/operaciones/censo/datos_principales/default.twig @@ -0,0 +1,177 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% set form = this.get_form() %} + {% autoescape false %} + {{ form.encabezado }} +
+
+
+

{{this.get_nombre()|trans}}

+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+
+ + {%if form.hay_visibles_agrupado('datos_principales_pers') %} +
+

{{'datos_principales_pers'|trans}}

+
+
+ {{ form.control_group('apellido', 'span6') }} + {{ form.control_group('nombres', 'span6') }} +
+
+ {{ form.control_group('nombres_elegido', 'span6') }} +
+
+ {{'nombres_elegido_leyenda'|trans}} +
+
+ {{ form.control_group('sexo', 'span6') }} +
+ +
+ {{ form.control_group('identidad_genero', 'span6') }} + {{ form.control_group('identidad_genero_otro', 'span6') }} +
+

{{'ayuda_identidad_genero'|trans({'%link%': this.data.url_identidad_genero})|raw}}

+ +
+ {{ form.control_group('pais_documento', 'span6') }} + {{ form.control_group('tipo_documento', 'span6') }} +
+
+ {{ form.control_group('nro_documento', 'span6') }} + {{ form.control_group('nacionalidad_desc', 'span6') }} + {{ form.control_group('nacionalidad', 'span6') }} +
+
+ +
+ +
+ {{ form.control_group('numero_cuil', 'span6') }} + {{ form.control_group('e_mail', 'span6') }} +
+
+ {{ form.control_group('celular_caracteristica', 'span6') }} + {{ form.control_group('celular_valor', 'span6') }} +
+
+
+ {% endif %} + + {%if form.hay_visibles_agrupado('datos_principales_nacim') %} +
+

{{'datos_principales_nacim'|trans}}

+
+
+ {{ form.control_group('fecha_nacimiento') }} + {{ form.control_group('es_mayor_25_sin_secundario') }} + {% if form.def_visible('loc_nacimiento') %} +
+ {{ form.control_group_localidad('loc_nacimiento', 'loc_nac_descr', 'pais_nacimiento') }} +
+ {{'ayuda_lista_localidades'|trans}} +
+ + +
+ {% endif %} +
+
+
+ {% endif %} + + {% if this.permite_cedula() and form.hay_visibles_agrupado('datos_principales_ci') %} +
+

{{'datos_principales_ci'|trans}}

+
+
+ {{ form.control_group('ent_emisora_ci', 'span6') }} + {{ form.control_group('nro_ci', 'span6') }} +
+
+
+ {% endif %} + + {%if form.hay_visibles_agrupado('datos_principales_pasap') %} +
+

{{'datos_principales_pasap'|trans}}

+
+
+ {{ form.control_group('pais_emisor_pasap', 'span6') }} + {{ form.control_group('nro_pasap', 'span6') }} +
+
+
+ {% endif %} + + {% if this.necesita_visa() and form.hay_visibles_agrupado('datos_principales_visa') %} +
+

{{'datos_principales_visa'|trans}}

+
+
+ {{ form.control_group('tipo_visa', 'span6') }} +
+
+ {{ form.control_group('otorgamiento_visa', 'span6') }} +
+ {{ form.control_group('vencimiento_visa') }} +
+
+
+
+ {% endif %} + + {% if not this.es_argentino() and form.hay_visibles_agrupado('datos_principales_res') %} +
+

{{'datos_principales_res'|trans}}

+
+
+ {{ form.control_group('residencia') }} +
+
+
+ {{ form.control_group('fecha_respre_otorg') }} +
+
+ {{ form.control_group('fecha_respre_venc') }} +
+
+
+
+ {% endif %} + + {%if form.hay_visibles_agrupado('pueblos_originarios') %} +
+

{{'pueblos_originarios'|trans}}

+
+
+ {{ form.control_group('pertenece_pueblo_originario') }} +
+ {{ form.control_group('pueblo_originario', 'span6') }} +
+ {{ form.control_group('pueblo_originario_otro') }} +
+
+
+
+
+ {% endif %} + +
+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+ + + {% endautoescape %} + +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_principales/form_datos_principales.php b/src/siu/operaciones/censo/datos_principales/form_datos_principales.php new file mode 100644 index 0000000..c3f9cf5 --- /dev/null +++ b/src/siu/operaciones/censo/datos_principales/form_datos_principales.php @@ -0,0 +1,650 @@ +crear('censo', 'guardar', array('datos_principales')); + } + + //-------------------------------------------------------------------------- + //---- Validaciones -------------------------------------------------------- + //-------------------------------------------------------------------------- + + function validar() + { + $form_valido = parent::validar(); + $form_valido = $form_valido & $this->validar_cuil(); + $form_valido = $form_valido & $this->validar_fecha_nacimiento(); + $form_valido = $form_valido & $this->validar_fechas_visa(); + $form_valido = $form_valido & $this->validar_fechas_residencia(); + $form_valido = $form_valido & $this->validar_documento(); + $form_valido = $form_valido & $this->validar_nro_documento(); + $form_valido = $form_valido & $this->validar_pasaporte(); + return $form_valido; + } + + //---- Validaci�n de CUIL -------------------------------------------------- + + /** + * Se valida que el cuil sea v�lido. + */ + protected function validar_cuil() + { + $valido = true; + $datos = $this->get_datos(); + if (!empty($datos['numero_cuil'])) { + $cuil = $datos['numero_cuil']; + if (!comunes::validarCUIT($cuil)) { + $this->agregar_error('numero_cuil', kernel::traductor()->trans('form_validacion_error.error_cuil')); + $valido = false; + } + } + return $valido; + } + + //---- Fin validaci�n CUIL ------------------------------------------------- + + /** + * Se valida fecha de nacimiento. + */ + protected function validar_fecha_nacimiento() + { + $valido = true; + $datos = $this->get_datos(); + if (!empty($datos['fecha_nacimiento'])) { + $fecha_nacimiento = $datos['fecha_nacimiento']; + + // Se valida que el a�o de nacimiento sea posterior a 1900 + $fecha_partes = explode('/', $fecha_nacimiento); + + if (isset($fecha_partes[2]) && $fecha_partes[2] <= 1900) { + $this->agregar_error('fecha_nacimiento', kernel::traductor()->trans('error_fecha_antigua')); + $valido = false; + } + + // Se valida la fecha de nacimiento no sea posterior a la actual + if ($valido) { + if (fecha_es_mayor_a_fecha_actual(convertir_fecha_formato_base($fecha_nacimiento))) { + $this->agregar_error('fecha_nacimiento', kernel::traductor()->trans('error_fecha_posterior')); + $valido = false; + } else { + $edad = comunes::calcular_edad($fecha_nacimiento); + // Si es menor de 25 le pongo el campo 'es_mayor_25_sin_secundario' en 'N' + if ($edad < 25) { + $this->set_dato('es_mayor_25_sin_secundario', comunes::no); + } + } + } + } + return $valido; + } + + protected function validar_fechas_visa() + { + $valido = true; + $datos = $this->get_datos(); + $fecha_otorgamiento = (!empty($datos['otorgamiento_visa'])) ? convertir_fecha_formato_base($datos['otorgamiento_visa']) : ''; + $fecha_vencimiento = (!empty($datos['vencimiento_visa'])) ? convertir_fecha_formato_base($datos['vencimiento_visa']) : ''; + + // La fecha de vencimiento no puede ser menor a la fecha actual + if (!empty($fecha_vencimiento)) { + if (fecha_es_menor_a_fecha_actual($fecha_vencimiento)) { + $valido = false; + $this->agregar_error('vencimiento_visa', kernel::traductor()->trans('error_fecha_vencimiento_hoy')); + } + } + + if ($valido) { + // La fecha de vencimiento no puede ser menor a la fecha de otorgamiento + if (!empty($fecha_otorgamiento) && !empty($fecha_vencimiento)) { + if (!fecha_es_menor($fecha_otorgamiento, $fecha_vencimiento)) { + $valido = false; + $this->agregar_error('vencimiento_visa', kernel::traductor()->trans('error_fecha_vencimiento_otorg')); + } + } + } + + return $valido; + } + + protected function validar_fechas_residencia() + { + $valido = true; + $datos = $this->get_datos(); + + $tipo_doc = kernel::persona()->datos()->get_tipo_doc(); + $tipo_residencia = $datos['residencia']; + + if ($tipo_residencia != opciones::NO_SELECCION) { + $fecha_otorgamiento = (!empty($datos['fecha_respre_otorg'])) ? convertir_fecha_formato_base($datos['fecha_respre_otorg']) : ''; + $fecha_vencimiento = (!empty($datos['fecha_respre_venc'])) ? convertir_fecha_formato_base($datos['fecha_respre_venc']) : ''; + + if (!empty($fecha_otorgamiento)) { + // Se valida que el a�o de la fecha de otorgamiento sea posterior a 1900 + $fecha_partes = explode('-', $fecha_otorgamiento); + + if (isset($fecha_partes[0]) && $fecha_partes[0] <= 1900) { + $this->agregar_error('fecha_respre_otorg', kernel::traductor()->trans('error_fecha_antigua')); + $valido = false; + } + + // Se valida la fecha de otorgamiento no sea posterior a la actual + if ($valido) { + if (fecha_es_mayor_a_fecha_actual($fecha_otorgamiento)) { + $this->agregar_error('fecha_respre_otorg', kernel::traductor()->trans('error_fecha_posterior')); + $valido = false; + } + } + } + + // La fecha de vencimiento no puede ser menor a la fecha actual + if (!empty($fecha_vencimiento)) { + if (fecha_es_menor_a_fecha_actual($fecha_vencimiento)) { + $valido = false; + $this->agregar_error('fecha_respre_venc', kernel::traductor()->trans('error_fecha_vencimiento_hoy')); + } + } + + if ($valido) { + // La fecha de vencimiento no puede ser menor a la fecha de otorgamiento + if (!empty($fecha_otorgamiento) && !empty($fecha_vencimiento)) { + if (!fecha_es_menor($fecha_otorgamiento, $fecha_vencimiento)) { + $valido = false; + $this->agregar_error('fecha_respre_venc', kernel::traductor()->trans('error_fecha_vencimiento_otorg')); + } + } + } + + if ($valido) { + if (($tipo_residencia == 2) || ($tipo_residencia == 3)) { + // Para residencia precaria y temporal, se requiere fecha de vencimiento. + if (empty($fecha_vencimiento)) { + $valido = false; + $this->agregar_error('fecha_respre_venc', kernel::traductor()->trans('error_fecha_vencimiento_req')); + } + } + } + } + + return $valido; + } + protected function validar_documento() + { + $documento_valido = true; + + if ((!$this->tiene_error('nacionalidad')) && (!$this->tiene_error('pais_documento')) && (!$this->tiene_error('tipo_documento'))) { + $nacion = $this->datos['nacionalidad']; + $paisdoc = $this->datos['pais_documento']; + $tipodoc = $this->datos['tipo_documento']; + + // Validaciones de Pa�s del Documento + if ($nacion != 2 && $paisdoc != 54) { + $mensaje = kernel::traductor()->trans('error_pais_doc_1'); + $this->agregar_error('pais_documento', $mensaje); + $documento_valido = false; + } + + // Validaciones de Tipo de Documento_pais + $entidad_tipo_doc = g3::entidad('tipos_documentos_pais')->get_entidad($this->datos['pais_documento']."_".$this->datos['tipo_documento']); + if (empty($entidad_tipo_doc)){ + $mensaje = kernel::traductor()->trans('error_pais_doc_0'); + $this->agregar_error('pais_documento', $mensaje); + $this->agregar_error('tipo_documento', $mensaje); + $documento_valido = false; + } + + } + + return $documento_valido; + } + + function validar_nro_documento() + { + $entidad_tipo_doc = g3::entidad('tipos_documentos_pais')->get_entidad($this->datos['pais_documento']."_".$this->datos['tipo_documento']); + + // Validaci�n en base a la expresi�n regular + $valido = true; + $exp_reg= '/' . $entidad_tipo_doc['exp_regular_validacion'] . '/'; + if (!preg_match($exp_reg, $this->datos['nro_documento'])) { + // Documento inv�lido seg�n la expresi�n regular + $valido = false; + $this->agregar_error('nro_documento', $entidad_tipo_doc['exp_regular_mensaje']); + } + + switch ($this->datos['tipo_documento']) { + case comunes::TIPO_DOCUMENTO_DNI: + // Valida que el DNI sea mayor a 1 mill�n y menor a 100 millones. + if (($this->datos['nro_documento'] < comunes::NRO_DOCUMENTO_DNI_DNT_MIN) || ($this->datos['nro_documento'] > comunes::NRO_DOCUMENTO_DNI_DNT_MAX)) { + $mensaje = kernel::traductor()->trans('nro_documento.dni.error'); + $this->agregar_error('nro_documento', $mensaje); + $valido = false; + } + break; + case comunes::TIPO_DOCUMENTO_CUIL_CUIT: + // Valida que el CUIL/CUIT sea valido. + if (!comunes::validarCUIT($this->datos['nro_documento'])) { + $mensaje = kernel::traductor()->trans('nro_documento.cuil.error'); + $this->agregar_error('nro_documento', $mensaje); + $valido = false; + } + break; + } + + return $valido; + } + + //---- Validaci�n de CUIL -------------------------------------------------- + + /** + * Se valida que el cuil sea v�lido. + */ + protected function validar_pasaporte() + { + $valido = true; + $datos = $this->get_datos(); + //validacion de pasaporte + $entidad_tipo_pasaporte = g3::entidad('tipos_documentos_pais')->get_entidad($this->datos['pais_documento']."_90"); + klog2('$entidad_tipo_pasaporte', $entidad_tipo_pasaporte); + $exp_reg= '/' . $entidad_tipo_pasaporte['exp_regular_validacion'] . '/'; + if (!preg_match($exp_reg, $datos['nro_pasap'])) { + // Documento inv�lido seg�n la expresi�n regular + $valido = false; + $this->agregar_error('nro_pasap', $entidad_tipo_pasaporte['exp_regular_mensaje']); + } + if ($datos['nro_pasap']== '0') { + $this->agregar_error('nro_pasap', kernel::traductor()->trans('form_validacion_error.vacio')); + $valido = false; + + } + return $valido; + } + + //-------------------------------------------------------------------------- + //---- Definici�n de formulario -------------------------------------------- + //-------------------------------------------------------------------------- + + protected function generar_definicion() + { + //---- Datos Personales ------------------------------------------------ + $this->set_campo('apellido', array( + form::label => 'apellido', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::largo => 60 + )); + + $this->set_campo('nombres', array( + form::label => 'nombres', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::largo => 60 + )); + /*$this->set_campo('apellido_elegido', array( + form::label => 'apellido_elegido', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 60 + ));*/ + + $this->set_campo('nombres_elegido', array( + form::label => 'nombres_elegido', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::ayuda => kernel::traductor()->trans('nombres_elegido_ayuda'), + form::largo => 60 + )); + + $this->set_campo('pais_documento', array( + form::label => 'pais_documento', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'select'), + form::validar_select => false, + form::valor_default => 'pais_documento', + form::multi_options => util::opciones()->get_paises_nacionalidad(), + )); + + $this->set_campo('tipo_documento', array( + form::label => 'tipo_documento', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'select'), + form::validar_select => false, + form::valor_default => 'tipo_documento', + form::multi_options => util::opciones()->get_tipos_documentos_pais(), + + )); + + $this->set_campo('nro_documento', array( + form::label => 'nro_documento', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::readonly => false, + )); + + $this->set_campo('nacionalidad_desc', array( + form::label => 'nacionalidad_desc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::readonly => true, + )); + + $this->set_campo('nacionalidad', array( + form::label => '', + form::filtro => validador::TIPO_INT, + form::obligatorio => true, + form::elemento => array('tipo' => 'hidden'), + form::readonly => true, + )); + + $this->set_campo('e_mail', array( + form::label => 'e_mail', + form::filtro => validador::TIPO_MAIL, + form::filtro_params => array('allowempty' => true), + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::readonly => true, + form::largo => 100 + )); + + $this->set_campo('numero_cuil', array( + form::label => 'numero_cuil', + form::filtro => validador::TIPO_INT, + form::filtro_params => array('allowempty' => true), + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 15 + )); + + $this->set_campo('sexo', array( + form::label => 'sexo', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_generos(), + )); + + $this->set_campo('identidad_genero', array( + form::label => 'identidad_genero', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_identidad_genero(), + )); + + $this->set_campo('identidad_genero_otro', array( + form::label => 'identidad_genero_otro', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 100 + )); + + $this->set_campo('celular_caracteristica', array( + form::label => 'celular_caracteristica', + form::filtro => validador::TIPO_INT, + form::filtro_params => array('allowempty' => true), + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 4, + form::clase_css => 'input-mini', + )); + + $this->set_campo('celular_valor', array( + form::label => 'celular_valor', + form::filtro => validador::TIPO_INT, + form::filtro_params => array('allowempty' => true), + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 8, + form::clase_css => 'input-small', + )); + + //---- Datos de nacimiento --------------------------------------------- + $this->set_campo('fecha_nacimiento', array( + form::label => 'fecha_nacimiento', + form::filtro => validador::TIPO_DATE, + form::filtro_params => array('format' => 'd/m/Y', + 'allowempty' => true), + form::clase_css => 'date input-small', + form::obligatorio => false, + form::elemento => array('tipo' => 'text') + )); + + $this->set_campo('es_mayor_25_sin_secundario', array( + form::label => '', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::readonly => true, + )); + + $this->set_campo('loc_nacimiento', array( + form::label => 'loc_nacimiento', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::valor_default => '' + )); + + $this->set_campo('loc_nac_descr', array( + form::label => 'loc_nacimiento', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::clase_css => 'input-localidad', + )); + + $this->set_campo('pais_nacimiento', array( + form::label => 'pais_nacimiento', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_paises(false), + form::clase_css => 'select-pais' + )); + + //---- C�dula de identidad --------------------------------------------- + $this->set_campo('ent_emisora_ci', array( + form::label => 'ent_emisora_ci', + form::filtro => validador::TIPO_TEXTO, + form::filtro_params => array('allowempty' => true), + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_entidades_emisoras_ci(), + form::valor_default => '', + )); + + $this->set_campo('nro_ci', array( + form::label => 'nro_ci', + form::filtro => validador::TIPO_ALPHANUM, + form::filtro_params => array('allowempty' => true), + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 15 + )); + + //---- Pasaporte ------------------------------------------------------- + $this->set_campo('pais_emisor_pasap', array( + form::label => 'pais_emisor_pasap', + form::filtro => validador::TIPO_TEXTO, + form::filtro_params => array('allowempty' => true), + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_paises(), + form::valor_default => '', + )); + + $this->set_campo('nro_pasap', array( + form::label => 'nro_pasap', + form::filtro => validador::TIPO_ALPHANUM, + form::filtro_params => array('allowempty' => true), + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 15 + )); + + //---- Visa ------------------------------------------------------------ + $this->set_campo('tipo_visa', array( + form::label => 'tipo_visa', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_tipos_visa(), + form::valor_default => '', + form::largo => 20 + )); + + $this->set_campo('otorgamiento_visa', array( + form::label => 'otorgamiento_visa', + form::filtro => validador::TIPO_DATE, + form::filtro_params => array( + 'format' => 'd/m/Y', + 'allowempty' => true + ), + form::clase_css => 'date input-small', + form::obligatorio => false, + form::elemento => array('tipo' => 'text') + )); + + $this->set_campo('vencimiento_visa', array( + form::label => 'vencimiento_visa', + form::filtro => validador::TIPO_DATE, + form::filtro_params => array( + 'format' => 'd/m/Y', + 'allowempty' => true + ), + form::clase_css => 'date input-small', + form::obligatorio => false, + form::elemento => array('tipo' => 'text') + )); + + //---- Residencia ------------------------------------------------------ + $this->set_campo('residencia', array( + form::label => 'residencia', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_residencia(), + form::valor_default => '', + )); + + $this->set_campo('fecha_respre_otorg', array( + form::label => 'fecha_respre_otorg', + form::filtro => validador::TIPO_DATE, + form::filtro_params => array( + 'format' => 'd/m/Y', + 'allowempty' => true + ), + form::clase_css => 'date-residencia-otorg input-small', + form::obligatorio => false, + form::elemento => array('tipo' => 'text') + )); + + $this->set_campo('fecha_respre_venc', array( + form::label => 'fecha_respre_venc', + form::filtro => validador::TIPO_DATE, + form::filtro_params => array( + 'format' => 'd/m/Y', + 'allowempty' => true + ), + form::clase_css => 'date-residencia-venc input-small', + form::obligatorio => false, + form::elemento => array('tipo' => 'text') + )); + + //---- Pueblos originarios --------------------------------------------- + $this->set_campo('pertenece_pueblo_originario', array( + form::label => 'pertenece_pueblo_originario', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_si_no_no_desea_contestar(), + form::valor_default => '', + )); + + $this->set_campo('pueblo_originario', array( + form::label => 'pueblo_originario', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_pueblos_originarios(), + form::valor_default => '', + )); + + $this->set_campo('pueblo_originario_otro', array( + form::label => 'pueblo_originario_otro', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 100 + )); + + } + + function control_group_localidad($campo_localidad, $campo_descr, $campo_pais) + { + if ($this->def_visible($campo_localidad)) { + $label = $this->label($campo_localidad); + + if (($this->get_obligatorio($campo_localidad)) || ($this->def_obligatorio($campo_localidad))) { + $label = str_replace('class="optional"', 'class="label-obligatorio"', $label); + $label = str_replace('', ' (*)', $label); + } + + $elemento_localidad = $this->elemento($campo_localidad); + $elemento_pais = $this->elemento($campo_pais); + $elemento_descr = $this->elemento($campo_descr); + + $tiene_error = $this->tiene_error($campo_localidad) || $this->tiene_error($campo_descr); + $clase_error = ($tiene_error) ? 'error' : ''; + + $html = "
"; + $html .= $label; + $html .= $elemento_localidad; + $html .= $elemento_pais; + $html .= $elemento_descr; + $html .= $this->ayuda($campo_localidad); + if ($tiene_error) { + $html .= "
"; + $html .= "{$this->error($campo_descr)}"; + } + $html .= "
"; + + return $html; + } + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_principales/pagelet_datos_principales.js b/src/siu/operaciones/censo/datos_principales/pagelet_datos_principales.js new file mode 100644 index 0000000..9ffa8b5 --- /dev/null +++ b/src/siu/operaciones/censo/datos_principales/pagelet_datos_principales.js @@ -0,0 +1,482 @@ +var tipo_documento_dni; +var tipo_documento_dnt; +var tipo_documento_cuil_cuit; +var tipo_documento_cedula_diplomatica; +var tipo_documento_pasaporte; + +var nro_documento_dni_dnt_min; +var nro_documento_dni_dnt_max; + +var msj_nro_documento_dni_leyenda; +var msj_nro_documento_dni_error; +var msj_nro_documento_cuil_leyenda; + +var url_tipo_documentos_validacion; +var validado_con_renaper; + +kernel.renderer.registrar_pagelet('datos_principales', function(info) { + var id = '#' + info.id; + var r = window.matchMedia("(max-width: 700px)"); + + url_tipo_documentos_validacion = info.url_tipo_documentos_validacion; + + // Tipos de documentos + tipo_documento_dni = info.tipo_documento_dni; + tipo_documento_dnt = info.tipo_documento_dnt; + tipo_documento_cuil_cuit = info.tipo_documento_cuil_cuit; + tipo_documento_cedula_diplomatica = info.tipo_documento_cedula_diplomatica; + tipo_documento_pasaporte = info.tipo_documento_pasaporte; + + // M�ximos y m�nimos de n�meros de documento + nro_documento_dni_dnt_min = info.nro_documento_dni_dnt_min; + nro_documento_dni_dnt_max = info.nro_documento_dni_dnt_max; + + // Mensajes + msj_nro_documento_dni_leyenda = info.mensajes.msj_nro_documento_dni_leyenda; + msj_nro_documento_dni_error = info.mensajes.msj_nro_documento_dni_error; + msj_nro_documento_cuil_leyenda = info.mensajes.msj_nro_documento_cuil_leyenda; + + validado_con_renaper = info.validado_con_renaper; + + + return { + + onload: function() { + //----arreglo jquery para mostrar ayuda + $("#form_datos_principales-identidad_genero-label").html($("#form_datos_principales-identidad_genero-label").text()+$("#ayuda_genero").html());$("#ayuda_genero").hide(); + //---- Inicializaci�n de estado de visibilidad de secciones -------- + valida_con_renaper(); + cambio_tipo_visa(); + cambio_residencia(); + cambio__pertenece_pueblo_originario(); + cambio__pueblo_originario(); + cambio__identidad_genero(); + cambio__tipo_documento(); + r.addListener(mediaQuerymatch(r)); + + //---- Manejo de visibilidad de secciones por eventos -------------- + $('#form_datos_principales-tipo_visa').on('change', function() { cambio_tipo_visa(); }); + $('#form_datos_principales-residencia').on('change', function() { cambio_residencia(); }); + $('#form_datos_principales-pertenece_pueblo_originario').on('change', function() { cambio__pertenece_pueblo_originario(); }); + $('#form_datos_principales-pueblo_originario').on('change', function() { cambio__pueblo_originario(); }); + $('#form_datos_principales-identidad_genero').on('change', function() { cambio__identidad_genero(); }); + $('#form_datos_principales-pais_documento').on('change', function() { buscar_tipo_documento_paises($('#form_datos_principales-pais_documento').val()); }); + $('#form_datos_principales-identidad_genero').tooltip('show'); + $('#form_datos_principales-tipo_documento').on('change', function() { cambio__tipo_documento(); }); + + $('#form_datos_principales-nro_documento').on('change', function () + { + validar__nro_documento($('#form_datos_principales-pais_documento').val(), $('#form_datos_principales-tipo_documento').val(), $('#form_datos_principales-nro_documento').val()); + }); + + //---- Date Picker ------------------------------------------------- + $.datepicker.setDefaults( $.datepicker.regional["es"] ); + $(id).find('input.date').datepicker({ + changeMonth: true, + changeYear: true, + firstDay:0, + yearRange: "-150:+0", + }); + + //---- Date Picker Particular para otorgamiento de residencia ------------------------------------------------- + $(id).find('input.date-residencia-otorg').datepicker({ + changeMonth: true, + changeYear: true, + firstDay:0, + yearRange: "-150:+0", + maxDate:0, + }); + + //---- Date Picker Particular para vencimiento de residencia ------------------------------------------------- + $(id).find('input.date-residencia-venc').datepicker({ + changeMonth: true, + changeYear: true, + firstDay:0, + yearRange: "-150:+3", + }); + + + //---- Minusculizaci�n de e-mail ----------------------------------- + if ($('#form_datos_principales-e_mail').val() !== 'undefined') { + $('#form_datos_principales-e_mail').val($('#form_datos_principales-e_mail').val().toString().toLowerCase()); + } + + //---- Combo de pa�ses para el selector de localidades ------------- + handle_combo_pais_localidad('form_datos_principales-pais_nacimiento', 'form_datos_principales-loc_nacimiento'); + $('#form_datos_principales-loc_nacimiento').on('change', function() { + handle_combo_pais_localidad('form_datos_principales-pais_nacimiento', 'form_datos_principales-loc_nacimiento'); + }); + + //---- Lista de localidades (autocompletado) ----------------------- + if ($("#form_datos_principales-loc_nac_descr").val() !== '') { + set_solo_lectura('form_datos_principales-loc_nac_descr', true); + $("#loc_nac_descr_help").hide(); + } else { + $("#loc_nac_descr_help").show(); + } + + $("#form_datos_principales-loc_nac_descr").attr('campo_id', 'form_datos_principales-loc_nacimiento'); + $("#form_datos_principales-loc_nac_descr").attr('ayuda', 'loc_nac_descr_help'); + $("#form_datos_principales-loc_nac_descr").attr('campo_pais', 'form_datos_principales-pais_nacimiento'); + $("#form_datos_principales-loc_nac_descr").autocomplete({ + source: function(request, response) { + $.ajax({ + url: info.url_lista_localidades, + dataType: "json", + data: { + term : request.term, + pais : $('#form_datos_principales-pais_nacimiento').val() + }, + success: function(data) { + response(data); + }, + // A value of 0 means there will be no timeout + timeout: 0 + }); + }, + minLength: 3, + select: localidad_seleccionada, + focus: localidad_foco + + }); + + //---- Selector de localidad --------------------------------------- + $('#btnSelectorLocNacimiento').on('click', function() { + $.facebox(info.selector_localidad); + var _info = new cloneObject(info); + _info['retorno_valor'] = 'form_datos_principales-loc_nacimiento'; + _info['retorno_descr'] = 'form_datos_principales-loc_nac_descr'; + _info['ayuda'] = 'loc_nac_descr_help'; + _info['campo_pais'] = 'form_datos_principales-pais_nacimiento'; + inicializar_popup_localidades(_info); + }); + + $('#btnLimpiarLocNacimiento').on('click', function() { + $('#form_datos_principales-loc_nacimiento').val('null'); + $('#form_datos_principales-loc_nac_descr').val(''); + $("#loc_nac_descr_help").show(); + set_solo_lectura('form_datos_principales-loc_nac_descr', false); + handle_combo_pais_localidad('form_datos_principales-pais_nacimiento', 'form_datos_principales-loc_nacimiento'); + }); + + //------------------------------------------------------------------ + // Si corresponde, se activa el autosave + if (info.autosave) { + $(id).autosave(); + } + + //------------------------------------------------------------------ + // Se muestra mensaje cuando se guarada con exito + if (info.msg_guardado_datos_exitoso) { + kernel.ui.show_mensaje(info.msg_guardado_datos_exitoso, { + tipo: 'alert-success', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + info.msg_guardado_datos_exitoso = false; + } + + + //---- Submit ------------------------------------------------------ + $('#form_datos_principales').submit(function() { + var hubo_cambios = formulario_hubo_cambios(); + if (hubo_cambios) { + var $form = $(this); + kernel.ajax.load($form.attr('action'), id, { + historia: false, + type: 'POST', + data: $form.serializeArray(), + success: function(response) { + if (response.info_estado.exitoso) { + document.location.reload(true); + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-error', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + + // Si corresponde, se desactiva el autosave + if (info.autosave) { + $(id).autosave('disable'); + } + kernel.renderer.pagelet('datos_principales').onload(); + } + }); + } else { + kernel.ui.show_mensaje(info.msj_sin_cambios, { + tipo: 'alert-info', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + return false; + }); + } + } + + /** + * Cambio del campo "Tipo de visa" + */ + function cambio_tipo_visa() + { + if ($('#form_datos_principales-tipo_visa').val() === 'PERMANENTE') { + ocultar('div_vencimiento_visa', true); + } else { + mostrar('div_vencimiento_visa'); + } + } + + /** + * Cambio del campo "Tipo de residencia" + */ + function cambio_residencia() + { + var residencia = $('#form_datos_principales-residencia').val(); + + if ((residencia === '1') || (residencia === no_seleccion)) { + // Sin residencia: No se muestran fechas de otorg. y venc. de residencia + ocultar('div_fecha_respre_otorg', true); + ocultar('div_fecha_respre_venc', true); + } else if (residencia === '4') { + // Residencia definitiva: no se muestra fecha de vencimiento + mostrar('div_tipo_residencia'); + ocultar('div_fecha_respre_venc', true); + } else { + // Residencia temporal o precaria: se muestran fechas de otorg. y venc. + mostrar('div_fecha_respre_otorg'); + mostrar('div_fecha_respre_venc'); + } + } + + /** + * Cambio del campo "�Pertenec�s a alg�n pueblo originario?" + */ + function cambio__pertenece_pueblo_originario() + { + if ($('#form_datos_principales-pertenece_pueblo_originario').val() !== 'S') { + ocultar('div_pueblo_originario', true); + } else { + mostrar('div_pueblo_originario'); + cambio__pueblo_originario(); + } + } + + /** + * Cambio del campo "�A cu�l?" + */ + function cambio__pueblo_originario() + { + if ($('#form_datos_principales-pueblo_originario').val() !== info.pueblo_originario_OTRO) { + ocultar('div_otro_pueblo_originario', true); + } else { + mostrar('div_otro_pueblo_originario'); + } + } + + /** + * Cambio del campo "Tipo de Documento" + */ + function cambio__tipo_documento() + { + var valor = $('#form_datos_principales-tipo_documento').val(); + + switch (valor) { + // Si el tipo de documento es DNI + case tipo_documento_dni: + $("#js_nro_documento").html(msj_nro_documento_dni_leyenda).slideDown("slow"); + break; + // Si el tipo de documento es CUIL/CUIT + case tipo_documento_cuil_cuit: + $("#js_nro_documento").html(msj_nro_documento_cuil_leyenda).slideDown("slow"); + break; + default: + $("#js_nro_documento").slideUp("slow"); + } + } + + /** + * Validaci�n del campo "N�mero de documento" + */ + function validar__nro_documento(_pais_documento, _tipo_documento, nro_documento) + { + + $.ajax({ + url: url_tipo_documentos_validacion, + dataType: 'json', + async: false, + data: {tipo_documento: _tipo_documento, pais: _pais_documento, nro_documento: nro_documento}, + type: 'post', + success: function (data) + { + errores_formulario = false; + var exp_reg = new RegExp(data.exp_regular_validacion); + var control_group = $('#form_datos_principales-nro_documento').parents('.control-group'); + $(control_group).removeClass('error'); + var span = $(control_group).find('span.help-inline'); + $(span).remove(); + if (!exp_reg.test(nro_documento)) { + $(control_group).addClass('error'); + $(control_group).append('' + data.exp_regular_mensaje + '') + errores_formulario = true; + } else { + + // Validaciones extras + switch (_tipo_documento) { + // Si el tipo de documento es DNI + case tipo_documento_dni: + // Valida que el DNI sea mayor a 1 mill�n y menor a 100 millones. + if ((parseInt(nro_documento) < parseInt(nro_documento_dni_dnt_min)) || (parseInt(nro_documento) > parseInt(nro_documento_dni_dnt_max))) { + $(control_group).addClass('error'); + $(control_group).append('' + msj_nro_documento_dni_error + ''); + errores_formulario = true; + } + + break; + // Si el tipo de documento es CUIL/CUIT + case tipo_documento_cuil_cuit: + // Valida el CUIL/CUIT. + if (data.mensaje_validacion_cuil) { + $(control_group).addClass('error'); + $(control_group).append('' + data.mensaje_validacion_cuil + ''); + errores_formulario = true; + } + + break; + } + } + } + }); + + } + + //-------------------------------------------------------------------------- + //---- Funci�n autocompletar (localidades) --------------------------------- + //-------------------------------------------------------------------------- + + function localidad_seleccionada(event, ui) + { + var campo_id = event.target.attributes.campo_id.nodeValue; + var campo_descr = event.target.attributes.id.nodeValue; + var ayuda = event.target.attributes.ayuda.nodeValue; + var campo_pais = event.target.attributes.campo_pais.nodeValue; + + var localidad = ui.item.value.localidad; + var localidad_descr = ui.item.value.localidad_descr; + + $("#"+campo_id).val(localidad); + $("#"+campo_descr).val(localidad_descr); + $("#"+ayuda).hide(); + $("#"+campo_pais).hide(); + event.preventDefault(); + + set_solo_lectura(campo_descr, true); + } + + function localidad_foco(event) + { + event.preventDefault(); + } + + function mediaQuerymatch(r) + { + //media query matches + if (r.matches) { + $('#form_datos_principales-loc_nac_descr').removeClass('input-localidad'); + + } else { + $('#form_datos_principales-loc_nac_descr').addClass('input-localidad'); + } + } + + function cambio__identidad_genero(){ + if ( $("#form_datos_principales-identidad_genero").val() != info.identidad_genero_especifique){ + ocultar('form_datos_principales-identidad_genero_otro', true); + ocultar('form_datos_principales-identidad_genero_otro-label', true); + } else { + mostrar('form_datos_principales-identidad_genero_otro'); + mostrar('form_datos_principales-identidad_genero_otro-label'); + $( "#form_datos_principales-identidad_genero_otro" ).focus(); + + } + } + + function buscar_paises(_nacionalidad) + { + $.ajax({ + url: info.url_cascada_nac, + dataType: 'json', + async: false, + data: {nacionalidad: _nacionalidad}, + type: 'post', + success: function (data) + { + $('#form_datos_principales-pais_documento').children().remove(); + $.each(data, function (key, value) + { + $('#form_datos_principales-pais_documento').append( + $('').val(key).html(value) + ); + }); + ordenar_combo('form_datos_principales-pais_documento'); + } + }); + } + + function buscar_tipo_documento_paises(_pais_documento) + { + var tipo_documento = $('#form_datos_principales-tipo_documento').val(); + $.ajax({ + url: info.url_tipo_documentos, + dataType: 'json', + async: false, + data: {pais: _pais_documento}, + type: 'post', + success: function (data) + { + $('#form_datos_principales-tipo_documento').children().remove(); + $.each(data, function (key, value) + { + $('#form_datos_principales-tipo_documento').append( + $('').val(key).html(value) + ); + }); + ordenar_combo('form_datos_principales-tipo_documento'); + $("#form_datos_principales-tipo_documento").val(tipo_documento); + } + }); + + } + + function valida_con_renaper() + { + if(validado_con_renaper === 'S'){ + //Nombre y Apellido, Fecha de Nacimiento, Tipo y N�mero de Documento, N�mero de Tr�mite y CUIL deben aparecer precargados y grisados + set_solo_lectura('form_datos_principales-apellido',true); + set_solo_lectura('form_datos_principales-nombres',true); + set_solo_lectura('form_datos_principales-tipo_documento',true); + set_solo_lectura('form_datos_principales-nro_documento',true); + set_solo_lectura('form_datos_principales-pais_documento',true); + set_solo_lectura('form_datos_principales-numero_cuil',true); + set_solo_lectura('form_datos_principales-fecha_nacimiento',true); + + } + } + + function set_solo_lectura(elemId, solo_lectura) + { + //Coloca en readonly si el campo no esta vacio + elemId = '#' + elemId; + if (solo_lectura) { + if($(elemId).val()!== ''){ + $(elemId).attr('readonly', true); + } + } else { + $(elemId).attr('readonly', false); + } + } +}); \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_salud/default.css b/src/siu/operaciones/censo/datos_salud/default.css new file mode 100644 index 0000000..e69de29 diff --git a/src/siu/operaciones/censo/datos_salud/default.twig b/src/siu/operaciones/censo/datos_salud/default.twig new file mode 100644 index 0000000..054645e --- /dev/null +++ b/src/siu/operaciones/censo/datos_salud/default.twig @@ -0,0 +1,46 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% autoescape false %} + + {% set form = this.get_form() %} + {{ form.encabezado }} +
+
+
+

{{this.get_nombre()|trans}}

+
+ {%if form.hay_visibles_agrupado('salud') %} +
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+ {% endif %} +
+
+
+ + {% if form.hay_visibles_agrupado('salud') %} +
+

{{'salud'|trans}}

+
+
+ {{ form.control_group('obra_social_alu') }} +
+
+ {{ form.checkbox('es_celiaco') }} +
+
+
+ +
+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+ {% endif %} + + + +{% endautoescape %} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/datos_salud/form_datos_salud.php b/src/siu/operaciones/censo/datos_salud/form_datos_salud.php new file mode 100644 index 0000000..045e076 --- /dev/null +++ b/src/siu/operaciones/censo/datos_salud/form_datos_salud.php @@ -0,0 +1,48 @@ +crear('censo', 'guardar', ['datos_salud']); + } + + protected function generar_definicion() + { + $this->set_campo('obra_social_alu', array( + form::label => 'obra_social_alu', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_obra_social(), + form::valor_default => '', + form::clase_css => 'span12' + )); + + $this->set_campo('es_celiaco', array( + form::label => 'es_celiaco', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + )); + } + +} diff --git a/src/siu/operaciones/censo/datos_salud/pagelet_datos_salud.js b/src/siu/operaciones/censo/datos_salud/pagelet_datos_salud.js new file mode 100644 index 0000000..41d21d3 --- /dev/null +++ b/src/siu/operaciones/censo/datos_salud/pagelet_datos_salud.js @@ -0,0 +1,55 @@ +kernel.renderer.registrar_pagelet('datos_salud', function (info) { + var id = '#' + info.id; + + return { + + onload: function () { + + if (info.autosave) { + $(id).autosave(); + } + + $('#form_datos_salud').submit(function () { + var hubo_cambios = formulario_hubo_cambios(); + if (hubo_cambios) { + var $form = $(this); + kernel.ajax.load($form.attr('action'), id, { + historia: false, + type: 'POST', + data: $form.serializeArray(), + success: function (response) { + if (response.info_estado.exitoso) { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-success', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-error', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }) + } + // Si corresponde, se desactiva el autosave + if (info.autosave) { + $(id).autosave('disable'); + } + kernel.renderer.pagelet('datos_salud').onload(); + } + }); + } else { + kernel.ui.show_mensaje(info.msj_sin_cambios, { + tipo: 'alert-info', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + return false; + }); + } + } +}); \ No newline at end of file diff --git a/src/siu/operaciones/censo/deportes/default.twig b/src/siu/operaciones/censo/deportes/default.twig new file mode 100644 index 0000000..0287a67 --- /dev/null +++ b/src/siu/operaciones/censo/deportes/default.twig @@ -0,0 +1,68 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% set form = this.get_form() %} + {% autoescape false %} + {{ form.encabezado }} +
+
+
+

{{this.get_nombre()|trans}}

+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+
+ + {%if form.hay_visibles_agrupado('deportes') %} +
+

{{'deportes'|trans}}

+
+
+ {{ form.checkbox('practica_deportes') }} +
+
+
+ {% endif %} + +
+ {%if form.hay_visibles_agrupado('listado_deportes_lugares') %} +
+

{{'listado_deportes_lugares'|trans}}

+
+ {{ form.checkbox('hace_dep_gim_priv') }} + {{ form.checkbox('hace_dep_univ') }} + {{ form.checkbox('hace_dep_partic') }} + {{ form.checkbox('hace_dep_otros') }} +
+
+ {% endif %} + + {%if form.hay_visibles_agrupado('listado_deportes') %} +
+

{{'listado_deportes'|trans}}

+
+ {{ form.checkbox('prac_dep_futbol') }} + {{ form.checkbox('prac_dep_basquet') }} + {{ form.checkbox('prac_dep_voley') }} + {{ form.checkbox('prac_dep_gimnasia') }} + {{ form.checkbox('prac_dep_tenis') }} + {{ form.checkbox('prac_dep_natacion') }} + {{ form.checkbox('prac_dep_handball') }} + {{ form.checkbox('prac_dep_otros') }} +
+
+ {% endif %} +
+ +
+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+ + {% endautoescape %} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/deportes/form_deportes.php b/src/siu/operaciones/censo/deportes/form_deportes.php new file mode 100644 index 0000000..3d304b7 --- /dev/null +++ b/src/siu/operaciones/censo/deportes/form_deportes.php @@ -0,0 +1,158 @@ +crear('censo', 'guardar', array('deportes')); + } + + protected function generar_definicion() + { + $this->set_campo('practica_deportes', array( + form::label => 'practica_deportes', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + //---- Lugares de práctica de deportes --------------------------------- + $this->set_campo('hace_dep_gim_priv', array( + form::label => 'hace_dep_gim_priv', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('hace_dep_univ', array( + form::label => 'hace_dep_univ', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('hace_dep_partic', array( + form::label => 'hace_dep_partic', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('hace_dep_otros', array( + form::label => 'hace_dep_otros', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + //---- Deportes -------------------------------------------------------- + $this->set_campo('prac_dep_futbol', array( + form::label => 'prac_dep_futbol', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('prac_dep_basquet', array( + form::label => 'prac_dep_basquet', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('prac_dep_voley', array( + form::label => 'prac_dep_voley', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('prac_dep_gimnasia', array( + form::label => 'prac_dep_gimnasia', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('prac_dep_tenis', array( + form::label => 'prac_dep_tenis', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('prac_dep_natacion', array( + form::label => 'prac_dep_natacion', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('prac_dep_handball', array( + form::label => 'prac_dep_handball', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('prac_dep_otros', array( + form::label => 'prac_dep_otros', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + } + +} +?> diff --git a/src/siu/operaciones/censo/deportes/pagelet_deportes.js b/src/siu/operaciones/censo/deportes/pagelet_deportes.js new file mode 100644 index 0000000..7abcbb9 --- /dev/null +++ b/src/siu/operaciones/censo/deportes/pagelet_deportes.js @@ -0,0 +1,77 @@ +/** + * Cambio del campo "¿Practicás deportes?" + */ +function cambio_practica_deportes() +{ + if ($('#form_deportes-practica_deportes').is(':checked')) { + mostrar('div_detalles_deportes'); + } else { + ocultar('div_detalles_deportes', true); + } +} + +kernel.renderer.registrar_pagelet('deportes', function(info) { + var id = '#' + info.id; + + return { + + onload: function() { + //---- Inicialización de estado de visibilidad de secciones -------- + cambio_practica_deportes(); + + //---- Manejo de visibilidad de secciones por eventos -------------- + $('#form_deportes-practica_deportes').on('change', function() { cambio_practica_deportes(); }); + + if (info.autosave) { + $(id).autosave(); + } + + $('#form_deportes').submit(function() { + var hubo_cambios = formulario_hubo_cambios(); + if (hubo_cambios) { + var $form = $(this); + kernel.ajax.load($form.attr('action'), id, { + historia: false, + type: 'POST', + data: $form.serializeArray(), + success: function(response) { + if (response.info_estado.exitoso) { + if (response.info_estado.cambios_desde_impresion) { + document.location.reload(true); + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-success', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-error', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + + // Si corresponde, se desactiva el autosave + if (info.autosave) { + $(id).autosave('disable'); + } + kernel.renderer.pagelet('deportes').onload(); + } + }); + } else { + kernel.ui.show_mensaje(info.msj_sin_cambios, { + tipo: 'alert-info', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + return false; + }); + } + } +}) \ No newline at end of file diff --git a/src/siu/operaciones/censo/discapacidad/default.css b/src/siu/operaciones/censo/discapacidad/default.css new file mode 100644 index 0000000..b0f8bc5 --- /dev/null +++ b/src/siu/operaciones/censo/discapacidad/default.css @@ -0,0 +1,24 @@ +#discapacidad #div_tiene_cud { + display: none; + margin: 10px 10px 10px 30px; +} + +#discapacidad .subrayado_gris { + border-bottom: 1px solid #CCCCCC; +} + +#discapacidad textarea { + width: 98%; +} + +#discapacidad input[type=radio] { + margin-right: 5px; +} + +#discapacidad #div_condicion_discapacidad label.checkbox { + padding-left: 0px; +} + +#div_listado_discapacidad_tipos, #div_auditiva, #div_visual, #div_motora, #div_psicosocial, #div_otras, #div_importante { + display: none; +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/discapacidad/default.twig b/src/siu/operaciones/censo/discapacidad/default.twig new file mode 100644 index 0000000..80dcd02 --- /dev/null +++ b/src/siu/operaciones/censo/discapacidad/default.twig @@ -0,0 +1,173 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + + {% set form = this.get_form() %} + {% autoescape false %} + {{ form.encabezado }} +
+
+
+

{{this.get_nombre()|trans}}

+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales') }} +
+
+
+ + {%if form.hay_visibles_agrupado('cond_discapacidad') %} +
+

{{'cond_discapacidad'|trans}}

+
+ +
+ {{ form.checkbox('condicion_discapacidad') }} +
+ +
+ {{ form.checkbox('tiene_cud') }} +
+ +
+
+ {% endif %} + +
+ + {% if form.hay_visibles_agrupado('listado_discapacidad_tipos') %} +
+

{{'listado_discapacidad_tipos'|trans}}

+

{{'seleccione_una_opcion'|trans}}

+
+ {{ form.checkbox('disc_auditiva') }} + {{ form.checkbox('disc_visual') }} + {{ form.checkbox('disc_motora') }} + {{ form.checkbox('disc_cond_psicosocial') }} + {{ form.checkbox('disc_otra') }} +
+
+ {% endif %} + +
+ +
+ + {% if form.hay_visibles_agrupado('auditiva') %} +
+

{{'auditiva'|trans}}

+
+ {{ form.control_group('aud_tipo') }} + +

{{'forma_habitual_comunicacion'|trans}}

+ {{ form.checkbox('aud_lenguaje_senias') }} + {{ form.checkbox('aud_lenguaje_labial') }} + {{ form.control_group('aud_comunicacion_otra') }} + +

{{'apoyos_requeridos'|trans}}

+ {{ form.control_group('aud_apoyo_vida_diaria') }} + {{ form.checkbox('aud_req_interprete_lengua_senias') }} + {{ form.checkbox('aud_req_aro_magnetico') }} + {{ form.checkbox('aud_req_otros_apoyos') }} + {{ form.control_group('aud_otros_apoyos') }} +
+
+ {% endif %} + +
+ +
+ + {% if form.hay_visibles_agrupado('visual') %} +
+

{{'visual'|trans}}

+
+ {{ form.control_group('vis_dificultad_para_ver') }} + +

{{'apoyos_requeridos'|trans}}

+ {{ form.control_group('vis_apoyo_vida_diaria') }} + {{ form.checkbox('vis_req_archivo_audio') }} + {{ form.checkbox('vis_req_texto_digital') }} + {{ form.checkbox('vis_req_texto_braile') }} + {{ form.checkbox('vis_req_otros_apoyos') }} + {{ form.control_group('vis_otros_apoyos') }} +
+
+ {% endif %} + +
+ +
+ + {% if form.hay_visibles_agrupado('motora') %} +
+

{{'motora'|trans}}

+
+

{{'apoyos_requeridos'|trans}}

+ {{ form.control_group('mot_apoyo_vida_diaria') }} + {{ form.checkbox('mot_req_apoyo_aula') }} + {{ form.control_group('mot_apoyo_aula') }} + {{ form.checkbox('mot_req_otros_apoyos') }} + {{ form.control_group('mot_otros_apoyos') }} +
+
+ {% endif %} + +
+ +
+ + {% if form.hay_visibles_agrupado('psicosocial') %} +
+

{{'psicosocial'|trans}}

+
+ {{ form.control_group('psi_descripcion') }} + +

{{'apoyos_requeridos'|trans}}

+ {{ form.control_group('psi_apoyo_vida_diaria') }} + {{ form.checkbox('psi_req_otros_apoyos') }} + {{ form.control_group('psi_otros_apoyos') }} +
+
+ {% endif %} + +
+ +
+ + {% if form.hay_visibles_agrupado('otras') %} +
+

{{'otras'|trans}}

+
+ {{ form.control_group('otra_descripcion') }} + {{ form.checkbox('otra_req_apoyo_vida_diaria') }} + {{ form.control_group('otra_apoyo_vida_diaria') }} +
+
+ {% endif %} + +
+ +
+ + {% if form.hay_visibles_agrupado('importante') %} +
+

{{'importante'|trans}}

+
+ {{ form.control_group('informacion_importante') }} +
+
+ {% endif %} + +
+ +
+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales') }} +
+
+
+ + {% endautoescape %} + +{% endblock %} diff --git a/src/siu/operaciones/censo/discapacidad/form_discapacidad.php b/src/siu/operaciones/censo/discapacidad/form_discapacidad.php new file mode 100644 index 0000000..da02615 --- /dev/null +++ b/src/siu/operaciones/censo/discapacidad/form_discapacidad.php @@ -0,0 +1,524 @@ +crear('censo', 'guardar', ['discapacidad']); + } + + protected function generar_definicion() + { + + $this->set_campo('condicion_discapacidad', [ + form::label => '', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => ['tipo' => 'radio'], + form::multi_options => util::opciones()->get_condicion_discapacidad(), + form::clase_css => 'js_condicion_discapacidad', + form::checked_value => comunes::no, + ]); + + $this->set_campo('tiene_cud', [ + form::label => 'tiene_cud', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + ]); + + //---- Tipos de discapacidades --------------------------------- + $this->set_campo('disc_auditiva', [ + form::label => 'disc_auditiva', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + ]); + + $this->set_campo('disc_visual', [ + form::label => 'disc_visual', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + ]); + + $this->set_campo('disc_motora', [ + form::label => 'disc_motora', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + ]); + + $this->set_campo('disc_cond_psicosocial', [ + form::label => 'disc_cond_psicosocial', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + ]); + + $this->set_campo('disc_otra', [ + form::label => 'disc_otra', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + ]); + + //---- Auditiva --------------------------------- + $this->set_campo('aud_tipo', [ + form::label => 'aud_tipo', + form::filtro => validador::TIPO_INT, + form::obligatorio => false, + form::elemento => ['tipo' => 'select'], + form::multi_options => util::opciones()->get_dificultades_discapacidad(), + form::clase_css => '', + form::valor_default => comunes::NO_HAY_DIFICULTAD_VAL + ]); + + $this->set_campo('aud_lenguaje_senias', [ + form::label => 'aud_lenguaje_senias', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + form::clase_css => 'js_auditiva_forma_habitual_comunicacion', + ]); + + $this->set_campo('aud_lenguaje_labial', [ + form::label => 'aud_lenguaje_labial', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + form::clase_css => 'js_auditiva_forma_habitual_comunicacion', + ]); + + $this->set_campo('aud_comunicacion_otra', [ + form::label => 'aud_comunicacion_otra', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'textarea'], + form::rows => static::FILAS_TEXTAREA, + form::largo => static::LARGO_TEXTAREA, + form::clase_css => 'js_auditiva_forma_habitual_comunicacion', + ]); + + $this->set_campo('aud_apoyo_vida_diaria', [ + form::label => 'aud_apoyo_vida_diaria', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'textarea'], + form::rows => static::FILAS_TEXTAREA, + form::largo => static::LARGO_TEXTAREA, + form::clase_css => 'js_auditiva_apoyos_requeridos', + ]); + + $this->set_campo('aud_req_interprete_lengua_senias', [ + form::label => 'aud_req_interprete_lengua_senias', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + form::clase_css => 'js_auditiva_apoyos_requeridos', + ]); + + $this->set_campo('aud_req_aro_magnetico', [ + form::label => 'aud_req_aro_magnetico', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + form::clase_css => 'js_auditiva_apoyos_requeridos', + ]); + + $this->set_campo('aud_req_otros_apoyos', [ + form::label => 'aud_req_otros_apoyos', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + form::clase_css => 'js_auditiva_apoyos_requeridos', + ]); + + $this->set_campo('aud_otros_apoyos', [ + form::label => 'aud_otros_apoyos', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => ['tipo' => 'textarea'], + form::rows => static::FILAS_TEXTAREA, + form::largo => static::LARGO_TEXTAREA, + form::clase_css => 'js_auditiva_apoyos_requeridos', + ]); + + //---- Visual --------------------------------- + $this->set_campo('vis_dificultad_para_ver', [ + form::label => 'vis_dificultad_para_ver', + form::filtro => validador::TIPO_INT, + form::obligatorio => false, + form::elemento => ['tipo' => 'select'], + form::multi_options => util::opciones()->get_dificultades_discapacidad(), + form::clase_css => '', + form::valor_default => comunes::NO_HAY_DIFICULTAD_VAL + ]); + + $this->set_campo('vis_apoyo_vida_diaria', [ + form::label => 'vis_apoyo_vida_diaria', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'textarea'], + form::rows => static::FILAS_TEXTAREA, + form::largo => static::LARGO_TEXTAREA, + form::clase_css => 'js_visual_apoyos_requeridos', + ]); + + $this->set_campo('vis_req_archivo_audio', [ + form::label => 'vis_req_archivo_audio', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + form::clase_css => 'js_visual_apoyos_requeridos', + ]); + + $this->set_campo('vis_req_texto_digital', [ + form::label => 'vis_req_texto_digital', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + form::clase_css => 'js_visual_apoyos_requeridos', + ]); + + $this->set_campo('vis_req_texto_braile', [ + form::label => 'vis_req_texto_braile', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + form::clase_css => 'js_visual_apoyos_requeridos', + ]); + + $this->set_campo('vis_req_otros_apoyos', [ + form::label => 'vis_req_otros_apoyos', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + form::clase_css => 'js_visual_apoyos_requeridos', + ]); + + $this->set_campo('vis_otros_apoyos', [ + form::label => 'vis_otros_apoyos', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => ['tipo' => 'textarea'], + form::rows => static::FILAS_TEXTAREA, + form::largo => static::LARGO_TEXTAREA, + form::clase_css => 'js_visual_apoyos_requeridos', + ]); + + //---- Motora --------------------------------- + $this->set_campo('mot_apoyo_vida_diaria', [ + form::label => 'mot_apoyo_vida_diaria', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'textarea'], + form::rows => static::FILAS_TEXTAREA, + form::largo => static::LARGO_TEXTAREA, + form::clase_css => 'js_motora_apoyos_requeridos', + ]); + + $this->set_campo('mot_req_apoyo_aula', [ + form::label => 'mot_req_apoyo_aula', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + form::clase_css => 'js_motora_apoyos_requeridos', + ]); + + $this->set_campo('mot_apoyo_aula', [ + form::label => 'mot_apoyo_aula', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'textarea'], + form::rows => static::FILAS_TEXTAREA, + form::largo => static::LARGO_TEXTAREA, + form::clase_css => 'js_motora_apoyos_requeridos', + ]); + + $this->set_campo('mot_req_otros_apoyos', [ + form::label => 'mot_req_otros_apoyos', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + form::clase_css => 'js_motora_apoyos_requeridos', + ]); + + $this->set_campo('mot_otros_apoyos', [ + form::label => 'mot_otros_apoyos', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => ['tipo' => 'textarea'], + form::rows => static::FILAS_TEXTAREA, + form::largo => static::LARGO_TEXTAREA, + form::clase_css => 'js_motora_apoyos_requeridos', + ]); + + //---- Condición Psicosocial --------------------------------- + $this->set_campo('psi_descripcion', [ + form::label => 'psi_descripcion', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'textarea'], + form::rows => static::FILAS_TEXTAREA, + form::largo => static::LARGO_TEXTAREA + ]); + + $this->set_campo('psi_apoyo_vida_diaria', [ + form::label => 'psi_apoyo_vida_diaria', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'textarea'], + form::rows => static::FILAS_TEXTAREA, + form::largo => static::LARGO_TEXTAREA, + form::clase_css => 'js_psicosocial_apoyos_requeridos', + ]); + + $this->set_campo('psi_req_otros_apoyos', [ + form::label => 'psi_req_otros_apoyos', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + form::clase_css => 'js_psicosocial_apoyos_requeridos', + ]); + + $this->set_campo('psi_otros_apoyos', [ + form::label => 'psi_otros_apoyos', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => ['tipo' => 'textarea'], + form::rows => static::FILAS_TEXTAREA, + form::largo => static::LARGO_TEXTAREA, + form::clase_css => 'js_psicosocial_apoyos_requeridos', + ]); + + //---- Otra situación de discapacidad --------------------------------- + $this->set_campo('otra_descripcion', [ + form::label => 'otra_descripcion', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'textarea'], + form::rows => static::FILAS_TEXTAREA, + form::largo => static::LARGO_TEXTAREA + ]); + + $this->set_campo('otra_req_apoyo_vida_diaria', [ + form::label => 'otra_req_apoyo_vida_diaria', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'checkbox'], + form::largo => 1, + form::checked_value => comunes::si, + form::unchecked_value => comunes::no, + ]); + + $this->set_campo('otra_apoyo_vida_diaria', [ + form::label => 'otra_apoyo_vida_diaria', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => ['tipo' => 'textarea'], + form::rows => static::FILAS_TEXTAREA, + form::largo => static::LARGO_TEXTAREA + ]); + + //---- Alguna otra información que consideres importante comunicar --------------------------------- + $this->set_campo('informacion_importante', [ + form::label => '', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => ['tipo' => 'textarea'], + form::rows => static::FILAS_TEXTAREA, + form::largo => static::LARGO_TEXTAREA + ]); + } + + function validar() + { + $form_valido = true; + + $condicion_discapacidad = $this->get_dato('condicion_discapacidad'); + // Si no presenta ninguna condición que implique discapacidad entonces NO valido + if ($condicion_discapacidad == comunes::no) { + return true; + } + + $dificultades = util::opciones()->get_dificultades_discapacidad(); + $dificultades = array_keys($dificultades); + + $campos = $this->get_campos(); + + // Recorro cada campo de Discapacidad + foreach ($campos as $campo) { + + $tipo = $this->get_elemento_html_tipo($campo); + $valor = $this->get_dato($campo); + + // Si el campo es del tipo 'radio' o 'checkbox' + if (in_array($tipo, ['radio', 'checkbox'])) { + + // Si el campo viene vacío no lo valido ya que puede estar deshabilitado/oculto + if (empty($valor)) { + $this->set_dato($campo, comunes::no); + continue; + } + + // Si el valor es distinto a 'S' o 'N' + if (!in_array($valor, [comunes::si, comunes::no])) { + $form_valido = false; + break; + } + + // Si el campo es del tipo 'textarea' + } else if ($tipo == 'textarea') { + + // Si el campo viene vacío no lo valido ya que puede estar deshabilitado/oculto + if (empty($valor)) { + $this->set_dato($campo, ''); + continue; + } + + if (strlen($valor) > static::LARGO_TEXTAREA) { + $form_valido = false; + break; + } + + // Si el campo es del tipo 'select' + } else if ($tipo == 'select') { + + // Si el campo viene vacío no lo valido ya que puede estar deshabilitado/oculto + if (empty($valor)) { + $this->set_dato($campo, comunes::NO_HAY_DIFICULTAD_VAL); + continue; + } + + // Si el valor es distinto a las posibles dificultades + if (!in_array($valor, $dificultades)) { + $form_valido = false; + break; + } + + } + + } + $datos = $this->get_datos(); + // Si 'Declaro condición de discapacidad' es 'Sí' + if ($datos['condicion_discapacidad'] == comunes::si) { + + // Valido que al menos seleccione una "Discapacidad" + if ($datos['disc_auditiva'] == comunes::no && + $datos['disc_visual'] == comunes::no && + $datos['disc_motora'] == comunes::no && + $datos['disc_cond_psicosocial'] == comunes::no && + $datos['disc_otra'] == comunes::no) + { + $form_valido = false; + } + } + + $msg_vacio = kernel::traductor()->trans('form_validacion_error.vacio'); + + // Si 'Auditiva - ¿Requerís otros apoyos?' es 'Sí' y 'Especificar cuáles' es vacío + if (($datos['aud_req_otros_apoyos'] == comunes::si) && empty(trim($datos['aud_otros_apoyos']))) { + $this->agregar_error('aud_otros_apoyos', $msg_vacio); + $form_valido = false; + } + + // Si 'Visual - ¿Requerís otros apoyos?' es 'Sí' y 'Especificar cuáles' es vacío + if (($datos['vis_req_otros_apoyos'] == comunes::si) && empty(trim($datos['vis_otros_apoyos']))) { + $this->agregar_error('vis_otros_apoyos', $msg_vacio); + $form_valido = false; + } + + // Si 'Motora - ¿Requerís otros apoyos?' es 'Sí' y 'Especificar cuáles' es vacío + if (($datos['mot_req_otros_apoyos'] == comunes::si) && empty(trim($datos['mot_otros_apoyos']))) { + $this->agregar_error('mot_otros_apoyos', $msg_vacio); + $form_valido = false; + } + + // Si 'Condición Psicosocial - ¿Requerís otros apoyos?' es 'Sí' y 'Especificar cuáles' es vacío + if (($datos['psi_req_otros_apoyos'] == comunes::si) && empty(trim($datos['psi_otros_apoyos']))) { + $this->agregar_error('psi_otros_apoyos', $msg_vacio); + $form_valido = false; + } + + // Si 'Otra situación de discapacidad - ¿Requerís otros apoyos?' es 'Sí' y 'Especificar cuáles' es vacío + if (($datos['otra_req_apoyo_vida_diaria'] == comunes::si) && empty(trim($datos['otra_apoyo_vida_diaria']))) { + $this->agregar_error('otra_apoyo_vida_diaria', $msg_vacio); + $form_valido = false; + } + + return $form_valido; + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/discapacidad/pagelet_discapacidad.js b/src/siu/operaciones/censo/discapacidad/pagelet_discapacidad.js new file mode 100644 index 0000000..43646d3 --- /dev/null +++ b/src/siu/operaciones/censo/discapacidad/pagelet_discapacidad.js @@ -0,0 +1,374 @@ +kernel.renderer.registrar_pagelet('discapacidad', function (info) { + var id = '#' + info.id; + + return { + + onload: function () { + + //---- Manejo de visibilidad de secciones por eventos -------------- + + evt_condicion_discapacidad(); + toggle_titulos_subrayado_gris(); + + $('.js_condicion_discapacidad').on('click', evt_condicion_discapacidad); + + $('#form_discapacidad-disc_auditiva').on('click', evt_discapacidades_auditivas); + + $('#form_discapacidad-aud_req_otros_apoyos').on('click', evt_aud_otros_apoyos); + + $('#form_discapacidad-disc_visual').on('click', evt_discapacidades_visuales); + + $('#form_discapacidad-vis_req_otros_apoyos').on('click', evt_vis_otros_apoyos); + + $('#form_discapacidad-disc_motora').on('click', evt_discapacidades_motoras); + + $('#form_discapacidad-mot_req_apoyo_aula').on('click', evt_mot_apoyo_aula); + + $('#form_discapacidad-mot_req_otros_apoyos').on('click', evt_mot_otros_apoyos); + + $('#form_discapacidad-disc_cond_psicosocial').on('click', evt_discapacidades_psicosocial); + + $('#form_discapacidad-psi_req_otros_apoyos').on('click', evt_psi_otros_apoyos); + + $('#form_discapacidad-disc_otra').on('click', evt_discapacidades_otras); + + $('#form_discapacidad-otra_req_apoyo_vida_diaria').on('click', evt_otra_apoyo_vida_diaria); + + function toggle_titulos_subrayado_gris() + { + $( "#js_auditiva_forma_habitual_comunicacion" ).toggle( $(".js_auditiva_forma_habitual_comunicacion").size() > 0 ); + $( "#js_auditiva_apoyos_requeridos" ).toggle( $(".js_auditiva_apoyos_requeridos").size() > 0 ); + $( "#js_visual_apoyos_requeridos" ).toggle( $(".js_visual_apoyos_requeridos").size() > 0 ); + $( "#js_motora_apoyos_requeridos" ).toggle( $(".js_motora_apoyos_requeridos").size() > 0 ); + $( "#js_psicosocial_apoyos_requeridos" ).toggle( $(".js_psicosocial_apoyos_requeridos").size() > 0 ); + } + + function evt_condicion_discapacidad() + { + + if ($('input.js_condicion_discapacidad:checked').val() == info.si) { + $("#div_tiene_cud").show(); + + mostrar_tipos_discapacidades(); + + } else { + $("#div_tiene_cud").hide(); + + ocultar_tipos_discapacidades(); + } + + } + + function mostrar_tipos_discapacidades() + { + $("#div_listado_discapacidad_tipos").show(); + $("#div_importante").show(); + evt_discapacidades_auditivas(); + evt_discapacidades_visuales(); + evt_discapacidades_motoras(); + evt_discapacidades_psicosocial(); + evt_discapacidades_otras(); + } + + function ocultar_tipos_discapacidades() + { + $("#div_listado_discapacidad_tipos").hide(); + $("#div_importante").hide(); + ocultar_discapacidades_auditivas(); + ocultar_discapacidades_visuales(); + ocultar_discapacidades_motoras(); + ocultar_discapacidades_psicosocial(); + ocultar_discapacidades_otras(); + } + + function evt_discapacidades_auditivas() + { + if ($('#form_discapacidad-disc_auditiva').is(':checked')) { + mostrar_discapacidades_auditivas(); + } else { + ocultar_discapacidades_auditivas(); + } + } + + function mostrar_discapacidades_auditivas() + { + $("#div_auditiva").show(); + evt_aud_otros_apoyos(); + } + + function ocultar_discapacidades_auditivas() + { + $("#div_auditiva").hide(); + } + + function evt_aud_otros_apoyos() + { + if ($('#form_discapacidad-aud_req_otros_apoyos').is(':checked')) { + mostrar_aud_otros_apoyos(); + } else { + ocultar_aud_otros_apoyos(); + } + } + + function mostrar_aud_otros_apoyos() + { + $("#form_discapacidad-aud_otros_apoyos").parent(".control-group").show(); + } + + function ocultar_aud_otros_apoyos() + { + $("#form_discapacidad-aud_otros_apoyos").parent(".control-group").hide(); + } + + function evt_discapacidades_visuales() + { + if ($('#form_discapacidad-disc_visual').is(':checked')) { + mostrar_discapacidades_visuales(); + } else { + ocultar_discapacidades_visuales(); + } + } + + function mostrar_discapacidades_visuales() + { + $("#div_visual").show(); + evt_vis_otros_apoyos(); + } + + function ocultar_discapacidades_visuales() + { + $("#div_visual").hide(); + } + + function evt_vis_otros_apoyos() + { + if ($('#form_discapacidad-vis_req_otros_apoyos').is(':checked')) { + mostrar_vis_otros_apoyos(); + } else { + ocultar_vis_otros_apoyos(); + } + } + + function mostrar_vis_otros_apoyos() + { + $("#form_discapacidad-vis_otros_apoyos").parent(".control-group").show(); + } + + function ocultar_vis_otros_apoyos() + { + $("#form_discapacidad-vis_otros_apoyos").parent(".control-group").hide(); + } + + function evt_discapacidades_motoras() + { + if ($('#form_discapacidad-disc_motora').is(':checked')) { + mostrar_discapacidades_motoras(); + } else { + ocultar_discapacidades_motoras(); + } + } + + function mostrar_discapacidades_motoras() + { + $("#div_motora").show(); + evt_mot_apoyo_aula(); + evt_mot_otros_apoyos(); + } + + function ocultar_discapacidades_motoras() + { + $("#div_motora").hide(); + } + + function evt_mot_apoyo_aula() + { + if ($('#form_discapacidad-mot_req_apoyo_aula').is(':checked')) { + mostrar_mot_apoyo_aula(); + } else { + ocultar_mot_apoyo_aula(); + } + } + + function mostrar_mot_apoyo_aula() + { + $("#form_discapacidad-mot_apoyo_aula").parent(".control-group").show(); + } + + function ocultar_mot_apoyo_aula() + { + $("#form_discapacidad-mot_apoyo_aula").parent(".control-group").hide(); + } + + function evt_mot_otros_apoyos() + { + if ($('#form_discapacidad-mot_req_otros_apoyos').is(':checked')) { + mostrar_mot_otros_apoyos(); + } else { + ocultar_mot_otros_apoyos(); + } + } + + function mostrar_mot_otros_apoyos() + { + $("#form_discapacidad-mot_otros_apoyos").parent(".control-group").show(); + } + + function ocultar_mot_otros_apoyos() + { + $("#form_discapacidad-mot_otros_apoyos").parent(".control-group").hide(); + } + + function evt_discapacidades_psicosocial() + { + if ($('#form_discapacidad-disc_cond_psicosocial').is(':checked')) { + mostrar_discapacidades_psicosocial(); + } else { + ocultar_discapacidades_psicosocial(); + } + } + + function mostrar_discapacidades_psicosocial() + { + $("#div_psicosocial").show(); + evt_psi_otros_apoyos(); + } + + function ocultar_discapacidades_psicosocial() + { + $("#div_psicosocial").hide(); + } + + function evt_psi_otros_apoyos() + { + if ($('#form_discapacidad-psi_req_otros_apoyos').is(':checked')) { + mostrar_psi_otros_apoyos(); + } else { + ocultar_psi_otros_apoyos(); + } + } + + function mostrar_psi_otros_apoyos() + { + $("#form_discapacidad-psi_otros_apoyos").parent(".control-group").show(); + } + + function ocultar_psi_otros_apoyos() + { + $("#form_discapacidad-psi_otros_apoyos").parent(".control-group").hide(); + } + + function evt_discapacidades_otras() + { + if ($('#form_discapacidad-disc_otra').is(':checked')) { + mostrar_discapacidades_otras(); + } else { + ocultar_discapacidades_otras(); + } + } + + function mostrar_discapacidades_otras() + { + $("#div_otras").show(); + evt_otra_apoyo_vida_diaria(); + } + + function ocultar_discapacidades_otras() + { + $("#div_otras").hide(); + } + + function evt_otra_apoyo_vida_diaria() + { + if ($('#form_discapacidad-otra_req_apoyo_vida_diaria').is(':checked')) { + mostrar_otra_apoyo_vida_diaria(); + } else { + ocultar_otra_apoyo_vida_diaria(); + } + } + + function mostrar_otra_apoyo_vida_diaria() + { + $("#form_discapacidad-otra_apoyo_vida_diaria").parent(".control-group").show(); + } + + function ocultar_otra_apoyo_vida_diaria() + { + $("#form_discapacidad-otra_apoyo_vida_diaria").parent(".control-group").hide(); + } + + function formulario_validar() + { + if($('#form_discapacidad-condicion_discapacidad-S').prop('checked') == true){ + if($('#form_discapacidad-disc_auditiva').prop('checked') == false && + $('#form_discapacidad-disc_visual').prop('checked') == false && + $('#form_discapacidad-disc_motora').prop('checked') == false && + $('#form_discapacidad-disc_cond_psicosocial').prop('checked') == false && + $('#form_discapacidad-disc_otra').prop('checked') == false + ){ + $('#div_listado_discapacidad_tipos').addClass('control-group error') + return false; + } + $('#div_listado_discapacidad_tipos').removeClass('control-group error') + + } + return true; + } + + if (info.autosave) { + $(id).autosave(); + } + formulario_validar() + $('#form_discapacidad').submit(function () { + var valido = formulario_validar(); + var hubo_cambios = formulario_hubo_cambios(); + if (valido) { + if (hubo_cambios) { + var $form = $(this); + kernel.ajax.load($form.attr('action'), id, { + historia: false, + type: 'POST', + data: $form.serializeArray(), + success: function (response) { + if (response.info_estado.exitoso) { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-success', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-error', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }) + } + // Si corresponde, se desactiva el autosave + if (info.autosave) { + $(id).autosave('disable'); + } + kernel.renderer.pagelet('discapacidad').onload(); + } + }); + } else { + kernel.ui.show_mensaje(info.msj_sin_cambios, { + tipo: 'alert-info', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + }else { + kernel.ui.show_mensaje(info.msj_faltan_datos_discapacidad, { + tipo: 'alert-error', + until_interaction: false, + timeout: 15000, + fadeout: 2000 + }); + } + return false; + }); + } + } +}); \ No newline at end of file diff --git a/src/siu/operaciones/censo/documentacion/default.css b/src/siu/operaciones/censo/documentacion/default.css new file mode 100644 index 0000000..40d763b --- /dev/null +++ b/src/siu/operaciones/censo/documentacion/default.css @@ -0,0 +1,38 @@ +#documentacion .botonera { + height: 100px; + margin-left: 10px; +} + +#documentacion .botones { + margin-top: 35px; +} + +#documentacion .imagen { + height: 100px; +} + +#documentacion .descr_requisito { + font-style: italic; +} + +input { + width: 400px; +} + +#documentacion .mensaje_error { + text-align: center; + font-weight: bold; +} +.well.clearfix-faltante { + background-color:#f2dede; + text-shadow:none; +} +input[type="file"] { + display: none; +} + +#documentacion .msj_no_hay_requisitos_ingreso { + text-align: center; + font-weight: bold; + margin-top: 20px; +} diff --git a/src/siu/operaciones/censo/documentacion/default.twig b/src/siu/operaciones/censo/documentacion/default.twig new file mode 100644 index 0000000..c207b14 --- /dev/null +++ b/src/siu/operaciones/censo/documentacion/default.twig @@ -0,0 +1,82 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% autoescape false %} + +
+
+
+

{{this.get_nombre()|trans}}

+
+
+
+ + {# Si hay requisitos #} + {% if this.data.requisitos is not empty %} + + {% if not this.data.error_cnx_rdi%} +

+ {{ 'doc.msj_extensiones' | trans }} {{ this.data.extensiones }} +

+

+ {{ 'doc.msj_tamanio_max' | trans }} {{ this.data.tamanio_maximo }} MB +

+ {% else %} +
+ {{ 'doc.msj_error_rdi' | trans | raw }} +
+ {% endif %} +
+ + {% if not this.data.error_cnx_rdi%} + + {% if this.data.error %} +
+ {{ this.data.error }} +
+ {% endif %} + + {% for REQUISITO in this.data.requisitos %} +
+

{{ REQUISITO.header|trans|capitalize }} {{ REQUISITO.obligatorio }}

+ {% if REQUISITO.descripcion %} +

{{ REQUISITO.descripcion }}

+ {% endif %} + {% if REQUISITO.imagen %} + + {% else %} +
+
+
+ + +
+
+
+ {% endif %} +
+ {% endfor %} + + {% endif %} + + {# Si no hay requisitos #} + {% else %} + +
{{ 'doc.msj_no_hay_requisitos_ingreso' | trans | raw }}
+ + {% endif %} + + {% endautoescape %} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/documentacion/pagelet_documentacion.js b/src/siu/operaciones/censo/documentacion/pagelet_documentacion.js new file mode 100644 index 0000000..e16eb38 --- /dev/null +++ b/src/siu/operaciones/censo/documentacion/pagelet_documentacion.js @@ -0,0 +1,30 @@ +var _info; + +kernel.renderer.registrar_pagelet('documentacion', function (info) +{ + _info = info; + var id = '#' + info.id; + return { + onload: function () + { + $('.js-btnEliminar').on('click', function () + { + if (confirm(info.msj_confirmar_eliminar)) { + return true; + } + return false; + }); + + $('.js-upload-input').on('change', function () + { + var fileSize = this.files[0].size / 1024 / 1024; + if (fileSize > info.tamanio_maximo) { + alert(info.error_tamanio_maximo); + $(this).val(''); + }else{ + this.closest("form").submit(); + } + }); + } + }; +}); diff --git a/src/siu/operaciones/censo/finalizado/default.css b/src/siu/operaciones/censo/finalizado/default.css new file mode 100644 index 0000000..96e868d --- /dev/null +++ b/src/siu/operaciones/censo/finalizado/default.css @@ -0,0 +1,3 @@ +#finalizado .btn, #btnImprimir{ + width: 150px; +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/finalizado/default.twig b/src/siu/operaciones/censo/finalizado/default.twig new file mode 100644 index 0000000..03f1a6f --- /dev/null +++ b/src/siu/operaciones/censo/finalizado/default.twig @@ -0,0 +1,38 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} +
+

{{'propuestas_elegidas'|trans}}

+ + + + + + + + + + + + + + {% for item in this.get_datos_inscripciones() %} + + + + + + + + + {% endfor %} + +
{{'responsable_academica'|trans}}{{'propuesta'|trans}}{{'tipo_de_propuesta'|trans}}{{'ubicacion'|trans}}{{'modalidad'|trans}}{{'fecha_fin_vigencia'|trans}} 
{{item.ra_nombre}}{{item.propuesta_nombre}}{{item.tipo_propuesta_descr}}{{item.ubicacion_nombre}}{{item.modalidad_nombre}}{{item.fecha_fin_vigencia_visual}}
+
+ {{ 'prop_finalizada.msj'|trans }} + +  {{'prop_finalizada.reabrir'|trans}} + +
+
+ +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/financiamiento/default.twig b/src/siu/operaciones/censo/financiamiento/default.twig new file mode 100644 index 0000000..444cfd9 --- /dev/null +++ b/src/siu/operaciones/censo/financiamiento/default.twig @@ -0,0 +1,94 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% set form = this.get_form() %} + {% autoescape false %} + {{ form.encabezado }} +
+
+
+

{{this.get_nombre()|trans}}

+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+
+ + {%if form.hay_visibles_agrupado('financ_fuente') %} +
+

{{'financ_fuente'|trans}}

+
+
+ {{ form.checkbox('alu_cos_est_ap_fam') }} + {{ form.checkbox('alu_cos_est_plsoc') }} + {{ form.checkbox('alu_cos_est_trab') }} + {{ form.checkbox('alu_cos_est_beca') }} + {{ form.checkbox('alu_cos_est_otra') }} +
+
+ {{ form.control_group('alu_cos_est_espec') }} +
+
+
+ {% endif %} + +
+ {{ form.control_group('tiene_beca') }} + {%if form.hay_visibles_agrupado('financ_beca_fuente') %} +
+

{{'financ_beca_fuente'|trans}}

+
+
+ {{ form.checkbox('tiene_beca_univ') }} + {{ form.checkbox('tiene_beca_inter') }} + {{ form.checkbox('tiene_beca_nacio') }} + {{ form.checkbox('alu_beca_prov') }} + {{ form.checkbox('alu_beca_muni') }} + {{ form.checkbox('alu_beca_otra') }} +
+
+
+ {% endif %} + + {%if form.hay_visibles_agrupado('financ_beca_tipo') %} +
+

{{'financ_beca_tipo'|trans}}

+
+
+ {{ form.checkbox('alu_beca_tipo_eco') }} + {{ form.checkbox('alu_beca_tipo_ser') }} + {{ form.checkbox('alu_beca_tipo_inv') }} +
+
+
+ {% endif %} + + {%if form.hay_visibles_agrupado('financ_beca_tipo_econom') %} +
+

{{'financ_beca_tipo_econom'|trans}}

+
+
+ {{ form.checkbox('alu_beca_eco_tran') }} + {{ form.checkbox('alu_beca_eco_efec') }} + {{ form.checkbox('alu_beca_eco_foto') }} + {{ form.checkbox('alu_beca_eco_habi') }} + {{ form.checkbox('alu_beca_eco_come') }} +
+
+
+ {% endif %} + +
+ +
+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+ + {% endautoescape %} + +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/financiamiento/form_financiamiento.php b/src/siu/operaciones/censo/financiamiento/form_financiamiento.php new file mode 100644 index 0000000..f2273e7 --- /dev/null +++ b/src/siu/operaciones/censo/financiamiento/form_financiamiento.php @@ -0,0 +1,240 @@ +crear('censo', 'guardar', array('financiamiento')); + } + + protected function generar_definicion() + { + //---- Fuentes de financiamiento --------------------------------------- + + $this->set_campo('alu_cos_est_ap_fam', array( + form::label => 'alu_cos_est_ap_fam', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_cos_est_plsoc', array( + form::label => 'alu_cos_est_plsoc', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_cos_est_trab', array( + form::label => 'alu_cos_est_trab', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_cos_est_beca', array( + form::label => 'alu_cos_est_beca', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_cos_est_otra', array( + form::label => 'alu_cos_est_otra', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_cos_est_espec', array( + form::label => 'alu_cos_est_espec', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 255 + )); + + //---- Fuentes de la beca ---------------------------------------------- + + $this->set_campo('tiene_beca', array( + form::label => 'tiene_beca', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::valor_default => '' + )); + + $this->set_campo('tiene_beca_univ', array( + form::label => 'tiene_beca_univ', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('tiene_beca_inter', array( + form::label => 'tiene_beca_inter', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('tiene_beca_nacio', array( + form::label => 'tiene_beca_nacio', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_beca_prov', array( + form::label => 'alu_beca_prov', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_beca_muni', array( + form::label => 'alu_beca_muni', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_beca_otra', array( + form::label => 'alu_beca_otra', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + //---- Tipos de beca --------------------------------------------------- + + $this->set_campo('alu_beca_tipo_eco', array( + form::label => 'alu_beca_tipo_eco', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_beca_tipo_ser', array( + form::label => 'alu_beca_tipo_ser', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_beca_tipo_inv', array( + form::label => 'alu_beca_tipo_inv', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + //---- Tipos de ayuda económica ---------------------------------------- + + $this->set_campo('alu_beca_eco_tran', array( + form::label => 'alu_beca_eco_tran', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_beca_eco_efec', array( + form::label => 'alu_beca_eco_efec', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_beca_eco_foto', array( + form::label => 'alu_beca_eco_foto', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_beca_eco_habi', array( + form::label => 'alu_beca_eco_habi', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_beca_eco_come', array( + form::label => 'alu_beca_eco_come', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + } + +} +?> diff --git a/src/siu/operaciones/censo/financiamiento/pagelet_financiamiento.js b/src/siu/operaciones/censo/financiamiento/pagelet_financiamiento.js new file mode 100644 index 0000000..2d8e180 --- /dev/null +++ b/src/siu/operaciones/censo/financiamiento/pagelet_financiamiento.js @@ -0,0 +1,108 @@ +/** + * Cambio del campo "Otra fuente" + */ +function cambio_alu_cos_est_otra() +{ + if ($('#form_financiamiento-alu_cos_est_otra').is(':checked')) { + mostrar('div_form_financiamiento'); + } else { + ocultar('div_form_financiamiento', true); + } +} + +/** + * Cambio del campo "Con beca" + */ +function cambio_alu_cos_est_beca() +{ + if ($('#form_financiamiento-alu_cos_est_beca').is(':checked')) { + mostrar('div_datos_becas'); + } else { + ocultar('div_datos_becas', true); + } +} + +/** + * Cambio del campo "De ayuda económica" + */ +function cambio_alu_beca_tipo_eco() +{ + if ($('#form_financiamiento-alu_beca_tipo_eco').is(':checked')) { + mostrar('div_beca_tipo_econom'); + } else { + ocultar('div_beca_tipo_econom', true); + } +} + +kernel.renderer.registrar_pagelet('financiamiento', function(info) { + var id = '#' + info.id; + + return { + + onload: function() { + //---- Inicialización de estado de visibilidad de secciones -------- + cambio_alu_cos_est_otra(); + cambio_alu_cos_est_beca(); + cambio_alu_beca_tipo_eco(); + + //---- Manejo de visibilidad de secciones por eventos -------------- + $('#form_financiamiento-alu_cos_est_otra').on('change', function() { cambio_alu_cos_est_otra(); }); + $('#form_financiamiento-alu_cos_est_beca').on('change', function() { cambio_alu_cos_est_beca(); }); + $('#form_financiamiento-alu_beca_tipo_eco').on('change', function() { cambio_alu_beca_tipo_eco(); }); + + //------------------------------------------------------------------ + + // Si corresponde, se activa el autosave + if (info.autosave) { + $(id).autosave(); + } + + $('#form_financiamiento').submit(function() { + var hubo_cambios = formulario_hubo_cambios(); + if (hubo_cambios) { + var $form = $(this); + kernel.ajax.load($form.attr('action'), id, { + historia: false, + type: 'POST', + data: $form.serializeArray(), + success: function(response) { + if (response.info_estado.exitoso) { + if (response.info_estado.cambios_desde_impresion) { + document.location.reload(true); + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-success', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-error', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + + // Si corresponde, se desactiva el autosave + if (info.autosave) { + $(id).autosave('disable'); + } + kernel.renderer.pagelet('financiamiento').onload(); + } + }); + } else { + kernel.ui.show_mensaje(info.msj_sin_cambios, { + tipo: 'alert-info', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + return false; + }); + } + } +}) \ No newline at end of file diff --git a/src/siu/operaciones/censo/formacion_acad/default.css b/src/siu/operaciones/censo/formacion_acad/default.css new file mode 100644 index 0000000..e163ce0 --- /dev/null +++ b/src/siu/operaciones/censo/formacion_acad/default.css @@ -0,0 +1,5 @@ +#formacion_acad .eventos-fila { + padding-right: 0px; + margin-right: 0px; + width: 15%; +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/formacion_acad/default.twig b/src/siu/operaciones/censo/formacion_acad/default.twig new file mode 100644 index 0000000..f5b2e0f --- /dev/null +++ b/src/siu/operaciones/censo/formacion_acad/default.twig @@ -0,0 +1,100 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% autoescape false %} + +
+
+
+

{{this.get_nombre()|trans}}

+
+
+
+
+ + {% if this.data.modo == 'listado' %} + {#---- Pantalla listado ----#} + {% if this.data.cant_antecedentes == 0 %} +
+ {{'sin_antecedentes_acad'|trans|raw}} +
+ {% else %} +
+ + + + + + + + + + + + + + {% for item in this.get_datos_formacion_acad() %} + + + + + + + + + + {% endfor %} + +
{{'antec_fa_titulo_sup_prein'|trans}}{{'antec_fa_institucion_prein'|trans}}{{'antec_fa_fecha_ingreso'|trans}}{{'antec_fa_fecha_egreso'|trans}}{{'antec_fa_nivel_estudio'|trans}}{{'antec_fa_estado'|trans}} 
{{item.titulo_sup_prein}}{{item.institucion_prein}}{{item.fecha_ingreso}}{{item.fecha_egreso}}{{item.nivel_estudio_descr}}{{item.estado_descr}} + + +
+
+ {% endif %} + + + {% else %} + {#---- Pantalla alta / edición ----#} +
+ {{ 'edicion_interna.alerta' | trans | raw}} +
+ {% set form = this.get_form() %} + {{ form.encabezado }} +
+

{{'carga_antecedente_acad'|trans}}

+ {{ form.control_group('__preinsc_ID__') }} +
+ {{ form.control_group('titulo_sup_prein', 'span6') }} + {{ form.control_group('institucion_prein', 'span6') }} +
+
+ {{ form.control_group('fecha_ingreso', 'span3') }} + {{ form.control_group('fecha_egreso', 'span3') }} +
+
+ {{ form.control_group('titulo_tesis', 'span6') }} + {{ form.control_group('director_tesis', 'span6') }} +
+
+ {{ form.control_group('categoria_coneau', 'span6') }} + {{ form.control_group('duracion_teorica', 'span6') }} +
+
+ {{ form.control_group('nivel_estudio', 'span6') }} + {{ form.control_group('estado', 'span6') }} +
+
+ +
+ {{ form.submit_button('guardar_antecedente', 'guardar_antecedente')}} + + {{ 'volver'|trans|capitalize }} + +
+ + {% endif %} + {% endautoescape %} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/formacion_acad/form_formacion_acad.php b/src/siu/operaciones/censo/formacion_acad/form_formacion_acad.php new file mode 100644 index 0000000..6150a69 --- /dev/null +++ b/src/siu/operaciones/censo/formacion_acad/form_formacion_acad.php @@ -0,0 +1,166 @@ +crear('censo', 'guardar_formacion_acad', array('formacion_acad')); + } + + protected function generar_definicion() + { + $this->set_campo(catalogo::id, array( + form::label => 'id', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'hidden'), + form::valor_default => '' + )); + + $this->set_campo('titulo_sup_prein', array( + form::label => 'antec_fa_titulo_sup_prein', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::largo => 255 + )); + + $this->set_campo('institucion_prein', array( + form::label => 'antec_fa_institucion_prein', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::largo => 255 + )); + + $this->set_campo('fecha_ingreso', array( + form::label => 'antec_fa_fecha_ingreso', + form::filtro => validador::TIPO_DATE, + form::filtro_params => array('format' => 'd/m/Y', + 'allowempty' => true), + form::clase_css => 'date input-small', + form::obligatorio => true, + form::elemento => array('tipo' => 'text') + )); + + $this->set_campo('fecha_egreso', array( + form::label => 'antec_fa_fecha_egreso', + form::filtro => validador::TIPO_DATE, + form::filtro_params => array('format' => 'd/m/Y', + 'allowempty' => true), + form::clase_css => 'date input-small', + form::obligatorio => false, + form::elemento => array('tipo' => 'text') + )); + + $this->set_campo('titulo_tesis', array( + form::label => 'antec_fa_titulo_tesis', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 255 + )); + + $this->set_campo('director_tesis', array( + form::label => 'antec_fa_director_tesis', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 255 + )); + + $this->set_campo('categoria_coneau', array( + form::label => 'antec_fa_categoria_coneau', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_categorias_coneau() + )); + + $this->set_campo('duracion_teorica', array( + form::label => 'antec_fa_duracion_teorica', + form::filtro => validador::TIPO_INT, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::filtro_params => array('allowempty' => true), + form::largo => 2 + )); + + $this->set_campo('nivel_estudio', array( + form::label => 'antec_fa_nivel_estudio', + form::obligatorio => true, + form::filtro => validador::TIPO_TEXTO, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_niveles_estudio_fa() + )); + + $this->set_campo('estado', array( + form::label => 'antec_fa_estado', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_estados_antecedente_fa() + )); + } + + //-------------------------------------------------------------------------- + + function validar() + { + $form_valido = parent::validar(); + + $fecha_ingreso = $this->get_dato('fecha_ingreso'); + $fecha_egreso = $this->get_dato('fecha_egreso'); + + if (!empty($fecha_ingreso)) { + $fecha_ingreso = convertir_fecha_formato_base($fecha_ingreso); + // Se valida que la fecha no sea anterior a 1900 + $fecha_limite = '1901-01-01'; + if (fecha_es_menor($fecha_ingreso, $fecha_limite)) { + $form_valido = false; + $msg = kernel::traductor()->trans('error_fecha_antigua'); + $this->agregar_error('fecha_ingreso', $msg); + } + + // Se valida que la fecha de ingreso sea anterior a la fecha actual + if ($form_valido) { + if (!(fecha_es_menor_a_fecha_actual($fecha_ingreso, true))) { + $form_valido = false; + $msg = kernel::traductor()->trans('error_fecha_posterior'); + $this->agregar_error('fecha_ingreso', $msg); + } + } + + // Se valida que la fecha de egreso sea anterior a la fecha de ingreso + if (($form_valido) && (!empty($fecha_egreso))) { + $fecha_egreso = convertir_fecha_formato_base($fecha_egreso); + if (fecha_es_menor($fecha_egreso, $fecha_ingreso)) { + $form_valido = false; + $msg = kernel::traductor()->trans('error_fecha_egreso_posterior'); + $this->agregar_error('fecha_egreso', $msg); + } + } + } + + return $form_valido; + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/formacion_acad/pagelet_formacion_acad.js b/src/siu/operaciones/censo/formacion_acad/pagelet_formacion_acad.js new file mode 100644 index 0000000..a199fa5 --- /dev/null +++ b/src/siu/operaciones/censo/formacion_acad/pagelet_formacion_acad.js @@ -0,0 +1,25 @@ +kernel.renderer.registrar_pagelet('formacion_acad', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + //---- Date Picker ------------------------------------------------- + $.datepicker.setDefaults( $.datepicker.regional["es"] ); + $(id).find('input.date').datepicker({ + changeMonth: true, + changeYear: true, + firstDay:0, + yearRange: "-70:+0" + }); + + $('.js-btnEliminar').on('click', function() { + if (confirm(info.msj_confirmar_eliminar)) { + submit(); + return true; + } + return false; + }); + } + } + +}); \ No newline at end of file diff --git a/src/siu/operaciones/censo/idiomas/default.twig b/src/siu/operaciones/censo/idiomas/default.twig new file mode 100644 index 0000000..d4ebc9a --- /dev/null +++ b/src/siu/operaciones/censo/idiomas/default.twig @@ -0,0 +1,53 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% set form = this.get_form() %} + {% autoescape false %} + {{ form.encabezado }} +
+
+
+

{{this.get_nombre()|trans}}

+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+
+ + {%if form.hay_visibles_agrupado('conoc_idiomas') %} +
+

{{'conoc_idiomas'|trans}}

+
+
+ {{ form.control_group('alu_idioma_ingl', 'span6') }} + {{ form.control_group('alu_idioma_alem', 'span6') }} +
+
+ {{ form.control_group('alu_idioma_fran', 'span6') }} + {{ form.control_group('alu_idioma_ital', 'span6') }} +
+
+ {{ form.control_group('alu_idioma_port', 'span6') }} + {{ form.control_group('alu_idioma_chino', 'span6') }} +
+
+ {{ form.control_group('alu_idioma_otro', 'span6') }} +
+ {{ form.control_group('alu_idioma_otro_nivel') }} +
+
+
+
+ {% endif %} + +
+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+ + {% endautoescape %} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/idiomas/form_idiomas.php b/src/siu/operaciones/censo/idiomas/form_idiomas.php new file mode 100644 index 0000000..871cb55 --- /dev/null +++ b/src/siu/operaciones/censo/idiomas/form_idiomas.php @@ -0,0 +1,105 @@ +crear('censo', 'guardar', array('idiomas')); + } + + protected function generar_definicion() + { + $this->set_campo('alu_idioma_ingl', array( + form::label => 'alu_idioma_ingl', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::filtro_params => array('allowempty' => true), + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_niveles_idiomas() + )); + + $this->set_campo('alu_idioma_alem', array( + form::label => 'alu_idioma_alem', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::filtro_params => array('allowempty' => true), + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_niveles_idiomas() + )); + + $this->set_campo('alu_idioma_fran', array( + form::label => 'alu_idioma_fran', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::filtro_params => array('allowempty' => true), + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_niveles_idiomas() + )); + + $this->set_campo('alu_idioma_ital', array( + form::label => 'alu_idioma_ital', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::filtro_params => array('allowempty' => true), + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_niveles_idiomas() + )); + + $this->set_campo('alu_idioma_port', array( + form::label => 'alu_idioma_port', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::filtro_params => array('allowempty' => true), + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_niveles_idiomas() + )); + + $this->set_campo('alu_idioma_chino', array( + form::label => 'alu_idioma_chino', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::filtro_params => array('allowempty' => true), + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_niveles_idiomas() + )); + + $this->set_campo('alu_idioma_otro', array( + form::label => 'alu_idioma_otro', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'text'), + form::largo => 20 + )); + + $this->set_campo('alu_idioma_otro_nivel', array( + form::label => 'alu_idioma_otro_nivel', + form::obligatorio => false, + form::filtro => validador::TIPO_TEXTO, + form::filtro_params => array('allowempty' => true), + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_niveles_idiomas() + )); + } + +} +?> diff --git a/src/siu/operaciones/censo/idiomas/pagelet_idiomas.js b/src/siu/operaciones/censo/idiomas/pagelet_idiomas.js new file mode 100644 index 0000000..a18fd0e --- /dev/null +++ b/src/siu/operaciones/censo/idiomas/pagelet_idiomas.js @@ -0,0 +1,75 @@ +kernel.renderer.registrar_pagelet('idiomas', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + // Si corresponde, se activa el autosave + if (info.autosave) { + $(id).autosave(); + } + + $('#form_idiomas-alu_idioma_otro').on('keyup', function() { cambio__alu_idioma_otro(); }); + cambio__alu_idioma_otro(); + + $('#form_idiomas').submit(function() { + var hubo_cambios = formulario_hubo_cambios(); + if (hubo_cambios) { + var $form = $(this); + kernel.ajax.load($form.attr('action'), id, { + historia: false, + type: 'POST', + data: $form.serializeArray(), + success: function(response) { + if (response.info_estado.exitoso) { + if (response.info_estado.cambios_desde_impresion) { + document.location.reload(true); + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-success', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-error', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + + // Si corresponde, se desactiva el autosave + if (info.autosave) { + $(id).autosave('disable'); + } + kernel.renderer.pagelet('idiomas').onload(); + } + }); + } else { + kernel.ui.show_mensaje(info.msj_sin_cambios, { + tipo: 'alert-info', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + return false; + }); + } + }; + + /** + * Cambio del campo "Otro" + */ + function cambio__alu_idioma_otro() + { + if ($('#form_idiomas-alu_idioma_otro').val().trim()) { + mostrar('div_alu_idioma_otro'); + } else { + ocultar('div_alu_idioma_otro', true); + } + } + +}); \ No newline at end of file diff --git a/src/siu/operaciones/censo/lista_forms/default.css b/src/siu/operaciones/censo/lista_forms/default.css new file mode 100644 index 0000000..aa6fa80 --- /dev/null +++ b/src/siu/operaciones/censo/lista_forms/default.css @@ -0,0 +1,13 @@ +#lista_forms .well { padding: 8px 0; } + +#lista_forms li a.visitado { + background: url("../../../www/img/item_dcensal_ok.png") no-repeat scroll 95% transparent; + color: #0088CC; + text-shadow: none; +} + +#lista_forms li a.active { + background-color: #0088CC !important; + text-shadow: none; + color:#fff; +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/lista_forms/default.twig b/src/siu/operaciones/censo/lista_forms/default.twig new file mode 100644 index 0000000..a42e334 --- /dev/null +++ b/src/siu/operaciones/censo/lista_forms/default.twig @@ -0,0 +1,24 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + + {% if this.data.mostrar_menu %} +
+ +
+ {% endif %} + +
+

+ {{this.data.mensaje_lateral|trans|raw}} +

+
+{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/lista_forms/pagelet_lista_forms.js b/src/siu/operaciones/censo/lista_forms/pagelet_lista_forms.js new file mode 100644 index 0000000..e41b8fa --- /dev/null +++ b/src/siu/operaciones/censo/lista_forms/pagelet_lista_forms.js @@ -0,0 +1,8 @@ +kernel.renderer.registrar_pagelet('lista_forms', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + } + } +}) \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_actuacion_docente.php b/src/siu/operaciones/censo/pagelet_actuacion_docente.php new file mode 100644 index 0000000..032eb6f --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_actuacion_docente.php @@ -0,0 +1,75 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\censo\actuacion_docente\form_actuacion_docente'); + } + return $this->form; + } + + function get_datos_actuacion_docente() + { + $datos = kernel::persona()->datos()->get_datos_actuacion_docente(); + foreach ($datos as $key => $dato) { + $datos[$key]['LINK_EDITAR'] = kernel::vinculador()->crear('censo', 'editar', array('actuacion_docente', $dato[catalogo::id])); + $datos[$key]['LINK_ELIMINAR'] = kernel::vinculador()->crear('censo', 'eliminar_actuacion_docente', array('actuacion_docente', $dato[catalogo::id])); + } + return $datos; + } + + function get_js_files() + { + $files = parent::get_js_files(); + $files[] = kernel::vinculador()->vinculo_recurso("js/jqueryui.extra.js"); + return $files; + } + + function prepare() + { + $form = $this->get_form(); + + if ($this->pantalla == self::ESTADO_EDICION) { + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_error'), + 'exitoso' => false + )); + break; + case self::FORM_GUARDADO: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_exitoso'), + 'exitoso' => true + )); + default: + $form->inicializar(); + $datos = $this->controlador->get_actuacion_docente(); + $form->set_datos($datos); + } + } + + $form->activar_csrf($this->generar_csrf()); + $this->add_form($form); + + $this->data['cant_antecedentes'] = count($this->get_datos_actuacion_docente()); + $this->data['modo'] = $this->pantalla; + + $this->add_var_js('msj_confirmar_eliminar', kernel::traductor()->trans('msj_confirmar_eliminar')); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_actuacion_profesional.php b/src/siu/operaciones/censo/pagelet_actuacion_profesional.php new file mode 100644 index 0000000..ea1c915 --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_actuacion_profesional.php @@ -0,0 +1,80 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\censo\actuacion_profesional\form_actuacion_profesional'); + } + return $this->form; + } + + function get_action_eliminar() + { + return kernel::vinculador()->crear('censo', 'eliminar_actuacion_profesional'); + } + + function get_datos_actuacion_profesional() + { + $datos = kernel::persona()->datos()->get_datos_actuacion_profesional(); + foreach ($datos as $key => $dato) { + $datos[$key]['LINK_EDITAR'] = kernel::vinculador()->crear('censo', 'editar', array('actuacion_profesional', $dato[catalogo::id])); + $datos[$key]['LINK_ELIMINAR'] = kernel::vinculador()->crear('censo', 'eliminar_actuacion_profesional', array('actuacion_profesional', $dato[catalogo::id])); + } + return $datos; + } + + function get_js_files() + { + $files = parent::get_js_files(); + $files[] = kernel::vinculador()->vinculo_recurso("js/jqueryui.extra.js"); + return $files; + } + + function prepare() + { + $form = $this->get_form(); + + if ($this->pantalla == self::ESTADO_EDICION) { + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_error'), + 'exitoso' => false + )); + break; + case self::FORM_GUARDADO: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_exitoso'), + 'exitoso' => true + )); + default: + $form->inicializar(); + $datos = $this->controlador->get_actuacion_profesional(); + $form->set_datos($datos); + } + } + + $form->activar_csrf($this->generar_csrf()); + $this->add_form($form); + + $this->data['cant_antecedentes'] = count($this->get_datos_actuacion_profesional()); + $this->data['modo'] = $this->pantalla; + + $this->add_var_js('msj_confirmar_eliminar', kernel::traductor()->trans('msj_confirmar_eliminar')); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_datos_adicionales.php b/src/siu/operaciones/censo/pagelet_datos_adicionales.php new file mode 100644 index 0000000..04bc193 --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_datos_adicionales.php @@ -0,0 +1,76 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\censo\datos_adicionales\form_datos_adicionales'); + $this->form->set_autoset_activo(true); + } + return $this->form; + } + + function get_js_files() + { + $files = parent::get_js_files(); + $files[] = kernel::vinculador()->vinculo_recurso("js/plugin_autosave.js"); + return $files; + } + + function prepare() + { + + $cantidad_inscripciones = kernel::persona()->datos()->get_cantidad_inscripciones(); + $this->data['cant_inscripciones'] = $cantidad_inscripciones; + + $formulario = $this->get_form(); + $this->add_var_js('autosave', $formulario->is_autoset_activo()); + $this->add_var_js('msj_sin_cambios', kernel::traductor()->trans('form_sin_cambios')); + + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_error'), + 'exitoso' => false + )); + break; + case self::FORM_CAMBIOS_DESDE_IMPRESION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('cambios_desde_impresion'), + 'exitoso' => true, + 'cambios_desde_impresion' => true + )); + break; + case self::FORM_GUARDADO: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_exitoso'), + 'exitoso' => true, + 'cambios_desde_impresion' => false + )); + default: + $formulario->inicializar(); + $datos = kernel::persona()->datos()->get_datos_formularios_preinsc(); + $formulario->set_datos($datos); + } + + if ($this->controlador->vista()->control_faltantes_activado()) { + $this->marcar_faltantes(); + } + + $formulario->activar_csrf($this->generar_csrf()); + $this->add_form($formulario); + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_datos_estudios.php b/src/siu/operaciones/censo/pagelet_datos_estudios.php new file mode 100644 index 0000000..438ac12 --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_datos_estudios.php @@ -0,0 +1,112 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\censo\datos_estudios\form_datos_estudios'); + $this->form->set_autoset_activo(true); + } + return $this->form; + } + + function get_css_files() + { + $files = parent::get_css_files(); + $files[] = kernel::vinculador()->vinculo_recurso("css/jTPS.css"); + return $files; + } + + function get_js_files() + { + $files = parent::get_js_files(); + $files[] = kernel::vinculador()->vinculo_recurso("js/jqueryui.extra.js"); + $files[] = kernel::vinculador()->vinculo_recurso("js/jTPS.js"); + $files[] = kernel::vinculador()->vinculo_recurso("js/plugin_autosave.js"); + $files[] = kernel::vinculador()->vinculo_recurso("js/_comun/selector_colegio/selector_colegio.js"); + $files[] = kernel::vinculador()->vinculo_recurso("js/_comun/selector_titulo_sec/selector_titulo_sec.js"); + return $files; + } + + function prepare() + { + $form = $this->get_form(); + $this->add_var_js('autosave', $form->is_autoset_activo()); + $this->add_var_js('msj_sin_cambios', kernel::traductor()->trans('form_sin_cambios')); + $this->add_var_js('estado_estudio_ABANDONADO', preinscripcion::estado_estudio_ABANDONADO); + $this->add_var_js('estado_estudio_FINALIZADO', preinscripcion::estado_estudio_FINALIZADO); + $this->add_var_js('razon_abandono_OTRO', preinscripcion::razon_abandono_OTRO); + + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_error'), + 'exitoso' => false + )); + break; + case self::FORM_CAMBIOS_DESDE_IMPRESION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('cambios_desde_impresion'), + 'exitoso' => true, + 'cambios_desde_impresion' => true + )); + break; + case self::FORM_GUARDADO: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_exitoso'), + 'exitoso' => true, + 'cambios_desde_impresion' => false + )); + default: + $form->inicializar(); + $datos = kernel::persona()->datos()->get_datos_formularios_preinsc(); + + $this->add_var_js('fecha_nacimiento', $datos['fecha_nacimiento']); + $es_menor_25 = false; + if (!empty($datos['fecha_nacimiento'])) { + $edad = comunes::calcular_edad($datos['fecha_nacimiento']); + $es_menor_25 = ($edad < 25); + } + $this->add_var_js('es_menor_25', $es_menor_25); + $form->set_datos($datos); + } + + if ($this->controlador->vista()->control_faltantes_activado()) { + $this->marcar_faltantes(); + } + + $form->activar_csrf($this->generar_csrf()); + $this->add_form($form); + + $this->add_var_js('selector_colegio', kernel::load_template('_comun/selector_colegio/selector_colegio.twig')->render(array())); + $this->add_var_js('mensaje_filtrar_colegio', kernel::traductor()->trans('mensaje_filtrar_colegio')); + $this->add_var_js('url_colegios', kernel::vinculador()->crear('censo', 'buscar_colegios')); + $this->add_var_js('url_buscar_colegio_por_id', kernel::vinculador()->crear('censo', 'buscar_colegio_por_id')); + + $this->add_var_js('selector_titulo_sec', kernel::load_template('_comun/selector_titulo_sec/selector_titulo_sec.twig')->render(array())); + $this->add_var_js('mensaje_filtrar_titulo_sec', kernel::traductor()->trans('mensaje_filtrar_titulo_sec')); + $this->add_var_js('url_titulo_sec', kernel::vinculador()->crear('censo', 'buscar_titulo_sec')); + $this->add_var_js('url_buscar_titulo_por_id', kernel::vinculador()->crear('censo', 'buscar_titulo_por_id')); + + $this->add_var_js('mensaje_filtrar_caract', kernel::traductor()->trans('mensaje_filtrar_caract')); + + $this->add_var_js('url_lista_localidades', kernel::vinculador()->crear('censo', 'lista_localidades')); + + $this->add_mensaje_js('error_es_mayor_25_sin_secundario', kernel::traductor()->trans('error_es_mayor_25_sin_secundario')); + $this->add_mensaje_js('error_fecha_nacimiento_vacia', kernel::traductor()->trans('error_fecha_nacimiento_vacia')); + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_datos_familiares.php b/src/siu/operaciones/censo/pagelet_datos_familiares.php new file mode 100644 index 0000000..2f81cdc --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_datos_familiares.php @@ -0,0 +1,72 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\censo\datos_familiares\form_datos_familiares'); + $this->form->set_autoset_activo(true); + } + return $this->form; + } + + function get_js_files() + { + $files = parent::get_js_files(); + $files[] = kernel::vinculador()->vinculo_recurso("js/plugin_autosave.js"); + return $files; + } + + function prepare() + { + $form = $this->get_form(); + $this->add_var_js('autosave', $form->is_autoset_activo()); + $this->add_var_js('msj_sin_cambios', kernel::traductor()->trans('form_sin_cambios')); + + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_error'), + 'exitoso' => false + )); + break; + case self::FORM_CAMBIOS_DESDE_IMPRESION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('cambios_desde_impresion'), + 'exitoso' => true, + 'cambios_desde_impresion' => true + )); + break; + case self::FORM_GUARDADO: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_exitoso'), + 'exitoso' => true, + 'cambios_desde_impresion' => false + )); + default: + $form->inicializar(); + $datos = kernel::persona()->datos()->get_datos_formularios_preinsc(); + $form->set_datos($datos); + } + + if ($this->controlador->vista()->control_faltantes_activado()) { + $this->marcar_faltantes(); + } + + $form->activar_csrf($this->generar_csrf()); + $this->add_form($form); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_datos_laborales.php b/src/siu/operaciones/censo/pagelet_datos_laborales.php new file mode 100644 index 0000000..68a3308 --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_datos_laborales.php @@ -0,0 +1,73 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\censo\datos_laborales\form_datos_laborales'); + $this->form->set_autoset_activo(true); + } + return $this->form; + } + + function get_js_files() + { + $files = parent::get_js_files(); + $files[] = kernel::vinculador()->vinculo_recurso("js/plugin_autosave.js"); + return $files; + } + + function prepare() + { + $form = $this->get_form(); + $this->add_var_js('autosave', $form->is_autoset_activo()); + $this->add_var_js('msj_sin_cambios', kernel::traductor()->trans('form_sin_cambios')); + $this->add_var_js('otra_empresa', opciones::otra_empresa); + + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_error'), + 'exitoso' => false + )); + break; + case self::FORM_CAMBIOS_DESDE_IMPRESION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('cambios_desde_impresion'), + 'exitoso' => true, + 'cambios_desde_impresion' => true + )); + break; + case self::FORM_GUARDADO: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_exitoso'), + 'exitoso' => true, + 'cambios_desde_impresion' => false + )); + default: + $form->inicializar(); + $datos = kernel::persona()->datos()->get_datos_formularios_preinsc(); + $form->set_datos($datos); + } + + if ($this->controlador->vista()->control_faltantes_activado()) { + $this->marcar_faltantes(); + } + + $form->activar_csrf($this->generar_csrf()); + $this->add_form($form); + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_datos_personales.php b/src/siu/operaciones/censo/pagelet_datos_personales.php new file mode 100644 index 0000000..5dfcfae --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_datos_personales.php @@ -0,0 +1,126 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\censo\datos_personales\form_datos_personales'); + $this->form->set_autoset_activo(true); + } + return $this->form; + } + + function get_form_localidad() + { + if (!isset($this->form_loc)) { + $this->form_loc = kernel::localizador()->instanciar('operaciones\censo\_comun\selector_localidad\form_localidad'); + } + return $this->form_loc; + } + + function get_form_cp() + { + if (!isset($this->form_cp)) { + $this->form_cp = kernel::localizador()->instanciar('operaciones\censo\_comun\selector_localidad\form_cp'); + } + return $this->form_cp; + } + + function get_js_files() + { + $files = parent::get_js_files(); + $files[] = kernel::vinculador()->vinculo_recurso("js/plugin_autosave.js"); + $files[] = kernel::vinculador()->vinculo_recurso("js/_comun/selector_localidad/selector_localidad.js"); + $files[] = kernel::vinculador()->vinculo_recurso("js/_comun/selector_localidad/selector_cp.js"); + return $files; + } + + function prepare() + { + $form = $this->get_form(); + $this->add_var_js('autosave', $form->is_autoset_activo()); + $this->add_var_js('msj_sin_cambios', kernel::traductor()->trans('form_sin_cambios')); + + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_error'), + 'exitoso' => false + )); + break; + case self::FORM_CAMBIOS_DESDE_IMPRESION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('cambios_desde_impresion'), + 'exitoso' => true, + 'cambios_desde_impresion' => true + )); + break; + case self::FORM_GUARDADO: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_exitoso'), + 'exitoso' => true, + 'cambios_desde_impresion' => false + )); + default: + $form->inicializar(); + $datos = kernel::persona()->datos()->get_datos_formularios_preinsc(); + $form->set_datos($datos); + } + + if ($this->controlador->vista()->control_faltantes_activado()) { + $this->marcar_faltantes(); + } + + $form->activar_csrf($this->generar_csrf()); + $this->add_form($form); + + //---- Form del selector de localidades -------------------------------- + $form_loc = $this->get_form_localidad(); + $form_loc->inicializar(); + $this->add_form($form_loc); + + $this->add_var_js('selector_localidad', kernel::load_template('_comun/selector_localidad/selector_localidad.twig')->render(array( + 'form_loc' => $form_loc + ))); + + //---- Form del selector de códigos postales --------------------------- + $form_cp = $this->get_form_cp(); + $form_cp->inicializar(); + $this->add_form($form_cp); + + $this->add_var_js('selector_cp', kernel::load_template('_comun/selector_localidad/selector_cp.twig')->render(array( + 'form_cp' => $form_cp + ))); + $this->add_var_js('loc_sin_cp', kernel::traductor()->trans('loc_sin_cp')); + + //---------------------------------------------------------------------- + $this->add_var_js('url_provincias', kernel::vinculador()->crear('censo', 'cascada_provincias')); + $this->add_var_js('url_departamentos', kernel::vinculador()->crear('censo', 'cascada_departamentos')); + $this->add_var_js('url_localidades', kernel::vinculador()->crear('censo', 'cascada_localidades')); + $this->add_var_js('url_cod_postales', kernel::vinculador()->crear('censo', 'cascada_cod_postales')); + $this->add_var_js('url_cp_unico', kernel::vinculador()->crear('censo', 'cp_unico')); + $this->add_var_js('error_vacio', kernel::traductor()->trans('form_validacion_error.vacio')); + $this->add_var_js('ingresa_cp', true); + + $this->add_var_js('url_descr_localidad', kernel::vinculador()->crear('censo', 'get_descr_localidad')); + $this->add_var_js('url_lista_localidades', kernel::vinculador()->crear('censo', 'lista_localidades')); + + $this->data['url_lista_localidades'] = kernel::vinculador()->crear('censo', 'lista_localidades'); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_datos_principales.php b/src/siu/operaciones/censo/pagelet_datos_principales.php new file mode 100644 index 0000000..8022afa --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_datos_principales.php @@ -0,0 +1,177 @@ +datos()->permite_cedula(); + } + + function necesita_visa() + { + return kernel::persona()->datos()->necesita_visa(); + } + + function es_argentino() + { + return kernel::persona()->datos()->es_argentino(); + } + + //-------------------------------------------------------------------------- + + function get_nombre() + { + return 'datos_principales'; + } + + function get_js_files() + { + $files = parent::get_js_files(); + $files[] = kernel::vinculador()->vinculo_recurso("js/jqueryui.extra.js"); + $files[] = kernel::vinculador()->vinculo_recurso("js/plugin_autosave.js"); + $files[] = kernel::vinculador()->vinculo_recurso("js/_comun/selector_localidad/selector_localidad.js"); + + return $files; + } + + function get_form($id_html = null) + { + if (!isset($this->form)) { + $this->form = kernel::localizador()->instanciar('operaciones\censo\datos_principales\form_datos_principales'); + $this->form->set_autoset_activo(true); + } + return $this->form; + } + + function get_form_localidad() + { + if (!isset($this->form_loc)) { + $this->form_loc = kernel::localizador()->instanciar('operaciones\censo\_comun\selector_localidad\form_localidad'); + } + return $this->form_loc; + } + + function prepare() + { + $form = $this->get_form(); + $this->add_var_js('autosave', $form->is_autoset_activo()); + $this->add_var_js('msj_sin_cambios', kernel::traductor()->trans('form_sin_cambios')); + $this->add_var_js('pueblo_originario_OTRO', preinscripcion::pueblo_originario_OTRO); + $url_identidad_genero = kernel::proyecto()->get_url_identidad_genero(); + $this->data['url_identidad_genero'] = $url_identidad_genero; + + $this->add_mensaje_js('msj_nro_documento_dni_leyenda', kernel::traductor()->trans('nro_documento.dni.leyenda')); + $this->add_mensaje_js('msj_nro_documento_dni_error', kernel::traductor()->trans('nro_documento.dni.error')); + $this->add_mensaje_js('msj_nro_documento_cuil_leyenda', kernel::traductor()->trans('nro_documento.cuil.leyenda')); + + $this->add_var_js('nro_documento_dni_dnt_min', comunes::NRO_DOCUMENTO_DNI_DNT_MIN); + $this->add_var_js('nro_documento_dni_dnt_max', comunes::NRO_DOCUMENTO_DNI_DNT_MAX); + + $this->add_var_js('tipo_documento_dni', comunes::TIPO_DOCUMENTO_DNI); + $this->add_var_js('tipo_documento_dnt', comunes::TIPO_DOCUMENTO_DNT); + $this->add_var_js('tipo_documento_cuil_cuit', comunes::TIPO_DOCUMENTO_CUIL_CUIT); + $this->add_var_js('tipo_documento_cedula_diplomatica', comunes::TIPO_DOCUMENTO_CEDULA_DIPLOMATICA); + $this->add_var_js('tipo_documento_pasaporte', comunes::TIPO_DOCUMENTO_PASAPORTE); + $this->data['url_img_nro_tramite_dni'] = kernel::vinculador()->vinculo_img('img/nro_de_tramite_dni.jpeg'); + + //obtengo el parametro de renaper + $parametro = kernel::proyecto()->get_mat_validacion_renaper(); + $this->add_var_js('mat_validacion_renaper', $parametro); + $this->data['mat_validacion_renaper'] = $parametro; + + $this->add_var_js('msg_guardado_datos_exitoso', false); + if (kernel::sesion()->esta_seteada('msg_guardado_datos_exitoso')) { + $this->add_var_js('msg_guardado_datos_exitoso', kernel::sesion()->get('msg_guardado_datos_exitoso')); + kernel::sesion()->borrar('msg_guardado_datos_exitoso'); + } + + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_error'), + 'exitoso' => false + )); + $datos_doc = $this->get_datos_documento(); + // Se combinan los datos estáticos (de documento y nacionalidad) + // con los datos con error del formulario. + $form->set_datos(array_merge($datos_doc, $form->get_datos())); + break; + case self::FORM_CAMBIOS_DESDE_IMPRESION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('cambios_desde_impresion'), + 'exitoso' => true, + 'cambios_desde_impresion' => true + )); + break; + case self::FORM_GUARDADO: + kernel::sesion()->set('msg_guardado_datos_exitoso', kernel::traductor()->trans('guardado_datos_exitoso')); + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_exitoso'), + 'exitoso' => true, + 'cambios_desde_impresion' => false + )); + default: + $form->inicializar(); + $datos = kernel::persona()->datos()->get_datos_formularios_preinsc(); + $form->set_datos($datos); + $this->add_var_js('validado_con_renaper',isset($datos['validado_con_renaper']) ? $datos['validado_con_renaper']: comunes::no); + } + + if ($this->controlador->vista()->control_faltantes_activado()) { + $this->marcar_faltantes(); + } + + $form->activar_csrf($this->generar_csrf()); + $this->add_form($form); + + $form_loc = $this->get_form_localidad(); + $form_loc->inicializar(); + $this->add_form($form_loc); + + $this->add_var_js('selector_localidad', kernel::load_template('_comun/selector_localidad/selector_localidad.twig')->render(array( + 'form_loc' => $form_loc + ))); + + $this->add_var_js('url_provincias', kernel::vinculador()->crear('censo', 'cascada_provincias')); + $this->add_var_js('url_departamentos', kernel::vinculador()->crear('censo', 'cascada_departamentos')); + $this->add_var_js('url_localidades', kernel::vinculador()->crear('censo', 'cascada_localidades')); + $this->add_var_js('url_cod_postales', kernel::vinculador()->crear('censo', 'cascada_cod_postales')); + $this->add_var_js('url_descr_localidad', kernel::vinculador()->crear('censo', 'get_descr_localidad')); + $this->add_var_js('url_lista_localidades', kernel::vinculador()->crear('censo', 'lista_localidades')); + $this->add_var_js('url_tipo_documentos', kernel::vinculador()->crear('censo', 'cascada_tipo_documento')); + $this->add_var_js('url_cascada_nac', kernel::vinculador()->crear('censo', 'cascada_nacionalidad')); + $this->add_var_js('url_tipo_documentos_validacion', kernel::vinculador()->crear('censo', 'datos_tipo_documento_validar')); + + $this->data['url_lista_localidades'] = kernel::vinculador()->crear('censo', 'lista_localidades'); + + $this->add_var_js('error_vacio', kernel::traductor()->trans('form_validacion_error.vacio')); + $this->add_var_js('ingresa_cp', false); + + $this->add_var_js('identidad_genero_especifique', comunes::GENERO_DIVERSIDAD_ESPECIFIQUE); + } + + protected function get_datos_documento() + { + $datos = kernel::persona()->datos()->get_datos_formularios_preinsc(); + + $datos_doc = []; + $datos_doc['pais_documento_desc'] = $datos['pais_documento_desc']; + $datos_doc['tipo_documento_desc'] = $datos['tipo_documento_desc']; + $datos_doc['tipo_documento'] = $datos['tipo_documento']; + $datos_doc['nacionalidad'] = $datos['nacionalidad']; + $datos_doc['nacionalidad_desc'] = $datos['nacionalidad_desc']; + $datos_doc['nro_documento'] = $datos['nro_documento']; + + return $datos_doc; + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_datos_salud.php b/src/siu/operaciones/censo/pagelet_datos_salud.php new file mode 100644 index 0000000..a90520f --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_datos_salud.php @@ -0,0 +1,72 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\censo\datos_salud\form_datos_salud'); + $this->form->set_autoset_activo(true); + } + return $this->form; + } + + function get_js_files() + { + $files = parent::get_js_files(); + $files[] = kernel::vinculador()->vinculo_recurso("js/plugin_autosave.js"); + return $files; + } + + function prepare() + { + $form = $this->get_form(); + $this->add_var_js('autosave', $form->is_autoset_activo()); + $this->add_var_js('msj_sin_cambios', kernel::traductor()->trans('form_sin_cambios')); + + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_error'), + 'exitoso' => false + )); + break; + case self::FORM_CAMBIOS_DESDE_IMPRESION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('cambios_desde_impresion'), + 'exitoso' => true, + 'cambios_desde_impresion' => true + )); + break; + case self::FORM_GUARDADO: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_exitoso'), + 'exitoso' => true, + 'cambios_desde_impresion' => false + )); + default: + $form->inicializar(); + $datos = kernel::persona()->datos()->get_datos_formularios_preinsc(); + $form->set_datos($datos); + } + + if ($this->controlador->vista()->control_faltantes_activado()) { + $this->marcar_faltantes(); + } + + $form->activar_csrf($this->generar_csrf()); + $this->add_form($form); + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_deportes.php b/src/siu/operaciones/censo/pagelet_deportes.php new file mode 100644 index 0000000..14baac9 --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_deportes.php @@ -0,0 +1,72 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\censo\deportes\form_deportes'); + $this->form->set_autoset_activo(true); + } + return $this->form; + } + + function get_js_files() + { + $files = parent::get_js_files(); + $files[] = kernel::vinculador()->vinculo_recurso("js/plugin_autosave.js"); + return $files; + } + + function prepare() + { + $form = $this->get_form(); + $this->add_var_js('autosave', $form->is_autoset_activo()); + $this->add_var_js('msj_sin_cambios', kernel::traductor()->trans('form_sin_cambios')); + + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_error'), + 'exitoso' => false + )); + break; + case self::FORM_CAMBIOS_DESDE_IMPRESION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('cambios_desde_impresion'), + 'exitoso' => true, + 'cambios_desde_impresion' => true + )); + break; + case self::FORM_GUARDADO: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_exitoso'), + 'exitoso' => true, + 'cambios_desde_impresion' => false + )); + default: + $form->inicializar(); + $datos = kernel::persona()->datos()->get_datos_formularios_preinsc(); + $form->set_datos($datos); + } + + if ($this->controlador->vista()->control_faltantes_activado()) { + $this->marcar_faltantes(); + } + + $form->activar_csrf($this->generar_csrf()); + $this->add_form($form); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_discapacidad.php b/src/siu/operaciones/censo/pagelet_discapacidad.php new file mode 100644 index 0000000..6570f1c --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_discapacidad.php @@ -0,0 +1,72 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\censo\discapacidad\form_discapacidad'); + $this->form->set_autoset_activo(true); + } + return $this->form; + } + + function get_js_files() + { + $files = parent::get_js_files(); + $files[] = kernel::vinculador()->vinculo_recurso("js/plugin_autosave.js"); + return $files; + } + + function prepare() + { + $form = $this->get_form(); + $this->add_var_js('autosave', $form->is_autoset_activo()); + $this->add_var_js('msj_sin_cambios', kernel::traductor()->trans('form_sin_cambios')); + $this->add_var_js('msj_faltan_datos_discapacidad', kernel::traductor()->trans('faltan_datos_discapacidad')); + $this->add_var_js('si', comunes::si); + + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_error'), + 'exitoso' => false + )); + break; + case self::FORM_CAMBIOS_DESDE_IMPRESION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('cambios_desde_impresion'), + 'exitoso' => true, + 'cambios_desde_impresion' => true + )); + break; + case self::FORM_GUARDADO: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_exitoso'), + 'exitoso' => true, + 'cambios_desde_impresion' => false + )); + default: + $form->inicializar(); + $datos = kernel::persona()->datos()->get_datos_formularios_preinsc(); + $form->set_datos($datos); + } + + if ($this->controlador->vista()->control_faltantes_activado()) { + $this->marcar_faltantes(); + } + + $form->activar_csrf($this->generar_csrf()); + $this->add_form($form); + } +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_documentacion.php b/src/siu/operaciones/censo/pagelet_documentacion.php new file mode 100644 index 0000000..c5bc821 --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_documentacion.php @@ -0,0 +1,148 @@ +vinculo_recurso("js/jqueryui.extra.js"); + return $files; + } + + function set_mensaje_error($mensaje) + { + $this->mensaje_error = $mensaje; + } + + function prepare() + { + $this->add_var_js('msj_confirmar_eliminar', kernel::traductor()->trans('msj_confirmar_eliminar')); + + $requisitos_a_presentar = kernel::persona()->datos()->get_requisitos_a_presentar(); + + $requisitos_aspirante = kernel::persona()->datos()->get_requisitos_aspirante(); + + $this->data['requisitos'] = []; + + $extensiones = array_column(g3::entidad('extensiones')->get_extensiones_permitidas(), 'extension'); + $this->data['extensiones'] = implode(", ", $extensiones); + + $max_tamanio_archivo = preg_replace('/[^0-9\.]/', '', ini_get('upload_max_filesize')); + $max_tamanio_post = preg_replace('/[^0-9\.]/', '', ini_get('post_max_size')); + + if ($max_tamanio_archivo < $max_tamanio_post) { + $tamanio_max = $max_tamanio_archivo; + } else { + $tamanio_max = $max_tamanio_post; + } + $this->data['tamanio_maximo'] = $tamanio_max; + $this->add_var_js('tamanio_maximo', $tamanio_max); + $this->add_var_js('error_tamanio_maximo', kernel::traductor()->trans('doc.msj_error_tamanio')); + + if (kernel::sesion()->esta_seteada('error_extension')) { + $this->data['error_extension'] = true; + kernel::sesion()->borrar('error_extension'); + } + + if (kernel::sesion()->esta_seteada('error_tamanio')) { + $this->data['error_tamanio'] = true; + kernel::sesion()->borrar('error_tamanio'); + } + + if (isset($this->mensaje_error)) { + $this->data['error'] = $this->mensaje_error; + } + + $error_cnx_rdi = false; + + if (!empty($requisitos_a_presentar)) { + foreach ($requisitos_a_presentar as $requisito) { + $clave = $requisito['requisito']; + + $clave_encriptada = util::catalogo()->generar_id($clave); + $conf = array(); + $conf['obligatorio_faltante'] =''; + $conf['url_subir'] = kernel::vinculador()->crear('censo', 'guardar_documentacion', array('documentacion', $clave_encriptada)); + $conf['url_eliminar'] = kernel::vinculador()->crear('censo', 'eliminar_documentacion', array('documentacion', $clave_encriptada)); + $conf['url_modificar'] = kernel::vinculador()->crear('censo', 'modificar_documentacion', array('documentacion', $clave_encriptada)); + $conf['url_descargar'] = kernel::vinculador()->crear('censo', 'descargar_documentacion', array('documentacion', $clave_encriptada)); + + $conf['header'] = $requisito['nombre']; + $conf['id_form'] = 'form_' . $clave_encriptada; + + $conf['descripcion'] = $requisito['descripcion']; + $conf['obligatorio'] = ($requisito['doc_digital_obligatorio_preinscripcion']=='S')?'(*)':''; + + $requisito_presentado = $this->buscar_requisito($requisitos_aspirante, $requisito['requisito']); + + try { + if (!empty($requisito_presentado['id_documento'])) { + $id_recurso = $requisito_presentado['id_documento']; + + $srv = kernel::proyecto()->rdi()->servicio($requisito['tipo_documento_digital']); + + $content = $srv->recuperarContenido($id_recurso); + $url = img::url_imagen($content); + + $clave_modificacion = 'requisito_' . $clave; + if (kernel::sesion()->esta_seteada($clave_modificacion)) { + kernel::sesion()->borrar($clave_modificacion); + } else { + if (img::check_base64_image($content)) { + $conf['imagen'] = $url; + } else { + $conf['imagen'] = kernel::vinculador()->vinculo_img('img_recurso.png'); + } + } + } + } catch (\Exception $e) { + kernel::log()->add_error($e); + $error_cnx_rdi = true; + break; + } + $this->data['requisitos'][$clave] = $conf; + } + $this->data['error_cnx_rdi'] = $error_cnx_rdi; + + if ($this->controlador->vista()->control_faltantes_activado()) { + + $this->marcar_faltantes(); + } + } + } + + function vinculo_recurso($path_relativo, $ns = false) + { + $ns = ($ns === false) ? kernel::localizador()->get_nombre_namespace_original() : $ns; + $alias = kernel::proyecto()->get_alias(); + return "$alias/$path_relativo"; + } + + //-------------------------------------------------------------------------- + + protected function buscar_requisito($requisitos, $buscado) + { + foreach ($requisitos as $requisito) { + if ($requisito['requisito'] == $buscado) { + return $requisito; + } + } + return null; + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_finalizado.php b/src/siu/operaciones/censo/pagelet_finalizado.php new file mode 100644 index 0000000..21b9df0 --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_finalizado.php @@ -0,0 +1,31 @@ +datos()->get_datos_inscripciones(); + } + + function get_action_reabrir() + { + return kernel::vinculador()->crear(kernel::ruteador()->get_id_operacion(), 'reabrir'); + } + + function prepare() + { + + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_financiamiento.php b/src/siu/operaciones/censo/pagelet_financiamiento.php new file mode 100644 index 0000000..7059ecb --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_financiamiento.php @@ -0,0 +1,72 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\censo\financiamiento\form_financiamiento'); + $this->form->set_autoset_activo(true); + } + return $this->form; + } + + function get_js_files() + { + $files = parent::get_js_files(); + $files[] = kernel::vinculador()->vinculo_recurso("js/plugin_autosave.js"); + return $files; + } + + function prepare() + { + $form = $this->get_form(); + $this->add_var_js('autosave', $form->is_autoset_activo()); + $this->add_var_js('msj_sin_cambios', kernel::traductor()->trans('form_sin_cambios')); + + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_error'), + 'exitoso' => false + )); + break; + case self::FORM_CAMBIOS_DESDE_IMPRESION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('cambios_desde_impresion'), + 'exitoso' => true, + 'cambios_desde_impresion' => true + )); + break; + case self::FORM_GUARDADO: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_exitoso'), + 'exitoso' => true, + 'cambios_desde_impresion' => false + )); + default: + $form->inicializar(); + $datos = kernel::persona()->datos()->get_datos_formularios_preinsc(); + $form->set_datos($datos); + } + + if ($this->controlador->vista()->control_faltantes_activado()) { + $this->marcar_faltantes(); + } + + $form->activar_csrf($this->generar_csrf()); + $this->add_form($form); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_formacion_acad.php b/src/siu/operaciones/censo/pagelet_formacion_acad.php new file mode 100644 index 0000000..5131a79 --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_formacion_acad.php @@ -0,0 +1,80 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\censo\formacion_acad\form_formacion_acad'); + } + return $this->form; + } + + function get_action_eliminar() + { + return kernel::vinculador()->crear('censo', 'eliminar_formacion_acad'); + } + + function get_datos_formacion_acad() + { + $datos = kernel::persona()->datos()->get_datos_formacion_acad(); + foreach ($datos as $key => $dato) { + $datos[$key]['LINK_EDITAR'] = kernel::vinculador()->crear('censo', 'editar', array('formacion_acad', $dato[catalogo::id])); + $datos[$key]['LINK_ELIMINAR'] = kernel::vinculador()->crear('censo', 'eliminar_formacion_acad', array('formacion_acad', $dato[catalogo::id])); + } + return $datos; + } + + function get_js_files() + { + $files = parent::get_js_files(); + $files[] = kernel::vinculador()->vinculo_recurso("js/jqueryui.extra.js"); + return $files; + } + + function prepare() + { + $form = $this->get_form(); + + if ($this->pantalla == self::ESTADO_EDICION) { + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_error'), + 'exitoso' => false + )); + break; + case self::FORM_GUARDADO: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_exitoso'), + 'exitoso' => true + )); + default: + $form->inicializar(); + $datos = $this->controlador->get_formacion_acad(); + $form->set_datos($datos); + } + } + + $form->activar_csrf($this->generar_csrf()); + $this->add_form($form); + + $this->data['cant_antecedentes'] = count($this->get_datos_formacion_acad()); + $this->data['modo'] = $this->pantalla; + + $this->add_var_js('msj_confirmar_eliminar', kernel::traductor()->trans('msj_confirmar_eliminar')); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_idiomas.php b/src/siu/operaciones/censo/pagelet_idiomas.php new file mode 100644 index 0000000..00cfb6b --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_idiomas.php @@ -0,0 +1,72 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\censo\idiomas\form_idiomas'); + $this->form->set_autoset_activo(true); + } + return $this->form; + } + + function get_js_files() + { + $files = parent::get_js_files(); + $files[] = kernel::vinculador()->vinculo_recurso("js/plugin_autosave.js"); + return $files; + } + + function prepare() + { + $form = $this->get_form(); + $this->add_var_js('autosave', $form->is_autoset_activo()); + $this->add_var_js('msj_sin_cambios', kernel::traductor()->trans('form_sin_cambios')); + + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_error'), + 'exitoso' => false + )); + break; + case self::FORM_CAMBIOS_DESDE_IMPRESION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('cambios_desde_impresion'), + 'exitoso' => true, + 'cambios_desde_impresion' => true + )); + break; + case self::FORM_GUARDADO: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_exitoso'), + 'exitoso' => true, + 'cambios_desde_impresion' => false + )); + default: + $form->inicializar(); + $datos = kernel::persona()->datos()->get_datos_formularios_preinsc(); + $form->set_datos($datos); + } + + if ($this->controlador->vista()->control_faltantes_activado()) { + $this->marcar_faltantes(); + } + + $form->activar_csrf($this->generar_csrf()); + $this->add_form($form); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_lista_forms.php b/src/siu/operaciones/censo/pagelet_lista_forms.php new file mode 100644 index 0000000..93a6819 --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_lista_forms.php @@ -0,0 +1,53 @@ +get_id_operacion(); + $menu_con_urls = array(); + + $forms = $this->controlador->vista()->get_forms(); + + if ($this->controlador->vista()->control_faltantes_activado()) { + $faltantes = $this->controlador->vista()->get_campos_faltantes(); + } else { + $faltantes = array(); + } + + foreach ($forms as $item) { + $menu_con_urls[] = array( + 'nombre' => $item, + 'url' => kernel::vinculador()->crear($operacion, 'index', $item), + 'activo' => $this->controlador->vista()->get_id_form_activo() == $item, + 'con_faltantes' => isset($faltantes[$item]) + ); + } + + return $menu_con_urls; + } + + function prepare() + { + $this->data['form_actual'] = $this->controlador->get_var('form_actual'); + if (kernel::persona()->datos()->hay_inscripcion_propuesta()) { + $this->data['mensaje_lateral'] = 'mensaje_carga_datos'; + $this->data['mostrar_menu'] = true; + } else { + $this->data['mensaje_lateral'] = 'mensaje_elegir_propuesta'; + $this->data['mostrar_menu'] = false; + } + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_propuesta.php b/src/siu/operaciones/censo/pagelet_propuesta.php new file mode 100644 index 0000000..181d083 --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_propuesta.php @@ -0,0 +1,81 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\censo\propuesta\form_propuesta'); + } + return $this->form; + } + + function get_js_files() + { + $files = parent::get_js_files(); + $files[] = kernel::vinculador()->vinculo_recurso("js/plugin_autosave.js"); + return $files; + } + + function get_action_eliminar() + { + return kernel::vinculador()->crear('censo', 'eliminar_preinscripcion'); + } + + function get_datos_inscripciones() + { + return kernel::persona()->datos()->get_datos_inscripciones(); + } + + function prepare() + { + $form = $this->get_form(); + $form->inicializar(); + $this->add_form($form); + + $this->add_var_js('url_propuestas', kernel::vinculador()->crear('censo', 'cascada_propuestas')); + $this->add_var_js('url_ubicaciones', kernel::vinculador()->crear('censo', 'cascada_ubicaciones')); + $this->add_var_js('url_modalidades', kernel::vinculador()->crear('censo', 'cascada_modalidades')); + $this->add_var_js('error_vacio', kernel::traductor()->trans('form_validacion_error.vacio')); + + $this->add_var_js('msj_confirmar_baja', kernel::traductor()->trans('msj_confirmar_baja')); + $this->add_var_js('msj_una_insc_posgrado_baja', kernel::traductor()->trans('msj_una_insc_posgrado_baja')); + $this->add_var_js('tipo_POSGRADO', propuesta::tipo_POSGRADO); + $this->add_var_js('cantidad_insc_posgrado', kernel::persona()->datos()->get_cantidad_inscripciones_posgrado()); + + $this->add_var_js('selector_propuesta', kernel::load_template('propuesta/selector_propuesta.twig')->render(array('form' => $form))); + + $cant_max_propuestas_insc = kernel::proyecto()->get_cant_max_propuestas_insc(); + $cantidad_inscripciones = kernel::persona()->datos()->get_cantidad_inscripciones(); + if ($cant_max_propuestas_insc == 0) { + // No hay límite de propuestas a inscribirse + $permitir_inscripciones = true; + } else { + $permitir_inscripciones = ($cantidad_inscripciones < $cant_max_propuestas_insc); + } + + $this->data['cant_inscripciones'] = $cantidad_inscripciones; + $this->data['permitir_inscripciones'] = $permitir_inscripciones; + + if (kernel::sesion()->esta_seteada('mensaje_primer_acceso')) { + $this->data['mensaje_primer_acceso'] = kernel::traductor()->trans(kernel::sesion()->get('mensaje_primer_acceso')); + kernel::sesion()->borrar('mensaje_primer_acceso'); + } + + $this->add_var_js('accion_eliminar', $this->get_action_eliminar()); + + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_tecnologia.php b/src/siu/operaciones/censo/pagelet_tecnologia.php new file mode 100644 index 0000000..66cbb6c --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_tecnologia.php @@ -0,0 +1,72 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\censo\tecnologia\form_tecnologia'); + $this->form->set_autoset_activo(true); + } + return $this->form; + } + + function get_js_files() + { + $files = parent::get_js_files(); + $files[] = kernel::vinculador()->vinculo_recurso("js/plugin_autosave.js"); + return $files; + } + + function prepare() + { + $form = $this->get_form(); + $this->add_var_js('autosave', $form->is_autoset_activo()); + $this->add_var_js('msj_sin_cambios', kernel::traductor()->trans('form_sin_cambios')); + + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_error'), + 'exitoso' => false + )); + break; + case self::FORM_CAMBIOS_DESDE_IMPRESION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('cambios_desde_impresion'), + 'exitoso' => true, + 'cambios_desde_impresion' => true + )); + break; + case self::FORM_GUARDADO: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_exitoso'), + 'exitoso' => true, + 'cambios_desde_impresion' => false + )); + default: + $form->inicializar(); + $datos = kernel::persona()->datos()->get_datos_formularios_preinsc(); + $form->set_datos($datos); + } + + if ($this->controlador->vista()->control_faltantes_activado()) { + $this->marcar_faltantes(); + } + + $form->activar_csrf($this->generar_csrf()); + $this->add_form($form); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/pagelet_turno_presentacion.php b/src/siu/operaciones/censo/pagelet_turno_presentacion.php new file mode 100644 index 0000000..abe0d54 --- /dev/null +++ b/src/siu/operaciones/censo/pagelet_turno_presentacion.php @@ -0,0 +1,98 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\censo\turno_presentacion\form_turno'); + } + $this->form->set_controlador($this->controlador); + return $this->form; + } + + function get_js_files() + { + $files = parent::get_js_files(); + $files[] = kernel::vinculador()->vinculo_recurso("js/jqueryui.extra.js"); + return $files; + } + + function get_accion_modificar_turno() + { + return kernel::vinculador()->crear('censo', 'modificar_turno', array('turno_presentacion')); + } + + function set_mensaje_error($mensaje) + { + $this->mensaje_error = $mensaje; + } + + function get_listado_turnos() + { + $datos = kernel::persona()->datos()->get_listado_turnos(); + foreach ($datos as $key => $dato) { + $datos[$key]['LINK_DEVOLVER'] = kernel::vinculador()->crear('censo', 'devolver_turno', array($dato['responsable_academica'])); + $datos[$key]['LINK_SELECCIONAR'] = kernel::vinculador()->crear('censo', 'seleccionar_turno', array($dato['responsable_academica'])); + } + return $datos; + } + + function get_accion_volver() + { + return kernel::vinculador()->crear('censo', 'volver_seleccionar_turno'); + } + + function prepare() + { + if ($this->pantalla == self::ESTADO_EDICION) { + // Selección de turno + $form = $this->get_form(); + $form->activar_csrf($this->generar_csrf()); + $this->add_form($form); + + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_error'), + 'exitoso' => false + )); + break; + case self::FORM_GUARDADO: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_exitoso'), + 'exitoso' => true + )); + default: + $form->inicializar(); + } + + $this->add_var_js('fecha_desde', $this->controlador->get_fecha_minima_turno()); + $this->add_var_js('fecha_hasta', $this->controlador->get_fecha_maxima_turno()); + $this->add_var_js('fechas_disponibles', $this->controlador->get_fechas_turnos_disponibles()); + $this->add_var_js('url_franjas', kernel::vinculador()->crear('censo', 'cascada_franjas_turnos')); + $this->add_var_js('ra', $this->controlador->get_ra_turno()); + } else { + // Listado de turnos por RA + $this->data['turnos'] = $this->get_listado_turnos(); + $this->add_var_js('msj_confirmar_baja', kernel::traductor()->trans('turno.msj_confirmar_baja')); + } + + $this->data['modo'] = $this->pantalla; + $this->add_var_js('msj_confirmar_eliminar', kernel::traductor()->trans('msj_confirmar_eliminar')); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/propuesta/default.css b/src/siu/operaciones/censo/propuesta/default.css new file mode 100644 index 0000000..4843e69 --- /dev/null +++ b/src/siu/operaciones/censo/propuesta/default.css @@ -0,0 +1,14 @@ +@media screen and (max-width: 700px) { + table { + display: block; + overflow-x: auto; + } +} + +#propuesta .js-observaciones-icon { + cursor: pointer; +} + +#propuesta .js-observaciones { + display: none; +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/propuesta/default.twig b/src/siu/operaciones/censo/propuesta/default.twig new file mode 100644 index 0000000..b290dd8 --- /dev/null +++ b/src/siu/operaciones/censo/propuesta/default.twig @@ -0,0 +1,76 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% set form = this.get_form() %} + {% autoescape false %} + + {% if this.data.mensaje_primer_acceso %} +
+ {{ this.data.mensaje_primer_acceso|trans }} +
+ {% else %} + {% if this.data.cant_inscripciones == 0 %} +
+ {{'sin_inscripciones'|trans|raw}} +
+ {% else %} +
+

{{'propuestas_elegidas'|trans}}

+ + + + + + + + + + + + + + + {% for item in this.get_datos_inscripciones() %} + + + + + + + + + + + + + + {% endfor %} + +
{{'responsable_academica'|trans}}{{'propuesta'|trans}}{{'tipo_de_propuesta'|trans}}{{'ubicacion'|trans}}{{'modalidad'|trans}}{{'fecha_fin_vigencia'|trans}}{{'observaciones'|trans}} 
{{item.ra_nombre}}{{item.propuesta_nombre}}{{item.tipo_propuesta_descr}}{{item.ubicacion_nombre}}{{item.modalidad_nombre}}{{item.fecha_fin_vigencia_visual}} + {% if item.observaciones %} + + {% endif %} + + {% if item.estado != 'I' %} + + {% endif %} +
+ {{'pre_prop_observaciones'|trans}} {{item.observaciones}} +
+
+ {% endif %} + {% endif %} + + {% if this.data.permitir_inscripciones %} +
+ +
+ {% endif %} + + {% endautoescape %} + +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/propuesta/form_propuesta.php b/src/siu/operaciones/censo/propuesta/form_propuesta.php new file mode 100644 index 0000000..1e7a8ea --- /dev/null +++ b/src/siu/operaciones/censo/propuesta/form_propuesta.php @@ -0,0 +1,99 @@ +crear('censo', 'guardar_propuesta', array('propuesta')); + } + + protected function generar_definicion() + { + $this->set_campo('responsable_academica', array( + form::label => 'responsable_academica', + form::obligatorio => true, + form::filtro => validador::TIPO_TEXTO, + form::elemento => array('tipo' => 'select'), + form::validar_select => true, + form::multi_options => util::opciones()->get_responsables_academicas(), + form::clase_css => 'js-unidad_academica', + form::largo => 5 + )); + + $this->set_campo('propuesta', array( + form::label => 'propuesta', + form::obligatorio => true, + form::filtro => validador::TIPO_TEXTO, + form::elemento => array('tipo' => 'select'), + form::validar_select => false, + form::multi_options => array(), // Las opciones se cargan por AJAX en cascada + form::readonly => true, + form::largo => 5 + )); + + $this->set_campo('ubicacion', array( + form::label => 'ubicacion', + form::obligatorio => true, + form::filtro => validador::TIPO_TEXTO, + form::elemento => array('tipo' => 'select'), + form::validar_select => false, + form::multi_options => array(), // Las opciones se cargan por AJAX en cascada + form::readonly => true, + form::largo => 5 + )); + + $this->set_campo('modalidad', array( + form::label => 'modalidad', + form::obligatorio => true, + form::filtro => validador::TIPO_TEXTO, + form::elemento => array('tipo' => 'select'), + form::validar_select => false, + form::multi_options => array(), // Las opciones se cargan por AJAX en cascada + form::readonly => true + )); + } + + function validar() + { + $valido = parent::validar(); + + // Se validan los datos de los selects + if ($valido) { + $ra = $this->get_dato('responsable_academica'); + $propuestas = array_keys(g3::propuestas()->get_propuestas_disponibles_preinscripcion($ra)); + $propuesta = $this->get_dato('propuesta'); + if (!in_array($propuesta, $propuestas)) { + $valido = false; + } else { + $ubicaciones = array_keys(g3::propuestas()->get_ubicaciones_propuesta($propuesta)); + $ubicacion = $this->get_dato('ubicacion'); + if (!in_array($ubicacion, $ubicaciones)) { + $valido = false; + } else { + $modalidades = array_keys(g3::propuestas()->get_modalidades_propuesta($propuesta, $ubicacion)); + $modalidad = $this->get_dato('modalidad'); + if (!in_array($modalidad, $modalidades)) { + $valido = false; + } + } + } + } + + return $valido; + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/propuesta/pagelet_propuesta.js b/src/siu/operaciones/censo/propuesta/pagelet_propuesta.js new file mode 100644 index 0000000..ab03819 --- /dev/null +++ b/src/siu/operaciones/censo/propuesta/pagelet_propuesta.js @@ -0,0 +1,248 @@ +function cerrar_popup() +{ + $.facebox.close(); +} + +kernel.renderer.registrar_pagelet('propuesta', function (info) { + var id = '#' + info.id; + + return { + + onload: function () { + + $('#btnSelectorCarrera').on('click', function () { + $.facebox(info.selector_propuesta); + }); + + inicializar_popup(); + + $('.js-observaciones-icon').on('click', function () { + var id = $(this).data('id'); + $(".js-observaciones#"+id).toggle(); + }); + + $('.btnEliminar').on('click', function () { + var ok = accion_eliminar($(this).data('tipo_de_propuesta'), $(this).data('propuesta_nombre')); + if (ok) { + $.ajax({ + url: info.accion_eliminar, + type: 'post', + dataType: 'json', + data: {id: $(this).data('id')}, + async: true, + success: function (data) { + location.reload(); + } + }); + } + }); + + } + } + + function accion_eliminar(tipo_de_propuesta, propuesta_nombre) + { + var mensaje; + if ((tipo_de_propuesta === parseInt(info.tipo_POSGRADO)) && (parseInt(info.cantidad_insc_posgrado) === 1)) { + mensaje = info.msj_una_insc_posgrado_baja; + } else { + mensaje = info.msj_confirmar_baja + propuesta_nombre + '?'; + } + if (confirm(mensaje)) { + return true; + } + return false; + } + + function inicializar_popup() + { + registrar_cascadas(); + + $(document).on("click", "#guardar_propuesta", function (event) { + + event.preventDefault(); + + $(this).attr('disabled', true); + $(this).prop('disabled', true); + $(this).addClass('disabled'); + + if (validar()) { + $('#form_propuesta').submit(); + cerrar_popup(); + return true; + } else { + $(this).attr('disabled', false); + $(this).prop('disabled', false); + $(this).removeClass('disabled'); + return false; + } + + }); + } + + function validar() + { + var valido; + + valido = validar_campo('responsable_academica'); + valido = valido & validar_campo('propuesta'); + valido = valido & validar_campo('ubicacion'); + valido = valido & validar_campo('modalidad'); + + return valido; + } + + function validar_campo(campo) + { + var valor = $('#form_propuesta-' + campo).val(); + if ((valor === no_seleccion) || (valor === null)) { + $('#msg-' + campo).html(info.error_vacio); + $('#cg-' + campo).addClass('error'); + return false; + } else { + $('#msg-' + campo).html(''); + $('#cg-' + campo).removeClass('error'); + return true; + } + } + + //-------------------------------------------------------------------------- + //---- Manejo de cascadas -------------------------------------------------- + //-------------------------------------------------------------------------- + + function registrar_cascadas() + { + $(document).on('change', '#form_propuesta-responsable_academica', function () { + cambio_responsable_academica(); + }); + + $(document).on('change', '#form_propuesta-propuesta', function () { + cambio_propuesta(); + }); + + $(document).on('change', '#form_propuesta-ubicacion', function () { + cambio_ubicacion(); + }); + } + + //-------------------------------------------------------------------------- + + function cambio_responsable_academica() + { + var ra = $('#form_propuesta-responsable_academica').val(); + if (ra !== no_seleccion) { + buscar_propuestas(ra); + set_solo_lectura('form_propuesta-propuesta', false); + } else { + resetear_propuestas(); + } + resetear_ubicaciones(); + resetear_modalidades(); + } + + function cambio_propuesta() + { + var propuesta = $('#form_propuesta-propuesta').val(); + if (propuesta !== no_seleccion) { + buscar_ubicaciones(propuesta); + set_solo_lectura('form_propuesta-ubicacion', false); + } else { + resetear_ubicaciones(); + resetear_modalidades(); + } + } + + function cambio_ubicacion() + { + var ubicacion = $('#form_propuesta-ubicacion').val(); + var propuesta = $('#form_propuesta-propuesta').val(); + if (ubicacion !== no_seleccion) { + buscar_modalidades(propuesta, ubicacion); + set_solo_lectura('form_propuesta-modalidad', false); + } else { + resetear_modalidades(); + } + } + + //-------------------------------------------------------------------------- + + function resetear_propuestas() + { + set_solo_lectura('form_propuesta-propuesta', true); + $('#form_propuesta-propuesta').children().remove(); + resetear_ubicaciones(); + resetear_modalidades(); + } + + function resetear_ubicaciones() + { + set_solo_lectura('form_propuesta-ubicacion', true); + $('#form_propuesta-ubicacion').children().remove(); + } + + function resetear_modalidades() + { + set_solo_lectura('form_propuesta-modalidad', true); + $('#form_propuesta-modalidad').children().remove(); + } + + //-------------------------------------------------------------------------- + + function buscar_propuestas(_responsable_academica) + { + $.ajax({ + url: info.url_propuestas, + dataType: 'json', + data: {ra: _responsable_academica}, + type: 'post', + success: function (data) { + $('#form_propuesta-propuesta').children().remove(); + $.each(data, function (key, value) { + $('#form_propuesta-propuesta').append( + $('').val(key).html(value) + ); + }); + ordenar_combo('form_propuesta-propuesta'); + } + }); + } + + function buscar_ubicaciones(_propuesta) + { + $.ajax({ + url: info.url_ubicaciones, + dataType: 'json', + data: {propuesta: _propuesta}, + type: 'post', + success: function (data) { + $('#form_propuesta-ubicacion').children().remove(); + $.each(data, function (key, value) { + $('#form_propuesta-ubicacion').append( + $('').val(key).html(value) + ); + }); + ordenar_combo('form_propuesta-ubicacion'); + } + }); + } + + function buscar_modalidades(_propuesta, _ubicacion) + { + $.ajax({ + url: info.url_modalidades, + dataType: 'json', + data: {propuesta: _propuesta, ubicacion: _ubicacion}, + type: 'post', + success: function (data) { + $('#form_propuesta-modalidad').children().remove(); + $.each(data, function (key, value) { + $('#form_propuesta-modalidad').append( + $('').val(key).html(value) + ); + }); + ordenar_combo('form_propuesta-modalidad'); + } + }); + } + +}); \ No newline at end of file diff --git a/src/siu/operaciones/censo/propuesta/selector_propuesta.twig b/src/siu/operaciones/censo/propuesta/selector_propuesta.twig new file mode 100644 index 0000000..a2d9b6d --- /dev/null +++ b/src/siu/operaciones/censo/propuesta/selector_propuesta.twig @@ -0,0 +1,29 @@ +
+ {% autoescape false %} + {{ form.encabezado }} + +
+

{{'seleccion_propuesta'|trans}}

+
+ {{ form.control_group('responsable_academica') }} +
+
+ {{ form.control_group('propuesta') }} +
+
+ {{ form.control_group('ubicacion') }} +
+
+ {{ form.control_group('modalidad') }} +
+
+ +
+ {{ form.submit_button('guardar_propuesta', 'inscribir_propuesta')}} + +
+ + +{% endautoescape %} + +
diff --git a/src/siu/operaciones/censo/tecnologia/default.twig b/src/siu/operaciones/censo/tecnologia/default.twig new file mode 100644 index 0000000..791838b --- /dev/null +++ b/src/siu/operaciones/censo/tecnologia/default.twig @@ -0,0 +1,58 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% set form = this.get_form() %} + {% autoescape false %} + {{ form.encabezado }} +
+
+
+

{{this.get_nombre()|trans}}

+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+
+ + {%if form.hay_visibles_agrupado('dispon_pc') %} +
+

{{'dispon_pc'|trans}}

+
+
+ {{ form.checkbox('alu_tec_pc_casa') }} + {{ form.checkbox('alu_tec_pc_trab') }} + {{ form.checkbox('alu_tec_pc_univ') }} + {{ form.checkbox('alu_tec_pc_otro') }} +
+
+
+ {% endif %} + +
+ {%if form.hay_visibles_agrupado('accede_internet_en') %} +
+

{{'accede_internet_en'|trans}}

+
+
+ {{ form.checkbox('alu_tec_int_movil') }} + {{ form.checkbox('alu_tec_int_casa') }} + {{ form.checkbox('alu_tec_int_trab') }} + {{ form.checkbox('alu_tec_int_univ') }} + {{ form.checkbox('alu_tec_int_otro') }} +
+
+
+ {% endif %} +
+ +
+
+
+ {{ form.submit_button('guardar', 'guardar_datos_personales')}} +
+
+
+ + {% endautoescape %} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/tecnologia/form_tecnologia.php b/src/siu/operaciones/censo/tecnologia/form_tecnologia.php new file mode 100644 index 0000000..b1ddadf --- /dev/null +++ b/src/siu/operaciones/censo/tecnologia/form_tecnologia.php @@ -0,0 +1,119 @@ +crear('censo', 'guardar', array('tecnologia')); + } + + protected function generar_definicion() + { + //---- Dispone de PC -------------------------------------------------- + $this->set_campo('alu_tec_pc_casa', array( + form::label => 'alu_tec_pc_casa', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_tec_pc_trab', array( + form::label => 'alu_tec_pc_trab', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_tec_pc_univ', array( + form::label => 'alu_tec_pc_univ', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_tec_pc_otro', array( + form::label => 'alu_tec_pc_otro', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + //---- Lugares de acceso a Internet ------------------------------------ + $this->set_campo('alu_tec_int_casa', array( + form::label => 'alu_tec_int_casa', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_tec_int_trab', array( + form::label => 'alu_tec_int_trab', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_tec_int_univ', array( + form::label => 'alu_tec_int_univ', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_tec_int_movil', array( + form::label => 'alu_tec_int_movil', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + + $this->set_campo('alu_tec_int_otro', array( + form::label => 'alu_tec_int_otro', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 'S', + form::unchecked_value => 'N', + )); + } + +} +?> diff --git a/src/siu/operaciones/censo/tecnologia/pagelet_tecnologia.js b/src/siu/operaciones/censo/tecnologia/pagelet_tecnologia.js new file mode 100644 index 0000000..ebec64b --- /dev/null +++ b/src/siu/operaciones/censo/tecnologia/pagelet_tecnologia.js @@ -0,0 +1,60 @@ +kernel.renderer.registrar_pagelet('tecnologia', function(info) { + var id = '#' + info.id; + + return { + + onload: function() { + // Si corresponde, se activa el autosave + if (info.autosave) { + $(id).autosave(); + } + + $('#form_tecnologia').submit(function() { + var hubo_cambios = formulario_hubo_cambios(); + if (hubo_cambios) { + var $form = $(this); + kernel.ajax.load($form.attr('action'), id, { + historia: false, + type: 'POST', + data: $form.serializeArray(), + success: function(response) { + if (response.info_estado.exitoso) { + if (response.info_estado.cambios_desde_impresion) { + document.location.reload(true); + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-success', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + } else { + kernel.ui.show_mensaje(response.info_estado.mensaje, { + tipo: 'alert-error', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + + // Si corresponde, se desactiva el autosave + if (info.autosave) { + $(id).autosave('disable'); + } + kernel.renderer.pagelet('tecnologia').onload(); + } + }); + } else { + kernel.ui.show_mensaje(info.msj_sin_cambios, { + tipo: 'alert-info', + until_interaction: false, + timeout: 5000, + fadeout: 2000 + }); + } + return false; + }); + } + }; +}); \ No newline at end of file diff --git a/src/siu/operaciones/censo/template.twig b/src/siu/operaciones/censo/template.twig new file mode 100644 index 0000000..d957474 --- /dev/null +++ b/src/siu/operaciones/censo/template.twig @@ -0,0 +1,50 @@ +{% extends "kernel/dos_columnas.twig" %} +{% block titulo_operacion %} + +
+

+ {{"titulo_datos_personales"|trans}} +

+ {% if this.hay_inscripciones() %} + + {% endif %} +
+ +{% if this.hay_cuenta_vinculada() %} +
+ + {{ this.get_cuenta_vinculada()|raw }} +
+{% endif %} + +{% if this.hay_cambios_desde_impresion() %} + +{% endif %} + +{% if this.control_faltantes_activado() %} +
+ {{ this.get_mensaje_impresion_campos_faltantes() }} ({{'ocultar'|trans}}) +
+{% endif %} + +{% if this.get_mensaje_error_email() %} +
+ {{ this.get_mensaje_error_email() }} +
+{% endif %} +{% endblock %} +{% block columna_1 %} + {{ lista_forms.render }} +{% endblock %} +{% block columna_2 %} + {# formulario es un pagelet dinámico que cambia de acuerdo a la url #} + {{ formulario.render }} +{% endblock %} diff --git a/src/siu/operaciones/censo/template_finalizado.twig b/src/siu/operaciones/censo/template_finalizado.twig new file mode 100644 index 0000000..a001f2d --- /dev/null +++ b/src/siu/operaciones/censo/template_finalizado.twig @@ -0,0 +1,15 @@ +{% extends "kernel/una_columna_sin_titulo.twig" %} +{% block columna_1 %} +
+

+ {{"titulo_datos_personales"|trans}} +

+ +
+ {{ finalizado.render }} + +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/turno_presentacion/default.css b/src/siu/operaciones/censo/turno_presentacion/default.css new file mode 100644 index 0000000..6bbee82 --- /dev/null +++ b/src/siu/operaciones/censo/turno_presentacion/default.css @@ -0,0 +1,20 @@ +#turno_presentacion .td-etiqueta { + width: 80px; +} + +#turno_presentacion .msj-descripcion { + padding: 5px; +} + +#turno_presentacion .cursor-pointer { + cursor: pointer; + background-color: white; +} + +#turno_presentacion .mensaje { + padding: 8px; +} + +#turno_presentacion #form_turno-franja { + width: 150px; +} diff --git a/src/siu/operaciones/censo/turno_presentacion/default.twig b/src/siu/operaciones/censo/turno_presentacion/default.twig new file mode 100644 index 0000000..4d90974 --- /dev/null +++ b/src/siu/operaciones/censo/turno_presentacion/default.twig @@ -0,0 +1,96 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% autoescape false %} + +
+
+
+

{{this.get_nombre()|trans}}

+
+
+
+
+ + {% if this.data.modo == 'listado' %} + {#---- Pantalla listado ----#} + + {#---- Si no hay turnos ----#} + {% if this.data.turnos is empty %} + +
{{ 'turno.sin_turnos' | trans }}
+ + {#---- Si hay turnos ----#} + {% else %} +
+

+ {{ 'turno.info' | trans }} +

+
+
+ + + + + + + + + + + + {% for turno in this.data.turnos %} + + + + + + + + {% endfor %} + +
{{'turno.ra' | trans}}{{'turno.fecha' | trans}}{{'turno.hora' | trans}}{{'turno.operador' | trans}} 
{{ turno.responsable_academica_nombre }}{{ turno.fecha }}{{ turno.hora }}{{ turno.operador }} + {% if turno.asignado %} + + {% else %} + + {% endif %} +
+
+ {% endif %} + {% else %} + {#---- Pantalla alta / edición ----#} + {% set form = this.get_form() %} + {{ form.encabezado }} +
+

+ {{ 'sel_turno.descripcion'|trans }} +

+
+ +
+

{{'turno'|trans}}

+
+
+ {{ form.control_group('fecha', 'span4') }} + {{ form.control_group('franja', 'span4') }} +
+
+
+ +
+
+
+ + {{ 'cancelar'|trans|capitalize }} + + {{ form.submit_button('guardar', 'sel_turno.confirmar')}} +
+
+
+ + {% endif %} + +{% endautoescape %} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/censo/turno_presentacion/form_turno.php b/src/siu/operaciones/censo/turno_presentacion/form_turno.php new file mode 100644 index 0000000..8e85c47 --- /dev/null +++ b/src/siu/operaciones/censo/turno_presentacion/form_turno.php @@ -0,0 +1,54 @@ +crear('censo', 'guardar_turno', array($this->controlador->get_ra_turno())); + } + + function set_controlador($controlador) + { + $this->controlador = $controlador; + } + + protected function generar_definicion() + { + $this->set_campo('fecha', array( + form::label => 'sel_turno.fecha', + form::filtro => validador::TIPO_DATE, + form::filtro_params => array('format' => 'd/m/Y', + 'allowempty' => true), + form::clase_css => 'date input-small cursor-pointer', + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + form::readonly => 'readonly' + )); + + $this->set_campo('franja', array( + form::label => 'sel_turno.franja', + form::obligatorio => true, + form::filtro => validador::TIPO_TEXTO, + form::elemento => array('tipo' => 'select'), + form::validar_select => false, + form::multi_options => array(), // Las opciones se cargan por AJAX en cascada + form::readonly => 'readonly', + )); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/censo/turno_presentacion/pagelet_turno_presentacion.js b/src/siu/operaciones/censo/turno_presentacion/pagelet_turno_presentacion.js new file mode 100644 index 0000000..b051e96 --- /dev/null +++ b/src/siu/operaciones/censo/turno_presentacion/pagelet_turno_presentacion.js @@ -0,0 +1,71 @@ +var _info; + +kernel.renderer.registrar_pagelet('turno_presentacion', function(info) { + _info = info; + var id = '#' + info.id; + return { + onload: function() { + + //---- Date Picker ------------------------------------------------- + $.datepicker.setDefaults($.datepicker.regional["es"]); + $(id).find('input.date').datepicker({ + changeMonth: true, + changeYear: true, + firstDay: 0, + minDate: info.fecha_desde, + maxDate: info.fecha_hasta, + beforeShowDay: function(fecha) { + fecha = $.datepicker.formatDate('d/m/yy', fecha); + var habilitada = jQuery.inArray(fecha, info.fechas_disponibles) !== -1; + return [habilitada, '', '']; + }, + onSelect: seleccion_fecha + }); + + $('.js-btnEliminar').on('click', function() { + var ok = accion_eliminar($(this).data('ra_nombre')); + if (!ok) { + return false; + } + }); + } + }; + + function accion_eliminar(ra_nombre) + { + var mensaje; + mensaje = info.msj_confirmar_baja + ra_nombre + '?'; + if (confirm(mensaje)) { + return true; + } + return false; + } + +}); + +//------------------------------------------------------------------------------ + +function seleccion_fecha() +{ + var _fecha = $('#form_turno-fecha').val(); + + $.ajax({ + url: _info.url_franjas, + dataType: 'json', + data: { + fecha: _fecha, + ra: _info.ra + }, + type: 'post', + success: function(data) { + $('#form_turno-franja').children().remove(); + $.each(data, function(key, value) { + $('#form_turno-franja').append( + $('').val(key).html(value) + ); + }); + ordenar_combo('form_turno-franja'); + set_solo_lectura('form_turno-franja', false); + } + }); +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/vista.php b/src/siu/operaciones/censo/vista.php new file mode 100644 index 0000000..d30663e --- /dev/null +++ b/src/siu/operaciones/censo/vista.php @@ -0,0 +1,223 @@ +controlar_estado(); + kernel::pagina()->set_etiqueta('titulo', kernel::traductor()->trans('carga_datos_censales')); + $clase = 'operaciones\censo\pagelet_lista_forms'; + $pl = kernel::localizador()->instanciar($clase, 'lista_forms'); + $this->add_pagelet($pl); + + } + + protected function controlar_estado() + { + // Si el aspirante fue inscripto en G3, se fuerza el cierre de sesión. + // En adelante, sus trámites serán realizados en la interfaz de Autogestión. + if (kernel::persona()->datos()->get_estado_cuenta_preinscripcion() == preinscripcion::estado_inscripto) { + kernel::sesion()->cerrar(); + throw new NuevoRequest('acceso', 'index'); + } + } + + function get_action_imprimir() + { + return kernel::vinculador()->crear('censo', 'imprimir', array($this->get_id_form_activo())); + } + + function get_action_finalizar() + { + return kernel::vinculador()->crear('censo', 'finalizar'); + } + + function hay_inscripciones() + { + $cantidad_inscripciones = kernel::persona()->datos()->get_cantidad_inscripciones(); + return $cantidad_inscripciones > 0; + } + + function get_url_ocultar_msg_impr() + { + return kernel::vinculador()->crear('censo', 'ocultar_msg_impr', array($this->get_id_form_activo())); + } + + function get_mensaje_impresion_campos_faltantes() + { + $mje = 'impresion_campos_faltantes'; + + // Turno de presentación (parámetro 'carga_turno_presentacion') + if (kernel::proyecto()->carga_turno_presentacion()) { + + $turnos = kernel::persona()->datos()->get_listado_turnos(); + // Si hay turnos de presentación de documentación muestro un mensaje diferente + if (!empty($turnos)) { + $mje = 'impresion_campos_faltantes_y_turno'; + } + + } + + return kernel::traductor()->trans($mje); + } + + //-------------------------------------------------------------------------- + //---- Control de campos faltantes ----------------------------------------- + //-------------------------------------------------------------------------- + + function activar_control_faltantes() + { + kernel::sesion()->set('modo_control_faltantes', true); + } + + function desactivar_control_faltantes() + { + kernel::sesion()->borrar('modo_control_faltantes'); + } + + function control_faltantes_activado() + { + return kernel::sesion()->esta_seteada('modo_control_faltantes'); + } + + function hay_cambios_desde_impresion() + { + return $this->controlador->hay_cambios_desde_impresion(); + } + + function get_mensaje_error_email(){ + $this->error_mail = ''; + if (kernel::sesion()->esta_seteada('error_mail')) { + $this->error_mail = kernel::sesion()->get('error_mail'); + } + return $this->error_mail; + } + + function get_campos_faltantes() + { + if (!isset($this->campos_faltantes)) { + $this->campos_faltantes = kernel::persona()->datos()->get_datos_faltantes($this); + } + if (empty($this->campos_faltantes)) { + $this->desactivar_control_faltantes(); + } + return $this->campos_faltantes; + } + + //-------------------------------------------------------------------------- + + function get_forms_visibles() + { + $salida = array('propuesta'); + foreach (static::$FORMS as $seccion) { + if ($seccion != 'propuesta') { + if (util::form()->hay_visibles_seccion($seccion)) { + $salida[] = $seccion; + } + } + } + + // Datos de salud / Discapacidad + $salida[] = 'datos_salud'; + + // Documentos digitales + if (kernel::proyecto()->usa_rdi()) { + $salida[] = 'documentacion'; + } + + // Turno de presentación (parámetro 'carga_turno_presentacion') + if (kernel::proyecto()->carga_turno_presentacion()) { + + $turnos = kernel::persona()->datos()->get_listado_turnos(); + // Si hay turnos de presentación de documentación muestro la solapa + if (!empty($turnos)) { + $salida[] = 'turno_presentacion'; + } + + } + + if (kernel::persona()->datos()->hay_insc_posgrado()) { + // Se agregan pagelets para datos de posgrado + $salida = array_merge($salida, static::$FORMS_POSGRADO); + } + return $salida; + } + + function get_forms() + { + if (kernel::persona()->datos()->hay_inscripcion_propuesta()) { + return $this->get_forms_visibles(); + } + } + + function existe_form($id) + { + return in_array($id, $this->get_forms_visibles()); + } + + function get_id_form_activo() + { + return $this->id_form_activo; + } + + function set_form_activo($pagelet) + { + $this->form_activo = $pagelet; + $this->id_form_activo = $pagelet->get_id(); + $this->add_pagelet($pagelet, 0, 'formulario'); + } + + function pagelet($id) + { + if (isset($this->pagelets[$id])) { + return parent::pagelet($id); + } + + if ($this->existe_form($id)) { + $clase = "operaciones\censo\pagelet_$id"; + return kernel::localizador()->instanciar($clase, $id); + } + + throw new error_preinscripcion_seguridad("el pagelet '$id' no existe"); + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/censo/vista_finalizado.php b/src/siu/operaciones/censo/vista_finalizado.php new file mode 100644 index 0000000..9e85ca2 --- /dev/null +++ b/src/siu/operaciones/censo/vista_finalizado.php @@ -0,0 +1,25 @@ +set_template('template_finalizado'); + + $clase = 'operaciones\censo\pagelet_finalizado'; + $pl = kernel::localizador()->instanciar($clase, 'finalizado'); + $this->add_pagelet($pl); + + kernel::pagina()->set_etiqueta('titulo', kernel::traductor()->trans('carga_datos_censales')); + } + + function get_action_imprimir() + { + return kernel::vinculador()->crear(kernel::ruteador()->get_id_operacion(), 'imprimir'); + } +} + diff --git a/src/siu/operaciones/config_form/configuracion/default.css b/src/siu/operaciones/config_form/configuracion/default.css new file mode 100644 index 0000000..08e28ca --- /dev/null +++ b/src/siu/operaciones/config_form/configuracion/default.css @@ -0,0 +1,8 @@ +.selector { + padding-right: 10px; +} +.label-obligatorio { + font-weight:bold; + font-style:italic; + padding-top: 2px; +} \ No newline at end of file diff --git a/src/siu/operaciones/config_form/configuracion/default.twig b/src/siu/operaciones/config_form/configuracion/default.twig new file mode 100644 index 0000000..4c15dd8 --- /dev/null +++ b/src/siu/operaciones/config_form/configuracion/default.twig @@ -0,0 +1,48 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% set form = this.get_form() %} + {% set form_tipos_propuesta = this.get_form_tipos_propuesta() %} + {% autoescape false %} + + {{ form_tipos_propuesta.encabezado }} + + {{ 'tipo_de_propuesta'|trans }} (*) + + + {{ form_tipos_propuesta.elemento('tipo_de_propuesta') }} + + + + {% if this.hay_tipo_propuesta_seleccionado() %} + {{ form.encabezado }} +
+
+
+ {{ form.submit_button('guardar', 'guardar')}} +
+
+
+
+ + {{form.generar_salida_html()}} + + + + {% endif %} + {% endautoescape %} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/config_form/configuracion/form_configuracion.php b/src/siu/operaciones/config_form/configuracion/form_configuracion.php new file mode 100644 index 0000000..54cb6c8 --- /dev/null +++ b/src/siu/operaciones/config_form/configuracion/form_configuracion.php @@ -0,0 +1,178 @@ +crear('config_form', 'guardar', array('configuracion')); + } + + function control_group($campo, $nombre = '' ) + { + $html = ''; + $html .= '' . $campo . ''; + $html .= '' . kernel::traductor()->trans($campo) . ''; + $html .= '' . $this->elemento($campo . '_visible') . ''; + $html .= '' . $this->elemento($campo . '_obligatorio') . ''; + $html .= '' . $this->elemento($campo . '_se_imprime') . ''; + $html .= '' . $this->elemento($campo . '_genera_reporte') . ''; + $html .= ''; + return $html; + } + + function generar_salida_html() + { + $campos_pagelets = util::form()->get_campos_secciones(); + $campos_configurables = util::form()->get_campos_configurables(); + $html = ''; + foreach ($campos_pagelets as $nombre_pagelet => $campos_secciones) { + $html .= '
'; + $html .= ""; + $html .= '

' . kernel::traductor()->trans('pantalla') . ': ' . kernel::traductor()->trans($nombre_pagelet) . '

'; + $html .= '
'; + foreach ($campos_secciones as $nombre_seccion => $campos_seccion) { + $html .= " + "; + $html .= " + + "; + $html .= " + + + + + + + "; + foreach ($campos_seccion as $campo) { + if (in_array($campo, $campos_configurables)) { + $html .= $this->control_group($campo); + } + } + $html .= " +
+

" . kernel::traductor()->trans('seccion') . ': ' . kernel::traductor()->trans($nombre_seccion) . "

+
" . kernel::traductor()->trans('campo') . "" . kernel::traductor()->trans('etiqueta') . "" . kernel::traductor()->trans('visible') . "" . kernel::traductor()->trans('obligatorio') . "" . kernel::traductor()->trans('se_imprime') . "" . kernel::traductor()->trans('genera_reporte') . "
\n"; + } + $html .= '
'; + $html .= '
'; + } + return $html; + } + + function generar_links_secciones() + { + $campos_pagelets = util::form()->get_campos_secciones(); + $html = ''; + $contador = 0; + foreach ($campos_pagelets as $nombre_pagelet => $campos_secciones) { + if ($contador > 0) { + if ($contador == 4) { + $html .= '
'; + } else { + $html .= ' | '; + } + } + $html .= "" . kernel::traductor()->trans($nombre_pagelet) . ""; + $contador++; + } + return $html; + } + + protected function set_dato($nombre, $dato) + { + $grupo = $this->get_group($nombre); + if ($grupo != '') { + $this->datos[$grupo][$nombre] = $dato; + } else { + $this->datos[$nombre] = $dato; + } + + $this->get_zend_form()->getElement($nombre)->setValue($dato); + + if (strripos($nombre, '_visible')) { + $campo = substr($nombre, 0, strripos($nombre, '_visible')); + + $this->get_zend_form()->getElement($nombre)->setAttrib('data-campo', $campo); + $this->get_zend_form()->getElement($nombre)->setAttrib('data-visible', $campo . '_visible'); + $this->get_zend_form()->getElement($nombre)->setAttrib('data-obligatorio', $campo . '_obligatorio'); + $this->get_zend_form()->getElement($nombre)->setAttrib('data-se_imprime', $campo . '_se_imprime'); + $this->get_zend_form()->getElement($nombre)->setAttrib('data-genera_reporte', $campo . '_genera_reporte'); + } + } + + protected function generar_definicion() + { + $campos_conf = util::form()->get_campos_configurables(); + $campos_no_ocultables_obligatorios = util::form()->get_campos_no_ocultables_obligatorios(); + foreach ($campos_conf as $campo) { + if (in_array($campo, $campos_no_ocultables_obligatorios)) { + $disabled_visible = true; + $disabled_obligatorio = true; + $clase_js = 'js-no_modificable'; + } else { + $disabled_visible = false; + $disabled_obligatorio = false; + $clase_js = ''; + } + + $this->set_campo($campo . '_visible', array( + form::label => 'label', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => '1', + form::unchecked_value => '0', + form::clase_css => "js-check-visible $clase_js", + form::disabled => $disabled_visible + )); + + $this->set_campo($campo . '_obligatorio', array( + form::label => 'label', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => '1', + form::unchecked_value => '0', + form::clase_css => "js-check-visible $clase_js", + form::disabled => $disabled_obligatorio + )); + + $this->set_campo($campo . '_se_imprime', array( + form::label => 'label', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => '1', + form::unchecked_value => '0', + )); + + $this->set_campo($campo . '_genera_reporte', array( + form::label => 'label', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => '1', + form::unchecked_value => '0', + )); + } + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/config_form/configuracion/form_tipos_propuesta.php b/src/siu/operaciones/config_form/configuracion/form_tipos_propuesta.php new file mode 100644 index 0000000..b8e167a --- /dev/null +++ b/src/siu/operaciones/config_form/configuracion/form_tipos_propuesta.php @@ -0,0 +1,35 @@ +crear('config_form', 'seleccionar_tipo_propuesta', array('configuracion')); + } + + protected function generar_definicion() + { + $this->set_campo('tipo_de_propuesta', array( + form::label => 'tipo_de_propuesta', + form::obligatorio => true, + form::filtro => validador::TIPO_TEXTO, + form::filtro_params => array('allowempty' => false), + form::elemento => array('tipo' => 'select'), + form::multi_options => util::opciones()->tipos_propuestas(), + )); + } + +} +?> diff --git a/src/siu/operaciones/config_form/configuracion/pagelet_configuracion.js b/src/siu/operaciones/config_form/configuracion/pagelet_configuracion.js new file mode 100644 index 0000000..d2d528c --- /dev/null +++ b/src/siu/operaciones/config_form/configuracion/pagelet_configuracion.js @@ -0,0 +1,183 @@ +var dependencias; + +function inicializar_dependencias() +{ + //---- Dependencias entre campos ------------------------------------------- + dependencias = []; + // SECCIÓN: Propuestas + dependencias['insc_otra_inst'] = ['insc_otra_inst_descr']; + // SECCIÓN: Datos principales + dependencias['tipo_visa'] = ['vencimiento_visa']; + dependencias['residencia'] = ['fecha_respre_otorg', 'fecha_respre_venc']; + // SECCIÓN: Financiamiento de estudios + dependencias['alu_cos_est_otra'] = ['alu_cos_est_espec']; + dependencias['alu_cos_est_beca'] = ['tiene_beca_univ', 'tiene_beca_inter', 'tiene_beca_nacio', 'alu_beca_prov', 'alu_beca_muni', 'alu_beca_otra', + 'alu_beca_tipo_ser', 'alu_beca_tipo_inv', 'alu_beca_tipo_eco']; + dependencias['alu_beca_tipo_eco'] = ['alu_beca_eco_tran', 'alu_beca_eco_efec', 'alu_beca_eco_foto', 'alu_beca_eco_habi', 'alu_beca_eco_come']; + // SECCIÓN: Situación laboral + dependencias['existe_trab_alum'] = ['alu_trab_hace', 'alu_trab_ocup', 'hora_sem_trab_alum', 'rel_trab_propuesta', 'alu_trab_tarea', + 'alu_trab_desjub', 'alu_trab_fami', 'remuneracion']; + // SECCIÓN: Situación familiar + dependencias['padre_vive'] = ['sit_laboral_padre']; + dependencias['sit_laboral_padre'] = ['padre_trab_hace', 'padre_trab_ocup', 'padre_trab_tarea', 'padre_trab_otro']; + dependencias['madre_vive'] = ['sit_laboral_madre']; + dependencias['sit_laboral_madre'] = ['madre_trab_hace', 'madre_trab_ocup', 'madre_trab_tarea', 'madre_trab_otro']; + // SECCIÓN: Estudios +// dependencias['orient_voc_rec'] = ['orient_voc_col_sec', 'orient_voc_esta_inst', 'orient_voc_otra_inst', 'orient_voc_consult', 'orient_voc_otros']; + dependencias['alu_otestsup_esta'] = ['alu_otestsup_razon_abandono', 'alu_otestsup_razon_abandono_otros']; + // SECCIÓN: Deportes + dependencias['practica_deportes'] = ['hace_dep_gim_priv', 'hace_dep_univ', 'hace_dep_partic', 'hace_dep_otros', + 'prac_dep_futbol', 'prac_dep_basquet', 'prac_dep_voley', 'prac_dep_gimnasia', + 'prac_dep_tenis', 'prac_dep_natacion', 'prac_dep_handball', 'prac_dep_otros']; + + // SECCIÓN: Discapacidad + dependencias['condicion_discapacidad'] = ['tiene_cud', 'disc_auditiva', 'disc_visual', 'disc_motora', 'disc_cond_psicosocial', 'disc_otra', + 'aud_tipo', 'aud_lenguaje_senias', 'aud_lenguaje_labial', 'aud_comunicacion_otra', 'aud_apoyo_vida_diaria', 'aud_req_interprete_lengua_senias', 'aud_req_aro_magnetico', 'aud_req_otros_apoyos', 'aud_otros_apoyos', + 'vis_dificultad_para_ver', 'vis_apoyo_vida_diaria', 'vis_req_archivo_audio', 'vis_req_texto_digital', 'vis_req_texto_braile', 'vis_req_otros_apoyos', 'vis_otros_apoyos', + 'mot_apoyo_vida_diaria', 'mot_req_apoyo_aula', 'mot_apoyo_aula', 'mot_req_otros_apoyos', 'mot_otros_apoyos', + 'psi_descripcion', 'psi_apoyo_vida_diaria', 'psi_req_otros_apoyos', 'psi_otros_apoyos', + 'otra_descripcion', 'otra_req_apoyo_vida_diaria', 'otra_apoyo_vida_diaria', + 'informacion_importante']; + + dependencias['disc_auditiva'] = ['aud_tipo', 'aud_lenguaje_senias', 'aud_lenguaje_labial', 'aud_comunicacion_otra', 'aud_apoyo_vida_diaria', 'aud_req_interprete_lengua_senias', 'aud_req_aro_magnetico', 'aud_req_otros_apoyos', 'aud_otros_apoyos']; + dependencias['disc_visual'] = ['vis_dificultad_para_ver', 'vis_apoyo_vida_diaria', 'vis_req_archivo_audio', 'vis_req_texto_digital', 'vis_req_texto_braile', 'vis_req_otros_apoyos', 'vis_otros_apoyos']; + dependencias['disc_motora'] = ['mot_apoyo_vida_diaria', 'mot_req_apoyo_aula', 'mot_apoyo_aula', 'mot_req_otros_apoyos', 'mot_otros_apoyos']; + dependencias['disc_cond_psicosocial'] = ['psi_descripcion', 'psi_apoyo_vida_diaria', 'psi_req_otros_apoyos', 'psi_otros_apoyos']; + dependencias['disc_otra'] = ['otra_descripcion', 'otra_req_apoyo_vida_diaria', 'otra_apoyo_vida_diaria']; + + dependencias['aud_req_otros_apoyos'] = ['aud_otros_apoyos']; + dependencias['vis_req_otros_apoyos'] = ['vis_otros_apoyos']; + dependencias['mot_req_apoyo_aula'] = ['mot_apoyo_aula']; + dependencias['mot_req_otros_apoyos'] = ['mot_otros_apoyos']; + dependencias['psi_req_otros_apoyos'] = ['psi_otros_apoyos']; + dependencias['otra_req_apoyo_vida_diaria'] = ['otra_apoyo_vida_diaria']; + + //---- Campos que dependen de una selección previa ------------------------- + dependientes = ['insc_otra_inst_descr', 'vencimiento_visa', 'fecha_respre_otorg', 'fecha_respre_venc', 'alu_cos_est_espec', 'tiene_beca_univ', 'tiene_beca_inter', + 'tiene_beca_nacio', 'alu_beca_prov', 'alu_beca_muni', 'alu_beca_otra', 'alu_beca_tipo_ser', 'alu_beca_tipo_inv', 'alu_beca_tipo_eco', + 'alu_beca_eco_tran', 'alu_beca_eco_efec', 'alu_beca_eco_foto', 'alu_beca_eco_habi', 'alu_beca_eco_come', 'alu_trab_hace', 'alu_trab_ocup', + 'hora_sem_trab_alum', 'rel_trab_rel_trab_propuesta', 'alu_trab_tarea', 'alu_trab_desjub', 'alu_trab_fami', 'remuneracion', 'sit_laboral_padre', 'padre_trab_hace', 'padre_trab_ocup', + 'padre_trab_tarea', 'padre_trab_otro', 'sit_laboral_madre', 'madre_trab_hace', 'madre_trab_ocup', 'madre_trab_tarea', 'madre_trab_otro', + 'alu_otestsup_razon_abandono', 'alu_otestsup_razon_abandono_otros', + 'hace_dep_gim_priv', 'hace_dep_univ', 'hace_dep_partic', 'hace_dep_otros', 'prac_dep_futbol', 'prac_dep_basquet', 'prac_dep_voley', + 'prac_dep_gimnasia', 'prac_dep_tenis', 'prac_dep_natacion', 'prac_dep_handball', 'prac_dep_otros', + 'tiene_cud', 'disc_auditiva', 'disc_visual', 'disc_motora', 'disc_cond_psicosocial', 'disc_otra', + 'aud_tipo', 'aud_lenguaje_senias', 'aud_lenguaje_labial', 'aud_comunicacion_otra', 'aud_apoyo_vida_diaria', 'aud_req_interprete_lengua_senias', 'aud_req_aro_magnetico', 'aud_req_otros_apoyos', 'aud_otros_apoyos', + 'vis_dificultad_para_ver', 'vis_apoyo_vida_diaria', 'vis_req_archivo_audio', 'vis_req_texto_digital', 'vis_req_texto_braile', 'vis_req_otros_apoyos', 'vis_otros_apoyos', + 'mot_apoyo_vida_diaria', 'mot_req_apoyo_aula', 'mot_apoyo_aula', 'mot_req_otros_apoyos', 'mot_otros_apoyos', + 'psi_descripcion', 'psi_apoyo_vida_diaria', 'psi_req_otros_apoyos', 'psi_otros_apoyos', + 'otra_descripcion', 'otra_req_apoyo_vida_diaria', 'otra_apoyo_vida_diaria', + 'informacion_importante']; +} + +function tiene_dependencias(campo) +{ + var dep = typeof dependencias[campo] !== "undefined" && dependencias[campo].length > 0; + return dep; +} + +function es_dependiente(campo) +{ + return jQuery.inArray(campo, dependientes) >= 0; +} + +function deshabilitar_dependientes() +{ + var elem; + for (index in dependientes) { + elem = '#form_configuracion-' + dependientes[index] + '_obligatorio'; + $(elem).addClass('js-no_modificable'); + $(elem).attr("disabled", true); + } +} + +function procesar_dependencias(campo, activo) +{ + var elem = '#form_configuracion-' + campo + '_visible'; + + if (activo) { + if (!$(elem).hasClass('js-no_modificable')) { + $(elem).removeAttr("disabled"); + } + } else { + if (!$(elem).hasClass('js-no_modificable')) { + $(elem).attr("disabled", true); + } + $(elem).attr('checked', false); + } + + dependencia_visible(elem); + + if (tiene_dependencias(campo)) { + var dependientes = dependencias[campo]; + var checked = $(elem).attr("checked") === "checked"; + $.each(dependientes, function(clave, valor) { + procesar_dependencias(valor, checked); + }); + } +} + +function dependencia_visible(elem) +{ + var campo = $(elem).data('campo'); + var tiene_dep = tiene_dependencias(campo); + + var obligatorio = 'form_configuracion-'+($(elem).data('obligatorio')); + var se_imprime = 'form_configuracion-'+($(elem).data('se_imprime')); + var genera_reporte = 'form_configuracion-'+($(elem).data('genera_reporte')); + + if ($(elem).attr("checked") === "checked") { + if (!$('#'+obligatorio).hasClass('js-no_modificable')) { + $('#'+obligatorio).removeAttr("disabled"); + } + $('#'+se_imprime).removeAttr("disabled"); + $('#'+genera_reporte).removeAttr("disabled"); + + if (tiene_dep) { + var dependientes = dependencias[campo]; + $.each(dependientes, function(clave, valor) { + procesar_dependencias(valor, true); + }); + } + + } else { + if (!$('#'+obligatorio).hasClass('js-no_modificable')) { + $('#'+obligatorio).attr("disabled", true); + $('#'+obligatorio).attr('checked', false); + } + $('#'+se_imprime).attr("disabled", true); + $('#'+se_imprime).attr('checked', false); + $('#'+genera_reporte).attr("disabled", true); + $('#'+genera_reporte).attr('checked', false); + + if (tiene_dep) { + var dependientes = dependencias[campo]; + $.each(dependientes, function(clave, valor) { + procesar_dependencias(valor, false); + }); + } + } +} + +kernel.renderer.registrar_pagelet('configuracion', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + inicializar_dependencias(); + deshabilitar_dependientes(); + + $('.js-check-visible').on('click', function() { + dependencia_visible(this); + }); + + $('.js-check-visible').each(function() { + dependencia_visible(this); + }); + + $('#form_tipos_propuesta-tipo_de_propuesta').on('change', function() { + $('#form_tipos_propuesta').submit(); + }); + } + }; +}); diff --git a/src/siu/operaciones/config_form/controlador.php b/src/siu/operaciones/config_form/controlador.php new file mode 100644 index 0000000..9f65bb9 --- /dev/null +++ b/src/siu/operaciones/config_form/controlador.php @@ -0,0 +1,151 @@ +campos_configurables)) { + $campos_configurables = util::form()->get_campos_configurables(); + $campos_pagelets = util::form()->get_campos_secciones(); + + $this->campos_configurables = array(); + foreach ($campos_pagelets as $campos_secciones) { + foreach ($campos_secciones as $campos_seccion) { + foreach ($campos_seccion as $campo) { + if (in_array($campo, $campos_configurables)) { + $this->campos_configurables[] = $campo; + } + } + } + } + } + return $this->campos_configurables; + } + + function get_configuracion() + { + $salida = array(); + if (kernel::sesion()->esta_seteada('tipo_propuesta_config')) { + $tipo_propuesta = kernel::sesion()->get('tipo_propuesta_config'); + $datos = util::consultas()->get_parametros_campos_form($tipo_propuesta); + foreach ($datos as $dato) { + $prefix = $dato['columna']; + $salida[$prefix . '_visible'] = $dato['visible']; + $salida[$prefix . '_obligatorio'] = $dato['obligatorio']; + $salida[$prefix . '_se_imprime'] = $dato['se_imprime']; + $salida[$prefix . '_genera_reporte'] = $dato['genera_reporte']; + } + } + return $salida; + } + + function accion__index() + { + + } + + function accion__seleccionar_tipo_propuesta() + { + if (!kernel::request()->isPost()) { + return; + } + + $datos = kernel::request()->getPost('form_tipos_propuesta'); + if ($datos['tipo_de_propuesta'] != opciones::NO_SELECCION) { + kernel::sesion()->set('tipo_propuesta_config', $datos['tipo_de_propuesta']); + } else { + kernel::sesion()->borrar('tipo_propuesta_config'); + } + + $formulario = 'configuracion'; + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + kernel::renderer()->add($pagelet); + } + + function accion__guardar() + { + if (!kernel::request()->isPost()) { + return; + } + + $formulario = 'configuracion'; + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + + $datos = kernel::request()->getPost('form_configuracion'); + $campos = $this->get_campos_configurables(); + $campos_no_ocultables = util::form()->get_campos_no_ocultables_obligatorios(); + + try { + kernel::db()->abrir_transaccion(); + + foreach ($campos as $campo) { + /*salvo el error + if (is_null($datos[$campo . '_visible'])){ + $datos[$campo . '_visible']=0; + } + if (is_null($datos[$campo . '_obligatorio'])){ + $datos[$campo . '_obligatorio']=0; + } + + if (is_null($datos[$campo . '_se_imprime'])){ + $datos[$campo . '_se_imprime']=0; + } + if (is_null($datos[$campo . '_genera_reporte'])){ + $datos[$campo . '_genera_reporte']=0; + }*/ + $update = array(); + if (!in_array($campo, $campos_no_ocultables)) { + $update['visible'] = $datos[$campo . '_visible']; + $update['obligatorio'] = $datos[$campo . '_obligatorio']; + } + $update['se_imprime'] = $datos[$campo . '_se_imprime']; + $update['genera_reporte'] = $datos[$campo . '_genera_reporte']; + + $clave = array( + 'propuesta_tipo' => kernel::sesion()->get('tipo_propuesta_config'), + 'columna' => $campo + ); + + abm::modificacion('sga_campos_conf', $update, $clave); + } + + kernel::db()->cerrar_transaccion(); + + // Se resetea la caché para borrar las configuraciones almacenadas + util::catalogo()->limpiar_cache(); + + $pagelet->set_estado_info(pagelet_configuracion::FORM_GUARDADO); + } catch (Exception $e) { + kernel::db()->abortar_transaccion(); + $pagelet->set_estado_info(pagelet_configuracion::FORM_ERROR_GUARDADO); + } + + kernel::renderer()->add($pagelet); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/config_form/pagelet_configuracion.php b/src/siu/operaciones/config_form/pagelet_configuracion.php new file mode 100644 index 0000000..f73001c --- /dev/null +++ b/src/siu/operaciones/config_form/pagelet_configuracion.php @@ -0,0 +1,84 @@ +esta_seteada('tipo_propuesta_config'); + } + + function get_campos_configurables() + { + return $this->controlador->get_campos_configurables(); + } + + function get_form($id_html = null) + { + if (!isset($this->form)) { + $this->form = kernel::localizador()->instanciar('operaciones\config_form\configuracion\form_configuracion'); + } + return $this->form; + } + + function get_form_tipos_propuesta() + { + if (!isset($this->form_tipos_propuesta)) { + $this->form_tipos_propuesta = kernel::localizador()->instanciar('operaciones\config_form\configuracion\form_tipos_propuesta'); + } + return $this->form_tipos_propuesta; + } + + function prepare() + { + $form = $this->get_form(); + + switch ($this->estado) { + case self::FORM_ERROR_GUARDADO: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_error'), + 'exitoso' => false + )); + break; + case self::FORM_GUARDADO: + kernel::renderer()->add_to_ajax_response('info_estado', array( + 'mensaje' => kernel::traductor()->trans('guardado_datos_exitoso'), + 'exitoso' => true + )); + default: + $form->inicializar(); + $datos = $this->controlador->get_configuracion(); + $form->set_datos($datos); + } + + $this->add_form($form); + + $form_tipos_propuesta = $this->get_form_tipos_propuesta(); + $form_tipos_propuesta->inicializar(); + if ($this->hay_tipo_propuesta_seleccionado()) { + $datos_tipo = array('tipo_de_propuesta' => kernel::sesion()->get('tipo_propuesta_config')); + $form_tipos_propuesta->set_datos($datos_tipo); + } + $this->add_form($form_tipos_propuesta); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/config_form/template.twig b/src/siu/operaciones/config_form/template.twig new file mode 100644 index 0000000..8a399db --- /dev/null +++ b/src/siu/operaciones/config_form/template.twig @@ -0,0 +1,7 @@ +{% extends "kernel/una_columna.twig" %} +{% block titulo_operacion %} +

{{"configuracion_campos"|trans}}

+{% endblock %} +{% block columna_1 %} + {{ conf.render }} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/config_form/vista.php b/src/siu/operaciones/config_form/vista.php new file mode 100644 index 0000000..ec46b46 --- /dev/null +++ b/src/siu/operaciones/config_form/vista.php @@ -0,0 +1,39 @@ +instanciar($clase); + $this->add_pagelet($pl); + return $pl; + } + + function ini() + { + $clase = 'operaciones\config_form\pagelet_configuracion'; + $pl = kernel::localizador()->instanciar($clase, 'conf'); + $this->add_pagelet($pl); + } + + function pagelet($id) + { + $clase = "operaciones\config_form\pagelet_$id"; + return kernel::localizador()->instanciar($clase, $id); + } + + function set_form_activo($pagelet) + { + $this->form_activo = $pagelet; + $this->id_form_activo = $pagelet->get_id(); + $this->add_pagelet($pagelet, 0, 'conf'); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/copiar_config_form/controlador.php b/src/siu/operaciones/copiar_config_form/controlador.php new file mode 100644 index 0000000..2cb8438 --- /dev/null +++ b/src/siu/operaciones/copiar_config_form/controlador.php @@ -0,0 +1,72 @@ +isPost()) { + return; + } + + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO, array('default' => 'copia')); + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + + $form = $pagelet->get_form(); + if ($form->procesar()) { + $datos = $form->get_datos(); + $this->copiar_configuracion($datos['tipo_propuesta_origen'], $datos['tipo_propuesta_destino']); + // Se resetea la caché para borrar las configuraciones almacenadas + util::catalogo()->limpiar_cache(); + $pagelet->set_estado_info(pagelet_copia::COPIA_OK); + } else { + $pagelet->set_estado_info(pagelet_copia::FORM_ERROR_VALIDACION); + } + + kernel::renderer()->add($pagelet); + } + + protected function copiar_configuracion($tipo_origen, $tipo_destino) + { + $tipo_origen = kernel::db()->quote($tipo_origen); + $tipo_destino = kernel::db()->quote($tipo_destino); + + $sql = "UPDATE sga_campos_conf + SET (visible, obligatorio, se_imprime, genera_reporte) = (a.visible, a.obligatorio, a.se_imprime, a.genera_reporte) + FROM sga_campos_conf as a + WHERE sga_campos_conf.columna = a.columna + AND a.propuesta_tipo = $tipo_origen + AND sga_campos_conf.propuesta_tipo = $tipo_destino + "; + + kernel::db()->ejecutar($sql); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/copiar_config_form/copia/default.css b/src/siu/operaciones/copiar_config_form/copia/default.css new file mode 100644 index 0000000..868ea70 --- /dev/null +++ b/src/siu/operaciones/copiar_config_form/copia/default.css @@ -0,0 +1,7 @@ +.centrado{ + position: absolute; + left: 45%; + margin-top: -100px; + margin-left: -100px; + width: 300px; +} diff --git a/src/siu/operaciones/copiar_config_form/copia/default.twig b/src/siu/operaciones/copiar_config_form/copia/default.twig new file mode 100644 index 0000000..9548f28 --- /dev/null +++ b/src/siu/operaciones/copiar_config_form/copia/default.twig @@ -0,0 +1,22 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} +{% set form = this.get_form() %} +{% autoescape false %} + +{% if this.data.mensaje_ok %} +
+ {{ this.data.mensaje_ok|trans }} +
+{% elseif this.data.mensaje_error %} +
+ {{ this.data.mensaje_error|trans }} +
+{% endif %} +
+{{ form.encabezado }} + {{ form.control_group('tipo_propuesta_origen') }} + {{ form.control_group('tipo_propuesta_destino') }} + {{ form.submit_button('copiar', 'copiar')}} + +{% endautoescape %} +{% endblock %} diff --git a/src/siu/operaciones/copiar_config_form/copia/form_copia.php b/src/siu/operaciones/copiar_config_form/copia/form_copia.php new file mode 100644 index 0000000..982d2bd --- /dev/null +++ b/src/siu/operaciones/copiar_config_form/copia/form_copia.php @@ -0,0 +1,42 @@ +crear('copiar_config_form', 'copiar_configuracion', array('copia')); + } + + protected function generar_definicion() + { + $this->set_campo('tipo_propuesta_origen', array( + form::label => 'tipo_propuesta_origen', + form::obligatorio => true, + form::filtro => validador::TIPO_TEXTO, + form::elemento => array('tipo' => 'select'), + form::multi_options => util::opciones()->tipos_propuestas(), + )); + + $this->set_campo('tipo_propuesta_destino', array( + form::label => 'tipo_propuesta_destino', + form::obligatorio => true, + form::filtro => validador::TIPO_TEXTO, + form::elemento => array('tipo' => 'select'), + form::multi_options => util::opciones()->tipos_propuestas(), + )); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/copiar_config_form/copia/pagelet_copia.js b/src/siu/operaciones/copiar_config_form/copia/pagelet_copia.js new file mode 100644 index 0000000..f86b08a --- /dev/null +++ b/src/siu/operaciones/copiar_config_form/copia/pagelet_copia.js @@ -0,0 +1,57 @@ +kernel.renderer.registrar_pagelet('copia', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + $('#form_copia').submit(function() { + if (validar()) { + return true; + } else { + return false; + } + }) + } + } + + function validar() + { + var valido; + valido = validar_campo('tipo_propuesta_origen'); + valido = valido & validar_campo('tipo_propuesta_destino'); + if (valido) { + valido = validar_selecciones(); + } + return valido; + } + + function validar_campo(campo) + { + var valor = $('#form_copia-'+campo).val(); + if ((valor == no_seleccion) || (valor == null)) { + $('#msg-'+campo).html(info.error_vacio); + $('#cg-'+campo).addClass('error'); + return false; + } else { + $('#msg-'+campo).html(''); + $('#cg-'+campo).removeClass('error'); + return true; + } + } + + function validar_selecciones() + { + var valor_origen = $('#form_copia-tipo_propuesta_origen').val(); + var valor_destino = $('#form_copia-tipo_propuesta_destino').val(); + + if (valor_origen == valor_destino) { + $('#msg-tipo_propuesta_destino').html(info.error_tipos_iguales); + $('#cg-tipo_propuesta_destino').addClass('error'); + return false; + } else { + $('#msg-tipo_propuesta_destino').html(''); + $('#cg-tipo_propuesta_destino').removeClass('error'); + return true; + } + } + +}) diff --git a/src/siu/operaciones/copiar_config_form/pagelet_copia.php b/src/siu/operaciones/copiar_config_form/pagelet_copia.php new file mode 100644 index 0000000..d982496 --- /dev/null +++ b/src/siu/operaciones/copiar_config_form/pagelet_copia.php @@ -0,0 +1,50 @@ +form)) { + $this->form = new form_copia(); + } + return $this->form; + } + + function prepare() + { + $this->add_var_js('error_vacio', kernel::traductor()->trans('form_validacion_error.vacio')); + $this->add_var_js('error_tipos_iguales', kernel::traductor()->trans('error_tipos_iguales')); + + $form = $this->get_form(); + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + $this->data['mensaje_error'] = kernel::traductor()->trans('copia_config_error'); + break; + case self::COPIA_OK: + $this->data['mensaje_ok'] = kernel::traductor()->trans('copia_config_ok'); + default: + $form->inicializar(); + } + $this->add_form($form); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/copiar_config_form/template.twig b/src/siu/operaciones/copiar_config_form/template.twig new file mode 100644 index 0000000..f440e93 --- /dev/null +++ b/src/siu/operaciones/copiar_config_form/template.twig @@ -0,0 +1,7 @@ +{% extends "kernel/una_columna.twig" %} +{% block titulo_operacion %} +

{{'tit_copiar_config'|trans}}

+{% endblock %} +{% block columna_1 %} + {{ form.render }} +{% endblock %} diff --git a/src/siu/operaciones/copiar_config_form/vista.php b/src/siu/operaciones/copiar_config_form/vista.php new file mode 100644 index 0000000..80a36e7 --- /dev/null +++ b/src/siu/operaciones/copiar_config_form/vista.php @@ -0,0 +1,39 @@ +instanciar($clase); + $this->add_pagelet($pl); + return $pl; + } + + function ini() + { + $clase = 'operaciones\copiar_config_form\pagelet_copia'; + $pl = kernel::localizador()->instanciar($clase, 'form'); + $this->add_pagelet($pl); + } + + function pagelet($id) + { + $clase = "operaciones\copiar_config_form\pagelet_$id"; + return kernel::localizador()->instanciar($clase, $id); + } + + function set_form_activo($pagelet) + { + $this->form_activo = $pagelet; + $this->id_form_activo = $pagelet->get_id(); + $this->add_pagelet($pagelet, 0, 'form'); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/importar_config_form/controlador.php b/src/siu/operaciones/importar_config_form/controlador.php new file mode 100644 index 0000000..35d9eb4 --- /dev/null +++ b/src/siu/operaciones/importar_config_form/controlador.php @@ -0,0 +1,105 @@ +isPost()) { + return; + } + + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO, array('default' => 'import')); + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + + $form = $pagelet->get_form(); + if ($form->procesar()) { + $datos = $form->get_datos(); + try { + $this->importar_configuracion($datos); + + /** + * Se resetea la caché de configuración de campos, para que se + * recargue con los nuevos valores en el próximo pedido de página + */ + catalogo::cache()->eliminar($_SERVER['UA'] . 'parametros_campos'); + + $pagelet->set_estado_info(pagelet_import::IMPORT_OK); + } catch (ErrorKernelDb $e) { + $pagelet->set_estado_info(pagelet_import::ERROR_BD); + } + } else { + $pagelet->set_estado_info(pagelet_import::FORM_ERROR_VALIDACION); + } + + kernel::renderer()->add($pagelet); + } + + protected function importar_configuracion($param) + { + $param['vendor'] = 'pgsql'; + $db = dba::conectar($param); + $sql = "SELECT + tipo_de_carrera, + columna, + visible, + obligatorio, + se_imprime, + genera_reporte + FROM + sga_campos_conf"; + $datos = $db->consultar($sql); + + $sql = ''; + foreach ($datos as $dato) { + $sql .= " UPDATE sga_campos_conf + SET visible = '{$dato['visible']}', + obligatorio = '{$dato['obligatorio']}', + se_imprime = '{$dato['se_imprime']}', + genera_reporte = '{$dato['genera_reporte']}' + WHERE tipo_de_carrera = '{$dato['tipo_de_carrera']}' + AND columna = '{$dato['columna']}'; + + "; + } + + try { + kernel::db()->abrir_transaccion(); + kernel::db()->ejecutar($sql); + kernel::db()->cerrar_transaccion(); + } catch (ErrorKernelDb $e) { + kernel::db()->abortar_transaccion(); + throw $e; + } + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/importar_config_form/import/default.css b/src/siu/operaciones/importar_config_form/import/default.css new file mode 100644 index 0000000..868ea70 --- /dev/null +++ b/src/siu/operaciones/importar_config_form/import/default.css @@ -0,0 +1,7 @@ +.centrado{ + position: absolute; + left: 45%; + margin-top: -100px; + margin-left: -100px; + width: 300px; +} diff --git a/src/siu/operaciones/importar_config_form/import/default.twig b/src/siu/operaciones/importar_config_form/import/default.twig new file mode 100644 index 0000000..c08d28d --- /dev/null +++ b/src/siu/operaciones/importar_config_form/import/default.twig @@ -0,0 +1,28 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} +{% set form = this.get_form() %} +{% autoescape false %} + +{% if this.data.mensaje_ok %} +
+ {{ this.data.mensaje_ok|trans }} +
+{% elseif this.data.mensaje_error %} +
+ {{ this.data.mensaje_error|trans }} +
+{% else %} +

{{ this.data.mensaje_importar }}

+{% endif %} +
+
+{{ form.encabezado }} + {{ form.control_group('dbname') }} + {{ form.control_group('host') }} + {{ form.control_group('port') }} + {{ form.control_group('pdo_user') }} + {{ form.control_group('pdo_passwd') }} + {{ form.submit_button('importar', 'importar')}} + +{% endautoescape %} +{% endblock %} diff --git a/src/siu/operaciones/importar_config_form/import/form_import.php b/src/siu/operaciones/importar_config_form/import/form_import.php new file mode 100644 index 0000000..eca7f24 --- /dev/null +++ b/src/siu/operaciones/importar_config_form/import/form_import.php @@ -0,0 +1,61 @@ +crear('importar_config_form', 'importar_configuracion', array('import')); + } + + protected function generar_definicion() + { + $this->set_campo('dbname', array( + form::label => 'import.db.dbname', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + )); + + $this->set_campo('host', array( + form::label => 'import.db.host', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + )); + + $this->set_campo('port', array( + form::label => 'import.db.port', + form::filtro => validador::TIPO_INT, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + )); + + $this->set_campo('pdo_user', array( + form::label => 'import.db.pdo_user', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => true, + form::elemento => array('tipo' => 'text'), + )); + + $this->set_campo('pdo_passwd', array( + form::label => 'import.db.pdo_passwd', + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'password'), + )); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/importar_config_form/import/pagelet_import.js b/src/siu/operaciones/importar_config_form/import/pagelet_import.js new file mode 100644 index 0000000..1e6f7df --- /dev/null +++ b/src/siu/operaciones/importar_config_form/import/pagelet_import.js @@ -0,0 +1,10 @@ +kernel.renderer.registrar_pagelet('import', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + + } + }; + +}); diff --git a/src/siu/operaciones/importar_config_form/pagelet_import.php b/src/siu/operaciones/importar_config_form/pagelet_import.php new file mode 100644 index 0000000..5d2be42 --- /dev/null +++ b/src/siu/operaciones/importar_config_form/pagelet_import.php @@ -0,0 +1,57 @@ +form)) { + $this->form = new form_import(); + } + return $this->form; + } + + function prepare() + { + $this->add_var_js('error_vacio', kernel::traductor()->trans('form_validacion_error.vacio')); + $this->add_var_js('error_tipos_iguales', kernel::traductor()->trans('error_tipos_iguales')); + + $parametros_db = kernel::proyecto()->get_parametros_db(); + $this->data['mensaje_importar'] = kernel::traductor()->trans('importar_msj', array('%1%' => $parametros_db['dbname'], '%2%' => $parametros_db['host'], '%3%' => $parametros_db['port'])); + + $form = $this->get_form(); + switch ($this->estado) { + case self::FORM_ERROR_VALIDACION: + $this->data['mensaje_error'] = kernel::traductor()->trans('import_config_error'); + break; + case self::ERROR_BD: + $this->data['mensaje_error'] = kernel::traductor()->trans('import_error_bd'); + break; + case self::IMPORT_OK: + $this->data['mensaje_ok'] = kernel::traductor()->trans('import_config_ok'); + default: + $form->inicializar(); + } + $this->add_form($form); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/importar_config_form/template.twig b/src/siu/operaciones/importar_config_form/template.twig new file mode 100644 index 0000000..02ea826 --- /dev/null +++ b/src/siu/operaciones/importar_config_form/template.twig @@ -0,0 +1,7 @@ +{% extends "kernel/una_columna.twig" %} +{% block titulo_operacion %} +

{{'tit_import_config'|trans}}

+{% endblock %} +{% block columna_1 %} + {{ form.render }} +{% endblock %} diff --git a/src/siu/operaciones/importar_config_form/vista.php b/src/siu/operaciones/importar_config_form/vista.php new file mode 100644 index 0000000..a086bc1 --- /dev/null +++ b/src/siu/operaciones/importar_config_form/vista.php @@ -0,0 +1,39 @@ +instanciar($clase); + $this->add_pagelet($pl); + return $pl; + } + + function ini() + { + $clase = 'operaciones\importar_config_form\pagelet_import'; + $pl = kernel::localizador()->instanciar($clase, 'form'); + $this->add_pagelet($pl); + } + + function pagelet($id) + { + $clase = "operaciones\importar_config_form\pagelet_$id"; + return kernel::localizador()->instanciar($clase, $id); + } + + function set_form_activo($pagelet) + { + $this->form_activo = $pagelet; + $this->id_form_activo = $pagelet->get_id(); + $this->add_pagelet($pagelet, 0, 'form'); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/limpiar_cache/controlador.php b/src/siu/operaciones/limpiar_cache/controlador.php new file mode 100644 index 0000000..e70b8b0 --- /dev/null +++ b/src/siu/operaciones/limpiar_cache/controlador.php @@ -0,0 +1,65 @@ +isPost()) { + return; + } + + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO, array('default' => 'limpieza')); + $pagelet = $this->vista()->pagelet($formulario); + + $path_clearapc = __DIR__ . '/../../www/clearapc.php'; + file_put_contents($path_clearapc, " + true)); + } catch (Exception \$e) { + echo json_encode(array('success' => false)); + } + + ?>"); + + $alias = kernel::proyecto()->get_alias(); + $url = "http://localhost" . $alias . "/clearapc.php"; + $result = json_decode(file_get_contents($url)); + + if ($result->success) { + $pagelet->set_estado_info(pagelet_limpieza::BORRADO_OK); + } else { + $pagelet->set_estado_info(pagelet_limpieza::ERROR); + } + + unlink($path_clearapc); + kernel::renderer()->add($pagelet); + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/limpiar_cache/limpieza/default.css b/src/siu/operaciones/limpiar_cache/limpieza/default.css new file mode 100644 index 0000000..e69de29 diff --git a/src/siu/operaciones/limpiar_cache/limpieza/default.twig b/src/siu/operaciones/limpiar_cache/limpieza/default.twig new file mode 100644 index 0000000..576d22d --- /dev/null +++ b/src/siu/operaciones/limpiar_cache/limpieza/default.twig @@ -0,0 +1,23 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} +{% autoescape false %} + +{% if this.data.mensaje_ok %} +
+ {{ this.data.mensaje_ok|trans }} +
+{% elseif this.data.mensaje_error %} +
+ {{ this.data.mensaje_error|trans }} +
+{% else %} +
+ {{ 'msj_limpieza_cache'|trans }} +
+
+
+ +
+{% endif %} +{% endautoescape %} +{% endblock %} diff --git a/src/siu/operaciones/limpiar_cache/limpieza/pagelet_limpieza.js b/src/siu/operaciones/limpiar_cache/limpieza/pagelet_limpieza.js new file mode 100644 index 0000000..6a55c43 --- /dev/null +++ b/src/siu/operaciones/limpiar_cache/limpieza/pagelet_limpieza.js @@ -0,0 +1,19 @@ +kernel.renderer.registrar_pagelet('limpieza', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + $('#form_limpieza_cache').submit(function() { + var $form = $(this); + kernel.ajax.load($form.attr('action'), id, { + historia: false, + type: 'POST', + data: $form.serializeArray(), + success: function() { + } + }); + return false; + }); + } + } +}) diff --git a/src/siu/operaciones/limpiar_cache/pagelet_limpieza.php b/src/siu/operaciones/limpiar_cache/pagelet_limpieza.php new file mode 100644 index 0000000..1f38b4e --- /dev/null +++ b/src/siu/operaciones/limpiar_cache/pagelet_limpieza.php @@ -0,0 +1,41 @@ +crear('limpiar_cache', 'limpieza', array('limpieza')); + } + + function prepare() + { + switch ($this->estado) { + case self::BORRADO_OK : + $this->data['mensaje_ok'] = 'cache_borrado_ok'; + break; + case self::ERROR : + $this->data['mensaje_error'] = 'cache_borrado_error'; + break; + } + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/limpiar_cache/template.twig b/src/siu/operaciones/limpiar_cache/template.twig new file mode 100644 index 0000000..eecae7f --- /dev/null +++ b/src/siu/operaciones/limpiar_cache/template.twig @@ -0,0 +1,7 @@ +{% extends "kernel/una_columna.twig" %} +{% block titulo_operacion %} +

{{'tit_limpiar_cache'|trans}}

+{% endblock %} +{% block columna_1 %} + {{ form.render }} +{% endblock %} diff --git a/src/siu/operaciones/limpiar_cache/vista.php b/src/siu/operaciones/limpiar_cache/vista.php new file mode 100644 index 0000000..c4cece8 --- /dev/null +++ b/src/siu/operaciones/limpiar_cache/vista.php @@ -0,0 +1,39 @@ +instanciar($clase); + $this->add_pagelet($pl); + return $pl; + } + + function ini() + { + $clase = 'operaciones\limpiar_cache\pagelet_limpieza'; + $pl = kernel::localizador()->instanciar($clase, 'form'); + $this->add_pagelet($pl); + } + + function pagelet($id) + { + $clase = "operaciones\limpiar_cache\pagelet_$id"; + return kernel::localizador()->instanciar($clase, $id); + } + + function set_form_activo($pagelet) + { + $this->form_activo = $pagelet; + $this->id_form_activo = $pagelet->get_id(); + $this->add_pagelet($pagelet, 0, 'form'); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/logger/controlador.php b/src/siu/operaciones/logger/controlador.php new file mode 100644 index 0000000..c377a7a --- /dev/null +++ b/src/siu/operaciones/logger/controlador.php @@ -0,0 +1,67 @@ +get_produccion()) { + die(); + } + kernel::log()->set_activo(false); + } + + function accion__index() + { + + } + + function accion__ajax_info_log() + { + $id = kernel::url()->get_param(0); + $data = log::get_resumen($id); + $data['e_mail'] = kernel::sesion()->get_id_login(); + $this->render_raw_json($data); + } + + function accion__limpiar_logs() + { + $path = kernel::proyecto()->get_dir_log(); + manejador_archivos::eliminar_directorio($path, false, true); + $this->nuevo_request('logger', 'index'); + } + + function accion__elegir_log() + { + $archivo_log = kernel::url()->get_param(0); + $pagelet = $this->vista()->pagelet('info_log'); + $pagelet->set_estado_info('log_seleccionado'); + + $dir_log = kernel::proyecto()->get_dir_log(); + $path = $dir_log . '/' . $archivo_log . '.log'; + $pagelet->set_archivo_log($path); + + kernel::renderer()->add($pagelet); + } + + function accion__ajax_elegir_log() + { + $archivo_log = kernel::url()->get_param(0); + $dir_log = kernel::proyecto()->get_dir_log(); + $path = $dir_log . '/' . $archivo_log . '.log'; + $data = array('content' => mb_convert_encoding(file_get_contents($path), 'UTF-8')); + $this->render_raw_json($data); + } + +} +?> diff --git a/src/siu/operaciones/logger/info_log/default.css b/src/siu/operaciones/logger/info_log/default.css new file mode 100644 index 0000000..31ff431 --- /dev/null +++ b/src/siu/operaciones/logger/info_log/default.css @@ -0,0 +1,73 @@ +#filtro_debug ul { + list-style-type: none; + float: left; +} + +#filtro_debug ul li { + float: left; + margin: 0 5px; + font-weight: bold; + cursor: pointer; + padding: 3px; + border: 1px solid #fff; +} + +#filtro_debug ul li.seleccionado { + background: yellow; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border: 1px solid gold; +} +#info { + clear: both; + height: 500px; + overflow-y: scroll; + font-family: Courier; + font-size: 10px; + color: black; +} + + +table.debug { + width: 100%; + border-collapse: collapse; + margin-top: 3px; +} + +table.debug tr.contenido.even { + background: #fefc88 +} +table.debug tr.contenido.odd { + background: gold +} + +table.debug td { + margin:0; + padding:0; +} +table.debug td .key { + font-style: italic; +} +table.debug td pre { + white-space: pre-wrap; /* css-3 */ + white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + word-wrap: break-word; /* Internet Explorer 5.5+ */ +} + +table.debug tr.titulo { + font-size: 13px; + font-style: italic; + font-weight: bold; + background-color: #fa8544 +} +table.debug tr.contenido { + background-color: #fefc88 +} + +#info pre { + white-space: pre !important; + word-break: keep-all !important; + word-wrap: inherit !important; +} \ No newline at end of file diff --git a/src/siu/operaciones/logger/info_log/default.twig b/src/siu/operaciones/logger/info_log/default.twig new file mode 100644 index 0000000..6e91f6d --- /dev/null +++ b/src/siu/operaciones/logger/info_log/default.twig @@ -0,0 +1,15 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + Limpiar logs +
+ Se borrarán todos los archivos en la carpeta {{this.data.carpeta_log}}) +
+ {% if this.estado == 'inicial' %} + + {% elseif this.estado == 'log_seleccionado' %} +
+
{{this.data.info}}
+
+ + {% endif %} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/logger/info_log/pagelet_info_log.js b/src/siu/operaciones/logger/info_log/pagelet_info_log.js new file mode 100644 index 0000000..dd55047 --- /dev/null +++ b/src/siu/operaciones/logger/info_log/pagelet_info_log.js @@ -0,0 +1,37 @@ +kernel.renderer.registrar_pagelet('info_log', function(info) { + var id = '#' + info.id; + function init_filtro() { + function accionar_filtro(li) + { + var $li = $(li); + var valor = '#' + $li.children('span').attr('class'); + filtro.accionar($li, 'debug', valor); + } + + filtro.agregar('debug', { + elems_eliminar: function(valor) { + return $('#info div:not('+ valor +')'); + }, + elems: function() { + return $('#info div'); + }, + evt__pre_filtrar: function() { + //desactivamos el resto de los filtros + $('#filtro_debug li.seleccionado').each(function() { + accionar_filtro(this); + }) + } + }); + + $('#filtro_debug li').on('click', function() { + accionar_filtro(this); + }); + } + + return { + onload: function() { +// filtro = new util.filtro(); +// init_filtro(); + } + } +}) \ No newline at end of file diff --git a/src/siu/operaciones/logger/lista_logs/default.css b/src/siu/operaciones/logger/lista_logs/default.css new file mode 100644 index 0000000..ce87fb2 --- /dev/null +++ b/src/siu/operaciones/logger/lista_logs/default.css @@ -0,0 +1,3 @@ +#lista_logs .sidebar-nav { + padding: 9px 0; +} \ No newline at end of file diff --git a/src/siu/operaciones/logger/lista_logs/default.twig b/src/siu/operaciones/logger/lista_logs/default.twig new file mode 100644 index 0000000..6938ad6 --- /dev/null +++ b/src/siu/operaciones/logger/lista_logs/default.twig @@ -0,0 +1,16 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} +
+
+ +
+
+ +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/logger/lista_logs/pagelet_lista_logs.js b/src/siu/operaciones/logger/lista_logs/pagelet_lista_logs.js new file mode 100644 index 0000000..629777f --- /dev/null +++ b/src/siu/operaciones/logger/lista_logs/pagelet_lista_logs.js @@ -0,0 +1,12 @@ +kernel.renderer.registrar_pagelet('lista_logs', function(info) { + var id = '#' + info.id; + return { + onload: function() { +// var filtro = new util.filtro_lista({ +// valor_defecto: 'Buscar log...', +// selector_input: '#filtro_logs input', +// selector_li: '#lista_logs li' +// }); + } + } +}) \ No newline at end of file diff --git a/src/siu/operaciones/logger/pagelet_info_log.php b/src/siu/operaciones/logger/pagelet_info_log.php new file mode 100644 index 0000000..746b45d --- /dev/null +++ b/src/siu/operaciones/logger/pagelet_info_log.php @@ -0,0 +1,39 @@ +path = $path; + } + + public function prepare() + { + $this->data = array(); + $this->data['carpeta_log'] = kernel::proyecto()->get_dir_log(); + $this->data['url_limpiar'] = kernel::vinculador()->crear_sin_chequeo('logger/limpiar_logs'); + + if ($this->estado == 'log_seleccionado') { + $this->data['info'] = file_get_contents($this->path); + } + } + +} +?> diff --git a/src/siu/operaciones/logger/pagelet_lista_logs.php b/src/siu/operaciones/logger/pagelet_lista_logs.php new file mode 100644 index 0000000..dee27ca --- /dev/null +++ b/src/siu/operaciones/logger/pagelet_lista_logs.php @@ -0,0 +1,43 @@ +vinculo_recurso("js/filtro_lista.js"); + return array_merge(array($url), parent::get_js_files()); + } + + public function prepare() + { + $dir_log = kernel::proyecto()->get_dir_log(); + $archivos = manejador_archivos::get_archivos_directorio($dir_log); + rsort($archivos); + $this->data = array(); + foreach ($archivos as $archivo) { + $base = basename($archivo, '.log'); + $mes = substr($base, 0, 4) . '/' . substr($base, 4, 2) . '/' . substr($base, 6, 2); + $hora = substr($base, 9, 2) . ':' . substr($base, 11, 2) . ':' . substr($base, 13, 2); + $nombre = "$mes - $hora"; + $archivo = str_replace('/', vinculador::TRANSFORMADOR_BARRA, $archivo); + $archivo = str_replace('\\', vinculador::TRANSFORMADOR_BARRA, $archivo); + $this->data[] = array( + 'url' => kernel::vinculador()->crear_sin_chequeo("logger/elegir_log/$base"), + 'nombre' => $nombre + ); + } + } +} + +?> diff --git a/src/siu/operaciones/logger/template.twig b/src/siu/operaciones/logger/template.twig new file mode 100644 index 0000000..99e4f4a --- /dev/null +++ b/src/siu/operaciones/logger/template.twig @@ -0,0 +1,7 @@ +{% extends "kernel/dos_columnas.twig" %} +{% block columna_1 %} + {{ lista_logs.render }} +{% endblock %} +{% block columna_2 %} + {{ info_log.render }} +{% endblock %} diff --git a/src/siu/operaciones/logger/vista.php b/src/siu/operaciones/logger/vista.php new file mode 100644 index 0000000..c01341e --- /dev/null +++ b/src/siu/operaciones/logger/vista.php @@ -0,0 +1,25 @@ +instanciar($clase, 'lista_logs'); + $this->add_pagelet($pl); + + $clase = 'operaciones\logger\pagelet_info_log'; + $pl = kernel::localizador()->instanciar($clase, 'info_log'); + $this->add_pagelet($pl); + + kernel::pagina()->set_etiqueta('titulo', "Logger"); + kernel::pagina()->set_etiqueta('sub_titulo', ""); + } + +} +?> diff --git a/src/siu/operaciones/pagina_error/contenido/default.css b/src/siu/operaciones/pagina_error/contenido/default.css new file mode 100644 index 0000000..e69de29 diff --git a/src/siu/operaciones/pagina_error/contenido/default.twig b/src/siu/operaciones/pagina_error/contenido/default.twig new file mode 100644 index 0000000..dd80d32 --- /dev/null +++ b/src/siu/operaciones/pagina_error/contenido/default.twig @@ -0,0 +1,12 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} +
+ {{ this.data.mensaje }} +
+ +
+
+ +
+
+{% endblock %} diff --git a/src/siu/operaciones/pagina_error/contenido/pagelet_contenido.js b/src/siu/operaciones/pagina_error/contenido/pagelet_contenido.js new file mode 100644 index 0000000..d22ef45 --- /dev/null +++ b/src/siu/operaciones/pagina_error/contenido/pagelet_contenido.js @@ -0,0 +1,8 @@ +kernel.renderer.registrar_pagelet('contenido', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + } + } +}) diff --git a/src/siu/operaciones/pagina_error/controlador.php b/src/siu/operaciones/pagina_error/controlador.php new file mode 100644 index 0000000..c83de96 --- /dev/null +++ b/src/siu/operaciones/pagina_error/controlador.php @@ -0,0 +1,25 @@ +vista()->set_pagelet('contenido'); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/pagina_error/pagelet_contenido.php b/src/siu/operaciones/pagina_error/pagelet_contenido.php new file mode 100644 index 0000000..4e66276 --- /dev/null +++ b/src/siu/operaciones/pagina_error/pagelet_contenido.php @@ -0,0 +1,32 @@ +esta_seteada('msj_pagina_error')) { + $mensaje = kernel::sesion()->get('msj_pagina_error'); + } else { + $mensaje = kernel::traductor()->trans('error'); + } + $this->data['mensaje'] = $mensaje; + $this->data['url_volver'] = kernel::vinculador()->crear(kernel::persona()->perfil()->get_parametro('index'), 'index'); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/pagina_error/template.twig b/src/siu/operaciones/pagina_error/template.twig new file mode 100644 index 0000000..25837c0 --- /dev/null +++ b/src/siu/operaciones/pagina_error/template.twig @@ -0,0 +1,7 @@ +{% extends "kernel/una_columna.twig" %} +{% block titulo_operacion %} +

{{"error"|trans}}

+{% endblock %} +{% block columna_1 %} + {{ contenido.render }} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/pagina_error/vista.php b/src/siu/operaciones/pagina_error/vista.php new file mode 100644 index 0000000..1070fe5 --- /dev/null +++ b/src/siu/operaciones/pagina_error/vista.php @@ -0,0 +1,32 @@ +instanciar($clase); + $this->add_pagelet($pl); + return $pl; + } + + function ini() + { + $clase = 'operaciones\pagina_error\pagelet_contenido'; + $pl = kernel::localizador()->instanciar($clase, 'contenido'); + $this->add_pagelet($pl); + } + + function pagelet($id) + { + $clase = "operaciones\pagina_error\pagelet_$id"; + return kernel::localizador()->instanciar($clase, $id); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/perfil_datos/config/default.css b/src/siu/operaciones/perfil_datos/config/default.css new file mode 100644 index 0000000..8dd86e0 --- /dev/null +++ b/src/siu/operaciones/perfil_datos/config/default.css @@ -0,0 +1,16 @@ +.label-obligatorio { + font-weight:bold; + font-style:italic; + padding-top: 2px; +} + +.seleccionar-checkbox-todos-ninguno { + background-color: #eee; + border: 1px solid rgba(0, 0, 0, 0.05); + margin-bottom: 15px; + padding: 4px 10px; +} + +.seleccionar-checkbox-todos-ninguno label { + cursor: pointer; +} \ No newline at end of file diff --git a/src/siu/operaciones/perfil_datos/config/default.twig b/src/siu/operaciones/perfil_datos/config/default.twig new file mode 100644 index 0000000..ed1b7cf --- /dev/null +++ b/src/siu/operaciones/perfil_datos/config/default.twig @@ -0,0 +1,99 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} + {% autoescape false %} + + {% set form = this.get_form() %} + {{ form.encabezado }} +
+
+ {{ 'perfil_datos.info' | trans }} +
+
+
+
+
+

{{'perfil_datos.ras'|trans}}

+
+ +
+ +
+ +
+ {% for ra in this.data.ras %} + {{ form.checkbox( ra ) }} + {% endfor %} +
+
+
+
+

{{'perfil_datos.tipos_propuesta'|trans}}

+
+ +
+ +
+ +
+ {% for tipo_propuesta in this.data.tipos_propuesta %} + {{ form.checkbox( tipo_propuesta ) }} + {% endfor %} +
+
+
+
+
+
+

{{'perfil_datos.propuestas'|trans}}

+ +
+ +
+ +
+ {% for propuesta in this.data.propuestas %} + {{ form.checkbox( propuesta ) }} + {% endfor %} +
+
+
+

{{'perfil_datos.tipos_ubicaciones'|trans}}

+ +
+ +
+ +
+ {% for ubicacion in this.data.ubicaciones %} + {{ form.checkbox( ubicacion ) }} + {% endfor %} +
+
+
+
+ +
+
+
+ {{'volver'|trans|capitalize}} + {{ form.submit_button('guardar', 'guardar')}} +
+
+
+ + + +{% endautoescape %} +{% endblock %} diff --git a/src/siu/operaciones/perfil_datos/config/form_config_pd.php b/src/siu/operaciones/perfil_datos/config/form_config_pd.php new file mode 100644 index 0000000..baa8c43 --- /dev/null +++ b/src/siu/operaciones/perfil_datos/config/form_config_pd.php @@ -0,0 +1,106 @@ +crear('perfil_datos', 'guardar', array('config')); + } + + function inicializar($habilitado = true) + { + $this->generar_definicion(!$habilitado); + $this->init_zend_form(); + } + + protected function generar_definicion() + { + $this->generar_definicion_ras(); + $this->generar_definicion_tipos_propuesta(); + $this->generar_definicion_propuestas(); + $this->generar_definicion_ubicaciones(); + } + + function generar_definicion_ras() + { + $ras = g3::responsables_academicas()->get_opciones_sin_perfil_datos(); + + foreach ($ras as $ra => $nombre) { + $this->set_campo('ra_' . $ra, array( + form::label => $nombre, + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 1, + form::unchecked_value => 0, + )); + } + } + + function generar_definicion_tipos_propuesta() + { + $tipos_propuesta = g3::propuestas()->get_tipos_propuesta_sin_perfil_datos(); + + foreach ($tipos_propuesta as $tipo => $nombre) { + $this->set_campo('propuesta_tipo_' . $tipo, array( + form::label => $nombre, + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 1, + form::unchecked_value => 0, + )); + } + } + + function generar_definicion_propuestas() + { + $propuestas = g3::propuestas()->get_propuestas_sin_perfil_datos(); + + foreach ($propuestas as $propuesta => $nombre) { + $this->set_campo('propuesta_' . $propuesta, array( + form::label => $nombre, + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 1, + form::unchecked_value => 0, + )); + } + } + + function generar_definicion_ubicaciones() + { + $ubicaciones = g3::entidad('ubicaciones')->get_opciones(null, false); + + foreach ($ubicaciones as $ubicacion => $nombre) { + $this->set_campo('ubicacion_' . $ubicacion, array( + form::label => $nombre, + form::filtro => validador::TIPO_TEXTO, + form::obligatorio => false, + form::elemento => array('tipo' => 'checkbox'), + form::largo => 1, + form::checked_value => 1, + form::unchecked_value => 0, + )); + } + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/perfil_datos/config/pagelet_config.js b/src/siu/operaciones/perfil_datos/config/pagelet_config.js new file mode 100644 index 0000000..0be1da3 --- /dev/null +++ b/src/siu/operaciones/perfil_datos/config/pagelet_config.js @@ -0,0 +1,21 @@ +kernel.renderer.registrar_pagelet('config', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + + + $('.js-seleccionar-checkbox-todos-ninguno').on('change', function () { + + // Si checked = true marca a todos, si checked = false desmarca a todos + var checked = $(this).is(':checked'); + $(this).parents('.js-grupo-checkboxes').find('.js-contenedor-checkboxes input[type="checkbox"]').prop('checked', checked); + + // Cambio el label según el estado + var label = checked ? info.mensajes.ninguno : info.mensajes.todos; + $(this).next('span').text(label); + }); + + } + }; +}); diff --git a/src/siu/operaciones/perfil_datos/controlador.php b/src/siu/operaciones/perfil_datos/controlador.php new file mode 100644 index 0000000..3fc5e7e --- /dev/null +++ b/src/siu/operaciones/perfil_datos/controlador.php @@ -0,0 +1,51 @@ +instanciar('operaciones\perfil_datos\modelo'); + } + return self::$modelo; + } + + function ini() + { + + } + + function accion__index() + { + + } + + function accion__guardar() + { + if (!kernel::request()->isPost()) { + return; + } + + $formulario = $this->validate_param(0, 'get', validador::TIPO_TEXTO, array('default' => 'config')); + $pagelet = $this->vista()->pagelet($formulario); + $this->vista()->set_form_activo($pagelet); + + $form = $pagelet->get_form(); + if ($form->procesar()) { + $datos = $form->get_datos(); + $this->modelo()->guardar_config($datos); + } + + kernel::renderer()->add($pagelet); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/perfil_datos/modelo.php b/src/siu/operaciones/perfil_datos/modelo.php new file mode 100644 index 0000000..70b2636 --- /dev/null +++ b/src/siu/operaciones/perfil_datos/modelo.php @@ -0,0 +1,161 @@ +get_opciones(); + foreach ($ras as $ra => $nombre_ra) { + if (!is_null($ra) && ($ra != 'null')) { + $salida[$ra] = array( + 'nombre' => $nombre_ra, + 'propuestas' => array(), + ); + $propuestas = g3::propuestas()->get_propuestas_disponibles_preinscripcion($ra); + foreach ($propuestas as $propuesta => $propuesta_nombre) { + if (!is_null($propuesta) && ($propuesta != 'null')) { + $salida[$ra]['propuestas'][$propuesta] = array( + 'nombre' => $propuesta_nombre, + 'ubicaciones' => array(), + ); + $ubicaciones = g3::propuestas()->get_ubicaciones_propuesta($propuesta); + foreach ($ubicaciones as $ubicacion => $nombre_ubicacion) { + if (!is_null($ubicacion) && ($ubicacion != 'null')) { + $salida[$ra]['propuestas'][$propuesta]['ubicaciones'][] = $nombre_ubicacion; + } + } + } + } + } + } + return $salida; + } + + //-------------------------------------------------------------------------- + //---- DATOS --------------------------------------------------------------- + //-------------------------------------------------------------------------- + + function get_responsables_academicas() + { + return g3::responsables_academicas()->get_opciones_sin_perfil_datos(); + } + + function get_tipos_propuestas() + { + return g3::propuestas()->get_tipos_propuesta_sin_perfil_datos(); + } + + function get_propuestas() + { + return g3::propuestas()->get_propuestas_sin_perfil_datos(); + } + + function get_ubicaciones() + { + return g3::entidad('ubicaciones')->get_opciones(null, false); + } + + function get_datos_configuracion() + { + $config = util::consultas()->get_config_perfil_datos(); + $res = array(); + // Responsables Académicas seleccionadas + $ras = $config['ra']; + if (!empty($ras)) { + foreach ($ras as $ra) { + $clave = 'ra_' . $ra; + $res[$clave] = 1; + } + } + // Tipos de propuestas seleccionadas + $propuestas_tipo = $config['propuesta_tipo']; + if (!empty($propuestas_tipo)) { + foreach ($propuestas_tipo as $propuesta_tipo) { + $clave = 'propuesta_tipo_' . $propuesta_tipo; + $res[$clave] = 1; + } + } + // Propuestas seleccionadas + $propuestas = $config['propuesta']; + if (!empty($propuestas)) { + foreach ($propuestas as $propuesta) { + $clave = 'propuesta_' . $propuesta; + $res[$clave] = 1; + } + } + // Ubicaciones seleccionadas + $ubicaciones = $config['ubicacion']; + if (!empty($ubicaciones)) { + foreach ($ubicaciones as $ubicacion) { + $clave = 'ubicacion_' . $ubicacion; + $res[$clave] = 1; + } + } + return $res; + } + + //-------------------------------------------------------------------------- + //---- PERSISTENCIA -------------------------------------------------------- + //-------------------------------------------------------------------------- + + function guardar_config($datos) + { + try { + kernel::db()->abrir_transaccion(); + + $id_pto_acceso = $_SERVER['ID_PTO_ACCESO']; + + // Se eliminan configuraciones anteriores + $clave = array('id_pto_acceso' => $id_pto_acceso); + abm::baja('cfg_perfiles_datos', $clave); + + // Se insertan las nuevas configuraciones + $ras = $this->get_responsables_academicas(); + $this->procesar_grupo($datos, $ras, 'ra', $id_pto_acceso); + + $tipos_propuesta = $this->get_tipos_propuestas(); + $this->procesar_grupo($datos, $tipos_propuesta, 'propuesta_tipo', $id_pto_acceso); + + $propuestas = $this->get_propuestas(); + $this->procesar_grupo($datos, $propuestas, 'propuesta', $id_pto_acceso); + + $ubicaciones = $this->get_ubicaciones(); + $this->procesar_grupo($datos, $ubicaciones, 'ubicacion', $id_pto_acceso); + + kernel::db()->cerrar_transaccion(); + } catch (Exception $e) { + kernel::db()->abortar_transaccion(); + throw $e; + } + } + + protected function procesar_grupo($datos, $opciones, $grupo, $id_pto_acceso) + { + $seleccion = array(); + foreach ($opciones as $id => $nombre) { + $clave = $grupo . '_' . $id; + if (!empty($datos[$clave])) { + $seleccion[] = $id; + } + } + if (!empty($seleccion)) { + foreach ($seleccion as $clave) { + $registro = array( + 'id_pto_acceso' => $id_pto_acceso, + $grupo => $clave, + ); + abm::alta('cfg_perfiles_datos', $registro); + } + } + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/perfil_datos/pagelet_config.php b/src/siu/operaciones/perfil_datos/pagelet_config.php new file mode 100644 index 0000000..754ac00 --- /dev/null +++ b/src/siu/operaciones/perfil_datos/pagelet_config.php @@ -0,0 +1,87 @@ +form)) { + $this->form = new form_config_pd(); + } + return $this->form; + } + + function prepare() + { + $form = $this->get_form(); + $form->inicializar(); + $datos = $this->controlador->modelo()->get_datos_configuracion(); + $form->set_datos($datos); + $this->add_form($form); + $this->data['ras'] = $this->get_ras(); + $this->data['tipos_propuesta'] = $this->get_tipos_propuestas(); + $this->data['propuestas'] = $this->get_propuestas(); + $this->data['ubicaciones'] = $this->get_ubicaciones(); + + $this->add_mensaje_js('todos', kernel::traductor()->trans('perfil_datos.todos')); + $this->add_mensaje_js('ninguno', kernel::traductor()->trans('perfil_datos.ninguno')); + } + + //-------------------------------------------------------------------------- + + protected function get_ras() + { + $ras = $this->controlador->modelo()->get_responsables_academicas(); + $salida = array(); + foreach ($ras as $ra => $datos) { + $salida[] = 'ra_' . $ra; + } + return $salida; + } + + protected function get_tipos_propuestas() + { + $tipos_propuesta = $this->controlador->modelo()->get_tipos_propuestas(); + $salida = array(); + foreach ($tipos_propuesta as $tipo => $datos) { + $salida[] = 'propuesta_tipo_' . $tipo; + } + return $salida; + } + + protected function get_propuestas() + { + $propuestas = $this->controlador->modelo()->get_propuestas(); + $salida = array(); + foreach ($propuestas as $propuesta => $datos) { + $salida[] = 'propuesta_' . $propuesta; + } + return $salida; + } + + protected function get_ubicaciones() + { + $ubicaciones = $this->controlador->modelo()->get_ubicaciones(); + $salida = array(); + foreach ($ubicaciones as $ubicacion => $datos) { + $salida[] = 'ubicacion_' . $ubicacion; + } + return $salida; + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/perfil_datos/pagelet_resultado.php b/src/siu/operaciones/perfil_datos/pagelet_resultado.php new file mode 100644 index 0000000..fac15c4 --- /dev/null +++ b/src/siu/operaciones/perfil_datos/pagelet_resultado.php @@ -0,0 +1,25 @@ +data['resultado'] = $this->controlador->modelo()->get_configuracion_resultante(); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/perfil_datos/resultado/default.css b/src/siu/operaciones/perfil_datos/resultado/default.css new file mode 100644 index 0000000..da47b16 --- /dev/null +++ b/src/siu/operaciones/perfil_datos/resultado/default.css @@ -0,0 +1,56 @@ +#lista2 { + counter-reset: li; + list-style: none; + *list-style: decimal; + font: 15px 'trebuchet MS', 'lucida sans'; + padding: 0; + margin-bottom: 4em; + text-shadow: 0 1px 0 rgba(255,255,255,.5); +} + +#lista2 ol { + margin: 0 0 0 2em; +} + +#lista2 li{ + position: relative; + display: block; + padding: .4em .4em .4em 2em; + *padding: .4em; + margin: .5em 0; + background: #ddd; + color: #444; + text-decoration: none; + border-radius: .3em; + transition: all .3s ease-out; +} + +#lista2 li:hover{ + background: #eee; +} + +#lista2 li:hover:before{ + transform: rotate(360deg); +} + +#lista2 li:before{ + content: "+"; + counter-increment: li; + position: absolute; + left: -1.3em; + top: 50%; + margin-top: -1.3em; + background: #87ceeb; + height: 2em; + width: 2em; + line-height: 2em; + border: .3em solid #fff; + text-align: center; + font-weight: bold; + border-radius: 2em; + transition: all .3s ease-out; +} + +.red { + color: red; +} \ No newline at end of file diff --git a/src/siu/operaciones/perfil_datos/resultado/default.twig b/src/siu/operaciones/perfil_datos/resultado/default.twig new file mode 100644 index 0000000..2c15b13 --- /dev/null +++ b/src/siu/operaciones/perfil_datos/resultado/default.twig @@ -0,0 +1,46 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} +{% autoescape false %} + +
    + {% for ra in this.data.resultado%} +
  1. + {{ ra.nombre }} + {% if ra.propuestas %} +
      + {% for propuesta in ra.propuestas %} +
    • + {{ propuesta.nombre }} + {% if propuesta.ubicaciones %} +
        + {% for ubicacion in propuesta.ubicaciones %} +
      • + {{ ubicacion }} +
      • + {% endfor %} +
      + {% else %} +
        +
      • +

        {{ 'perfil_datos.sin_ubicaciones' | trans }}

        +
      • +
      + {% endif %} +
    • + {% endfor %} +
    + {% else %} +
      +
    • +

      {{ 'perfil_datos.sin_propuestas' | trans }}

      + +
    • +
    + {% endif %} + +
  2. + {% endfor %} +
+ +{% endautoescape %} +{% endblock %} diff --git a/src/siu/operaciones/perfil_datos/resultado/pagelet_resultado.js b/src/siu/operaciones/perfil_datos/resultado/pagelet_resultado.js new file mode 100644 index 0000000..0fe2155 --- /dev/null +++ b/src/siu/operaciones/perfil_datos/resultado/pagelet_resultado.js @@ -0,0 +1,9 @@ +kernel.renderer.registrar_pagelet('resultado', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + + } + } +}); diff --git a/src/siu/operaciones/perfil_datos/template.twig b/src/siu/operaciones/perfil_datos/template.twig new file mode 100644 index 0000000..4863b5a --- /dev/null +++ b/src/siu/operaciones/perfil_datos/template.twig @@ -0,0 +1,22 @@ +{% if js_vars %} + +{% endif %} + +
+
+

{{'perfil_datos.titulo'|trans}}

+
+
+ +
+
+ {{ form.render }} +
+
+ {{ resultado.render }} +
+
diff --git a/src/siu/operaciones/perfil_datos/vista.php b/src/siu/operaciones/perfil_datos/vista.php new file mode 100644 index 0000000..93b32ab --- /dev/null +++ b/src/siu/operaciones/perfil_datos/vista.php @@ -0,0 +1,43 @@ +instanciar($clase); + $this->add_pagelet($pl); + return $pl; + } + + function ini() + { + $clase = 'operaciones\perfil_datos\pagelet_config'; + $pl = kernel::localizador()->instanciar($clase, 'form'); + $this->add_pagelet($pl); + + $clase = 'operaciones\perfil_datos\pagelet_resultado'; + $pl = kernel::localizador()->instanciar($clase, 'resultado'); + $this->add_pagelet($pl); + } + + function pagelet($id) + { + $clase = "operaciones\perfil_datos\pagelet_$id"; + return kernel::localizador()->instanciar($clase, $id); + } + + function set_form_activo($pagelet) + { + $this->form_activo = $pagelet; + $this->id_form_activo = $pagelet->get_id(); + $this->add_pagelet($pagelet, 0, 'form'); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/test_cnx/configuracion/default.css b/src/siu/operaciones/test_cnx/configuracion/default.css new file mode 100644 index 0000000..e69de29 diff --git a/src/siu/operaciones/test_cnx/configuracion/default.twig b/src/siu/operaciones/test_cnx/configuracion/default.twig new file mode 100644 index 0000000..a01889f --- /dev/null +++ b/src/siu/operaciones/test_cnx/configuracion/default.twig @@ -0,0 +1,38 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} +
+ {{ 'test_cnx.desc_datos_cnx'|trans|raw }} +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{{ 'test_cnx.vendor'|trans}}:{{ this.data.datos_cnx.vendor }}
{{ 'test_cnx.dbname'|trans}}:{{ this.data.datos_cnx.dbname }}
{{ 'test_cnx.schema'|trans}}:{{ this.data.datos_cnx.schema }}
{{ 'test_cnx.host'|trans}}:{{ this.data.datos_cnx.host }}
{{ 'test_cnx.port'|trans}}:{{ this.data.datos_cnx.port }}
{{ 'test_cnx.pdo_user'|trans}}:{{ this.data.datos_cnx.pdo_user }}
{{ 'test_cnx.pdo_pass'|trans}}:***********
+ +{% endblock %} diff --git a/src/siu/operaciones/test_cnx/configuracion/pagelet_configuracion.js b/src/siu/operaciones/test_cnx/configuracion/pagelet_configuracion.js new file mode 100644 index 0000000..43584aa --- /dev/null +++ b/src/siu/operaciones/test_cnx/configuracion/pagelet_configuracion.js @@ -0,0 +1,8 @@ +kernel.renderer.registrar_pagelet('configuracion', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + } + } +}) diff --git a/src/siu/operaciones/test_cnx/contenido/default.css b/src/siu/operaciones/test_cnx/contenido/default.css new file mode 100644 index 0000000..55e63dc --- /dev/null +++ b/src/siu/operaciones/test_cnx/contenido/default.css @@ -0,0 +1,6 @@ +.error{ + color: red; +} +.success{ + color: green; +} \ No newline at end of file diff --git a/src/siu/operaciones/test_cnx/contenido/default.twig b/src/siu/operaciones/test_cnx/contenido/default.twig new file mode 100644 index 0000000..c30eaa1 --- /dev/null +++ b/src/siu/operaciones/test_cnx/contenido/default.twig @@ -0,0 +1,17 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} +
+
    + {% for entidad in this.data.resultados %} + {% if entidad.resultado %} + {% set clase = 'success' %} + {% else %} + {% set clase = 'error' %} + {% endif %} +
  • + {{ entidad.entidad }}: {{ entidad.resultado_msj }} +
  • + {% endfor %} +
+
+{% endblock %} diff --git a/src/siu/operaciones/test_cnx/contenido/pagelet_contenido.js b/src/siu/operaciones/test_cnx/contenido/pagelet_contenido.js new file mode 100644 index 0000000..d22ef45 --- /dev/null +++ b/src/siu/operaciones/test_cnx/contenido/pagelet_contenido.js @@ -0,0 +1,8 @@ +kernel.renderer.registrar_pagelet('contenido', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + } + } +}) diff --git a/src/siu/operaciones/test_cnx/controlador.php b/src/siu/operaciones/test_cnx/controlador.php new file mode 100644 index 0000000..41fbfc6 --- /dev/null +++ b/src/siu/operaciones/test_cnx/controlador.php @@ -0,0 +1,31 @@ +instanciar('operaciones\test_cnx\modelo'); + } + return self::$modelo; + } + + function ini() + { + + } + + function accion__index() + { + + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/test_cnx/modelo.php b/src/siu/operaciones/test_cnx/modelo.php new file mode 100644 index 0000000..b7105df --- /dev/null +++ b/src/siu/operaciones/test_cnx/modelo.php @@ -0,0 +1,98 @@ +inicializar_test(); + } + + function test() + { + $resultados = array(); + foreach ($this->entidades as $entidad) { + $id = isset($entidad['clave_test']) ? $entidad['clave_test'] : 1; + // Se instancia la entidad correspondiente, considerando los casos particulares + if ($id == 'personas') { + $objeto_cnx = g3::personas(); + } elseif ($id == 'responsables_academicas') { + $objeto_cnx = g3::responsables_academicas(); + } elseif ($id == 'propuestas') { + $objeto_cnx = g3::propuestas(); + } elseif ($id == 'periodos') { + $objeto_cnx = g3::periodos(); + } elseif ($id == 'parametros') { + $objeto_cnx = g3::parametros(); + } elseif ($id == 'titulos_secundario') { + $objeto_cnx = g3::titulos_secundario(); + } elseif ($id == 'turnos') { + $objeto_cnx = g3::turnos(); + } elseif ($id == 'requisitos') { + $objeto_cnx = g3::requisitos(); + } else { + $objeto_cnx = g3::entidad($entidad['id']); + } + // Ejecución del test + $resultado = $objeto_cnx->test($id); + $resultados[] = array( + 'entidad' => $entidad['descr'], + 'resultado' => $resultado['resultado'], + 'resultado_msj' => $resultado['msj'], + ); + \klog($resultado); + } + return $resultados; + } + + //-------------------------------------------------------------------------- + //---- Funciones auxliares ------------------------------------------------- + //-------------------------------------------------------------------------- + + protected function inicializar_test() + { + $this->entidades = array( + // mug + array('id' => 'continentes', 'descr' => 'Continentes', 'clave_test' => 'AM'), + array('id' => 'paises', 'descr' => 'Paises', 'clave_test' => '54'), + array('id' => 'provincias', 'descr' => 'Provincias', 'clave_test' => '5406'), + array('id' => 'localidades', 'descr' => 'Localidades', 'clave_test' => '17159'), + array('id' => 'dptos_partidos', 'descr' => 'Departamentos / Partidos', 'clave_test' => '5406056'), + array('id' => 'cod_postales', 'descr' => 'Codigos Postales', 'clave_test' => array('localidad' => 1, 'codigo_postal' => 1001)), + // mdp + array('id' => 'nacionalidades', 'descr' => 'Nacionalidades', 'clave_test' => '1'), + array('id' => 'tipos_allegados', 'descr' => 'Tipos de allegados', 'clave_test' => 'P'), + array('id' => 'tipos_documentos', 'descr' => 'Tipos de documentos', 'clave_test' => '0'), + array('id' => 'discapacidades_dificultad', 'descr' => 'Discapacidades - Dificultades', 'clave_test' => '1'), + array('id' => 'titulos_secundario', 'descr' => 'Títulos Secundarios', 'clave_test' => '1'), + array('id' => 'pueblos_originarios', 'descr' => 'Pueblos Originarios', 'clave_test' => '1'), + array('id' => 'tipos_vivienda', 'descr' => 'Tipos de vivienda', 'clave_test' => '5'), + array('id' => 'abandono_estudio', 'descr' => 'Razones de abandono de estudios', 'clave_test' => '1'), + array('id' => 'orientacion_vocacional', 'descr' => 'Orientación vocacional', 'clave_test' => '1'), + array('id' => 'cobertura_salud', 'descr' => 'Cobertura de salud', 'clave_test' => '1'), + // sga + array('id' => 'responsables_academicas', 'descr' => 'Responsables Académicas', 'clave_test' => '1'), + array('id' => 'ubicaciones', 'descr' => 'Ubicaciones', 'clave_test' => '1'), + array('id' => 'propuestas', 'descr' => 'Propuestas', 'clave_test' => '1000'), + array('id' => 'personas', 'descr' => 'Personas', 'clave_test' => array('pais_documento' => 54, 'tipo_documento' => 0, 'nro_documento' => 1)), + array('id' => 'colegios', 'descr' => 'Colegios', 'clave_test' => '2'), + array('id' => 'dias_no_laborables', 'descr' => 'Días no hábiles', 'clave_test' => '2017-05-25'), + array('id' => 'entes_emisores_ci', 'descr' => 'Entes emisores CI', 'clave_test' => '1'), + array('id' => 'periodos', 'descr' => 'Períodos de Preinscripción'), + // Parámetros G3 + array('id' => 'parametros', 'descr' => 'Parámetros de G3', 'clave_test' => 'pre_meses_vigencia_preinsc'), + // Turnos + array('id' => 'turnos', 'descr' => 'Turnos para presentación', 'clave_test' => array('ra' => 1, 'fecha' => '10/10/2017')), + // Requisitos + array('id' => 'requisitos', 'descr' => 'Requisitos de ingreso', 'clave_test' => array('1000', '1')), + // Extensiones + array('id' => 'extensiones', 'descr' => 'Extensiones permitidas para archivos RDI'), + ); + } +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/test_cnx/pagelet_configuracion.php b/src/siu/operaciones/test_cnx/pagelet_configuracion.php new file mode 100644 index 0000000..06a76b3 --- /dev/null +++ b/src/siu/operaciones/test_cnx/pagelet_configuracion.php @@ -0,0 +1,26 @@ +data['datos_cnx'] = kernel::proyecto()->get_parametros_db_gestion(); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/test_cnx/pagelet_contenido.php b/src/siu/operaciones/test_cnx/pagelet_contenido.php new file mode 100644 index 0000000..2f9283a --- /dev/null +++ b/src/siu/operaciones/test_cnx/pagelet_contenido.php @@ -0,0 +1,26 @@ +data['resultados'] = $this->controlador->modelo()->test(); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/test_cnx/template.twig b/src/siu/operaciones/test_cnx/template.twig new file mode 100644 index 0000000..346e9bb --- /dev/null +++ b/src/siu/operaciones/test_cnx/template.twig @@ -0,0 +1,22 @@ +{% if js_vars %} + +{% endif %} + +
+
+

{{"test_cnx.titulo"|trans}}

+
+
+ +
+
+ {{ configuracion.render }} +
+
+ {{ test.render }} +
+
\ No newline at end of file diff --git a/src/siu/operaciones/test_cnx/vista.php b/src/siu/operaciones/test_cnx/vista.php new file mode 100644 index 0000000..d5ed0a6 --- /dev/null +++ b/src/siu/operaciones/test_cnx/vista.php @@ -0,0 +1,36 @@ +instanciar($clase); + $this->add_pagelet($pl); + return $pl; + } + + function ini() + { + $clase = 'operaciones\test_cnx\pagelet_contenido'; + $pl = kernel::localizador()->instanciar($clase, 'test'); + $this->add_pagelet($pl); + + $clase = 'operaciones\test_cnx\pagelet_configuracion'; + $pl = kernel::localizador()->instanciar($clase, 'configuracion'); + $this->add_pagelet($pl); + } + + function pagelet($id) + { + $clase = "operaciones\test_cnx\pagelet_$id"; + return kernel::localizador()->instanciar($clase, $id); + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/test_mail/configuracion/default.css b/src/siu/operaciones/test_mail/configuracion/default.css new file mode 100644 index 0000000..e69de29 diff --git a/src/siu/operaciones/test_mail/configuracion/default.twig b/src/siu/operaciones/test_mail/configuracion/default.twig new file mode 100644 index 0000000..4fc57c9 --- /dev/null +++ b/src/siu/operaciones/test_mail/configuracion/default.twig @@ -0,0 +1,25 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} +

{{"config_mail"|trans}}

+
+ {% if this.data.es_default %} +
+ {{ 'config_mail_default'|trans|raw }} +
+ {% else %} +
+ {{ 'desc_datos_mail'|trans|raw }} +
+ {% endif %} + + + {% for key, val in this.data.smtp if val is not iterable %} + + + + + {% endfor %} + +
{{ ('mail_' ~ key) | trans}}{{ val }}
+ +{% endblock %} diff --git a/src/siu/operaciones/test_mail/configuracion/pagelet_configuracion.js b/src/siu/operaciones/test_mail/configuracion/pagelet_configuracion.js new file mode 100644 index 0000000..43584aa --- /dev/null +++ b/src/siu/operaciones/test_mail/configuracion/pagelet_configuracion.js @@ -0,0 +1,8 @@ +kernel.renderer.registrar_pagelet('configuracion', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + } + } +}) diff --git a/src/siu/operaciones/test_mail/controlador.php b/src/siu/operaciones/test_mail/controlador.php new file mode 100644 index 0000000..6bfe17f --- /dev/null +++ b/src/siu/operaciones/test_mail/controlador.php @@ -0,0 +1,84 @@ +get_parametros_smtp(); + return ((!empty($smtp['from'])) && ($smtp['from'] == 'preinscripcion@gmail.com')) || + ((!empty($smtp['usuario'])) && ($smtp['usuario'] == 'preinscripcion@gmail.com')); + } + + function accion__index() + { + $this->vista()->set_pagelet('form_test'); + } + + function accion__probar_mail() + { + $pagelet = $this->vista()->set_pagelet('form_test'); + + if (kernel::request()->isPost()) { + // Validación de formulario y alta de usuario + $form = $pagelet->get_form(); + if ($form->procesar()) { + $valores = $form->get_datos(); + $email = $valores['e_mail']; + $exito = $this->enviar_mail_prueba($email); + if ($exito) { + $pagelet->set_estado_info(pagelet_form_test::MAIL_ENVIADO); + } else { + $pagelet->set_estado_info(pagelet_form_test::ERROR_ENVIO_MAIL); + } + } else { + if ($form->tiene_errores()) { + $pagelet->set_estado_info(pagelet_form_test::FORM_ERROR_VALIDACION); + } + } + } + + kernel::renderer()->add($pagelet); + } + + protected function enviar_mail_prueba($dir_mail) + { + $asunto = $this->trans('asunto_email_prueba'); + $tpl = kernel::load_template('form_test/mail_prueba.twig'); + $cuerpo = $tpl->render(array()); + + $mail = new mail($dir_mail, $asunto, $cuerpo, null, '', preinscripcion::charset); + $mail->set_html(true); + + try { + $mail->enviar(); + $exito = true; + } catch (\Exception $e) { + $exito = false; + } + + return $exito; + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/test_mail/form_test/default.twig b/src/siu/operaciones/test_mail/form_test/default.twig new file mode 100644 index 0000000..1c8aa75 --- /dev/null +++ b/src/siu/operaciones/test_mail/form_test/default.twig @@ -0,0 +1,32 @@ +{% extends "kernel/pagelet.twig" %} +{% block contenido %} +{% autoescape false %} +{% if this.data.usuario_default != 'true' %} +

{{"mail_de_prueba"|trans|capitalize}}

+
+{% if this.estado == 'mail_enviado' %} +
+ {{ this.data.mensaje }} +
+{% elseif this.estado == 'error_envio_mail' %} +
+ {{ this.data.mensaje }} +
+{% else %} + {% set form = this.get_form() %} + {{ form.encabezado }} +
+ {{ form.control_group('e_mail', 'span10') }} +
+
+
+ {{ form.submit_button('enviar_mail', 'enviar_mail')}} +
+
+ +{% endif %} +{% endif %} + +{% endautoescape %} + +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/test_mail/form_test/form_prueba.php b/src/siu/operaciones/test_mail/form_test/form_prueba.php new file mode 100644 index 0000000..dd0de40 --- /dev/null +++ b/src/siu/operaciones/test_mail/form_test/form_prueba.php @@ -0,0 +1,34 @@ +crear('test_mail', 'probar_mail', array('form_test')); + } + + protected function generar_definicion() + { + $this->set_campo('e_mail', array( + form::label => 'prueba_mail', + form::obligatorio => true, + form::filtro => validador::TIPO_MAIL, + form::filtro_params => array('allowempty' => true), + form::elemento => array('tipo' => 'text'), + form::largo => 50 + )); + } + +} +?> diff --git a/src/siu/operaciones/test_mail/form_test/mail_prueba.twig b/src/siu/operaciones/test_mail/form_test/mail_prueba.twig new file mode 100644 index 0000000..7cb60e9 --- /dev/null +++ b/src/siu/operaciones/test_mail/form_test/mail_prueba.twig @@ -0,0 +1,11 @@ + + + + + + +

+ {{ 'cuerpo_email_prueba'|trans|raw }} +

+ + \ No newline at end of file diff --git a/src/siu/operaciones/test_mail/form_test/pagelet_form_test.js b/src/siu/operaciones/test_mail/form_test/pagelet_form_test.js new file mode 100644 index 0000000..30b9b88 --- /dev/null +++ b/src/siu/operaciones/test_mail/form_test/pagelet_form_test.js @@ -0,0 +1,9 @@ +kernel.renderer.registrar_pagelet('form_test', function(info) { + var id = '#' + info.id; + + return { + onload: function() { + + } + } +}) diff --git a/src/siu/operaciones/test_mail/pagelet_configuracion.php b/src/siu/operaciones/test_mail/pagelet_configuracion.php new file mode 100644 index 0000000..b59141b --- /dev/null +++ b/src/siu/operaciones/test_mail/pagelet_configuracion.php @@ -0,0 +1,35 @@ +data['smtp'] = kernel::proyecto()->get_parametros_smtp(); + + if (isset($this->data['smtp']['from_name'])) { + // Se arregla problema de encoding con el campo 'from_name', dice 'SIU-Preinscripción' en lugar de 'SIU-Preinscripción'. + $valid_utf8 = mb_check_encoding($this->data['smtp']['from_name'], 'UTF-8'); + if ($valid_utf8) { + $this->data['smtp']['from_name'] = utf8_decode($this->data['smtp']['from_name']); + } + } + + $this->data['es_default'] = $this->controlador->es_usuario_default(); + } + +} \ No newline at end of file diff --git a/src/siu/operaciones/test_mail/pagelet_form_test.php b/src/siu/operaciones/test_mail/pagelet_form_test.php new file mode 100644 index 0000000..e6b7da4 --- /dev/null +++ b/src/siu/operaciones/test_mail/pagelet_form_test.php @@ -0,0 +1,58 @@ +form)) { + $this->form = kernel::localizador()->instanciar('operaciones\test_mail\form_test\form_prueba'); + } + return $this->form; + } + + function prepare() + { + if ($this->controlador->es_usuario_default()) { + $this->data['usuario_default'] = true; + } else { + $this->data['usuario_default'] = false; + + $form = $this->get_form(); + + switch ($this->estado) { + case self::MAIL_ENVIADO: + $this->data['mensaje'] = kernel::traductor()->trans('mensaje_prueba_enviado'); + break; + case self::ERROR_ENVIO_MAIL: + $this->data['mensaje'] = kernel::traductor()->trans('mensaje_prueba_error'); + break; + case self::FORM_ERROR_VALIDACION : + break; + default: + $form->inicializar(); + } + + $this->add_form($form); + } + } + +} +?> \ No newline at end of file diff --git a/src/siu/operaciones/test_mail/template.twig b/src/siu/operaciones/test_mail/template.twig new file mode 100644 index 0000000..e4ee6db --- /dev/null +++ b/src/siu/operaciones/test_mail/template.twig @@ -0,0 +1,7 @@ +{% extends "kernel/dos_columnas_login.twig" %} +{% block columna_1 %} + {{ configuracion.render }} +{% endblock %} +{% block columna_2 %} + {{ form.render }} +{% endblock %} \ No newline at end of file diff --git a/src/siu/operaciones/test_mail/vista.php b/src/siu/operaciones/test_mail/vista.php new file mode 100644 index 0000000..9f0c049 --- /dev/null +++ b/src/siu/operaciones/test_mail/vista.php @@ -0,0 +1,34 @@ +instanciar($clase, 'form'); + $this->add_pagelet($pl); + return $pl; + } + + function ini() + { + $clase = 'operaciones\\test_mail\\pagelet_configuracion'; + $pl = kernel::localizador()->instanciar($clase, 'configuracion'); + $this->add_pagelet($pl); + + kernel::pagina()->set_etiqueta('titulo', kernel::traductor()->trans('tit_test_mail')); + } + + function pagelet($id) + { + $clase = "operaciones\\test_mail\\pagelet_$id"; + return kernel::localizador()->instanciar($clase, $id); + } + +} +?> \ No newline at end of file diff --git a/src/siu/preinscripcion.php b/src/siu/preinscripcion.php new file mode 100644 index 0000000..e1ae3a8 --- /dev/null +++ b/src/siu/preinscripcion.php @@ -0,0 +1,153 @@ +instanciar_singleton("modelo\\usuario"); + } + + /** + * Instancia el modelo de usuarios administradores + * + * @return modelo\admin + */ + static function admin() + { + return kernel::localizador()->instanciar_singleton("modelo\\admin"); + } + + //-------------------------------------------------------------------------- + //---- Paths comunes ------------------------------------------------------- + //-------------------------------------------------------------------------- + + static function dir() + { + return \realpath(\dirname(__FILE__)); + } + + static function dir_fonts() + { + return bootstrap::get_dir_raiz() . '/vendor/rebuy/ezpdf/src/ezpdf/fonts/'; + } + + static function dir_temp() + { + return kernel::proyecto()->get_dir_temp(); + } + + //-------------------------------------------------------------------------- + + static function servicios_externos() + { + if (!isset(self::$servicios_externos)) { + self::$servicios_externos = new servicios_externos_preinscripcion(); + } + return self::$servicios_externos; + } + + //-------------------------------------------------------------------------- + + static function mail_configurado() + { + $smtp = kernel::proyecto()->get_parametros_smtp(); + if ((empty($smtp)) || (empty($smtp['from'])) || ($smtp['from'] == 'preinscripcion@gmail.com')) { + // No hay configuración o está la configuración de ejemplo. + return false; + } else { + return true; + } + } + + /** + * Determina si la versión de la base se corresponde con la versión del sistema. + * + * @return boolean + */ + static function versiones_compatibles() + { + try { + // Versión del archivo version.ini + $version_sistema = kernel::proyecto()->get_version_sistema(); + // Versión del ultimo registro de la tabla app_versiones_base columna version_base + $version_base = util::consultas()->get_version_base(); + // https://www.php.net/manual/es/function.version-compare.php + return version_compare($version_sistema, $version_base, '=='); + } catch (errores\error_preinscripcion_cnx_bd $e) { + throw $e; + } + } + +} \ No newline at end of file diff --git a/src/siu/util/consola/comandos/comando_preinscripcion.php b/src/siu/util/consola/comandos/comando_preinscripcion.php new file mode 100644 index 0000000..74d2bdc --- /dev/null +++ b/src/siu/util/consola/comandos/comando_preinscripcion.php @@ -0,0 +1,15 @@ + true, 'nombre' => 'css/preinscripcion.css'], + 'css/facebox.css', + 'css/jquery-ui.css', + ]; + + protected $css_not_browser = [ + 'css/bootstrap.css', + 'css/bootstrap-responsive.css', + 'css/preinscripcion.css', + 'css/preinscripcion-responsive.css', + 'css/facebox.css', + 'css/jquery-ui.css', + ]; + + function __construct() + { + $this->path_destino = preinscripcion::dir() . '/www/_comp'; + parent::__construct(); + } + + protected function get_namespaces() + { + $rs = array( + 'siu' => realpath(preinscripcion::dir() . '/..') + ); + $base_pers_dir = realpath(preinscripcion::dir() . '/../pers'); + $pers = array_filter(glob("$base_pers_dir/*"), 'is_dir'); + foreach ($pers as $path) { + $nombre = basename($path); + $rs[$nombre] = dirname($path); + } + + return $rs; + } + + protected function execute(Console\Input\InputInterface $input, Console\Output\OutputInterface $output) + { + $this->bootstrap_kernel(); + + kernel::log_cli()->debug('=== Archivos JSs a mashear ==='); + kernel::log_cli()->debug(print_r($this->js, true)); + kernel::log_cli()->debug('=== Archivos CSSs Browser a mashear ==='); + kernel::log_cli()->debug(print_r($this->css_browser, true)); + kernel::log_cli()->debug('=== Archivos CSSs not Browser a mashear ==='); + kernel::log_cli()->debug(print_r($this->css_not_browser, true)); + + $this->preparar_compilacion($input, $output); + + $this->mostrar_mensaje('Masheando archivos'); + $this->mash($this->js, 'preinscripcion_mash.js'); + $this->mash($this->css_browser, 'preinscripcion_mash.css'); + $this->mash($this->css_not_browser, 'preinscripcion_mash_not_browser.css'); + } + + protected function bootstrap_kernel($ua = false) + { + $_SERVER['PERFIL'] = 'consola'; + \siu\bootstrap::cargar(true, $ua); + } + + protected function preparar_compilacion(Console\Input\InputInterface $input, Console\Output\OutputInterface $output) + { + $this->input = $input; + $this->output = $output; + + $this->mostrar_mensaje('Borrando compilaciones anteriores'); + $this->borrar_directorio($this->path_destino, false); + + $this->mostrar_mensaje('Borrando cache de twig'); + $this->borrar_cache_twig(); + $this->path_destino = $input->getArgument('path'); + $namespaces = $this->get_namespaces(); + $recursos = array( + 'comun' => array(), + 'pagelets' => array() + ); + + foreach ($namespaces as $id => $dir) { + $path_ns = $dir . "/$id"; + $recursos['www'][$id] = $this->compilar_www($path_ns); + $recursos['comun'][$id] = $this->compilar_comun($path_ns); + $recursos['pagelets'][$id] = $this->compilar_pagelets($path_ns); + } + + $this->crear_compilacion($recursos); + $this->mostrar_mensaje('Fin de compresion'); + } + + function borrar_directorio($dir, $borrar_carpeta = true) + { + if (!$dh = @opendir($dir)) { + return; + } + while (false !== ($obj = readdir($dh))) { + if ($obj == '.' || $obj == '..') + continue; + if (!@unlink($dir . '/' . $obj)) { + $this->borrar_directorio($dir . '/' . $obj, true); + } + } + closedir($dh); + if ($borrar_carpeta) { + @rmdir($dir); + } + } + + protected function mash($files, $filename) + { + $type = pathinfo($filename, \PATHINFO_EXTENSION); + $siu_files = array(); + $archivos_por_pers = array(); + $personalizaciones = $this->get_namespaces(); + + foreach ($files as $key => $file) { + if (is_array($file)) { + $siu_files[$key] = $this->path_destino.'/siu/'.$file['nombre']; + $buscar_pers = isset($file['pers']) && $file['pers']; + if ($buscar_pers) { + foreach (array_keys($personalizaciones) as $id) { + if ($id == 'siu') continue; + $pers_file = "$this->path_destino/$id/{$file['nombre']}"; + if (file_exists($pers_file)) { + $archivos_por_pers[$id][] = $pers_file; + } + } + } + } else { + $siu_files[$key] = $this->path_destino.'/siu/'.$file; + } + } + + $file_list = implode(' ', $siu_files); + $salida = "$this->path_destino/siu/$type/$filename"; + + if (\SIU\Chulupi\util\ManejadorArchivos::es_windows()) { + $salida = str_replace('/', "\\", $salida); + $cmd = "type $file_list >> $salida"; + foreach ($files as $file) { + $file = str_replace('/', "\\", $file); + $cmd = "type $file >> $salida"; + exec($cmd); + } + } else { + $cmd = "cat $file_list > $salida"; + exec($cmd); + } + + + if (!empty($archivos_por_pers)) { + foreach ($archivos_por_pers as $pers => $archivos_pers) { + $file_list = implode(' ', $archivos_pers); + $salida = "$this->path_destino/$pers/$type/$filename"; + + if (\SIU\Chulupi\util\ManejadorArchivos::es_windows()) { + $salida = str_replace('/', "\\", $salida); + $cmd = "type $file_list >> $salida"; + foreach ($files as $file) { + $file = str_replace('/', "\\", $file); + $cmd = "type $file >> $salida"; + exec($cmd); + } + } else { + $cmd = "cat $file_list > $salida"; + exec($cmd); + } + } + } + } + + protected function guardar_archivo($archivo, $path_nuevo, $comprimir = true, $absoluto = false) + { + if (!manejador_archivos::es_windows()) { + parent::guardar_archivo($archivo, $path_nuevo, $comprimir, $absoluto); + return; + } + + if (!$absoluto) { + $archivo = kernel::localizador()->path_recurso($archivo); + } + + manejador_archivos::crear_archivo_con_datos($path_nuevo, ''); + if ($comprimir) { + + $encoding = kernel::proyecto()->get_encoding(); + $cmd = "yuicompressor-2.4.2.jar $archivo --charset $encoding -o $path_nuevo"; + exec($cmd); + } else { + copy($archivo, $path_nuevo); + } + } + +} \ No newline at end of file diff --git a/src/siu/util/consola/comandos/user_admin.php b/src/siu/util/consola/comandos/user_admin.php new file mode 100644 index 0000000..e78387b --- /dev/null +++ b/src/siu/util/consola/comandos/user_admin.php @@ -0,0 +1,91 @@ +setName('user_admin') + ->setDescription('Genera un usuario administrador') + ->setHelp(sprintf( + '%sGenera un usuario administrador.%s', + PHP_EOL, + PHP_EOL + )); + } + + protected function execute(Console\Input\InputInterface $input, Console\Output\OutputInterface $output) + { + $this->input = $input; + $this->output = $output; + + $this->bootstrap_kernel(); + + $helper = $this->getHelper('question'); + + // Nombre de usuario + do { + $question_username = new Console\Question\Question('Ingrese el nombre del usuario administrador (ENTER asume "admin"): ', 'admin'); + $username = $helper->ask($input, $output, $question_username); + } while (!$this->usuario_valido($username)); + + // Clave + do { + $question_password = new Console\Question\Question('Ingrese el PASSWORD del usuario administrador: '); + $password = $helper->ask($input, $output, $question_password); + } while (!$this->clave_valida($username, $password)); + + // ID pto de acceso + do { + $question_id_pto_acceso = new Console\Question\Question('Ingrese el ID DE PUNTO DE ACCESO en el que operara del usuario administrador (ante la duda, verificar el valor de "SetEnv ID_PTO_ACCESO" en alias.conf): '); + $id_pto_acceso = $helper->ask($input, $output, $question_id_pto_acceso); + } while (empty($id_pto_acceso)); + + // Se genera usuario + preinscripcion::admin()->crear_usuario($username, $password, $id_pto_acceso); + + // Mensajes finales + $output->writeln("---------------------------------------------------------"); + $output->writeln("Se ha creado el siguiente usuario administrador:"); + $output->writeln(" - username: " . $username); + $output->writeln(" - password: " . $password); + $output->writeln(" - ID_PTO_ACCESO: " . $id_pto_acceso); + $output->writeln("---------------------------------------------------------"); + } + + protected function usuario_valido($username) + { + try { + preinscripcion::admin()->usuario_valido($username); + } catch (\siu\errores\error_preinscripcion_usuario $ex) { + $this->output->writeln("" . $ex->get_mensaje() . ""); + $this->output->writeln(""); + return false; + } + return true; + } + + protected function clave_valida($username, $password) + { + try { + preinscripcion::admin()->clave_valida($username, $password); + } catch (\siu\errores\error_preinscripcion_clave $ex) { + $this->output->writeln("" . $ex->get_mensaje() . ""); + $this->output->writeln(""); + return false; + } + return true; + } + +} +?> diff --git a/src/siu/util/consola/gadmin.php b/src/siu/util/consola/gadmin.php new file mode 100644 index 0000000..c795d0e --- /dev/null +++ b/src/siu/util/consola/gadmin.php @@ -0,0 +1,37 @@ +addCommands(array( + new comandos\compilar_recursos(), + new comandos\user_admin(), + )); + } + + public function run(InputInterface $input = null, OutputInterface $output = null) + { + try { + $status = parent::run(); + kernel::log()->guardar(); + exit($status); + } catch (\Exception $e) { + kernel::log()->add_error($e); + kernel::log()->guardar(); + } + } + +} \ No newline at end of file diff --git a/src/siu/util/consola/limpiar_cache.php b/src/siu/util/consola/limpiar_cache.php new file mode 100644 index 0000000..d240678 --- /dev/null +++ b/src/siu/util/consola/limpiar_cache.php @@ -0,0 +1,87 @@ +setName('limpiar_cache') + ->setDescription('Limpia la cache de APC') + ->setHelp(sprintf( + '%sLimpia la cache de APC.%s', + PHP_EOL, + PHP_EOL + )); + } + + protected function execute(Console\Input\InputInterface $input, Console\Output\OutputInterface $output) + { + $this->input = $input; + $this->output = $output; + + if (! extension_loaded('curl')) { + die("la extensión curl no está instalada. En sistemas basados en debian ejecute:\n apt-get install php5-curl\n"); + } + + $path_archivo_alias = realpath(__DIR__.'/../../../../../instalacion/alias.conf'); + + if ($path_archivo_alias !== false) { + preg_match_all('/ACC_ALIAS=(.*)/i', file_get_contents($path_archivo_alias), $result); + } + + if ($path_archivo_alias === false || empty($result[1])) { + echo "No se encontró el archivo de alias, no se puede armar la url.\n"; + $this->die_error(); + } + + $path_clearapc = __DIR__.'/../../../www/clearapc.php'; + file_put_contents($path_clearapc, ""); + $exito = false; + foreach ($result[1] as $alias) { + $url = "http://localhost$alias/clearapc.php"; + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_HEADER, 0); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + $output = curl_exec($ch); + if (strpos($output, 'EXITO') !== false) { + $exito = true; + break; + } + } + + unlink(realpath($path_clearapc)); + + if ($exito) { + echo "La cache se limpió correctamente\n"; + } else { + echo "No se pudo llegar a ninguna de estas urls: \n"; + foreach ($result[1] as $alias) { + $url = "http://localhost$alias/clearapc.php"; + echo "\t* $url\n"; + } + $this->die_error(); + } + } + + protected function die_error() + { + echo "Para limpiar la cache manualmente debe realizar los siguientes pasos\n"; + echo "\t1. cd /path/to/guarani/\n"; + echo "\t2. cp src/siu/var/clearapc.php src/siu/www\n"; + echo "\t3. acceder a través del navegador a http://url_guarani/alias_guarani/clearapc.php\n"; + echo "\t4. rm src/siu/var/clearapc.php\n"; + echo "RECUERDE borrar el archivo (4)!\n"; + die(); + } +} \ No newline at end of file diff --git a/src/siu/util/consola/run.php b/src/siu/util/consola/run.php new file mode 100644 index 0000000..4a05cad --- /dev/null +++ b/src/siu/util/consola/run.php @@ -0,0 +1,8 @@ +run(); +?> \ No newline at end of file diff --git a/src/siu/www/css/bootstrap-responsive.css b/src/siu/www/css/bootstrap-responsive.css new file mode 100644 index 0000000..06e55c0 --- /dev/null +++ b/src/siu/www/css/bootstrap-responsive.css @@ -0,0 +1,815 @@ +/*! + * Bootstrap Responsive v2.0.4 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 28px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} + +.hidden { + display: none; + visibility: hidden; +} + +.visible-phone { + display: none !important; +} + +.visible-tablet { + display: none !important; +} + +.hidden-desktop { + display: none !important; +} + +@media (max-width: 767px) { + .visible-phone { + display: inherit !important; + } + .hidden-phone { + display: none !important; + } + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 979px) { + .visible-tablet { + display: inherit !important; + } + .hidden-tablet { + display: none !important; + } + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important ; + } +} + +@media (max-width: 480px) { + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + .page-header h1 small { + display: block; + line-height: 18px; + } + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + .form-horizontal .control-group > label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + .form-horizontal .controls { + margin-left: 0; + } + .form-horizontal .control-list { + padding-top: 0; + } + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + .modal { + position: absolute; + top: 10px; + right: 10px; + left: 10px; + width: auto; + margin: 0; + } + .modal.fade.in { + top: auto; + } + .modal-header .close { + padding: 10px; + margin: -10px; + } + .carousel-caption { + position: static; + } +} + +@media (max-width: 767px) { + body { + padding-right: 20px; + padding-left: 20px; + } + .navbar-fixed-top, + .navbar-fixed-bottom { + margin-right: -20px; + margin-left: -20px; + } + .container-fluid { + padding: 0; + } + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + .dl-horizontal dd { + margin-left: 0; + } + .container { + width: auto; + } + .row-fluid { + width: 100%; + } + .row, + .thumbnails { + margin-left: 0; + } + [class*="span"], + .row-fluid [class*="span"] { + display: block; + float: none; + width: auto; + margin-left: 0; + } + .input-large, + .input-xlarge, + .input-xxlarge, + input[class*="span"], + select[class*="span"], + textarea[class*="span"], + .uneditable-input { + display: block; + width: 100%; + min-height: 28px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + } + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } +} + +@media (min-width: 768px) and (max-width: 979px) { + .row { + margin-left: -20px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + margin-left: 20px; + } + .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + .span12 { + width: 724px; + } + .span11 { + width: 662px; + } + .span10 { + width: 600px; + } + .span9 { + width: 538px; + } + .span8 { + width: 476px; + } + .span7 { + width: 414px; + } + .span6 { + width: 352px; + } + .span5 { + width: 290px; + } + .span4 { + width: 228px; + } + .span3 { + width: 166px; + } + .span2 { + width: 104px; + } + .span1 { + width: 42px; + } + .offset12 { + margin-left: 764px; + } + .offset11 { + margin-left: 702px; + } + .offset10 { + margin-left: 640px; + } + .offset9 { + margin-left: 578px; + } + .offset8 { + margin-left: 516px; + } + .offset7 { + margin-left: 454px; + } + .offset6 { + margin-left: 392px; + } + .offset5 { + margin-left: 330px; + } + .offset4 { + margin-left: 268px; + } + .offset3 { + margin-left: 206px; + } + .offset2 { + margin-left: 144px; + } + .offset1 { + margin-left: 82px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 28px; + margin-left: 2.762430939%; + *margin-left: 2.709239449638298%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .span12 { + width: 99.999999993%; + *width: 99.9468085036383%; + } + .row-fluid .span11 { + width: 91.436464082%; + *width: 91.38327259263829%; + } + .row-fluid .span10 { + width: 82.87292817100001%; + *width: 82.8197366816383%; + } + .row-fluid .span9 { + width: 74.30939226%; + *width: 74.25620077063829%; + } + .row-fluid .span8 { + width: 65.74585634900001%; + *width: 65.6926648596383%; + } + .row-fluid .span7 { + width: 57.182320438000005%; + *width: 57.129128948638304%; + } + .row-fluid .span6 { + width: 48.618784527%; + *width: 48.5655930376383%; + } + .row-fluid .span5 { + width: 40.055248616%; + *width: 40.0020571266383%; + } + .row-fluid .span4 { + width: 31.491712705%; + *width: 31.4385212156383%; + } + .row-fluid .span3 { + width: 22.928176794%; + *width: 22.874985304638297%; + } + .row-fluid .span2 { + width: 14.364640883%; + *width: 14.311449393638298%; + } + .row-fluid .span1 { + width: 5.801104972%; + *width: 5.747913482638298%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 714px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 652px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 590px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 528px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 466px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 404px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 342px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 280px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 218px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 156px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 94px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 32px; + } +} + +@media (min-width: 1200px) { + .row { + margin-left: -30px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + margin-left: 30px; + } + .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 1170px; + } + .span12 { + width: 1170px; + } + .span11 { + width: 1070px; + } + .span10 { + width: 970px; + } + .span9 { + width: 870px; + } + .span8 { + width: 770px; + } + .span7 { + width: 670px; + } + .span6 { + width: 570px; + } + .span5 { + width: 470px; + } + .span4 { + width: 370px; + } + .span3 { + width: 270px; + } + .span2 { + width: 170px; + } + .span1 { + width: 70px; + } + .offset12 { + margin-left: 1230px; + } + .offset11 { + margin-left: 1130px; + } + .offset10 { + margin-left: 1030px; + } + .offset9 { + margin-left: 930px; + } + .offset8 { + margin-left: 830px; + } + .offset7 { + margin-left: 730px; + } + .offset6 { + margin-left: 630px; + } + .offset5 { + margin-left: 530px; + } + .offset4 { + margin-left: 430px; + } + .offset3 { + margin-left: 330px; + } + .offset2 { + margin-left: 230px; + } + .offset1 { + margin-left: 130px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 28px; + margin-left: 2.564102564%; + *margin-left: 2.510911074638298%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.45299145300001%; + *width: 91.3997999636383%; + } + .row-fluid .span10 { + width: 82.905982906%; + *width: 82.8527914166383%; + } + .row-fluid .span9 { + width: 74.358974359%; + *width: 74.30578286963829%; + } + .row-fluid .span8 { + width: 65.81196581200001%; + *width: 65.7587743226383%; + } + .row-fluid .span7 { + width: 57.264957265%; + *width: 57.2117657756383%; + } + .row-fluid .span6 { + width: 48.717948718%; + *width: 48.6647572286383%; + } + .row-fluid .span5 { + width: 40.170940171000005%; + *width: 40.117748681638304%; + } + .row-fluid .span4 { + width: 31.623931624%; + *width: 31.5707401346383%; + } + .row-fluid .span3 { + width: 23.076923077%; + *width: 23.0237315876383%; + } + .row-fluid .span2 { + width: 14.529914530000001%; + *width: 14.4767230406383%; + } + .row-fluid .span1 { + width: 5.982905983%; + *width: 5.929714493638298%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 1160px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 1060px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 960px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 860px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 760px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 660px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 560px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 460px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 360px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 260px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 160px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 60px; + } + .thumbnails { + margin-left: -30px; + } + .thumbnails > li { + margin-left: 30px; + } + .row-fluid .thumbnails { + margin-left: 0; + } +} + +@media (max-width: 979px) { + body { + padding-top: 0; + } + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + .navbar-fixed-top { + margin-bottom: 18px; + } + .navbar-fixed-bottom { + margin-top: 18px; + } + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + .navbar .container { + width: auto; + padding: 0; + } + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + .nav-collapse { + clear: both; + } + .nav-collapse .nav { + float: none; + margin: 0 0 9px; + } + .nav-collapse .nav > li { + float: none; + } + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + .nav-collapse .nav > .divider-vertical { + display: none; + } + .nav-collapse .nav .nav-header { + color: #999999; + text-shadow: none; + } + .nav-collapse .nav > li > a, + .nav-collapse .dropdown-menu a { + padding: 6px 15px; + font-weight: bold; + color: #999999; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + .nav-collapse .nav > li > a:hover, + .nav-collapse .dropdown-menu a:hover { + background-color: #222222; + } + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + .nav-collapse .dropdown-menu { + position: static; + top: auto; + left: auto; + display: block; + float: none; + max-width: none; + padding: 0; + margin: 0 15px; + background-color: transparent; + border: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + } + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + .nav-collapse .dropdown-menu .divider { + display: none; + } + .nav-collapse .navbar-form, + .nav-collapse .navbar-search { + float: none; + padding: 9px 15px; + margin: 9px 0; + border-top: 1px solid #222222; + border-bottom: 1px solid #222222; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + } + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + .navbar .btn-navbar { + display: block; + } + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} + +@media (min-width: 980px) { + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} diff --git a/src/siu/www/css/bootstrap.css b/src/siu/www/css/bootstrap.css new file mode 100644 index 0000000..bb40c85 --- /dev/null +++ b/src/siu/www/css/bootstrap.css @@ -0,0 +1,4983 @@ +/*! + * Bootstrap v2.0.4 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} + +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +audio:not([controls]) { + display: none; +} + +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +a:hover, +a:active { + outline: 0; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + max-width: 100%; + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; +} + +#map_canvas img { + max-width: none; +} + +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} + +button, +input { + *overflow: visible; + line-height: normal; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 28px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} + +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + line-height: 18px; + color: #333333; + background-color: #ffffff; +} + +a { + color: #0088cc; + text-decoration: none; +} + +a:hover { + color: #005580; + text-decoration: underline; +} + +.row { + margin-left: -20px; + *zoom: 1; +} + +.row:before, +.row:after { + display: table; + content: ""; +} + +.row:after { + clear: both; +} + +[class*="span"] { + float: left; + margin-left: 20px; +} + +.container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.span12 { + width: 940px; +} + +.span11 { + width: 860px; +} + +.span10 { + width: 780px; +} + +.span9 { + width: 700px; +} + +.span8 { + width: 620px; +} + +.span7 { + width: 540px; +} + +.span6 { + width: 460px; +} + +.span5 { + width: 380px; +} + +.span4 { + width: 300px; +} + +.span3 { + width: 220px; +} + +.span2 { + width: 140px; +} + +.span1 { + width: 60px; +} + +.offset12 { + margin-left: 980px; +} + +.offset11 { + margin-left: 900px; +} + +.offset10 { + margin-left: 820px; +} + +.offset9 { + margin-left: 740px; +} + +.offset8 { + margin-left: 660px; +} + +.offset7 { + margin-left: 580px; +} + +.offset6 { + margin-left: 500px; +} + +.offset5 { + margin-left: 420px; +} + +.offset4 { + margin-left: 340px; +} + +.offset3 { + margin-left: 260px; +} + +.offset2 { + margin-left: 180px; +} + +.offset1 { + margin-left: 100px; +} + +.row-fluid { + width: 100%; + *zoom: 1; +} + +.row-fluid:before, +.row-fluid:after { + display: table; + content: ""; +} + +.row-fluid:after { + clear: both; +} + +.row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 28px; + margin-left: 2.127659574%; + *margin-left: 2.0744680846382977%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} + +.row-fluid [class*="span"]:first-child { + margin-left: 0; +} + +.row-fluid .span12 { + width: 99.99999998999999%; + *width: 99.94680850063828%; +} + +.row-fluid .span11 { + width: 91.489361693%; + *width: 91.4361702036383%; +} + +.row-fluid .span10 { + width: 82.97872339599999%; + *width: 82.92553190663828%; +} + +.row-fluid .span9 { + width: 74.468085099%; + *width: 74.4148936096383%; +} + +.row-fluid .span8 { + width: 65.95744680199999%; + *width: 65.90425531263828%; +} + +.row-fluid .span7 { + width: 57.446808505%; + *width: 57.3936170156383%; +} + +.row-fluid .span6 { + width: 48.93617020799999%; + *width: 48.88297871863829%; +} + +.row-fluid .span5 { + width: 40.425531911%; + *width: 40.3723404216383%; +} + +.row-fluid .span4 { + width: 31.914893614%; + *width: 31.8617021246383%; +} + +.row-fluid .span3 { + width: 23.404255317%; + *width: 23.3510638276383%; +} + +.row-fluid .span2 { + width: 14.89361702%; + *width: 14.8404255306383%; +} + +.row-fluid .span1 { + width: 6.382978723%; + *width: 6.329787233638298%; +} + +.container { + margin-right: auto; + margin-left: auto; + *zoom: 1; +} + +.container:before, +.container:after { + display: table; + content: ""; +} + +.container:after { + clear: both; +} + +.container-fluid { + padding-right: 20px; + padding-left: 20px; + *zoom: 1; +} + +.container-fluid:before, +.container-fluid:after { + display: table; + content: ""; +} + +.container-fluid:after { + clear: both; +} + +p { + margin: 0 0 9px; +} + +p small { + font-size: 11px; + color: #999999; +} + +.lead { + margin-bottom: 18px; + font-size: 20px; + font-weight: 200; + line-height: 27px; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 0; + font-family: inherit; + font-weight: bold; + color: inherit; + text-rendering: optimizelegibility; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + font-weight: normal; + color: #999999; +} + +h1 { + font-size: 30px; + line-height: 36px; +} + +h1 small { + font-size: 18px; +} + +h2 { + font-size: 24px; + line-height: 36px; +} + +h2 small { + font-size: 18px; +} + +h3 { + font-size: 18px; + line-height: 27px; +} + +h3 small { + font-size: 14px; +} + +h4, +h5, +h6 { + line-height: 18px; +} + +h4 { + font-size: 14px; +} + +h4 small { + font-size: 12px; +} + +h5 { + font-size: 12px; +} + +h6 { + font-size: 11px; + color: #999999; + text-transform: uppercase; +} + +.page-header { + padding-bottom: 17px; + margin: 18px 0; + border-bottom: 1px solid #eeeeee; +} + +.page-header h1 { + line-height: 1; +} + +ul, +ol { + padding: 0; + margin: 0 0 9px 25px; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} + +ul { + list-style: disc; +} + +ol { + list-style: decimal; +} + +li { + line-height: 18px; +} + +ul.unstyled, +ol.unstyled { + margin-left: 0; + list-style: none; +} + +dl { + margin-bottom: 18px; +} + +dt, +dd { + line-height: 18px; +} + +dt { + font-weight: bold; + line-height: 17px; +} + +dd { + margin-left: 9px; +} + +.dl-horizontal dt { + float: left; + width: 120px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; +} + +.dl-horizontal dd { + margin-left: 130px; +} + +hr { + margin: 18px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} + +strong { + font-weight: bold; +} + +em { + font-style: italic; +} + +.muted { + color: #999999; +} + +abbr[title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 0 0 0 15px; + margin: 0 0 18px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + margin-bottom: 0; + font-size: 16px; + font-weight: 300; + line-height: 22.5px; +} + +blockquote small { + display: block; + line-height: 18px; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + float: right; + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 18px; + font-style: normal; + line-height: 18px; +} + +small { + font-size: 100%; +} + +cite { + font-style: normal; +} + +code, +pre { + padding: 0 3px 2px; + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 12px; + color: #333333; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +code { + padding: 2px 4px; + color: #d14; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} + +pre { + display: block; + padding: 8.5px; + margin: 0 0 9px; + font-size: 12.025px; + line-height: 18px; + word-break: break-all; + word-wrap: break-word; + white-space: pre; + white-space: pre-wrap; + background-color: #f5f5f5; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 18px; +} + +pre code { + padding: 0; + color: inherit; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +form { + margin: 0 0 18px; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 27px; + font-size: 19.5px; + line-height: 36px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +legend small { + font-size: 13.5px; + color: #999999; +} + +label, +input, +button, +select, +textarea { + font-size: 13px; + font-weight: normal; + line-height: 18px; +} + +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +label { + display: block; + margin-bottom: 5px; +} + +select, +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + display: inline-block; + height: 18px; + padding: 4px; + margin-bottom: 9px; + font-size: 13px; + line-height: 18px; + color: #555555; +} + +input, +textarea { + width: 210px; +} + +textarea { + height: auto; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + background-color: #ffffff; + border: 1px solid #cccccc; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -ms-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus, +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); +} + +input[type="radio"], +input[type="checkbox"] { + margin: 3px 0; + *margin-top: 0; + /* IE7 */ + + line-height: normal; + cursor: pointer; +} + +input[type="submit"], +input[type="reset"], +input[type="button"], +input[type="radio"], +input[type="checkbox"] { + width: auto; +} + +.uneditable-textarea { + width: auto; + height: auto; +} + +select, +input[type="file"] { + height: 28px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 28px; +} + +select { + width: 220px; + border: 1px solid #bbb; +} + +select[multiple], +select[size] { + height: auto; +} + +select:focus, +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.radio, +.checkbox { + min-height: 18px; + padding-left: 18px; +} + +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -18px; +} + +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; +} + +.radio.inline, +.checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} + +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { + margin-left: 10px; +} + +.input-mini { + width: 60px; +} + +.input-small { + width: 90px; +} + +.input-medium { + width: 150px; +} + +.input-large { + width: 210px; +} + +.input-xlarge { + width: 270px; +} + +.input-xxlarge { + width: 530px; +} + +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"] { + float: none; + margin-left: 0; +} + +.input-append input[class*="span"], +.input-append .uneditable-input[class*="span"], +.input-prepend input[class*="span"], +.input-prepend .uneditable-input[class*="span"], +.row-fluid .input-prepend [class*="span"], +.row-fluid .input-append [class*="span"] { + display: inline-block; +} + +input, +textarea, +.uneditable-input { + margin-left: 0; +} + +input.span12, +textarea.span12, +.uneditable-input.span12 { + width: 930px; +} + +input.span11, +textarea.span11, +.uneditable-input.span11 { + width: 850px; +} + +input.span10, +textarea.span10, +.uneditable-input.span10 { + width: 770px; +} + +input.span9, +textarea.span9, +.uneditable-input.span9 { + width: 690px; +} + +input.span8, +textarea.span8, +.uneditable-input.span8 { + width: 610px; +} + +input.span7, +textarea.span7, +.uneditable-input.span7 { + width: 530px; +} + +input.span6, +textarea.span6, +.uneditable-input.span6 { + width: 450px; +} + +input.span5, +textarea.span5, +.uneditable-input.span5 { + width: 370px; +} + +input.span4, +textarea.span4, +.uneditable-input.span4 { + width: 290px; +} + +input.span3, +textarea.span3, +.uneditable-input.span3 { + width: 210px; +} + +input.span2, +textarea.span2, +.uneditable-input.span2 { + width: 130px; +} + +input.span1, +textarea.span1, +.uneditable-input.span1 { + width: 50px; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + cursor: not-allowed; + background-color: #eeeeee; + border-color: #ddd; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly] { + background-color: transparent; +} + +.control-group.warning > label, +.control-group.warning .help-block, +.control-group.warning .help-inline { + color: #c09853; +} + +.control-group.warning .checkbox, +.control-group.warning .radio, +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + color: #c09853; + border-color: #c09853; +} + +.control-group.warning .checkbox:focus, +.control-group.warning .radio:focus, +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: 0 0 6px #dbc59e; + -moz-box-shadow: 0 0 6px #dbc59e; + box-shadow: 0 0 6px #dbc59e; +} + +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.control-group.error > label, +.control-group.error .help-block, +.control-group.error .help-inline { + color: #b94a48; +} + +.control-group.error .checkbox, +.control-group.error .radio, +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + color: #b94a48; + border-color: #b94a48; +} + +.control-group.error .checkbox:focus, +.control-group.error .radio:focus, +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: 0 0 6px #d59392; + -moz-box-shadow: 0 0 6px #d59392; + box-shadow: 0 0 6px #d59392; +} + +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.control-group.success > label, +.control-group.success .help-block, +.control-group.success .help-inline { + color: #468847; +} + +.control-group.success .checkbox, +.control-group.success .radio, +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + color: #468847; + border-color: #468847; +} + +.control-group.success .checkbox:focus, +.control-group.success .radio:focus, +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: 0 0 6px #7aba7b; + -moz-box-shadow: 0 0 6px #7aba7b; + box-shadow: 0 0 6px #7aba7b; +} + +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +input:focus:required:invalid, +textarea:focus:required:invalid, +select:focus:required:invalid { + color: #b94a48; + border-color: #ee5f5b; +} + +input:focus:required:invalid:focus, +textarea:focus:required:invalid:focus, +select:focus:required:invalid:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} + +.form-actions { + padding: 17px 20px 18px; + margin-top: 18px; + margin-bottom: 18px; + background-color: #f5f5f5; + border-top: 1px solid #e5e5e5; + *zoom: 1; +} + +.form-actions:before, +.form-actions:after { + display: table; + content: ""; +} + +.form-actions:after { + clear: both; +} + +.uneditable-input { + overflow: hidden; + white-space: nowrap; + cursor: not-allowed; + background-color: #ffffff; + border-color: #eee; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); +} + +:-moz-placeholder { + color: #999999; +} + +:-ms-input-placeholder { + color: #999999; +} + +::-webkit-input-placeholder { + color: #999999; +} + +.help-block, +.help-inline { + color: #555555; +} + +.help-block { + display: block; + margin-bottom: 9px; +} + +.help-inline { + display: inline-block; + *display: inline; + padding-left: 5px; + vertical-align: middle; + *zoom: 1; +} + +.input-prepend, +.input-append { + margin-bottom: 5px; +} + +.input-prepend input, +.input-append input, +.input-prepend select, +.input-append select, +.input-prepend .uneditable-input, +.input-append .uneditable-input { + position: relative; + margin-bottom: 0; + *margin-left: 0; + vertical-align: middle; + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} + +.input-prepend input:focus, +.input-append input:focus, +.input-prepend select:focus, +.input-append select:focus, +.input-prepend .uneditable-input:focus, +.input-append .uneditable-input:focus { + z-index: 2; +} + +.input-prepend .uneditable-input, +.input-append .uneditable-input { + border-left-color: #ccc; +} + +.input-prepend .add-on, +.input-append .add-on { + display: inline-block; + width: auto; + height: 18px; + min-width: 16px; + padding: 4px 5px; + font-weight: normal; + line-height: 18px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + vertical-align: middle; + background-color: #eeeeee; + border: 1px solid #ccc; +} + +.input-prepend .add-on, +.input-append .add-on, +.input-prepend .btn, +.input-append .btn { + margin-left: -1px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-prepend .active, +.input-append .active { + background-color: #a9dba9; + border-color: #46a546; +} + +.input-prepend .add-on, +.input-prepend .btn { + margin-right: -1px; +} + +.input-prepend .add-on:first-child, +.input-prepend .btn:first-child { + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} + +.input-append input, +.input-append select, +.input-append .uneditable-input { + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} + +.input-append .uneditable-input { + border-right-color: #ccc; + border-left-color: #eee; +} + +.input-append .add-on:last-child, +.input-append .btn:last-child { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} + +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} + +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} + +.search-query { + padding-right: 14px; + padding-right: 4px \9; + padding-left: 14px; + padding-left: 4px \9; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ + + margin-bottom: 0; + -webkit-border-radius: 14px; + -moz-border-radius: 14px; + border-radius: 14px; +} + +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { + display: inline-block; + *display: inline; + margin-bottom: 0; + *zoom: 1; +} + +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} + +.form-search label, +.form-inline label { + display: inline-block; +} + +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + margin-bottom: 0; +} + +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { + padding-left: 0; + margin-bottom: 0; + vertical-align: middle; +} + +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { + float: left; + margin-right: 3px; + margin-left: 0; +} + +.control-group { + margin-bottom: 9px; +} + +legend + .control-group { + margin-top: 18px; + -webkit-margin-top-collapse: separate; +} + +.form-horizontal .control-group { + margin-bottom: 18px; + *zoom: 1; +} + +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + content: ""; +} + +.form-horizontal .control-group:after { + clear: both; +} + +.form-horizontal .control-label { + float: left; + width: 140px; + padding-top: 5px; + text-align: right; +} + +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 160px; + *margin-left: 0; +} + +.form-horizontal .controls:first-child { + *padding-left: 160px; +} + +.form-horizontal .help-block { + margin-top: 9px; + margin-bottom: 0; +} + +.form-horizontal .form-actions { + padding-left: 160px; +} + +table { + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} + +.table { + width: 100%; + margin-bottom: 18px; +} + +.table th, +.table td { + padding: 8px; + line-height: 18px; + text-align: left; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table th { + font-weight: bold; +} + +.table thead th { + vertical-align: bottom; +} + +.table caption + thead tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child th, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child th, +.table thead:first-child tr:first-child td { + border-top: 0; +} + +.table tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table-condensed th, +.table-condensed td { + padding: 4px 5px; +} + +.table-bordered { + border: 1px solid #dddddd; + border-collapse: separate; + *border-collapse: collapsed; + border-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.table-bordered th, +.table-bordered td { + border-left: 1px solid #dddddd; +} + +.table-bordered caption + thead tr:first-child th, +.table-bordered caption + tbody tr:first-child th, +.table-bordered caption + tbody tr:first-child td, +.table-bordered colgroup + thead tr:first-child th, +.table-bordered colgroup + tbody tr:first-child th, +.table-bordered colgroup + tbody tr:first-child td, +.table-bordered thead:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child td { + border-top: 0; +} + +.table-bordered thead:first-child tr:first-child th:first-child, +.table-bordered tbody:first-child tr:first-child td:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered thead:first-child tr:first-child th:last-child, +.table-bordered tbody:first-child tr:first-child td:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-bordered thead:last-child tr:last-child th:first-child, +.table-bordered tbody:last-child tr:last-child td:first-child { + -webkit-border-radius: 0 0 0 4px; + -moz-border-radius: 0 0 0 4px; + border-radius: 0 0 0 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.table-bordered thead:last-child tr:last-child th:last-child, +.table-bordered tbody:last-child tr:last-child td:last-child { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; +} + +.table-striped tbody tr:nth-child(odd) td, +.table-striped tbody tr:nth-child(odd) th { + background-color: #f9f9f9; +} + +.table tbody tr:hover td, +.table tbody tr:hover th { + background-color: #f5f5f5; +} + +table .span1 { + float: none; + width: 44px; + margin-left: 0; +} + +table .span2 { + float: none; + width: 124px; + margin-left: 0; +} + +table .span3 { + float: none; + width: 204px; + margin-left: 0; +} + +table .span4 { + float: none; + width: 284px; + margin-left: 0; +} + +table .span5 { + float: none; + width: 364px; + margin-left: 0; +} + +table .span6 { + float: none; + width: 444px; + margin-left: 0; +} + +table .span7 { + float: none; + width: 524px; + margin-left: 0; +} + +table .span8 { + float: none; + width: 604px; + margin-left: 0; +} + +table .span9 { + float: none; + width: 684px; + margin-left: 0; +} + +table .span10 { + float: none; + width: 764px; + margin-left: 0; +} + +table .span11 { + float: none; + width: 844px; + margin-left: 0; +} + +table .span12 { + float: none; + width: 924px; + margin-left: 0; +} + +table .span13 { + float: none; + width: 1004px; + margin-left: 0; +} + +table .span14 { + float: none; + width: 1084px; + margin-left: 0; +} + +table .span15 { + float: none; + width: 1164px; + margin-left: 0; +} + +table .span16 { + float: none; + width: 1244px; + margin-left: 0; +} + +table .span17 { + float: none; + width: 1324px; + margin-left: 0; +} + +table .span18 { + float: none; + width: 1404px; + margin-left: 0; +} + +table .span19 { + float: none; + width: 1484px; + margin-left: 0; +} + +table .span20 { + float: none; + width: 1564px; + margin-left: 0; +} + +table .span21 { + float: none; + width: 1644px; + margin-left: 0; +} + +table .span22 { + float: none; + width: 1724px; + margin-left: 0; +} + +table .span23 { + float: none; + width: 1804px; + margin-left: 0; +} + +table .span24 { + float: none; + width: 1884px; + margin-left: 0; +} + +[class^="icon-"], +[class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + *margin-right: .3em; + line-height: 14px; + vertical-align: text-top; + background-image: url("../img/glyphicons-halflings.png"); + background-position: 14px 14px; + background-repeat: no-repeat; +} + +[class^="icon-"]:last-child, +[class*=" icon-"]:last-child { + *margin-left: 0; +} + +.icon-white { + background-image: url("../img/glyphicons-halflings-white.png"); +} + +.icon-glass { + background-position: 0 0; +} + +.icon-music { + background-position: -24px 0; +} + +.icon-search { + background-position: -48px 0; +} + +.icon-envelope { + background-position: -72px 0; +} + +.icon-heart { + background-position: -96px 0; +} + +.icon-star { + background-position: -120px 0; +} + +.icon-star-empty { + background-position: -144px 0; +} + +.icon-user { + background-position: -168px 0; +} + +.icon-film { + background-position: -192px 0; +} + +.icon-th-large { + background-position: -216px 0; +} + +.icon-th { + background-position: -240px 0; +} + +.icon-th-list { + background-position: -264px 0; +} + +.icon-ok { + background-position: -288px 0; +} + +.icon-remove { + background-position: -312px 0; +} + +.icon-zoom-in { + background-position: -336px 0; +} + +.icon-zoom-out { + background-position: -360px 0; +} + +.icon-off { + background-position: -384px 0; +} + +.icon-signal { + background-position: -408px 0; +} + +.icon-cog { + background-position: -432px 0; +} + +.icon-trash { + background-position: -456px 0; +} + +.icon-home { + background-position: 0 -24px; +} + +.icon-file { + background-position: -24px -24px; +} + +.icon-time { + background-position: -48px -24px; +} + +.icon-road { + background-position: -72px -24px; +} + +.icon-download-alt { + background-position: -96px -24px; +} + +.icon-download { + background-position: -120px -24px; +} + +.icon-upload { + background-position: -144px -24px; +} + +.icon-inbox { + background-position: -168px -24px; +} + +.icon-play-circle { + background-position: -192px -24px; +} + +.icon-repeat { + background-position: -216px -24px; +} + +.icon-refresh { + background-position: -240px -24px; +} + +.icon-list-alt { + background-position: -264px -24px; +} + +.icon-lock { + background-position: -287px -24px; +} + +.icon-flag { + background-position: -312px -24px; +} + +.icon-headphones { + background-position: -336px -24px; +} + +.icon-volume-off { + background-position: -360px -24px; +} + +.icon-volume-down { + background-position: -384px -24px; +} + +.icon-volume-up { + background-position: -408px -24px; +} + +.icon-qrcode { + background-position: -432px -24px; +} + +.icon-barcode { + background-position: -456px -24px; +} + +.icon-tag { + background-position: 0 -48px; +} + +.icon-tags { + background-position: -25px -48px; +} + +.icon-book { + background-position: -48px -48px; +} + +.icon-bookmark { + background-position: -72px -48px; +} + +.icon-print { + background-position: -96px -48px; +} + +.icon-camera { + background-position: -120px -48px; +} + +.icon-font { + background-position: -144px -48px; +} + +.icon-bold { + background-position: -167px -48px; +} + +.icon-italic { + background-position: -192px -48px; +} + +.icon-text-height { + background-position: -216px -48px; +} + +.icon-text-width { + background-position: -240px -48px; +} + +.icon-align-left { + background-position: -264px -48px; +} + +.icon-align-center { + background-position: -288px -48px; +} + +.icon-align-right { + background-position: -312px -48px; +} + +.icon-align-justify { + background-position: -336px -48px; +} + +.icon-list { + background-position: -360px -48px; +} + +.icon-indent-left { + background-position: -384px -48px; +} + +.icon-indent-right { + background-position: -408px -48px; +} + +.icon-facetime-video { + background-position: -432px -48px; +} + +.icon-picture { + background-position: -456px -48px; +} + +.icon-pencil { + background-position: 0 -72px; +} + +.icon-map-marker { + background-position: -24px -72px; +} + +.icon-adjust { + background-position: -48px -72px; +} + +.icon-tint { + background-position: -72px -72px; +} + +.icon-edit { + background-position: -96px -72px; +} + +.icon-share { + background-position: -120px -72px; +} + +.icon-check { + background-position: -144px -72px; +} + +.icon-move { + background-position: -168px -72px; +} + +.icon-step-backward { + background-position: -192px -72px; +} + +.icon-fast-backward { + background-position: -216px -72px; +} + +.icon-backward { + background-position: -240px -72px; +} + +.icon-play { + background-position: -264px -72px; +} + +.icon-pause { + background-position: -288px -72px; +} + +.icon-stop { + background-position: -312px -72px; +} + +.icon-forward { + background-position: -336px -72px; +} + +.icon-fast-forward { + background-position: -360px -72px; +} + +.icon-step-forward { + background-position: -384px -72px; +} + +.icon-eject { + background-position: -408px -72px; +} + +.icon-chevron-left { + background-position: -432px -72px; +} + +.icon-chevron-right { + background-position: -456px -72px; +} + +.icon-plus-sign { + background-position: 0 -96px; +} + +.icon-minus-sign { + background-position: -24px -96px; +} + +.icon-remove-sign { + background-position: -48px -96px; +} + +.icon-ok-sign { + background-position: -72px -96px; +} + +.icon-question-sign { + background-position: -96px -96px; +} + +.icon-info-sign { + background-position: -120px -96px; +} + +.icon-screenshot { + background-position: -144px -96px; +} + +.icon-remove-circle { + background-position: -168px -96px; +} + +.icon-ok-circle { + background-position: -192px -96px; +} + +.icon-ban-circle { + background-position: -216px -96px; +} + +.icon-arrow-left { + background-position: -240px -96px; +} + +.icon-arrow-right { + background-position: -264px -96px; +} + +.icon-arrow-up { + background-position: -289px -96px; +} + +.icon-arrow-down { + background-position: -312px -96px; +} + +.icon-share-alt { + background-position: -336px -96px; +} + +.icon-resize-full { + background-position: -360px -96px; +} + +.icon-resize-small { + background-position: -384px -96px; +} + +.icon-plus { + background-position: -408px -96px; +} + +.icon-minus { + background-position: -433px -96px; +} + +.icon-asterisk { + background-position: -456px -96px; +} + +.icon-exclamation-sign { + background-position: 0 -120px; +} + +.icon-gift { + background-position: -24px -120px; +} + +.icon-leaf { + background-position: -48px -120px; +} + +.icon-fire { + background-position: -72px -120px; +} + +.icon-eye-open { + background-position: -96px -120px; +} + +.icon-eye-close { + background-position: -120px -120px; +} + +.icon-warning-sign { + background-position: -144px -120px; +} + +.icon-plane { + background-position: -168px -120px; +} + +.icon-calendar { + background-position: -192px -120px; +} + +.icon-random { + background-position: -216px -120px; +} + +.icon-comment { + background-position: -240px -120px; +} + +.icon-magnet { + background-position: -264px -120px; +} + +.icon-chevron-up { + background-position: -288px -120px; +} + +.icon-chevron-down { + background-position: -313px -119px; +} + +.icon-retweet { + background-position: -336px -120px; +} + +.icon-shopping-cart { + background-position: -360px -120px; +} + +.icon-folder-close { + background-position: -384px -120px; +} + +.icon-folder-open { + background-position: -408px -120px; +} + +.icon-resize-vertical { + background-position: -432px -119px; +} + +.icon-resize-horizontal { + background-position: -456px -118px; +} + +.icon-hdd { + background-position: 0 -144px; +} + +.icon-bullhorn { + background-position: -24px -144px; +} + +.icon-bell { + background-position: -48px -144px; +} + +.icon-certificate { + background-position: -72px -144px; +} + +.icon-thumbs-up { + background-position: -96px -144px; +} + +.icon-thumbs-down { + background-position: -120px -144px; +} + +.icon-hand-right { + background-position: -144px -144px; +} + +.icon-hand-left { + background-position: -168px -144px; +} + +.icon-hand-up { + background-position: -192px -144px; +} + +.icon-hand-down { + background-position: -216px -144px; +} + +.icon-circle-arrow-right { + background-position: -240px -144px; +} + +.icon-circle-arrow-left { + background-position: -264px -144px; +} + +.icon-circle-arrow-up { + background-position: -288px -144px; +} + +.icon-circle-arrow-down { + background-position: -312px -144px; +} + +.icon-globe { + background-position: -336px -144px; +} + +.icon-wrench { + background-position: -360px -144px; +} + +.icon-tasks { + background-position: -384px -144px; +} + +.icon-filter { + background-position: -408px -144px; +} + +.icon-briefcase { + background-position: -432px -144px; +} + +.icon-fullscreen { + background-position: -456px -144px; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle { + *margin-bottom: -3px; +} + +.dropdown-toggle:active, +.open .dropdown-toggle { + outline: 0; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + vertical-align: top; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; + opacity: 0.3; + filter: alpha(opacity=30); +} + +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} + +.dropdown:hover .caret, +.open .caret { + opacity: 1; + filter: alpha(opacity=100); +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 4px 0; + margin: 1px 0 0; + list-style: none; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + *width: 100%; + height: 1px; + margin: 8px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.dropdown-menu a { + display: block; + padding: 3px 15px; + clear: both; + font-weight: normal; + line-height: 18px; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu li > a:hover, +.dropdown-menu .active > a, +.dropdown-menu .active > a:hover { + color: #ffffff; + text-decoration: none; + background-color: #0088cc; +} + +.open { + *z-index: 1000; +} + +.open > .dropdown-menu { + display: block; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid #000000; + content: "\2191"; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +.typeahead { + margin-top: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #eee; + border: 1px solid rgba(0, 0, 0, 0.05); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-large { + padding: 24px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.well-small { + padding: 9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -ms-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -ms-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +.collapse.in { + height: auto; +} + +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 18px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.btn { + display: inline-block; + *display: inline; + padding: 4px 10px 4px; + margin-bottom: 0; + *margin-left: .3em; + font-size: 13px; + line-height: 18px; + *line-height: 20px; + color: #333333; + text-align: center; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + vertical-align: middle; + cursor: pointer; + background-color: #f5f5f5; + *background-color: #e6e6e6; + background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(top, #ffffff, #e6e6e6); + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-repeat: repeat-x; + border: 1px solid #cccccc; + *border: 0; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-bottom-color: #b3b3b3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn:hover, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + background-color: #e6e6e6; + *background-color: #d9d9d9; +} + +.btn:active, +.btn.active { + background-color: #cccccc \9; +} + +.btn:first-child { + *margin-left: 0; +} + +.btn:hover { + color: #333333; + text-decoration: none; + background-color: #e6e6e6; + *background-color: #d9d9d9; + /* Buttons in IE7 don't get borders, so darken on hover */ + + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -ms-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn.active, +.btn:active { + background-color: #e6e6e6; + background-color: #d9d9d9 \9; + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn.disabled, +.btn[disabled] { + cursor: default; + background-color: #e6e6e6; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-large { + padding: 9px 14px; + font-size: 15px; + line-height: normal; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +.btn-large [class^="icon-"] { + margin-top: 1px; +} + +.btn-small { + padding: 5px 9px; + font-size: 11px; + line-height: 16px; +} + +.btn-small [class^="icon-"] { + margin-top: -1px; +} + +.btn-mini { + padding: 2px 6px; + font-size: 11px; + line-height: 14px; +} + +.btn-primary, +.btn-primary:hover, +.btn-warning, +.btn-warning:hover, +.btn-danger, +.btn-danger:hover, +.btn-success, +.btn-success:hover, +.btn-info, +.btn-info:hover, +.btn-inverse, +.btn-inverse:hover { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-inverse.active { + color: rgba(255, 255, 255, 0.75); +} + +.btn { + border-color: #ccc; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} + +.btn-primary { + background-color: #0074cc; + *background-color: #0055cc; + background-image: -ms-linear-gradient(top, #0088cc, #0055cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0055cc); + background-image: -o-linear-gradient(top, #0088cc, #0055cc); + background-image: -moz-linear-gradient(top, #0088cc, #0055cc); + background-image: linear-gradient(top, #0088cc, #0055cc); + background-repeat: repeat-x; + border-color: #0055cc #0055cc #003580; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} + +.btn-primary:hover, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + background-color: #0055cc; + *background-color: #004ab3; +} + +.btn-primary:active, +.btn-primary.active { + background-color: #004099 \9; +} + +.btn-warning { + background-color: #faa732; + *background-color: #f89406; + background-image: -ms-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(top, #fbb450, #f89406); + background-repeat: repeat-x; + border-color: #f89406 #f89406 #ad6704; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} + +.btn-warning:hover, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + background-color: #f89406; + *background-color: #df8505; +} + +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} + +.btn-danger { + background-color: #da4f49; + *background-color: #bd362f; + background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(top, #ee5f5b, #bd362f); + background-repeat: repeat-x; + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} + +.btn-danger:hover, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + background-color: #bd362f; + *background-color: #a9302a; +} + +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} + +.btn-success { + background-color: #5bb75b; + *background-color: #51a351; + background-image: -ms-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(top, #62c462, #51a351); + background-repeat: repeat-x; + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} + +.btn-success:hover, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + background-color: #51a351; + *background-color: #499249; +} + +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} + +.btn-info { + background-color: #49afcd; + *background-color: #2f96b4; + background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(top, #5bc0de, #2f96b4); + background-repeat: repeat-x; + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} + +.btn-info:hover, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + background-color: #2f96b4; + *background-color: #2a85a0; +} + +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} + +.btn-inverse { + background-color: #414141; + *background-color: #222222; + background-image: -ms-linear-gradient(top, #555555, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222)); + background-image: -webkit-linear-gradient(top, #555555, #222222); + background-image: -o-linear-gradient(top, #555555, #222222); + background-image: -moz-linear-gradient(top, #555555, #222222); + background-image: linear-gradient(top, #555555, #222222); + background-repeat: repeat-x; + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} + +.btn-inverse:hover, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + background-color: #222222; + *background-color: #151515; +} + +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} + +button.btn, +input[type="submit"].btn { + *padding-top: 2px; + *padding-bottom: 2px; +} + +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +button.btn.btn-large, +input[type="submit"].btn.btn-large { + *padding-top: 7px; + *padding-bottom: 7px; +} + +button.btn.btn-small, +input[type="submit"].btn.btn-small { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { + *padding-top: 1px; + *padding-bottom: 1px; +} + +.btn-group { + position: relative; + *margin-left: .3em; + *zoom: 1; +} + +.btn-group:before, +.btn-group:after { + display: table; + content: ""; +} + +.btn-group:after { + clear: both; +} + +.btn-group:first-child { + *margin-left: 0; +} + +.btn-group + .btn-group { + margin-left: 5px; +} + +.btn-toolbar { + margin-top: 9px; + margin-bottom: 9px; +} + +.btn-toolbar .btn-group { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} + +.btn-group > .btn { + position: relative; + float: left; + margin-left: -1px; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.btn-group > .btn.large:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active { + z-index: 2; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .dropdown-toggle { + *padding-top: 4px; + padding-right: 8px; + *padding-bottom: 4px; + padding-left: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group > .btn-mini.dropdown-toggle { + padding-right: 5px; + padding-left: 5px; +} + +.btn-group > .btn-small.dropdown-toggle { + *padding-top: 4px; + *padding-bottom: 4px; +} + +.btn-group > .btn-large.dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + background-image: none; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group.open .btn.dropdown-toggle { + background-color: #e6e6e6; +} + +.btn-group.open .btn-primary.dropdown-toggle { + background-color: #0055cc; +} + +.btn-group.open .btn-warning.dropdown-toggle { + background-color: #f89406; +} + +.btn-group.open .btn-danger.dropdown-toggle { + background-color: #bd362f; +} + +.btn-group.open .btn-success.dropdown-toggle { + background-color: #51a351; +} + +.btn-group.open .btn-info.dropdown-toggle { + background-color: #2f96b4; +} + +.btn-group.open .btn-inverse.dropdown-toggle { + background-color: #222222; +} + +.btn .caret { + margin-top: 7px; + margin-left: 0; +} + +.btn:hover .caret, +.open.btn-group .caret { + opacity: 1; + filter: alpha(opacity=100); +} + +.btn-mini .caret { + margin-top: 5px; +} + +.btn-small .caret { + margin-top: 6px; +} + +.btn-large .caret { + margin-top: 6px; + border-top-width: 5px; + border-right-width: 5px; + border-left-width: 5px; +} + +.dropup .btn-large .caret { + border-top: 0; + border-bottom: 5px solid #000000; +} + +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 0.75; + filter: alpha(opacity=75); +} + +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 18px; + color: #c09853; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.alert-heading { + color: inherit; +} + +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 18px; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-danger, +.alert-error { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} + +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} + +.alert-block p + p { + margin-top: 5px; +} + +.nav { + margin-bottom: 18px; + margin-left: 0; + list-style: none; +} + +.nav > li > a { + display: block; +} + +.nav > li > a:hover { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > .pull-right { + float: right; +} + +.nav .nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 18px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} + +.nav li + .nav-header { + margin-top: 9px; +} + +.nav-list { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 0; +} + +.nav-list > li > a, +.nav-list .nav-header { + margin-right: -15px; + margin-left: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} + +.nav-list > li > a { + padding: 3px 15px; +} + +.nav-list > .active > a, +.nav-list > .active > a:hover { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; +} + +.nav-list [class^="icon-"] { + margin-right: 2px; +} + +.nav-list .divider { + *width: 100%; + height: 1px; + margin: 8px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.nav-tabs, +.nav-pills { + *zoom: 1; +} + +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { + display: table; + content: ""; +} + +.nav-tabs:after, +.nav-pills:after { + clear: both; +} + +.nav-tabs > li, +.nav-pills > li { + float: left; +} + +.nav-tabs > li > a, +.nav-pills > li > a { + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs > li { + margin-bottom: -1px; +} + +.nav-tabs > li > a { + padding-top: 8px; + padding-bottom: 8px; + line-height: 18px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} + +.nav-pills > li > a { + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +.nav-pills > .active > a, +.nav-pills > .active > a:hover { + color: #ffffff; + background-color: #0088cc; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li > a { + margin-right: 0; +} + +.nav-tabs.nav-stacked { + border-bottom: 0; +} + +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.nav-tabs.nav-stacked > li:first-child > a { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.nav-tabs.nav-stacked > li > a:hover { + z-index: 2; + border-color: #ddd; +} + +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} + +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; +} + +.nav-tabs .dropdown-menu { + -webkit-border-radius: 0 0 5px 5px; + -moz-border-radius: 0 0 5px 5px; + border-radius: 0 0 5px 5px; +} + +.nav-pills .dropdown-menu { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.nav-tabs .dropdown-toggle .caret, +.nav-pills .dropdown-toggle .caret { + margin-top: 6px; + border-top-color: #0088cc; + border-bottom-color: #0088cc; +} + +.nav-tabs .dropdown-toggle:hover .caret, +.nav-pills .dropdown-toggle:hover .caret { + border-top-color: #005580; + border-bottom-color: #005580; +} + +.nav-tabs .active .dropdown-toggle .caret, +.nav-pills .active .dropdown-toggle .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.nav > .dropdown.active > a:hover { + color: #000000; + cursor: pointer; +} + +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > li.dropdown.open.active > a:hover { + color: #ffffff; + background-color: #999999; + border-color: #999999; +} + +.nav li.dropdown.open .caret, +.nav li.dropdown.open.active .caret, +.nav li.dropdown.open a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); +} + +.tabs-stacked .open > a:hover { + border-color: #999999; +} + +.tabbable { + *zoom: 1; +} + +.tabbable:before, +.tabbable:after { + display: table; + content: ""; +} + +.tabbable:after { + clear: both; +} + +.tab-content { + overflow: auto; +} + +.tabs-below > .nav-tabs, +.tabs-right > .nav-tabs, +.tabs-left > .nav-tabs { + border-bottom: 0; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.tabs-below > .nav-tabs { + border-top: 1px solid #ddd; +} + +.tabs-below > .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} + +.tabs-below > .nav-tabs > li > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.tabs-below > .nav-tabs > li > a:hover { + border-top-color: #ddd; + border-bottom-color: transparent; +} + +.tabs-below > .nav-tabs > .active > a, +.tabs-below > .nav-tabs > .active > a:hover { + border-color: transparent #ddd #ddd #ddd; +} + +.tabs-left > .nav-tabs > li, +.tabs-right > .nav-tabs > li { + float: none; +} + +.tabs-left > .nav-tabs > li > a, +.tabs-right > .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} + +.tabs-left > .nav-tabs { + float: left; + margin-right: 19px; + border-right: 1px solid #ddd; +} + +.tabs-left > .nav-tabs > li > a { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.tabs-left > .nav-tabs > li > a:hover { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} + +.tabs-left > .nav-tabs .active > a, +.tabs-left > .nav-tabs .active > a:hover { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; +} + +.tabs-right > .nav-tabs { + float: right; + margin-left: 19px; + border-left: 1px solid #ddd; +} + +.tabs-right > .nav-tabs > li > a { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.tabs-right > .nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} + +.tabs-right > .nav-tabs .active > a, +.tabs-right > .nav-tabs .active > a:hover { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; +} + +.navbar { + *position: relative; + *z-index: 2; + margin-bottom: 18px; + overflow: visible; +} + +.navbar-inner { + min-height: 40px; + padding-right: 20px; + padding-left: 20px; + background-color: #2c2c2c; + background-image: -moz-linear-gradient(top, #333333, #222222); + background-image: -ms-linear-gradient(top, #333333, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); + background-image: -webkit-linear-gradient(top, #333333, #222222); + background-image: -o-linear-gradient(top, #333333, #222222); + background-image: linear-gradient(top, #333333, #222222); + background-repeat: repeat-x; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); +} + +.navbar .container { + width: auto; +} + +.nav-collapse.collapse { + height: auto; +} + +.navbar { + color: #999999; +} + +.navbar .brand:hover { + text-decoration: none; +} + +.navbar .brand { + display: block; + float: left; + padding: 8px 20px 12px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + line-height: 1; + color: #999999; +} + +.navbar .navbar-text { + margin-bottom: 0; + line-height: 40px; +} + +.navbar .navbar-link { + color: #999999; +} + +.navbar .navbar-link:hover { + color: #ffffff; +} + +.navbar .btn, +.navbar .btn-group { + margin-top: 5px; +} + +.navbar .btn-group .btn { + margin: 0; +} + +.navbar-form { + margin-bottom: 0; + *zoom: 1; +} + +.navbar-form:before, +.navbar-form:after { + display: table; + content: ""; +} + +.navbar-form:after { + clear: both; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .radio, +.navbar-form .checkbox { + margin-top: 5px; +} + +.navbar-form input, +.navbar-form select { + display: inline-block; + margin-bottom: 0; +} + +.navbar-form input[type="image"], +.navbar-form input[type="checkbox"], +.navbar-form input[type="radio"] { + margin-top: 3px; +} + +.navbar-form .input-append, +.navbar-form .input-prepend { + margin-top: 6px; + white-space: nowrap; +} + +.navbar-form .input-append input, +.navbar-form .input-prepend input { + margin-top: 0; +} + +.navbar-search { + position: relative; + float: left; + margin-top: 6px; + margin-bottom: 0; +} + +.navbar-search .search-query { + padding: 4px 9px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + color: #ffffff; + background-color: #626262; + border: 1px solid #151515; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -webkit-transition: none; + -moz-transition: none; + -ms-transition: none; + -o-transition: none; + transition: none; +} + +.navbar-search .search-query:-moz-placeholder { + color: #cccccc; +} + +.navbar-search .search-query:-ms-input-placeholder { + color: #cccccc; +} + +.navbar-search .search-query::-webkit-input-placeholder { + color: #cccccc; +} + +.navbar-search .search-query:focus, +.navbar-search .search-query.focused { + padding: 5px 10px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + outline: 0; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + margin-bottom: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-fixed-bottom .navbar-inner { + padding-right: 0; + padding-left: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} + +.navbar .nav.pull-right { + float: right; +} + +.navbar .nav > li { + display: block; + float: left; +} + +.navbar .nav > li > a { + float: none; + padding: 9px 10px 11px; + line-height: 19px; + color: #999999; + text-decoration: none; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.navbar .btn { + display: inline-block; + padding: 4px 10px 4px; + margin: 5px 5px 6px; + line-height: 18px; +} + +.navbar .btn-group { + padding: 5px 5px 6px; + margin: 0; +} + +.navbar .nav > li > a:hover { + color: #ffffff; + text-decoration: none; + background-color: transparent; +} + +.navbar .nav .active > a, +.navbar .nav .active > a:hover { + color: #ffffff; + text-decoration: none; + background-color: #222222; +} + +.navbar .divider-vertical { + width: 1px; + height: 40px; + margin: 0 9px; + overflow: hidden; + background-color: #222222; + border-right: 1px solid #333333; +} + +.navbar .nav.pull-right { + margin-right: 0; + margin-left: 10px; +} + +.navbar .btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-right: 5px; + margin-left: 5px; + background-color: #2c2c2c; + *background-color: #222222; + background-image: -ms-linear-gradient(top, #333333, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); + background-image: -webkit-linear-gradient(top, #333333, #222222); + background-image: -o-linear-gradient(top, #333333, #222222); + background-image: linear-gradient(top, #333333, #222222); + background-image: -moz-linear-gradient(top, #333333, #222222); + background-repeat: repeat-x; + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); +} + +.navbar .btn-navbar:hover, +.navbar .btn-navbar:active, +.navbar .btn-navbar.active, +.navbar .btn-navbar.disabled, +.navbar .btn-navbar[disabled] { + background-color: #222222; + *background-color: #151515; +} + +.navbar .btn-navbar:active, +.navbar .btn-navbar.active { + background-color: #080808 \9; +} + +.navbar .btn-navbar .icon-bar { + display: block; + width: 18px; + height: 2px; + background-color: #f5f5f5; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} + +.btn-navbar .icon-bar + .icon-bar { + margin-top: 3px; +} + +.navbar .dropdown-menu:before { + position: absolute; + top: -7px; + left: 9px; + display: inline-block; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-left: 7px solid transparent; + border-bottom-color: rgba(0, 0, 0, 0.2); + content: ''; +} + +.navbar .dropdown-menu:after { + position: absolute; + top: -6px; + left: 10px; + display: inline-block; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + border-left: 6px solid transparent; + content: ''; +} + +.navbar-fixed-bottom .dropdown-menu:before { + top: auto; + bottom: -7px; + border-top: 7px solid #ccc; + border-bottom: 0; + border-top-color: rgba(0, 0, 0, 0.2); +} + +.navbar-fixed-bottom .dropdown-menu:after { + top: auto; + bottom: -6px; + border-top: 6px solid #ffffff; + border-bottom: 0; +} + +.navbar .nav li.dropdown .dropdown-toggle .caret, +.navbar .nav li.dropdown.open .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar .nav li.dropdown.active .caret { + opacity: 1; + filter: alpha(opacity=100); +} + +.navbar .nav li.dropdown.open > .dropdown-toggle, +.navbar .nav li.dropdown.active > .dropdown-toggle, +.navbar .nav li.dropdown.open.active > .dropdown-toggle { + background-color: transparent; +} + +.navbar .nav li.dropdown.active > .dropdown-toggle:hover { + color: #ffffff; +} + +.navbar .pull-right .dropdown-menu, +.navbar .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar .pull-right .dropdown-menu:before, +.navbar .dropdown-menu.pull-right:before { + right: 12px; + left: auto; +} + +.navbar .pull-right .dropdown-menu:after, +.navbar .dropdown-menu.pull-right:after { + right: 13px; + left: auto; +} + +.breadcrumb { + padding: 7px 14px; + margin: 0 0 18px; + list-style: none; + background-color: #fbfbfb; + background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5)); + background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); + background-image: linear-gradient(top, #ffffff, #f5f5f5); + background-repeat: repeat-x; + border: 1px solid #ddd; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0); + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} + +.breadcrumb li { + display: inline-block; + *display: inline; + text-shadow: 0 1px 0 #ffffff; + *zoom: 1; +} + +.breadcrumb .divider { + padding: 0 5px; + color: #999999; +} + +.breadcrumb .active a { + color: #333333; +} + +.pagination { + height: 36px; + margin: 18px 0; +} + +.pagination ul { + display: inline-block; + *display: inline; + margin-bottom: 0; + margin-left: 0; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + *zoom: 1; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.pagination li { + display: inline; +} + +.pagination a { + float: left; + padding: 0 14px; + line-height: 34px; + text-decoration: none; + border: 1px solid #ddd; + border-left-width: 0; +} + +.pagination a:hover, +.pagination .active a { + background-color: #f5f5f5; +} + +.pagination .active a { + color: #999999; + cursor: default; +} + +.pagination .disabled span, +.pagination .disabled a, +.pagination .disabled a:hover { + color: #999999; + cursor: default; + background-color: transparent; +} + +.pagination li:first-child a { + border-left-width: 1px; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} + +.pagination li:last-child a { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} + +.pagination-centered { + text-align: center; +} + +.pagination-right { + text-align: right; +} + +.pager { + margin-bottom: 18px; + margin-left: 0; + text-align: center; + list-style: none; + *zoom: 1; +} + +.pager:before, +.pager:after { + display: table; + content: ""; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager a { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.pager a:hover { + text-decoration: none; + background-color: #f5f5f5; +} + +.pager .next a { + float: right; +} + +.pager .previous a { + float: left; +} + +.pager .disabled a, +.pager .disabled a:hover { + color: #999999; + cursor: default; + background-color: #fff; +} + +.modal-open .dropdown-menu { + z-index: 2050; +} + +.modal-open .dropdown.open { + *z-index: 2050; +} + +.modal-open .popover { + z-index: 2060; +} + +.modal-open .tooltip { + z-index: 2070; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop, +.modal-backdrop.fade.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.modal { + position: fixed; + top: 50%; + left: 50%; + z-index: 1050; + width: 560px; + margin: -250px 0 0 -280px; + overflow: auto; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.modal.fade { + top: -25%; + -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; + -moz-transition: opacity 0.3s linear, top 0.3s ease-out; + -ms-transition: opacity 0.3s linear, top 0.3s ease-out; + -o-transition: opacity 0.3s linear, top 0.3s ease-out; + transition: opacity 0.3s linear, top 0.3s ease-out; +} + +.modal.fade.in { + top: 50%; +} + +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} + +.modal-header .close { + margin-top: 2px; +} + +.modal-body { + max-height: 400px; + padding: 15px; + overflow-y: auto; +} + +.modal-form { + margin-bottom: 0; +} + +.modal-footer { + padding: 14px 15px 15px; + margin-bottom: 0; + text-align: right; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: ""; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.tooltip { + position: absolute; + z-index: 1020; + display: block; + padding: 5px; + font-size: 11px; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.tooltip.top { + margin-top: -2px; +} + +.tooltip.right { + margin-left: 2px; +} + +.tooltip.bottom { + margin-top: 2px; +} + +.tooltip.left { + margin-left: -2px; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top: 5px solid #000000; + border-right: 5px solid transparent; + border-left: 5px solid transparent; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #000000; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-right: 5px solid transparent; + border-bottom: 5px solid #000000; + border-left: 5px solid transparent; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-right: 5px solid #000000; + border-bottom: 5px solid transparent; +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + padding: 5px; +} + +.popover.top { + margin-top: -5px; +} + +.popover.right { + margin-left: 5px; +} + +.popover.bottom { + margin-top: 5px; +} + +.popover.left { + margin-left: -5px; +} + +.popover.top .arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top: 5px solid #000000; + border-right: 5px solid transparent; + border-left: 5px solid transparent; +} + +.popover.right .arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-right: 5px solid #000000; + border-bottom: 5px solid transparent; +} + +.popover.bottom .arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-right: 5px solid transparent; + border-bottom: 5px solid #000000; + border-left: 5px solid transparent; +} + +.popover.left .arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #000000; +} + +.popover .arrow { + position: absolute; + width: 0; + height: 0; +} + +.popover-inner { + width: 280px; + padding: 3px; + overflow: hidden; + background: #000000; + background: rgba(0, 0, 0, 0.8); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +} + +.popover-title { + padding: 9px 15px; + line-height: 1; + background-color: #f5f5f5; + border-bottom: 1px solid #eee; + -webkit-border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; +} + +.popover-content { + padding: 14px; + background-color: #ffffff; + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.popover-content p, +.popover-content ul, +.popover-content ol { + margin-bottom: 0; +} + +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} + +.thumbnails:before, +.thumbnails:after { + display: table; + content: ""; +} + +.thumbnails:after { + clear: both; +} + +.row-fluid .thumbnails { + margin-left: 0; +} + +.thumbnails > li { + float: left; + margin-bottom: 18px; + margin-left: 20px; +} + +.thumbnail { + display: block; + padding: 4px; + line-height: 1; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); +} + +a.thumbnail:hover { + border-color: #0088cc; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} + +.thumbnail > img { + display: block; + max-width: 100%; + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; +} + +.label, +.badge { + font-size: 10.998px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; +} + +.label { + padding: 1px 4px 2px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.badge { + padding: 1px 9px 2px; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} + +a.label:hover, +a.badge:hover { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label-important, +.badge-important { + background-color: #b94a48; +} + +.label-important[href], +.badge-important[href] { + background-color: #953b39; +} + +.label-warning, +.badge-warning { + background-color: #f89406; +} + +.label-warning[href], +.badge-warning[href] { + background-color: #c67605; +} + +.label-success, +.badge-success { + background-color: #468847; +} + +.label-success[href], +.badge-success[href] { + background-color: #356635; +} + +.label-info, +.badge-info { + background-color: #3a87ad; +} + +.label-info[href], +.badge-info[href] { + background-color: #2d6987; +} + +.label-inverse, +.badge-inverse { + background-color: #333333; +} + +.label-inverse[href], +.badge-inverse[href] { + background-color: #1a1a1a; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-ms-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +.progress { + height: 18px; + margin-bottom: 18px; + overflow: hidden; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: linear-gradient(top, #f5f5f5, #f9f9f9); + background-repeat: repeat-x; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress .bar { + width: 0; + height: 18px; + font-size: 12px; + color: #ffffff; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); + background-image: -webkit-linear-gradient(top, #149bdf, #0480be); + background-image: -o-linear-gradient(top, #149bdf, #0480be); + background-image: linear-gradient(top, #149bdf, #0480be); + background-image: -ms-linear-gradient(top, #149bdf, #0480be); + background-repeat: repeat-x; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -ms-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress-striped .bar { + background-color: #149bdf; + background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + -moz-background-size: 40px 40px; + -o-background-size: 40px 40px; + background-size: 40px 40px; +} + +.progress.active .bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-danger .bar { + background-color: #dd514c; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(top, #ee5f5b, #c43c35); + background-repeat: repeat-x; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); +} + +.progress-danger.progress-striped .bar { + background-color: #ee5f5b; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-success .bar { + background-color: #5eb95e; + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -ms-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(top, #62c462, #57a957); + background-repeat: repeat-x; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); +} + +.progress-success.progress-striped .bar { + background-color: #62c462; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-info .bar { + background-color: #4bb1cf; + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(top, #5bc0de, #339bb9); + background-repeat: repeat-x; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); +} + +.progress-info.progress-striped .bar { + background-color: #5bc0de; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-warning .bar { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -ms-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(top, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:dximagetransform.microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0); +} + +.progress-warning.progress-striped .bar { + background-color: #fbb450; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.accordion { + margin-bottom: 18px; +} + +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.accordion-heading { + border-bottom: 0; +} + +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} + +.accordion-toggle { + cursor: pointer; +} + +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} + +.carousel { + position: relative; + margin-bottom: 18px; + line-height: 1; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -ms-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel .item > img { + display: block; + line-height: 1; +} + +.carousel .active, +.carousel .next, +.carousel .prev { + display: block; +} + +.carousel .active { + left: 0; +} + +.carousel .next, +.carousel .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel .next { + left: 100%; +} + +.carousel .prev { + left: -100%; +} + +.carousel .next.left, +.carousel .prev.right { + left: 0; +} + +.carousel .active.left { + left: -100%; +} + +.carousel .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.right { + right: 15px; + left: auto; +} + +.carousel-control:hover { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-caption { + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 10px 15px 5px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} + +.carousel-caption h4, +.carousel-caption p { + color: #ffffff; +} + +.hero-unit { + padding: 60px; + margin-bottom: 30px; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; + color: inherit; +} + +.hero-unit p { + font-size: 18px; + font-weight: 200; + line-height: 27px; + color: inherit; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.hide { + display: none; +} + +.show { + display: block; +} + +.invisible { + visibility: hidden; +} diff --git a/src/siu/www/css/coda-slider.css b/src/siu/www/css/coda-slider.css new file mode 100644 index 0000000..f3ad626 --- /dev/null +++ b/src/siu/www/css/coda-slider.css @@ -0,0 +1,55 @@ +/* + jQuery Coda-Slider v2.0 - http://www.ndoherty.biz/coda-slider + Copyright (c) 2009 Niall Doherty + This plugin available for use in all personal or commercial projects under both MIT and GPL licenses. +*/ + +/* Insignificant stuff, for demo purposes */ + + /* body { padding: 20px }*/ + .panel h2.title { margin-bottom: 10px } + noscript div { background: #ccc; border: 1px solid #900; margin: 20px 0; padding: 15px } + +/* Most common stuff you'll need to change */ + + .coda-slider-wrapper { padding: 0px 0 } + /*.coda-slider { background: #ebebeb }*/ + + /* Use this to keep the slider content contained in a box even when JavaScript is disabled */ + .coda-slider-no-js .coda-slider { height: 200px; overflow: auto !important; padding-right: 20px } + + /* Change the width of the entire slider (without dynamic arrows) */ + .coda-slider, .coda-slider .panel { width: 600px } + + /* Change margin and width of the slider (with dynamic arrows) */ + .coda-slider-wrapper.arrows .coda-slider, .coda-slider-wrapper.arrows .coda-slider .panel { width: 600px } + .coda-slider-wrapper.arrows .coda-slider { margin: 0 10px } + + /* Arrow styling */ + .coda-nav-left a, .coda-nav-right a { color: blue; padding: 5px; margin-right: 1px; padding: 3px 6px; } + + /* Tab nav */ + .coda-nav ul li a.current { color: black } + .coda-nav { float: left } + + /* Panel padding */ + .coda-slider .panel-wrapper { padding: 20px } + + /* Preloader */ + .coda-slider p.loading { padding: 20px; text-align: center } + +/* Don't change anything below here unless you know what you're doing */ + + /* Tabbed nav */ + .coda-nav ul { clear: both; display: block; margin: auto; overflow: hidden } + .coda-nav ul li { display: inline } + .coda-nav ul li a { color: blue; display: block; float: left; margin-right: 1px; padding: 3px 3px; text-decoration: none } + + /* Miscellaneous */ + .coda-slider-wrapper { clear: both; overflow: hidden } + .coda-slider { float: left; overflow: hidden; position: relative } + .coda-slider .panel { display: block; float: left } + .coda-slider .panel-container { position: relative } + .coda-nav-left, .coda-nav-right { float: left } + .coda-nav-left a, .coda-nav-right a { display: block; text-align: center; text-decoration: none } + \ No newline at end of file diff --git a/src/siu/www/css/dev_bar.css b/src/siu/www/css/dev_bar.css new file mode 100644 index 0000000..f1b7167 --- /dev/null +++ b/src/siu/www/css/dev_bar.css @@ -0,0 +1,121 @@ +#loading-dev-bar { + background-image: url(../img/ajax-loader.gif); + background-repeat: no-repeat; + width: 16px; + height: 16px; + display: none; + z-index: 10; +} +#db_wrapper { + position: fixed; + bottom: 0px; + width: 100%; + border-top: 1px solid #bbb; +} +#development_bar { + background-color: #ddd; + font-size: 10px; + height: 20px; + font-weight: bold; +} +#development_bar div { + height: 19px; + padding-top: 1px; + text-align: right; + margin-right: 10px; +} +#db_show_log { + width: 100%; + height: 0px; + overflow: auto; + bottom: 0px; + background-color: #fff; +} +#db_error_php { + float: right; + background: url(../img/php.png) no-repeat 0px 2px; + width: 30px; +} +#db_error { + float: right; + background: url(../img/error-dev.png) no-repeat 0px 2px; + width: 27px; +} +#db_mem { + float: right; + background: url(../img/memory.png) no-repeat 0px 2px; + width: 60px; +} +#db_time { + float: right; + background: url(../img/time.png) no-repeat 0px 2px; + width: 58px; +} +#db_open { + float: left; + background: url(../img/newwindow.png) no-repeat 1px 2px; + cursor: pointer; + width: 16px; +} +#db_pagelets { + float: left; + background: url(../img/squares.png) no-repeat 1px 2px; + cursor: pointer; + width: 16px; +} +#db_catalogo { + float: left; + background: url(../img/catalogo.png) no-repeat 1px 2px; + cursor: pointer; + width: 35px; +} +#db_controles { + float: left; + background: url(../img/controles.png) no-repeat 1px 2px; + cursor: pointer; + width: 35px; +} + +#db_catalogo_count,#db_controles_count { + margin-top: -2px; + margin-left: 18px; +} + +#db_catalogo_tabla,#db_controles_tabla { + width: 700px; + background-color: #DEE0C8; +} +#db_catalogo_tabla th, #db_controles_tabla th { + background-color: #A1A374; +} +#db_expand { + float: left; + background: url(../img/arrow_up.png) no-repeat 1px 2px; + cursor: pointer; + width: 16px; +} +#db_expand.arrow-down { + background: url(../img/arrow_down.png) no-repeat 1px 2px; +} +#db_close { + float: left; + background: url(../img/close-dev.png) no-repeat 1px 2px; + cursor: pointer; + width: 16px; +} +#db_show_log pre { + display: block; + padding: 8.5px; + margin: 0 0 9px; + font-size: 12.025px; + line-height: 18px; + background-color: whiteSmoke; + border: none; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + white-space: pre; + white-space: pre-wrap; + word-break: break-all; + word-wrap: break-word; +} diff --git a/src/siu/www/css/facebox.css b/src/siu/www/css/facebox.css new file mode 100644 index 0000000..3f33b9f --- /dev/null +++ b/src/siu/www/css/facebox.css @@ -0,0 +1,80 @@ +#facebox { + position: absolute; + top: 0; + left: 0; + z-index: 100; + text-align: left; +} + + +#facebox .popup{ + position:relative; + border:3px solid rgba(0,0,0,0); + -webkit-border-radius:5px; + -moz-border-radius:5px; + border-radius:5px; + -webkit-box-shadow:0 0 18px rgba(0,0,0,0.4); + -moz-box-shadow:0 0 18px rgba(0,0,0,0.4); + box-shadow:0 0 18px rgba(0,0,0,0.4); +} + +#facebox .content { + display:table; + width: 370px; + padding: 10px; + background: #fff; + -webkit-border-radius:4px; + -moz-border-radius:4px; + border-radius:4px; +} + +#facebox .content > p:first-child{ + margin-top:0; +} +#facebox .content > p:last-child{ + margin-bottom:0; +} + +#facebox .close{ + position:absolute; + top:5px; + right:5px; + padding:2px; + background:#fff; +} +#facebox .close img{ + opacity:0.3; +} +#facebox .close:hover img{ + opacity:1.0; +} + +#facebox .loading { + text-align: center; +} + +#facebox .image { + text-align: center; +} + +#facebox img { + border: 0; + margin: 0; +} + +#facebox_overlay { + position: fixed; + top: 0px; + left: 0px; + height:100%; + width:100%; +} + +.facebox_hide { + z-index:-100; +} + +.facebox_overlayBG { + background-color: #000; + z-index: 99; +} \ No newline at end of file diff --git a/src/siu/www/css/jTPS.css b/src/siu/www/css/jTPS.css new file mode 100644 index 0000000..3c8334e --- /dev/null +++ b/src/siu/www/css/jTPS.css @@ -0,0 +1,96 @@ +jTPS .sortedColumn { + background: #f8f8f8; +} +.jTPS tfoot .pagination .pageSelector { + cursor: pointer; + border: 1px solid #808080; + padding-left: 5px; + padding-right: 5px; + margin-left: 5px; + text-align: center; + float: left; + background: #fff; +} +.jTPS tfoot .pagination .pageSelectorSeperator { + text-align: center; + margin-left: 7px; + color: #808080; + float: left; + padding-left: 5px; + padding-right: 5px; + border-width: 1px; + cursor: default; +} +.jTPS tfoot .pagination .pageSelector:hover { + border: 1px solid #f90; +} +.jTPS tfoot .pagination .hilightPageSelector { + border: 1px solid #069 !important; + background: #069 !important; + color: #fff !important; + cursor: default !important; +} +.jTPS .hideTR { + display: none; +} +.jTPS .hidePageSelector { + display: none; +} +.jTPS .hilightRow { + background: #eee; + cursor: pointer; +} +.jTPS tfoot .selectPerPage .perPageSelector { + cursor: pointer; + padding-left: 5px; + padding-right: 5px; +} +.jTPS tfoot .selectPerPage .perPageSelected { + border-bottom: 2px solid #069; + background: #fff; +} +.jTPS tfoot .selectPerPage .perPageHilight { + border-bottom: 2px solid #f90; + background: #fff; +} +.jTPS tfoot .pagination, tfoot .paginationTitle, tfoot .selectPerPage { + float: right; + white-space: nowrap; + line-height: 25px; + vertical-align: middle; +} +.jTPS tfoot .status { + white-space: nowrap; + line-height: 25px; + vertical-align: middle; + margin-top: 20px; +} +.jTPS tfoot .paginationTitle { + padding-left:20px; +} +.jTPS .sortableHeader:hover { + cursor: pointer; + color: #808080; +} +.jTPS .sortAsc { + border-bottom: 1px solid #e3e3e3; + background: #eee url(../img/jTPS/bullet_arrow_up.png) center -4px no-repeat; +} +.jTPS .sortDesc { + border-bottom: 1px solid #e3e3e3; + background: #eee url(../img/jTPS/bullet_arrow_down.png) center -4px no-repeat; +} +.jTPS tfoot td { + padding: 5px; + background: #eee url(../img/jTPS/eeGrad2.gif) bottom repeat-x; +} +.jTPS thead th { + color: #000; +/* background: #f0f2f5 url(f0f2f5grad.gif) bottom repeat-x;*/ + background: #eee url(../img/jTPS/eeGrad2.gif) bottom repeat-x; + border-bottom: 1px solid #ccc; + padding-top: 6px !important; +} +.jTPS tbody td { + border-bottom: 1px solid #e3e3e3; +} \ No newline at end of file diff --git a/src/siu/www/css/jquery-ui.css b/src/siu/www/css/jquery-ui.css new file mode 100644 index 0000000..6788d4e --- /dev/null +++ b/src/siu/www/css/jquery-ui.css @@ -0,0 +1,1312 @@ +/*! jQuery UI - v1.12.1 - 2021-09-15 +* http://jqueryui.com +* Includes: draggable.css, core.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=redmond&cornerRadiusShadow=8px&offsetLeftShadow=-8px&offsetTopShadow=-8px&thicknessShadow=8px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=aaaaaa&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cd0a0a&fcError=cd0a0a&borderColorError=cd0a0a&bgImgOpacityError=95&bgTextureError=glass&bgColorError=fef1ec&iconColorHighlight=2e83ff&fcHighlight=363636&borderColorHighlight=fad42e&bgImgOpacityHighlight=55&bgTextureHighlight=flat&bgColorHighlight=fbec88&iconColorActive=f9bd01&fcActive=e17009&borderColorActive=79b7e7&bgImgOpacityActive=100&bgTextureActive=inset_hard&bgColorActive=f5f8f9&iconColorHover=217bc0&fcHover=1d5987&borderColorHover=79b7e7&bgImgOpacityHover=75&bgTextureHover=glass&bgColorHover=d0e5f5&iconColorDefault=6da8d5&fcDefault=2e6e9e&borderColorDefault=c5dbec&bgImgOpacityDefault=85&bgTextureDefault=glass&bgColorDefault=dfeffc&iconColorContent=469bdd&fcContent=222222&borderColorContent=a6c9e2&bgImgOpacityContent=100&bgTextureContent=inset_hard&bgColorContent=fcfdfd&iconColorHeader=d8e7f3&fcHeader=ffffff&borderColorHeader=4297d7&bgImgOpacityHeader=55&bgTextureHeader=gloss_wave&bgColorHeader=5c9ccc&cornerRadius=5px&fsDefault=1.1em&fwDefault=bold&ffDefault=Lucida%20Grande%2CLucida%20Sans%2CArial%2Csans-serif +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); /* support: IE8 */ +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; + pointer-events: none; +} + + +/* Icons +----------------------------------*/ +.ui-icon { + display: inline-block; + vertical-align: middle; + margin-top: -.25em; + position: relative; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + +.ui-widget-icon-block { + left: 50%; + margin-left: -8px; + display: block; +} + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + font-size: 100%; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: 0; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + margin: 0; + cursor: pointer; + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} +.ui-menu .ui-menu-item-wrapper { + position: relative; + padding: 3px 1em 3px .4em; +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item-wrapper { + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} +.ui-button { + padding: .4em 1em; + display: inline-block; + position: relative; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + /* Support: IE <= 11 */ + overflow: visible; +} + +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} + +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2em; + box-sizing: border-box; + text-indent: -9999px; + white-space: nowrap; +} + +/* no icon support for input elements */ +input.ui-button.ui-button-icon-only { + text-indent: 0; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon { + position: absolute; + top: 50%; + left: 50%; + margin-top: -8px; + margin-left: -8px; +} + +.ui-button.ui-icon-notext .ui-icon { + padding: 0; + width: 2.1em; + height: 2.1em; + text-indent: -9999px; + white-space: nowrap; + +} + +input.ui-button.ui-icon-notext .ui-icon { + width: auto; + height: auto; + text-indent: 0; + white-space: normal; + padding: .4em 1em; +} + +/* workarounds */ +/* Support: Firefox 5 - 40 */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-controlgroup { + vertical-align: middle; + display: inline-block; +} +.ui-controlgroup > .ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; +} +.ui-controlgroup > .ui-controlgroup-item:focus, +.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { + z-index: 9999; +} +.ui-controlgroup-vertical > .ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; +} +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; +} +.ui-controlgroup .ui-controlgroup-label { + padding: .4em 1em; +} +.ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; +} +.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { + border-left: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { + border-top: none; +} +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; +} + +/* Spinner specific style fixes */ +.ui-controlgroup-vertical .ui-spinner-input { + + /* Support: IE8 only, Android < 4.4 only */ + width: 75%; + width: calc( 100% - 2.4em ); +} +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; +} + +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: .12em; + border: none; +} +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-disabled { + pointer-events: none; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + +/* Icons */ +.ui-datepicker .ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + left: .5em; + top: .3em; +} +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-n { + height: 2px; + top: 0; +} +.ui-dialog .ui-resizable-e { + width: 2px; + right: 0; +} +.ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; +} +.ui-dialog .ui-resizable-w { + width: 2px; + left: 0; +} +.ui-dialog .ui-resizable-se, +.ui-dialog .ui-resizable-sw, +.ui-dialog .ui-resizable-ne, +.ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; +} +.ui-dialog .ui-resizable-se { + right: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-sw { + left: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-ne { + right: 0; + top: 0; +} +.ui-dialog .ui-resizable-nw { + left: 0; + top: 0; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,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"); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: .222em 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 2em; +} +.ui-spinner-button { + width: 1.6em; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top-style: none; + border-bottom-style: none; + border-right-style: none; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Lucida Grande,Lucida Sans,Arial,sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Lucida Grande,Lucida Sans,Arial,sans-serif; + font-size: 1em; +} +.ui-widget.ui-widget-content { + border: 1px solid #c5dbec; +} +.ui-widget-content { + border: 1px solid #a6c9e2; + background: #fcfdfd url("../img/ui/ui-bg_inset-hard_100_fcfdfd_1x100.png") 50% bottom repeat-x; + color: #222222; +} +.ui-widget-content a { + color: #222222; +} +.ui-widget-header { + border: 1px solid #4297d7; + background: #5c9ccc url("../img/ui/ui-bg_gloss-wave_55_5c9ccc_500x100.png") 50% 50% repeat-x; + color: #ffffff; + font-weight: bold; +} +.ui-widget-header a { + color: #ffffff; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default, +.ui-button, + +/* We use html here because we need a greater specificity to make sure disabled +works properly when clicked or hovered */ +html .ui-button.ui-state-disabled:hover, +html .ui-button.ui-state-disabled:active { + border: 1px solid #c5dbec; + background: #dfeffc url("../img/ui/ui-bg_glass_85_dfeffc_1x400.png") 50% 50% repeat-x; + font-weight: bold; + color: #2e6e9e; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited, +a.ui-button, +a:link.ui-button, +a:visited.ui-button, +.ui-button { + color: #2e6e9e; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus, +.ui-button:hover, +.ui-button:focus { + border: 1px solid #79b7e7; + background: #d0e5f5 url("../img/ui/ui-bg_glass_75_d0e5f5_1x400.png") 50% 50% repeat-x; + font-weight: bold; + color: #1d5987; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited, +a.ui-button:hover, +a.ui-button:focus { + color: #1d5987; + text-decoration: none; +} + +.ui-visual-focus { + box-shadow: 0 0 3px 1px rgb(94, 158, 214); +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + border: 1px solid #79b7e7; + background: #f5f8f9 url("../img/ui/ui-bg_inset-hard_100_f5f8f9_1x100.png") 50% 50% repeat-x; + font-weight: bold; + color: #e17009; +} +.ui-icon-background, +.ui-state-active .ui-icon-background { + border: #79b7e7; + background-color: #e17009; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #e17009; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fad42e; + background: #fbec88; + color: #363636; +} +.ui-state-checked { + border: 1px solid #fad42e; + background: #fbec88; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url("../img/ui/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; + color: #cd0a0a; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("../img/ui/ui-icons_469bdd_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("../img/ui/ui-icons_d8e7f3_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon, +.ui-button:hover .ui-icon, +.ui-button:focus .ui-icon { + background-image: url("../img/ui/ui-icons_217bc0_256x240.png"); +} +.ui-state-active .ui-icon, +.ui-button:active .ui-icon { + background-image: url("../img/ui/ui-icons_f9bd01_256x240.png"); +} +.ui-state-highlight .ui-icon, +.ui-button .ui-state-highlight.ui-icon { + background-image: url("../img/ui/ui-icons_2e83ff_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("../img/ui/ui-icons_cd0a0a_256x240.png"); +} +.ui-button .ui-icon { + background-image: url("../img/ui/ui-icons_6da8d5_256x240.png"); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-caret-1-n { background-position: 0 0; } +.ui-icon-caret-1-ne { background-position: -16px 0; } +.ui-icon-caret-1-e { background-position: -32px 0; } +.ui-icon-caret-1-se { background-position: -48px 0; } +.ui-icon-caret-1-s { background-position: -65px 0; } +.ui-icon-caret-1-sw { background-position: -80px 0; } +.ui-icon-caret-1-w { background-position: -96px 0; } +.ui-icon-caret-1-nw { background-position: -112px 0; } +.ui-icon-caret-2-n-s { background-position: -128px 0; } +.ui-icon-caret-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -65px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -65px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 1px -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 5px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 5px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 5px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 5px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ +} +.ui-widget-shadow { + -webkit-box-shadow: -8px -8px 8px #aaaaaa; + box-shadow: -8px -8px 8px #aaaaaa; +} diff --git a/src/siu/www/css/media_querys.css b/src/siu/www/css/media_querys.css new file mode 100644 index 0000000..8752ea7 --- /dev/null +++ b/src/siu/www/css/media_querys.css @@ -0,0 +1,59 @@ +.container-fluid, +.navbar .container-fluid { + width: 100%; + max-width: 940px; + margin: 0 auto; + padding: 0 0; +} + + +@media (max-width: 767px) { + + .container-fluid, + .navbar .container-fluid { + width: 100%; + } + + .navbar-inner { + background-color: #F7F7F7; + background-image: none; + border-bottom: none; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + .main-nav .nav > li > a { + border-right: none; + } + +} + +@media (min-width: 768px) and (max-width: 979px) { + + .container-fluid, + .navbar { + width: 724px; + margin: 0 auto; + } + + .navbar-inner { + background-color: #F7F7F7; + background-image: none; + border-bottom: none; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + + .main-nav .nav > li > a { + border-right: none; + } + +} \ No newline at end of file diff --git a/src/siu/www/css/preinscripcion-responsive.css b/src/siu/www/css/preinscripcion-responsive.css new file mode 100644 index 0000000..f99bc08 --- /dev/null +++ b/src/siu/www/css/preinscripcion-responsive.css @@ -0,0 +1,53 @@ +@media (max-width: 767px) { + .container-fluid, + .navbar .container-fluid { + width: 100%; + } + .navbar-inner { + background-color: #F7F7F7; + background-image: none; + border-bottom: none; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + .main-nav .nav > li > a { + border-right: none; + } + #select_materias { + width: 100%; + } + .navbar-inner { + padding-left: 0; + padding-right: 0; + } +} +@media (max-width: 979px) { + .navbar .nav > li > a:hover { + color: #ffffff; + } +} +@media (min-width: 768px) and (max-width: 979px) { + .container-fluid, + .navbar { + width: 724px; + margin: 0 auto; + } + .navbar-inner { + background-color: #F7F7F7; + background-image: none; + border-bottom: none; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + .main-nav .nav > li > a { + border-right: none; + } +} diff --git a/src/siu/www/css/preinscripcion.css b/src/siu/www/css/preinscripcion.css new file mode 100644 index 0000000..0fd112c --- /dev/null +++ b/src/siu/www/css/preinscripcion.css @@ -0,0 +1,457 @@ +/*! + * SIU Preinscripción. + * Este archivo css no debe editarse. + * Para personalizaciones de estilo referirse a la documentación del proyecto. + */ +body { + background-color: #ffffff; + color: #333333; +} +a { + color: #58b1d1; +} +h1, +h2, +h3, +h4 { + color: #8d8d8d; +} +.resaltar { + color: #2093d1; +} + +.kernel-modal.error { + color: #dd514c; + font-size: 1.1em +} +.control-group { + margin: 0 +} +.well { + padding: 5px 10px; +} +.label-no-obligatorio { + font-style: normal; +} +.label-no-obligatorio label { + font-style: normal; +} +.mensaje { + margin-bottom:5px; + margin-right:5px; + padding: 10px; +} +.strong { + font-weight: bold; + text-align: center; +} + +.centrado { + text-align: center; +} + +h3 { + border-bottom: solid 1px #ccc; +} +.form-head { + margin-bottom: 10px; +} +.no-margin { + margin: 0; +} +.divisor { + border-bottom: 1px solid #eeeeee; +} +.titulo-operacion { + border-bottom: 1px solid #eeeeee; + margin-bottom: 5px; +} +.navbar-inner { + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #fefefe 50%, #fefefe 50%, #f5f5f5 50%, #f5f5f5 50%); + /* FF3.6+ */ + + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(50%, #fefefe), color-stop(50%, #fefefe), color-stop(50%, #f5f5f5), color-stop(50%, #f5f5f5)); + /* Chrome,Safari4+ */ + + background-image: -webkit-linear-gradient(top, #fefefe 50%, #fefefe 50%, #f5f5f5 50%, #f5f5f5 50%); + /* Chrome10+,Safari5.1+ */ + + background-image: -o-linear-gradient(top, #fefefe 50%, #fefefe 50%, #f5f5f5 50%, #f5f5f5 50%); + /* Opera11.10+ */ + + background-image: -ms-linear-gradient(top, #fefefe 50%, #fefefe 50%, #f5f5f5 50%, #f5f5f5 50%); + /* IE10+ */ + + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fefefe', endColorstr='#f5f5f5', GradientType=0); + background-image: linear-gradient(top, #fefefe 50%, #fefefe 50%, #f5f5f5 50%, #f5f5f5 50%); + /* W3C */ + + border-bottom: 1px solid #e5e5e5; +} +.navbar .nav li.dropdown .dropdown-toggle .caret, +.navbar .nav li.dropdown.open .caret { + border-top-color: #666666; + border-bottom-color: #666666; +} +.navbar .brand { + color: #58b1d1; +} +.navbar .nav > li > a { + color: #666666; +} +.main-nav .nav > li > a { + border-right: 1px solid #e5e5e5; +} +.navbar .nav > li > a:hover { + color: #999999; +} +.navbar .nav > li.menu-item-seleccionado { + background-color: #0088cc; +} +.navbar .nav > li.menu-item-seleccionado > a { + color: #ffffff; +} +.navbar .nav > li.menu-item-seleccionado > a:hover { + color: #ffffff; +} +.dropdown.open .dropdown-toggle { + color: #000000; +} +.brand-nav { + background-color: #f7f7f7; + border-bottom: 1px solid #e5e5e5; +} +td.cc-titulo-nivel-0 { + background-color: #d5d5d5 !important; + color: #555555; +} +.alert { + color: #333333 !important; +} +/* -- LOADING -- */ +#loading.small, +#loading.big { + background-color: #ffffff; +} +#kernel_contenido { + margin-top: 15px; +} +.container-fluid, +.navbar .container-fluid { + width: 100%; + max-width: 960px; + min-width: 960px; + margin: 0 auto; + padding: 0 0; +} +h1, +h2, +h3, +h4 { + margin-bottom: 15px; +} +.titulo_operacion { + margin-bottom: 15px; +} +.titulo_operacion form { + margin: 0; +} +.well8 { + padding: 8px; +} +td.cc-titulo-nivel-0 { + font-weight: bold; +} +.notificaciones .badge { + position: relative; + top: -1px; + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} +.btn { + margin-right: 5px; +} +.navbar .brand.logo-celular { + padding: 4px 20px; +} +.user-navbar, +.user-navbar .nav, +.carreras .control-group { + margin-bottom: 0px; +} +.link-in-data { + cursor: pointer; +} +.navbar-inner { + min-height: 30px; + background-repeat: repeat-x; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} +.navbar .nav > li > a { + text-shadow: none; + font-weight: bold; +} +.main-nav .perfiles > li > a { + border-right: none; +} +.dropdown.open .dropdown-toggle { + cursor: pointer; +} +.brand-nav { + padding: 10px 0 10px; +} +/* -- CARRERAS -- */ +.carreras .control-label-carrera { + padding-top: 5px; + margin-bottom: 5px; + font-weight: bold; +} +body > footer { + margin-top: 50px; +} +[class^="g3w-icono-"], +[class*=" g3w-icono-"] { + display: inline-block; + width: 16px; + height: 16px; + line-height: 20px; + vertical-align: text-top; + background-image: url("../img/sprite.png"); + background-position: 20px 20px; + background-repeat: no-repeat; + *margin-right: .3em; +} +[class^="g3w-icono-"]:last-child, +[class*=" g3w-icono-"]:last-child { + *margin-left: 0; +} +.g3w-icono-inscripto { + background-position: 2px -3px; +} +.g3w-icono-fail { + background: url('../img/icono-info12x12.png') no-repeat; + width: 12px; + height: 12px; + cursor: pointer; + position: absolute; +} +.g3w-icono-pdf { + background-image: url('../img/iconos/g3w2-icon-pdf.png'); + background-position: 0 0; +} +.g3w-icono-xls { + background-image: url('../img/iconos/g3w2-icon-excel.png'); + background-position: 0 0; +} +.pagination a { + padding: 0 9px; + line-height: 29px; +} +#loading_top { + position: fixed; + background-color: #FFF1A8; + top: 0px; + left: 640px; + display: block; + padding: 4px 8px; + border: 1px solid #FFE55C; + color: #777; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +#loading { + display: none; + position: absolute; + background-color: transparent; +} +#loading.small { + width: 16px; + height: 16px; + background-image: url(../img/ajax-loader.gif); + background-repeat: no-repeat; +} +#loading.big { + width: 32px; + height: 32px; + background-image: url(../img/loading.gif); + background-repeat: no-repeat; +} +#loading-dev-bar { + background-image: url(../img/ajax-loader.gif); + background-repeat: no-repeat; + width: 16px; + height: 16px; + display: none; + z-index: 10; +} +.notificaciones-centrar { + margin: 0 auto; + width: 50%; +} +h1 { + color: #0088CC; +} +h2 { + color: #0088CC; + margin-bottom: 0px; +} +.borde-inferior { + border-bottom: 1px solid #EEEEEE; + margin-bottom: 8px; +} +.borde-superior { + border-top: 1px solid #EEEEEE; + padding-top: 8px; + width: 100%; +} +.label-obligatorio { + font-weight:bold; +} +.toggle-header { + cursor: pointer; + background-image: url('../img/colapsado.gif'); + background-repeat: no-repeat; + background-position: right; +} +.toggle-div { + clear: both; +} + +#_msg_placeholder { + position: fixed; + background-color: #dff0d8; + top: 0px; + display: block; + padding: 4px 8px; + border: 1px solid #d6e9c6; + color: #777; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + z-index: 10000; +} + +#_msg_placeholder.alert-error { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +#_msg_placeholder.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} +.inline-help { + font-size: 75%; +} +input { + width: 300px; +} +select { + width: 310px; +} +.impresion-faltante- { + background-color: #f2dede; + text-shadow: none; +} +.impresion-faltante-active { + background-color: #FF2222; + color: white; + text-shadow: none; +} +.cg-margen { + margin-bottom: 5px; +} +.input-localidad { + width: 450px; +} +.italic { + font-style:italic; +} +.select-pais { + width: 200px; + margin-right: 5px; +} +.btn-cp { + margin-top: 23px; +} +.btn-copia { + margin-right: 5px; + width: 250px; + text-align: left; +} +.input-medium { + width: 122px; +} +.input_largo { + width: 653px; +} +.container-version { + margin-right: 10px; + font-size: 85%; + font-weight: bold; +} +.container-version_no_logueado { + margin-top: 37px; +} +.config_form-maincontent { + margin-bottom: 20px; +} +.msg_cambios_desde_impresion { + width: 600px; + margin-left: auto; + margin-right: auto; +} +.warning-icon { + background-image: url('../img/iconos/warning_icon.png'); + background-position: 10px 0; + background-repeat: no-repeat; +} +.submenu-mobile{ + padding: 10px; + margin-bottom: 10px; +} +.submenu-mobile li a{ + color: #333333; + text-decoration: none; + display: block; + clear: both; + font-weight: normal; + line-height: 20px; + white-space: nowrap; +} +.nav-header.mobile{ + padding: 9px 15px !important; + margin-top: 10px !important; + font-weight: bold !important; + color: #555555 !important; + background-color: #e5e5e5 !important; + text-align: center !important; + -webkit-border-radius: 3px 3px 3px 3px; + -moz-border-radius: 3px 3px 3px 3px; + border-radius: 3px 3px 3px 3px; +} +.div-captcha { + margin-bottom: 10px; +} +.help-selector-colegios { + font-style: italic; + font-size: 80%; + font-weight: bold; + border-bottom: 1px solid; + border-color: #DDD; + padding-bottom: 7px; + margin-bottom: 7px; +} +.subrayado { + text-decoration: underline; +} \ No newline at end of file diff --git a/src/siu/www/img/ajax-loader.gif b/src/siu/www/img/ajax-loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..e13f9d2b6b17854abf05609dcfd7f44e3441d1a3 GIT binary patch literal 1849 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 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/bg.gif b/src/siu/www/img/bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..b1645cd3b79bd6da96f8d6cf25f6a799b46e6ef7 GIT binary patch literal 315 zcmZ{fJ4?cG7=?e8SmGdNgGxv#gpf!^#!6Y zV3t~DH@jMYW1%(Xa4+A$UswRl}%YgVly}Iphj5NFX zN!a7Z!Zz0JO^NB%!uoQwW1^Bw#=KkU_I!DJW%Fd?=pa7VGrzxBN-o*kX7|Di;m%Z~ n>o76k_Ye7eeG#WK>TrZY9#0@J=ytnY!JuttxOKOGT#Wt#=8U}fi7AzZCsS>JitIdH978H@g>*S`9WdZIEW>*2-~SVP6E~R1<(A)ct6`(?lA>Bre`cS`!+p55^3p8TZUa(zAF4U7zBr(}LiJLvcYXcB{`tDnm{r-UW| DDk(P0 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/catalogo.png b/src/siu/www/img/catalogo.png new file mode 100644 index 0000000000000000000000000000000000000000..9e093a78eff6b094ccb99228991fb71a7fb6398b GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgf8DR;9a-h&lPZ!4!i_>Q> zTkEw1iX8ZO|9h=dOWLsovs^Ml-Z&)*FIu#vb7d))^#Q##2l!Z~Iw`3McOI8GE4kBB zd2v9&tl7W!KQBGsynmY3-SiE8l{OF6D#Ua5Jdj$S+`P=--6Njn2fHl}@NK(roULld zA?I_?M6^3)A8Bkf^E)iXNQ|DPs^xN1L7?&v>q z&-r_Hf!EE$brQS!ZCR6OwlP&l_1X~^ zzn)LhQ6I0fbr)WHxT8xp^I_p0{;T}lX0r|*P+zX0_J5MzIZL3Y89ZJ6T-G@yGywpd CLX#u_ literal 0 HcmV?d00001 diff --git a/src/siu/www/img/close-dev.png b/src/siu/www/img/close-dev.png new file mode 100644 index 0000000000000000000000000000000000000000..b66de9c07a94f146610357956b2b89542fac8ec1 GIT binary patch literal 450 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p?UgD_)lS(gV;kiEpy*OmPai-?dq_r)|GexNB%o-U3d7N?g^ zHq1VhAka47MAg+xR`tS4@8wpWe>vYS>W;Sd+}>1DeD;ajt+N;ZFIX|V-sO&KhVW57 zRh7!!HJsO?rpw6Guz#;Be_vfLcKof(hDKvybq5}o_Red935+|K^v<#~IX&S1VJ0WL z`W1uf0v?-fw{!D%->o|lA<;JbX3n=)yVhkF{SVP&{C=QVfaPD__Tas7(_cDV%?f?} zH7ZcV^=#VbV+lr5t_yM^uWf$+d-l&7y~EM$^LW~wRXv4nZHx6$-O!l*U}4zmy~hjZ zH158e$M(%ezgl06TX*{D?IBONABa^%tqq&s>*m}LwRW0HrqRq5_uqR@Vry<>2-Onx zzYyBvr}C2y4G_$HSPD7{~2Vj%1zv!8PEm{U}1B_t#Wus+)Bu;yq3!!CzC+*<6@{_r1Jzd&eL zz_O}6Q6nrOf&;;F`V=YhW2-H5dcFFan*V^A%UVN}92*Pr6*KYIq z79R_D7WjYZ%6-bG`>ft!2c*X`k78jvAYBZak=Ms<>;-4fzTv7M%!APFu#U55_#_g& z0wd;8!r6jQ-OLluA7Tc&xF5zQ{CW8Wf-o@Qq3R$fso_DmdrtAe`M&F)5B*92H#a~v zH@HBAnFsRdBu|f)RubO?YjpI};8VOAJZMvP{g%BB6aru2d?8hN6@>qLiM+ z%*#u0x;jy?aq81BVIhe@q3CtVDKjB=dYwX)Ol9MATqa&HDfbdd7EzJX1n4;bhepv9 zow7E*@%vBV)ICeE)W#_}r9Qv7-f9slF=`Zhj8K=5lSvg@1Hwo;APJ})sNgV+1Cpg9 zwBs1fIAvb!MmeZ!? zn`ztQnD;v6O}$gz;BQ4(Z`#{#{=Iwrp8nccd4#}Rc?K>LSmO}4mbWZmQuxsxPeOMn>8s@NP z<}7-93*;l22sjWMAaV}fK#ml8tSggse9Y2d48c8xJ~P$StDt~<2r>+pG&zw2BG2%t zv?NKJK;U?etu%>6b_(6a*ppc{3_~VNG05+*d@h%Z zH3T6^5XoTRVk1hr!NycUgMsPW9=4GSVnw5c`dFcf)3X#DZzk&olQNNlv611iJj2B) zO@X@pf2iZk&;hQ&bHD!-4jKawvNaf>zHgF?Yj4D%Jh|XQ10%nI(BZU-)h@y)=pqjk z>KU+ayA}$AFRfKz2#!Z0YtXlkpjGmb1I7u<_IxkWT)hd`n(rk$m&+0}Y<#VM zUGwya^iI5-H7(i9+8(;3*L~8|cfXwSDp_`QjdRVCr8D^adGF_=;dYbo?3lzrFP@F7{6MoT&!rX Ib`Ku@0eLAa!2kdN literal 0 HcmV?d00001 diff --git a/src/siu/www/img/colapsado.gif b/src/siu/www/img/colapsado.gif new file mode 100644 index 0000000000000000000000000000000000000000..fd416e9cb7b625a6a5838a77ecffb6ea988b102b GIT binary patch literal 306 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 HT7>=&4en74 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/controles.png b/src/siu/www/img/controles.png new file mode 100644 index 0000000000000000000000000000000000000000..80a47f5e9bffbef42acfca7ca63de953c3198b70 GIT binary patch literal 496 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyh- z77+>2a_`Lm00D4GL_t(2&y|wBP8&fKM$flD$RL!Yh-p#)MJgm0GY^m^Dcn%dr{o!E z-1q@_13I3DaJr@cg08jwf-UZ$PUqT3ywAI$!V`O_N>9#X0))lE~@1gC_lJ;#cd-WXn23!Dt z9>Cpcn&!2n54PU|_ZjuY56`PQUk?thKW&%WNM=I%*d~PZ`_WPbm~JMu!kS0!${8o!M+wZi*|$h(ZX3 zq}ukUs;aI5Mx)XDJkL*oZJ^OgLy~gaKO~)}lc84{{aGs z5k&+900M{sB(i~#@fwH*VVDdvOaVXu!S%oZTrbeXtH@^jhnc|uV*mwjf@pvM!Y~6J zuppWF7HT_KhyTBSf~XE=VBiMgH$eOfh`De&6CD5q5J3e@3oLPhKm4lBlGF;3A;>g~1mK0MlowPb9WIDgXcg07*qoM6N<$f*N?5 A^8f$< literal 0 HcmV?d00001 diff --git a/src/siu/www/img/descolapsado-azul.png b/src/siu/www/img/descolapsado-azul.png new file mode 100644 index 0000000000000000000000000000000000000000..3bb2bbcc7a004c8498ba544ef635cc1ecd9be3df GIT binary patch literal 959 zcmaJ=J#W)M7&Z-{QYk;6oeqZyh<%RhCbr^MiS0Cza1T((g++ibqc z#*OXtKj^*t$);Uu^=JnV=+q&It9ZDNKqGL5sEr(N_VgT;IW7bIZjbit2bzlm!AUVf z5=4y6apj{Va@;YZppS-rsPh+}zwp5KbpAxKp&c1$_{kJ0H8M#~&Sna-uPT z08s}d!D$$4iOw%{HMUNVMIJ05bgc82rh0Y@7?>cS2r%!$0|*WzL6Y~2#o~QXfD#m8 zL6i!4si?^X4MMQ|covO#1Fdb=ma*7Q=SP%AnkY`EQ(-C#m<&ZpRn=6ZP{=bxKAwft zN%CQwTPc_*c8MQRABP}SbozKgb)GrBOd*KYvSGX|6DydQIFTp`FimL%wC(>xgJ6x0 zX&YVn{ikr;okd7&qZm(!%Pww^OG8DPL6Ac+>0*4ks$y$|DUL@t0!BvxCw}PRX}mz& zw$=z^>Vz(8m^#n+g715pvR^9hTcxUM8m1&!uq0VhRh2EnRAi-Q$t$jj-ARB#y5f3Q zTw^0QZG<3VkxfMWXUMA&9Dqf_n!nkLx>0Y*^)`E{Y~+f}jF?{QU)Q`kV!e|t*G$XQB>vh7K`a^yAggpqQVOF}y_r7;VejR2qFSjyxldsqB?CruzE_YV__WSwm<413A kz2ADMd>p(HUNs@N4Y_;g*^BCrYo+u_HLRxjsrvZEA9wR5Z~y=R literal 0 HcmV?d00001 diff --git a/src/siu/www/img/descolapsado-negro.png b/src/siu/www/img/descolapsado-negro.png new file mode 100644 index 0000000000000000000000000000000000000000..2f0d9a72afb7ee54d2f4d2f7cf6bbabd54242cd5 GIT binary patch literal 959 zcmaJ=O^?z*7_Kq9*J3vAr z5|AW_QdU&7oTMQHRv%>1BDb$K%Eh14SfNEPiK8B-lHr{Fnt$~*Hf2i+o z&@pY`KYsry9Ji(+78*Dv(dDjpxw&%f(~I%J@=aArHS_ho?(^Rc`YBWZ literal 0 HcmV?d00001 diff --git a/src/siu/www/img/error-dev.png b/src/siu/www/img/error-dev.png new file mode 100644 index 0000000000000000000000000000000000000000..33ab7daa77c3cfec8054fac6d5973b6fd90ef90d GIT binary patch literal 752 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyb{ z5+o+Slmoc{00MAHL_t(I%e9g}Xp~tL#eetv6K9qg9TR0G;F1hBZvLrT2o_>tFIKXc zY8zP>1x0PP6GagPs|bP?f?yXbVM!NMmShn!j9_CRXwW6HQD*YZ``-87yITzTGg^DA z_uf7CaPD~rzIPpiZR_W$@$ql^$=1u<$&;L&o-W-#efsW?eSK%jX$sy0u+nOM_|R%y zrqOtOdvugb%_ab{mEh&%>KN_=i=-IR39Y6%|+rk1r_xJzpK7UqI z6k@E!wA<9KUS;3R3@vLh)?)IUPM$Lm$3wHnkN^1vNUqfDjP2TWD$cS>=Dlw0<2~h- z6#$GeIN8`%P$l;M8gMyS)QGxv$~2EK|<&usHQ2emX}{gXX|y|W!VEKB34zcDpnQa96Lrw*>m(LzEooU z-Kvs@p#NF>>DJQH+h}TWk&Dgdd=|p%j`tYv)p$>4Eqjg}VfWY=TCHM2z<7@d0f}SD z;rvDtZ;p)6wsw2HQu&m7pRBv-ivkfr;&{WJB#Nk}>624)bHDaPS!ZUraqisU&Qj?` z2w}*Du+>!cA<$ncNfJeOC+FucY=&a9b_xtA%H+4>*c5HW3>D00005o8Z4rs6d#N}`z%s@@`kh~mYNt% z(r%+RO8cTBMGc63@qPoTG%A9n^@6G0-R$R?kf5yCXlM7IS$5`|f6h6(N==fhY`T)( zqsmK^nxT{`7nO-TBK`hf8#7fY?Nzgg)Kzm~Wdq?A2MO0Si^7C!ZxO0}O{m5qULWUS zq>4{3PLdfm7#&Grk3Hhe&F8evOVhS=Nc3Igh~V5}(IN;|LUe=4=eHmD_R%7_CqsYG z#L2?oJ)4$_{93)qN0H=AosCV>S-*liG5<m?37%sPNQob z)ZeK~e>;z^!PQ;5P8ArwCOW*$MAu&;x-P}Vx_3m@Kzp_9r}uT~?ED<7|4mXSCUbpX ziR66>om)zYZJbJ?aT@ne&!+FlT6+C{x_2L!+;(GZeL~!8(tDtV!%E5h->pvwr27d# C>ZhLo literal 0 HcmV?d00001 diff --git a/src/siu/www/img/flechitas_link.png b/src/siu/www/img/flechitas_link.png new file mode 100644 index 0000000000000000000000000000000000000000..863bce89bd1f112807f98750eac073198646899d GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^>>$j+1|*LJg}1_1vh~*xcBdXeuzDH7Ui6Sy*5{`=d~YH7&=| z5*Q!(X{4JA%vRX!XyvFN>$O~QbK<1k3$4y6ZFZbw+;~GGD@8-7n*WUBx`5adIcyCK a%nUN8#Ea(ze#i&fz~JfX=d#Wzp$Py~s5!9! literal 0 HcmV?d00001 diff --git a/src/siu/www/img/glyphicons-halflings-white.png b/src/siu/www/img/glyphicons-halflings-white.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf6484a29d8da269f9bc874b25493a45fae3bae GIT binary patch literal 8777 zcmZvC1yGz#v+m*$LXcp=A$ZWB0fL7wNbp_U*$~{_gL`my3oP#L!5tQYy99Ta`+g_q zKlj|KJ2f@c)ARJx{q*bbkhN_!|Wn*Vos8{TEhUT@5e;_WJsIMMcG5%>DiS&dv_N`4@J0cnAQ-#>RjZ z00W5t&tJ^l-QC*ST1-p~00u^9XJ=AUl7oW-;2a+x2k__T=grN{+1c4XK0ZL~^z^i$ zp&>vEhr@4fZWb380S18T&!0cQ3IKpHF)?v=b_NIm0Q>vwY7D0baZ)n z31Fa5sELUQARIVaU0nqf0XzT+fB_63aA;@<$l~wse|mcA;^G1TmX?-)e)jkGPfkuA z92@|!<>h5S_4f8QP-JRq>d&7)^Yin8l7K8gED$&_FaV?gY+wLjpoW%~7NDe=nHfMG z5DO3j{R9kv5GbssrUpO)OyvVrlx>u0UKD0i;Dpm5S5dY16(DL5l{ixz|mhJU@&-OWCTb7_%}8-fE(P~+XIRO zJU|wp1|S>|J3KrLcz^+v1f&BDpd>&MAaibR4#5A_4(MucZwG9E1h4@u0P@C8;oo+g zIVj7kfJi{oV~E(NZ*h(@^-(Q(C`Psb3KZ{N;^GB(a8NE*Vwc715!9 zr-H4Ao|T_c6+VT_JH9H+P3>iXSt!a$F`>s`jn`w9GZ_~B!{0soaiV|O_c^R2aWa%}O3jUE)WO=pa zs~_Wz08z|ieY5A%$@FcBF9^!1a}m5ks@7gjn;67N>}S~Hrm`4sM5Hh`q7&5-N{|31 z6x1{ol7BnskoViZ0GqbLa#kW`Z)VCjt1MysKg|rT zi!?s##Ck>8c zpi|>$lGlw#@yMNi&V4`6OBGJ(H&7lqLlcTQ&1zWriG_fL>BnFcr~?;E93{M-xIozQ zO=EHQ#+?<}%@wbWWv23#!V70h9MOuUVaU>3kpTvYfc|LBw?&b*89~Gc9i&8tlT#kF ztpbZoAzkdB+UTy=tx%L3Z4)I{zY(Kb)eg{InobSJmNwPZt$14aS-uc4eKuY8h$dtfyxu^a%zA)>fYI&)@ZXky?^{5>xSC?;w4r&td6vBdi%vHm4=XJH!3yL3?Ep+T5aU_>i;yr_XGq zxZfCzUU@GvnoIk+_Nd`aky>S&H!b*{A%L>?*XPAgWL(Vf(k7qUS}>Zn=U(ZfcOc{B z3*tOHH@t5Ub5D~#N7!Fxx}P2)sy{vE_l(R7$aW&CX>c|&HY+7};vUIietK%}!phrCuh+;C@1usp;XLU<8Gq8P!rEI3ieg#W$!= zQcZr{hp>8sF?k&Yl0?B84OneiQxef-4TEFrq3O~JAZR}yEJHA|Xkqd49tR&8oq{zP zY@>J^HBV*(gJvJZc_0VFN7Sx?H7#75E3#?N8Z!C+_f53YU}pyggxx1?wQi5Yb-_`I`_V*SMx5+*P^b=ec5RON-k1cIlsBLk}(HiaJyab0`CI zo0{=1_LO$~oE2%Tl_}KURuX<`+mQN_sTdM&* zkFf!Xtl^e^gTy6ON=&gTn6)$JHQq2)33R@_!#9?BLNq-Wi{U|rVX7Vny$l6#+SZ@KvQt@VYb%<9JfapI^b9j=wa+Tqb4ei;8c5 z&1>Uz@lVFv6T4Z*YU$r4G`g=91lSeA<=GRZ!*KTWKDPR}NPUW%peCUj`Ix_LDq!8| zMH-V`Pv!a~QkTL||L@cqiTz)*G-0=ytr1KqTuFPan9y4gYD5>PleK`NZB$ev@W%t= zkp)_=lBUTLZJpAtZg;pjI;7r2y|26-N7&a(hX|`1YNM9N8{>8JAuv}hp1v`3JHT-=5lbXpbMq7X~2J5Kl zh7tyU`_AusMFZ{ej9D;Uyy;SQ!4nwgSnngsYBwdS&EO3NS*o04)*juAYl;57c2Ly0(DEZ8IY?zSph-kyxu+D`tt@oU{32J#I{vmy=#0ySPK zA+i(A3yl)qmTz*$dZi#y9FS;$;h%bY+;StNx{_R56Otq+?pGe^T^{5d7Gs&?`_r`8 zD&dzOA|j8@3A&FR5U3*eQNBf<4^4W_iS_()*8b4aaUzfk2 zzIcMWSEjm;EPZPk{j{1>oXd}pXAj!NaRm8{Sjz!D=~q3WJ@vmt6ND_?HI~|wUS1j5 z9!S1MKr7%nxoJ3k`GB^7yV~*{n~O~n6($~x5Bu{7s|JyXbAyKI4+tO(zZYMslK;Zc zzeHGVl{`iP@jfSKq>R;{+djJ9n%$%EL()Uw+sykjNQdflkJZSjqV_QDWivbZS~S{K zkE@T^Jcv)Dfm93!mf$XYnCT--_A$zo9MOkPB6&diM8MwOfV?+ApNv`moV@nqn>&lv zYbN1-M|jc~sG|yLN^1R2=`+1ih3jCshg`iP&mY$GMTcY^W^T`WOCX!{-KHmZ#GiRH zYl{|+KLn5!PCLtBy~9i}`#d^gCDDx$+GQb~uc;V#K3OgbbOG0j5{BRG-si%Bo{@lB zGIt+Ain8^C`!*S0d0OSWVO+Z89}}O8aFTZ>p&k}2gGCV zh#<$gswePFxWGT$4DC^8@84_e*^KT74?7n8!$8cg=sL$OlKr&HMh@Rr5%*Wr!xoOl zo7jItnj-xYgVTX)H1=A2bD(tleEH57#V{xAeW_ezISg5OC zg=k>hOLA^urTH_e6*vSYRqCm$J{xo}-x3@HH;bsHD1Z`Pzvsn}%cvfw%Q(}h`Dgtb z0_J^niUmoCM5$*f)6}}qi(u;cPgxfyeVaaVmOsG<)5`6tzU4wyhF;k|~|x>7-2hXpVBpc5k{L4M`Wbe6Q?tr^*B z`Y*>6*&R#~%JlBIitlZ^qGe3s21~h3U|&k%%jeMM;6!~UH|+0+<5V-_zDqZQN79?n?!Aj!Nj`YMO9?j>uqI9-Tex+nJD z%e0#Yca6(zqGUR|KITa?9x-#C0!JKJHO(+fy@1!B$%ZwJwncQW7vGYv?~!^`#L~Um zOL++>4qmqW`0Chc0T23G8|vO)tK=Z2`gvS4*qpqhIJCEv9i&&$09VO8YOz|oZ+ubd zNXVdLc&p=KsSgtmIPLN69P7xYkYQ1vJ?u1g)T!6Ru`k2wkdj*wDC)VryGu2=yb0?F z>q~~e>KZ0d_#7f3UgV%9MY1}vMgF{B8yfE{HL*pMyhYF)WDZ^^3vS8F zGlOhs%g_~pS3=WQ#494@jAXwOtr^Y|TnQ5zki>qRG)(oPY*f}U_=ip_{qB0!%w7~G zWE!P4p3khyW-JJnE>eECuYfI?^d366Shq!Wm#x&jAo>=HdCllE$>DPO0N;y#4G)D2y#B@5=N=+F%Xo2n{gKcPcK2!hP*^WSXl+ut; zyLvVoY>VL{H%Kd9^i~lsb8j4>$EllrparEOJNT?Ym>vJa$(P^tOG)5aVb_5w^*&M0 zYOJ`I`}9}UoSnYg#E(&yyK(tqr^@n}qU2H2DhkK-`2He% zgXr_4kpXoQHxAO9S`wEdmqGU4j=1JdG!OixdqB4PPP6RXA}>GM zumruUUH|ZG2$bBj)Qluj&uB=dRb)?^qomw?Z$X%#D+Q*O97eHrgVB2*mR$bFBU`*} zIem?dM)i}raTFDn@5^caxE^XFXVhBePmH9fqcTi`TLaXiueH=@06sl}>F%}h9H_e9 z>^O?LxM1EjX}NVppaO@NNQr=AtHcH-BU{yBT_vejJ#J)l^cl69Z7$sk`82Zyw7Wxt z=~J?hZm{f@W}|96FUJfy65Gk8?^{^yjhOahUMCNNpt5DJw}ZKH7b!bGiFY9y6OY&T z_N)?Jj(MuLTN36ZCJ6I5Xy7uVlrb$o*Z%=-)kPo9s?<^Yqz~!Z* z_mP8(unFq65XSi!$@YtieSQ!<7IEOaA9VkKI?lA`*(nURvfKL8cX}-+~uw9|_5)uC2`ZHcaeX7L8aG6Ghleg@F9aG%X$#g6^yP5apnB>YTz&EfS{q z9UVfSyEIczebC)qlVu5cOoMzS_jrC|)rQlAzK7sfiW0`M8mVIohazPE9Jzn*qPt%6 zZL8RELY@L09B83@Be;x5V-IHnn$}{RAT#<2JA%ttlk#^(%u}CGze|1JY5MPhbfnYG zIw%$XfBmA-<_pKLpGKwbRF$#P;@_)ech#>vj25sv25VM$ouo)?BXdRcO{)*OwTw)G zv43W~T6ekBMtUD%5Bm>`^Ltv!w4~65N!Ut5twl!Agrzyq4O2Fi3pUMtCU~>9gt_=h-f% z;1&OuSu?A_sJvIvQ+dZNo3?m1%b1+s&UAx?8sUHEe_sB7zkm4R%6)<@oYB_i5>3Ip zIA+?jVdX|zL{)?TGpx+=Ta>G80}0}Ax+722$XFNJsC1gcH56{8B)*)eU#r~HrC&}` z|EWW92&;6y;3}!L5zXa385@?-D%>dSvyK;?jqU2t_R3wvBW;$!j45uQ7tyEIQva;Db}r&bR3kqNSh)Q_$MJ#Uj3Gj1F;)sO|%6z#@<+ zi{pbYsYS#u`X$Nf($OS+lhw>xgjos1OnF^$-I$u;qhJswhH~p|ab*nO>zBrtb0ndn zxV0uh!LN`&xckTP+JW}gznSpU492)u+`f{9Yr)js`NmfYH#Wdtradc0TnKNz@Su!e zu$9}G_=ku;%4xk}eXl>)KgpuT>_<`Ud(A^a++K&pm3LbN;gI}ku@YVrA%FJBZ5$;m zobR8}OLtW4-i+qPPLS-(7<>M{)rhiPoi@?&vDeVq5%fmZk=mDdRV>Pb-l7pP1y6|J z8I>sF+TypKV=_^NwBU^>4JJq<*14GLfM2*XQzYdlqqjnE)gZsPW^E@mp&ww* zW9i>XL=uwLVZ9pO*8K>t>vdL~Ek_NUL$?LQi5sc#1Q-f6-ywKcIT8Kw?C(_3pbR`e|)%9S-({if|E+hR2W!&qfQ&UiF^I!|M#xhdWsenv^wpKCBiuxXbnp85`{i|;BM?Ba`lqTA zyRm=UWJl&E{8JzYDHFu>*Z10-?#A8D|5jW9Ho0*CAs0fAy~MqbwYuOq9jjt9*nuHI zbDwKvh)5Ir$r!fS5|;?Dt>V+@F*v8=TJJF)TdnC#Mk>+tGDGCw;A~^PC`gUt*<(|i zB{{g{`uFehu`$fm4)&k7`u{xIV)yvA(%5SxX9MS80p2EKnLtCZ>tlX>*Z6nd&6-Mv$5rHD*db;&IBK3KH&M<+ArlGXDRdX1VVO4)&R$f4NxXI>GBh zSv|h>5GDAI(4E`@F?EnW zS>#c&Gw6~_XL`qQG4bK`W*>hek4LX*efn6|_MY+rXkNyAuu?NxS%L7~9tD3cn7&p( zCtfqe6sjB&Q-Vs7BP5+%;#Gk};4xtwU!KY0XXbmkUy$kR9)!~?*v)qw00!+Yg^#H> zc#8*z6zZo>+(bud?K<*!QO4ehiTCK&PD4G&n)Tr9X_3r-we z?fI+}-G~Yn93gI6F{}Dw_SC*FLZ)5(85zp4%uubtD)J)UELLkvGk4#tw&Tussa)mTD$R2&O~{ zCI3>fr-!-b@EGRI%g0L8UU%%u_<;e9439JNV;4KSxd|78v+I+8^rmMf3f40Jb}wEszROD?xBZu>Ll3;sUIoNxDK3|j3*sam2tC@@e$ z^!;+AK>efeBJB%ALsQ{uFui)oDoq()2USi?n=6C3#eetz?wPswc={I<8x=(8lE4EIsUfyGNZ{|KYn1IR|=E==f z(;!A5(-2y^2xRFCSPqzHAZn5RCN_bp22T(KEtjA(rFZ%>a4@STrHZflxKoqe9Z4@^ zM*scx_y73?Q{vt6?~WEl?2q*;@8 z3M*&@%l)SQmXkcUm)d@GT2#JdzhfSAP9|n#C;$E8X|pwD!r#X?0P>0ZisQ~TNqupW z*lUY~+ikD`vQb?@SAWX#r*Y+;=_|oacL$2CL$^(mV}aKO77pg}O+-=T1oLBT5sL2i z42Qth2+0@C`c+*D0*5!qy26sis<9a7>LN2{z%Qj49t z=L@x`4$ALHb*3COHoT?5S_c(Hs}g!V>W^=6Q0}zaubkDn)(lTax0+!+%B}9Vqw6{H zvL|BRM`O<@;eVi1DzM!tXtBrA20Ce@^Jz|>%X-t`vi-%WweXCh_LhI#bUg2*pcP~R z*RuTUzBKLXO~~uMd&o$v3@d0shHfUjC6c539PE6rF&;Ufa(Rw@K1*m7?f5)t`MjH0 z)_V(cajV5Am>f!kWcI@5rE8t6$S>5M=k=aRZROH6fA^jJp~2NlR4;Q2>L$7F#RT#9 z>4@1RhWG`Khy>P2j1Yx^BBL{S`niMaxlSWV-JBU0-T9zZ%>7mR3l$~QV$({o0;jTI ze5=cN^!Bc2bT|BcojXp~K#2cM>OTe*cM{Kg-j*CkiW)EGQot^}s;cy8_1_@JA0Whq zlrNr+R;Efa+`6N)s5rH*|E)nYZ3uqkk2C(E7@A|3YI`ozP~9Lexx#*1(r8luq+YPk z{J}c$s` zPM35Fx(YWB3Z5IYnN+L_4|jaR(5iWJi2~l&xy}aU7kW?o-V*6Av2wyZTG!E2KSW2* zGRLQkQU;Oz##ie-Z4fI)WSRxn$(ZcD;TL+;^r=a4(G~H3ZhK$lSXZj?cvyY8%d9JM zzc3#pD^W_QnWy#rx#;c&N@sqHhrnHRmj#i;s%zLm6SE(n&BWpd&f7>XnjV}OlZntI70fq%8~9<7 zMYaw`E-rp49-oC1N_uZTo)Cu%RR2QWdHpzQIcNsoDp`3xfP+`gI?tVQZ4X={qU?(n zV>0ASES^Xuc;9JBji{)RnFL(Lez;8XbB1uWaMp@p?7xhXk6V#!6B@aP4Rz7-K%a>i z?fvf}va_DGUXlI#4--`A3qK7J?-HwnG7O~H2;zR~RLW)_^#La!=}+>KW#anZ{|^D3 B7G?kd literal 0 HcmV?d00001 diff --git a/src/siu/www/img/glyphicons-halflings.png b/src/siu/www/img/glyphicons-halflings.png new file mode 100644 index 0000000000000000000000000000000000000000..79bc568c21395d5a5ceab62fadb04457094b2ac7 GIT binary patch literal 13826 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 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/hori.png b/src/siu/www/img/hori.png new file mode 100644 index 0000000000000000000000000000000000000000..c1acc94eefeb6ad988bfb57f1894bdb90031ec95 GIT binary patch literal 1596 zcmV-C2E+M@P)7o@8rDd>KMkb6aQAS$mrj#nuI-)2tWuoIk6buAK z{J?f}{6Y#Tiq@hC)wFZYoA*LY-o1H=+02j&2b25W{pFr>-#zc#zrx<$9x$2(trG1! zv;?Vd3+*qo-_XXWBPJ#W)U({UU$-QZHH6WhRXyo!NSXfvH2`?)vOXLj=4TXePUS4h!wzs#nG)J`WFA1bQ zlOZL+knyAi2^ml4a=FZEVPj)spx5icWHKpTrX*rU9;oF_PEJB}bTs7T(+cz#xr_(Wchlhvo>eVY4A0K!3k+YmJCf)h@xxu^l?CcEQymV9H6h=lypscJ+jGmtf+R zI8WjUf&i@h(d@$P?CcL1nBUc;{jIGnaU#jd$*fySr1!8Y9=&6UmynRaLb1-H_XKgZ>YSzp0h#~W+rpEngr9B#?S>?K1iw9*fIiXFVY0&bd z?`qAOpP%3E9Zt;3Q_IWCLGdapD}8wQN}Jl>-^aOY@&a`hOHDUVn3$OGW>an5rSgFN zV_{+8TR#W(fOvRdf9pq32#9Ai8ZYn!o6V;9zW0!Lk|d+{w`8)!<0>jDQX|Kx;^EWg zQnMMcwpYbVO-=RTv5HPtc6K)1ED!J;DE80K&%4xS3vvV}$>k|cj@9U13?i4u3SL;# z3Ts+nO)IQv{eLtqyWI}tfW=}_1N5tD&CSihr%#`tprAlCkEdxZEiH+>n>TN&=F#!c z!aD9z25)I;5szM&fOyA3*(^LB1@Fm|C-C6G19<=by(%6$Y+)Vuj*gB*jjgS%4R&^R zc*jE7Eab3>^@CK`%8|T%`!+m&{8$VEXM!dkk4i^rkHg)&ccHVhQ`Dt+JUq0USOFKG`7z2;zE#;6dg>|#2pMClA zMUjV28CWYuwX$a;F|WS9UKA`SxC&#GH7!s1#k-NtMS7R4R;bmqSUl3XNS|Vk`u!EHaX@WGElGgqE_eH259ho#OEsICvh(}J=*4B#R zn|ual@wESXrN|@wig=V?XnwRPei~oXqD)Fc89l-(8&}gJO^lL4 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/icono-advertencia.png b/src/siu/www/img/icono-advertencia.png new file mode 100644 index 0000000000000000000000000000000000000000..14776e2d6e8e5db9af6c6fbf26f1cec2e47b237c GIT binary patch literal 1179 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 Bb?N{B literal 0 HcmV?d00001 diff --git a/src/siu/www/img/icono-info.png b/src/siu/www/img/icono-info.png new file mode 100644 index 0000000000000000000000000000000000000000..93c67f2bf0e6e07da700bc508b7b9f55e5c6f89a GIT binary patch literal 2112 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 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/iconos/g3w2-icon-excel.png b/src/siu/www/img/iconos/g3w2-icon-excel.png new file mode 100644 index 0000000000000000000000000000000000000000..14ef3b5fe70800e81c872b14afd28b25bc36aedd GIT binary patch literal 394 zcmV;50d@X~P)QqfPdvGPmaMu zGl;=cGX(BTkRL$`#CfH`bfi%lZZBXn;NSm$V4MH`|I5(eK8b;ig`G45{`~#T(6p-n z7$ZLz8a<~lZ~(nRk^w8v&tc$U=K}^NGsEjIFBsxXvxzt0{@Ys&vyb;MGMT6Un=8uZc21 om|L7-&#g@iACQwWxqxB=06de^;R0o#%K!iX07*qoM6N<$g5&q8G5`Po literal 0 HcmV?d00001 diff --git a/src/siu/www/img/iconos/g3w2-icon-group.png b/src/siu/www/img/iconos/g3w2-icon-group.png new file mode 100644 index 0000000000000000000000000000000000000000..ff28ed6f26fbe6675bbcec2e6b0c00303a14ed67 GIT binary patch literal 483 zcmV<90UZ8`P)j`I|uX|EWs#|7lrkEl*Gs1)WYOe3+)G6%i{U zHceA&t+h%iUklZhQZ_Qi_?H-C&|33Y1Bm0;pSx!yBAzfD4$)c%C(~Lp8jS!D5lS6* zyB)n=FDUGGyKJ}Hd&eqaJRa9XQ4}$mOiH!3h@h16BU~<*ns6`}a6X?s51{3)BaY+R zQbJfRm$z>ONRp(H2w*;+-^K?x9*>Pg0H@RGF8l-^3)?_xTkqfu(|Y0Ym-y4D-yaE$ zF<;L8?s6B41?%-1fPTNvY&Jtgyh&;%cd>FJfGo@2$4W%lY&OBsR;!iYXs}~Z6hYzj zdM$UX5}w^@wO)&rh_K)9$@AQkoUyC1`T>|uryLH4V7EtCXm$;8ah%)r3F$bcXG2jV|K{O#Z0kH7!@D`Y&bBJ)5XDpsD&$drK;@ax=Z zhWE=BKV-b1BJ-ZRxm|$S+zLg(_idXQn0WaZ*lq2x8u0hzF@`U-l^+-{0}bFnGvL?# zy9__N+ZmXIgcx{Qx^Nos17yGzpaJY?2K+pJl;Ow1xeTm2dJJ4S1vm}(iOYarj~_Dp zOO9n=Z0%-XH#H~SfdBvgF?{!OW?-4Kh=EN;mUIJtUO30_x4E8y$<>{KBO`}&1HLuZ zFfa#&GW?xChk+$NiGfYukaz?BJb%XUqp6O8d)jP<-w*CF{H`ovVC(2(U{z4WZvc~- zCBv_a=NbMin$Pg>{ym2O5)uqdz_4Iu=V17E?+(KsW?(v%l>_Sh%fMo2%)p^!d-#`O@PU>S|U}j=q04A=#Kv(i4q%i!fgC->QrZ#~$ z6MGrB#3jIi#-^c#J^4O)%<%uq7X~&JRfd0OPeBqAEGd6^_>h53PL6@o!kU<@fJn+` zjI|$gIl9QO8k3lr&YouYwtvqP#vA#W(LXL-=wkW&nU@(!0eZInk8C?ATzGjuvuo>? Z0RX_{?{TccItBm$002ovPDHLkV1nde{+9p% literal 0 HcmV?d00001 diff --git a/src/siu/www/img/iconos/warning_icon.png b/src/siu/www/img/iconos/warning_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..dc4dd95257b72caea59ead594516194952a37b9a GIT binary patch literal 3669 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 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/img_recurso.png b/src/siu/www/img/img_recurso.png new file mode 100644 index 0000000000000000000000000000000000000000..dade9b14c98dbe3852247cd73efac145365785e5 GIT binary patch literal 2215 zcmaKuXEYlM6vyq_LhMnh_7<(JBzDD$(e$YiTWeFJ(W;m+deo{AQ7f%cgrG)iS5Z`{ zh8nHyHP$n0<>@)^^ZRh`@7&*)`{{qrMcY`JvM~!XQ&CZ|nVT8GF6sHF7-=p$n0Wxg#|!3#@Qe-_^wOoGVl+250^3K;kg=9f`#anN zU_2`<^BO>fAIxP7I!vj^} zYTP~L;^$qdxre=q)qA@#odea(u^qq*w>b8^HS5?$WpK>|cJZ#`_xKlV?WqrLhZ5>6 zl80$86qwH!76P?x7-D=5^Kf%5yZhUQMe$|!yT<{WQdbtc$L*XAYuX!;7RsVZrbzhd z0Z>P2R&W~jBS;S>EB9ubU-f@P0(*)r&lejIxwwNfj zJ^$BACyO)JD|y@la_!$s);y&Y$-rtL$RQFrDUkub0CM*OQ zU7+OjG?B9k;p*~PNAzTBl`pMzbdKWmr)0?Gia4x-)05}eDwMD&X8mFush^|(Lo7Y!_8&+*4^@Ly0120VMHTgIfr?BYs@1Eg)=UXv3vo zxJzw|2uX)!*<{V!0kDY>;8VfV+W}z(@VMRLse-Rxvn6HLpb> zLXr@J#ErbWE}l>_RhC<`bAIQlHVzC{7cz~hHxN$L5gKZS5a>x?iq7*PHklcNaOO1j zi@hdOc>>=~k9rGy#DA4B-3z^0KSe6c6u5xNcc!PbHsvI3#x150QcO%t=0Dhs?Ho^- zO)3dwjKX}M=&eNd)>)d`$sggA>ThOPnv;W*e91p$=T^S0P8|=ZyqKkYp@^Tl7bBG1 z^RKPD=aW$VoU}Brp%+shB6p&g0ytcDwZj&g>r~{&w9T?0C7)-gEh4bEA8$L}+ifw> z<|%uyaSAPVOCEZUX#1v`{K;WWIn%c5nVXLCRF+YeG`QzF-?uXlnzWra-XX{8t0wh0 z?*kEQn2yr!(7T<q2yC;5*e=!2np>hd+H3zFO$_ z?o^zs=poIEPtdJXNS$Btl9P`vv|wB_bLso>hV(xqAoeM`Fjb&pDZ>Xi-r6$h-WsgA zEO9l)NX|P)vMi6I6pco6J59mEYw@0XFs@ik1-RVAU|^}Tw#0Bn2&b*p?9Uo^iV}7m z-i(c+)66bK6$B+>B~1O42qn7A$$N9%Pg?G=HnwWqC>BGHmQv}$NFZ^nBsFGg*ai|U z{jTW^paf%L_>fQ}^jrlVz9ms|cGu@9Al+yUwWMavHlBGbXLzX3r z7B6MYRIaX=#CfabN)4KhFpx^WFL{nSK-?vmR}*Q|==&YT9hX*HX%BVAwH`5Bo5Pr@ zpC@Rq)YOn9!`dFCu#}T!>MEPl=|A!^$ZMCPM+eF-Z`FJTR}rnNn1xDl3+Pc$s+7P9 zdB!zsy&fngRrW#(UpTWD`K^=`z3&_zX zM1aqm}Tz%cnjUZ@d`|1z0rSNDG{R|;EN9Pnbj^-qzV4HkFi^)kQ!{1Yu%8} zxm|J9gE7nFP&CpXYy(Knu6m+z(m$3n7;lf9b9BeA&T|6v7tUFwpjkYo$evz2t(T@F z*LwbnR59r3Gd*5*mBiXntcNqC^u}LFT<^sMx;XJ-#W7_F^14Yd7M=k4?om#CvJksc z@<})!g!LF@8^tH}-gTA`rDbH+ByRnF$x(P<#Ev8MNlaJq%R7Jf&|-2OBFzg{lHVp$U*%zX`XHWX$Rs+&wEUE`n0IhUUYmASE% JQ7yy`^)G+S8O#6x literal 0 HcmV?d00001 diff --git a/src/siu/www/img/indicador-izq-gris.png b/src/siu/www/img/indicador-izq-gris.png new file mode 100644 index 0000000000000000000000000000000000000000..f166c3d89b392e7b0048812e0ed2400129120361 GIT binary patch literal 995 zcmaJ=O=}ZD7@iswo03vIwTduoy=iu5^U-9Nu4$T0Y|srQ4K%%VKPJi2?#{Y9Z8kks zL9pOK&w{kjvml<-gL?F!CqeKm;>|yx)Y&viJs1~e=Y!{Y-sgSiorBfdtwj8C8~~80 zuBdf3Ut%ME@dEq5x;=fwra4+}(lyeeUERl^Xb}U$s-w4Y9qU%_?gzXGKn&WACT(hW zWRp0&9%1;<@faI`#X{)m<`$;Vz-`-AxSwy{a?rLEZau3Z%`4%Ky|U-ywY^%y+}koG zi!0oOi=oT}987f>I@@j_hYHu%mDxHv7C6|4&@F{KHPzHsVTt${W_gq}(E@@CA}^*h zxm@lBOd$~oC?$xgq?nV_DH$O+_&65Lw_0*ttqfwZox*h}^<+WlcDsBx%@e;Zh>|2l z8mUy0A(BDQrFxijgZZI?iUZTPJ!%sdMvA&YcBsNJr>7}6-bmIB24!Le6GGh+L>@&c z4S|~Wf2iY(&;hOEGr#{74jMfV3w0cj9p7XZ*P4$)d2-3eIwgLCknLd=S387~phG-Z zTFb(9+qFnH=%Y1FuDSu$T@zPTg=2i)wk%}FXMieee%)sj@MWF&PtRVh}a z{E({>bH~9h9dfNRZhkB`Y6Qn)kyY&5yV$Du#DV>UWqZ7r>{z`4*Bb9-VJuf*W`yWk z|GMVk5$m03Ici$A8MQrjS+D!7si%)$Mh|MEsummJSHpTY(fau8IyjE+=L^Z~#^ZZn z^L-o4Ore>{*@MjClf&Y-*Wl@wPq7#0Vh{EwA101!Crby#&r|b;k(mAc=-L(4m5pB~ eCxuuREbUK#^Sf8Sw|;oN=-E}vHTC)O=KVji+%@w6 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/item_dcensal.png b/src/siu/www/img/item_dcensal.png new file mode 100644 index 0000000000000000000000000000000000000000..451002a68fad0048396a18a10b8f4338c42f5f01 GIT binary patch literal 441 zcmV;q0Y?6bP)Xm-pW+33pu1H&xNytngaTw$6f z0%n@#t?&CUKh&l_o4-T6pjMXUcN9ghMNxbb)}R2~b={}7Z6{hddsS77*L6L|G)=$m zsIhpFCF=Wrme^vv4bE#Y zN>o*Ko|mF1gm!QxtqX8{JQCa(o7*MeNnlAZ&y~P}SrPJUqCSAML&UTBs zYK3aoqO$3z?gwf?4~oNKH$)F2dhp_57iH+pgGbSW2%el!*kL;HP_~PRqEP18MrWbS zZq}`^){WS9iS5>|YfPdEX*=+Nhd23npXYtQ@BKbP5ClkYyWQ=BgM;@=B80z?*QKZv zkxr+RBO@cv!JkJYaqRdPtqcWS#$}toQB~FRZ>Pf9pKA*4Q#>R#m zbGaO>R;xW23{H5x-qSS(62wkbk|e1{i4;YF<2cYX-5dx6-gI|&chwju$<<Em|xV z`Mk_#GsF(|$Oe3&07t9Socg_l+2t=d)a(@51_M>MVC=kjc;NfmOE3*3 ztmnh{ww6Mh?II{rx1)*Lb)i(IMGj4oJ>PH_ALUQgcwK@t^{QK%Y> zM_%1QG16tAI*`tl!15fDnG9O2*P$mU1m~WjST0tGD-6Q%;EhJZ5o~Vj!E#yr%(8GF z=*0=gIW+C+K{PRr$@oWgLP{s9L2^BHkkVPuck(XU9KGmtU4hHih4+yFR@g<9MB~_M zR23@IQb0A<+m={<<=Cg_D11k+%8T#jhOwBMMIBv-&5{83zT;{|$*5c|tN&D|v;RdX z^61I#`e_*G1{Ah(NdAg}G21bp{ET)-KfJAHDkh=5BUFFKz_YK3kU!2weNt!jdNUdf zCM>gIJ!SP uke;f?<2nCte**pk@nO*m3kx%U1Q-B!@FshTS55^00000C#5QQ<|d}62BjvZR2H60wE-%M_H=O!(Kw&{<9vg>5sxM-`@i?U z_W%6<>VNmY^FQu?=k0EK8(;qS{{MRQfQxhfe|^4DBSLrMi_=~IrT?G*6aRH>fZ%Fr xHSdzT`JeW`iC!n;=N{%MvhUm!=_W-^hCUIl<$=usRzPbQJYD@<);T3K0RSKzPZ9tC literal 0 HcmV?d00001 diff --git a/src/siu/www/img/jTPS/bullet_arrow_up.png b/src/siu/www/img/jTPS/bullet_arrow_up.png new file mode 100644 index 0000000000000000000000000000000000000000..24df0f42129c291ddb3dd50c8ba2884dc23a2c43 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%M_H=O!(Kw&{<9vg>5sxM7Y}K&+ zaVqV>2dg?$?}z`N|7UG5-|D8TLf!k;{Mi5T|C#@x_qjwjYRvdu`ttwR|Kb1QzwCco x|Ef}l>({^Sf7bts|6%{R{?h*$`OZ2jjF;IsFRaMi76-J3!PC{xWt~$(698OLQAz*+ literal 0 HcmV?d00001 diff --git a/src/siu/www/img/jTPS/eeGrad2.gif b/src/siu/www/img/jTPS/eeGrad2.gif new file mode 100644 index 0000000000000000000000000000000000000000..7759e1aac79f8b8e6fbfa3149d0d1dce7ebb60b7 GIT binary patch literal 92 zcmZ?wbhEHbWMtrB*v!E2^2N(1kDt7L{pR`e7jNIad;09zyLa#2zJ2@Z)vKpZpFV#4 p_~glx|NsAIfC0syEQ}05tvVn9kQodtoEIi23rMK4E>&W%1^`)*DhB`n literal 0 HcmV?d00001 diff --git a/src/siu/www/img/jTPS/f0f2f5grad.gif b/src/siu/www/img/jTPS/f0f2f5grad.gif new file mode 100644 index 0000000000000000000000000000000000000000..aff08b7d5e16fb40204a7142fb7e86fe21fffef3 GIT binary patch literal 93 zcmZ?wbhEHbWMmLw*vtR||Ns9#e)7V#8~4v&yz$`Ci`Q>Iy?FKh?)@jX?mYbP>FeX? ouYn4{3PFV8PZmZ71|9|-5C>!i0}EHc%*|Y0&J)gBcQRN50G*vE(EtDd literal 0 HcmV?d00001 diff --git a/src/siu/www/img/loading.gif b/src/siu/www/img/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..f864d5fd38b7466c76b5a36dc0e3e9455c0126e2 GIT binary patch literal 2767 zcmeH``%_bA0*1eHPVNawNVtR;Fkp-nQj8edfS`v<5L7TgR6wi;WfgH-0}4fE+c_uU zB6tf6auF}FAcDdgg|bMU&H)LR5jARM!8$tuwd$nHqS?K-=JNZ+yGvz=Iegxp{+qWGZ9j{-%9vvN>n3$NJp6==CAqYaF(LfM1Z{EEA{{Gt9 z+Ba|B7z_sR+xabl|E~mm-*OXmhLq??y)HONjX>1ze1D?RIn=G1`RR-%fb}zgSh6^a z(}Zw20U1L^Cs9UcyJfc+al#}J2xVlYUoR{`gd&QDxAb1w4>I~5gc?ccq(G+T!I;H};U_uyHR0@hr>Qk1P1=6fvUBhR zb|&^^cEQtu&W}=-=YR7o5UI)AD*~%J7bkVd5`xrdw{bHm;|Bf^_|FG$9l}`ruhnVF zO%=6X*I#yro*pmfB;-A0cVjz73Qy)`oa=df_3Bx6!M3TNALf9BwI*di`jhdovR(I= zFT31zui1Xw??+Ym-lWNq=V6~8tt012$@*hy3So0QNJ#eIJ4Yh{qJ+aTY>ng8W1p4BrwB_>i7AY-xmGrA}hAeq`aX(yx~=c&|=$w&*&PpKd;G@@0oXK@D0x=;tyY&Eb|HKPsM z71v`PO)na3pfO*xUD8Z|CQju)c+RSAH=5V^4vb9Q2JwHwt|-INt|!nD?AlRxF5ZT8 zaA9~hGb$~rMhQh_0+31$tkzyLi>X3c7>F!|Jyn`+5{LG=E`sIQbHA8!=`uday6D6Y zNtVL?j^`6A%UuwO!`}j#s~H?w=P<5}Z2)*PPx|5q$MM+1K6_d_cie9JVArbrB2sRy zOl**1Mc+|zLM>munG#O|##RApuODr^1+pL-?SHX+D6Dz_@%-Oo(fM&hHYZ-jWU5jf z&nBYG;>F6&Y`veoLdZ@0WyrDsuXOP)9g*C`A(+R`Ryc2+9w_DJNaf@Dzg?~N{uI_} zjV(!yygvrGv#KF*Mt{6H^v1Ve=hQyF2^E~bd#&iZg;(%dS^nM;oGSF1Y^&rY}Ian zFrp%SBGPyN{Z?t%Mo#!qgLQ2)k{>KAv?=zezKN*qPRf>^4QjcWgyxiC}7Vb6vGrBLR(1J&B%*gb{`!Jljb^2%jB$ zFBNUHANC6Q?0~M}cVtgk_;_DAB-BE?2dP z(C9OIXza3Ao-@UyqX%`5cjg#cHl!uHq;&?~JO{eE+A2KSSD)s8v&CiV$kV$A=DG@i z;6JY7z*8oPdj@bbJQoTAENW#ls(ucbGA#yhN>zbWqBTbLl>rGqOAY+` z=psSt8VQE=9+X8^$l@oeDzRvja79ry3nvLcOR7+)bIFyJVoz4}URM-47_u>V zY*^e(o`?|l++*Y0uQ#&dKapW1o?J{jx+*_gKV^cW+W87KI7hZ5viXv$$=1IR^Z~yA XWBrHU7iSEP8X8hQyAJO{V6g1pwSv80 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/login/facebook.jpg b/src/siu/www/img/login/facebook.jpg new file mode 100644 index 0000000000000000000000000000000000000000..71cc250996196a6b1c223f4feb9a453dcbc1ea0e GIT binary patch literal 4277 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 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/login/google.jpg b/src/siu/www/img/login/google.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a319b2563de7ea138e1b4d9bf75e41fe2ea7b87c GIT binary patch literal 5948 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 P00000NkvXXu0mjf{~+&k literal 0 HcmV?d00001 diff --git a/src/siu/www/img/login/oauth_2.0.jpg b/src/siu/www/img/login/oauth_2.0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..01bbe3ba25d7cc32903725adb03fb5e2bdb32b56 GIT binary patch literal 2955 zcmb7=XHe6N(#HQG3B83TErgErUInBaI!X zC*;3@Kq;vxz|{XtwV44500IG1f~i1M(0{f-6aW|kgR%(7>sq-}Qn3mu1hVPMdkfPrDaRiM=^R#Ox_({=O9 zyPg2%9ZSp-Yn5s4+1jCs)u({=R!(hk(R*I$%3d)Tdqxn4w__H`g zk5~e8>$aY=h7(;)iQDzAZI7#Bh)UDhp;F9-nNpcxZ0C)?9d9!n2PQK4$>FQZyn{a4 zNu{(5TVet{ag8x%VvIF=d`>lPNdD>%Jcp|6~mO1Uow&sEqackOf|J=!yt`$qK=ojGqg%B-96?(PA>01AIz)qlE0TVgtx6HSgslfZ~bIu zJidi(9Fa37*k{=ck8R%QCY~V17L}(&M*9_CvACq!OkMy!f7ygr)_b<+)lu{?3eNw< zL-(REe(?B-wy%d8%8N;Ygdaz1dy1#LxF1>Zpj`<{fCzNf6O@CjaaR&E7Mx(Gv1-gA zLUA%N{IS#&0?y^V1yvDN#vUxr$+n$cr=~6ysTY7dxoKv-bIiOzIRc%d{_b|$udSa6 z?Ot^+AEvRVct18HdJ=B=p)&h&$G{f85t`#097r|CfxHxv=10o`B<eU^YRY|;H<7@-LWU^5a-g1jpFLe-ieV09MuD^6U)2!-yheO{> z$)c9-CGb*?h>=I;;@Dxo3YmFs4%>v#6YQ+L0LY6vj;1wPbD8PSm709X0);c)6?6un zbN(Y1&z_*C`Y-34iu?Gd$i6k-Xwj|>Z!Dg0^jw#LB?t4j;U4y0;+y*<|@fY)xjlvO1z3m+_OX%jfp!P*g zzwIzV4Z4F3KgNa53O@Ya= zHD7+p4}p=a(19h_+BZ5DZn4zVu6~FQ)%eW)L85xRf|AA31yFM{nI>@HfkQtT9$RH* zFx1--sFC;36TU9^B&&Kwd8g?6rC&F~&YlTr?W_3va_lh=4&DU%h_Kv0OndXp5MDGt}xz>y^RH3%p8|zu5-68$gzTi7l z`jwBOAv=qH+z!Q9hfraOx7Ay1jl;8K{YsG5VeRMV1bdVH6<;*y&JTr5U*pAuT zjMS&eS1E9drXguH-xT!tm9<&ndK^>FpKLqcU0OGrCHE_-6J&n0Zf-@=ZpJ1@-T2si zPLIsEHJepT&-6_-sn5BjKW(44!X zvd&VxecGO`VtvCFq`X98P7*{5)4d!D8O5j@P@cd4iqGSE*_AaCvLEFN^Zkrb2IFRL#w&S1zabd34ecCZP z|9z&1OgJ&5$y4L2B}_&~cO(%JL0En^*Tum<)STalmv|7er%)Jp*cQdjXy+Q^j&G=k z5ZV37*E`V_`R^Y*cuzd(Q1lGizt;c33Uo9ev;Z|5p{3!v5B3+F=kqv>L$!&ljufiK z^*`>OJ9nM?B=Agp?Zc|n6 zBgib=7^5y5(dY1u?14cXq~A67hpaKp`ptL4*+ym(+2z;5bMKgD*NY^Mt*6JMe>CX6 zCsY(tSd{6go|Lw#(X}>AeDD!D+lZ>u-m0i%%sDG*N&DsUO}FI@e_`-e$DOkwX!(`z z=^jxWxCbvH3tR&VHL-G>wvrbNA(1b<{qqH zhhy$JIcEHtqy!VQm#_=!b8z3T%ejl#7Vb@(g!h_xS}pc~|L)F_OVa&wW_MDX8jYU zFU_R)oWt5}+~GWe#s;)%)C_655D@qJN5DFKyUbdg~fnj_3x0FXX0}BOhL51Qol@1 zwWRoER8i=vZ*;4=yH>@^%FxVJslm_oA78prmS?;^TZwoS?rfF*e4tV)4kbm}lRk0s zxoVs=9>&-FC?G+^EP_HQg2Bj=pIg5FfMt^RTE>Q48lP?5+vMKSRK`+=B&EJ^v^HAU zVd1P~xC~10R#@ZGp}`DMyP3Q{qWHZU#N?Izle^|Y`|IWW>* z4GI?{#F)&!AP$yhiQw_wiVoA?)EV{QUt)n+YJO_||Cim`qgZMt4ipcd6^Di}Lzr~| L-TxEN#q7TT!1-4c literal 0 HcmV?d00001 diff --git a/src/siu/www/img/login/openid.png b/src/siu/www/img/login/openid.png new file mode 100644 index 0000000000000000000000000000000000000000..8c655ae1ce197d39d3021bb9a055131b97c89bc6 GIT binary patch literal 3639 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 V9mYsM0Ip~O^3p0&l?da{{|D6KPu&0j literal 0 HcmV?d00001 diff --git a/src/siu/www/img/logo2.png b/src/siu/www/img/logo2.png new file mode 100644 index 0000000000000000000000000000000000000000..9a99186a857f1534dff8d9cab9458340a0775974 GIT binary patch literal 4368 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 KMNUMnLSTYijyNs= literal 0 HcmV?d00001 diff --git a/src/siu/www/img/logo_ministerio.jpg b/src/siu/www/img/logo_ministerio.jpg new file mode 100644 index 0000000000000000000000000000000000000000..285c5f95556b2ffb21593884e5a45ba775229a10 GIT binary patch literal 8040 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 aoLiTBfd5^`!x43?TYkO=yh#qepZQ-zo)r85 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/logo_pers.jpg b/src/siu/www/img/logo_pers.jpg new file mode 100644 index 0000000000000000000000000000000000000000..244d5926575eb0c087e6d96a567ad4052eff3917 GIT binary patch literal 10174 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 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/logo_pers.png b/src/siu/www/img/logo_pers.png new file mode 100644 index 0000000000000000000000000000000000000000..1b530ef2ee1d20699c1af2d16b93d45c3d102b9e GIT binary patch literal 78541 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%0A-t!l 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 DUc8G2 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/memory.png b/src/siu/www/img/memory.png new file mode 100644 index 0000000000000000000000000000000000000000..65d3e5828ce456a922e12e7aad7bfe4d594ade99 GIT binary patch literal 775 zcmV+i1Ni)jP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyb{ z5+ww4?{gdg00M_eL_t(I%e9hUNRwd{#-Ddnn>uy6Oqt<@q|p|kB7#T>Qbb^MVHXZ; z1O=f5MbTZ5-6a`8Vo+gGNCi=lNJzyXbrfp;VM_&DI(6ALeZS9d({11T?t8n*5ESyF z9yoCLah}70^8o)^Hk)m|)d4VU+bDzp0CaS89Co|iy`j*Om>7N~`a8?ow&N##eSMca z9*-0Xg~aUatTsJ8EvBZX#Fze;qU9t`1Hk*PQ=5$d(AwHs-qh4I?DzW#=Nz1KFvg&& zDi~uzS_zZltPxP}+lrdAgI_i-&;fv|c#9baA%w&!rGiolN+~2s0;QCwu{8|&_KFD0 z9|n*F07q*|eqTUR^To>J#jl?~3C+?>BFZxN`~7;(IaF08j4`YiPiT;((30awYGF952JoT>BbgaH^aUyIL}aF0gd=OjXf#4ml!PqHS~MCJHk)lF zGcz;g$NV=k>hZNdx!TrC0HCoHWnE(!4NN|W_+2+=X0k4~mln$RAH9hPo)BD?<>cJl zTwykwiN#`prfG|IyWR5V3teLv{qXR3%dWKXbagd0ZY{|-7iIqxHF@1+HI_gi5CEl= z_jR63A1DY4 zS{|fKn=1dq?jVpVe<5&?R)0o*K&q61REk9)qDD~Uz$$PEW@g<>K$9ay1|H7Nyq$gX zP#VV(;y5+|V28MXDV`8FVHmzkQ54yDc=3IoS(e4SWm!U&WqVA|*K{)o0_M6d9K-WG zkY$;rX?iE)`O0w|n1^lCV7Mg0N|K}nLDW`6c+B&BK_DH}BMsXmNuF_=Gcgv5q5yoq z$MjYbYm$ij*_zk5=G$5n4u}r{5Z?pWa`eG445law?{-}WbzOh^V45b=H0?{EuIt=~ zs;VX*R8?JUA*TJ&hqi4O1kyo0B5d)kzG)g5hJk}}H0r;7K(Lt%?t?7;BnHc%+T;WL z9+M9z2$K&d2$K(p{)Z;_LB?HQG1(vQL70(Y)*K0-AbW|YuPgf<77-zH!p>bls8j8#Zs)78EU%@kUpNL$Sqeiu>kCC)w_A ztD3A?miGMInYpq5nCAulPwHJ^knOQ5ZC-=p5?VrN2ZO2h{ zwjCbITZJy}aA7F-{2O{Bpf&JLDd+v0KegBG7G^SMUF5i~=7{sdqknJwzW+P3`tU6m VEsb;SNkCsQc)I$ztaD0e0suc+fOG%= literal 0 HcmV?d00001 diff --git a/src/siu/www/img/nro_de_tramite_dni.jpeg b/src/siu/www/img/nro_de_tramite_dni.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..9c7f8de3c4b6ec8a8069658ce76d32052b7a56bc GIT binary patch literal 8428 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 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/seleccion.png b/src/siu/www/img/seleccion.png new file mode 100644 index 0000000000000000000000000000000000000000..ee16777e62f9acaa87d4cc0c5582f9c9d5773297 GIT binary patch literal 1467 zcmeAS@N?(olHy`uVBq!ia0vp^d_c_4!3HF+i2N%7Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?>3@Ln2Bde0{8v^Ko2Tt~skz|cV7z)0WFNY~KZ%Gk)tz(4^Clz_GsrKDK}xwt{?0`hE?GD=Dctn~HE z%ggo3jrH=2()A53EiFN27#ZmTRp=I1=9MH?=;jqG!%T2VElw`VEGWs$&r<-In3$Ab zT4JjNbScCOxdm`z^NOLt1Pn0!io^naLp=kKmtYEgeeo;J&4sHjE(uCSxEHIz#UYgi zsro^w#rdU0$-sz9QwCX8VC7ttnpl!w6q28x0}I7~jQo=P;*9(P1?ON>h49S0l>G8y zuxejlE6=>*lEl2^R8JRMC7^!2%*+%kXGcRvH)j(|OBVxULqk^sOJfrgCsPY2BO^CU zM{`pPm|mCsATTyv8W{B-iG^g`Hj!;TuATPDD++Y zO}uc_O8e(YnG@`+awOV(@TzxS{1_ zj*NL%CS&}xADcJqe4ey7@lb(g$z>tg1s01Qoom&xS|6psI;(<*Jf!A&IjAl$Zpcq(lk?BrNkn{1f zKncI3I-Blo*V^)`S8U%~kRkZ-&$dd_Q%;H#M1B~G`Y7#PSiO$hIo~-jX+x&Xl|x;Y zriY?a6GOX?$5{2XU)NKT4Bl|_N9*nL_gZ!x{h$7$YF9$3mHml@3Nq&mXFj@kMpA`6 zrRLd%t52ujn9TN2i!)+^;oR_}A67A~@%g}d{)w>6w?r#Hi>ur3Zwrj8Ypqq~wYOw) z4=h|d;n>fMJ8onzt!B`^^ZZ%7`NxuEX`kD!39l6{vMfnqQ<-?^YZ4p3UhhBKhIc1f z9XA|#*m|p9EX=&@L-1w=&A=Ys|g*YPCZ@yT-G@yGywpb7#Z~d literal 0 HcmV?d00001 diff --git a/src/siu/www/img/sprite.png b/src/siu/www/img/sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..c783822c1344f060969a1f7e8f0e6314a961b990 GIT binary patch literal 7186 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 G=zjsegzh*1 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/squares.png b/src/siu/www/img/squares.png new file mode 100644 index 0000000000000000000000000000000000000000..bfefd8a91fc298217786e52003e9c99749b093e2 GIT binary patch literal 3040 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 MAwfleg^|G;0HuOz{Qv*} literal 0 HcmV?d00001 diff --git a/src/siu/www/img/tray-separator.gif b/src/siu/www/img/tray-separator.gif new file mode 100644 index 0000000000000000000000000000000000000000..994e66b10e3ad97e8e56cd542725a4dbddf3d918 GIT binary patch literal 52 zcmZ?wbhEHbWMa@|XkcKtfB*je{reSvvM_*v4u}BBFfehu^ejL5ns@KzSdFgTc5$wHcH2QwHN8$*?d+Luhe*P9b~_m3THAI|6w~csa=o6a ziYjWW6-`^>l|3JKQo`1Z+t>r^!LBgkDdq2 z0RW?;qjWlbY;0_Ne4NE%O-xKIEG)?7^5x~_nVA`>R6031$!4?X=H?_4$@KK}{QSH? zAYd|?v$L~ev6#!{ayT3YgTdqRL?Y4D)Ra&tbUK}CwR&e~$80tq9v-f&tZ21bl}aU( z$pHWFeY@lOKV|qI{G$or=8UZso$>s(mfil4lNZx0!af2M)5uan5l;&nRZvQx5$}bn zUYH<%XxVTVwEmUsigEafP`~FaeOmUc{CNeu@(n zW>iaSTYCo@gYCrO2}BZ^($(G5+t*JWK%6;sdT?ZvJ~qynm}Iip94?P9m_nWoaGRN( z6HBD?vV}$Y(z0S@b!~lPQ>ofgYqqsIy}@WQTdX#_V`q17UmoCo;Np1-L_v)`^EeTj z&Ze|5;NE9oR{$-olP~@Lmb1w2YGb_${ITj(LU%i-KI9i%I;XpXhlsq({gBXu7QB!C zO})tJ!3dpoo@Jf^;9l%>8>l|?AKc!~8O)6~@JDbTZVsQ?lOyN$;U(k@MpXc$pD^E( zJ%f9oMiCdNg=^f85GqMNRAN@kc~tW9Xz9^or=bIs6-MQWuv`3rt~FNO8Aua!uzO?p zo&9ZQG)aeAcg(ym0eX#E;+c0`$V&OiY^+gC8yIK|AuUdT>$qZSmz9i0GtBKykuGL<(sn%Y_x}96EyY6%UUe%Xp zJJ(-BFK?~a--tW6@#bdo{f)P&nVlOA=|x)`h>VJJn~nDx?r*-!Mt5!^^ZK_o-xo5^ zWxf6L?0x0OlFd$K(_`C~vboePRD~+{$x*db2H{k#)tA+(wz{~`t@by`Ia?i#nYb!;=m?OLmIZJHDtP5*fwRtCwIGx z9fZ%r`(M&*_lV-cw7s**x!OKyCSKdWSftTX6%}E+f%S%5-JlAMcj{={{Tkhnff=SB zwuo~J`oCJo>qqu&8vQ81J={Qd_02Pkc?1&-``+1A#y6*$aG$@#8 z`3#NHKH`6K{k(PdX37KWTxu54Do!ufS|u6q^ET-{!~@%WHil@Ew0t0^3QuY64ZatD&$W_O^Q^`OZD z4kg)nxNq10_kutaz#T+)@i&xuKv6EfY`R;F;i-3dvuhA&%rnhU=Eq05MX|?@!wk;? zfh`{Kpz*JfhVl?-i)RXZ+=pg(9$DQ2%mOj|Wrm7qe#`MJ0}?eCKbh z1VLNBMzAM>VvH|tRJWeQfF?uJj8&=pRv#*RG6H6NnE`C`V}Y0#k;dxm^gBnyZ02Q} zv8J%P?UWM4ijg^uwI%$v({?uNhh5{VQebO{SUNQmQ+`vl4h|GE>6LePQeNO%JOj=#B)4Mkr>aQK-q=69lM^rhVIOLNl9NGTtEnaUC5!_4m$Kuk0% zVd^2${6Pi9#7H<(MKtqALpA2AGC>HFnVTGZ%nx>s@X4;Z8Q_JDbq9;e{4FStMC>(R zuBal$(&GIb0|)|7SEX56{RG&!DDHGE%+eO<)d`9Re}0X$w1*^if>XGk8)%jeXJkz$ zGz&a~lv&Wxg3hF3?o89J1rzIqy8#E!w)$JKphVoy2<|L8#@czK26qz!p2MYCaj61a zGL<`ra8uwjyzr?ku(%s(C1fY!(@=x>R7B;;bujyoB0vWihb)Q# zE^sLalpTXRCPI?Bs#5r?K0}S4z5qN8h&CKKI_zLZPj%H6^Vd%Qz0vg>pKIO#z?J_1 Dh(FY2 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/triangle-down.png b/src/siu/www/img/triangle-down.png new file mode 100644 index 0000000000000000000000000000000000000000..04b1ab256cc95c0c58fbbb2891535cde164ae4fc GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QK$!8;-MT+OLG}_)Usv`!ERq6}=6*`)Za^V>PZ!4!iOb0e z3QR|g4GjJqZxl}K@-qOkoDZu{@SS*QQMAzARbnb9(_-FL9zAg215;!JtFNOFGxOni bHlV|V>c!S%iGEfG8pYu0>gTe~DWM4fMngAL literal 0 HcmV?d00001 diff --git a/src/siu/www/img/triangle-up.png b/src/siu/www/img/triangle-up.png new file mode 100644 index 0000000000000000000000000000000000000000..bc497f6fb49ccad0b4aaa091e11c708eff170529 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QK$!8;-MT+OLG}_)Usv`!ERq6J9G5dCcL0U#JY5_^BrYc> zCVNz#A$>9PU c$9zVHgd3vwluG~k15IM^boFyt=akR{0A=<$9RL6T literal 0 HcmV?d00001 diff --git a/src/siu/www/img/ui/ui-bg_glass_75_d0e5f5_1x400.png b/src/siu/www/img/ui/ui-bg_glass_75_d0e5f5_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..8a430924b3bfae93bcb080e8d828b9fb96652ac6 GIT binary patch literal 394 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fCzz`*b-fq}tl1_Oh5!JJ)zHb4osByV?@|6srw@%;`^ zguTSm*OmP#C%*tUXQaY}l|Z3BPZ!4!kK=F8FXUrnlsW$K{rl-(CbM`NzgM`B)1=0Dh?Uc#@v5a<;K)e_f;l9a@fRIB8oR3OD*WME{dYhbBsXc}T@ wW@Tt-WnigoU|?lnu+Pj5&S(E?0BT_HboFyt=akR{06L(D9RL6T literal 0 HcmV?d00001 diff --git a/src/siu/www/img/ui/ui-bg_glass_85_dfeffc_1x400.png b/src/siu/www/img/ui/ui-bg_glass_85_dfeffc_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..6ea95f7d0eb8d74c847a8ba0aad517c6a90f7059 GIT binary patch literal 399 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fCzz`*b-fq}tl1_Oh5!JJ)zHb4osByV?@|6srw@%;`^ zguTSm*OmP#C%*tUho1TZd!W!{PZ!4!kK=EzC~_TQkZ}L_{crO@g{Gzj%riTD-zRQ} z*wbL$dhiWr8ROd|lbc`pqFf{nvE005mUHjGlj(JDkGdC~Tja&WaJ*3F`SpUm%Q6EC zX76=N^_{kPk#hFUwsko^J_^yd8XHA!HcmMHv{t|W(k(w8&u=#uHKkjx4_}ybYTCY> zB*TN|+csPJUR>PBf3I-P{^!hF`_KdAc7@Aob8d@1xXd4(<85l@7`gWjb$jwj5OsmALAyek72~Y!rr>mdKI;Vst0K3SH A)&Kwi literal 0 HcmV?d00001 diff --git a/src/siu/www/img/ui/ui-bg_glass_95_fef1ec_1x400.png b/src/siu/www/img/ui/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..a50c3e45560cc744fce0deefd2be5777aa9eb1ca GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fCzz`*b-fq}tl1_Oh5!JJ)zHb4osByV?@|6srw@%;`^ zguTSm*OmP#C%*tUho1TZd!SI4r;B5V$MLu4H}WzjO0<7`{$EV!d5mJ1K<_m^FXe~> z4AU-L=ys_UmT2JBOZ#DWQnvG*9qY!%fIU~&SFCE^QgP;;Ff+sPLYe2cFKjE7WjZ;l zaL%MnY2wM_#q4uW5lP+GL9lkikr0DHViJ4|rlCfb{60*;9cr_&c z9NqHR;v9b^le?})%B=aE9za*AmbgZgq$HN4S|t~y0x1R~10zFS14~^)(-1>5D?>vo q0}E{f11kdq2}j=!6b-rgDVb@NxHV+Td^G`TVDNPHb6Mw<&;$Vf*npS- literal 0 HcmV?d00001 diff --git a/src/siu/www/img/ui/ui-bg_gloss-wave_55_5c9ccc_500x100.png b/src/siu/www/img/ui/ui-bg_gloss-wave_55_5c9ccc_500x100.png new file mode 100644 index 0000000000000000000000000000000000000000..f83ca2864fbb2f65fd86d59d2f26a53d606fadbb GIT binary patch literal 5882 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 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/ui/ui-icons_6da8d5_256x240.png b/src/siu/www/img/ui/ui-icons_6da8d5_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..6dc3bd95d40f213e6d0704eb766ed1f35c9449ee GIT binary patch literal 4618 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 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/ui/ui-icons_cd0a0a_256x240.png b/src/siu/www/img/ui/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..d9fd82821c109d242dd7ad3b9c1566c8fcc5cab3 GIT binary patch literal 4618 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 literal 0 HcmV?d00001 diff --git a/src/siu/www/img/ui/ui-icons_d8e7f3_256x240.png b/src/siu/www/img/ui/ui-icons_d8e7f3_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..dc51ac632ff41b751b29aad3351080b771f8fcc7 GIT binary patch literal 4618 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 literal 0 HcmV?d00001 diff --git a/src/siu/www/index.php b/src/siu/www/index.php new file mode 100644 index 0000000..c7f1f9f --- /dev/null +++ b/src/siu/www/index.php @@ -0,0 +1,11 @@ +"+info.loc_sin_cp+"
"; + $('#contenido_cp').html(html); + $('#contenido_cp').removeClass('hide'); + } else { + $('#form_cp-codigo_postal').children().remove(); + $.each(data, function(key, value) { + $('#form_cp-codigo_postal').append( + $('').val(key).html(value) + ); + }); + ordenar_combo('form_cp-codigo_postal'); + $('#contenido_cp').removeClass('hide'); + } + } + }); +} diff --git a/src/siu/www/js/_comun/selector_localidad/selector_localidad.js b/src/siu/www/js/_comun/selector_localidad/selector_localidad.js new file mode 100644 index 0000000..fcd1ef2 --- /dev/null +++ b/src/siu/www/js/_comun/selector_localidad/selector_localidad.js @@ -0,0 +1,272 @@ +var info; + +function cerrar_popup() +{ + $.facebox.close(); +} + +function inicializar_popup_localidades(_info) +{ + info = _info; + registrar_cascadas(); + inicializar(); + + $('#btnAceptar').on('click', function() { + if (validar()) { + var valor_localidad = $('#form_localidad-localidad').val(); + //var localidad_descr = $('#form_localidad-localidad option:selected').html(); + + if (info.ingresa_cp) { + var valor_cp = $('#form_localidad-codigo_postal').val(); + if (valor_cp === no_seleccion) { + valor_cp = ''; + } + $('#'+info.retorno_cp).val(valor_cp); + } + + $('#'+info.retorno_valor).val(valor_localidad); + //$('#'+info.retorno_descr).val(localidad_descr); + buscar_descr_localidad(valor_localidad, info) + $("#"+info.ayuda).hide(); + $("#"+info.campo_pais).hide(); + set_solo_lectura(info.retorno_descr, true); + + cerrar_popup(); + } else { + return false; + } + }); +} + +function buscar_descr_localidad(_localidad, info) +{ + $.ajax({ + url: info.url_descr_localidad, + dataType: 'json', + data: {localidad: _localidad}, + type: 'post', + async: true, + success: function(data) { + $('#'+info.retorno_descr).val(data.localidad_descr); + } + }); +} + +function validar() +{ + var valido; + + valido = validar_campo('pais'); + valido = valido & validar_campo('provincia'); + valido = valido & validar_campo('departamento'); + valido = valido & validar_campo('localidad'); + + return valido; +} + +function validar_campo(campo) +{ + var valor = $('#form_localidad-'+campo).val(); + if ((valor == no_seleccion) || (valor == null)) { + $('#msg-'+campo).html(info.error_vacio); + $('#cg-'+campo).addClass('error'); + return false; + } else { + $('#msg-'+campo).html(''); + $('#cg-'+campo).removeClass('error'); + return true; + } +} + +//-------------------------------------------------------------------------- +//---- Manejo de cascadas -------------------------------------------------- +//-------------------------------------------------------------------------- + +function registrar_cascadas() +{ + $('#form_localidad-pais').on('change', function() { + cambio_pais(); + }); + + $('#form_localidad-provincia').on('change', function() { + cambio_provincia(); + }); + + $('#form_localidad-departamento').on('change', function() { + cambio_departamento(); + }); + + $('#form_localidad-localidad').on('change', function() { + cambio_localidad(); + }); +} + +function inicializar() +{ + $('#form_localidad-pais').val('54'); + cambio_pais(); + set_solo_lectura('form_localidad-departamento', true); + set_solo_lectura('form_localidad-localidad', true); + if (info.ingresa_cp) { + set_solo_lectura('form_localidad-codigo_postal', true); + } else { + $('#cg-codigo_postal').addClass('hide'); + } +} + +//------------------------------------------------------------------------------ + +function cambio_pais() +{ + var pais= $('#form_localidad-pais').val(); + resetear_provincias(); + if (pais !== no_seleccion) { + buscar_provincias(pais); + set_solo_lectura('form_localidad-provincia', false); + } +} + +function cambio_provincia() +{ + var provincia= $('#form_localidad-provincia').val(); + resetear_departamentos(); + if (provincia !== no_seleccion) { + buscar_departamentos(provincia); + set_solo_lectura('form_localidad-departamento', false); + } +} + +function cambio_departamento() +{ + var departamento= $('#form_localidad-departamento').val(); + resetear_localidades(); + if (departamento !== no_seleccion) { + buscar_localidades(departamento); + set_solo_lectura('form_localidad-localidad', false); + } +} + +function cambio_localidad() +{ + if (info.ingresa_cp) { + var localidad = $('#form_localidad-localidad').val(); + resetear_cod_postales(); + if (localidad !== no_seleccion) { + buscar_cod_postales(localidad); + set_solo_lectura('form_localidad-codigo_postal', false); + } + } +} + +//------------------------------------------------------------------------------ + +function buscar_provincias(_pais) +{ + $.ajax({ + url: info.url_provincias, + dataType: 'json', + data: {pais: _pais}, + type: 'post', + success: function(data) { + $('#form_localidad-provincia').children().remove(); + $.each(data, function(key, value) { + $('#form_localidad-provincia').append( + $('').val(key).html(value) + ); + }); + ordenar_combo('form_localidad-provincia'); + if(document.querySelectorAll('#form_localidad-provincia option').length === 1) { + buscar_departamentos($('#form_localidad-provincia').val()) + } + } + }); +} + +function buscar_departamentos(_provincia) +{ + $.ajax({ + url: info.url_departamentos, + dataType: 'json', + data: {provincia: _provincia}, + type: 'post', + success: function(data) { + $('#form_localidad-departamento').children().remove(); + $.each(data, function(key, value) { + $('#form_localidad-departamento').append( + $('').val(key).html(value) + ); + }); + ordenar_combo('form_localidad-departamento'); + if(document.querySelectorAll('#form_localidad-departamento option').length === 1) { + buscar_localidades($('#form_localidad-departamento').val()) + } + } + }); +} + +function buscar_localidades(_departamento) +{ + $.ajax({ + url: info.url_localidades, + dataType: 'json', + data: {departamento: _departamento}, + type: 'post', + success: function(data) { + $('#form_localidad-localidad').children().remove(); + $.each(data, function(key, value) { + $('#form_localidad-localidad').append( + $('').val(key).html(value) + ); + }); + ordenar_combo('form_localidad-localidad'); + } + }); +} + +function buscar_cod_postales(_localidad) +{ + $.ajax({ + url: info.url_cod_postales, + dataType: 'json', + data: {localidad: _localidad}, + type: 'post', + success: function(data) { + $('#form_localidad-codigo_postal').children().remove(); + $.each(data, function(key, value) { + $('#form_localidad-codigo_postal').append( + $('').val(key).html(value) + ); + }); + ordenar_combo('form_localidad-codigo_postal'); + } + }); +} + +//------------------------------------------------------------------------------ + +function resetear_provincias() +{ + set_solo_lectura('form_localidad-provincia', true); + $('#form_localidad-provincia').children().remove(); + resetear_departamentos(); +} + +function resetear_departamentos() +{ + set_solo_lectura('form_localidad-departamento', true); + $('#form_localidad-departamento').children().remove(); + resetear_localidades(); +} + +function resetear_localidades() +{ + set_solo_lectura('form_localidad-localidad', true); + $('#form_localidad-localidad').children().remove(); + resetear_cod_postales(); +} + +function resetear_cod_postales() +{ + set_solo_lectura('form_localidad-codigo_postal', true); + $('#form_localidad-codigo_postal').children().remove(); +} \ No newline at end of file diff --git a/src/siu/www/js/_comun/selector_titulo_sec/selector_titulo_sec.js b/src/siu/www/js/_comun/selector_titulo_sec/selector_titulo_sec.js new file mode 100644 index 0000000..7c19ff5 --- /dev/null +++ b/src/siu/www/js/_comun/selector_titulo_sec/selector_titulo_sec.js @@ -0,0 +1,85 @@ +var info; + +function cerrar_popup() +{ + $.facebox.close(); +} + +function filtrar_titulos() +{ + var filtro_nombre = $('#filtro_titulo_sec-nombre').val(); + if (filtro_nombre === '') { + $('#msg-filtro_titulo_sec-nombre').html(info.mensaje_filtrar_titulo_sec); + $('#cg-filtro_titulo_sec-nombre').addClass('error'); + } else if (filtro_nombre.length < 3) { + $('#msg-filtro_titulo_sec-nombre').html(info.mensaje_filtrar_caract); + $('#cg-filtro_titulo_sec-nombre').addClass('error'); + } else { + $('#msg-filtro_titulo_sec-nombre').html(''); + $('#cg-filtro_titulo_sec-nombre').removeClass('error'); + buscar_titulo_sec(filtro_nombre); + } +} + +function inicializar_popup_titulos(_info) +{ + info = _info; + + $('#filtro_titulo_sec').submit(function () { + return false; + }); + + $('#filtro_titulo_sec-nombre').focus(); + + $('#btnFiltrarTitulos').on('click', function() { + filtrar_titulos(); + }); + + $('#filtro_titulo_sec-nombre').on('keypress', function(e) { + if (e.which === 13) { + filtrar_titulos(); + } + }); +} + +function buscar_titulo_sec(_titulo) +{ + $.ajax({ + url: info.url_titulo_sec, + dataType: 'json', + data: { titulo: _titulo}, + type: 'post', + success: function(data) { + $('#lista_resultado_titulos').html(data.html); + $('#tabla_resultado_titulos').jTPS( {perPages:[5], scrollStep:1, scrollDelay:30, + clickCallback:function () { + var table = '#tabla_resultado_titulos'; + document.cookie = 'jTPS=sortasc:' + $(table + ' .sortableHeader').index($(table + ' .sortAsc')) + ',' + + 'sortdesc:' + $(table + ' .sortableHeader').index($(table + ' .sortDesc')) + ',' + + 'page:' + $(table + ' .pageSelector').index($(table + ' .hilightPageSelector')) + ';'; + } + }); + } + }); +} + +function seleccionar_titulo_sec(_titulo) +{ + $('#'+info.retorno_valor).val(_titulo); + buscar_titulo_sec_por_id(_titulo); + cerrar_popup(); +} + +function buscar_titulo_sec_por_id(_id_titulo) +{ + $.ajax({ + url: info.url_buscar_titulo_por_id, + dataType: 'json', + data: { id_titulo: _id_titulo}, + type: 'post', + async: true, + success: function(data) { + $('#'+info.retorno_descr).val(data.titulo_descr); + } + }); +} diff --git a/src/siu/www/js/bootstrap.js b/src/siu/www/js/bootstrap.js new file mode 100644 index 0000000..3d17a25 --- /dev/null +++ b/src/siu/www/js/bootstrap.js @@ -0,0 +1,1825 @@ +/* =================================================== + * bootstrap-transition.js v2.0.4 + * http://twitter.github.com/bootstrap/javascript.html#transitions + * =================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + $(function () { + + "use strict"; // jshint ;_; + + + /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) + * ======================================================= */ + + $.support.transition = (function () { + + var transitionEnd = (function () { + + var el = document.createElement('bootstrap') + , transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd' + , 'msTransition' : 'MSTransitionEnd' + , 'transition' : 'transitionend' + } + , name + + for (name in transEndEventNames){ + if (el.style[name] !== undefined) { + return transEndEventNames[name] + } + } + + }()) + + return transitionEnd && { + end: transitionEnd + } + + })() + + }) + +}(window.jQuery);/* ========================================================== + * bootstrap-alert.js v2.0.4 + * http://twitter.github.com/bootstrap/javascript.html#alerts + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* ALERT CLASS DEFINITION + * ====================== */ + + var dismiss = '[data-dismiss="alert"]' + , Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + , selector = $this.attr('data-target') + , $parent + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = $(selector) + + e && e.preventDefault() + + $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) + + $parent.trigger(e = $.Event('close')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent + .trigger('closed') + .remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent.on($.support.transition.end, removeElement) : + removeElement() + } + + + /* ALERT PLUGIN DEFINITION + * ======================= */ + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('alert') + if (!data) $this.data('alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + /* ALERT DATA-API + * ============== */ + + $(function () { + $('body').on('click.alert.data-api', dismiss, Alert.prototype.close) + }) + +}(window.jQuery);/* ============================================================ + * bootstrap-button.js v2.0.4 + * http://twitter.github.com/bootstrap/javascript.html#buttons + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* BUTTON PUBLIC CLASS DEFINITION + * ============================== */ + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.button.defaults, options) + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + , $el = this.$element + , data = $el.data() + , val = $el.is('input') ? 'val' : 'html' + + state = state + 'Text' + data.resetText || $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout(function () { + state == 'loadingText' ? + $el.addClass(d).attr(d, d) : + $el.removeClass(d).removeAttr(d) + }, 0) + } + + Button.prototype.toggle = function () { + var $parent = this.$element.parent('[data-toggle="buttons-radio"]') + + $parent && $parent + .find('.active') + .removeClass('active') + + this.$element.toggleClass('active') + } + + + /* BUTTON PLUGIN DEFINITION + * ======================== */ + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('button') + , options = typeof option == 'object' && option + if (!data) $this.data('button', (data = new Button(this, options))) + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.defaults = { + loadingText: 'loading...' + } + + $.fn.button.Constructor = Button + + + /* BUTTON DATA-API + * =============== */ + + $(function () { + $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + }) + }) + +}(window.jQuery);/* ========================================================== + * bootstrap-carousel.js v2.0.4 + * http://twitter.github.com/bootstrap/javascript.html#carousel + * ========================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* CAROUSEL CLASS DEFINITION + * ========================= */ + + var Carousel = function (element, options) { + this.$element = $(element) + this.options = options + this.options.slide && this.slide(this.options.slide) + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.prototype = { + + cycle: function (e) { + if (!e) this.paused = false + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + return this + } + + , to: function (pos) { + var $active = this.$element.find('.active') + , children = $active.parent().children() + , activePos = children.index($active) + , that = this + + if (pos > (children.length - 1) || pos < 0) return + + if (this.sliding) { + return this.$element.one('slid', function () { + that.to(pos) + }) + } + + if (activePos == pos) { + return this.pause().cycle() + } + + return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos])) + } + + , pause: function (e) { + if (!e) this.paused = true + clearInterval(this.interval) + this.interval = null + return this + } + + , next: function () { + if (this.sliding) return + return this.slide('next') + } + + , prev: function () { + if (this.sliding) return + return this.slide('prev') + } + + , slide: function (type, next) { + var $active = this.$element.find('.active') + , $next = next || $active[type]() + , isCycling = this.interval + , direction = type == 'next' ? 'left' : 'right' + , fallback = type == 'next' ? 'first' : 'last' + , that = this + , e = $.Event('slide') + + this.sliding = true + + isCycling && this.pause() + + $next = $next.length ? $next : this.$element.find('.item')[fallback]() + + if ($next.hasClass('active')) return + + if ($.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + this.$element.one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + } else { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') + } + + isCycling && this.cycle() + + return this + } + + } + + + /* CAROUSEL PLUGIN DEFINITION + * ========================== */ + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('carousel') + , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) + if (!data) $this.data('carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (typeof option == 'string' || (option = options.slide)) data[option]() + else if (options.interval) data.cycle() + }) + } + + $.fn.carousel.defaults = { + interval: 5000 + , pause: 'hover' + } + + $.fn.carousel.Constructor = Carousel + + + /* CAROUSEL DATA-API + * ================= */ + + $(function () { + $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) { + var $this = $(this), href + , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data()) + $target.carousel(options) + e.preventDefault() + }) + }) + +}(window.jQuery);/* ============================================================= + * bootstrap-collapse.js v2.0.4 + * http://twitter.github.com/bootstrap/javascript.html#collapse + * ============================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* COLLAPSE PUBLIC CLASS DEFINITION + * ================================ */ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.collapse.defaults, options) + + if (this.options.parent) { + this.$parent = $(this.options.parent) + } + + this.options.toggle && this.toggle() + } + + Collapse.prototype = { + + constructor: Collapse + + , dimension: function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + , show: function () { + var dimension + , scroll + , actives + , hasData + + if (this.transitioning) return + + dimension = this.dimension() + scroll = $.camelCase(['scroll', dimension].join('-')) + actives = this.$parent && this.$parent.find('> .accordion-group > .in') + + if (actives && actives.length) { + hasData = actives.data('collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('collapse', null) + } + + this.$element[dimension](0) + this.transition('addClass', $.Event('show'), 'shown') + this.$element[dimension](this.$element[0][scroll]) + } + + , hide: function () { + var dimension + if (this.transitioning) return + dimension = this.dimension() + this.reset(this.$element[dimension]()) + this.transition('removeClass', $.Event('hide'), 'hidden') + this.$element[dimension](0) + } + + , reset: function (size) { + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + [dimension](size || 'auto') + [0].offsetWidth + + this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') + + return this + } + + , transition: function (method, startEvent, completeEvent) { + var that = this + , complete = function () { + if (startEvent.type == 'show') that.reset() + that.transitioning = 0 + that.$element.trigger(completeEvent) + } + + this.$element.trigger(startEvent) + + if (startEvent.isDefaultPrevented()) return + + this.transitioning = 1 + + this.$element[method]('in') + + $.support.transition && this.$element.hasClass('collapse') ? + this.$element.one($.support.transition.end, complete) : + complete() + } + + , toggle: function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + } + + + /* COLLAPSIBLE PLUGIN DEFINITION + * ============================== */ + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('collapse') + , options = typeof option == 'object' && option + if (!data) $this.data('collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.defaults = { + toggle: true + } + + $.fn.collapse.Constructor = Collapse + + + /* COLLAPSIBLE DATA-API + * ==================== */ + + $(function () { + $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) { + var $this = $(this), href + , target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + , option = $(target).data('collapse') ? 'toggle' : $this.data() + $(target).collapse(option) + }) + }) + +}(window.jQuery);/* ============================================================ + * bootstrap-dropdown.js v2.0.4 + * http://twitter.github.com/bootstrap/javascript.html#dropdowns + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* DROPDOWN CLASS DEFINITION + * ========================= */ + + var toggle = '[data-toggle="dropdown"]' + , Dropdown = function (element) { + var $el = $(element).on('click.dropdown.data-api', this.toggle) + $('html').on('click.dropdown.data-api', function () { + $el.parent().removeClass('open') + }) + } + + Dropdown.prototype = { + + constructor: Dropdown + + , toggle: function (e) { + var $this = $(this) + , $parent + , selector + , isActive + + if ($this.is('.disabled, :disabled')) return + + selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = $(selector) + $parent.length || ($parent = $this.parent()) + + isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) $parent.toggleClass('open') + + return false + } + + } + + function clearMenus() { + $(toggle).parent().removeClass('open') + } + + + /* DROPDOWN PLUGIN DEFINITION + * ========================== */ + + $.fn.dropdown = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('dropdown') + if (!data) $this.data('dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.dropdown.Constructor = Dropdown + + + /* APPLY TO STANDARD DROPDOWN ELEMENTS + * =================================== */ + + $(function () { + $('html').on('click.dropdown.data-api', clearMenus) + $('body') + .on('click.dropdown', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle) + }) + +}(window.jQuery);/* ========================================================= + * bootstrap-modal.js v2.0.4 + * http://twitter.github.com/bootstrap/javascript.html#modals + * ========================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================= */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* MODAL CLASS DEFINITION + * ====================== */ + + var Modal = function (content, options) { + this.options = options + this.$element = $(content) + .on('click.dismiss.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) + } + + Modal.prototype = { + + constructor: Modal + + , toggle: function () { + return this[!this.isShown ? 'show' : 'hide']() + } + + , show: function () { + var that = this + , e = $.Event('show') + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + $('body').addClass('modal-open') + + this.isShown = true + + escape.call(this) + backdrop.call(this, function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(document.body) //don't move modals dom position + } + + that.$element + .show() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element.addClass('in') + + transition ? + that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) : + that.$element.trigger('shown') + + }) + } + + , hide: function (e) { + e && e.preventDefault() + + var that = this + + e = $.Event('hide') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + $('body').removeClass('modal-open') + + escape.call(this) + + this.$element.removeClass('in') + + $.support.transition && this.$element.hasClass('fade') ? + hideWithTransition.call(this) : + hideModal.call(this) + } + + } + + + /* MODAL PRIVATE METHODS + * ===================== */ + + function hideWithTransition() { + var that = this + , timeout = setTimeout(function () { + that.$element.off($.support.transition.end) + hideModal.call(that) + }, 500) + + this.$element.one($.support.transition.end, function () { + clearTimeout(timeout) + hideModal.call(that) + }) + } + + function hideModal(that) { + this.$element + .hide() + .trigger('hidden') + + backdrop.call(this) + } + + function backdrop(callback) { + var that = this + , animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $('

%i&^C{K)GEJD| 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 z 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