CREATE PROCEDURE sp_calcula_dias_ausentismo(  
@wch_compania CHAR(4),  
@wch_trabajador CHAR(10),  
@wsi_concepto    SMALLINT,  
@wint_id_ausentismo INT,  
@wda_fecha_ini_au smallDATETIME,  
@wda_fecha_fin_au smallDATETIME,   
@wda_fecha_ini_per smallDATETIME,  
@wda_fecha_fin_per smallDATETIME,   
@wsm_empresa     SMALLINT OUTPUT,  
@wsm_trabajador   SMALLINT OUTPUT  
)  
AS  
BEGIN  
DECLARE  
  
/* Declaración de variables locales */  
  
 @v_dias_ant   int,  
 @v_dias_actuales  int,  
 @vdt_inicio    smallDATETIME,  
             @vdt_fin   smallDATETIME  
  
/***********************************************************/  
/* C U E R P O   P R I N C I P A L   D E L   P R O C E S O */  
/***********************************************************/  
  
/* calcula los dias anteriores de ausencia por esta misma incapacidad*/  
  
     IF NOT EXISTS(SELECT 1 FROM VW_DIAS_AUSENCIA  
           WHERE compania   =  @wch_compania   AND  
             trabajador =   @wch_trabajador AND  
             id_ausentismo =  @wint_id_ausentismo)    
               select @v_dias_ant = 0  
 ELSE  select @v_dias_ant = isnull(DIAS_ANTERIORES,0) from VW_DIAS_AUSENCIA  
           WHERE compania   =  @wch_compania   AND  
             trabajador =   @wch_trabajador AND  
             id_ausentismo =  @wint_id_ausentismo  
  
   /* Calcular las fechas del ausentismo en el periodo */  
        IF @wda_fecha_ini_au < @wda_fecha_ini_per  
          BEGIN  
            select @v_dias_ant = @v_dias_ant + Datediff(dd, @wda_fecha_ini_au, @wda_fecha_ini_per)  
            SET @vdt_inicio = @wda_fecha_ini_per  
          END  
        ELSE  
            SET @vdt_inicio = @wda_fecha_ini_au  
  
        IF @wda_fecha_fin_au > @wda_fecha_fin_per  
            SET @vdt_fin = @wda_fecha_fin_per  
        ELSE  
            SET @vdt_fin = @wda_fecha_fin_au  
  
  
        SET @v_dias_actuales = Datediff(dd, @vdt_inicio, @vdt_fin) + 1  
  
  
  
  
  
  
  IF @v_dias_ant >= 3 AND (@wsi_concepto = 300 OR @wsi_concepto = 310)  
   BEGIN  
  
  
    SET @wsm_empresa = 0  
    SET @wsm_trabajador = @v_dias_actuales  
   END  
 ELSE IF @v_dias_ant < 3 AND (@wsi_concepto = 300 OR @wsi_concepto = 310)   
 BEGIN  
     IF  (@v_dias_actuales -  (3-@v_dias_ant) ) >= 0   
        BEGIN  
            SET @wsm_empresa = (3-@v_dias_ant)  
            SET @wsm_trabajador = (@v_dias_actuales -  (3-@v_dias_ant) )   
         END  
      ELSE  
           BEGIN  
            SET @wsm_empresa =@v_dias_actuales  
            SET @wsm_trabajador = 0  
         END  
   END  
  ELSE IF @v_dias_ant >= 1 AND (@wsi_concepto = 330 OR @wsi_concepto = 335)   
   BEGIN  
    SET @wsm_empresa = 0  
    SET @wsm_trabajador = @v_dias_actuales  
   END  
  ELSE IF @v_dias_ant >= 0 AND (@wsi_concepto = 330 OR @wsi_concepto = 335)   
   BEGIN  
    SET @wsm_empresa = 1  
    SET @wsm_trabajador = @v_dias_actuales - 1  
   END  
  
--INSERT INTO DEBUG VALUES ('entro6',@wsm_empresa)  
--INSERT INTO DEBUG VALUES ('entro7',@wsm_trabajador)  
  
   
  
RETURN  
END  
