IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_rep_cajas_compensacion]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_rep_cajas_compensacion
GO
CREATE PROCEDURE dbo.sp_fco_rep_cajas_compensacion
(
  @psi_id_rep  smallint,
  @pvc_usuario varchar(30),
  @pti_cod_rep tinyint,
  @pch_trab_dde char(10) = '',
  @pch_trab_hta char(10) = '',
  @pch_agr_1 char(10) = '',
  @pch_agr_2 char(10) = '',
  @pch_agr_3 char(10) = '',
  @pch_dato_dde char(10) = '',
  @pch_dato_hta char(10) = '',--hasta aqui serian parametros fijos    
  @pch_compania char(4),
  @pch_sucursal char(10),
  @pnu_anio char(4),
  @pnu_mes  char(2)
)
/********************************************************************/
/*** Fiscal de Colombia de Data Tecnologia                        ***/
/*** Descripcion: Genera el reporte de cajas de compensacion      ***/
/*** Autor:	Juan Carlos Leguizamon                                ***/
/*** Adecuacion:	Diana Cecilia Rios Peinado                      ***/
/*** Fecha:	Mayo 14 de 2005                                       ***/
/********************************************************************/
--Despues de los parametros fijos, los parametros se reciben como varchar y dentro del sp se convierten
--al tipo de datos correspondiente
--OCT-03-05: Pasada a SQL de Oracle
AS
DECLARE
  @w_agr_trab_caja    char(10),
  @w_agr_conc_base    char(3),
  @w_agr_conc_caja    char(3),
  @w_agr_conc_sena    char(3),
  @w_agr_conc_icbf    char(3),
  @w_conc_base        smallint,
  @w_conc_caja        smallint,
  @w_conc_sena        smallint,
  @w_conc_icbf        smallint,
    
  @vch_compania char(4),
  @vnu_anio smallint,
  @vnu_mes tinyint,
  @vch_sucursal char(10),

  @vti_trab_dde tinyint,
  @vti_trab_hta tinyint,  

  @vch_fecha char(8),
  @vch_dias_fin char(2),
  @vdt_fec_fin smalldatetime
    
