IF OBJECT_ID('dbo.sp_fco_incorpora_ausentismos') IS NOT NULL
    DROP PROCEDURE dbo.sp_fco_incorpora_ausentismos
GO
CREATE PROCEDURE dbo.sp_fco_incorpora_ausentismos
(  
    @pch_compania        char(4),  
    @psi_id_calendario   smallint,  
    @pch_clase_nomina    char(2),  
    @pch_trabajador      char(10),  
    @pvc_usuario         varchar(30),  
    @pdt_fecha_hoy       smalldatetime  
)  
AS  
/*********************************************************/  
/*** Modulo:      Modulo Fiscal ADAM v3 - Ausentismos  ***/  
/*** Descripcion: Incorpora ausentismos a la nómina    ***/  
/*** Autor:       Juan Carlos Leguizamon               ***/  
/*** Fecha:       Junio 17 de 2002                     ***/  
/*** Revision:    Marzo 22 de 2008                     ***/  
/*********************************************************/  
DECLARE  
    @cin_id_au         int,  
    @cch_trabajador    char(10),  
    @csi_concepto      smallint,  
    @cti_tipo          tinyint,  
    @cdt_inicio_au     smalldatetime,  
    @cdt_fin_au        smalldatetime,  
    @cti_horas         tinyint,
    @vdt_inicio_per    smalldatetime,  
    @vdt_fin_per       smalldatetime,  
    @vdt_inicio        smalldatetime, /* Fecha inicio del ausentismo dentro del periodo */  
    @vdt_fin           smalldatetime, /* Fecha fin del ausentismo dentro del periodo */    
    @vnm_tiempo        decimal(8,3),  
    @vti_prorroga      tinyint  
BEGIN  
    SET @pch_trabajador = IsNull(@pch_trabajador, '')

    /* Eliminar las transacciones ya generadas por este incorpora */  
    DELETE  
        transacciones_ns  
    WHERE  
        compania = @pch_compania And  
        clase_nomina = @pch_clase_nomina And  
        id_calendario = @psi_id_calendario And  
        referencia = 'Ausentismo' And  
        (trabajador = @pch_trabajador Or @pch_trabajador = '')
  
    /* Recuperar las fechas del periodo */  
    SELECT @vdt_inicio_per = fecha_inicio, @vdt_fin_per = fecha_termino  
    FROM calendario_procesos  
    WHERE id_calendario = @psi_id_calendario
  
    /* Recorrer los ausentismos del periodo */  
    DECLARE cr_ausentismos CURSOR FOR  
    SELECT au.id_ausentismo, au.trabajador, au.concepto, au.tipo, au.fecha_inicio, au.fecha_fin, au.horas
    FROM fco_ausentismos au
    INNER JOIN trabajadores_grales tg ON au.compania = tg.compania And au.trabajador = tg.trabajador
    WHERE au.compania = @pch_compania 
      And tg.clase_nomina = @pch_clase_nomina 
      And tg.sit_trabajador = 1 
      And au.fecha_fin >= @vdt_inicio_per
      And au.fecha_inicio <= @vdt_fin_per
      And (au.trabajador = @pch_trabajador Or @pch_trabajador = '')
  
    OPEN cr_ausentismos  
    FETCH NEXT FROM cr_ausentismos  
    INTO @cin_id_au, @cch_trabajador, @csi_concepto, @cti_tipo, @cdt_inicio_au, @cdt_fin_au, @cti_horas
  
    WHILE @@Fetch_Status = 0  
    BEGIN    
        /* Hallar si es prorroga o no */  
        SET @vti_prorroga = 0  
        IF @cti_tipo = 4 SET @vti_prorroga = 1  
  
        If IsNull(@cti_horas, 0) = 0
        Begin
            /* Calcular las fechas del ausentismo en el periodo */  
            IF @cdt_inicio_au < @vdt_inicio_per  
                SET @vdt_inicio = @vdt_inicio_per  
            ELSE  
                SET @vdt_inicio = @cdt_inicio_au  
      
            IF @cdt_fin_au > @vdt_fin_per  
                SET @vdt_fin = @vdt_fin_per  
            ELSE  
                SET @vdt_fin = @cdt_fin_au  
      
            /* Hallar el numero de dias del ausentismo para el periodo */  
            SET @vnm_tiempo = Datediff(dd, @vdt_inicio, @vdt_fin) + 1  
        End
        Else
            Set @vnm_tiempo = @cti_horas
              
        IF @vnm_tiempo > 0   
            EXECUTE sp_alta_transacciones_ns  
                @pch_compania,  
                @pch_clase_nomina,  
                @psi_id_calendario,  
                @csi_concepto,  
                @cch_trabajador,  
                'Ausentismo',   /* referencia */  
                NULL,           /* secuencia */  
                '',             /* referencia2 */  
                @pdt_fecha_hoy, /* fecha */  
                @pdt_fecha_hoy, /* fecha2*/  
                @vnm_tiempo,    /* tiempo */  
                @cin_id_au,     /* factor_01 */  
                @cti_tipo,      /* factor_02 */  
                @vti_prorroga,  /* factor_03 */  
                0,         /* importe_reportado */  
                0,         /* importe */  
                null,      /* turno_trn */  
                null,      /* puesto_trn */  
                null,      /* agrupacion_01_trn */  
                null,      /* dato_01_trn */  
                null,      /* agrupacion_02_trn */  
                null,      /* dato_02_trn */  
                null,      /* agrupacion_03_trn */  
                null,      /* dato_03_trn */  
                null,      /* agrupacion_04_trn */  
                null,      /* dato_04_trn */  
                1,         /* origen_transaccion */  
                @pvc_usuario,   /* usuario_registro */  
                @pdt_fecha_hoy, /* fecha_registro */  
                null,   /* usuario_proceso */  
                null,   /* fecha_proceso */  
                null,   /* usuario_cambio */  
                null,   /* fecha_cambio */  
                1,      /* sit_transaccion */  
                1       /* checa bajas del periodo */  
  
        FETCH NEXT FROM cr_ausentismos  
        INTO @cin_id_au, @cch_trabajador, @csi_concepto, @cti_tipo, @cdt_inicio_au, @cdt_fin_au, @cti_horas
    END /* BEGIN BAJO EL WHILE */  
  
    CLOSE cr_ausentismos  
    DEALLOCATE cr_ausentismos  
END  
GO
GRANT EXECUTE ON dbo.sp_fco_incorpora_ausentismos TO PUBLIC
GO
