IF OBJECT_ID('dbo.sp_calcula_dias_ausentismo') IS NOT NULL
    DROP PROCEDURE dbo.sp_calcula_dias_ausentismo
GO
create Procedure dbo.sp_calcula_dias_ausentismo  
(    
    @pch_compania char(4),  
    @pch_trabajador char(10),  
    @psi_concepto smallint,  
    @pin_id_ausentismo int,  
    @pdt_ini_au smalldatetime,  
    @pdt_fin_au smalldatetime,  
    @pdt_ini_per smalldatetime,  
    @pdt_fin_per smalldatetime,  
    @pdt_accidente smalldatetime,  
    @psi_empresa smallint Output,  
    @psi_trabajador smallint Output  
)  
As  
Begin  
Declare   
    @vin_dias_ant int,    
    @vin_dias_act int,    
    @vdt_inicio smalldatetime,    
    @vdt_fin smalldatetime,
		@vdt_ini_real_au smalldatetime --DCR, Abr-29-2008    
		--DCR, JUL-25-08
		,@vsi_dias31 smallint 
		,@vvc_dato31 varchar(20)
    
    /* Obtiene los dias anteriores de ausencia pOr esta misma incapacidad*/   
     If Not Exists  
        (Select 1 From vw_dias_ausencia  
         Where compania = @pch_compania  
           And trabajador = @pch_trabajador  
           And id_ausentismo = @pin_id_ausentismo)      
            Set @vin_dias_ant = 0    
    Else    
        Select @vin_dias_ant = IsNull(dias_anteriores,0)   
        From vw_dias_ausencia    
        Where compania = @pch_compania  
          And trabajador = @pch_trabajador  
          And id_ausentismo = @pin_id_ausentismo    

		--DCR,Abr-29-2008: Hallamos la fecha real de inicio del ausentismo, no la fecha de inicio de amortizacion
		SELECT @vdt_ini_real_au = fecha_ini_real
		FROM fco_ausentismos
		WHERE compania = @pch_compania
		AND id_ausentismo = @pin_id_ausentismo
		AND trabajador = @pch_trabajador
		AND concepto = @psi_concepto

		--DCR,JUL-25-08: Se cuentan cuantos 31 hay entre el rango, para restarlos al valor final hallado
		SELECT @vvc_dato31 = LTRIM(RTRIM(dato)) 
		FROM vw_fdt_parametros 
		WHERE pais = 'COL'
		AND compania = @pch_compania
		AND parametro = 'otros'
		AND secuencia = 4

		SET @vvc_dato31 = ISNULL(@vvc_dato31, 'SI')
		--FIN DCR,JUL-25-08:
    
    /* Calcular las fechas del ausentismo en el periodo */    
    If @pdt_ini_au < @pdt_ini_per    
    Begin

        Set @vin_dias_ant = @vin_dias_ant + Datediff(dd, @pdt_ini_au, @pdt_ini_per)
        Set @vdt_inicio = @pdt_ini_per    

				--DCR,JUL-25-08
				IF UPPER(@vvc_dato31) = 'NO'
				BEGIN
					SET @vsi_dias31 = 0
					SELECT @vsi_dias31 = dbo.fn_dt_dias31(@pdt_ini_au, @pdt_ini_per)
					SELECT @vsi_dias31 = ISNULL(@vsi_dias31, 0)
					SET @vin_dias_ant = ISNULL(@vin_dias_ant,0) - @vsi_dias31
				END
				--FIN DCR,JUL-25-08
    End  
    Else    
        Set @vdt_inicio = @pdt_ini_au    
    
    If @pdt_fin_au > @pdt_fin_per    
        Set @vdt_fin = @pdt_fin_per    
    Else    
        Set @vdt_fin = @pdt_fin_au    
    
    Set @vin_dias_act = Datediff(dd, @vdt_inicio, @vdt_fin) + 1    

		--DCR,JUL-25-08
		IF UPPER(@vvc_dato31) = 'NO'
		BEGIN
			SET @vsi_dias31 = 0
			SELECT @vsi_dias31 = dbo.fn_dt_dias31(@vdt_inicio, @vdt_fin)
			SELECT @vsi_dias31 = ISNULL(@vsi_dias31, 0)
			SET @vin_dias_act = ISNULL(@vin_dias_act,0) - @vsi_dias31
		END
		--FIN DCR,JUL-25-08
    
    If Exists (Select 1 From criterios_valores_col Where campo = 'tipo_ausentismo' And item = 0 And valor = @psi_concepto)  
    Begin  
        If @vin_dias_ant >= 3  
            Select @psi_empresa = 0, @psi_trabajador = @vin_dias_act    
        Else   
        Begin    
            If (@vin_dias_act - (3 - @vin_dias_ant)) >= 0     
                Select @psi_empresa = (3 - @vin_dias_ant), @psi_trabajador = (@vin_dias_act -  (3 - @vin_dias_ant))  
            Else    
                Select @psi_empresa = @vin_dias_act, @psi_trabajador = 0  
        End    
    End  
  
    If Exists (Select 1 From criterios_valores_col Where campo = 'tipo_ausentismo' And item = 3 And valor = @psi_concepto)  
    Begin
				--si la fecha del accidente es diferente de la fecha real real del ausentismos
        If @pdt_accidente <> @vdt_ini_real_au --@pdt_ini_au  
            Select @psi_empresa = 0, @psi_trabajador = @vin_dias_act    
        Else  
    Begin   
      If @vin_dias_ant = 0 --DCR:Abr-08-2008:es la primera vez que se inserta  
             Select @psi_empresa = 1, @psi_trabajador = @vin_dias_act - 1  
      Else --quedaron dias de otro periodo para incorporar en este, asi que aqui es normalito  
             Select @psi_empresa = 0, @psi_trabajador = @vin_dias_act    
    End  
    End        
  
    Return  
End  
GO
GRANT EXECUTE ON dbo.sp_calcula_dias_ausentismo TO PUBLIC
GO
