CREATE OR REPLACE VIEW vw_fdt_bancos_err
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Configuracion de Bancos	        ***/
/*** Descripcion: Muestra los errores del banco 	                ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Junio 8/2005                                          ***/
/********************************************************************/
SELECT a.id_rep, a.usuariow, a.banco, a.trabajador, a.numero_liquidacion,
a.cod_error, a.error,
SUBSTR(REPLACE(LTRIM(RTRIM(b.nombre)),'/',' '),1,40) as nombre, 
b.clave_unica, c.descripcion
FROM fdt_bancos_err a, trabajadores b, fdt_bancos c
WHERE a.banco = c.banco
AND a.trabajador = b.trabajador;

CREATE PUBLIC SYNONYM vw_fdt_bancos_err FOR ADAM.vw_fdt_bancos_err;
GRANT ALL ON vw_fdt_bancos_err TO ADAMA;
CREATE OR REPLACE VIEW vw_fdt_bancos_rep
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Configuracion de Bancos	        ***/
/*** Descripcion: Muestra informacion de la tabla de reporte	      ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 11/2005                                         ***/
/********************************************************************/
SELECT a.id_rep, a.usuariow, a.banco, a.fecha, a.responsable,
a.trabajador, a.importe, a.cuenta_dep, LTRIM(RTRIM(a.simbolo_moneda)) as simbolo_moneda,
SUBSTR(REPLACE(LTRIM(RTRIM(b.nombre)),'/',' '),1,40) as nombre, 
b.clave_unica, c.descripcion
FROM fdt_bancos_rep a, trabajadores b, fdt_bancos c
WHERE a.banco = c.banco
AND a.trabajador = b.trabajador;

CREATE PUBLIC SYNONYM vw_fdt_bancos_rep FOR ADAM.vw_fdt_bancos_rep;
GRANT ALL ON vw_fdt_bancos_rep TO ADAMA;
CREATE OR REPLACE VIEW vw_ri_liquidaciones
AS
SELECT 
    le.compania,
    le.numero_liquidacion, 
    le.trabajador, 
    SUBSTR(REPLACE(t.nombre, '/', ' '),1,40) AS nombre, 
    le.tipo_nomina,
    le.fecha_liquidacion, 
    le.fecha_base,
    (SELECT importe FROM liquidaciones_det ld 
    WHERE ld.compania = le.compania 
    AND ld.tipo_nomina = le.tipo_nomina 
    AND ld.anio_acumular = le.anio_acumular
    AND ld.mes_acumular = le.mes_acumular
    AND ld.numero_liquidacion = le.numero_liquidacion
    AND ld.trabajador = le.trabajador 
    AND ld.concepto = (SELECT x.entero FROM parametros_rh x
		       WHERE x.compania = le.compania AND x.parametro_rh = 'Conc_Neto')) AS neto,
    CASE WHEN FLOOR((((To_Number(To_Char(sysdate,'yyyy'))
			* 360) + (To_Number(To_Char(sysdate,'mm')) * 30) +
			(To_Number(To_Char(sysdate,'dd')))) -
			((To_Number(To_Char(le.fecha_liquidacion,'yyyy')) * 360) +
			(To_Number(To_Char(le.fecha_liquidacion,'mm')) * 30) +
			(To_Number(To_Char(le.fecha_liquidacion,'dd')))) + 1)/30) > 1 THEN 0 ELSE 1 END AS reciente    
FROM 
    liquidaciones_enc le, trabajadores t, trabajadores_grales tg
WHERE
    t.trabajador = tg.trabajador AND
    le.compania = tg.compania AND
    le.trabajador = tg.trabajador AND
    --le.tipo_nomina = 'LV' AND
