/*
Created		02/03/2006
Modified		11/12/2008
Project		SIU-Tehuelche
Model		Sistema Integral de Bienestar Universitario
Company		Programa SIU - Tehuelche
Author		Emiliano Jaureguiber
Version		2.3.0
Database		PostgreSQL 8.0 
*/

-- Funciones Agregadas / Modificadas
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;

-- Tablas Agregadas

Create table sbc_solicitud_canc_susp
(
	fecha_canc_susp timestamp without time zone DEFAULT ('now'::text)::timestamp(6) with time zone NOT NULL,
	observaciones Text,
	motivo Integer NOT NULL,
	solicitud Integer NOT NULL,
 primary key (fecha_canc_susp,motivo,solicitud)
) With Oids;


/* Create Foreign Keys */

Create index IX_Relationship245 on sbc_solicitud_canc_susp (solicitud);
Alter table sbc_solicitud_canc_susp add  foreign key (solicitud) references sbc_solicitud (solicitud) on update restrict on delete restrict;
Create index IX_Relationship244 on sbc_solicitud_canc_susp (motivo);
Alter table sbc_solicitud_canc_susp add  foreign key (motivo) references sbc_motivos_canc_susp (motivo) on update restrict on delete restrict;

Create table sbc_institucion
(
	id_institucion Serial NOT NULL,
	nombre_institucion Varchar(50) NOT NULL,
	sigla_institucion Varchar(10),
	imagen_dependencia Varchar(50),
	nombre_dependencia Varchar(40) UNIQUE,
	sigla_dependencia Varchar(10),
	dir_dependencia Varchar(50),
	tel_dependencia Varchar(15) NOT NULL,
	mail_dependencia Varchar(50) NOT NULL,
 primary key (id_institucion)
) With Oids;

/* Create Comment on Columns */
Comment on column sbc_institucion.id_institucion is 'Identificador interno para la Instituci�n';
Comment on column sbc_institucion.imagen_dependencia is 'Nombre del archivo que contiene la imagen a mostrar';


/* Arreglos en vista de entrevistadores */
/* Se ordena por apellido y nombres, se eliminan los campos id_pais e id_provincia */
DROP VIEW vw_entrevistadores;

CREATE OR REPLACE VIEW vw_entrevistadores AS 
	SELECT 
			p.persona, 
			p.tipo_documento,
			p.nro_documento,
			p.apellido,
			p.nombre,
			p.nacionalidad,
			p.fecha_nacimiento,
			p.id_localidad_nacimiento,
			p.sexo,
			p.cuit_cuil,
			p.visa,
			p.tipo_visa,
			p.residencia,
			p.f_visa,
			p.vencimiento,
			p.institucion,
			p.modo_ingreso,
			p.anio_ingreso_univ,
			p.promedio_polimodal,
			td.desc_abreviada
	FROM 
		mdc_personas p,
		sbc_entrevistadores e,
		mdc_tipos_documentos td
	WHERE 
		p.persona = e.persona AND 
		p.tipo_documento = td.tipo_documento
	ORDER BY p.apellido, p.nombre;
	

/*
* Se crea la tabla sbc_exepcio para exepciones de nros de cuit/cuil mal informados por afip
*/
CREATE TABLE sbc_excepcio (
    nro_cuit character(11) NOT NULL
);



COMMENT ON COLUMN sbc_excepcio.nro_cuit IS 'N�mero de CUIT - Excepci�n';

