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,  
    @cdc_horas decimal(8,3),
    @cdt_accidente smalldatetime,
    @csi_concepto1 smallint,  
    @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 */    
    @vdc_tiempo decimal(8,3),  
    @vti_prorroga tinyint,
    @vdt_fin_au_inicial smalldatetime,
    @vdc_fin_au_inicial decimal(19,6),
    @vdc_fecha_fin_au decimal(19,6),
    @vsi_dias_empresa smallint,
    @vsi_dias_trabajador smallint
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, au.fecha_accidente
    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, @cdc_horas, @cdt_accidente
  
    WHILE @@Fetch_Status = 0  
    BEGIN    
        /* Hallar si es prorroga o no */  
        SET @vti_prorroga = 0  
        IF @cti_tipo = 4 SET @vti_prorroga = 1  

        If @csi_concepto In (Select valor From criterios_valores_col 
                             Where campo = 'tipo_ausentismo' And item In (0, 3))
        Begin /* Conceptos EG o AT */
             Execute sp_calcula_dias_ausentismo  
                @pch_compania, @cch_trabajador, @csi_concepto, @cin_id_au,      
                @cdt_inicio_au, @cdt_fin_au, @vdt_inicio_per, @vdt_fin_per, @cdt_accidente,
                @vsi_dias_empresa Out, @vsi_dias_trabajador Out             

            -- Definir los conceptos
            /* EG */
            If Exists (Select 1 From criterios_valores_col Where campo = 'tipo_ausentismo' And item = 0 And valor = @csi_concepto)
                Set @csi_concepto1 = 310 /* Buscar luego la forma de que quede paramétrico */

            /* AT */
            If Exists (Select 1 From criterios_valores_col Where campo = 'tipo_ausentismo' And item = 3 And valor = @csi_concepto)
                Set @csi_concepto1 = 335 /* Buscar luego la forma de que quede paramétrico */

            If @vsi_dias_empresa > 0
            Begin
               Set @vdt_fin_au_inicial = Dateadd(dd, @vsi_dias_empresa, @cdt_inicio_au)
               Set @vdc_fin_au_inicial = Convert(decimal(19,6), @vdt_fin_au_inicial)
      
                Exec 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*/      
                    @vsi_dias_empresa,   /* tiempo */      
                    @vdc_fin_au_inicial, /* factor_01 */      
                    @cin_id_au,          /* factor_02 */      
                    @vti_prorroga,       /* factor_03 */      
                    0,                   /* importe_reportado */      
                    0,                   /* importe */      
                    null, null, null, null, null, null, null, null, null, null, 1, @pvc_usuario, @pdt_fecha_hoy, null, null, null, null, 1, 1
            End

            If @vsi_dias_trabajador > 0      
            Begin
                Set @vdc_fecha_fin_au = Convert(decimal(19,6), @cdt_fin_au)      

                Exec sp_alta_transacciones_ns      
                    @pch_compania, @pch_clase_nomina, @psi_id_calendario, @csi_concepto1, @cch_trabajador,
                    'Ausentismo',       /* referencia */      
                    null,                /* secuencia */      
                    '',                  /* referencia2 */      
                    @pdt_fecha_hoy,      /* fecha */      
                    @pdt_fecha_hoy,      /* fecha2*/      
                    @vsi_dias_trabajador,/* tiempo */      
                    @vdc_fecha_fin_au,   /* factor_01 */      
                    @cin_id_au,          /* factor_02 */      
                    @vti_prorroga,       /* factor_03 */      
                    0,                   /* importe_reportado */      
                    0,                   /* importe */      
                    null, null, null, null, null, null, null, null, null, null, 1, @pvc_usuario, @pdt_fecha_hoy, null, null, null, null, 1, 1
            End
        End
        Else
        Begin /* Otros conceptos de ausentismo */
            If IsNull(@cdc_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 @vdc_tiempo = Datediff(dd, @vdt_inicio, @vdt_fin) + 1  
            End
            Else
                Set @vdc_tiempo = @cdc_horas
                  
            IF @vdc_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*/  
                    @vdc_tiempo,    /* tiempo */  
--                    @cin_id_au,     /* factor_01 */  
--                    @cti_tipo,      /* factor_02 */  
                    @cti_tipo,      /* factor_01 */  
                    @cin_id_au,     /* factor_02 */  
                    @vti_prorroga,  /* factor_03 */  
                    0,              /* importe_reportado */      
                    0,              /* importe */  
                    null, null, null, null, null, null, null, null, null, null, 1, @pvc_usuario, @pdt_fecha_hoy, null, null, null, null, 1, 1
        End
  
        FETCH NEXT FROM cr_ausentismos  
        INTO @cin_id_au, @cch_trabajador, @csi_concepto, @cti_tipo, @cdt_inicio_au, @cdt_fin_au, @cdc_horas, @cdt_accidente
    END /* BEGIN BAJO EL WHILE */  
  
    CLOSE cr_ausentismos  
    DEALLOCATE cr_ausentismos  
END  
GO
GRANT EXECUTE ON dbo.sp_fco_incorpora_ausentismos TO PUBLIC
GO
