IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_ACH_bogota') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_ACH_bogota
GO
CREATE PROCEDURE sp_fco_gen_bco_ACH_bogota
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por ACH del Banco de Bogota             ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 14/2005                                         ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL

      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

    --armamos la estructura del archivo plano. La cabeza
--Aqui queda el valor de cuenta, tipo cuenta de la ultima cia recorrida
    INSERT INTO
      fdt_bancos_mm (id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT
      @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
      '1' +
      CONVERT(char(8), @vdt_fecha_hoy, 112) +
      REPLICATE('0', 24) +
      ISNULL(@vti_tipo_cta,0) +
      REPLICATE('0', 8) +
			REPLICATE('0', 9 - LEN(LTRIM(RTRIM(@vvc_cuenta_bco)))) + LTRIM(RTRIM(@vvc_cuenta_bco)) +
			LTRIM(RTRIM(nombre_cia)) + SPACE(40 - LEN(LTRIM(RTRIM(nombre_cia)))) +
			REPLICATE('0', 11 - LEN(LTRIM(RTRIM(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))))) + LTRIM(RTRIM(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) +
      '001' +
      '0001' +
      CONVERT(char(8), @pdt_fecha, 112) +
			REPLICATE('0', 3 - LEN(SUBSTRING(LTRIM(RTRIM(ISNULL(@vvc_cuenta_bco,'0'))), 1, 3))) + SUBSTRING(LTRIM(RTRIM(ISNULL(@vvc_cuenta_bco,'0'))), 1, 3) +
      'N' +
      REPLICATE(' ', 49) +
      REPLICATE(' ', 80)
    FROM
      companias
    WHERE
      compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)
  
  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2, 
    '2' +
		SUBSTRING(LTRIM(ISNULL(tns.tipo_doc,'C')), 1, 1) +
		REPLICATE('0', 11 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 11))) + SUBSTRING(LTRIM(t.clave_unica), 1, 11) +
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(40 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) +
    '0' +
    RTRIM(LTRIM(tns.tipo_cuenta)) +
		SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) + SPACE(17 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) +
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(ISNULL(tns.importe,0))))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(ISNULL(tns.importe,0))))) + 
    'A' +
    '000' +
	  RTRIM(LTRIM(ISNULL(tns.ins_dep,'0'))) +
    '0001' +
    REPLICATE(' ', 10) +
		'PAGO DE NOMINA' + SPACE(70 - LEN('PAGO DE NOMINA')) +
    '0' +
    REPLICATE('0', 10) +
    'N' +
    REPLICATE(' ', 48) +
    'N' +
    REPLICATE(' ', 8)
    FROM trabajadores t , fdt_bancos_tmp tns
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_ACH_bogota TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_ACH_gnbs') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_ACH_gnbs
GO
CREATE PROCEDURE sp_fco_gen_bco_ACH_gnbs
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por ACH del GNBSudameris                ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Sept 15/2005                                         ***/
/********************************************************************/
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL
      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

			--Armando el mensaje
			IF @cch_tipo_nom = 'QN'
			BEGIN--QN
			  SELECT   
			    @vvc_mensaje =  
			  CASE @cnu_periodo  
			    WHEN 1 THEN '1A QUINC. ENE'   
			    WHEN 2 THEN '2A QUINC. ENE'  
			    WHEN 3 THEN '1A QUINC. FEB'  
			    WHEN 4 THEN '2A QUINC. FEB'  
			    WHEN 5 THEN '1A QUINC. MAR'  
			    WHEN 6 THEN '2A QUINC. MAR'  
			    WHEN 7 THEN '1A QUINC. ABR'  
			    WHEN 8 THEN '2A QUINC. ABR'  
			    WHEN 9 THEN '1A QUINC. MAY'  
			    WHEN 10 THEN '2A QUINC. MAY'  
			    WHEN 11 THEN '1A QUINC. JUN'  
			    WHEN 12 THEN '2A QUINC. JUN'  
			    WHEN 13 THEN '1A QUINC. JUL'  
			    WHEN 14 THEN '2A QUINC. JUL'  
			    WHEN 15 THEN '1A QUINC. AGO'  
			    WHEN 16 THEN '2A QUINC. AGO'  
			    WHEN 17 THEN '1A QUINC. SEP'  
			    WHEN 18 THEN '2A QUINC. SEP'  
			    WHEN 19 THEN '1A QUINC. OCT'  
			    WHEN 20 THEN '2A QUINC. OCT'  
			    WHEN 21 THEN '1A QUINC. NOV'  
			    WHEN 22 THEN '2A QUINC. NOV'  
			    WHEN 23 THEN '1A QUINC. DIC'  
			    WHEN 24 THEN '2A QUINC. DIC'  
			  END  
			  
			  SET @vvc_mensaje = 'NOMINA ' + LTRIM(RTRIM(@vvc_mensaje)) + '/' + LTRIM(RTRIM(@cnu_anio))
			END--QN
			ELSE
			  SET @vvc_mensaje = 'NOMINA ' + LTRIM(RTRIM(@cch_tipo_nom)) + ' Periodo ' + LTRIM(RTRIM(@cnu_periodo)) + '/' + LTRIM(RTRIM(@cnu_anio))

			UPDATE fdt_bancos_tmp
			SET mensaje = @vvc_mensaje
			FROM fdt_bancos_tmp c
			WHERE c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc, mensaje)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc, tn.mensaje
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc, tn.mensaje

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

		--Armamos la estructura que necesita el banco.
		--Esta estructura la personalizo asi el banco, puede que otro banco la personalice diferente
		--El orden de los campos es el mismo, solo cambia el tamaño.

		INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
		SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
		REPLICATE(' ', 16 - LEN (LTRIM(RTRIM(@vvc_cuenta_bco)))) + LTRIM(RTRIM(@vvc_cuenta_bco)) + --nro de cuenta a debitar
		REPLICATE(' ', 2 - LEN (LTRIM(RTRIM(@vti_tipo_cta)))) + LTRIM(RTRIM(@vti_tipo_cta)) + --tipo de cuenta
		SUBSTRING(LTRIM(RTRIM(tns.ins_dep)),1, 6) + SPACE(6 - LEN(LTRIM(RTRIM(tns.ins_dep)))) + --codigo del banco a acreditar
