-- -- Name: vga_datos_censales; Type: TYPE; Schema: public; Owner: - -- CREATE TYPE vga_datos_censales AS ( unidad_academica character varying(5), nro_inscripcion character varying(10), apellido character varying(30), nombre character varying(30), fecha_nacimiento date, nacionalidad integer, loc_nacim integer, sexo character(1), tipo_documento smallint, nro_documento character varying(15), nro_cuil_cuit character varying(15), tipo_de_visa character varying(20), residencia character(1), fecha_visa date, vencimiento_visa date, calle character varying(50), numero character varying(10), piso character varying(3), depto character varying(5), barrio character varying(60), localidad_act integer, codigo_postal character varying(12), telefono_fijo character varying(20), telefono_celular character varying(20), email character varying(50), estado_civil integer, cantidad_hijos smallint, fue_beneficiario_beca character(1), fuente_beca character(1), fuente_financiamiento integer, con_quien_vive integer, cond_act_laboral integer, cant_hs_trabajo smallint, relacion_trabajo character(1), parentesco integer, apellido_familiar character varying(30), nombre_familiar character varying(30), nivel_educ_fam integer, padre_vive character(1), madre_vive character(1), cobertura_salud character(1), tipo_cobertura integer ); -- -- Name: sp_datos_iniciales_desde_guarani(integer, numeric, integer); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION sp_datos_iniciales_desde_guarani(integer, character varying, integer) RETURNS smallint AS $BODY$ DECLARE ai_tipo_doc ALIAS FOR $1; an_nro_doc ALIAS FOR $2; ai_solicitud ALIAS FOR $3; li_cnt INT4; BEGIN -- INSERTO EN DATOS PERSONALES ACTUALES INSERT INTO sbc_datos_personales_actuales(solicitud, id_localidad, calle, altura, piso, depto, barrio, codigo_postal, telefono_fijo, telefono_celular, email, tiene_hijos, cnt_hijos, estado_civil) SELECT ai_solicitud, pa.id_localidad, pa.calle, pa.altura::int4, pa.piso, pa.depto, pa.barrio, pa.codigo_postal, pa.telefono_fijo, pa.telefono_celular, pa.email, pa.tiene_hijos, pa.cnt_hijos, pa.estado_civil FROM vga_datos_personales_actuales pa, vga_personas p, vga_fuentes_datos fd WHERE pa.id_persona = p.id_persona AND p.tipo_documento = ai_tipo_doc AND p.nro_documento = an_nro_doc AND fd.id_fuente_datos = pa.id_fuente_datos ORDER BY fd.fecha_incorporacion DESC LIMIT 1; -- INSERTO EN DATOS DE SALUD INSERT INTO sbc_datos_salud (solicitud, problemas_salud, erogacion_problemas_salud, cobertura_salud, tipo_cobertura) SELECT ai_solicitud, ds.problemas_salud, ds.erogacion_problemas_salud, ds.cobertura_salud, ds.tipo_cobertura FROM vga_datos_salud ds, vga_personas p, vga_fuentes_datos fd WHERE ds.id_persona = p.id_persona AND p.tipo_documento = ai_tipo_doc AND p.nro_documento = an_nro_doc AND fd.id_fuente_datos = ds.id_fuente_datos ORDER BY fd.fecha_incorporacion DESC LIMIT 1; -- INSERTO EN DATOS DE SALUD - DISCAPACIDADES INSERT INTO sbc_datos_salud_discapacidades (solicitud, tipo_discapacidad, caracter_discapacidad, grado_discapacidad) SELECT ai_solicitud, dd.tipo_discapacidad, dd.caracter_discapacidad, dd.grado_discapacidad FROM vga_datos_salud_discapacidades dd, vga_personas p, vga_fuentes_datos fd WHERE dd.id_persona = p.id_persona AND p.tipo_documento = ai_tipo_doc AND p.nro_documento = an_nro_doc AND fd.id_fuente_datos = dd.id_fuente_datos AND fd.fecha_incorporacion IN (SELECT MAX(fd.fecha_incorporacion) FROM vga_datos_salud_discapacidades dd, vga_personas p, vga_fuentes_datos fd WHERE dd.id_persona = p.id_persona AND p.tipo_documento = ai_tipo_doc AND p.nro_documento = an_nro_doc AND fd.id_fuente_datos = dd.id_fuente_datos); -- INSERTO EN DATOS LABORALES INSERT INTO sbc_datos_laborales (solicitud, cnt_hs_trabajo, relacion_trabajo_est, tipo_perfil, actividad) SELECT ai_solicitud, dl.cnt_hs_trabajo, dl.relacion_trabajo_est, dl.tipo_perfil, dl.actividad FROM vga_datos_laborales dl, vga_personas p, vga_fuentes_datos fd WHERE dl.id_persona = p.id_persona AND p.tipo_documento = ai_tipo_doc AND p.nro_documento = an_nro_doc AND fd.id_fuente_datos = dl.id_fuente_datos ORDER BY fd.fecha_incorporacion DESC LIMIT 1; -- INSERTO EN DATOS ECONOMICOS INSERT INTO sbc_datos_economicos (solicitud, otra_fuente, forma_vivir, fuente_financiamiento) SELECT ai_solicitud, de.otra_fuente, de.forma_vivir, de.fuente_financiamiento FROM vga_datos_economicos de, vga_personas p, vga_fuentes_datos fd WHERE de.id_persona = p.id_persona AND p.tipo_documento = ai_tipo_doc AND p.nro_documento = an_nro_doc AND fd.id_fuente_datos = de.id_fuente_datos ORDER BY fd.fecha_incorporacion DESC LIMIT 1; -- INSERTO EN DATOS PERSONALES GRP FAMILIARES INSERT INTO sbc_datos_personales_grp_fam (solicitud, apellido, nombre, nivel_educacion, parentesco) SELECT ai_solicitud, df.apellido_familiar, df.nombre_familiar, df.nivel_educ_fam, df.parentesco FROM vga_datos_personales_grp_fam df, vga_personas p, vga_fuentes_datos fd WHERE df.id_persona = p.id_persona AND p.tipo_documento = ai_tipo_doc AND p.nro_documento = an_nro_doc AND fd.id_fuente_datos = df.id_fuente_datos AND fd.fecha_incorporacion IN (SELECT max(fd.fecha_incorporacion) FROM vga_datos_personales_grp_fam df, vga_personas p, vga_fuentes_datos fd WHERE df.id_persona = p.id_persona AND p.tipo_documento = ai_tipo_doc AND p.nro_documento = an_nro_doc AND fd.id_fuente_datos = df.id_fuente_datos); -- INSERTO EN LA CABECERA DE DATOS PERSONALES GRP FAMILIARES SELECT COUNT(*) INTO li_cnt FROM sbc_datos_personales_grp_fam WHERE solicitud = ai_solicitud; INSERT INTO sbc_cabecera_grp_fam (solicitud, cnt_personas_grp_fam) VALUES (ai_solicitud, li_cnt); -- INSERTO EN DATOS DE BECAS Y PASANTIAS INSERT INTO sbc_datos_becas_pasantias (solicitud, beneficiario_beca, pasantias, f_fin_pasantia, rentada) SELECT ai_solicitud, db.beneficiario_beca, db.pasantias, db.f_fin_pasantia, db.rentada FROM vga_datos_becas_pasantias db, vga_personas p, vga_fuentes_datos fd WHERE db.id_persona = p.id_persona AND p.tipo_documento = ai_tipo_doc AND p.nro_documento = an_nro_doc AND fd.id_fuente_datos = db.id_fuente_datos ORDER BY fd.fecha_incorporacion DESC LIMIT 1; -- INSERTO EN DATOS DE BECAS ANTERIORES INSERT INTO sbc_datos_beca_anteriores (solicitud, tipo_beca, tipo_beca_economica, fuente_beca, anio, monto) SELECT ai_solicitud, dp.tipo_beca, dp.tipo_beca_economica, dp.fuente_beca, dp.anio, dp.monto FROM vga_datos_beca_anteriores dp, vga_personas p, vga_fuentes_datos fd WHERE dp.id_persona = p.id_persona AND p.tipo_documento = ai_tipo_doc AND p.nro_documento = an_nro_doc AND fd.id_fuente_datos = dp.id_fuente_datos AND fd.fecha_incorporacion IN (SELECT MAX(fd.fecha_incorporacion) FROM vga_datos_beca_anteriores dp, vga_personas p, vga_fuentes_datos fd WHERE dp.id_persona = p.id_persona AND p.tipo_documento = ai_tipo_doc AND p.nro_documento = an_nro_doc AND fd.id_fuente_datos = dp.id_fuente_datos); return 1; END; $BODY$ LANGUAGE plpgsql; -- -- Name: sp_datos_iniciales_desde_solicitud(integer, numeric, integer, integer); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION sp_datos_iniciales_desde_solicitud(integer, character varying, integer, integer) RETURNS smallint AS $BODY$ DECLARE ai_tipo_doc ALIAS FOR $1; an_nro_doc ALIAS FOR $2; ai_solicitud ALIAS FOR $3; ai_solic_version ALIAS FOR $4; li_cnt INT4; BEGIN -- Tabla sbc_datos_becas_pasantias INSERT INTO sbc_datos_becas_pasantias (solicitud, beneficiario_beca, pasantias, f_fin_pasantia, rentada) SELECT ai_solicitud, beneficiario_beca, pasantias, f_fin_pasantia, rentada FROM sbc_datos_becas_pasantias WHERE solicitud = ai_solic_version; -- Tabla sbc_datos_beca_anteriores INSERT INTO sbc_datos_beca_anteriores (solicitud, tipo_beca, tipo_beca_economica, fuente_beca, anio, monto) SELECT ai_solicitud, tipo_beca, tipo_beca_economica, fuente_beca, anio, monto FROM sbc_datos_beca_anteriores WHERE solicitud = ai_solic_version; -- Tabla sbc_datos_laborales INSERT INTO sbc_datos_laborales (solicitud, actividad, tipo_perfil, actividad_no_laboral, desc_jubilatorio, empresa_familiar, recibe_pago, cnt_hs_trabajo, monto_mensual, tipo_ocup_laboral, relacion_trabajo_est) SELECT ai_solicitud, actividad, tipo_perfil, actividad_no_laboral, desc_jubilatorio, empresa_familiar, recibe_pago, cnt_hs_trabajo, monto_mensual, tipo_ocup_laboral, relacion_trabajo_est FROM sbc_datos_laborales WHERE solicitud = ai_solic_version; -- Tabla sbc_datos_salud INSERT INTO sbc_datos_salud (solicitud, problemas_salud, cobertura_salud, tipo_cobertura) SELECT ai_solicitud, problemas_salud, cobertura_salud, tipo_cobertura FROM sbc_datos_salud WHERE solicitud = ai_solic_version; -- Tabla sbc_datos_salud_discapacidades INSERT INTO sbc_datos_salud_discapacidades (solicitud, tipo_discapacidad, caracter_discapacidad, grado_discapacidad) SELECT ai_solicitud, tipo_discapacidad, caracter_discapacidad, grado_discapacidad FROM sbc_datos_salud_discapacidades WHERE solicitud = ai_solic_version; -- Tabla sbc_cabecera_grp_fam INSERT INTO sbc_cabecera_grp_fam (solicitud, padre_vive, madre_vive, cnt_personas_grp_fam) SELECT ai_solicitud, padre_vive, madre_vive, cnt_personas_grp_fam FROM sbc_cabecera_grp_fam WHERE solicitud = ai_solic_version; -- Tabla sbc_datos_personales_grp_fam INSERT INTO sbc_datos_personales_grp_fam (solicitud, persona_familiar, parentesco, apellido, nombre, edad, nacionalidad, sexo, nivel_educacion, situacion, tipo_establecimiento, profesion, cond_actividad_laboral, tipo_perfil, cnt_hs_trabaja, rango_ingresos, convive_grupo, no_trabaja, estado_civil) SELECT ai_solicitud, persona_familiar, parentesco, apellido, nombre, edad, nacionalidad, sexo, nivel_educacion, situacion, tipo_establecimiento, profesion, cond_actividad_laboral, tipo_perfil, cnt_hs_trabaja, rango_ingresos, convive_grupo, no_trabaja, estado_civil FROM sbc_datos_personales_grp_fam WHERE solicitud = ai_solic_version; -- Tabla sbc_datos_pers_grp_fam_discap INSERT INTO sbc_datos_pers_grp_fam_discap (solicitud, persona_familiar, tipo_discapacidad, caracter_discapacidad, grado_discapacidad) SELECT ai_solicitud, persona_familiar, tipo_discapacidad, caracter_discapacidad, grado_discapacidad FROM sbc_datos_pers_grp_fam_discap WHERE solicitud = ai_solic_version; -- Tabla sbc_datos_economicos INSERT INTO sbc_datos_economicos (solicitud, otra_fuente, forma_vivir, tipo_transporte, tipo_vivienda, cnt_pers_vivienda, cnt_ambientes, zona_vivienda, gas, luz, cloacas, agua, tipo_locacion, monto_total_alquiler, costo_agua, costo_abl, costo_luz, costo_expensas, costo_telefonico, costo_automotor, costo_inmobiliario, costo_internet, costo_tv, costo_transporte, aporte_personal_total_egresos, costo_gas) SELECT ai_solicitud, otra_fuente, forma_vivir, tipo_transporte, tipo_vivienda, cnt_pers_vivienda, cnt_ambientes, zona_vivienda, gas, luz, cloacas, agua, tipo_locacion, monto_total_alquiler, costo_agua, costo_abl, costo_luz, costo_expensas, costo_telefonico, costo_automotor, costo_inmobiliario, costo_internet, costo_tv, costo_transporte, aporte_personal_total_egresos, costo_gas FROM sbc_datos_economicos WHERE solicitud = ai_solic_version; -- Tabla sbc_financiamiento_solicitud INSERT INTO sbc_financiamiento_solicitud (solicitud, fuente_financiamiento) SELECT ai_solicitud, fuente_financiamiento FROM sbc_financiamiento_solicitud WHERE solicitud = ai_solic_version; -- Tabla sbc_datos_grupo_familiar INSERT INTO sbc_datos_grupo_familiar (solicitud, calle, altura, piso, depto, barrio, id_localidad, cp, codigo_area, telefono) SELECT ai_solicitud, calle, altura, piso, depto, barrio, id_localidad, cp, codigo_area, telefono FROM sbc_datos_grupo_familiar WHERE solicitud = ai_solic_version; -- Tabla sbc_vivienda_solicitud INSERT INTO sbc_vivienda_solicitud (solicitud, tipo_vivienda, tipo_locacion, cant_ambientes, cant_personas, descripcion_otra, zona_vivienda) SELECT ai_solicitud, tipo_vivienda, tipo_locacion, cant_ambientes, cant_personas, descripcion_otra, zona_vivienda FROM sbc_vivienda_solicitud WHERE solicitud = ai_solic_version; -- Tabla sbc_vehiculo_solicitud INSERT INTO sbc_vehiculo_solicitud (solicitud, tipo_vehiculo, tipo_uso_vehiculo, anio, marca, modelo) SELECT ai_solicitud, tipo_vehiculo, tipo_uso_vehiculo, anio, marca, modelo FROM sbc_vehiculo_solicitud WHERE solicitud = ai_solic_version; -- Tabla de sbc_datos_personales_actuales INSERT INTO sbc_datos_personales_actuales (solicitud, calle, altura, piso, depto, barrio, id_localidad, codigo_postal, distancia_sede, codigo_area, telefono_fijo, telefono_celular, email, estado_civil, tiene_hijos, cnt_hijos) SELECT ai_solicitud, calle, altura, piso, depto, barrio, id_localidad, codigo_postal, distancia_sede, codigo_area, telefono_fijo, telefono_celular, email, estado_civil, tiene_hijos, cnt_hijos FROM sbc_datos_personales_actuales WHERE solicitud = ai_solic_version; -- Tabla sbc_datos_academicos INSERT INTO sbc_datos_academicos (solicitud, libreta_univ, anio_ingreso_carrera, cnt_anios_carrera, tipo_duracion_carrera, cnt_periodo_duracion, cnt_materias_total, anio_primer_materia, anio_cursa, cnt_materias_a_cursar, cnt_materias_hab_cursar, cnt_mat_aprob, cnt_mat_aprob_pe, cnt_mat_a_aprob_pe, cnt_mat_na_aprob_pe_na, cnt_mat_reg, cnt_mat_reg_pe, cnt_mat_a_reg_pe, cnt_mat_na_reg_pe, cnt_hs_catedra_regularizadas, promedio_univ_ca, promedio_univ_sa, porc_aprob_carrera, otros_estudios_curso, desc_otro_estudio, unidad_acad, carrera) SELECT ai_solicitud, libreta_univ, anio_ingreso_carrera, cnt_anios_carrera, tipo_duracion_carrera, cnt_periodo_duracion, cnt_materias_total, anio_primer_materia, anio_cursa, cnt_materias_a_cursar, cnt_materias_hab_cursar, cnt_mat_aprob, cnt_mat_aprob_pe, cnt_mat_a_aprob_pe, cnt_mat_na_aprob_pe_na, cnt_mat_reg, cnt_mat_reg_pe, cnt_mat_a_reg_pe, cnt_mat_na_reg_pe, cnt_hs_catedra_regularizadas, promedio_univ_ca, promedio_univ_sa, porc_aprob_carrera, otros_estudios_curso, desc_otro_estudio, unidad_acad, carrera FROM sbc_datos_academicos WHERE solicitud = ai_solic_version; return 1; END; $BODY$ LANGUAGE plpgsql; -- -- Name: sp_generarcopia(integer, character varying); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION sp_generarcopia(integer, character varying) RETURNS smallint AS $_$ DECLARE ai_solicitud ALIAS FOR $1; as_usuario ALIAS FOR $2; li_nueva_solic int4; li_version int4; BEGIN -- Saco el valor del proximo registro a insertar en la tabla solicitud a traves de la secuencia SELECT NEXTVAL('sbc_solicitud_solicitud_seq') INTO li_nueva_solic; -- Saco el nro de version SELECT MAX(version) INTO li_version FROM sbc_solicitud WHERE solicitud_original = ai_solicitud; IF NOT FOUND OR li_version IS NULL THEN li_version := 1; END IF; -- Ahora lo inserto en la tabla INSERT INTO sbc_solicitud (solicitud, persona, convocatoria, estado_solicitud, observaciones, version, f_version, usuario, solicitud_original) SELECT li_nueva_solic, solic.persona, solic.convocatoria, solic.estado_solicitud, solic.observaciones, li_version, CURRENT_DATE, as_usuario, ai_solicitud FROM sbc_solicitud as solic WHERE solicitud = ai_solicitud; return 1; END; $_$ LANGUAGE plpgsql; -- -- Name: sp_generarcopia(integer, integer, character varying); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION sp_generarcopia(integer, integer, character varying) RETURNS smallint AS $_$ DECLARE ai_solicitud ALIAS FOR $1; ai_convocatoria ALIAS FOR $2; as_usuario ALIAS FOR $3; li_nueva_solic int4; li_version int4; BEGIN -- Saco el valor del proximo registro a insertar en la tabla solicitud a traves de la secuencia SELECT NEXTVAL('sbc_solicitud_solicitud_seq') INTO li_nueva_solic; -- Saco el nro de version SELECT MAX(version) INTO li_version FROM sbc_solicitud WHERE solicitud_original = ai_solicitud; IF NOT FOUND OR li_version IS NULL THEN li_version := 1; ELSE li_version := li_version + 1; END IF; -- --------------------------------------------------------------------------------------- -- TENGO QUE INSERTAR EN TODAS LAS TABLAS DEL MODELO -- --------------------------------------------------------------------------------------- -- Tabla de solicitudes INSERT INTO sbc_solicitud (solicitud, persona, convocatoria, estado_solicitud, observaciones, version, f_version, usuario, solicitud_original) SELECT li_nueva_solic, solic.persona, solic.convocatoria, solic.estado_solicitud, solic.observaciones, li_version, CURRENT_DATE, as_usuario, ai_solicitud FROM sbc_solicitud as solic WHERE solicitud = ai_solicitud; -- Tabla de sbc_solicitudes_beca INSERT INTO sbc_solicitudes_becas (convocatoria, tipo_beca, solicitud) SELECT ai_convocatoria, tipo_beca, li_nueva_solic FROM sbc_solicitudes_becas WHERE solicitud = ai_solicitud; -- Tabla de sbc_evaluacion_solicitudes. -- En la nueva version las solicitudes deben estar SIN evaluar, por ello en la modificacion de una -- solicitud se genera una copia de estos datos, pero luego para no generar errores de FK, estas -- evaluaciones 'viejas' se eliminan en codigo. INSERT INTO sbc_evaluacion_solicitudes (convocatoria, tipo_beca, solicitud, version, tipo_evaluacion, observacion_evaluacion, estado_actual, f_beneficio) SELECT ai_convocatoria, tipo_beca, li_nueva_solic, li_version, tipo_evaluacion, observacion_evaluacion, estado_actual, f_beneficio FROM sbc_evaluacion_solicitudes WHERE solicitud = ai_solicitud; -- Tabla de sbc_estado_solicitudes. -- Se realiza una copia de esta tabla y se quita el trigger que disparaba la misma al hacer un insert INSERT INTO sbc_estado_solicitudes (convocatoria, tipo_beca, solicitud, version, estado, motivo, fecha, f_cambio_real) SELECT ai_convocatoria, tipo_beca, li_nueva_solic, li_version, estado, motivo, fecha, f_cambio_real FROM sbc_estado_solicitudes WHERE solicitud = ai_solicitud; -- Tabla de sbc_datos_personales_actuales INSERT INTO sbc_datos_personales_actuales (solicitud, calle, altura, piso, depto, barrio, id_localidad, codigo_postal, distancia_sede, codigo_area, telefono_fijo, telefono_celular, email, estado_civil, tiene_hijos, cnt_hijos) SELECT li_nueva_solic, calle, altura, piso, depto, barrio, id_localidad, codigo_postal, distancia_sede, codigo_area, telefono_fijo, telefono_celular, email, estado_civil, tiene_hijos, cnt_hijos FROM sbc_datos_personales_actuales WHERE solicitud = ai_solicitud; -- Tabla sbc_datos_tutor INSERT INTO sbc_datos_tutor (solicitud, apellido_tutor, nombre_tutor, tipo_documento_tutor, nro_documento_tutor, f_nacimiento_tutor, sexo_tutor, cuil_tutor) SELECT li_nueva_solic, apellido_tutor, nombre_tutor, tipo_documento_tutor, nro_documento_tutor, f_nacimiento_tutor, sexo_tutor, cuil_tutor FROM sbc_datos_tutor WHERE solicitud = ai_solicitud; -- Tabla sbc_datos_academicos INSERT INTO sbc_datos_academicos (solicitud, libreta_univ, anio_ingreso_carrera, cnt_anios_carrera, tipo_duracion_carrera, cnt_periodo_duracion, cnt_materias_total, anio_primer_materia, anio_cursa, cnt_materias_a_cursar, cnt_materias_hab_cursar, cnt_mat_aprob, cnt_mat_aprob_pe, cnt_mat_a_aprob_pe, cnt_mat_na_aprob_pe_na, cnt_mat_reg, cnt_mat_reg_pe, cnt_mat_a_reg_pe, cnt_mat_na_reg_pe, cnt_hs_catedra_regularizadas, promedio_univ_ca, promedio_univ_sa, porc_aprob_carrera, otros_estudios_curso, desc_otro_estudio, unidad_acad, carrera) SELECT li_nueva_solic, libreta_univ, anio_ingreso_carrera, cnt_anios_carrera, tipo_duracion_carrera, cnt_periodo_duracion, cnt_materias_total, anio_primer_materia, anio_cursa, cnt_materias_a_cursar, cnt_materias_hab_cursar, cnt_mat_aprob, cnt_mat_aprob_pe, cnt_mat_a_aprob_pe, cnt_mat_na_aprob_pe_na, cnt_mat_reg, cnt_mat_reg_pe, cnt_mat_a_reg_pe, cnt_mat_na_reg_pe, cnt_hs_catedra_regularizadas, promedio_univ_ca, promedio_univ_sa, porc_aprob_carrera, otros_estudios_curso, desc_otro_estudio, unidad_acad, carrera FROM sbc_datos_academicos WHERE solicitud = ai_solicitud; -- Tabla sbc_datos_becas_pasantias INSERT INTO sbc_datos_becas_pasantias (solicitud, beneficiario_beca, pasantias, f_fin_pasantia, rentada) SELECT li_nueva_solic, beneficiario_beca, pasantias, f_fin_pasantia, rentada FROM sbc_datos_becas_pasantias WHERE solicitud = ai_solicitud; -- Tabla sbc_datos_beca_anteriores INSERT INTO sbc_datos_beca_anteriores (solicitud, tipo_beca, tipo_beca_economica, fuente_beca, anio, monto) SELECT li_nueva_solic, tipo_beca, tipo_beca_economica, fuente_beca, anio, monto FROM sbc_datos_beca_anteriores WHERE solicitud = ai_solicitud; -- Tabla sbc_datos_laborales INSERT INTO sbc_datos_laborales (solicitud, actividad, tipo_perfil, actividad_no_laboral, desc_jubilatorio, empresa_familiar, recibe_pago, cnt_hs_trabajo, monto_mensual, tipo_ocup_laboral, relacion_trabajo_est) SELECT li_nueva_solic, actividad, tipo_perfil, actividad_no_laboral, desc_jubilatorio, empresa_familiar, recibe_pago, cnt_hs_trabajo, monto_mensual, tipo_ocup_laboral, relacion_trabajo_est FROM sbc_datos_laborales WHERE solicitud = ai_solicitud; -- Tabla sbc_datos_salud INSERT INTO sbc_datos_salud (solicitud, problemas_salud, erogacion_problemas_salud, cobertura_salud, tipo_cobertura) SELECT li_nueva_solic, problemas_salud, erogacion_problemas_salud, cobertura_salud, tipo_cobertura FROM sbc_datos_salud WHERE solicitud = ai_solicitud; -- Tabla sbc_datos_salud_discapacidades INSERT INTO sbc_datos_salud_discapacidades (solicitud, tipo_discapacidad, caracter_discapacidad, grado_discapacidad) SELECT li_nueva_solic, tipo_discapacidad, caracter_discapacidad, grado_discapacidad FROM sbc_datos_salud_discapacidades WHERE solicitud = ai_solicitud; -- Tabla sbc_cabecera_grp_fam INSERT INTO sbc_cabecera_grp_fam (solicitud, madre_vive, padre_vive) SELECT li_nueva_solic, madre_vive, padre_vive FROM sbc_cabecera_grp_fam WHERE solicitud = ai_solicitud; -- Tabla sbc_datos_personales_grp_fam INSERT INTO sbc_datos_personales_grp_fam (solicitud, persona_familiar, parentesco, apellido, nombre, edad, nacionalidad, sexo, erogaciones_problema_salud, nivel_educacion, situacion, tipo_establecimiento, profesion, cond_actividad_laboral, tipo_perfil, cnt_hs_trabaja, ingresos_mensuales, rango_ingresos, convive_grupo, aporte_grupo, no_trabaja, estado_civil) SELECT li_nueva_solic, persona_familiar, parentesco, apellido, nombre, edad, nacionalidad, sexo, erogaciones_problema_salud, nivel_educacion, situacion, tipo_establecimiento, profesion, cond_actividad_laboral, tipo_perfil, cnt_hs_trabaja, ingresos_mensuales, rango_ingresos, convive_grupo, aporte_grupo, no_trabaja, estado_civil FROM sbc_datos_personales_grp_fam WHERE solicitud = ai_solicitud; -- Tabla sbc_datos_pers_grp_fam_discap INSERT INTO sbc_datos_pers_grp_fam_discap (solicitud, persona_familiar, tipo_discapacidad, caracter_discapacidad, grado_discapacidad) SELECT li_nueva_solic, persona_familiar, tipo_discapacidad, caracter_discapacidad, grado_discapacidad FROM sbc_datos_pers_grp_fam_discap WHERE solicitud = ai_solicitud; -- Tabla sbc_datos_economicos INSERT INTO sbc_datos_economicos (solicitud, otra_fuente, forma_vivir, tipo_transporte, tipo_vivienda, cnt_pers_vivienda, cnt_ambientes, zona_vivienda, gas, luz, cloacas, agua, tipo_locacion, monto_total_alquiler, costo_agua, costo_abl, costo_luz, costo_expensas, costo_telefonico, costo_automotor, costo_inmobiliario, costo_internet, costo_tv, costo_transporte, aporte_personal_total_egresos, costo_gas) SELECT li_nueva_solic, otra_fuente, forma_vivir, tipo_transporte, tipo_vivienda, cnt_pers_vivienda, cnt_ambientes, zona_vivienda, gas, luz, cloacas, agua, tipo_locacion, monto_total_alquiler, costo_agua, costo_abl, costo_luz, costo_expensas, costo_telefonico, costo_automotor, costo_inmobiliario, costo_internet, costo_tv, costo_transporte, aporte_personal_total_egresos, costo_gas FROM sbc_datos_economicos WHERE solicitud = ai_solicitud; -- Tabla sbc_financiamiento_solicitud INSERT INTO sbc_financiamiento_solicitud (solicitud, fuente_financiamiento) SELECT li_nueva_solic, fuente_financiamiento FROM sbc_financiamiento_solicitud WHERE solicitud = ai_solicitud; -- Tabla sbc_datos_grupo_familiar INSERT INTO sbc_datos_grupo_familiar (solicitud, calle, altura, piso, depto, barrio, id_localidad, cp, codigo_area, telefono, beca_ayuda_eco, ing_extras_hogar, gasto_luz, gasto_agua, gasto_gas, gasto_expensas, gasto_otros, gasto_telefono, gasto_abl, impuesto_automotor, impuesto_inmobiliario, gasto_internet, gasto_tv, gasto_univ_col, gasto_cobertura_medica) SELECT li_nueva_solic, calle, altura, piso, depto, barrio, id_localidad, cp, codigo_area, telefono, beca_ayuda_eco, ing_extras_hogar, gasto_luz, gasto_agua, gasto_gas, gasto_expensas, gasto_otros, gasto_telefono, gasto_abl, impuesto_automotor, impuesto_inmobiliario, gasto_internet, gasto_tv, gasto_univ_col, gasto_cobertura_medica FROM sbc_datos_grupo_familiar WHERE solicitud = ai_solicitud; -- Tabla sbc_vivienda_solicitud INSERT INTO sbc_vivienda_solicitud (solicitud, tipo_vivienda, tipo_locacion, monto_locacion, cant_ambientes, cant_personas, descripcion_otra, zona_vivienda) SELECT li_nueva_solic, tipo_vivienda, tipo_locacion, monto_locacion, cant_ambientes, cant_personas, descripcion_otra, zona_vivienda FROM sbc_vivienda_solicitud WHERE solicitud = ai_solicitud; -- Tabla sbc_vehiculo_solicitud INSERT INTO sbc_vehiculo_solicitud (solicitud, tipo_vehiculo, tipo_uso_vehiculo, anio, marca, modelo) SELECT li_nueva_solic, tipo_vehiculo, tipo_uso_vehiculo, anio, marca, modelo FROM sbc_vehiculo_solicitud WHERE solicitud = ai_solicitud; return 1; END; $_$ LANGUAGE plpgsql; -- -- Name: sp_tai_sbc_estado_solicitudes(); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION sp_tai_sbc_estado_solicitudes() RETURNS "trigger" AS $$BEGIN -- Actualizo el campo en la tabla evaluaciones UPDATE sbc_evaluacion_solicitudes SET estado_actual = NEW.estado WHERE convocatoria = NEW.convocatoria AND solicitud = NEW.solicitud AND tipo_beca = NEW.tipo_beca AND version = NEW.version; RETURN NEW; END; $$ LANGUAGE plpgsql; -- -- Name: sp_tai_sbc_personales_actuales(); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION sp_tai_sbc_personales_actuales() RETURNS "trigger" AS $$ DECLARE ls_valor char(50); li_persona int4; BEGIN -- SACO LA PERSONA SELECT persona INTO li_persona FROM sbc_solicitud WHERE solicitud = NEW.solicitud ; -- VERIFICO QUE DATO TIENE EL ULTIMO MAIL EN LOS CONTACTOS SELECT valor INTO ls_valor FROM mdc_contactos WHERE persona = li_persona AND tipo_contacto = 1 ORDER BY fecha DESC LIMIT 1; IF NOT FOUND OR ls_valor <> NEW.email THEN INSERT INTO mdc_contactos (persona, tipo_contacto, fecha, origen, valor) VALUES (li_persona, 1, current_timestamp, 'SGB', NEW.email); END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; -- -- Name: sp_tai_sbc_solicitud(); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION sp_tai_sbc_solicitud() RETURNS trigger AS $BODY$ DECLARE li_cantidad int2; li_tipo_doc int4; li_nro_doc character varying(15); li_solic_v int4; li_res int2; BEGIN IF NEW.solicitud_original IS NOT NULL THEN return NULL; END IF; -- TENGO QUE SACAR QUE PERSONA ES LA QUE SE ESTA INCORPORANDO SELECT tipo_documento, nro_documento INTO li_tipo_doc, li_nro_doc FROM mdc_personas p WHERE p.persona = NEW.persona; -- VERIFICO SI PUEDO SACAR LOS DATOS DE GUARANI O DE UNA CONVOCATORIA PREVIA SELECT COUNT(*) INTO li_cantidad FROM vga_personas WHERE tipo_documento = li_tipo_doc AND nro_documento = li_nro_doc; IF li_cantidad = 0 THEN SELECT solicitud INTO li_solic_v FROM sbc_solicitud s, mdc_personas p WHERE s.persona = p.persona AND p.tipo_documento = li_tipo_doc AND p.nro_documento = li_nro_doc AND s.solicitud_original is NULL ORDER BY f_version DESC LIMIT 1; IF FOUND THEN li_res:= sp_datos_iniciales_desde_solicitud(li_tipo_doc, li_nro_doc, NEW.solicitud, li_solic_v); END IF; ELSE li_res:= sp_datos_iniciales_desde_guarani(li_tipo_doc, li_nro_doc, NEW.solicitud); END IF; RETURN NEW; END; $BODY$ LANGUAGE plpgsql; -- -- Name: sp_tbi_sbc_motivos_mod_solicitud_sol(); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION sp_tbi_sbc_motivos_mod_solicitud_sol() RETURNS "trigger" AS $$ DECLARE li_convocatoria int4; li_resul int2; BEGIN -- SACO EL NUMERO DE CONVOCATORIA SELECT convocatoria INTO li_convocatoria FROM sbc_solicitud WHERE solicitud = NEW.solicitud ; -- ------------------------------------------------------------- -- LLAMO A LA FUNCION QUE HACE LA NUEVA VERSION DE LA SOLICITUD -- ------------------------------------------------------------- li_resul := sp_generarCopia(NEW.solicitud, li_convocatoria, 'interno'); RETURN NEW; END; $$ LANGUAGE plpgsql; -- -- Name: sp_tbu_sbc_solicitud(); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION sp_tbu_sbc_solicitud() RETURNS "trigger" AS $$ DECLARE li_tipo_estado_n char(1); li_tipo_estado_o char(1); li_resul int2; BEGIN -- CONTROLO LOS VALORES QUE VA A GUARDAR SELECT tipo_estado INTO li_tipo_estado_n FROM sbc_estados_solicitud WHERE estado_solicitud = NEW.estado_solicitud ; SELECT tipo_estado INTO li_tipo_estado_o FROM sbc_estados_solicitud WHERE estado_solicitud = OLD.estado_solicitud ; -- -------------------------------------------------- -- DE ACUERDO AL ESTADO VERIFICO QUE HACER -- -------------------------------------------------- IF li_tipo_estado_n = 'I' AND li_tipo_estado_o = 'E' THEN li_resul := sp_generarCopia(NEW.solicitud, NEW.convocatoria, 'alumno'); END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; -- -- Name: sp_vga_actualizar_carreras(); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION sp_vga_actualizar_carreras() RETURNS boolean AS $$ DECLARE datos RECORD; idcarrera VARCHAR(10); ua VARCHAR(5); nuevo_estado CHAR(1); estado_ant CHAR(1); BEGIN FOR datos IN SELECT * FROM vga_temp_carreras LOOP --Determino el estado IF (datos.estado = 'A') OR (datos.estado = 'S') OR (datos.estado = 'N') THEN nuevo_estado := 'A'; ELSE nuevo_estado := 'B'; END IF; SELECT unidad_acad, carrera, estado INTO ua, idcarrera, estado_ant FROM sbc_carreras WHERE unidad_acad = datos.unidad_academica AND carrera = datos.carrera; --SI la carrera no existe la inserto IF (idcarrera ISNULL) AND (ua ISNULL) THEN INSERT INTO sbc_carreras (unidad_acad, carrera, nombre, nombre_reducido, estado) VALUES (datos.unidad_academica, datos.carrera, datos.nombre, datos.nombre_reducido, nuevo_estado); ELSE --Si existe, solo actualizo si cambio de estado. IF (estado_ant <> nuevo_estado) THEN UPDATE sbc_carreras SET nombre = datos.nombre, nombre_reducido = datos.nombre_reducido, estado = nuevo_estado WHERE unidad_acad = ua AND carrera = idcarrera; END IF; END IF; END LOOP; RETURN 't'; END; $$ LANGUAGE plpgsql; -- -- Name: sp_vga_actualizar_datos_persona(vga_datos_censales, integer, integer); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION sp_vga_actualizar_datos_persona(vga_datos_censales, integer, integer) RETURNS boolean AS $BODY$ DECLARE datos ALIAS FOR $1; idpersona ALIAS FOR $2; idfuente ALIAS FOR $3; tiene_h CHAR(1); t_visa CHAR(1); BEGIN --Actualizo los datos economicos UPDATE vga_datos_economicos SET fuente_financiamiento = datos.fuente_financiamiento, forma_vivir = datos.con_quien_vive WHERE id_persona = idpersona AND id_fuente_datos = idfuente; --Actualizo los datos laborales UPDATE vga_datos_laborales SET actividad = datos.cond_act_laboral, cnt_hs_trabajo = datos.cant_hs_trabajo, relacion_trabajo_est = datos.relacion_trabajo WHERE id_persona = idpersona AND id_fuente_datos = idfuente; --Actualizo los datos actuales de la persona IF (datos.cantidad_hijos > 0) THEN tiene_h := 'S'; ELSE tiene_h := 'N'; END IF; UPDATE vga_datos_personales_actuales SET calle = datos.calle, altura = datos.numero, piso = datos.piso, depto = datos.depto, barrio = datos.barrio, id_localidad = datos.localidad_act, telefono_fijo = datos.telefono_fijo, telefono_celular = datos.telefono_celular, email = datos.email, estado_civil = datos.estado_civil, tiene_hijos = tiene_h, cnt_hijos = datos.cantidad_hijos WHERE id_persona = idpersona AND id_fuente_datos = idfuente; -- Actualizo los datos de la visa t_visa := NULL; IF (datos.tipo_de_visa NOTNULL) THEN IF (trim(datos.tipo_de_visa) = 'PERMANENTE') THEN t_visa := 'P'; UPDATE vga_datos_visa_persona SET tipo_de_visa = t_visa, residencia = datos.residencia, fecha_visa = datos.fecha_visa, vencimiento = datos.vencimiento_visa WHERE id_persona = idpersona AND id_fuente_datos = idfuente; END IF; IF (trim(datos.tipo_de_visa) = 'PERMANENTE') THEN t_visa := 'T'; UPDATE vga_datos_visa_persona SET tipo_de_visa = t_visa, residencia = datos.residencia, fecha_visa = datos.fecha_visa, vencimiento = datos.vencimiento_visa WHERE id_persona = idpersona AND id_fuente_datos = idfuente; END IF; END IF; --Actualizo los datos del grupo familiar /*UPDATE vga_datos_personales_grp_fam SET parentesco = datos.parentesco, apellido_familiar = datos.apellido_familiar, nombre_familiar = datos.nombre_familiar, nivel_educ_fam = datos.nivel_educ_fam WHERE id_persona = idpersona AND id_fuente_datos = idfuente;*/ -- Actualizo los datos de las becas UPDATE vga_datos_becas_pasantias SET beneficiario_beca = datos.fue_beneficiario_beca WHERE id_persona = idpersona AND id_fuente_datos = idfuente; -- Actualizo los datos de las becas anteriores /*UPDATE vga_datos_beca_anteriores SET fuente_beca = datos.fuente_beca WHERE id_persona = idpersona AND id_fuente_datos = idfuente;*/ -- Actualizo los datos de salud de la persona /*UPDATE vga_datos_salud SET cobertura_salud = datos.cobertura_salud, tipo_cobertura = datos.tipo_cobertura WHERE id_persona = idpersona AND id_fuente_datos = idfuente;*/ -- Actualizo los datos de discapacidades de la persona /* UPDATE vga_datos_salud_discapacidades SET tipo_discapacidad = datos.tipo_discapacidad, caracter_discapacidad = datos.caracter_discapacidad, grado_discapacidad = datos.grado_discapacidad WHERE id_persona = idpersona AND id_fuente_datos = idfuente;*/ RETURN 't'; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; -- -- Name: sp_vga_actualizar_uas(); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION sp_vga_actualizar_uas() RETURNS boolean AS $$ DECLARE id_ua VARCHAR(5); datos RECORD; BEGIN FOR datos IN SELECT * FROM vga_temp_unidades_academicas LOOP --Si no existe la inserto, caso constrario solo actualizo los datos SELECT unidad_acad INTO id_ua FROM sbc_unidades_academicas WHERE unidad_acad = datos.unidad_acad; IF (id_ua ISNULL) THEN INSERT INTO sbc_unidades_academicas (unidad_acad, descripcion, nombre) VALUES (datos.unidad_acad, datos.nombre, datos.descripcion); ELSE UPDATE sbc_unidades_academicas SET descripcion = datos.descripcion, nombre = datos.nombre WHERE unidad_acad = id_ua; END IF; END LOOP; RETURN 't'; END; $$ LANGUAGE plpgsql; -- -- Name: sp_vga_existe_persona(integer, character varying); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION sp_vga_existe_persona(integer, character varying) RETURNS integer AS $_$ DECLARE tipo_doc ALIAS FOR $1; nro_doc ALIAS FOR $2; id INT4; BEGIN SELECT id_persona INTO id FROM vga_personas WHERE tipo_documento = tipo_doc AND nro_documento = nro_doc; IF (id NOTNULL) THEN RETURN id; END IF; RETURN -1; END; $_$ LANGUAGE plpgsql; -- -- Name: sp_vga_importar_datos(character varying, character varying, character varying, character); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION sp_vga_importar_datos(character varying, character varying, character varying, character) RETURNS boolean AS $_$ DECLARE arch_origen ALIAS FOR $1; descr_origen ALIAS FOR $2; ua ALIAS FOR $3; tipo ALIAS FOR $4; id_origen INT4; id_fuente INT4; id_pers INT4; datos RECORD; d vga_datos_censales; result bool; reg_procesados INT4; pers_agregadas INT4; nro_inscrip VARCHAR(10); familiar INT4; beca CHAR(1); BEGIN reg_procesados := 0; pers_agregadas := 0; nro_inscrip = ' '; -- Si es una importacion nueva, creo la fuente, caso contraior la obtengo. IF (tipo = 'I') THEN --Creo el origen de datos SELECT nextval('vga_origen_datos_id_origen_datos_seq') INTO id_origen; INSERT INTO vga_origen_datos (id_origen_datos, nombre_archivo, descripcion) VALUES (id_origen, arch_origen, descr_origen); --Creo la fuente de datos SELECT nextval('vga_fuentes_datos_id_fuente_datos_seq') INTO id_fuente; INSERT INTO vga_fuentes_datos (id_fuente_datos, fecha_incorporacion, unidad_academica, origen) VALUES (id_fuente, CURRENT_TIMESTAMP, ua, id_origen); ELSE --Selecciono el que existe SELECT f.id_fuente_datos INTO id_fuente FROM vga_fuentes_datos f INNER JOIN vga_origen_datos o ON (f.origen = o.id_origen_datos) WHERE o.nombre_archivo = arch_origen; END IF; --Por cada persona agergada actualizo los datos FOR datos IN SELECT * FROM vga_temp_datos_censales LOOP --Cargo el TYPE vga_datos_censales para poder pasar como parametro a los distintos SP. -- Datos generales d.unidad_academica := datos.unidad_academica; d.nro_inscripcion := datos.nro_inscripcion; --Datos Personales Generales d.apellido := datos.apellido; d.nombre := datos.nombre; d.fecha_nacimiento := datos.fecha_nacimiento; d.nacionalidad := datos.nacionalidad; d.loc_nacim := datos.loc_nacim; d.sexo := datos.sexo; d.tipo_documento := datos.tipo_documento; d.nro_documento := datos.nro_documento; d.nro_cuil_cuit := datos.nro_cuil_cuit; d.tipo_de_visa := datos.tipo_de_visa; d.residencia := datos.residencia; d.fecha_visa := datos.fecha_visa; d.vencimiento_visa := datos.vencimiento_visa; --Datos Personales actuales d.calle := datos.calle; d.numero := datos.numero; d.piso := datos.piso; d.depto := datos.depto; d.barrio := datos.barrio; d.localidad_act := datos.localidad_act; d.codigo_postal := datos.codigo_postal; d.telefono_fijo := datos.telefono_fijo; d.telefono_celular := datos.telefono_celular; d.email := datos.email; d.estado_civil := datos.estado_civil; d.cantidad_hijos := datos.cantidad_hijos; --Datos de Becas y Pasantias d.fue_beneficiario_beca := datos.fue_beneficiario_beca; d.fuente_beca := datos.fuente_beca; --Datos Economicos d.fuente_financiamiento := datos.fuente_financiamiento; --d.especif_fuente := datos.especif_fuente; d.con_quien_vive := datos.con_quien_vive; --datos laborales d.cond_act_laboral := datos.cond_act_laboral; d.cant_hs_trabajo := datos.cant_hs_trabajo; d.relacion_trabajo := datos.relacion_trabajo; --datos del grupo conviviente y/o dependencia d.parentesco := datos.parentesco; d.apellido_familiar := datos.apellido_familiar; d.nombre_familiar := datos.nombre_familiar; d.nivel_educ_fam := datos.nivel_educ_fam; --datos socio economicos del grupo familiar d.padre_vive := datos.padre_vive; d.madre_vive := datos.madre_vive; --datos de salud -- d.problemas_salud := datos.problemas_salud; --d.cobertura_salud := datos.cobertura_salud; --d.tipo_cobertura := datos.tipo_covertura; -- d.erogacion_problemas_salud := datos.erogacion_problemas_salud; --Datos discapacidad -- d.tipo_discapacidad := datos.tipo_discapacidad; -- d.caracter_discapacidad := datos.caracter_discapacidad; -- d.grado_discapacidad := datos.grado_discapacidad; /* El unico caso donde se deben actualizar los datos es que la persona ya haya sido cargada en importaciones previas, o bien, ya haya sido cargada en esta importacions. Para el primer caso utilizo la funcion sp_vga_existe_persona. Para el segundo, basta con conparar el nro de inscripcion del registro anterior, si son iguales es que la persona ya fue guardada, en caso contrario se trata de una nueva persona. */ IF (nro_inscrip <> datos.nro_inscripcion) THEN SELECT sp_vga_existe_persona(datos.tipo_documento, datos.nro_documento) INTO id_pers; IF (tipo = 'A') AND (id_pers <> -1) THEN SELECT sp_vga_actualizar_datos_persona(d,id_pers, id_fuente) INTO result; ELSE --Si la persona no existe creo el registro, sino en la variable id_pers ya tengo el id de la persona IF (id_pers = -1) THEN SELECT nextval('vga_personas_id_persona_seq') INTO id_pers; INSERT INTO vga_personas (id_persona, tipo_documento, nro_documento, apellido, nombre, fecha_nacimiento, sexo, id_localidad, nro_cuil_cuit) VALUES (id_pers, d.tipo_documento, d.nro_documento, d.apellido, d.nombre, d.fecha_nacimiento, d.sexo, d.loc_nacim, d.nro_cuil_cuit); pers_agregadas := pers_agregadas + 1; END IF; SELECT sp_vga_insertar_datos_persona(d,id_pers, id_fuente) INTO result; END IF; ELSE /* La persona ya fue porcesada en este registro.. por lo tanto pueden venir los datos que se repiten que son los datos de las becas o los datos de los familiares. Hay que tener en cuenta que si los datos se est n actualizando puede ser que los datos ya existan */ IF (tipo = 'I') THEN --Se esta insertando un nuevo conjunto de datos. IF (datos.parentesco NOTNULL) THEN INSERT INTO vga_datos_personales_grp_fam(id_persona, id_fuente_datos, parentesco, apellido_familiar, nombre_familiar)--, nivel_educ_fam) VALUES (id_pers, id_fuente, datos.parentesco, datos.apellido_familiar, datos.nombre_familiar);--, END IF; IF (datos.fue_beneficiario_beca NOTNULL) AND (datos.fuente_beca NOTNULL) THEN INSERT INTO vga_datos_beca_anteriores(id_persona, id_fuente_datos, fuente_beca) VALUES (id_pers, id_fuente, datos.fuente_beca); END IF; ELSE --Se estan actualizando, por lo tanto es necesario verificar que no esten cargados SELECT parentesco INTO familiar FROM vga_datos_personales_grp_fam WHERE (id_persona = id_pers) AND (id_fuente_datos = id_fuente) AND (parentesco = datos.parentesco); --Si no es null (osea hay familiar para insertar) y si no existe lo inserto IF (datos.parentesco NOTNULL) AND (familiar ISNULL) THEN INSERT INTO vga_datos_personales_grp_fam(id_persona, id_fuente_datos, parentesco, apellido_familiar, nombre_familiar)--, nivel_educ_fam) VALUES (id_pers, id_fuente, datos.parentesco, datos.apellido_familiar, datos.nombre_familiar); END IF; --Si no es null (osea hay familiar para insertar) y si existe entonces actualizo IF (datos.parentesco NOTNULL) AND (familiar NOTNULL) THEN UPDATE vga_datos_personales_grp_fam SET apellido_familiar = datos.apellido_familiar, nombre_familiar = datos.nombre_familiar WHERE (id_persona = id_pers) AND (id_fuente_datos = id_fuente) AND (parentesco = datos.parentesco); END IF; SELECT fuente_beca INTO beca FROM vga_datos_beca_anteriores WHERE (id_persona = id_pers) AND (id_fuente_datos = id_fuente) AND (fuente_beca = datos.fuente_beca); IF (datos.fue_beneficiario_beca NOTNULL) AND (datos.fuente_beca ISNULL) THEN INSERT INTO vga_datos_beca_anteriores(id_persona, id_fuente_datos, fuente_beca) VALUES (id_pers, id_fuente, datos.fuente_beca); END IF; END IF; END IF; reg_procesados := reg_procesados + 1; nro_inscrip = datos.nro_inscripcion; END LOOP; UPDATE vga_fuentes_datos SET registros_procesados = reg_procesados, personas_agregadas = pers_agregadas WHERE (id_fuente_datos = id_fuente); RETURN 't'; END; $_$ LANGUAGE plpgsql; -- -- Name: sp_vga_importar_datos_academicos(character varying, character varying, character varying); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION sp_vga_importar_datos_academicos(character varying, character varying, character varying) RETURNS boolean AS $_$ DECLARE arch_origen ALIAS FOR $1; descr_origen ALIAS FOR $2; ua ALIAS FOR $3; id_origen INT4; id_fuente INT4; id_pers INT4; datos RECORD; dha RECORD; result bool; reg_procesados INT4; BEGIN reg_procesados := 0; --Creo el origen de datos SELECT nextval('vga_origen_datos_id_origen_datos_seq') INTO id_origen; INSERT INTO vga_origen_datos (id_origen_datos, nombre_archivo, descripcion) VALUES (id_origen, arch_origen, descr_origen); --Creo la fuente de datos SELECT nextval('vga_fuentes_datos_id_fuente_datos_seq') INTO id_fuente; INSERT INTO vga_fuentes_datos (id_fuente_datos, fecha_incorporacion, unidad_academica, origen) VALUES (id_fuente, CURRENT_TIMESTAMP, ua, id_origen); --Recorro los datos sumarizados ... FOR datos IN SELECT * FROM vga_temp_datos_academicos LOOP INSERT INTO vga_datos_academicos(id_fuente_datos, unidad_acad, carrera, tipo_documento, nro_documento, legajo, plan, anio_ingreso, duracion_anios, total_materias, anio_cursada, cant_mat_hab_cursar, porc_aprob_carrera, promedio_con_aplazos, promedio_sin_aplazos, f_exportacion) VALUES (id_fuente, trim(ua), trim(datos.carrera), datos.tipo_documento, trim(datos.nro_documento), trim(datos.legajo), trim(datos.plan), datos.anio_ingreso, datos.duracion_anios, datos.total_materias, datos.anio_cursada, datos.cant_mat_hab_cursar, datos.porc_aprob_carrera, datos.promedio_con_aplazos, datos.promedio_sin_aplazos, datos.f_exportacion); reg_procesados := reg_procesados + 1; END LOOP; --Recorro la histria academica ... FOR dha IN SELECT * FROM vga_temp_hist_academica LOOP INSERT INTO vga_hist_academica(id_fuente_datos, legajo, unidad_academica, carrera, materia, materia_desc, tipo_documento, nro_documento, fecha, resultado, nota, nota_numerica, forma_aprobacion, tipo_acta, acta, acta_examen, acta_promocion, acta_prom_original, equivalencia, nro_resolucion, plan, nua, f_exportacion) VALUES (id_fuente, trim(dha.legajo), trim(ua), trim(dha.carrera), trim(dha.materia), trim(dha.materia_desc), dha.tipo_documento, trim(dha.nro_documento), dha.fecha, trim(dha.resultado), trim(dha.nota), dha.nota_numerica, trim(dha.forma_aprobacion), trim(dha.tipo_acta), trim(dha.acta), trim(dha.acta_examen), dha.acta_promocion, dha.acta_prom_original, dha.equivalencia, trim(dha.nro_resolucion), trim(dha.plan), trim(dha.nua), dha.f_exportacion); reg_procesados := reg_procesados + 1; END LOOP; UPDATE vga_fuentes_datos SET registros_procesados = reg_procesados, personas_agregadas = reg_procesados WHERE (id_fuente_datos = id_fuente); RETURN 't'; END; $_$ LANGUAGE plpgsql; -- -- Name: sp_vga_insertar_datos_persona(vga_datos_censales, integer, integer); Type: FUNCTION; Schema: public; Owner: - -- CREATE FUNCTION sp_vga_insertar_datos_persona(vga_datos_censales, integer, integer) RETURNS boolean AS $_$ DECLARE datos ALIAS FOR $1; idpersona_origen ALIAS FOR $2; idfuente ALIAS FOR $3; hijos CHAR(1); t_visa CHAR(1); BEGIN -- Inserto los datos de la visa si es que tiene. IF (datos.tipo_de_visa NOTNULL) THEN IF (trim(datos.tipo_de_visa) = 'PERMANENTE') THEN t_visa := 'P'; INSERT INTO vga_datos_visa_persona(id_persona, id_fuente_datos, tipo_de_visa, residencia, fecha_visa, vencimiento) VALUES (idpersona_origen, idfuente, t_visa, datos.residencia, datos.fecha_visa, datos.vencimiento_visa); END IF; IF (trim(datos.tipo_de_visa) = 'TEMPORAL') THEN t_visa := 'T'; INSERT INTO vga_datos_visa_persona(id_persona, id_fuente_datos, tipo_de_visa, residencia, fecha_visa, vencimiento) VALUES (idpersona_origen, idfuente, t_visa, datos.residencia, datos.fecha_visa, datos.vencimiento_visa); END IF; END IF; -- Inserto los datos personales actuales IF (datos.cantidad_hijos > 0) THEN hijos := 'S'; ELSE hijos := 'N'; END IF; INSERT INTO vga_datos_personales_actuales(id_persona, id_fuente_datos, calle, altura, piso, depto, barrio, id_localidad, codigo_postal, telefono_fijo, telefono_celular, email, estado_civil, tiene_hijos, cnt_hijos) VALUES (idpersona_origen, idfuente, datos.calle, datos.numero, datos.piso, datos.depto, datos.barrio, datos.localidad_act, datos.codigo_postal, datos.telefono_fijo, datos.telefono_celular, datos.email, datos.estado_civil, hijos, datos.cantidad_hijos); -- Inserto los datos laborales INSERT INTO vga_datos_laborales(id_persona, id_fuente_datos, actividad, cnt_hs_trabajo, relacion_trabajo_est) VALUES (idpersona_origen, idfuente, datos.cond_act_laboral, datos.cant_hs_trabajo, datos.relacion_trabajo); -- Inserto los datos economicos INSERT INTO vga_datos_economicos(id_persona,id_fuente_datos,fuente_financiamiento,forma_vivir) VALUES (idpersona_origen, idfuente, datos.fuente_financiamiento, datos.con_quien_vive); -- Inserto los datos del grupo familiar INSERT INTO vga_datos_personales_grp_fam(id_persona, id_fuente_datos, parentesco, apellido_familiar, nombre_familiar)--, nivel_educ_fam) VALUES (idpersona_origen, idfuente, datos.parentesco, datos.apellido_familiar, datos.nombre_familiar);--, --datos.nivel_educ_fam); -- Inserto los datos si tubo pasantias o becas anteriores INSERT INTO vga_datos_becas_pasantias(id_persona, id_fuente_datos, beneficiario_beca) VALUES (idpersona_origen, idfuente, datos.fue_beneficiario_beca); --Insero los datos de la beca anterior /* IF (datos.fue_beneficiario_beca = 'S') THEN INSERT INTO vga_datos_beca_anteriores(id_persona, id_fuente_datos, fuente_beca) VALUES (idpersona_origen, idfuente, datos.fuente_beca); END IF; */ -- Inserto los datos de salud /*INSERT INTO vga_datos_salud(id_persona, id_fuente_datos, cobertura_salud, tipo_cobertura) VALUES (idpersona, idfuente, datos.cobertura_salud, datos.tipo_cobertura);*/ RETURN 't'; END; $_$ LANGUAGE plpgsql; -- -- Name: sp_vga_transferir_datos_academicos(integer, integer); Type: FUNCTION; Schema: public; Owner: - -- CREATE OR REPLACE FUNCTION sp_vga_transferir_datos_academicos(integer, integer) RETURNS boolean AS $BODY$ DECLARE convocatoria ALIAS FOR $1; id_fd ALIAS FOR $2; datos RECORD; resumen RECORD; ha RECORD; result bool; anio_pm DATE; mat_aprob INT2; mat_aprob_pe INT2; mat_reg INT2; mat_reg_pe INT2; reg_procesados INT4; f_desde DATE; f_hasta DATE; li_resul int2; BEGIN reg_procesados := 0; -- Saco el periodo de evaluaci?n de la convocatoria seleccionada SELECT c.pe_desde, c.pe_hasta FROM sbc_convocatorias c INTO f_desde, f_hasta WHERE c.convocatoria = convocatoria; --Recorro los formularios en estado distinto de CANCELADO y EVALUADO, para la convocatoria seleccionada FOR datos IN SELECT s.solicitud, p.tipo_documento, p.nro_documento, da.unidad_acad, da.carrera, da.libreta_univ FROM sbc_solicitud s, mdc_personas p, sbc_datos_academicos da WHERE s.persona = p.persona AND s.solicitud = da.solicitud AND s.estado_solicitud <> 4 AND s.estado_solicitud <> 5 AND solicitud_original is NULL AND s.convocatoria = convocatoria LOOP SELECT * FROM vga_datos_academicos da INTO resumen WHERE da.id_fuente_datos = id_fd AND da.tipo_documento = datos.tipo_documento AND da.nro_documento = datos.nro_documento AND da.unidad_acad = datos.unidad_acad AND da.carrera = datos.carrera; -- Actualizo los datos en la tabla de datos academicos IF FOUND THEN -- -------------------------------------------------------------------------- -- PRIMERO HAGO ALGUNAS SELECT PARA LUEGO SI HACER EL INSERT -- -------------------------------------------------------------------------- -- A?o de la primer materia aprobada SELECT min(fecha) FROM vga_hist_academica h INTO anio_pm WHERE h.id_fuente_datos = id_fd AND h.tipo_documento = datos.tipo_documento AND h.nro_documento = datos.nro_documento AND h.unidad_academica = datos.unidad_acad AND h.carrera = datos.carrera AND (resultado = 'A' OR resultado = 'P'); -- Cantidad total de materias aprobadas SELECT count(*) FROM vga_hist_academica h INTO mat_aprob WHERE h.id_fuente_datos = id_fd AND h.tipo_documento = datos.tipo_documento AND h.nro_documento = datos.nro_documento AND h.unidad_academica = datos.unidad_acad AND h.carrera = datos.carrera AND (resultado = 'A' OR resultado = 'P'); -- Saco la cantidad de materias aprobadas en el periodo de evaluaci?n si es que no es nulo IF f_desde IS NULL OR f_hasta IS NULL THEN mat_aprob_pe := mat_aprob; ELSE SELECT count(*) FROM vga_hist_academica h INTO mat_aprob_pe WHERE h.id_fuente_datos = id_fd AND h.tipo_documento = datos.tipo_documento AND h.nro_documento = datos.nro_documento AND h.unidad_academica = datos.unidad_acad AND h.carrera = datos.carrera AND (resultado = 'A' OR resultado = 'P') AND fecha between f_desde AND f_hasta; END IF; -- Cantidad total de materias regularizadas SELECT count(*) FROM vga_hist_academica h INTO mat_reg WHERE h.id_fuente_datos = id_fd AND h.tipo_documento = datos.tipo_documento AND h.nro_documento = datos.nro_documento AND h.unidad_academica = datos.unidad_acad AND h.carrera = datos.carrera AND (resultado = 'R'); -- Saco la cantidad de materias regularizadas en el periodo de evaluaci?n si es que no es nulo IF f_desde IS NULL OR f_hasta IS NULL THEN mat_reg_pe := mat_reg; ELSE SELECT count(*) FROM vga_hist_academica h INTO mat_reg_pe WHERE h.id_fuente_datos = id_fd AND h.tipo_documento = datos.tipo_documento AND h.nro_documento = datos.nro_documento AND h.unidad_academica = datos.unidad_acad AND h.carrera = datos.carrera AND (resultado = 'R') AND fecha between f_desde AND f_hasta; END IF; -- -------------------------------------------------------------------------- -- AHORA SI HAGO LOS UPDATES NECESARIOS -- -------------------------------------------------------------------------- UPDATE sbc_datos_academicos SET anio_ingreso_carrera = resumen.anio_ingreso, cnt_anios_carrera = resumen.duracion_anios, cnt_materias_total = resumen.total_materias, anio_cursa = resumen.anio_cursada, anio_primer_materia = extract(year from anio_pm), cnt_materias_a_cursar = resumen.cant_mat_hab_cursar, cnt_mat_aprob = mat_aprob, cnt_mat_aprob_pe = mat_aprob_pe, cnt_mat_reg = mat_reg, cnt_mat_reg_pe = mat_reg_pe, porc_aprob_carrera = resumen.porc_aprob_carrera, promedio_univ_ca = resumen.promedio_con_aplazos, promedio_univ_sa = resumen.promedio_sin_aplazos WHERE solicitud = datos.solicitud; li_resul := sp_generarCopia(datos.solicitud, convocatoria, 'interno_importacion'); reg_procesados := reg_procesados + 1; END IF; END LOOP; RETURN 't'; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; ALTER FUNCTION sp_vga_transferir_datos_academicos(integer, integer) OWNER TO postgres;