BEGIN
  -- Inicializar Variables
  SET @w_agr_trab_caja = ''
  SET @w_agr_conc_base = ''
  SET @w_agr_conc_caja = ''
  SET @w_agr_conc_sena = ''
  SET @w_agr_conc_icbf = ''
  SET @w_conc_base = -1
  SET @w_conc_caja = -1
  SET @w_conc_sena = -1
  SET @w_conc_icbf = -1

  SET @vch_compania = LTRIM(RTRIM(@pch_compania))
  SET @vnu_anio = CONVERT(smallint, @pnu_anio)
  SET @vnu_mes = CONVERT(tinyint, @pnu_mes)
  
  IF ISNULL(LTRIM(RTRIM(@pch_sucursal)), '0') = '0'
     SET @vch_sucursal = '001'
  ELSE
     SET @vch_sucursal = LTRIM(RTRIM(@pch_sucursal))

  --armando la fecha final
  SELECT @vch_dias_fin = LTRIM(RTRIM(dbo.fn_fco_ult_dia_mes(@vnu_anio, @vnu_mes)))
	SELECT @vch_dias_fin = CASE LEN(LTRIM(RTRIM(@vch_dias_fin))) WHEN 1 THEN '0' + LTRIM(RTRIM(@vch_dias_fin)) ELSE LTRIM(RTRIM(@vch_dias_fin)) END
  
  SET @vch_fecha = LTRIM(RTRIM(@vnu_anio)) + 
									 CASE LEN(LTRIM(RTRIM(@vnu_mes))) WHEN 1 THEN '0'+ LTRIM(RTRIM(@vnu_mes)) ELSE LTRIM(RTRIM(@vnu_mes)) END +
									 LTRIM(RTRIM(@vch_dias_fin))

	SET @vdt_fec_fin = @vch_fecha
  
  -- Recuperar parametros desde el MF
  SELECT @w_agr_trab_caja = dato
  FROM vw_fdt_parametros
  WHERE pais = 'COL' And compania = @vch_compania And parametro = 'parafiscal' And secuencia = 1

  SELECT @w_agr_conc_base = CASE tipo WHEN 0 THEN '-1' ELSE dato END, 
	@w_conc_base = CASE tipo WHEN 0 THEN dato ELSE -1 END
  FROM vw_fdt_parametros
  WHERE pais = 'COL' And compania = @vch_compania And parametro = 'parafiscal' And secuencia = 6

  SELECT @w_agr_conc_caja = CASE tipo WHEN 0 THEN '-1' ELSE dato END, 
	@w_conc_caja = CASE tipo WHEN 0 THEN dato ELSE -1 END
  FROM vw_fdt_parametros
  WHERE pais = 'COL' And compania = @vch_compania And parametro = 'parafiscal' And secuencia = 2

  SELECT @w_agr_conc_sena = CASE tipo WHEN 0 THEN '-1' ELSE dato END, 
	@w_conc_sena = CASE tipo WHEN 0 THEN dato ELSE -1 END
  FROM vw_fdt_parametros
  WHERE pais = 'COL' And compania = @vch_compania And parametro = 'parafiscal' And secuencia = 3

  SELECT @w_agr_conc_icbf = CASE tipo WHEN 0 THEN '-1' ELSE dato END, 
	@w_conc_icbf = CASE tipo WHEN 0 THEN dato ELSE -1 END
  FROM vw_fdt_parametros
  WHERE pais = 'COL' And compania = @vch_compania And  parametro = 'parafiscal' And secuencia = 4

  SET @vti_trab_dde = 0
  IF ISNULL(LTRIM(RTRIM(@pch_trab_dde)),'') = ''
      SET @vti_trab_dde = 1
  
  SET @vti_trab_hta = 0
  IF ISNULL(LTRIM(RTRIM(@pch_trab_hta)),'') = ''
      SET @vti_trab_hta = 1
  
  -- Borrar todos los datos actuales. 
  DELETE fco_parafiscales
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  AND cod_rep = @pti_cod_rep
  
  DELETE fco_parafiscales_tmp
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuario
  
    -- Insertar los nuevos datos
    --Base, si es agrupacion de concepto
    IF LTRIM(RTRIM(@w_agr_conc_base)) <> '-1'
		BEGIN--1
      INSERT INTO fco_parafiscales_tmp (id_rep, usuariow, trabajador, agr_caja, cod_caja, base)
      SELECT @psi_id_rep, @pvc_usuario,
             TG.trabajador, @w_agr_trab_caja, RTA.dato,
						 Case @vnu_mes When  1 Then acum_imp_mes_01
                           When  2 Then acum_imp_mes_02
                           When  3 Then acum_imp_mes_03
                           When  4 Then acum_imp_mes_04
                           When  5 Then acum_imp_mes_05
                           When  6 Then acum_imp_mes_06
                           When  7 Then acum_imp_mes_07
                           When  8 Then acum_imp_mes_08
                           When  9 Then acum_imp_mes_09
                           When 10 Then acum_imp_mes_10
                           When 11 Then acum_imp_mes_11
                           When 12 Then acum_imp_mes_12 END
      FROM 
             trabajadores_grales TG, rel_trab_Agr RTA, acumulados_mensuales AM, vw_fco_div_trabajador SUC
      WHERE
             TG.compania = AM.compania And TG.trabajador = AM.trabajador And
             TG.compania = RTA.compania And TG.trabajador = RTA.trabajador And
             TG.compania = SUC.compania And TG.trabajador = SUC.trabajador And
             TG.compania = @vch_compania And
             AM.anio = @vnu_anio And
             AM.agr_conceptos = @w_agr_conc_base And
             SUC.dato = @vch_sucursal And
             RTA.agrupacion = @w_agr_trab_caja
             -- CONDICIONES PARA VALIDAR LA SEGURIDAD                      
             -- AUTORIZACION A LA COMPANIA                      
             AND EXISTS (SELECT 1 FROM aut_companias x WHERE x.compania = tg.compania AND x.usuario = system_user)
             -- AUTORIZACION POR CLASE DE NOMINA                      
             AND EXISTS (SELECT 1 FROM rel_usu_clase_nom y WHERE y.clase_nomina = tg.clase_nomina AND y.usuario = system_user)
             -- AUTORIZACION POR AGRUPACIONES                   
             AND NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                            WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                            AND r2.compania = tg.compania AND r2.trabajador = tg.trabajador
                            AND u2.usuario = system_user)           
					   AND ((@vti_trab_dde = 1) OR (TG.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
					       ((@vti_trab_hta = 1) OR (TG.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))

    END--1
               
    --Base, si es concepto
    IF @w_conc_base <> -1
		BEGIN--2
      INSERT INTO fco_parafiscales_tmp (id_rep, usuariow, trabajador, agr_caja, cod_caja, base)
      SELECT @psi_id_rep, @pvc_usuario,
             TG.trabajador, @w_agr_trab_caja, RTA.dato,            
						 Case @vnu_mes When  1 Then acum_imp_mes_01
                           When  2 Then acum_imp_mes_02
                           When  3 Then acum_imp_mes_03
                           When  4 Then acum_imp_mes_04
                           When  5 Then acum_imp_mes_05
                           When  6 Then acum_imp_mes_06
                           When  7 Then acum_imp_mes_07
                           When  8 Then acum_imp_mes_08
                           When  9 Then acum_imp_mes_09
                           When 10 Then acum_imp_mes_10
                           When 11 Then acum_imp_mes_11
                           When 12 Then acum_imp_mes_12 END
      FROM 
             trabajadores_grales TG, rel_trab_Agr RTA, acumulados_mensuales AM, vw_fco_div_trabajador SUC
      WHERE
             TG.compania = AM.compania And TG.trabajador = AM.trabajador And
             TG.compania = RTA.compania And TG.trabajador = RTA.trabajador And
             TG.compania = SUC.compania And TG.trabajador = SUC.trabajador And
             TG.compania = @vch_compania And
             AM.anio = @vnu_anio And
             AM.concepto = @w_conc_base And
             SUC.dato = @vch_sucursal And
             RTA.agrupacion = @w_agr_trab_caja
             -- CONDICIONES PARA VALIDAR LA SEGURIDAD                      
             -- AUTORIZACION A LA COMPANIA                      
             AND EXISTS (SELECT 1 FROM aut_companias x WHERE x.compania = tg.compania AND x.usuario = system_user)
             -- AUTORIZACION POR CLASE DE NOMINA                      
             AND EXISTS (SELECT 1 FROM rel_usu_clase_nom y WHERE y.clase_nomina = tg.clase_nomina AND y.usuario = system_user)
             -- AUTORIZACION POR AGRUPACIONES                   
             AND NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                            WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                            AND r2.compania = tg.compania AND r2.trabajador = tg.trabajador
                            AND u2.usuario = system_user)           
					   AND ((@vti_trab_dde = 1) OR (TG.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
					       ((@vti_trab_hta = 1) OR (TG.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))
    END--2

    --Caja, si es agrupacion de concepto
    IF LTRIM(RTRIM(@w_agr_conc_caja)) <> '-1'
		BEGIN--3
      INSERT INTO fco_parafiscales_tmp (id_rep, usuariow, trabajador, agr_caja, cod_caja, caja)
      SELECT @psi_id_rep, @pvc_usuario,
             TG.trabajador, @w_agr_trab_caja, RTA.dato,            
						 Case @vnu_mes When  1 Then acum_imp_mes_01
                           When  2 Then acum_imp_mes_02
                           When  3 Then acum_imp_mes_03
                           When  4 Then acum_imp_mes_04
                           When  5 Then acum_imp_mes_05
                           When  6 Then acum_imp_mes_06
                           When  7 Then acum_imp_mes_07
                           When  8 Then acum_imp_mes_08
                           When  9 Then acum_imp_mes_09
                           When 10 Then acum_imp_mes_10
                           When 11 Then acum_imp_mes_11
                           When 12 Then acum_imp_mes_12 END
      FROM 
             trabajadores_grales TG, rel_trab_Agr RTA, acumulados_mensuales AM, vw_fco_div_trabajador SUC
      WHERE
             TG.compania = AM.compania And TG.trabajador = AM.trabajador And
             TG.compania = RTA.compania And TG.trabajador = RTA.trabajador And
             TG.compania = SUC.compania And TG.trabajador = SUC.trabajador And
             TG.compania = @vch_compania And
             AM.anio = @vnu_anio And
             AM.agr_conceptos = @w_agr_conc_caja And
             SUC.dato = @vch_sucursal And
             RTA.agrupacion = @w_agr_trab_caja
             -- CONDICIONES PARA VALIDAR LA SEGURIDAD                      
             -- AUTORIZACION A LA COMPANIA                      
             AND EXISTS (SELECT 1 FROM aut_companias x WHERE x.compania = tg.compania AND x.usuario = system_user)
             -- AUTORIZACION POR CLASE DE NOMINA                      
             AND EXISTS (SELECT 1 FROM rel_usu_clase_nom y WHERE y.clase_nomina = tg.clase_nomina AND y.usuario = system_user)
             -- AUTORIZACION POR AGRUPACIONES                   
             AND NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                            WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                            AND r2.compania = tg.compania AND r2.trabajador = tg.trabajador
                            AND u2.usuario = system_user)           
					   AND ((@vti_trab_dde = 1) OR (TG.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
					       ((@vti_trab_hta = 1) OR (TG.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))
    END--3
               
    --Caja, si es concepto
    IF @w_conc_caja <> -1
		BEGIN--4
      INSERT INTO fco_parafiscales_tmp (id_rep, usuariow, trabajador, agr_caja, cod_caja, caja)
      SELECT @psi_id_rep, @pvc_usuario,
             TG.trabajador, @w_agr_trab_caja, RTA.dato,            
						 Case @vnu_mes When  1 Then acum_imp_mes_01
                           When  2 Then acum_imp_mes_02
                           When  3 Then acum_imp_mes_03
                           When  4 Then acum_imp_mes_04
                           When  5 Then acum_imp_mes_05
                           When  6 Then acum_imp_mes_06
                           When  7 Then acum_imp_mes_07
                           When  8 Then acum_imp_mes_08
                           When  9 Then acum_imp_mes_09
                           When 10 Then acum_imp_mes_10
                           When 11 Then acum_imp_mes_11
                           When 12 Then acum_imp_mes_12 END
      FROM 
             trabajadores_grales TG, rel_trab_Agr RTA, acumulados_mensuales AM, vw_fco_div_trabajador SUC
      WHERE
             TG.compania = AM.compania And TG.trabajador = AM.trabajador And
             TG.compania = RTA.compania And TG.trabajador = RTA.trabajador And
             TG.compania = SUC.compania And TG.trabajador = SUC.trabajador And
             TG.compania = @vch_compania And
             AM.anio = @vnu_anio And
             AM.concepto = @w_conc_caja And
             SUC.dato = @vch_sucursal And
             RTA.agrupacion = @w_agr_trab_caja
             -- CONDICIONES PARA VALIDAR LA SEGURIDAD                      
             -- AUTORIZACION A LA COMPANIA                      
             AND EXISTS (SELECT 1 FROM aut_companias x WHERE x.compania = tg.compania AND x.usuario = system_user)
             -- AUTORIZACION POR CLASE DE NOMINA                      
             AND EXISTS (SELECT 1 FROM rel_usu_clase_nom y WHERE y.clase_nomina = tg.clase_nomina AND y.usuario = system_user)
             -- AUTORIZACION POR AGRUPACIONES                   
             AND NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                            WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                            AND r2.compania = tg.compania AND r2.trabajador = tg.trabajador
                            AND u2.usuario = system_user)           
					   AND ((@vti_trab_dde = 1) OR (TG.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
					       ((@vti_trab_hta = 1) OR (TG.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))
    END--4

    --Sena, si es agrupacion de concepto
    IF LTRIM(RTRIM(@w_agr_conc_sena)) <> '-1'
		BEGIN--5
      INSERT INTO fco_parafiscales_tmp (id_rep, usuariow, trabajador, agr_caja, cod_caja, sena)
      SELECT @psi_id_rep, @pvc_usuario,
             TG.trabajador, @w_agr_trab_caja, RTA.dato,            
						 Case @vnu_mes When  1 Then acum_imp_mes_01
                           When  2 Then acum_imp_mes_02
                           When  3 Then acum_imp_mes_03
                           When  4 Then acum_imp_mes_04
                           When  5 Then acum_imp_mes_05
                           When  6 Then acum_imp_mes_06
                           When  7 Then acum_imp_mes_07
                           When  8 Then acum_imp_mes_08
                           When  9 Then acum_imp_mes_09
                           When 10 Then acum_imp_mes_10
                           When 11 Then acum_imp_mes_11
                           When 12 Then acum_imp_mes_12 END
      FROM 
             trabajadores_grales TG, rel_trab_Agr RTA, acumulados_mensuales AM, vw_fco_div_trabajador SUC
      WHERE
             TG.compania = AM.compania And TG.trabajador = AM.trabajador And
             TG.compania = RTA.compania And TG.trabajador = RTA.trabajador And
             TG.compania = SUC.compania And TG.trabajador = SUC.trabajador And
             TG.compania = @vch_compania And
             AM.anio = @vnu_anio And
             AM.agr_conceptos = @w_agr_conc_sena And
             SUC.dato = @vch_sucursal And
             RTA.agrupacion = @w_agr_trab_caja
             -- CONDICIONES PARA VALIDAR LA SEGURIDAD                      
             -- AUTORIZACION A LA COMPANIA                      
             AND EXISTS (SELECT 1 FROM aut_companias x WHERE x.compania = tg.compania AND x.usuario = system_user)
             -- AUTORIZACION POR CLASE DE NOMINA                      
             AND EXISTS (SELECT 1 FROM rel_usu_clase_nom y WHERE y.clase_nomina = tg.clase_nomina AND y.usuario = system_user)
             -- AUTORIZACION POR AGRUPACIONES                   
             AND NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                            WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                            AND r2.compania = tg.compania AND r2.trabajador = tg.trabajador
                            AND u2.usuario = system_user)           
					   AND ((@vti_trab_dde = 1) OR (TG.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
					       ((@vti_trab_hta = 1) OR (TG.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))
    END--5
               
    --Sena, si es concepto
    IF @w_conc_sena <> -1
		BEGIN--6
      INSERT INTO fco_parafiscales_tmp (id_rep, usuariow, trabajador, agr_caja, cod_caja, sena)
      SELECT @psi_id_rep, @pvc_usuario,
             TG.trabajador, @w_agr_trab_caja, RTA.dato,            
						 Case @vnu_mes When  1 Then acum_imp_mes_01
                           When  2 Then acum_imp_mes_02
                           When  3 Then acum_imp_mes_03
                           When  4 Then acum_imp_mes_04
                           When  5 Then acum_imp_mes_05
                           When  6 Then acum_imp_mes_06
                           When  7 Then acum_imp_mes_07
                           When  8 Then acum_imp_mes_08
                           When  9 Then acum_imp_mes_09
                           When 10 Then acum_imp_mes_10
                           When 11 Then acum_imp_mes_11
                           When 12 Then acum_imp_mes_12 END
      FROM 
             trabajadores_grales TG, rel_trab_Agr RTA, acumulados_mensuales AM, vw_fco_div_trabajador SUC
      WHERE
             TG.compania = AM.compania And TG.trabajador = AM.trabajador And
             TG.compania = RTA.compania And TG.trabajador = RTA.trabajador And
             TG.compania = SUC.compania And TG.trabajador = SUC.trabajador And
             TG.compania = @vch_compania And
             AM.anio = @vnu_anio And
             AM.concepto = @w_conc_sena And
             SUC.dato = @vch_sucursal And
             RTA.agrupacion = @w_agr_trab_caja
             -- CONDICIONES PARA VALIDAR LA SEGURIDAD                      
             -- AUTORIZACION A LA COMPANIA                      
             AND EXISTS (SELECT 1 FROM aut_companias x WHERE x.compania = tg.compania AND x.usuario = system_user)
             -- AUTORIZACION POR CLASE DE NOMINA                      
             AND EXISTS (SELECT 1 FROM rel_usu_clase_nom y WHERE y.clase_nomina = tg.clase_nomina AND y.usuario = system_user)
             -- AUTORIZACION POR AGRUPACIONES                   
             AND NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                            WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                            AND r2.compania = tg.compania AND r2.trabajador = tg.trabajador
                            AND u2.usuario = system_user)           
					   AND ((@vti_trab_dde = 1) OR (TG.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
					       ((@vti_trab_hta = 1) OR (TG.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))
    END--6
    
    --ICBF, si es agrupacion de concepto
    IF LTRIM(RTRIM(@w_agr_conc_icbf)) <> '-1'
		BEGIN--7
      INSERT INTO fco_parafiscales_tmp (id_rep, usuariow, trabajador, agr_caja, cod_caja, icbf)
      SELECT @psi_id_rep, @pvc_usuario,
             TG.trabajador, @w_agr_trab_caja, RTA.dato,            
						 Case @vnu_mes When  1 Then acum_imp_mes_01
                           When  2 Then acum_imp_mes_02
                           When  3 Then acum_imp_mes_03
                           When  4 Then acum_imp_mes_04
                           When  5 Then acum_imp_mes_05
                           When  6 Then acum_imp_mes_06
                           When  7 Then acum_imp_mes_07
                           When  8 Then acum_imp_mes_08
                           When  9 Then acum_imp_mes_09
                           When 10 Then acum_imp_mes_10
                           When 11 Then acum_imp_mes_11
                           When 12 Then acum_imp_mes_12 END
      FROM 
             trabajadores_grales TG, rel_trab_Agr RTA, acumulados_mensuales AM, vw_fco_div_trabajador SUC
      WHERE
             TG.compania = AM.compania And TG.trabajador = AM.trabajador And
             TG.compania = RTA.compania And TG.trabajador = RTA.trabajador And
             TG.compania = SUC.compania And TG.trabajador = SUC.trabajador And
             TG.compania = @vch_compania And
             AM.anio = @vnu_anio And
             AM.agr_conceptos = @w_agr_conc_icbf And
             SUC.dato = @vch_sucursal And
             RTA.agrupacion = @w_agr_trab_caja
             -- CONDICIONES PARA VALIDAR LA SEGURIDAD                      
             -- AUTORIZACION A LA COMPANIA                      
             AND EXISTS (SELECT 1 FROM aut_companias x WHERE x.compania = tg.compania AND x.usuario = system_user)
             -- AUTORIZACION POR CLASE DE NOMINA                      
             AND EXISTS (SELECT 1 FROM rel_usu_clase_nom y WHERE y.clase_nomina = tg.clase_nomina AND y.usuario = system_user)
             -- AUTORIZACION POR AGRUPACIONES                   
             AND NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                            WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                            AND r2.compania = tg.compania AND r2.trabajador = tg.trabajador
                            AND u2.usuario = user)           
					   AND ((@vti_trab_dde = 1) OR (TG.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
					       ((@vti_trab_hta = 1) OR (TG.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))
    END--7
                   
    --ICBF, si es concepto
    IF @w_conc_icbf <> -1
		BEGIN--8
      INSERT INTO fco_parafiscales_tmp (id_rep, usuariow, trabajador, agr_caja, cod_caja, icbf)
      SELECT @psi_id_rep, @pvc_usuario,
             TG.trabajador, @w_agr_trab_caja, RTA.dato,            
						 Case @vnu_mes When  1 Then acum_imp_mes_01
                           When  2 Then acum_imp_mes_02
                           When  3 Then acum_imp_mes_03
                           When  4 Then acum_imp_mes_04
                           When  5 Then acum_imp_mes_05
                           When  6 Then acum_imp_mes_06
                           When  7 Then acum_imp_mes_07
                           When  8 Then acum_imp_mes_08
                           When  9 Then acum_imp_mes_09
                           When 10 Then acum_imp_mes_10
                           When 11 Then acum_imp_mes_11
                           When 12 Then acum_imp_mes_12 END
      FROM 
             trabajadores_grales TG, rel_trab_Agr RTA, acumulados_mensuales AM, vw_fco_div_trabajador SUC
      WHERE
             TG.compania = AM.compania And TG.trabajador = AM.trabajador And
             TG.compania = RTA.compania And TG.trabajador = RTA.trabajador And
             TG.compania = SUC.compania And TG.trabajador = SUC.trabajador And
             TG.compania = @vch_compania And
             AM.anio = @vnu_anio And
             AM.concepto = @w_conc_icbf And
             SUC.dato = @vch_sucursal And
             RTA.agrupacion = @w_agr_trab_caja
             -- CONDICIONES PARA VALIDAR LA SEGURIDAD                      
             -- AUTORIZACION A LA COMPANIA                      
             AND EXISTS (SELECT 1 FROM aut_companias x WHERE x.compania = tg.compania AND x.usuario = system_user)
             -- AUTORIZACION POR CLASE DE NOMINA                      
             AND EXISTS (SELECT 1 FROM rel_usu_clase_nom y WHERE y.clase_nomina = tg.clase_nomina AND y.usuario = system_user)
             -- AUTORIZACION POR AGRUPACIONES                   
             AND NOT EXISTS (SELECT 1 FROM rel_usu_agr_trab u2, rel_trab_agr r2
                            WHERE u2.agrupacion = r2.agrupacion AND u2.dato = r2.dato
                            AND r2.compania = tg.compania AND r2.trabajador = tg.trabajador
                            AND u2.usuario = system_user)           
					   AND ((@vti_trab_dde = 1) OR (TG.trabajador >= RTRIM(@pch_trab_dde) AND @vti_trab_dde = 0)) AND
					       ((@vti_trab_hta = 1) OR (TG.trabajador <= RTRIM(@pch_trab_hta) AND @vti_trab_hta = 0))
    END--8
                              
  -- NO PROCESAR LOS TRABAJADORES FUERA DEL RANGO DE DATOS DE LA AGR. 4
  IF ISNULL(LTRIM(RTRIM(@pch_dato_dde)),'') <> ''
	BEGIN
    DELETE fco_parafiscales_tmp
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario
    AND trabajador IN
      (SELECT trabajador FROM rel_trab_agr
      WHERE agrupacion = @pch_agr_1
      AND dato < @pch_dato_dde)
  END
    
  IF ISNULL(LTRIM(RTRIM(@pch_dato_hta)),'') <> ''
	BEGIN
    DELETE fco_parafiscales_tmp
    WHERE id_rep = @psi_id_rep
    AND usuariow = @pvc_usuario
    AND trabajador IN
        (SELECT trabajador FROM rel_trab_agr
         WHERE agrupacion = @pch_agr_1
         AND dato > @pch_dato_hta)
  END
           
    INSERT INTO fco_parafiscales
    (id_rep, usuariow, cod_rep, compania, sucursal, anio, mes, trabajador, nombre, caja_cod, caja_nom,
    valor_base, valor_caja, valor_sena, valor_icbf)
    SELECT @psi_id_rep, @pvc_usuario, @pti_cod_rep, @vch_compania, @vch_sucursal, @vnu_anio, @vnu_mes, 
           SUBSTRING(LTRIM(RTRIM(T.clave_unica)),1,15), T.nombre, TMP.cod_caja, DAT.descripcion,
           sum(ISNULL(base,0)), sum(ISNULL(caja,0)), sum(ISNULL(sena,0)), sum(ISNULL(icbf,0))
    FROM  fco_parafiscales_tmp TMP, trabajadores T, datos_agr_trab DAT
    WHERE TMP.trabajador = T.trabajador And 
          TMP.agr_caja = DAT.agrupacion And TMP.cod_caja = DAT.dato
          And TMP.id_rep = @psi_id_rep
          And TMP.usuariow = @pvc_usuario
    GROUP BY 
          T.clave_unica, T.nombre, TMP.cod_caja, DAT.descripcion
    HAVING
          sum(ISNULL(base,0)) > 0;

    --actualizando el nombre de la cia y registro fiscal
    UPDATE fco_parafiscales
    SET nombre_cia = c.nombre_cia,
		registro_fiscal = c.registro_fiscal
		FROM fco_parafiscales rv, companias c
    WHERE rv.compania = c.compania 
		AND rv.id_rep = @psi_id_rep
    AND rv.usuariow = @pvc_usuario
    AND rv.compania = @vch_compania

  -- DATOS DE LAS AGRUPACIONES SELECCIONADAS POR EL USUARIO 
  IF ISNULL(LTRIM(RTRIM(@pch_agr_1)),'') <> '' 
	BEGIN--Ag1
    --Agrupacion 1 - agr1
    UPDATE fco_parafiscales
    SET agr1 = @pch_agr_1
		FROM fco_parafiscales rv
    WHERE rv.id_rep = @psi_id_rep 
      AND rv.usuariow = @pvc_usuario
      AND rv.cod_rep = @pti_cod_rep

    --Agrupacion 1 - dato1
	  UPDATE fco_parafiscales
	  SET dato1 = b.dato, desc1 = b.descripcion      
	  FROM hist_agrupaciones a, datos_agr_trab b, fco_parafiscales rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_1
	  AND a.fecha_alta = (select max(fecha_alta) from hist_agrupaciones h                        
	             where a.compania = h.compania AND
	                   a.agrupacion = h.agrupacion AND
	                   a.dato = h.dato AND                           
	                   a.trabajador = h.trabajador AND
	                   h.fecha_alta <= @vdt_fec_fin) AND                          
	  a.secuencia = (select max(secuencia) from hist_agrupaciones c                      
	                 where a.compania = c.compania AND
	                       a.agrupacion = c.agrupacion AND
	                       a.dato = c.dato AND
	                       a.trabajador = c.trabajador AND
	                       c.fecha_alta <= @vdt_fec_fin)                 
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep

		--ahora si, en la tabla de agrupaciones
	  UPDATE fco_parafiscales          
	  SET dato1 = b.dato, desc1 = b.descripcion          
	  FROM rel_trab_agr a, datos_agr_trab b, fco_parafiscales rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_1
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep
	  AND ISNULL(LTRIM(RTRIM(rv.dato1)),'') = ''  
  END--Ag1
    -- fin agrupacion 1

  IF ISNULL(LTRIM(RTRIM(@pch_agr_2)),'') <> '' 
	BEGIN --Ag2
    --Agrupacion 2 - agr2
    UPDATE fco_parafiscales
    SET agr2 = @pch_agr_2
		FROM fco_parafiscales rv
    WHERE rv.id_rep = @psi_id_rep 
      AND rv.usuariow = @pvc_usuario
      AND rv.cod_rep = @pti_cod_rep

	  UPDATE fco_parafiscales
	  SET dato2 = b.dato, desc2 = b.descripcion      
	  FROM hist_agrupaciones a, datos_agr_trab b, fco_parafiscales rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_2
	  AND a.fecha_alta = (select max(fecha_alta) from hist_agrupaciones h                        
	             where a.compania = h.compania AND
	                   a.agrupacion = h.agrupacion AND
	                   a.dato = h.dato AND                           
	                   a.trabajador = h.trabajador AND
	                   h.fecha_alta <= @vdt_fec_fin) AND                          
	  a.secuencia = (select max(secuencia) from hist_agrupaciones c                      
	                 where a.compania = c.compania AND
	                       a.agrupacion = c.agrupacion AND
	                       a.dato = c.dato AND
	                       a.trabajador = c.trabajador AND
	                       c.fecha_alta <= @vdt_fec_fin)                 
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep

		--ahora si, en la tabla de agrupaciones
	  UPDATE fco_parafiscales          
	  SET dato2 = b.dato, desc2 = b.descripcion          
	  FROM rel_trab_agr a, datos_agr_trab b, fco_parafiscales rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_2
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep
	  AND ISNULL(LTRIM(RTRIM(rv.dato2)),'') = ''    
  END--Ag2
    -- fin agrupacion 2

  IF ISNULL(LTRIM(RTRIM(@pch_agr_3)),'') <> ''
	BEGIN
    --Agrupacion 3 - agr3
    UPDATE fco_parafiscales
    SET agr3 = @pch_agr_3
		FROM fco_parafiscales rv
    WHERE rv.id_rep = @psi_id_rep 
      AND rv.usuariow = @pvc_usuario
      AND rv.cod_rep = @pti_cod_rep

    --Agrupacion 1 - dato1
	  UPDATE fco_parafiscales
	  SET dato3 = b.dato, desc3 = b.descripcion      
	  FROM hist_agrupaciones a, datos_agr_trab b, fco_parafiscales rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_3
	  AND a.fecha_alta = (select max(fecha_alta) from hist_agrupaciones h                        
	             where a.compania = h.compania AND
	                   a.agrupacion = h.agrupacion AND
	                   a.dato = h.dato AND                           
	                   a.trabajador = h.trabajador AND
	                   h.fecha_alta <= @vdt_fec_fin) AND                          
	  a.secuencia = (select max(secuencia) from hist_agrupaciones c                      
	                 where a.compania = c.compania AND
	                       a.agrupacion = c.agrupacion AND
	                       a.dato = c.dato AND
	                       a.trabajador = c.trabajador AND
	                       c.fecha_alta <= @vdt_fec_fin)                 
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep

		--ahora si, en la tabla de agrupaciones
	  UPDATE fco_parafiscales          
	  SET dato3 = b.dato, desc3 = b.descripcion          
	  FROM rel_trab_agr a, datos_agr_trab b, fco_parafiscales rv
	  WHERE a.agrupacion = b.agrupacion       
	  AND a.dato = b.dato       
	  AND rv.compania = a.compania       
	  AND rv.trabajador = a.trabajador       
	  AND a.agrupacion = @pch_agr_3
		AND rv.id_rep = @psi_id_rep
	  AND rv.usuariow = @pvc_usuario
		AND rv.cod_rep = @pti_cod_rep
	  AND ISNULL(LTRIM(RTRIM(rv.dato3)),'') = ''  
  
  END
    -- fin agrupacion 3

END

GO
GRANT EXECUTE ON dbo.sp_fco_rep_cajas_compensacion TO Public
GO