INSERT INTO sbc_excepcio (nro_cuit) VALUES ('11111111111');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20308516149');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20313451977');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20325103710');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20325562235');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20328893992');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20329456782');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20336695377');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20338118393');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20351170604');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20353765087');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20364248076');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20369101103');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20378660956');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20384815201');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20398339445');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20399999589');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20403550419');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20436333715');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20441672501');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20444302594');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20444487403');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20446336534');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20454963300');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20460825009');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20461602216');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20463197092');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20482297413');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20501485005');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20516115603');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20533411712');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20550985900');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20580844104');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20598520977');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20600550137');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20604366667');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20609068370');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20611725893');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20617426359');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20619871309');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20624237804');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20628359106');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20629002309');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20629995588');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20633969001');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20635476932');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20635522187');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20643042305');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20647074481');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20654605603');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20660093436');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20660285599');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20661330121');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20662791726');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20662870790');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20662980308');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20663607570');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20666311613');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20702904111');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20727920502');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20773438227');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20781192865');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20849893026');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20883717660');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('20885501797');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('22222222222');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('23324610944');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('23350783199');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('23394222259');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('23398803604');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('23444411384');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('23504336409');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('23514415544');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('23597532229');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('23600347004');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('23653071809');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('23658395009');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('23660397469');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('23697449884');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27322758001');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27334579501');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27339000633');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27344006283');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27349004319');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27356444219');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27358875640');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27359958760');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27366377420');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27368242816');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27372205232');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27377596892');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27379968746');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27385344002');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27388554415');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27388818498');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27392859395');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27394815611');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27398013609');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27416300033');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27484229975');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27501836171');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27549044943');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27577171306');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27610282844');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27613000173');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27618529350');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27640357733');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27642227799');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27643552804');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27655543533');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27666169420');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27698805949');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27711727081');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('27895074506');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30500199608');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30500886761');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30501214325');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30501607300');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30502290459');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30503217151');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30503634666');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30503914561');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30504208105');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30505200620');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30507154782');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30507233011');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30509177291');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30510638154');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30510913236');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30510932222');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30511220447');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30512254159');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30512303443');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30513167101');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30513814441');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30514050321');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30515432163');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30515714487');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30516150420');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30516675310');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30516788255');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30517014415');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30517226250');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30517714085');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30517869402');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30518403164');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30520380228');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30520467560');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30521162895');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30522007893');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30522358416');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30522473258');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30523039098');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30523359807');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30524423215');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30526240401');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30526995100');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30527679822');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30527918762');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30528564891');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30528728347');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30529280293');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30529336205');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30529445632');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30530520370');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30531316130');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30531374521');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30531379639');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30532251164');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30532460448');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30533092574');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30533422264');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30533479428');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30533899648');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30534957560');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30535437994');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30535676026');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30536117020');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30537602682');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30540251394');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30540555148');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30540569295');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30540746180');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30541587183');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30543262087');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30543821868');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30544039500');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30544300667');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30544927953');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30545796844');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30545806033');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30546698870');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30547016919');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30547339564');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30547410706');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30547596265');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30548111079');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30548149726');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30549474191');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30549858704');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30550032984');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30550072374');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30550876317');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30551641127');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30552172619');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30552234827');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30552442888');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30552529169');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30552646858');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30552691470');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30553246152');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30553293274');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30553486951');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30553976878');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30555382649');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30556097352');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30556523912');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30556937237');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30559106204');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30559394951');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30559679859');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30559833106');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30560863752');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30561077122');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30561101627');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30561822294');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30562332053');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30563153470');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30563452109');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30564665386');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30564943408');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30565138746');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30565667773');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30566507516');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30566966146');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30567044323');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30567185016');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30567288834');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30568646173');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30569139097');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30569180941');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30569834615');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30569869311');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30570021687');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30570057614');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30570272981');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30570646849');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30571402307');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30571568396');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30571619268');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30571813730');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30572757419');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30573080595');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30573301540');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30573360725');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30574243013');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30574421655');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30575235758');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30575412595');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30576623255');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30576634087');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30577763158');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30577970250');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30578437084');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30578621241');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30579800964');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30579884076');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30580314844');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30580481759');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30581036104');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30581196896');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30581408087');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30582274254');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30583273146');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30583689768');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30583912319');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30584020268');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30584410236');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30584476881');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30584499059');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30584993657');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30585069481');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30585076178');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30585389494');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30585945206');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30586076120');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30586146889');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30586171999');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30586181935');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30586278106');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30587310135');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30587415557');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30587758594');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30587866397');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30588184826');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30588263750');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30588349620');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30588906171');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30588914840');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30589093476');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30589156451');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30589262286');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30590603410');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30591306924');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30591494089');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30591781398');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30592148540');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30592234684');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30592542729');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30593648199');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30593835207');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30593863405');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30594128512');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30594231852');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30594372251');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30594384829');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30594559920');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30594561577');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30594562484');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30594659410');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30595308581');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30595509307');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30595590856');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30595799410');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30596217709');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30596698375');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30596832594');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30596906059');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30597685854');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30597856780');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30598141211');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30598356218');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30598495234');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30598530188');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30598767234');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30598786727');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30598979312');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30598998635');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30599192421');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30600331082');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30600536776');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30600544442');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30601374834');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30601615114');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30603829626');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30604549880');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30606496571');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30607159811');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30609483624');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30612134231');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30613843414');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30614963561');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30624607526');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30627453066');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30632847218');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30638237756');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30653243142');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30656230165');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30665287889');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30667754212');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30669452086');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30673845203');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30683214155');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30685200151');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30687624846');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30693620852');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('30698617590');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33333333333');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33505431249');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33518968039');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33548185829');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33549653389');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33560373789');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33563555659');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33567890029');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33573461369');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33584039219');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33584127959');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33585501099');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33591722129');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33592509259');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33593189819');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33595014889');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33602761849');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33602879459');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33607930479');
INSERT INTO sbc_excepcio (nro_cuit) VALUES ('33621557179');

ALTER TABLE ONLY sbc_excepcio
    ADD CONSTRAINT sbc_excepcio_pkey PRIMARY KEY (nro_cuit);
	
/*
* Elimino las columnas id_pais, id_provincia e id_departamento de la tabla mdc_personas
*/
ALTER TABLE mdc_personas
	DROP COLUMN id_pais,
	DROP COLUMN id_provincia,
	DROP COLUMN id_departamento
	;

/*
* Elimino las columnas id_pais, id_provincia e id_departamento de la tabla sbc_datos_personales_actuales
*/
ALTER TABLE sbc_datos_personales_actuales
	DROP COLUMN id_pais,
	DROP COLUMN id_provincia,
	DROP COLUMN id_departamento
	;

