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  
  
    /* 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  
  
    /* 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  
    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  
  
    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
        If @pdt_accidente <> @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