--		SUBSTRING(LTRIM(RTRIM(tns.cuenta_dep)), 1, LEN(LTRIM(RTRIM(tns.cuenta_dep))) - 1) + SPACE(16 - LEN(SUBSTRING(LTRIM(RTRIM(tns.cuenta_dep)), 1, LEN(LTRIM(RTRIM(tns.cuenta_dep))) - 1))) + --Nro de cuenta a acreditar
--		CASE RIGHT(LTRIM(RTRIM(tns.cuenta_dep)),1) WHEN 'D' THEN ' 1' WHEN 'S' THEN ' 2' ELSE ' 2' END + --tipo de cuenta a acreditar
		LTRIM(RTRIM(tns.cuenta_dep)) + SPACE (16 - LEN(LTRIM(RTRIM(tns.cuenta_dep)))) + --Nro de cuenta a acreditar
		REPLICATE(' ', 2 - LEN(LTRIM(RTRIM(tns.tipo_cuenta)))) + LTRIM(RTRIM(tns.tipo_cuenta)) + --tipo de cuenta a acreditar
		REPLICATE(' ', 12 - LEN (SUBSTRING(LTRIM(RTRIM(ISNULL(t.clave_unica,''))), 1, 12))) + SUBSTRING(LTRIM(RTRIM(ISNULL(t.clave_unica,''))), 1, 12) + --nro de identificacion del destinatario
		SUBSTRING(LTRIM(RTRIM(REPLACE(t.nombre, '/', ' '))),1, 34) + SPACE(35 - LEN(SUBSTRING(LTRIM(RTRIM(REPLACE(t.nombre, '/', ' '))),1, 34))) + --nombre del destinatario de pago
		REPLICATE(' ', 15 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
		SUBSTRING(LTRIM(RTRIM(tns.mensaje)), 1, 80) + SPACE(80 - LEN(SUBSTRING(LTRIM(RTRIM(tns.mensaje)), 1, 80))) + --descripcion del pago
		SUBSTRING(LTRIM(RTRIM(ISNULL(t.e_mail,''))), 1, 80) + SPACE(80 - LEN(SUBSTRING(LTRIM(RTRIM(ISNULL(t.e_mail,''))), 1, 80))) --direccion de correo valida
		FROM fdt_bancos_tmp tns, trabajadores t
		WHERE tns.trabajador = t.trabajador 
		AND tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_ACH_gnbs TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_ACH_occi') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_ACH_occi
GO
CREATE PROCEDURE sp_fco_gen_bco_ACH_occi
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por ACH del Banco de Occidente          ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Julio 14/2005                                         ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint,

@vvc_comprobante varchar(10),
@vvc_nombre_cia varchar(60)
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL
      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

		--trayendo el nombre del cia:
		SET @vvc_nombre_cia = ''
		
		SELECT @vvc_nombre_cia = nombre_cia
		FROM companias
		WHERE compania = @cch_compania
      
		SET @vvc_comprobante =  '00' + LTRIM(RTRIM(@cnu_anio)) +
													  CASE LEN(LTRIM(RTRIM(@cnu_periodo))) WHEN 1 THEN '0'+LTRIM(RTRIM(@cnu_periodo)) 
																																 WHEN 2 THEN LTRIM(RTRIM(@cnu_periodo)) END

		--como se maneja un consecutivo, debemos hacer uso de una tabla temporal
		SELECT tns.trabajador, IDENTITY(smallint, 1, 1) as secuencia
		INTO #tmp_sec_bco
		FROM fdt_bancos_tmp tns
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, Abs(sec.secuencia)+1, 
    '2' + --constante
		REPLICATE('0', 4 - LEN(ABS(sec.secuencia))) + Abs(sec.secuencia) + --consecutivo
		REPLICATE('0', 16 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) + ISNULL(@vvc_cuenta_bco,'0') + --cuenta del banco
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(30 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) + --nombre del trabajador
		REPLICATE('0', 11 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 11))) + SUBSTRING(LTRIM(t.clave_unica), 1, 11) + --cedula
		REPLICATE('0', 4 - LEN(RTRIM(tns.ins_dep))) + RTRIM(tns.ins_dep) + --codigo del banco
    CONVERT(CHAR(8), @pdt_fecha, 112) + --fecha digitada en el front
		CASE LTRIM(RTRIM(tns.ins_dep)) WHEN '023' THEN '2' ELSE '3' END + --forma de pago
		REPLICATE('0', 15 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
		SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 2, 16) + SPACE(16 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 2, 16))) + --cuenta deposito
		LTRIM(RTRIM(@vvc_comprobante)) + REPLICATE('0', 4 - LEN(ABS(sec.secuencia))) + Abs(sec.secuencia) + --comprobante
    SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 1) + --tipo de cuenta
    ('Nomina ' + LTRIM(RTRIM(@vvc_nombre_cia))) + SPACE(80- LEN(('Nomina ' + LTRIM(RTRIM(@vvc_nombre_cia)))))
    FROM trabajadores t , fdt_bancos_tmp tns, #tmp_sec_bco sec
    WHERE t.trabajador = tns.trabajador
		AND tns.trabajador = sec.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)

  --insertamos la cabeza
  INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1, 
  '10000' + --constante
  CONVERT(CHAR(8), @pdt_fecha, 112) + --fecha digitada en el front
  REPLICATE('0', 4 - LEN(LTRIM(RTRIM(@vsi_nro_trab)))) + LTRIM(RTRIM(@vsi_nro_trab)) + --total registros del detalle
	REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) + --valor total del detalle
	REPLICATE('0', 16 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) + ISNULL(@vvc_cuenta_bco,'0') + --cuenta del banco
  REPLICATE('0', 148)
  
  --insertamos el pie
  INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, Abs(@vsi_nro_trab)+2, 
  '39999' + --constante
  REPLICATE('0', 4 - LEN(LTRIM(RTRIM(@vsi_nro_trab)))) + LTRIM(RTRIM(@vsi_nro_trab)) + --total registros del detalle
	REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) + --valor total del detalle  
  REPLICATE('0', 172)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

	DROP TABLE #tmp_sec_bco
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_ACH_occi TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_avvillas') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_avvillas
GO
CREATE PROCEDURE sp_fco_gen_bco_avvillas
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por avvillas                            ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Marzo 17/2005                                         ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL
      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

		--como se maneja un consecutivo, debemos hacer uso de una tabla temporal
		SELECT tns.trabajador, IDENTITY(smallint, 1, 1) as secuencia
		INTO #tmp_sec_bco
		FROM fdt_bancos_tmp tns
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      

		--utilizamos fijo la secuencia 1 del archivo de mm
		--registro de cabeza
		INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
		SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
		'01' +
		CONVERT(CHAR(8), @pdt_fecha, 112) +
		CONVERT(CHAR(8), @vdt_fecha_hoy, 108) +
		REPLICATE('0', 3 - LEN(SUBSTRING(ISNULL(@vvc_oficina_cta,'088'), 1, 3))) + SUBSTRING(ISNULL(@vvc_oficina_cta,'088'), 1, 3)+  --grabar 088
		'02' +
		'PAGO DE NOMINA' + SPACE(50 - LEN('PAGO DE NOMINA'))
        
  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, sec.secuencia+1,
    '02' + --tipo de registro
    '000023' + --pago de nomina
    '01' + --producto de origen
		REPLICATE('0', 16 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) + ISNULL(@vvc_cuenta_bco,'0') + --cuenta de la empresa
    '052' + --codigo de compensacion del bco destino
    '01' + --producto destino
		REPLICATE('0', 16 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 16))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 16) + --cuenta destino
		REPLICATE('0', 9 - LEN(LTRIM(RTRIM(sec.secuencia)))) + LTRIM(RTRIM(sec.secuencia)) + --secuencia
		REPLICATE('0', 16 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) + --valor a transferir
    REPLICATE('0', 16) + --numero de factura
    REPLICATE('0', 16) + --numero de credito de libranza
    REPLICATE('0', 16) + --valor credito de libranza
    REPLICATE('0', 30) + --nombre del beneficiario
    REPLICATE('0', 11) + --nit del beneficiario
    REPLICATE('0', 6) + --numero de autorizacion
    REPLICATE('0', 2) + --codigo de respuesta
    REPLICATE('0', 20)  --filler
    FROM fdt_bancos_tmp tns, #tmp_sec_bco sec
    WHERE tns.trabajador = sec.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

		INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
		SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 999999,
		'03' + --tipo de registro
		REPLICATE('0', 9 - LEN(LTRIM(RTRIM(@vsi_nro_trab)))) + LTRIM(RTRIM(@vsi_nro_trab)) + 
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) --valor total del detalle  

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

	DROP TABLE #tmp_sec_bco
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_avvillas TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fco_gen_bco_colmena') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_gen_bco_colmena
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_colmena
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por colmena                             ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = '01.IDENTIF'
  SET @vch_agr_cta = 'TIPO_CUENT'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL
      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

			--DCRP, Nov25/2005, parece que no siempre esta en una agrupacion, sino en un indice de informacion
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE SUBSTRING(a.dato_01,1,1) WHEN 'C' THEN '02' WHEN 'T' THEN '06' WHEN 'E' THEN '04' WHEN 'N' THEN '01' WHEN 'P' THEN '05' END
			FROM fdt_bancos_tmp c, inf_soc_trabajador a
			WHERE a.trabajador = c.trabajador
      AND a.indice_inf_soc = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario
			AND ISNULL(c.tipo_doc,'') = ''

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = CASE LTRIM(RTRIM(a.dato)) WHEN 'AHORROS' THEN '32' ELSE '22' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
    '6' +
 		RTRIM(LTRIM(ISNULL(tns.tipo_cuenta,'32'))) + --se deja fijo como ahorros para todos, ver si manejan corriente
		REPLICATE('0', 10 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) + '00' +  --Importe, parte entera
		REPLICATE(' ', 17 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) +
    '000010579' +
		SUBSTRING(LTRIM(ISNULL(t.clave_unica,'')), 1, 15) + SPACE(15 - LEN(SUBSTRING(LTRIM(ISNULL(t.clave_unica,'')), 1, 15))) +
		UPPER(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 22)))) + SPACE(22 - LEN(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 22 ))))) + --Nombre del beneficiario
    'V ' +
		'PAGO DE NOMINA' + SPACE(80 - LEN('PAGO DE NOMINA'))
    FROM fdt_bancos_tmp tns, trabajadores t
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_colmena TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_colombia') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_colombia
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_colombia
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por el Banco de Colombia                ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
--NOV-24-05: DCR, Este sp puede servir para Bancolombia y Convai, solo que en la configuracion de bancos 
--a la institucion de deposito Bancolombia se debe colocar 005600078 y para Convai 005701100
--y si se desea utilizar como ACH los codigos serian los siguientes:
--  '005600065' -- SANTANDER              
--  '005895142' -- DAVIVIENDA              
--  '005701304' -- GRANAHORRAR              
--  '005600010' -- BOGOTA              
--  '005600023' -- POPULAR              
--  '005600104' -- TSB BANK - ANGLO              
--  '005600078' -- BANCOLOMBIA              
--  '005600094' -- CITIBANK              
--  '005600052' -- BANCAFE              
--  '005600230' -- OCCIDENTE              
--  '005600829' -- CAJA SOCIAL              
--  '005600133' -- GANADERO              
--  '005600191' -- COLPATRIA              
--  '006013677' -- AV VILLAS              
--  '005701100' -- CONAVI              
--  '005701809' -- COLMENA              
--  '000001036' -- MEGABANCO              
--  '005600340' -- SUPERIOR              
--  '999999999' -- COOMEVA              
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = '01.IDENTIF'
  SET @vch_agr_cta = 'TIPO_CUENT'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, NULL, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL

      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

			--DCRP, Nov25/2005, parece que no siempre esta en una agrupacion, sino en un indice de informacion
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE SUBSTRING(a.dato_01,1,1) WHEN 'C' THEN '02' WHEN 'T' THEN '06' WHEN 'E' THEN '04' WHEN 'N' THEN '01' WHEN 'P' THEN '05' END
			FROM fdt_bancos_tmp c, inf_soc_trabajador a
			WHERE a.trabajador = c.trabajador
      AND a.indice_inf_soc = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario
			AND ISNULL(c.tipo_doc,'') = ''

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = CASE LTRIM(RTRIM(a.dato)) WHEN 'AHORROS' THEN '37' ELSE '27' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2, 
    '6' + --Tipo de registro
		REPLICATE('0', 15-LEN(SUBSTRING(LTRIM(ISNULL(t.clave_unica,'0')), 1, 15))) + SUBSTRING(LTRIM(ISNULL(t.clave_unica,'0')), 1, 15) + --Nit Beneficiario
		UPPER(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 18)))) + SPACE(18 - LEN(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 18 ))))) + --Nombre del beneficiario
    LTRIM(RTRIM(ISNULL(tns.ins_dep,''))) + --Banco cuenta del beneficiario
		REPLICATE('0', 17-LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) +--Numero de cuenta del beneficiario
    'S' + --Indicador Lugar de pago
		LTRIM(RTRIM(ISNULL(tns.tipo_cuenta,'37'))) + --se deja fijo como ahorros para todos, ver si manejan corriente
		REPLICATE('0', 10 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
    'PAGONOMIN' + --Concepto
		SPACE(12) + --referencia
    ' ' --relleno
    FROM trabajadores t , fdt_bancos_tmp tns
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

    --armamos la estructura del archivo plano. La cabeza
    --Aqui queda el valor de cuenta, tipo cuenta de la ultima cia recorrida
    INSERT INTO
      fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT
      @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
      '1' +  --Tipo de registro
			REPLICATE('0', 10 - LEN(SUBSTRING(REPLACE(REPLACE(registro_fiscal,'-',''),'.',''),1,9))) + SUBSTRING(REPLACE(REPLACE(registro_fiscal,'-',''),'.',''),1,9) + --Nit entidad que envia
			SUBSTRING(ISNULL(nombre_cia,''),1,16) + SPACE(16 - LEN(SUBSTRING(ISNULL(nombre_cia,''),1,16))) +  --Nombre entidad que envia
      '225' +  --Clase de transacciones contenidas
      'PAGO NOM  ' +  --Descripcion proposito transacciones
      CONVERT(CHAR(6), @pdt_fecha, 12) + --fecha transmision del lote
      'A' +  --Secuencia envio del lote
      CONVERT(CHAR(6), @pdt_fecha, 12) + --fecha aplicacion de transacciones
			REPLICATE('0', 6 - LEN(RTRIM(@vsi_nro_trab))) + RTRIM(@vsi_nro_trab) +  --Numero de registros
      '000000000000' +  --Sumatoria debitos        
			REPLICATE('0', 12 - LEN(RTRIM(Floor(@vdc_total)))) + RTRIM(Floor(@vdc_total)) +  --Numero de registros
			REPLICATE('0', 11 - LEN(SUBSTRING(@vvc_cuenta_bco, 1, 11))) + SUBSTRING(@vvc_cuenta_bco, 1, 11) +
      CASE @vti_tipo_cta WHEN 2 THEN 'S' ELSE 'D' END
    FROM
      companias
    WHERE
      compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)      

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_colombia TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_colpatria') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_colpatria
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_colpatria
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por la multibanca Colpatria             ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Enero 16/2006                                         ***/
/********************************************************************/
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint,
@vvc_cta_bco_gen char(8), -- la cuenta del banco generador
@vvc_fecha_formato char(8),
@vsi_reg_enviados integer
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = '01.IDENTIF'
  SET @vch_agr_cta = 'TIPO_CUENT'
	SET @vvc_cta_bco_gen = '19'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, NULL, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL

      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN 'C' WHEN '02' THEN 'E' WHEN '04' THEN 'N' WHEN '05' THEN 'P' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
            AND a.trabajador = c.trabajador
            AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

			--DCRP, Nov25/2005, parece que no siempre esta en una agrupacion, sino en un indice de informacion
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE SUBSTRING(a.dato_01,1,1) WHEN 'C' THEN 'C' WHEN 'T' THEN 'I' WHEN 'E' THEN 'E' WHEN 'N' THEN 'N' WHEN 'P' THEN 'P' END
			FROM fdt_bancos_tmp c, inf_soc_trabajador a
			WHERE a.trabajador = c.trabajador
            AND a.indice_inf_soc = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario
			--AND ISNULL(c.tipo_doc,'') = ''

            UPDATE fdt_bancos_tmp
            SET tipo_cuenta = CASE LTRIM(RTRIM(a.dato)) WHEN 'AHORROS' THEN '2' ELSE '1' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
            AND a.trabajador = c.trabajador
            AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

		SET @vvc_fecha_formato = CONVERT(CHAR(8), @pdt_fecha, 112)

		--como se maneja un consecutivo, debemos hacer uso de una tabla temporal, comienza en 2
		SELECT tns.trabajador, IDENTITY(smallint, 2, 1) as secuencia
		INTO #tmp_sec_bco
		FROM fdt_bancos_tmp tns
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, sec.secuencia,
		REPLICATE('0', 5 - LEN(LTRIM(RTRIM(sec.secuencia)))) + LTRIM(RTRIM(sec.secuencia)) + --numero secuencial de registro
		'02' + --tipo de registro
		CASE LTRIM(RTRIM(tns.ins_dep)) WHEN @vvc_cta_bco_gen THEN REPLICATE('0', 12 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 12))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 12) ELSE REPLICATE('0', 12) END + --numero de cuenta
		REPLICATE('0', 11-LEN(SUBSTRING(LTRIM(ISNULL(t.clave_unica,'0')), 1, 11))) + SUBSTRING(LTRIM(ISNULL(t.clave_unica,'0')), 1, 11) + --Nit Beneficiario
		UPPER(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 40)))) + SPACE(40 - LEN(LTRIM(RTRIM(SUBSTRING(dbo.fn_nombre_plano(LOWER(t.nombre)), 1, 40 ))))) + --Nombre del beneficiario
		CASE LTRIM(RTRIM(tns.ins_dep)) WHEN @vvc_cta_bco_gen THEN '902' ELSE '911' END + -- Codigo de transaccion
		'01' + --tipo de cargo a aplicar
		REPLICATE('0', 13 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) + '00' +  --valor neto pago
		SPACE(10) + --numero de factura
		REPLICATE('0', 6) + --numero de control de pago
		REPLICATE('0', 15) + --valor retencion en la fuente
		REPLICATE('0', 15) + --valor iva
		SUBSTRING(@vvc_fecha_formato, 7, 2) + SUBSTRING(@vvc_fecha_formato, 5, 2) + SUBSTRING(@vvc_fecha_formato, 1, 4) + --fecha del recibo de informacion DDMMAAAA
		REPLICATE('0', 10) + --numero nota debito
		REPLICATE('0', 15) + --valor nota debito
		REPLICATE('0', 8 - LEN(LTRIM(RTRIM(tns.ins_dep)))) + LTRIM(RTRIM(tns.ins_dep)) + --codigo de banco
		CASE LTRIM(RTRIM(tns.ins_dep)) WHEN @vvc_cta_bco_gen THEN REPLICATE('0', 17) ELSE REPLICATE('0', 17 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) END + --numero de cuenta
		LTRIM(RTRIM(ISNULL(tns.tipo_cuenta,'2'))) + --clase de cuenta
		LTRIM(RTRIM(ISNULL(tns.tipo_doc,'C'))) + --tipo de documento
		SPACE(4) + --espacios en blanco
		'PAGO DE NOMINA' + SPACE(66) --adenda
    FROM trabajadores t, fdt_bancos_tmp tns, #tmp_sec_bco sec
    WHERE t.trabajador = tns.trabajador
		AND tns.trabajador = sec.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

		SET @vsi_reg_enviados = @vsi_nro_trab + 2 --el total del detalle, mas la cabeza y el pie

    --armamos la estructura del archivo plano. La cabeza
    --Aqui queda el valor de cuenta, tipo cuenta de la ultima cia recorrida
    INSERT INTO
      fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT
      @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
			'00001' + -- numero secuencia del registro
			'01' + -- tipo de registro
			SUBSTRING(@vvc_fecha_formato, 7, 2) + SUBSTRING(@vvc_fecha_formato, 5, 2) + SUBSTRING(@vvc_fecha_formato, 1, 4) + --fecha del recibo de informacion DDMMAAAA
			REPLICATE('0', 11 - LEN(SUBSTRING(REPLACE(REPLACE(registro_fiscal,'-',''),'.',''),1,11))) + SUBSTRING(REPLACE(REPLACE(registro_fiscal,'-',''),'.',''),1,11) + --Nit del cliente
			REPLICATE(' ', 10 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_registro_fiscal)), 1, 10))) + SUBSTRING(LTRIM(RTRIM(@vvc_registro_fiscal)), 1, 10) + --clave (la guardamos en registro fiscal)
			REPLICATE('0', 6 - LEN(LTRIM(RTRIM(@vsi_reg_enviados)))) + LTRIM(RTRIM(@vsi_reg_enviados)) +  --Numero de registros enviados
			REPLICATE('0', 4 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4))) + SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4) + --Oficina de pago
			REPLICATE('0', 12 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_cuenta_bco)), 1, 12))) + SUBSTRING(LTRIM(RTRIM(@vvc_cuenta_bco)), 1, 12) + --numero de cuenta
			SPACE(142) --espacios en blanco
    FROM
      companias
    WHERE
      compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)      

    INSERT INTO
      fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT
      @psi_id_rep, @pvc_usuario, @pti_banco, 1, @vsi_reg_enviados,
			REPLICATE('0', 5 - LEN(LTRIM(RTRIM(@vsi_reg_enviados)))) + LTRIM(RTRIM(@vsi_reg_enviados)) + --numero secuencia de registro
			'03' + --tipo de registro
			REPLICATE('0', 6 - LEN(LTRIM(RTRIM(@vsi_reg_enviados)))) + LTRIM(RTRIM(@vsi_reg_enviados)) + --numero de registros enviados
			SPACE(187) --espacios en blanco

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

	DROP TABLE #tmp_sec_bco
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_colpatria TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_conavi') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_conavi
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_conavi
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por conavi                              ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = '01.IDENTIF'
  SET @vch_agr_cta = 'TIPO_CUENT'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL
      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

			--DCRP, Nov25/2005, parece que no siempre esta en una agrupacion, sino en un indice de informacion
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE SUBSTRING(a.dato_01,1,1) WHEN 'C' THEN '02' WHEN 'T' THEN '06' WHEN 'E' THEN '04' WHEN 'N' THEN '01' WHEN 'P' THEN '05' END
			FROM fdt_bancos_tmp c, inf_soc_trabajador a
			WHERE a.trabajador = c.trabajador
      AND a.indice_inf_soc = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario
			AND ISNULL(c.tipo_doc,'') = ''

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = CASE LTRIM(RTRIM(a.dato)) WHEN 'AHORROS' THEN '2' ELSE '1' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)
		SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta, '')
		SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
    '1' +
		LTRIM(RTRIM(ISNULL(tns.ins_dep,''))) + -- Ej: 570110
		CONVERT(CHAR(4), SUBSTRING(RTRIM(ISNULL(tns.cuenta_dep,'0')), 1, 4)) +
		REPLICATE('0', 11 - LEN(SUBSTRING(RTRIM(ISNULL(tns.cuenta_dep,'0')), 5, 9))) + SUBSTRING(RTRIM(ISNULL(tns.cuenta_dep,'0')), 5, 9) +
		'      ' +
		LTRIM(RTRIM(ISNULL(tns.tipo_cuenta,'2'))) +
		REPLICATE('0', 17 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe))))   --Importe, parte entera
    FROM fdt_bancos_tmp tns, trabajadores t
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  --la cabeza
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
    '0' + '01' + 'NOE' +
		SPACE(4 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_registro_fiscal)), 1, 4))) + SUBSTRING(LTRIM(RTRIM(@vvc_registro_fiscal)), 1, 4) + -- Ej: '5086'
		SPACE(13 - LEN(LTRIM(RTRIM(@vvc_registro_fiscal)))) + LTRIM(RTRIM(@vvc_registro_fiscal)) + --Ej: '5086000000166'
	  '0000000000001' +
		SPACE(6 - LEN(LTRIM(RTRIM(@vvc_oficina_cta)))) + LTRIM(RTRIM(@vvc_oficina_cta)) + --Ej: '570110'
		SPACE(15 - LEN(LTRIM(RTRIM(@vvc_cuenta_bco)))) + LTRIM(RTRIM(@vvc_cuenta_bco)) + -- Ej: Iria todo esto: '5045' + '00007680036'
		'      ' + 
		CASE ISNULL(@vti_tipo_cta,1) WHEN 1 THEN '1' ELSE '2' END + -- 1 SI ES CORRIENTE O 2 SI ES AHORROS
		REPLICATE('0', 6 - LEN(RTRIM(@vsi_nro_trab))) + RTRIM(@vsi_nro_trab) +
		REPLICATE('0', 17 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) + 
		'Pago de Nomina' + SPACE(100 - LEN('Pago de Nomina'))

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_conavi TO PUBLIC
GO
IF OBJECT_ID('dbo.sp_fco_gen_bco_davivienda') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_gen_bco_davivienda
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_davivienda
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por davivienda                          ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = '01.IDENTIF'
  SET @vch_agr_cta = 'TIPO_CUENT'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL

      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

			--DCRP, Nov25/2005, parece que no siempre esta en una agrupacion, sino en un indice de informacion
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE SUBSTRING(a.dato_01,1,1) WHEN 'C' THEN '02' WHEN 'T' THEN '06' WHEN 'E' THEN '04' WHEN 'N' THEN '01' WHEN 'P' THEN '05' END
			FROM fdt_bancos_tmp c, inf_soc_trabajador a
			WHERE a.trabajador = c.trabajador
      AND a.indice_inf_soc = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario
			AND ISNULL(c.tipo_doc,'') = ''

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = CASE LTRIM(RTRIM(a.dato)) WHEN 'AHORROS' THEN 'CA' ELSE 'CC' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario


SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

  --Ahora el detalle
	--*****  CONSTRUCCION DE LOS REGISTROS TIPO TR
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
    'TR' +
		REPLICATE('0', 16 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 16))) + SUBSTRING(LTRIM(t.clave_unica), 1, 16) +
		REPLICATE('0', 16) +
		REPLICATE('0', 16 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 16))) + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 16) +
		SUBSTRING(LTRIM(ISNULL(tns.tipo_cuenta,'CA')), 1, 2) +
    '000051' +
		REPLICATE('0', 16 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
    REPLICATE('0', 8) +
		SUBSTRING(LTRIM(ISNULL(tns.tipo_doc,'02')), 1, 2) +
    '0' +
    '9999' +
    REPLICATE('0', 40) +
    REPLICATE('0', 18) +
    REPLICATE('0', 8) +
    REPLICATE('0', 4) +
    REPLICATE('0', 4) +
    REPLICATE('0', 7)
    FROM fdt_bancos_tmp tns, trabajadores t
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  --la cabeza
	--***** CONSTRUCCION DEL REGISTRO TIPO RC
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
    'RC' +
		REPLICATE('0', 16 - LEN(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) + REPLACE(ISNULL(registro_fiscal,'0'),'-','') +
    'NOMI' +
    REPLICATE('0', 4 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4))) +  SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4) +  
		REPLICATE('0', 16 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) + ISNULL(@vvc_cuenta_bco,'0') +
		CASE ISNULL(@vti_tipo_cta, 2) WHEN 2 THEN 'CA' ELSE 'CC' END +
    '000051' +
		REPLICATE('0', 16 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  --Importe, parte entera
		REPLICATE('0', 8 - LEN(RTRIM(@vsi_nro_trab))) + RTRIM(@vsi_nro_trab) +
    CONVERT(CHAR(8),GETDATE(), 112) +  
    SUBSTRING(CONVERT(CHAR(8),GETDATE(), 108), 1, 2) +  
    SUBSTRING(CONVERT(CHAR(8),GETDATE(), 108), 4, 2) +  
    SUBSTRING(CONVERT(CHAR(8),GETDATE(), 108), 7, 2) +  
    '0000' +
    '9999' +
    REPLICATE('0', 8) +
    REPLICATE('0', 6) +
    '00' +
    '01' +
    REPLICATE('0', 12) +
    REPLICATE('0', 4 - LEN(SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4))) +  SUBSTRING(LTRIM(RTRIM(@vvc_oficina_cta)), 1, 4) + 
    REPLICATE('0', 40)
  FROM
    companias
  WHERE
    compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_davivienda TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_ganadero') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_ganadero
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_ganadero
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por davivienda                          ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL
      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
		SUBSTRING(LTRIM(ISNULL(tns.tipo_doc,'01')), 1, 2) + -- TIPO ID BENEFICIARIO  
		REPLICATE('0', 15 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 15))) + SUBSTRING(LTRIM(t.clave_unica), 1, 15) +  -- Nº ID BENEFICIARIO  
    '0' + -- DIGITO CONTROL Nº ID BENEFICIARIO  
    '1' + -- FORMA PAGO  
    '0013' + -- BANCO RECEPTOR
    '0' + 
		REPLICATE('0', 3 - LEN(SUBSTRING(tns.cuenta_dep, 1, 3))) + SUBSTRING(tns.cuenta_dep, 1, 3) + -- OFICINA/PLAZA 
		REPLICATE('0', 4 - LEN(SUBSTRING(LTRIM(tns.tipo_cuenta), 1, 4))) + SUBSTRING(LTRIM(tns.tipo_cuenta), 1, 4) + -- TIPO CUENTA  
		REPLICATE('0', 6 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 4, 6)))  + SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 4, 6) + -- CUENTA BBVA  
    '00' + -- TIPO CUENTA NACHA  
    REPLICATE('0', 17) + -- CUENTA NACHA
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(36 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) + -- NOMBRE BENEFICIARIO  
		REPLICATE('0', 15 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
    REPLICATE(' ', 36) + -- DIRECCION  
    REPLICATE(' ', 18) + -- TELEFONO  
    REPLICATE('0', 8) + --FECHA LIMITE DE PAGO  
		'PAGO DE NOMINA' + SPACE(40 - LEN('PAGO DE NOMINA')) -- CONCEPTO PAGO      
    FROM fdt_bancos_tmp tns, trabajadores t
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_ganadero TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_granahorrar') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_granahorrar
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_granahorrar
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por granahorrar                         ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL
      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario


SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

		--como se maneja un consecutivo, debemos hacer uso de una tabla temporal
		SELECT tns.trabajador, IDENTITY(smallint, 1, 1) as secuencia
		INTO #tmp_sec_bco
		FROM fdt_bancos_tmp tns
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      

  -- CONSTRUCCION DEL REGISTRO TIPO I 
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
    'N0000000000' +
    CONVERT(CHAR(8), @pdt_fecha, 112) +
    '01' +
    ISNULL(@vvc_cuenta_bco,'0') +
		LTRIM(RTRIM(nombre_cia)) + SPACE(30 - LEN(LTRIM(RTRIM(nombre_cia)))) +
    '00' +
		REPLICATE('0', 9 - LEN(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) + REPLACE(ISNULL(registro_fiscal,'0'),'-','') +
    REPLICATE(' ', 11) +
    '000001'    
  FROM
    companias
  WHERE
    compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)
      
  -- CONSTRUCCION DE LOS REGISTROS TIPO II
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
    'N32' +
		SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) + SPACE(17 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) +
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(30 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) +
		REPLICATE('0', 11 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 11))) + SUBSTRING(LTRIM(t.clave_unica), 1, 11) +
		REPLICATE('0', 12 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
    ' ' +
		REPLICATE('0', 6 - LEN(RTRIM(sec.secuencia))) + RTRIM(sec.secuencia)
    FROM fdt_bancos_tmp tns, trabajadores t, #tmp_sec_bco sec
    WHERE t.trabajador = tns.trabajador
		AND tns.trabajador = sec.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  -- CONSTRUCCION DEL REGISTRO TIPO III   
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 3,
    'N9999999999' +
		REPLICATE('0', 6 - LEN(RTRIM(@vsi_nro_trab))) + RTRIM(@vsi_nro_trab) +
		REPLICATE('0', 12 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  --Importe, parte entera
    REPLICATE(' ', 54) +
		REPLICATE('0', 6 - LEN(RTRIM(@vsi_nro_trab+2))) + RTRIM(@vsi_nro_trab+2)

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

	DROP TABLE #tmp_sec_bco    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_granahorrar TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_lloyds') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_lloyds
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_lloyds
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por Lloyds                              ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05:DCR, Pasada a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL
      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

		--como se maneja un consecutivo, debemos hacer uso de una tabla temporal
		SELECT tns.trabajador, IDENTITY(smallint, 1, 1) as secuencia
		INTO #tmp_sec_bco
		FROM fdt_bancos_tmp tns
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2      

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 4,
    '6' +
		SUBSTRING(LTRIM(ISNULL(tns.tipo_cuenta,'2')), 1, 1) +
    '2' +
    '2' +
    '010' +
		SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 25) + SPACE(25 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 25))) +
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --Importe, parte entera
    '000000' +
		SUBSTRING(LTRIM(t.clave_unica), 1, 15) + SPACE(15 - LEN(SUBSTRING(LTRIM(t.clave_unica), 1, 15))) +
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(22 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) +
    ' ' +
    REPLICATE('0', 11) +
		REPLICATE('0', 7 - LEN(RTRIM(sec.secuencia))) + RTRIM(sec.secuencia) +
    '02' +
		'PAGO DE NOMINA' + SPACE(72 - LEN('PAGO DE NOMINA'))
    FROM fdt_bancos_tmp tns, trabajadores t, #tmp_sec_bco sec
    WHERE t.trabajador = tns.trabajador
		AND tns.trabajador = sec.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
          
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  --la cabeza
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 3,
    '6' +
    @vti_tipo_cta +
    '1' +
    '2' +
    '010' + 
		ISNULL(@vvc_cuenta_bco,'0') + SPACE(16 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) +
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  --Importe, parte entera
    '000000' +
		REPLACE(ISNULL(registro_fiscal,'0'),'-','') + SPACE(15 - LEN(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) +
		LTRIM(RTRIM(nombre_cia)) + SPACE(22 - LEN(LTRIM(RTRIM(nombre_cia)))) +
    ' ' +
    REPLICATE('0', 11) +
    '0000001' +
    '02' +
		'PAGO DE NOMINA' + SPACE(72 - LEN('PAGO DE NOMINA'))
  FROM
    companias
  WHERE
    compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)

  -- Construcción de registro control de lote de transferencias
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
    '5' +
		LTRIM(RTRIM(nombre_cia)) + SPACE(16 - LEN(LTRIM(RTRIM(nombre_cia)))) +
		REPLICATE('0', 10 - LEN(ISNULL(@vvc_cuenta_bco,'0'))) + ISNULL(@vvc_cuenta_bco,'0') +
    'NOMINA    ' +
		REPLACE(ISNULL(registro_fiscal,'0'),'-','') + SPACE(10 - LEN(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) +
    'PANOMINA  ' +
    CONVERT(CHAR(8), @pdt_fecha, 112) +
    '0000001' +
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  
    '00' +
    '01' +
    REPLICATE(' ', 88)    
  FROM
    companias
  WHERE
    compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)

  --Construcción de registro control de archivo
  INSERT INTO
    fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
  SELECT
    @psi_id_rep, @pvc_usuario, @pti_banco, 1, 1,
    ' 005600104' +
		REPLACE(ISNULL(registro_fiscal,'0'),'-','') + SPACE(10 - LEN(REPLACE(ISNULL(registro_fiscal,'0'),'-',''))) +
    CONVERT(CHAR(8), @pdt_fecha, 112) +
    '00' + --hora
    '00' + --minutos
    'A' +
		LTRIM(RTRIM(nombre_cia)) + SPACE(23 - LEN(LTRIM(RTRIM(nombre_cia)))) +
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  
		REPLICATE('0', 18 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(@vdc_total)))) +  
    REPLICATE('0', 18) +
    REPLICATE(' ', 89)    
  FROM
    companias
  WHERE
    compania IN (SELECT DISTINCT compania FROM ri_procesar WHERE id_rep = @psi_id_rep AND usuariow = @pvc_usuario)

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep

	DROP TABLE #tmp_sec_bco
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_lloyds TO PUBLIC
GO
IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'dbo.sp_fco_gen_bco_santander') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_gen_bco_santander
GO
CREATE PROCEDURE dbo.sp_fco_gen_bco_santander
(
  @psi_id_rep smallint,
  @pvc_usuario varchar(30),
  @pti_banco tinyint,
  @pdt_fecha smalldatetime = NULL,
  @pvc_responsable varchar(20) = '',
  @pti_filtra_cta tinyint = 0  --0: no filtra, 1: si filtra 
)
AS
/********************************************************************/
/*** Módulo Fiscal de Colombia - Medios Magneticos para Bancos    ***/
/*** Formato: Transmision por ACH Santander                       ***/
/*** Autor:	Diana Cecilia Rios Peinado                            ***/
/*** Fecha:	Mayo 21/2005                                          ***/
/********************************************************************/
--OCT-01-05: DCR, Pasado a SQL de Oracle
-- JCL FEB-12-07 Ajuste para permitir filtro de trabajadores
DECLARE
@vdt_fecha_hoy	smalldatetime,
@vti_sit tinyint,
@vvc_tablaTN varchar(20),
@vvc_sql varchar(2000),
@vnu_concepto1 smallint,
@vnu_concepto2 smallint,
@vnu_concepto3 smallint,
@vnu_concepto4 smallint,
@vnu_concepto5 smallint,
@vch_simb_mon  char(5),
@vti_tipo_cta  tinyint,
@vvc_cuenta_bco  varchar(30),
@vvc_oficina_cta varchar(15),
@vvc_registro_fiscal varchar(20),
@vvc_mensaje varchar(80),
@vdc_total     decimal(19,6),
@vsi_nro_trab  integer,