-- CONDICIONES PARA VALIDAR LA SEGURIDAD
    -- AUTORIZACION A LA COMPANIA
    USER IN (SELECT usuario FROM aut_companias x WHERE x.compania = le.compania) AND
    -- AUTORIZACION POR CLASE DE NOMINA
    USER IN (SELECT usuario FROM rel_usu_clase_nom r1
                    WHERE r1.clase_nomina = tg.clase_nomina) AND                    
    -- AUTORIZACION POR AGRUPACIONES
    NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                  AND r2.compania = le.compania AND r2.trabajador = le.trabajador
                  AND u2.usuario = USER);

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


CREATE OR REPLACE PROCEDURE sp_fdt_del_bancos
(
    pch_compania char,
    pti_banco number
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia                                    ***/
/*** Descripcion: borra registros de las tablas fdt_bancos        ***/
/*** y fdt_bancos_cias_datos y fdt_bancos_cias  				          ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 11 de 2005                                      ***/
/********************************************************************/
  vnm_existe      number(1);
BEGIN
    vnm_existe := 0;
    BEGIN
      SELECT 1
      INTO vnm_existe
      FROM fdt_bancos_cias
      WHERE banco = pti_banco AND compania <> pch_compania;
      EXCEPTION
              WHEN OTHERS THEN vnm_existe := 0;        
    END;
      
    IF vnm_existe = 1 THEN
        RAISE_APPLICATION_ERROR(-20001,'Este Banco no se puede eliminar porque tiene relación con otras compañías');
        RETURN;        
    END IF;
        
    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;
    DELETE FROM fdt_bancos_ins_dep WHERE banco = pti_banco;
    DELETE FROM fdt_bancos WHERE banco = pti_banco;
	  DELETE FROM fdt_rutas WHERE codigo = pti_banco AND operacion = 'FCO1070';
    
    COMMIT WORK;
END;
/
CREATE PUBLIC SYNONYM sp_fdt_del_bancos FOR ADAM.sp_fdt_del_bancos;
GRANT EXECUTE ON sp_fdt_del_bancos TO adama;

CREATE OR REPLACE PROCEDURE sp_fdt_del_bancos_proc
(
  psi_id_rep  smallint,
  pvc_usuario varchar2,
  pti_banco   number
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia                                    ***/
/*** Descripcion: borra registros de las tablas usadas en bancos  ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Abril 27 de 2005                                      ***/
/********************************************************************/

BEGIN

     DELETE FROM ri_procesar 
     WHERE id_rep = psi_id_rep AND usuariow = pvc_usuario;

     DELETE FROM ri_liq_procesar 
     WHERE id_rep = psi_id_rep AND usuariow = pvc_usuario;     

     DELETE FROM fdt_bancos_mm
     WHERE id_rep = psi_id_rep AND usuariow = pvc_usuario
     AND banco = pti_banco;

     DELETE FROM fdt_bancos_resultados 
     WHERE id_rep = psi_id_rep AND usuariow = pvc_usuario
     AND banco = pti_banco;

     DELETE FROM fdt_bancos_rep
     WHERE id_rep = psi_id_rep AND usuariow = pvc_usuario
     AND banco = pti_banco;

    DELETE FROM fdt_bancos_tmp
    WHERE id_rep = psi_id_rep AND usuariow = pvc_usuario;
    
    DELETE FROM fdt_bancos_err
    WHERE id_rep = psi_id_rep AND usuariow = pvc_usuario;
    
    COMMIT WORK;

END;
/
CREATE PUBLIC SYNONYM sp_fdt_del_bancos_proc FOR ADAM.sp_fdt_del_bancos_proc;
GRANT EXECUTE ON sp_fdt_del_bancos_proc TO adama;
CREATE OR REPLACE PROCEDURE sp_fdt_gen_medios_bancos
(
  psi_id_rep  smallint,
  pvc_usuario varchar2,
  pti_banco   number,
  pdt_fecha   varchar2 DEFAULT NULL,
  pvc_responsable varchar2 DEFAULT '',
  pti_origen number DEFAULT 1, -- 1: de NS, 2: de NI
  pti_filtra_cta number DEFAULT 0  --0: no filtra, 1: si filtra 
)
AS
/**********************************************************************/
/*** Modulo:      Módulo Fiscal ADAM V.3 - Medios Magneticos Bancos ***/
/*** Descripcion: Llama al procedimiento de generacion del archivo  ***/
/***              plano respectivo al banco recibido                ***/
/*** Autor:	  Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	  Marzo 14 de 2005. Version Oracle                      ***/
/**********************************************************************/
/*** Se hace la moficacion, para poder llamar el ***/
/*** sp de medios para interactiva. La unica condicion es que el  ***/
/*** medio sea igual en nombre al ns, con terminacion ni al final ***/
	vvc_proc_genera	varchar2(30);
	vvc_ssql			varchar2(2000);
	vvc_banco			varchar2(10);
  
  vin_id_cursor integer;
  vin_rows      integer;
  sComilla      char(1);
  ejecutar_sp   EXCEPTION;
  vnu_len       number(7);
BEGIN
  sComilla := chr(39);
	--trayendo el nombre del procedimiento
  vvc_proc_genera := '';
  vnu_len := 0;
  BEGIN 
  	SELECT proc_generacion
    INTO vvc_proc_genera
  	FROM fdt_bancos
  	WHERE banco = pti_banco;
    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);  
  
  DBMS_OUTPUT.PUT_LINE('0 - vnu_len'||vnu_len);  
	IF vnu_len = 0 THEN
		vvc_banco := LTRIM(RTRIM(pti_banco));
    RAISE_APPLICATION_ERROR(-20001, 'Error de datos: No existe la funcion de generacion para el banco: '||vvc_banco);
    RETURN; 
	END IF;
  DBMS_OUTPUT.PUT_LINE('1 - vvc_proc_genera: '||ltrim(rtrim(vvc_proc_genera)));  
	IF pti_origen = 2 THEN -- viene de interactiva
		vvc_proc_genera := LTRIM(RTRIM(vvc_proc_genera)) || '_ni';
  END IF;  
	--armando la fecha
               
DBMS_OUTPUT.PUT_LINE('1A - pdt_fecha: '||pdt_fecha);  
	--armando la cadena a ejecutar
--  COMMIT;
--  SET TRANSACTION USE ROLLBACK SEGMENT RBS0;
  vvc_ssql := vvc_proc_genera || ' ' || '(' || RTRIM(psi_id_rep) || ',' ||
              sComilla || pvc_usuario || sComilla || ',' || RTRIM(pti_banco) || ',' ||
              sComilla || pdt_fecha || sComilla || ',' ||
              sComilla || pvc_responsable || sComilla || ',' ||
              RTRIM(pti_filtra_cta) || ');';
  BEGIN
DBMS_OUTPUT.PUT_LINE('2 - vvc_ssql: '||vvc_ssql);
      EXECUTE IMMEDIATE 'BEGIN '||vvc_ssql||' END;';
  EXCEPTION
      WHEN OTHERS THEN
          --RAISE ejecutar_sp;
          RAISE_APPLICATION_ERROR(-20002, SQLCODE||SQLERRM(SQLCODE));
          RETURN;
  END;
  COMMIT;

  EXCEPTION
  WHEN ejecutar_sp THEN
       RAISE_APPLICATION_ERROR(-20001, 'Error al ejecutar el procedimiento de medios del banco: '||vvc_banco);
       RETURN;                    
  WHEN OTHERS THEN
           RAISE_APPLICATION_ERROR(-20002, SQLCODE||SQLERRM(SQLCODE));
           RETURN;  
END;
/
CREATE PUBLIC SYNONYM sp_fdt_gen_medios_bancos FOR ADAM.sp_fdt_gen_medios_bancos;
GRANT EXECUTE ON sp_fdt_gen_medios_bancos TO adama;