/*
* Elimino las columnas id_pais, id_provincia e id_departamento de la tabla sbc_datos_grupo_familiar
*/
ALTER TABLE sbc_datos_grupo_familiar
	DROP COLUMN id_pais,
	DROP COLUMN id_provincia,
	DROP COLUMN id_departamento
	;
	
/*
* Elimino las columnas id_pais, id_provincia e id_departamento de la tabla vga_personas
*/
ALTER TABLE vga_personas
	DROP COLUMN id_pais,
	DROP COLUMN id_provincia,
	DROP COLUMN id_departamento
	;

/*
* Elimino las columnas id_pais, id_provincia e id_departamento de la tabla vga_datos_personales_actuales
*/
ALTER TABLE vga_datos_personales_actuales
	DROP COLUMN id_pais,
	DROP COLUMN id_provincia,
	DROP COLUMN id_departamento
	;

/*
* Sp modificados a raiz de la eliminacion de los campos id_pais, id_provincia e id_departamento
*/	
-- Function: sp_datos_iniciales_desde_guarani(integer, numeric, integer)

-- DROP FUNCTION sp_datos_iniciales_desde_guarani(integer, numeric, integer);

CREATE OR REPLACE FUNCTION sp_datos_iniciales_desde_guarani(integer, numeric, 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' VOLATILE;
ALTER FUNCTION sp_datos_iniciales_desde_guarani(integer, numeric, integer) OWNER TO postgres;
 
/************************************************/
/* Modificaciones en el Type vgs_datos_censales */
/************************************************/
DROP FUNCTION sp_vga_actualizar_datos_persona(vga_datos_censales, integer, integer);
DROP FUNCTION sp_vga_importar_datos(character varying, character varying, character varying, bpchar);
DROP FUNCTION sp_vga_insertar_datos_persona(vga_datos_censales, integer, integer);
DROP TYPE vga_datos_censales;

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(15),
    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);



-- Function: sp_vga_actualizar_datos_persona(vga_datos_censales, integer, integer)
-- DROP FUNCTION sp_vga_actualizar_datos_persona(vga_datos_censales, integer, integer);

CREATE OR REPLACE 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;
ALTER FUNCTION sp_vga_actualizar_datos_persona(vga_datos_censales, integer, integer) OWNER TO postgres;



-- Function: sp_vga_importar_datos(character varying, character varying, character varying, bpchar)

-- DROP FUNCTION sp_vga_importar_datos(character varying, character varying, character varying, bpchar);

CREATE OR REPLACE FUNCTION sp_vga_importar_datos(character varying, character varying, character varying, bpchar)
  RETURNS boolean AS
$BODY$

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;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION sp_vga_importar_datos(character varying, character varying, character varying, bpchar) OWNER TO postgres;


-- Function: sp_vga_insertar_datos_persona(vga_datos_censales, integer, integer)

-- DROP FUNCTION sp_vga_insertar_datos_persona(vga_datos_censales, integer, integer);

CREATE OR REPLACE FUNCTION sp_vga_insertar_datos_persona(vga_datos_censales, integer, integer)
  RETURNS boolean AS
$BODY$
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;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION sp_vga_insertar_datos_persona(vga_datos_censales, integer, integer) OWNER TO postgres;

-- Function: sp_datos_iniciales_desde_solicitud(integer, numeric, integer, integer)

-- DROP FUNCTION sp_datos_iniciales_desde_solicitud(integer, numeric, integer, integer);

CREATE OR REPLACE FUNCTION sp_datos_iniciales_desde_solicitud(integer, numeric, 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' VOLATILE;
ALTER FUNCTION sp_datos_iniciales_desde_solicitud(integer, numeric, integer, integer) OWNER TO postgres;


-- Function: sp_generarcopia(integer, integer, character varying)

-- DROP FUNCTION sp_generarcopia(integer, integer, character varying);

CREATE OR REPLACE FUNCTION sp_generarcopia(integer, integer, character varying)
  RETURNS smallint AS
$BODY$
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;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION sp_generarcopia(integer, integer, character varying) OWNER TO postgres;

/***************************************************************
* Modificaciones para importacion de datos censales
***************************************************************/
-- Agrando el campo codigo postal a varchar 15
ALTER TABLE sbc_datos_personales_actuales ALTER codigo_postal TYPE character varying(15);
ALTER TABLE vga_temp_datos_censales ALTER codigo_postal TYPE character varying(15);
ALTER TABLE vga_datos_personales_actuales ALTER codigo_postal TYPE character varying(15);

-- Fuente de financiamiento
ALTER TABLE vga_temp_datos_censales ALTER fuente_financiamiento_otra TYPE character varying(255);
ALTER TABLE vga_datos_economicos ALTER otra_fuente TYPE character varying(255);

-- Parentesco Profesion
ALTER TABLE sbc_datos_personales_grp_fam ALTER profesion TYPE character varying(255);
ALTER TABLE vga_temp_datos_censales ALTER parentesco_profesion TYPE character varying(255);

