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;