@vch_agr_id    char(10),
@vch_agr_cta   char(10),

@cch_compania  char(4),
@cch_clase_nom char(2),
@cch_tipo_nom  char(2),
@cnu_anio      smallint,
@cnu_periodo   tinyint,
@cnu_id_cal    smallint
     
BEGIN
--borrando la informacion 
	DELETE fdt_bancos_mm
	WHERE id_rep = @psi_id_rep AND
	usuariow = @pvc_usuario AND
	banco = @pti_banco

  --borramos la tabla temporal que se uso  
  DELETE fdt_bancos_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
--  Fecha Actual
	SET @vdt_fecha_hoy = getdate()

  --cambiar de acuerdo a la agrupacion que maneja cada cliente
  SET @vch_agr_id = 'TIPO_DOC'
  SET @vch_agr_cta = 'TIPO_CTA'

	DECLARE c_reg_procesa CURSOR FOR
	SELECT DISTINCT c.compania, c.clase_nomina, c.tipo_nomina, c.anio, c.periodo, a.id_calendario
	FROM calendario_procesos a, cal_proc_cias b, ri_procesar c
	WHERE a.id_calendario = b.id_calendario
	AND a.tipo_nomina = c.tipo_nomina
	AND a.anio = c.anio
	AND a.periodo = c.periodo
	AND b.compania = c.compania
	AND c.id_rep = @psi_id_rep
	AND c.usuariow = @pvc_usuario

	OPEN c_reg_procesa  
  FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal

	WHILE (@@FETCH_STATUS = 0)  
	BEGIN--B1
			SET @cnu_id_cal = ISNULL(@cnu_id_cal,0)
	
	    IF IsNull(@cnu_id_cal,0) = 0
	    BEGIN
	        SET @vvc_sql = @cch_tipo_nom + ' ' + RTRIM(@cnu_anio) + ' ' + RTRIM(@cnu_periodo)
	        RAISERROR ('Error de parametrizacion: No existe el periodo específicado (%s)', 16, 1, @vvc_sql)
	        GOTO SgteRegistro
	    END

      --  Verificar el estado del periodo
		  SELECT @vti_sit = sit_periodo
		  FROM cal_proc_cias
		  WHERE compania = @cch_compania And
		  id_calendario = @cnu_id_cal

			SET @vti_sit = ISNULL(@vti_sit, 1)

      --  Asignar la tabla de acuerdo al estado del periodo
	    IF @vti_sit = 2
	    BEGIN
	        SET @vvc_tablaTN = 'trans_' + RTRIM(@cch_compania) + '_' + RTRIM(@cnu_id_cal)
	        IF NOT EXISTS (SELECT 1 FROM sysobjects WHERE name = Upper(@vvc_tablaTN))  
	        BEGIN  
	            RAISERROR ('Error de datos: No existe la tabla de respaldo [%s]', 16, 1, @vvc_tablaTN)
	            RETURN
	        END
	    END
	    ELSE
	        SET @vvc_tablaTN = 'transacciones_ns'

      -- Trayendo al informacion del banco      
			 SELECT @vnu_concepto1 = b.concepto1, 
			 @vnu_concepto2 = b.concepto2, 
			 @vnu_concepto3 = b.concepto3, 
			 @vnu_concepto4 = b.concepto4, 
			 @vnu_concepto5 = b.concepto5,
			 @vch_simb_mon = b.simbolo_moneda, 
			 @vti_tipo_cta = b.tipo_cta, 
			 @vvc_cuenta_bco = b.cuenta, 
			 @vvc_oficina_cta = b.oficina_cta, 
			 @vvc_registro_fiscal = b.registro_fiscal
			 FROM fdt_bancos a, fdt_bancos_cias_datos b
			 WHERE a.banco = b.banco AND
			 b.compania = @cch_compania AND
			 a.banco = @pti_banco

      --Insertando en la tabla temporal los trabajadores
      SET @vnu_concepto1 = ISNULL(@vnu_concepto1, 0)
      SET @vnu_concepto2 = ISNULL(@vnu_concepto2, 0)
      SET @vnu_concepto3 = ISNULL(@vnu_concepto3, 0)
      SET @vnu_concepto4 = ISNULL(@vnu_concepto4, 0)
      SET @vnu_concepto5 = ISNULL(@vnu_concepto5, 0)
			SET @vch_simb_mon = ISNULL(@vch_simb_mon,'')
			SET @vti_tipo_cta = ISNULL(@vti_tipo_cta,1)
			SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco,'') 
			SET @vvc_oficina_cta = ISNULL(@vvc_oficina_cta,'') 
			SET @vvc_registro_fiscal = ISNULL(@vvc_registro_fiscal, '')
   
      SET @vvc_sql = 'INSERT INTO fdt_bancos_tmp' +
                 ' SELECT ' +  RTRIM(@psi_id_rep) + ', ' +
                  '''' + @pvc_usuario + ''', ' +
                  'tns.compania, tns.clase_nomina, tns.id_calendario, ' +
                  'tns.trabajador, SUM(tns.importe), 0, 0, ' +
                  '''' + @vch_simb_mon + ''', 1, 0, 0, 0, NULL' +
                  ' FROM ' + @vvc_tablaTN + ' tns, trabajadores_grales tg' +
                  ' WHERE tns.compania = tg.compania' +
                  ' AND tns.trabajador = tg.trabajador' +
                  ' AND tg.forma_pago = 3' +
                  ' AND tns.importe > 0' +
                  ' AND tns.sit_transaccion = 2' +
                  ' AND tns.compania = ''' + @cch_compania + '''' +
                  ' AND tns.clase_nomina = ''' + @cch_clase_nom + '''' +
                  ' AND tns.id_calendario = ' + RTRIM(@cnu_id_cal) +
                  ' AND tns.concepto IN ( ' + RTRIM(@vnu_concepto1) + ',' + RTRIM(@vnu_concepto2) + ',' + RTRIM(@vnu_concepto3) + ',' +
                  RTRIM(@vnu_concepto4) + ',' + RTRIM(@vnu_concepto5) + ')' +
                  ' GROUP BY tns.trabajador, tns.compania, tns.clase_nomina, tns.id_calendario'

        EXECUTE (@vvc_sql)

-- JCL FEB-12-07
    IF OBJECT_ID('dbo.fdt_bancos_trab') IS NOT NULL
    BEGIN
        if exists 
        (select 1 from fdt_bancos_trab 
         where usuariow = system_user
           and banco = @pti_banco
           and procesar = 1)

            DELETE fdt_bancos_tmp
            WHERE compania = @cch_compania 
              AND clase_nomina = @cch_clase_nom
              AND id_calendario = @cnu_id_cal
              AND id_rep = @psi_id_rep
              AND usuariow = @pvc_usuario
              AND NOT EXISTS
                (SELECT 1 FROM fdt_bancos_trab x
                 WHERE x.usuariow = system_user
                   and x.banco = @pti_banco
                   and fdt_bancos_tmp.compania = x.compania
                   and fdt_bancos_tmp.trabajador = x.trabajador
                   and x.procesar = 1)
    END
-- END JCL

      --actualizamos los que tienen cuenta de deposito
			--sin importar de que banco sea, se debe traer la cuenta del trabajador
        UPDATE fdt_bancos_tmp
        SET cuenta_dep =
             (SELECT MAX(a.cuenta_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c	
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(b.cod_banco)
              FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b 
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1
              AND a.institucion_deposito = b.ins_dep
              AND b.banco = @pti_banco
              AND c.compania = @cch_compania 
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario

--si por casualidad ins_dep queda en cero, buscar la info de rel_trab_ins_dep
        UPDATE fdt_bancos_tmp
        SET ins_dep = 
             (SELECT MAX(a.institucion_deposito)
              FROM rel_trab_ins_dep a
              WHERE a.compania = c.compania
              AND a.trabajador = c.trabajador
              AND a.ins_dep_principal = 1 
              AND c.compania = @cch_compania
              AND c.clase_nomina = @cch_clase_nom
              AND c.id_calendario = @cnu_id_cal)
				 FROM fdt_bancos_tmp c
         WHERE compania = @cch_compania 
         AND clase_nomina = @cch_clase_nom
         AND id_calendario = @cnu_id_cal
         AND id_rep = @psi_id_rep
         AND usuariow = @pvc_usuario
         AND LTRIM(RTRIM(c.ins_dep)) = '0'
      
      --si viene la opcion de filtrar unicamente los trabajadores que tengan cuenta en las ins dep parametrizadas
      IF @pti_filtra_cta = 1
      BEGIN
          DELETE FROM fdt_bancos_tmp
          WHERE compania = @cch_compania
          AND clase_nomina = @cch_clase_nom
          AND id_calendario = @cnu_id_cal
          AND id_rep = @psi_id_rep
          AND usuariow = @pvc_usuario
          AND NOT EXISTS (SELECT 1 FROM rel_trab_ins_dep a, fdt_bancos_ins_dep b
                          WHERE a.institucion_deposito = b.ins_dep
                           AND a.compania = fdt_bancos_tmp.compania
                           AND a.trabajador = fdt_bancos_tmp.trabajador
                           AND b.banco = @pti_banco
                           AND fdt_bancos_tmp.compania = @cch_compania                                
                           AND fdt_bancos_tmp.clase_nomina = @cch_clase_nom
                           AND fdt_bancos_tmp.id_calendario = @cnu_id_cal)
      END

      --Actualizar el tipo de documento *** cambiar de acuerdo al cliente ***
			UPDATE fdt_bancos_tmp
			SET tipo_doc = CASE LTRIM(RTRIM(a.dato)) WHEN '01' THEN '02' WHEN '02' THEN '04' WHEN '04' THEN '01' WHEN '05' THEN '03' END
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_id
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario

      UPDATE fdt_bancos_tmp
      SET tipo_cuenta = LTRIM(RTRIM(a.dato))
			FROM fdt_bancos_tmp c, rel_trab_agr a
			WHERE a.compania = c.compania
      AND a.trabajador = c.trabajador
      AND a.agrupacion = @vch_agr_cta
			AND c.compania = @cch_compania 
			AND c.clase_nomina = @cch_clase_nom
			AND c.id_calendario = @cnu_id_cal
			AND c.id_rep = @psi_id_rep
			AND c.usuariow = @pvc_usuario


SgteRegistro:
  	FETCH c_reg_procesa INTO @cch_compania, @cch_clase_nom, @cch_tipo_nom, @cnu_anio, @cnu_periodo, @cnu_id_cal                    
  END--B1  

  CLOSE c_reg_procesa
	DEALLOCATE c_reg_procesa

  --Finalizado el cursor, se debe agrupar por una sola cuenta por trabajador, los registros de los varios
  --tipos de nomina seleccionados
    INSERT INTO fdt_bancos_tmp(id_rep, usuariow, trabajador, importe, ins_dep, cuenta_dep, simbolo_mon, tipo,
    tipo_cuenta, tipo_doc)
    SELECT tn.id_rep, tn.usuariow, tn.trabajador, SUM(tn.importe), tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, 2,
    tn.tipo_cuenta, tn.tipo_doc
    FROM fdt_bancos_tmp tn
    WHERE tn.id_rep = @psi_id_rep
    AND tn.usuariow = @pvc_usuario
    AND tn.tipo = 1
    GROUP BY tn.id_rep, tn.usuariow, tn.trabajador, tn.ins_dep, tn.cuenta_dep, tn.simbolo_mon, tn.tipo_cuenta, tn.tipo_doc

  --hallando la maxima compañia que esta en ri_procesar
    SELECT @cch_compania  = MAX(compania)
    FROM ri_procesar
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario

	  -- Trayendo al informacion del banco      
		SELECT 
		@vch_simb_mon = b.simbolo_moneda, 
		@vti_tipo_cta = b.tipo_cta, 
		@vvc_cuenta_bco = b.cuenta, 
		@vvc_oficina_cta = b.oficina_cta, 
		@vvc_registro_fiscal = b.registro_fiscal
		FROM fdt_bancos a, fdt_bancos_cias_datos b
		WHERE a.banco = b.banco AND
		b.compania = @cch_compania AND
		a.banco = @pti_banco

		SET @vti_tipo_cta = ISNULL(@vti_tipo_cta, 1)
		SET @vvc_cuenta_bco = ISNULL(@vvc_cuenta_bco, 0)

  --Ahora el detalle
    INSERT INTO fdt_bancos_mm(id_rep, usuariow, banco, sec_archivo, secuencia, registros)
    SELECT @psi_id_rep, @pvc_usuario, @pti_banco, 1, 2,
		SUBSTRING(LTRIM(t.clave_unica), 1, 15) + --Identificacion
		REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' ') + SPACE(22 - LEN(REPLACE(LTRIM(RTRIM(t.nombre)), '/' , ' '))) + -- NOMBRE BENEFICIARIO  
		SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17) + SPACE(17 - LEN(SUBSTRING(ISNULL(tns.cuenta_dep,'0'), 1, 17))) + -- cuenta
		REPLICATE('0', 15 - LEN(LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))))) + LTRIM(RTRIM(CONVERT(CHAR, FLOOR(tns.importe)))) +  --valor
		'PAGO DE NOMINA' + SPACE(80 - LEN('PAGO DE NOMINA')) +
		SUBSTRING(LTRIM(ISNULL(tns.tipo_doc,'01')), 1, 2) + --Codigo de identificacion del destinatario
		SUBSTRING(LTRIM(ISNULL(tns.tipo_cuenta,'1')), 1, 1) + -- Tipo de Cuenta  1. Ahorros, 2 Corriente   
		REPLICATE('0', 4 -LEN(SUBSTRING(LTRIM(tns.ins_dep),1, 4))) + SUBSTRING(LTRIM(tns.ins_dep),1, 4) + --codigo del banco
    '0001' +
    '1'    
    FROM fdt_bancos_tmp tns, trabajadores t
    WHERE t.trabajador = tns.trabajador
    AND tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tns.tipo = 2
        
------------------------------------
--  Generar Estadisticas del Proceso
------------------------------------
    SELECT @vdc_total = ISNULL(SUM(importe), 0), 
		@vsi_nro_trab = COUNT(trabajador)
    FROM fdt_bancos_tmp tns 
    WHERE tns.id_rep = @psi_id_rep
    AND tns.usuariow = @pvc_usuario
    AND tipo = 2

  DELETE
      fdt_bancos_resultados
  WHERE
      id_rep = @psi_id_rep AND
      usuariow = @pvc_usuario AND
      banco = @pti_banco

  INSERT INTO fdt_bancos_resultados
    (id_rep, usuariow, banco, trabajadores, valor_total)
  VALUES (@psi_id_rep, @pvc_usuario, @pti_banco, @vsi_nro_trab, @vdc_total)
  
	--si se debe generar reporte 
	IF EXISTS(SELECT 1 vnu_reporte
				    FROM fdt_rutas
				    WHERE operacion = 'FCO1070'
				    AND codigo = @pti_banco
				    AND tipo = 1)
	BEGIN --rep
		DELETE fdt_bancos_rep
		WHERE id_rep = @psi_id_rep AND
		usuariow = @pvc_usuario AND
		banco = @pti_banco

		INSERT INTO fdt_bancos_rep
		SELECT tns.id_rep, tns.usuariow,
		@pti_banco, @pdt_fecha, @pvc_responsable, 
		tns.trabajador, tns.importe, tns.cuenta_dep, tns.simbolo_mon
		FROM fdt_bancos_tmp tns
		WHERE tns.id_rep = @psi_id_rep
		AND tns.usuariow = @pvc_usuario
		AND tipo = 2
 	END--rep
    
END
GO
GRANT EXECUTE ON dbo.sp_fco_gen_bco_santander TO PUBLIC
GO
