alter table fco_ausentismos add fecha_ini_real smalldatetime
alter table fco_ausentismos add fecha_fin_real smalldatetime
alter table fco_ausentismos add fecha_accidente smalldatetime
alter table fco_ausentismos add nro_incapacidad varchar(20)
alter table fco_ausentismos add horas tinyint

alter table fco_ausentismos_historico add fecha_ini_real smalldatetime
alter table fco_ausentismos_historico add fecha_fin_real smalldatetime
alter table fco_ausentismos_historico add fecha_accidente smalldatetime
alter table fco_ausentismos_historico add nro_incapacidad varchar(20)
alter table fco_ausentismos_historico add horas tinyint

IF OBJECT_ID('dbo.sp_fco_crea_ausentismo') IS NOT NULL
   DROP PROCEDURE dbo.sp_fco_crea_ausentismo
GO
CREATE PROCEDURE dbo.sp_fco_crea_ausentismo
(
    @pch_compania char(4),
    @pin_id_ausentismo int,
    @pch_trabajador char(10),
    @psi_concepto smallint,
    @pti_tipo tinyint,
    @pdt_inicio smalldatetime,
    @pdt_causacion smalldatetime,
    @pdt_pago smalldatetime,
    @pdt_fin smalldatetime,
    @psi_dias smallint,
    @pti_tipo_dias tinyint,
    @pvc_diagnostico varchar(5),
    @pvc_observaciones varchar(1000),
    @psi_randomico smallint,
    @pin_prorroga  int,  --agregado DCRP Agosto25/2003. Puede venir nulo
    @pde_valor_ibc  decimal(19,6),
    @pti_calculo_ibc decimal(19,6),
    @pdt_ini_real smalldatetime,
    @pdt_fin_real smalldatetime,
    @pdt_accidente smalldatetime,
    @pvc_nro_incapacidad varchar(20),
    @pti_horas tinyint
)
AS
DECLARE
    @vin_id_ausentismo int
BEGIN

    IF @pti_tipo = 4  --PRORROGA 
		BEGIN
			 IF NOT EXISTS(SELECT 1 
					          FROM fco_ausentismos
					          WHERE compania = @pch_compania   AND
					          trabajador = @pch_trabajador AND
					          id_ausentismo = @pin_prorroga AND
					          concepto = @psi_concepto AND
					          tipo <> 4)
			 BEGIN
					RAISERROR 206800 'El registro a prorrogarar en [FCO_AUSENTISMOS] no existe.'
          RETURN;
       END
    END

    IF @psi_randomico = 0 --UPDATE
        UPDATE fco_ausentismos
        SET concepto = @psi_concepto,
            tipo = @pti_tipo,
            fecha_inicio = @pdt_inicio,
            fecha_causacion = @pdt_causacion,
            fecha_pago = @pdt_pago,
            fecha_fin = @pdt_fin,
            dias = @psi_dias,
            tipo_dias = @pti_tipo_dias,
            diagnostico = @pvc_diagnostico,
            observaciones = @pvc_observaciones,
            id_origen = @pin_prorroga,
            valor_ibc = @pde_valor_ibc,
            calculo_ibc = @pti_calculo_ibc,
            fecha_ini_real = @pdt_ini_real,
            fecha_fin_real = @pdt_fin_real,
            fecha_accidente = @pdt_accidente,
            nro_incapacidad = @pvc_nro_incapacidad,
            horas = @pti_horas
        WHERE
            compania = @pch_compania And
            id_ausentismo = @pin_id_ausentismo
    ELSE
    BEGIN
        BEGIN TRAN

        SELECT @vin_id_ausentismo = IsNull(id_ausentismo,0) + 1     
        FROM fco_ausentismos_id
        WHERE compania = @pch_compania

        IF IsNull(@vin_id_ausentismo, 0) = 0
        BEGIN
            SET @vin_id_ausentismo = 1
            INSERT INTO fco_ausentismos_id VALUES (@pch_compania, 1)
        END
        ELSE        
            UPDATE fco_ausentismos_id
            SET id_ausentismo = @vin_id_ausentismo
            WHERE compania = @pch_compania
        

        INSERT INTO fco_ausentismos 
        (compania, id_ausentismo, trabajador, concepto, tipo, fecha_inicio, fecha_causacion, fecha_pago, 
         fecha_fin, dias, tipo_dias, diagnostico, observaciones, id_origen, valor_ibc, calculo_ibc,
         fecha_ini_real, fecha_fin_real, fecha_accidente, nro_incapacidad, horas)
        VALUES
        (@pch_compania, @vin_id_ausentismo, @pch_trabajador, @psi_concepto, @pti_tipo, @pdt_inicio, @pdt_causacion, @pdt_pago,
         @pdt_fin, @psi_dias, @pti_tipo_dias, @pvc_diagnostico, @pvc_observaciones, @pin_prorroga, @pde_valor_ibc, @pti_calculo_ibc,
         @pdt_ini_real, @pdt_fin_real, @pdt_accidente, @pvc_nro_incapacidad, @pti_horas)

        DELETE fco_ausentismos_id_as
        COMMIT TRAN        

        INSERT INTO fco_ausentismos_id_as VALUES (@psi_randomico, @vin_id_ausentismo)

    END
END
GO
GRANT EXECUTE ON sp_fco_crea_ausentismo TO Public
GO

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
