-- Sector del Colegio.
ALTER TABLE sga_coleg_sec DROP CONSTRAINT ck_colsec_sector;
ALTER TABLE sga_coleg_sec ADD CONSTRAINT CHECK (SECTOR IN ('P', 'E', 'S','C')) CONSTRAINT ck_colsec_sector;

-- *****************************************************************************
-- SIU - MUG - Módulo de Ubicación Geográfica
-- Versión 1.1
-- Procedure sui_dptos_partidos
-- Inserta un departamento/partido y su correspondiente localidad indeterminada.
-- Si ya existía el departamento/partido, lo actualiza, junto con la localidad
-- *****************************************************************************
DROP PROCEDURE sui_dptos_partidos;
CREATE PROCEDURE sui_dptos_partidos(
         p_dpto_partido     like    mug_dptos_partidos.dpto_partido
        ,p_nombre           like    mug_dptos_partidos.nombre
        ,p_provincia        like    mug_dptos_partidos.provincia
        ,p_estado           like    mug_dptos_partidos.estado
        ,p_update           char(1) DEFAULT 'S' )

	DEFINE sql_err integer;
	DEFINE isam_err integer;
	DEFINE error_info varchar(76);

	DEFINE vLocalidadIndet    LIKE mug_localidades.localidad;
	DEFINE vManejaTransaccion char(1);

BEGIN
-- ESTARÍA FALTANDO CAPTURAR EL ERROR DEL CATALOGADOR DE LOCALIDADES Y CAMBIARLO POR OTRO QUE MUESTRE PROVINCIA, DEPARTAMENTO Y LOCALIDAD
-- raise exception -746, 0, '1-a, ' || p_provincia || ', ' || p_dpto_partido || ', ' || p_localidad;

	ON EXCEPTION SET sql_err, isam_err, error_info
		IF vManejaTransaccion = 'S' THEN
			ROLLBACK WORK;
		END IF;
		raise exception  sql_err, isam_err, error_info;
	END EXCEPTION;

	-- Si ya estaba en transacción, lo registra en una variable para saber que no la debe manejar
	ON EXCEPTION IN (-535)
		LET vManejaTransaccion = 'N';
	END EXCEPTION WITH RESUME;

	-- Si ya existia, actualiza todos sus campos
	ON EXCEPTION IN (-268)
		IF p_update = 'S' THEN
			-- Actualiza el departamento / partido
			UPDATE mug_dptos_partidos
			   SET nombre       = p_nombre,
			       provincia    = p_provincia,
			       estado       = p_estado
			 WHERE dpto_partido = p_dpto_partido;

 			-- Inserta localidad indeterminada para el partido si es que no existe una localidad con ese id de localidad = dpto_partido
			EXECUTE PROCEDURE sui_localidades ( vLocalidadIndet, 'Indeterminada', 'Indeterminada', p_dpto_partido, null);

			-- Si estaba manejando la transacción
			IF vManejaTransaccion = 'S' THEN
				COMMIT WORK;
			END IF;
		ELSE
			-- No hace falta el ROLLBACK porque esto pasa por la excepción general
			raise exception -746, 0, '2, ' || p_provincia || ', ' || p_dpto_partido;
		END IF ;
	END EXCEPTION;

	-- Carga una variable que indica que el procedure debe manejar la transacción
	LET vManejaTransaccion = 'S';

BEGIN WORK;
	-- Genera el número de localidad indeterminada para el departamento
	LET vLocalidadIndet = p_dpto_partido;

	-- Inserta el departamento / partido
	INSERT INTO mug_dptos_partidos ( dpto_partido, nombre, provincia, estado ) VALUES ( p_dpto_partido, p_nombre, p_provincia, p_estado );

	IF (SELECT COUNT(*) FROM mug_localidades WHERE localidad = vLocalidadIndet) = 0 THEN
	    -- Cataloga la localidad indeterminada, sin permitir actualizaciones
    	    -- ya que, si existía la localidad, no podía ser la inteterminada del departamento, porque este no existía
	    EXECUTE PROCEDURE sui_localidades ( vLocalidadIndet, 'Indeterminada', 'Indeterminada', p_dpto_partido, null, 'N' );
                END IF;

-- Si estaba manejando la transacción
IF vManejaTransaccion = 'S' THEN
	COMMIT WORK;
END IF;

END;
END PROCEDURE;
-- ******************** Fin del procedure sui_dptos_partidos *******************


-- *****************************************************************************
-- SIU - MUG - Módulo de Colegios Secundarios
-- Versión 2.08.0, 2.09.5
-- Procedure sui_colegios_sec1
-- Inserta un colegio secundario. Si ya existía, lo actualiza
-- *****************************************************************************

DROP PROCEDURE dba.sui_colegios_sec2 (char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char,char);

