CREATE TABLE fdt_bancos
(
    banco        number(3) NOT NULL,
    descripcion  varchar2(100) NOT NULL,
	  proc_generacion varchar2(30) NULL,
    CONSTRAINT PK_fdt_bancos PRIMARY KEY (banco)
    USING INDEX TABLESPACE TS_ADAMINDICES
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fdt_bancos FOR ADAM.fdt_bancos;
GRANT ALL ON fdt_bancos TO ADAMA;

CREATE TABLE fdt_bancos_cias
(
    banco        number(3) NOT NULL,
    compania     char(4) NOT NULL,
    CONSTRAINT PK_fdt_rel_bancos_cias PRIMARY KEY (banco, compania)
    USING INDEX TABLESPACE TS_ADAMINDICES
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fdt_bancos_cias FOR ADAM.fdt_bancos_cias;
GRANT ALL ON fdt_bancos_cias TO ADAMA;
CREATE TABLE fdt_bancos_cias_datos
(
    banco        number(3) NOT NULL,
    compania     char(4) NOT NULL,
    cuenta       varchar2(30) NULL,
    tipo_cta     number(1) NULL,
    oficina_cta  varchar2(15) NULL,
    concepto1    number(5) NULL,
    concepto2    number(5) NULL,
    concepto3    number(5) NULL,
    concepto4    number(5) NULL,
    concepto5    number(5) NULL,                
    simbolo_moneda   char(5) NULL,
    responsable  varchar2(20) NULL,
	  registro_fiscal varchar2(20) NULL,
    CONSTRAINT PK_fdt_bancos_cias_datos PRIMARY KEY (banco, compania)
    USING INDEX TABLESPACE TS_ADAMINDICES
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fdt_bancos_cias_datos FOR ADAM.fdt_bancos_cias_datos;
GRANT ALL ON fdt_bancos_cias_datos TO ADAMA;
DROP TABLE fdt_bancos_err;
CREATE TABLE fdt_bancos_err
(
  id_rep smallint NOT NULL, 
  usuariow varchar2(30) NOT NULL, 
  banco number(3) NULL,
  trabajador char(10) NOT NULL, 
  numero_liquidacion number(5,0) NULL, --este es para la interactiva
  cod_error number(5) NULL,
  error varchar2(255) NULL
) 
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fdt_bancos_err FOR ADAM.fdt_bancos_err;
GRANT ALL ON fdt_bancos_err TO ADAMA;
CREATE TABLE fdt_bancos_ins_dep
(
    banco        number(3) NOT NULL,
    ins_dep      char(3) NULL,
    cod_banco    varchar2(15) NULL, --este por si el cod de la ins dep es diferente al de los bancos de asobancaria
    CONSTRAINT PK_fdt_bancos_ins_dep PRIMARY KEY (banco, ins_dep)
    USING INDEX TABLESPACE TS_ADAMINDICES
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fdt_bancos_ins_dep FOR ADAM.fdt_bancos_ins_dep;
GRANT ALL ON fdt_bancos_ins_dep TO ADAMA;

CREATE TABLE fdt_bancos_mm
(
	id_rep     smallint NOT NULL,
	usuariow	 varchar2(30) NOT NULL,
	banco		   number(3),
  sec_archivo number(3) NOT NULL, --por si se manejan varios archivos. Es la sec configurada en la tabla fdt_rutas
	secuencia  number(6) NULL ,
	registros  varchar2(2000) NULL
)
TABLESPACE TS_ADAMDATOS;

DROP INDEX in_fdt_bancos_mm01;
CREATE INDEX in_fdt_bancos_mm01 ON fdt_bancos_mm(id_rep, usuariow, banco) TABLESPACE TS_ADAMINDICES;

CREATE PUBLIC SYNONYM fdt_bancos_mm FOR ADAM.fdt_bancos_mm;
GRANT ALL ON fdt_bancos_mm TO ADAMA;

CREATE TABLE fdt_bancos_rep
(
	id_rep     smallint NOT NULL,
	usuariow	 varchar2(30) NOT NULL,
	banco		   number(3),
	fecha		   date,
	responsable  varchar2(20),
	trabajador	 char(10),
	importe		 number(19,6),
	cuenta_dep	 varchar2(20),
	simbolo_moneda	char(5)
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fdt_bancos_rep FOR ADAM.fdt_bancos_rep;
GRANT ALL ON fdt_bancos_rep TO ADAMA;
CREATE TABLE fdt_bancos_resultados
(
	id_rep     smallint NOT NULL,
	usuariow	 varchar2(30) NOT NULL,
  banco number(3),
  trabajadores smallint,
  valor_total number(19,6)
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fdt_bancos_resultados FOR ADAM.fdt_bancos_resultados;
GRANT ALL ON fdt_bancos_resultados TO ADAMA;
CREATE TABLE fdt_bancos_tmp
(
  id_rep smallint NOT NULL, 
  usuariow varchar2(30) NOT NULL, 
  compania char(4) NULL,
  clase_nomina char(2) NULL, 
  id_calendario number(5) NULL, 
  trabajador char(10) NOT NULL, 
  importe number(13,2) NOT NULL, 
  ins_dep varchar2(15) NULL, 
  cuenta_dep varchar2(20) NULL, 
  simbolo_mon	char(5) NULL, 
  tipo number(1) NOT NULL,
  numero_liquidacion number(5,0) NULL, --este es para la interactiva
  tipo_cuenta char(5) NULL,  --ahorros, corrientes...
  tipo_doc char(5) NULL  --tipo de documento, CC, CE...
) 
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM fdt_bancos_tmp FOR ADAM.fdt_bancos_tmp;
GRANT ALL ON fdt_bancos_tmp TO ADAMA;
DROP TABLE ri_liq_procesar;
CREATE TABLE ri_liq_procesar
(
  id_rep smallint NOT NULL,
  compania char(4) NOT NULL,
  numero_liquidacion number(5) NOT NULL,
  trabajador char(10) NOT NULL,
  usuariow varchar2(30) NULL,
  tipo_nomina char(2) NULL --se agrega para los reportes de liquidacion definitiva, se manejan 2 tipos de nomina
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM ri_liq_procesar FOR ADAM.ri_liq_procesar;
GRANT ALL ON ri_liq_procesar TO ADAMA;

CREATE TABLE ri_procesar
(
  id_rep       smallint NOT NULL,
  usuariow	   varchar2(30) NOT NULL,
  grupo_nom    char(6) NULL,
  compania     char(4) NULL,
  clase_nomina char(2) NULL,
  tipo_nomina  char(2) NULL,
  anio         number(5) NULL,
  periodo      number(3) NULL,
  concepto	   number(5) NULL
)
TABLESPACE TS_ADAMDATOS;

CREATE PUBLIC SYNONYM ri_procesar FOR ADAM.ri_procesar;
GRANT ALL ON ri_procesar TO ADAMA;

CREATE OR REPLACE VIEW vw_fdt_bancos
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Configuracion de Bancos	        ***/
/*** Descripcion: muestra detalles de las tablas fdt_bancos      ***/
/*** y fdt_bancos_cias_datos      								                ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 11 de 2005                                      ***/
/********************************************************************/
SELECT
    bc.compania, a.banco, a.descripcion, bcd.cuenta, bcd.tipo_cta, bcd.oficina_cta, 
    bcd.concepto1, bcd.concepto2, bcd.concepto3, bcd.concepto4, bcd.concepto5, bcd.simbolo_moneda, 
    bcd.responsable, bcd.registro_fiscal, a.proc_generacion
FROM 
    fdt_bancos a, fdt_bancos_cias bc, fdt_bancos_cias_datos bcd
WHERE a.banco = bc.banco 
AND bc.banco = bcd.banco 
AND bc.compania = bcd.compania;

CREATE PUBLIC SYNONYM vw_fdt_bancos FOR ADAM.vw_fdt_bancos;
GRANT ALL ON vw_fdt_bancos TO ADAMA;


CREATE OR REPLACE PROCEDURE sp_fdt_upd_bancos_detalle
(
    pch_compania     char,
    pti_banco        number,
    pvc_descripcion  varchar2,
    pvc_cuenta       varchar2,
    pti_tipo_cta     number,
    pvc_oficina_cta  varchar2,
    psi_concepto1     number,
    psi_concepto2     number,
    psi_concepto3     number,
    psi_concepto4     number,
    psi_concepto5     number,                
    pch_simb_moneda  char,
    pvc_responsable  varchar2,
    pvc_registro_fiscal varchar2,
    pch_operacion    char,
    pvc_usuario      varchar2,
    pvc_proc_generar varchar
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Configuracion de Bancos          ***/
/*** Descripcion: Modifica detalles de las tablas fdt_bancos      ***/
/*** y fdt_bancos_cias_datos      								                ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 11 de 2005                                      ***/
/********************************************************************/
  vnm_existe      number(1);
BEGIN
  UPDATE fdt_bancos 
  SET descripcion = pvc_descripcion,
  proc_generacion = pvc_proc_generar
  WHERE banco = pti_banco;

  vnm_existe := 0;
  BEGIN
    SELECT 1
    INTO vnm_existe
    FROM fdt_bancos_cias_datos
    WHERE banco = pti_banco
		AND compania = pch_compania;
    EXCEPTION
       WHEN OTHERS THEN vnm_existe := 0;        
  END;
  
  IF vnm_existe = 1 THEN--1
    UPDATE fdt_bancos_cias_datos
    SET cuenta = pvc_cuenta,
        tipo_cta = pti_tipo_cta,
        oficina_cta = pvc_oficina_cta,
        concepto1 = psi_concepto1,
        concepto2 = psi_concepto2,
        concepto3 = psi_concepto3,
        concepto4 = psi_concepto4,
        concepto5 = psi_concepto5,        
        simbolo_moneda = pch_simb_moneda,
        responsable = pvc_responsable,
        registro_fiscal = pvc_registro_fiscal
    WHERE compania = pch_compania And
          banco = pti_banco;
  ELSE
		INSERT INTO fdt_bancos_cias_datos 
		(banco, compania, cuenta, tipo_cta, oficina_cta, concepto1, concepto2, concepto3, concepto4, concepto5, simbolo_moneda, responsable, registro_fiscal)
		VALUES (pti_banco,pch_compania, pvc_cuenta, pti_tipo_cta, pvc_oficina_cta, psi_concepto1, psi_concepto2, psi_concepto3, psi_concepto4, psi_concepto5,
				pch_simb_moneda, pvc_responsable, pvc_registro_fiscal);          
  END IF;--1
   
  COMMIT WORK;
END;
/

CREATE PUBLIC SYNONYM sp_fdt_upd_bancos_detalle FOR ADAM.sp_fdt_upd_bancos_detalle;
GRANT EXECUTE ON sp_fdt_upd_bancos_detalle TO adama;
CREATE OR REPLACE PROCEDURE sp_fdt_upd_bancos_ins_dep
(
  pnu_banco  number,
  pch_ins_dep char,
  pch_cod_banco varchar2,
  pnu_operacion number DEFAULT 1    --1:Alta, 2:baja, 3: actualizacion
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Configuracion de Bancos          ***/
/*** Descripcion: crea registros en las tablas fdt_bancos_ins_dep ***/
/*** y borra tambien    								                          ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 10 de 2005                                      ***/
/********************************************************************/
BEGIN
     IF pnu_operacion = 1 THEN
        INSERT INTO fdt_bancos_ins_dep (banco, ins_dep, cod_banco)
        VALUES (pnu_banco, pch_ins_dep, pch_cod_banco);    
     END IF;
     
     IF pnu_operacion = 2 THEN
        DELETE fdt_bancos_ins_dep
        WHERE banco = pnu_banco
        AND ins_dep = pch_ins_dep;
     END IF;     
     
     IF pnu_operacion = 3 THEN
        UPDATE fdt_bancos_ins_dep
        SET cod_banco = pch_cod_banco
        WHERE banco = pnu_banco
        AND ins_dep = pch_ins_dep;                
     END IF;
     
     COMMIT WORK;
END;
/
CREATE PUBLIC SYNONYM sp_fdt_upd_bancos_ins_dep FOR ADAM.sp_fdt_upd_bancos_ins_dep;
GRANT EXECUTE ON sp_fdt_upd_bancos_ins_dep TO adama;
CREATE OR REPLACE PROCEDURE sp_fdt_upd_bancos
(
    pch_compania char,
    pti_relacionado number,
    pti_banco number,
    pvc_descripcion varchar2,
    pti_operacion number DEFAULT 1 --1:alta, 2:modificacion
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Configuracion de Bancos          ***/
/*** Descripcion: crea registros en las tablas fdt_bancos         ***/
/*** y fdt_bancos_cias_datos      								                ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 10 de 2005                                      ***/
/********************************************************************/
  vvc_cuenta       varchar2(30);
  vti_tipo_cta     numeric(1);
  vvc_oficina_cta  varchar2(15);
  vsi_concepto1     number(5);
  vsi_concepto2     number(5);
  vsi_concepto3     number(5);
  vsi_concepto4     number(5);
  vsi_concepto5     number(5);
  vch_simb_moneda  char(5);
  vvc_responsable  varchar2(20);
  vvc_registro_fiscal varchar2(20);
  
  vvc_ruta         varchar2(100);
  vvc_nombre       varchar2(50);
  vvc_nombre2      varchar2(50);
  vti_archivos     number(2);
  
  vvc_usuario	  varchar2(30);
  vti_reporte	  number(1);
  vvc_proc_generar varchar2(30);

  vnm_existe      number(1);
  vnu_banco       number(3);
BEGIN--1
    vvc_usuario := user;

    vnm_existe := 0;
    BEGIN
      SELECT 1
      INTO vnm_existe
      FROM fdt_bancos WHERE banco = pti_banco;
      EXCEPTION
              WHEN OTHERS THEN vnm_existe := 0;        
    END;

    IF vnm_existe = 1 THEN --1. DCRP,Feb23/2005, No esta respetando que existan ya otros bancos con ese codigo
		  IF pti_operacion = 1 THEN
		      BEGIN
      	     RAISE_APPLICATION_ERROR(-20001,'El codigo del banco que quiere insertar ya existe. verifique por favor.');
             RETURN;       
		      END;
      END IF;
  		
      IF pti_operacion = 2 THEN
  			      UPDATE fdt_bancos SET descripcion = pvc_descripcion WHERE banco = pti_banco;		
      END IF;
    
    ELSE
          INSERT INTO fdt_bancos (banco, descripcion) VALUES(pti_banco, pvc_descripcion);
    END IF;--1

    IF pti_relacionado = 1 THEN--2
      vnm_existe := 0;
      BEGIN
        SELECT 1
        INTO vnm_existe
        FROM fdt_bancos_cias WHERE compania = pch_compania AND banco = pti_banco;
        EXCEPTION
                WHEN OTHERS THEN vnm_existe := 0;        
      END;

      IF vnm_existe = 0 THEN--3
         INSERT INTO fdt_bancos_cias (compania, banco) VALUES (pch_compania, pti_banco);
			   INSERT INTO fdt_bancos_cias_datos (compania, banco) VALUES (pch_compania, pti_banco);
         --Buscamos el banco 1 que se lleno, para guardar los mismos datos del detalle
         vnu_banco := '';
         BEGIN
            SELECT MIN(banco)
            INTO vnu_banco
            FROM fdt_bancos_cias_datos;
            EXCEPTION
                WHEN TOO_MANY_ROWS THEN
                  BEGIN
                    SELECT MIN(banco)
                    INTO vnu_banco
                    FROM fdt_bancos_cias_datos
                    WHERE compania = pch_compania;
                    EXCEPTION
                       WHEN OTHERS THEN vnu_banco := '';
                  END;
                WHEN NO_DATA_FOUND THEN vnu_banco := '';
                WHEN OTHERS THEN vnu_banco := '';                  
         END;
         IF LTRIM(RTRIM(vnu_banco)) <> '' THEN --4
            BEGIN
        				SELECT cuenta,
        					   tipo_cta,
        					   oficina_cta,
        					   concepto1,
                     concepto2,
                     concepto3,
                     concepto4,
                     concepto5,
        					   simbolo_moneda,
        					   responsable,
        					   registro_fiscal,
        					   /*ruta,
        					   nombre,
        					   nombre2,
        					   archivos,
        					   reporte,*/
        					   proc_generacion
                INTO vvc_cuenta,
        					   vti_tipo_cta,
        					   vvc_oficina_cta,
        					   vsi_concepto1,
                     vsi_concepto2,
                     vsi_concepto3,
                     vsi_concepto4,
                     vsi_concepto5,
        					   vch_simb_moneda,
        					   vvc_responsable,
        					   vvc_registro_fiscal,
        					   /*vvc_ruta,
        					   vvc_nombre,
        					   vvc_nombre2,
        					   vti_archivos,
        					   vti_reporte,*/
        					   vvc_proc_generar
        				FROM vw_fdt_bancos
        				WHERE banco = vnu_banco;                        
            END;
            
/*            --trayendo la ruta del banco
            BEGIN
               SELECT ruta, archivo
               INTO vvc_ruta, vvc_nombre
               FROM vw_dt_rutas
               WHERE banco = vnu_banco
               AND secuencia = 1;            
            END; 

            BEGIN
               SELECT archivo
               INTO vvc_nombre2
               FROM vw_dt_rutas
               WHERE banco = vnu_banco
               AND secuencia = 2;            
            END; 
*/            
            --ejecutamos el procedimiento
            BEGIN
              sp_fdt_upd_bancos_detalle (pch_compania, pti_banco, pvc_descripcion, vvc_cuenta, vti_tipo_cta, vvc_oficina_cta, 
                                         vsi_concepto1, vsi_concepto2, vsi_concepto3, vsi_concepto4, vsi_concepto5, vch_simb_moneda, vvc_responsable, vvc_registro_fiscal, 
                                         'FCO1070', /*vvc_usuario*/'TODOS', vvc_proc_generar);                                                                                  
            END;
            
            vnm_existe := 0;
            BEGIN
              SELECT 1
              INTO vnm_existe
              FROM fdt_bancos_ins_dep
              WHERE banco = vnu_banco;
              EXCEPTION
                      WHEN OTHERS THEN vnm_existe := 0;        
            END;
            
            IF vnm_existe = 0 THEN --Si no existe            
                --ahora insertamos las instituciones de deposito existentes
                INSERT INTO fdt_bancos_ins_dep ( banco, ins_dep, cod_banco)
                SELECT pti_banco, ins_dep, cod_banco
                FROM fdt_bancos_ins_dep
                WHERE banco = vnu_banco;
            END IF;     
         END IF;--4
      END IF;--3  
        
    ELSE
       DELETE FROM fdt_bancos_cias WHERE compania = pch_compania AND banco = pti_banco;
       DELETE FROM fdt_bancos_cias_datos WHERE compania = pch_compania AND banco = pti_banco;        
    END IF;--2

    COMMIT WORK;        
END;--1
/
CREATE PUBLIC SYNONYM sp_fdt_upd_bancos FOR ADAM.sp_fdt_upd_bancos;
GRANT EXECUTE ON sp_fdt_upd_bancos TO adama;
