DROP TABLE fco_reportes_mm;
CREATE TABLE fco_reportes_mm
(
	id_rep     number(5) NOT NULL,
	usuariow	 varchar2(30) NOT NULL,
	cod_rep  number(3) NOT NULL,
  sec_archivo number(3) NOT NULL, --por si se manejan varios archivos. Es la sec configurada en la tabla ri_interfase_rutas
	secuencia  number(6) NULL,
	registros  varchar2(500) NULL
)
TABLESPACE TS_ADAMDATOS;

DROP INDEX in_fco_reportes_mm01;
CREATE INDEX in_fco_reportes_mm01 ON fco_reportes_mm(id_rep, usuariow, cod_rep) TABLESPACE TS_ADAMINDICES;

CREATE PUBLIC SYNONYM fco_reportes_mm FOR ADAM.fco_reportes_mm;
GRANT ALL ON fco_reportes_mm TO ADAMA;
DROP TABLE fco_reportes_proc;
CREATE TABLE fco_reportes_proc
( id_rep       number(5) NOT NULL,
  usuariow	   varchar2(30) NOT NULL,
  cod_rep  number(3) NOT NULL,  
  orden number(3) NOT NULL,
  valor varchar2(20) NULL
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fco_reportes_proc FOR ADAM.fco_reportes_proc;
GRANT ALL ON fco_reportes_proc TO ADAMA;
  
CREATE OR REPLACE PROCEDURE sp_fco_gen_reportes_proc
(
  psi_id_rep  number,
  pvc_usuario varchar2,
  pti_cod_rep number,
  pch_trab_dde char DEFAULT '',
  pch_trab_hta char DEFAULT '',
  pch_agr_1 char DEFAULT '',
  pch_agr_2 char DEFAULT '',
  pch_agr_3 char DEFAULT '',
  pch_dato_dde char DEFAULT '',
  pch_dato_hta char DEFAULT ''  
)
/********************************************************************/
/*** Reportes e Interfases de Data Tecnologia                     ***/
/*** Descripcion: invoca los procedimientos de reportes de        ***/
/*** acuerdo a los parametros enviados de entrada                 ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 14 de 2005                                       ***/
/********************************************************************/

AS
	vvc_proc_genera	varchar2(30);
  sComilla char(1);
  vvc_inter	varchar2(10);
  cvc_valor varchar2(20);
  vnu_len       number(7);
  vvc_ssql  varchar2(2000);
  ejecutar_sp   EXCEPTION;
    
  CURSOR cr_valores IS
  SELECT valor
  FROM fco_reportes_proc
  WHERE id_rep = psi_id_rep
  AND usuariow = pvc_usuario
  AND cod_rep = pti_cod_rep
  ORDER BY orden;

BEGIN--1

  sComilla := chr(39);
	--trayendo el nombre del procedimiento
  vvc_proc_genera := '';
  vnu_len := 0;
  BEGIN 
  	SELECT proc_generacion
    INTO vvc_proc_genera
  	FROM fco_reportes
  	WHERE cod_rep = pti_cod_rep;
    EXCEPTION
      WHEN NO_DATA_FOUND THEN vvc_proc_genera := '0';
      WHEN OTHERS THEN vvc_proc_genera := '';            
  END;  
	vvc_proc_genera := LTRIM(RTRIM(NVL(vvc_proc_genera,'')));
  vnu_len := NVL(LENGTH(vvc_proc_genera),0);

	IF vnu_len = 0 THEN
		vvc_inter := LTRIM(RTRIM(pti_cod_rep));
    RAISE_APPLICATION_ERROR(-20001, 'Error de datos: No existe la funcion de generacion para el reporte: '||vvc_inter);
    RETURN; 
	END IF;
  
  vvc_ssql := vvc_proc_genera || ' ' || '(' || RTRIM(psi_id_rep) || ',' ||
              sComilla || pvc_usuario || sComilla || ',' || RTRIM(pti_cod_rep) || ',' ||
              sComilla || pch_trab_dde || sComilla || ',' ||
              sComilla || pch_trab_hta || sComilla || ',' ||
              sComilla || pch_agr_1 || sComilla || ',' ||
              sComilla || pch_agr_2 || sComilla || ',' ||
              sComilla || pch_agr_3 || sComilla || ',' ||
              sComilla || pch_dato_dde || sComilla || ',' ||
              sComilla || pch_dato_hta || sComilla;
  
 	OPEN cr_valores;
	FETCH cr_valores INTO cvc_valor;
	WHILE cr_valores%FOUND  LOOP  
        vvc_ssql := vvc_ssql || ',' || sComilla || cvc_valor || sComilla;
              
  	FETCH cr_valores INTO cvc_valor;

	END LOOP;
	CLOSE cr_valores;

   vvc_ssql :=  vvc_ssql || ');';
  BEGIN
DBMS_OUTPUT.PUT_LINE('2 - vvc_ssql: '||vvc_ssql);
      EXECUTE IMMEDIATE 'BEGIN '||vvc_ssql||' END;';
--  EXCEPTION
--      WHEN OTHERS THEN
--          RAISE ejecutar_sp;
  END;
   
  COMMIT;

  EXCEPTION
--  WHEN ejecutar_sp THEN
--       RAISE_APPLICATION_ERROR(-20001, 'Error al ejecutar el procedimiento de generacion de reportes: '||vvc_inter);
--       RETURN;                    
  WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR(-20002, SQLCODE||SQLERRM(SQLCODE));
           RETURN;  
  
END;--1
/
CREATE PUBLIC SYNONYM sp_fco_gen_reportes_proc FOR ADAM.sp_fco_gen_reportes_proc;
GRANT EXECUTE ON sp_fco_gen_reportes_proc TO adama;

CREATE OR REPLACE PROCEDURE sp_fco_del_reportes_tablas
(
  psi_id_rep  number,
  pvc_usuario varchar2,
  pti_cod_rep number
)
/********************************************************************/
/*** Fiscal de Colombia de Data Tecnologia                        ***/
/*** Descripcion: invoca los procedimientos de reportes de        ***/
/*** acuerdo a los parametros enviados de entrada                 ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 14 de 2005                                      ***/
/********************************************************************/

AS
	vvc_proc_genera	varchar2(30);
  sComilla char(1);
  vvc_inter	varchar2(10);  
  vnu_len       number(7);
  vvc_ssql  varchar2(2000);
  ejecutar_sp   EXCEPTION;
    
BEGIN

  sComilla := chr(39);
	--trayendo el nombre del procedimiento
  vvc_proc_genera := '';
  vnu_len := 0;
  BEGIN 
  	SELECT proc_borrado
    INTO vvc_proc_genera
  	FROM fco_reportes
  	WHERE cod_rep = pti_cod_rep;
    EXCEPTION
      WHEN NO_DATA_FOUND THEN vvc_proc_genera := '0';
      WHEN OTHERS THEN vvc_proc_genera := '';            
  END;  
	vvc_proc_genera := LTRIM(RTRIM(NVL(vvc_proc_genera,'')));
  vnu_len := NVL(LENGTH(vvc_proc_genera),0);

/*
	IF vnu_len = 0 THEN
		vvc_inter := LTRIM(RTRIM(pti_cod_rep));
    RAISE_APPLICATION_ERROR(-20001, 'Error de datos: No existe la funcion de borrado de tablas para el reporte: '||vvc_inter);
    RETURN; 
	END IF;
*/
--si existe un procedimiento, entonces se ejecuta
	IF vnu_len > 0 THEN  
    vvc_ssql := vvc_proc_genera || ' ' || '(' || RTRIM(psi_id_rep) || ',' ||
                sComilla || pvc_usuario || sComilla || ',' || RTRIM(pti_cod_rep) || ');';
                              
    BEGIN
  DBMS_OUTPUT.PUT_LINE('2 - vvc_ssql: '||vvc_ssql);
        EXECUTE IMMEDIATE 'BEGIN '||vvc_ssql||' END;';
    EXCEPTION
        WHEN OTHERS THEN
            RAISE ejecutar_sp;
    END;
  END IF;

  COMMIT;

  EXCEPTION
  WHEN ejecutar_sp THEN
       RAISE_APPLICATION_ERROR(-20001, 'Error al ejecutar el procedimiento de borrado de tablas: '||vvc_inter);
       RETURN;                    
  WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR(-20002, SQLCODE||SQLERRM(SQLCODE));
           RETURN;  

END;
/
CREATE PUBLIC SYNONYM sp_fco_del_reportes_tablas FOR ADAM.sp_fco_del_reportes_tablas;
GRANT EXECUTE ON sp_fco_del_reportes_tablas TO adama;
