SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

ALTER  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 embargos a la nómina      ***/
/*** Autor:       Juan Carlos Leguizamon              ***/
/*** Fecha:       Junio 17 de 2002                    ***/
/*** Revision:   Octubre 30 de 2002                  ***/
/*** Ultima Revision: Coleccion VENTAS - DERSA        ***/
/********************************************************/
DECLARE
    @cin_id_au         int,
    @cch_trabajador    char(10),
    @csi_concepto      smallint,
    @csi_concepto1      smallint,

    @cti_tipo          tinyint,
    @cdt_inicio_au     smalldatetime,
    @cdt_fin_au        smalldatetime,
    @csi_dias          smallint,
    @csi_dias_empresa          smallint,
    @csi_dias_trabajador         smallint,

    @cti_tipo_dias     tinyint,

    @vdt_inicio_per    smalldatetime,
    @vdt_fin_per       smalldatetime,
    @vdt_fin_au_inicial       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),
    @wde_fecha_fin_au  decimal(19,6),
    @wde_fin_au_inicial  decimal(19,6),
    @vti_prorroga      tinyint,
    @vdt_valor_ibc     decimal(19,6),
    @vti_masivo        tinyint,
    @vdt_inicio_mes    smalldatetime
BEGIN

/*INSERT INTO DEBUG VALUES ('entro',NULL)  */

    SET DATEFORMAT dmy

    /* Verificar si el proceso es masivo o individual */
    IF IsNull(LTrim(RTrim(@pch_trabajador)), '') = ''
        SET @vti_masivo = 1
    ELSE
        SET @vti_masivo = 0

    /* 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 And @vti_masivo = 0) OR (@vti_masivo 
= 1))

    /* 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;
/* Modificado  19/08/2003 Se comentario para que respete la finalizaciion 
del periodo segun el tipo de nomina */
/* SET @vdt_fin_per = Convert(Smalldatetime,
  convert(char,dbo.fn_ultimo_dia_mes(datepart(mm,@vdt_fin_per), 
datepart(yy,@vdt_fin_per))) + '/' + RTrim(Month(@vdt_fin_per)) +
   '/' + RTrim(Year(@vdt_fin_per)))  */

    /* PARTE I: A U S E N T I S M O S    N O R M A L E S */
    /* 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.dias, au.tipo_dias, au.valor_ibc
    FROM
       fco_ausentismos au, trabajadores_grales tg
    WHERE
     au.compania = tg.compania And au.trabajador = tg.trabajador And
        au.compania = @pch_compania And
        tg.clase_nomina = @pch_clase_nomina And
        tg.sit_trabajador = 1 And
        au.fecha_fin >= @vdt_inicio_per  And
/* < por <=*/
        au.fecha_inicio <= @vdt_fin_per And
        ((au.trabajador = @pch_trabajador And @vti_masivo = 0) OR 
(@vti_masivo = 1))

    OPEN cr_ausentismos
    FETCH NEXT FROM cr_ausentismos
    INTO @cin_id_au, @cch_trabajador, @csi_concepto, @cti_tipo,
         @cdt_inicio_au, @cdt_fin_au, @csi_dias, 
@cti_tipo_dias,@vdt_valor_ibc


/*INSERT INTO DEBUG VALUES ('@vdt_inicio_per',@vdt_inicio_per)  */
/*INSERT INTO DEBUG VALUES ('@vdt_fin_per',@vdt_fin_per)  */


    WHILE @@Fetch_Status = 0
    BEGIN
        /* Hallar si es prorroga o no */
        SET @vti_prorroga = 0

        IF @cti_tipo = 4 SET @vti_prorroga = 1

        /* PARA LAS INCAPACIDADES POR ENFERMEDAD GENERAL */
        /* O POR ACCIDENTE DE TRABAJO SE INCORPORAN DOS  */
        /* CONCEPTOS DIFERENTES DEPENDIENDO DE LA DURACION DE LA*/
        /*INCAPACIDAD*/
  SELECT @wde_fecha_fin_au = CONVERT (DECIMAL(19,6), @cdt_fin_au)


   IF @csi_concepto <> 300 AND  @csi_concepto <> 310 AND @csi_concepto <> 
330
        AND @csi_concepto <> 335
      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

        SELECT @wde_fecha_fin_au = CONVERT (DECIMAL(19,6), @cdt_fin_au)

        /* Hallar el numero de dias del ausentismo para el periodo */
        SET @vnm_tiempo = Datediff(dd, @vdt_inicio, @vdt_fin) + 1
     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 */
                @wde_fecha_fin_au,          /* factor_01 */
                 @cin_id_au,           /* 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 */
          END
  ELSE
    BEGIN
/*INSERT INTO DEBUG VALUES ('entro2',NULL)  */


            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, @csi_dias_empresa out,   
@csi_dias_trabajador out


/*INSERT INTO DEBUG VALUES ('entro8',@csi_dias_empresa)  */
/*INSERT INTO DEBUG VALUES ('entro9',@csi_dias_trabajador) */
            IF @csi_concepto = 300 OR  @csi_concepto = 310
                BEGIN
                   SET @csi_concepto = 300
                   SET @csi_concepto1 = 310
                END
           ELSE
                BEGIN
                   SET @csi_concepto = 330
                   SET @csi_concepto1 = 335
                  END

     IF @csi_dias_empresa > 0
             BEGIN

               SET @vdt_fin_au_inicial = 
Dateadd(dd,@csi_dias_empresa,@cdt_inicio_au)
               SELECT @wde_fin_au_inicial = CONVERT (DECIMAL(19,6), @vdt_fin_au_inicial)
/*INSERT INTO DEBUG VALUES ('@csi_dias_empresa',@csi_dias_empresa)  */

               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*/
                @csi_dias_empresa,         /* tiempo */
                @wde_fin_au_inicial,          /* factor_01 */
                 @cin_id_au,           /* 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 */
              END
     IF @csi_dias_trabajador > 0
/*INSERT INTO DEBUG VALUES ('@csi_dias_trabajador',@csi_dias_trabajador)   
*/
               EXECUTE 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*/
                @csi_dias_trabajador,         /* tiempo */
                @wde_fecha_fin_au,          /* factor_01 */
                @cin_id_au,           /* factor_02 */
                @vti_prorroga,       /* factor_03 */
                0,         /* importe_reportado */
                @vdt_valor_ibc,    /* 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 */
    END

        FETCH NEXT FROM cr_ausentismos
        INTO @cin_id_au, @cch_trabajador, @csi_concepto, @cti_tipo,
             @cdt_inicio_au, @cdt_fin_au, @csi_dias, 
@cti_tipo_dias,@vdt_valor_ibc
    END /* BEGIN BAJO EL WHILE */

    CLOSE cr_ausentismos
    DEALLOCATE cr_ausentismos



END






GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