CREATE PROCEDURE "dba".sui_colegios_sec2(
p_colegio         LIKE sga_coleg_sec.colegio,
p_nombre          LIKE sga_coleg_sec.nombre,
p_calle           LIKE sga_coleg_sec.calle, 
p_numero          LIKE sga_coleg_sec.nro, 
p_piso            LIKE sga_coleg_sec.piso, 
p_depto           LIKE sga_coleg_sec.dpto, 
p_unidad          LIKE sga_coleg_sec.unidad, 
p_referencia      LIKE sga_coleg_sec.referencia,  
p_localidad       LIKE sga_coleg_sec.localidad, 
p_codigo_postal   LIKE sga_coleg_sec.codigo_postal, 
p_telefono        LIKE sga_coleg_sec.telefono, 
p_email           LIKE sga_coleg_sec.e_mail, 
p_sector          LIKE sga_coleg_sec.sector, 
p_co_med          LIKE sga_coleg_sec.co_med, 
p_co_pol          LIKE sga_coleg_sec.co_pol, 
p_es_med          LIKE sga_coleg_sec.es_med, 
p_es_pol          LIKE sga_coleg_sec.es_pol, 
p_ad_med          LIKE sga_coleg_sec.ad_med, 
p_ad_pol          LIKE sga_coleg_sec.ad_pol, 
p_ar_med          LIKE sga_coleg_sec.ar_med, 
p_ar_pol          LIKE sga_coleg_sec.artistica_polimoda, 
p_jar_mat         LIKE sga_coleg_sec.jar_mat, 
p_talleres        LIKE sga_coleg_sec.talleres, 
p_es_temp         LIKE sga_coleg_sec.es_tem, 
p_artistica       LIKE sga_coleg_sec.artistica, 
p_for_prof        LIKE sga_coleg_sec.for_prof, 
p_ttp             LIKE sga_coleg_sec.ttp, 
p_i_for           LIKE sga_coleg_sec.i_for, 
p_s_compl         LIKE sga_coleg_sec.s_compl, 
p_integra         LIKE sga_coleg_sec.integra, 
p_ambito          LIKE sga_coleg_sec.ambito, 
p_computadoras    LIKE sga_coleg_sec.computadoras, 
p_conex_internet  LIKE sga_coleg_sec.conexion_internet,
p_colegio_original         LIKE sga_coleg_sec.colegio_original )
-- RETURNING VARCHAR(10), INTEGER, INTEGER, VARCHAR(255);

DEFINE sql_err integer;
DEFINE isam_err integer;
DEFINE error_info varchar(76);

DEFINE vManejaTransaccion char(1);
DEFINE p_update char(1);

BEGIN

ON EXCEPTION SET sql_err, isam_err, error_info
   IF vManejaTransaccion = 'S' THEN
      ROLLBACK WORK;
   END IF;
   RAISE EXCEPTION  sql_err, isam_err, error_info;
   -- RETURN 'ERROR', sql_err, p_colegio, error_info;
END EXCEPTION;

-- Si ya estaba en transacción, lo registra en una variable para saber que no la debe manejar
ON EXCEPTION IN (-535)
   LET vManejaTransaccion = 'N';
END EXCEPTION WITH RESUME;


-- Si ya existia el colegio, actualiza todos sus campos
ON EXCEPTION IN (-268)
   IF p_update = 'S' THEN
      -- Actualiza la localidad
      UPDATE sga_coleg_sec
         SET ( nombre, localidad, calle, nro, referencia,  e_mail, telefono, codigo_postal, sector, co_med, co_pol, es_med, es_pol, ad_med, ad_pol, ar_med, artistica_polimoda, jar_mat, talleres, es_tem, artistica, for_prof, ttp, i_for, s_compl, integra, ambito, computadoras, conexion_internet, colegio_original) =
                 (p_nombre, p_localidad, p_calle, p_numero, p_referencia,  p_email, p_telefono, p_codigo_postal, p_sector, p_co_med, p_co_pol, p_es_med, p_es_pol, p_ad_med, p_ad_pol, p_ar_med, p_ar_pol, p_jar_mat, p_talleres, p_es_temp, p_artistica, p_for_prof, p_ttp, p_i_for, p_s_compl, p_integra, p_ambito, p_computadoras, p_conex_internet, p_colegio_original)
       WHERE colegio = p_colegio;
   
      -- Si estaba manejando la transacción
      IF vManejaTransaccion = 'S' THEN
         COMMIT WORK;
      END IF;
      --RETURN 'OK',0, p_colegio, 'COLEGIO ACTUALIZADO';
   ELSE
      -- No hace falta el ROLLBACK porque esto pasa por la excepción general
      RAISE EXCEPTION -746, 0, 'Colegio:  ' || p_colegio || ' - ' || p_nombre;
   END IF;

END EXCEPTION;

-- Carga una variable que indica que el procedure debe manejar la transacción
LET vManejaTransaccion = 'S';
LET p_update = 'S';

BEGIN WORK;
/*
-- chequeo de colegio original existente
IF p_colegio <> p_colegio_original THEN
	IF NOT EXISTS( SELECT '' FROM sga_coleg_sec WHERE colegio=p_colegio_original) THEN
		RAISE EXCEPTION -746,0,'No existe el colegio original';
	END IF;
END IF;
*/
   -- Inserta un colegio
   INSERT INTO sga_coleg_sec (colegio, nombre, localidad, calle, nro, referencia,  e_mail, telefono, codigo_postal, sector, co_med, 
       co_pol, es_med, es_pol, ad_med, ad_pol, ar_med, artistica_polimoda, jar_mat, talleres, es_tem,  artistica, 
       for_prof, ttp, i_for, s_compl, integra, ambito, computadoras, conexion_internet, colegio_original)
       VALUES (p_colegio, p_nombre, p_localidad, p_calle, p_numero, p_referencia,  p_email, p_telefono, p_codigo_postal, p_sector, 
       p_co_med, p_co_pol, p_es_med, p_es_pol, p_ad_med, p_ad_pol, p_ar_med, p_ar_pol, p_jar_mat, p_talleres, p_es_temp, p_artistica, 
       p_for_prof, p_ttp, p_i_for, p_s_compl, p_integra, p_ambito, p_computadoras, p_conex_internet, p_colegio_original );

-- Si estaba manejando la transacción
IF vManejaTransaccion = 'S' THEN
   COMMIT WORK;
   -- RETURN 'OK', 0, p_colegio, 'COLEGIO AGREGADO';
END IF;

END;
END PROCEDURE;

-- ************************** Fin procedure dba.sui_colegios_sec2 ********************************************

GRANT EXECUTE ON dba.sui_colegios_sec2 TO public;
 

 

 

