IF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'[dbo].[sp_fco_ausentismos_IBC]') 
AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
   DROP PROCEDURE dbo.sp_fco_ausentismos_IBC
GO
CREATE PROCEDURE dbo.sp_fco_ausentismos_IBC
(
  @psi_id_rep  smallint,
  @pvc_usuariow varchar(30),      
  @pch_compania   char(4),
  @pch_trabajador char(10),
  @pnu_concepto smallint,
  @pdt_fec_ini char(8),
  @pnu_tipo_ibc tinyint,
  @pin_id_orig int = NULL
)
AS
/*********************************************************************/
/*** Modulo:      Modulo Fiscal ADAM v3 - Embargos                 ***/
/*** Descripcion: Calcula el IBC para registro de ausentismos      ***/
/*** Autor:	  Diana C. Rios Peinado                                ***/
/*** Fecha:	  Junio 22 de 2004                                     ***/
/*** Motor:	  oracle 8i		Version interna: 1.0                     ***/
/*********************************************************************/
--OCT-02-05: DCR, Pasada a SQL de Oracle
DECLARE
  @vnu_ibc decimal(19,6),
  @vnu_mes tinyint,
  @vnu_anio smallint,
  @vvc_parametro varchar(10),
  @vch_agr_cnc char(3),

  @vdt_fec_ing smalldatetime,  
  @vnu_anio_ini smallint,
  @vnu_anio_fin smallint,
  @vnu_mes_ini tinyint,
  @vnu_mes_fin tinyint,
  @vnu_meses_corte tinyint,  
  @vnu_promedio smallint,  
  @vnu_dif_meses smallint,
  @vnu_dif_anios smallint,

  @vnu_acumula decimal(19,6)
  
