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 0000000..7e4f641 Binary files /dev/null and b/bin/yuicompressor-2.4.2.jar differ diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..c7d5fdb --- /dev/null +++ b/composer.json @@ -0,0 +1,81 @@ +{ + "name": "siu/guarani-preinscripcion", + "description": "Modulo de Preinscripcion a Propuestas", + "version": "3.22.0", + "type": "project", + "homepage": "http://documentacion.siu.edu.ar/wiki/SIU-Guarani", + "license": "proprietary", + "support": { + "forum": "http://foro.comunidad.siu.edu.ar", + "wiki": "http://documentacion.siu.edu.ar/wiki/SIU-Guarani", + "source": "https://colab.siu.edu.ar/svn/guarani3" + }, + + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/SIU-Toba/djjob" + }, + { + "type": "composer", + "url": "https://satis.siu.edu.ar" + } + ], + + "require": { + "php": "7.4.*", + "siu/chulupi-framework": "2.6.*", + "ext-curl": "*", + "ext-mbstring": "*", + "ext-pdo_pgsql": "*", + "lib-openssl": "*", + "ext-apcu": "*", + "ext-gd": "*", + "composer-plugin-api": "^2.0" + }, + + "suggest": { + "robmorgan/phinx": "Migrations para la DB (instalar tag 0.10.8)" + }, + + "require-dev": { + }, + + "scripts": { + "post-update-cmd": "siu\\Install::postUpdate", + "post-install-cmd": "siu\\Install::postUpdate" + }, + + "autoload": { + "exclude-from-classmap": ["/src/siu/www/_comp/_img_alumnos/"], + "psr-4": { + "siu\\": "src/siu/" + } + }, + + "minimum-stability": "dev", + "prefer-stable": true, + + "extra": { + "merge-plugin": { + "include": [ + "src/pers/composer.json" + ], + "recurse": true, + "replace": false, + "ignore-duplicates": false, + "merge-dev": true, + "merge-extra": false, + "merge-extra-deep": false, + "merge-scripts": false + } + }, + + "config": { + "discard-changes": true, + "allow-plugins": { + "wikimedia/composer-merge-plugin": true + } + } + +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..221a902 --- /dev/null +++ b/composer.lock @@ -0,0 +1,2361 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "d8f7eb7bd27e1d6c3986b985d23ff98f", + "packages": [ + { + "name": "doctrine/cache", + "version": "1.13.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "56cd022adb5514472cb144c087393c1821911d09" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/56cd022adb5514472cb144c087393c1821911d09", + "reference": "56cd022adb5514472cb144c087393c1821911d09", + "shasum": "" + }, + "require": { + "php": "~7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": ">2.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 persona.logueada %} +
+
+
+ +
+ {{persona.nombre}} +
+
+
+ {% endif %} +
+ +
+ +
+ +
+
+
+ +{% 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 0000000..417ba6e Binary files /dev/null and b/src/pers/ejemplo/www/img/favicon.ico differ diff --git a/src/pers/ejemplo/www/img/logo.png b/src/pers/ejemplo/www/img/logo.png new file mode 100644 index 0000000..1b530ef Binary files /dev/null and b/src/pers/ejemplo/www/img/logo.png differ 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,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); + 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 0000000..e13f9d2 Binary files /dev/null and b/src/siu/www/img/ajax-loader.gif differ diff --git a/src/siu/www/img/arrow_down.png b/src/siu/www/img/arrow_down.png new file mode 100644 index 0000000..5f415c8 Binary files /dev/null and b/src/siu/www/img/arrow_down.png differ diff --git a/src/siu/www/img/arrow_up.png b/src/siu/www/img/arrow_up.png new file mode 100644 index 0000000..5dbba81 Binary files /dev/null and b/src/siu/www/img/arrow_up.png differ diff --git a/src/siu/www/img/bg.gif b/src/siu/www/img/bg.gif new file mode 100644 index 0000000..b1645cd Binary files /dev/null and b/src/siu/www/img/bg.gif differ diff --git a/src/siu/www/img/bk_censo_menu.png b/src/siu/www/img/bk_censo_menu.png new file mode 100644 index 0000000..208cc24 Binary files /dev/null and b/src/siu/www/img/bk_censo_menu.png differ diff --git a/src/siu/www/img/catalogo.png b/src/siu/www/img/catalogo.png new file mode 100644 index 0000000..9e093a7 Binary files /dev/null and b/src/siu/www/img/catalogo.png differ diff --git a/src/siu/www/img/close-dev.png b/src/siu/www/img/close-dev.png new file mode 100644 index 0000000..b66de9c Binary files /dev/null and b/src/siu/www/img/close-dev.png differ diff --git a/src/siu/www/img/closelabel.png b/src/siu/www/img/closelabel.png new file mode 100644 index 0000000..c339e59 Binary files /dev/null and b/src/siu/www/img/closelabel.png differ diff --git a/src/siu/www/img/colapsado-azul.png b/src/siu/www/img/colapsado-azul.png new file mode 100644 index 0000000..c5887b2 Binary files /dev/null and b/src/siu/www/img/colapsado-azul.png differ diff --git a/src/siu/www/img/colapsado-negro.png b/src/siu/www/img/colapsado-negro.png new file mode 100644 index 0000000..de231fd Binary files /dev/null and b/src/siu/www/img/colapsado-negro.png differ diff --git a/src/siu/www/img/colapsado.gif b/src/siu/www/img/colapsado.gif new file mode 100644 index 0000000..fd416e9 Binary files /dev/null and b/src/siu/www/img/colapsado.gif differ diff --git a/src/siu/www/img/comprobante_cursadas.png b/src/siu/www/img/comprobante_cursadas.png new file mode 100644 index 0000000..e92170d Binary files /dev/null and b/src/siu/www/img/comprobante_cursadas.png differ diff --git a/src/siu/www/img/controles.png b/src/siu/www/img/controles.png new file mode 100644 index 0000000..80a47f5 Binary files /dev/null and b/src/siu/www/img/controles.png differ diff --git a/src/siu/www/img/cross.png b/src/siu/www/img/cross.png new file mode 100644 index 0000000..6d0c3f2 Binary files /dev/null and b/src/siu/www/img/cross.png differ diff --git a/src/siu/www/img/descolapsado-azul.png b/src/siu/www/img/descolapsado-azul.png new file mode 100644 index 0000000..3bb2bbc Binary files /dev/null and b/src/siu/www/img/descolapsado-azul.png differ diff --git a/src/siu/www/img/descolapsado-negro.png b/src/siu/www/img/descolapsado-negro.png new file mode 100644 index 0000000..2f0d9a7 Binary files /dev/null and b/src/siu/www/img/descolapsado-negro.png differ diff --git a/src/siu/www/img/error-dev.png b/src/siu/www/img/error-dev.png new file mode 100644 index 0000000..33ab7da Binary files /dev/null and b/src/siu/www/img/error-dev.png differ diff --git a/src/siu/www/img/favicon.ico b/src/siu/www/img/favicon.ico new file mode 100644 index 0000000..f8ffaf5 Binary files /dev/null and b/src/siu/www/img/favicon.ico differ diff --git a/src/siu/www/img/flechitas_link.png b/src/siu/www/img/flechitas_link.png new file mode 100644 index 0000000..863bce8 Binary files /dev/null and b/src/siu/www/img/flechitas_link.png differ 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 0000000..3bf6484 Binary files /dev/null and b/src/siu/www/img/glyphicons-halflings-white.png differ diff --git a/src/siu/www/img/glyphicons-halflings.png b/src/siu/www/img/glyphicons-halflings.png new file mode 100644 index 0000000..79bc568 Binary files /dev/null and b/src/siu/www/img/glyphicons-halflings.png differ diff --git a/src/siu/www/img/hori.png b/src/siu/www/img/hori.png new file mode 100644 index 0000000..c1acc94 Binary files /dev/null and b/src/siu/www/img/hori.png differ diff --git a/src/siu/www/img/icono-advertencia.png b/src/siu/www/img/icono-advertencia.png new file mode 100644 index 0000000..14776e2 Binary files /dev/null and b/src/siu/www/img/icono-advertencia.png differ diff --git a/src/siu/www/img/icono-ayuda.png b/src/siu/www/img/icono-ayuda.png new file mode 100644 index 0000000..17181a9 Binary files /dev/null and b/src/siu/www/img/icono-ayuda.png differ diff --git a/src/siu/www/img/icono-error.png b/src/siu/www/img/icono-error.png new file mode 100644 index 0000000..8270104 Binary files /dev/null and b/src/siu/www/img/icono-error.png differ diff --git a/src/siu/www/img/icono-exito.png b/src/siu/www/img/icono-exito.png new file mode 100644 index 0000000..7786ac7 Binary files /dev/null and b/src/siu/www/img/icono-exito.png differ diff --git a/src/siu/www/img/icono-info.png b/src/siu/www/img/icono-info.png new file mode 100644 index 0000000..93c67f2 Binary files /dev/null and b/src/siu/www/img/icono-info.png differ diff --git a/src/siu/www/img/icono-info12x12.png b/src/siu/www/img/icono-info12x12.png new file mode 100644 index 0000000..49e4146 Binary files /dev/null and b/src/siu/www/img/icono-info12x12.png differ 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 0000000..14ef3b5 Binary files /dev/null and b/src/siu/www/img/iconos/g3w2-icon-excel.png differ 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 0000000..ff28ed6 Binary files /dev/null and b/src/siu/www/img/iconos/g3w2-icon-group.png differ diff --git a/src/siu/www/img/iconos/g3w2-icon-pdf.png b/src/siu/www/img/iconos/g3w2-icon-pdf.png new file mode 100644 index 0000000..9c316bd Binary files /dev/null and b/src/siu/www/img/iconos/g3w2-icon-pdf.png differ 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 0000000..dc4dd95 Binary files /dev/null and b/src/siu/www/img/iconos/warning_icon.png differ diff --git a/src/siu/www/img/img_recurso.png b/src/siu/www/img/img_recurso.png new file mode 100644 index 0000000..dade9b1 Binary files /dev/null and b/src/siu/www/img/img_recurso.png differ 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 0000000..f166c3d Binary files /dev/null and b/src/siu/www/img/indicador-izq-gris.png differ diff --git a/src/siu/www/img/item_dcensal.png b/src/siu/www/img/item_dcensal.png new file mode 100644 index 0000000..451002a Binary files /dev/null and b/src/siu/www/img/item_dcensal.png differ diff --git a/src/siu/www/img/item_dcensal_ok.png b/src/siu/www/img/item_dcensal_ok.png new file mode 100644 index 0000000..fbe6a42 Binary files /dev/null and b/src/siu/www/img/item_dcensal_ok.png differ diff --git a/src/siu/www/img/jTPS/bullet_arrow_down.png b/src/siu/www/img/jTPS/bullet_arrow_down.png new file mode 100644 index 0000000..9b23c06 Binary files /dev/null and b/src/siu/www/img/jTPS/bullet_arrow_down.png differ 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 0000000..24df0f4 Binary files /dev/null and b/src/siu/www/img/jTPS/bullet_arrow_up.png differ diff --git a/src/siu/www/img/jTPS/eeGrad2.gif b/src/siu/www/img/jTPS/eeGrad2.gif new file mode 100644 index 0000000..7759e1a Binary files /dev/null and b/src/siu/www/img/jTPS/eeGrad2.gif differ diff --git a/src/siu/www/img/jTPS/f0f2f5grad.gif b/src/siu/www/img/jTPS/f0f2f5grad.gif new file mode 100644 index 0000000..aff08b7 Binary files /dev/null and b/src/siu/www/img/jTPS/f0f2f5grad.gif differ diff --git a/src/siu/www/img/loading.gif b/src/siu/www/img/loading.gif new file mode 100644 index 0000000..f864d5f Binary files /dev/null and b/src/siu/www/img/loading.gif differ diff --git a/src/siu/www/img/login/facebook.jpg b/src/siu/www/img/login/facebook.jpg new file mode 100644 index 0000000..71cc250 Binary files /dev/null and b/src/siu/www/img/login/facebook.jpg differ diff --git a/src/siu/www/img/login/google.jpg b/src/siu/www/img/login/google.jpg new file mode 100644 index 0000000..a319b25 Binary files /dev/null and b/src/siu/www/img/login/google.jpg differ diff --git a/src/siu/www/img/login/oauth_1.0.png b/src/siu/www/img/login/oauth_1.0.png new file mode 100644 index 0000000..eff9a18 Binary files /dev/null and b/src/siu/www/img/login/oauth_1.0.png differ 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 0000000..01bbe3b Binary files /dev/null and b/src/siu/www/img/login/oauth_2.0.jpg differ diff --git a/src/siu/www/img/login/openid.png b/src/siu/www/img/login/openid.png new file mode 100644 index 0000000..8c655ae Binary files /dev/null and b/src/siu/www/img/login/openid.png differ diff --git a/src/siu/www/img/login/yahoo.jpg b/src/siu/www/img/login/yahoo.jpg new file mode 100644 index 0000000..1903ea7 Binary files /dev/null and b/src/siu/www/img/login/yahoo.jpg differ diff --git a/src/siu/www/img/logo-celular.png b/src/siu/www/img/logo-celular.png new file mode 100644 index 0000000..d415607 Binary files /dev/null and b/src/siu/www/img/logo-celular.png differ diff --git a/src/siu/www/img/logo-guarani.png b/src/siu/www/img/logo-guarani.png new file mode 100644 index 0000000..9b0503f Binary files /dev/null and b/src/siu/www/img/logo-guarani.png differ diff --git a/src/siu/www/img/logo-transparente.png b/src/siu/www/img/logo-transparente.png new file mode 100644 index 0000000..7a5dca6 Binary files /dev/null and b/src/siu/www/img/logo-transparente.png differ diff --git a/src/siu/www/img/logo.png b/src/siu/www/img/logo.png new file mode 100644 index 0000000..74bacc4 Binary files /dev/null and b/src/siu/www/img/logo.png differ diff --git a/src/siu/www/img/logo2.png b/src/siu/www/img/logo2.png new file mode 100644 index 0000000..9a99186 Binary files /dev/null and b/src/siu/www/img/logo2.png differ diff --git a/src/siu/www/img/logo_ministerio.jpg b/src/siu/www/img/logo_ministerio.jpg new file mode 100644 index 0000000..285c5f9 Binary files /dev/null and b/src/siu/www/img/logo_ministerio.jpg differ diff --git a/src/siu/www/img/logo_pers.jpg b/src/siu/www/img/logo_pers.jpg new file mode 100644 index 0000000..244d592 Binary files /dev/null and b/src/siu/www/img/logo_pers.jpg differ diff --git a/src/siu/www/img/logo_pers.png b/src/siu/www/img/logo_pers.png new file mode 100644 index 0000000..1b530ef Binary files /dev/null and b/src/siu/www/img/logo_pers.png differ diff --git a/src/siu/www/img/memory.png b/src/siu/www/img/memory.png new file mode 100644 index 0000000..65d3e58 Binary files /dev/null and b/src/siu/www/img/memory.png differ diff --git a/src/siu/www/img/navigator.png b/src/siu/www/img/navigator.png new file mode 100644 index 0000000..2731a9d Binary files /dev/null and b/src/siu/www/img/navigator.png differ diff --git a/src/siu/www/img/newwindow.png b/src/siu/www/img/newwindow.png new file mode 100644 index 0000000..8bfc874 Binary files /dev/null and b/src/siu/www/img/newwindow.png differ 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 0000000..9c7f8de Binary files /dev/null and b/src/siu/www/img/nro_de_tramite_dni.jpeg differ diff --git a/src/siu/www/img/php.png b/src/siu/www/img/php.png new file mode 100644 index 0000000..a69e36a Binary files /dev/null and b/src/siu/www/img/php.png differ diff --git a/src/siu/www/img/seleccion.png b/src/siu/www/img/seleccion.png new file mode 100644 index 0000000..ee16777 Binary files /dev/null and b/src/siu/www/img/seleccion.png differ diff --git a/src/siu/www/img/sprite.png b/src/siu/www/img/sprite.png new file mode 100644 index 0000000..c783822 Binary files /dev/null and b/src/siu/www/img/sprite.png differ diff --git a/src/siu/www/img/squares.png b/src/siu/www/img/squares.png new file mode 100644 index 0000000..bfefd8a Binary files /dev/null and b/src/siu/www/img/squares.png differ diff --git a/src/siu/www/img/time.png b/src/siu/www/img/time.png new file mode 100644 index 0000000..60e16f8 Binary files /dev/null and b/src/siu/www/img/time.png differ diff --git a/src/siu/www/img/tray-active.gif b/src/siu/www/img/tray-active.gif new file mode 100644 index 0000000..d68c11c Binary files /dev/null and b/src/siu/www/img/tray-active.gif differ diff --git a/src/siu/www/img/tray-hover.gif b/src/siu/www/img/tray-hover.gif new file mode 100644 index 0000000..d83d8b9 Binary files /dev/null and b/src/siu/www/img/tray-hover.gif differ diff --git a/src/siu/www/img/tray-separator.gif b/src/siu/www/img/tray-separator.gif new file mode 100644 index 0000000..994e66b Binary files /dev/null and b/src/siu/www/img/tray-separator.gif differ diff --git a/src/siu/www/img/tray.gif b/src/siu/www/img/tray.gif new file mode 100644 index 0000000..99b3b94 Binary files /dev/null and b/src/siu/www/img/tray.gif differ diff --git a/src/siu/www/img/triangle-down.png b/src/siu/www/img/triangle-down.png new file mode 100644 index 0000000..04b1ab2 Binary files /dev/null and b/src/siu/www/img/triangle-down.png differ diff --git a/src/siu/www/img/triangle-up.png b/src/siu/www/img/triangle-up.png new file mode 100644 index 0000000..bc497f6 Binary files /dev/null and b/src/siu/www/img/triangle-up.png differ 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 0000000..8a43092 Binary files /dev/null and b/src/siu/www/img/ui/ui-bg_glass_75_d0e5f5_1x400.png differ 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 0000000..6ea95f7 Binary files /dev/null and b/src/siu/www/img/ui/ui-bg_glass_85_dfeffc_1x400.png differ 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 0000000..a50c3e4 Binary files /dev/null and b/src/siu/www/img/ui/ui-bg_glass_95_fef1ec_1x400.png differ 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 0000000..f83ca28 Binary files /dev/null and b/src/siu/www/img/ui/ui-bg_gloss-wave_55_5c9ccc_500x100.png differ diff --git a/src/siu/www/img/ui/ui-bg_inset-hard_100_f5f8f9_1x100.png b/src/siu/www/img/ui/ui-bg_inset-hard_100_f5f8f9_1x100.png new file mode 100644 index 0000000..f8993f0 Binary files /dev/null and b/src/siu/www/img/ui/ui-bg_inset-hard_100_f5f8f9_1x100.png differ diff --git a/src/siu/www/img/ui/ui-bg_inset-hard_100_fcfdfd_1x100.png b/src/siu/www/img/ui/ui-bg_inset-hard_100_fcfdfd_1x100.png new file mode 100644 index 0000000..33084ff Binary files /dev/null and b/src/siu/www/img/ui/ui-bg_inset-hard_100_fcfdfd_1x100.png differ diff --git a/src/siu/www/img/ui/ui-icons_217bc0_256x240.png b/src/siu/www/img/ui/ui-icons_217bc0_256x240.png new file mode 100644 index 0000000..76d0a8a Binary files /dev/null and b/src/siu/www/img/ui/ui-icons_217bc0_256x240.png differ diff --git a/src/siu/www/img/ui/ui-icons_2e83ff_256x240.png b/src/siu/www/img/ui/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000..25f6564 Binary files /dev/null and b/src/siu/www/img/ui/ui-icons_2e83ff_256x240.png differ diff --git a/src/siu/www/img/ui/ui-icons_469bdd_256x240.png b/src/siu/www/img/ui/ui-icons_469bdd_256x240.png new file mode 100644 index 0000000..f4e97fb Binary files /dev/null and b/src/siu/www/img/ui/ui-icons_469bdd_256x240.png differ 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 0000000..6dc3bd9 Binary files /dev/null and b/src/siu/www/img/ui/ui-icons_6da8d5_256x240.png differ 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 0000000..d9fd828 Binary files /dev/null and b/src/siu/www/img/ui/ui-icons_cd0a0a_256x240.png differ 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 0000000..dc51ac6 Binary files /dev/null and b/src/siu/www/img/ui/ui-icons_d8e7f3_256x240.png differ diff --git a/src/siu/www/img/ui/ui-icons_f9bd01_256x240.png b/src/siu/www/img/ui/ui-icons_f9bd01_256x240.png new file mode 100644 index 0000000..9c752fe Binary files /dev/null and b/src/siu/www/img/ui/ui-icons_f9bd01_256x240.png differ diff --git a/src/siu/www/img/white_arrow.png b/src/siu/www/img/white_arrow.png new file mode 100644 index 0000000..6617523 Binary files /dev/null and b/src/siu/www/img/white_arrow.png differ 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 = $('