BEGIN
  SET @vnu_mes =  CONVERT(tinyint, SUBSTRING(@pdt_fec_ini, 5, 2))
  SET @vnu_anio = CONVERT(smallint, SUBSTRING(@pdt_fec_ini, 1, 4))
  --trayendo los parametros que se requieren. En esta interfase, necesitamos el concepto
  SET @vvc_parametro = 'autoliq'
  
  --Agr de conceptos S16, IBC de salud
	SET @vch_agr_cnc = '0'
	SELECT @vch_agr_cnc = dato
	FROM vw_fdt_parametros
	WHERE pais = 'COL'
	AND compania = @pch_compania
	AND LTRIM(RTRIM(parametro)) = LTRIM(RTRIM(@vvc_parametro))
	AND secuencia = 16

  IF @pnu_tipo_ibc = 1 --Basico
	BEGIN--1
		SET @vnu_ibc = 0
		
		SELECT @vnu_ibc = a.salario
		FROM historico_sueldos a                      
		WHERE
		    a.compania = @pch_compania AND
		    a.trabajador = @pch_trabajador AND
		    a.fecha = (select max(fecha) from historico_sueldos b
		               where a.compania = b.compania AND
		                     a.trabajador = b.trabajador AND
		                     b.fecha < @pdt_fec_ini) AND
		    a.secuencia = (select max(secuencia) from historico_sueldos c
		                   where a.compania = c.compania AND
		                         a.trabajador = c.trabajador AND
		                         c.fecha < @pdt_fec_ini)

  END--1
  
  IF @pnu_tipo_ibc = 2   --ibc del mes anterior de la fecha de inicio
	BEGIN--2
     IF @vnu_mes = 1 
		 BEGIN
        SET @vnu_mes = 12
        SET @vnu_anio = @vnu_anio - 1
		 END
     ELSE
        SET @vnu_mes = @vnu_mes - 1
     
		SET @vnu_ibc = 0
		
		SELECT @vnu_ibc = SUM(CASE @vnu_mes WHEN 1 THEN a.acum_imp_mes_01
																        WHEN 2 THEN a.acum_imp_mes_02
																        WHEN 3 THEN a.acum_imp_mes_03
																        WHEN 4 THEN a.acum_imp_mes_04
																        WHEN 5 THEN a.acum_imp_mes_05
																        WHEN 6 THEN a.acum_imp_mes_06
																        WHEN 7 THEN a.acum_imp_mes_07
																        WHEN 8 THEN a.acum_imp_mes_08
																        WHEN 9 THEN a.acum_imp_mes_09
																        WHEN 10 THEN a.acum_imp_mes_10
																        WHEN 11 THEN a.acum_imp_mes_11
																        WHEN 12 THEN a.acum_imp_mes_12 END)
		FROM acumulados_mensuales a
		WHERE compania = @pch_compania
		AND trabajador = @pch_trabajador
		AND agr_conceptos = @vch_agr_cnc
		AND anio = @vnu_anio      
  END--2
  
  IF @pnu_tipo_ibc = 3  -- buscar el ibc del id_origen
	BEGIN--3
		SET @vnu_ibc = 0
		SELECT @vnu_ibc = valor_ibc
		FROM fco_ausentismos
		WHERE compania = @pch_compania
		AND id_ausentismo = @pin_id_orig
		AND trabajador = @pch_trabajador
		AND concepto = @pnu_concepto
  END--3

  IF @pnu_tipo_ibc = 4   --los ultimos 12 meses, de la agrupacion IBC.
	BEGIN--4
     SET @vnu_meses_corte = 12
     SET @vnu_promedio = @vnu_meses_corte
  
     --hallando la fecha de ingreso del trabajador
			SET @vdt_fec_ing = ''
			
			SELECT @vdt_fec_ing = fecha_ingreso
			FROM trabajadores_grales
			WHERE compania = @pch_compania
			AND trabajador = @pch_trabajador

     --hallando el aņo de ingreso y la fecha de ingreso
     SET @vnu_anio_ini = DATEPART(YEAR, @vdt_fec_ing)
     SET @vnu_mes_ini = DATEPART(MONTH, @vdt_fec_ing)
        
     IF @vnu_mes = 1
		 BEGIN
        SET @vnu_mes = 12
        SET @vnu_anio = @vnu_anio - 1
		 END
     ELSE
        SET @vnu_mes = @vnu_mes - 1

     SET @vnu_anio_fin = @vnu_anio
     SET @vnu_mes_fin = @vnu_mes
     
     SET @vnu_dif_meses = ISNULL(@vnu_mes_fin,0) - ISNULL(@vnu_mes_ini,0)
     SET @vnu_dif_anios = ISNULL(@vnu_anio_fin,0) - ISNULL(@vnu_anio_ini,0)
     IF @vnu_dif_meses > 0 
        SET @vnu_promedio = @vnu_dif_meses+1
     ELSE
        SET @vnu_promedio = (ISNULL(@vnu_mes_ini,0) - ISNULL(@vnu_mes_fin,0))+1

     IF @vnu_dif_anios > 1
		 BEGIN
        SET @vnu_anio_ini = @vnu_anio - 1
        SET @vnu_mes_ini = @vnu_mes_fin + 1
        SET @vnu_promedio = 12
		 END
     ELSE
		 BEGIN
				IF @vnu_dif_anios = 1
				BEGIN
           IF @vnu_dif_meses >= 0 --mas de 12 meses
					 BEGIN	
              SET @vnu_promedio = 12
              SET @vnu_mes_ini = @vnu_mes_fin + 1
           END
				END
     END 
   
     --hallando valor acumulado
			SET @vnu_acumula = 0
			SELECT @vnu_acumula = dbo.fn_acum_imp_rango_meses(@pch_compania, @pch_trabajador, @vch_agr_cnc, @vnu_anio_ini, @vnu_mes_ini, @vnu_anio_fin, @vnu_mes_fin)
			   
			SET @vnu_ibc = ISNULL(@vnu_acumula,0)/ ISNULL(@vnu_promedio,0)
     
  END--4
  
  DELETE fco_ausentismos_IBC
  WHERE id_rep = @psi_id_rep
  AND usuariow = @pvc_usuariow
    
  --insertando en la tabla
  INSERT INTO fco_ausentismos_IBC
  VALUES (@psi_id_rep, @pvc_usuariow, @pch_compania, @pch_trabajador, @pnu_concepto, ROUND(@vnu_ibc,0))
    
END
GO
GRANT EXECUTE ON sp_fco_ausentismos_IBC TO Public
GO