ALTER  PROCEDURE dbo.sp_incorp_vacaciones_ni    
    @compania             CHAR(4)      = NULL,     
    @tipo_nomina          CHAR(2)      = NULL,    
    @anio_acumular        SMALLINT     = 0,     
    @mes_acumular         TINYINT      = 0,    
    @numero_liquidacion   SMALLINT     = 0,     
    @trabajador           CHAR(10)     = NULL,    
    @referencia           CHAR(10)     = NULL,    
    @fecha_liquidacion    SMALLDATETIME = NULL,    
    @fecha_base           SMALLDATETIME = NULL,    
    @causa_baja           CHAR(2)      = NULL,    
    @usuario              CHAR(30)     = NULL,    
    @sdtmfecha_hoy        SMALLDATETIME    
    
AS    
    
BEGIN    
    DECLARE    
    @tiempo_prog_vac    SMALLINT,    
    @dif_tiempo         SMALLINT,    
    @fecha_ini_prog     SMALLDATETIME,    
    @fecha_fin_prog     SMALLDATETIME,    
    @fecha_pago_vac     SMALLDATETIME,    
    @fecha_ingreso      SMALLDATETIME,    
    @fecha_tope         SMALLDATETIME,    
    @concepto_pagado    SMALLINT,    
    @concepto_ausencia  SMALLINT,    
    @tiempo             SMALLINT,    
    @ciclo_laboral      CHAR(8),    
    @sec_prog_vac       SMALLINT,    
    @referencia2        CHAR(10),    
    @w_hay_concepto_pagado   TINYINT,    
    @w_hay_concepto_ausencia TINYINT,    
    @w_diasfest              SMALLINT,  
  
    -- variables jcl data abril 2/2003  
 @vsi_cnc_extra          smallint,  
 @vti_conteo             tinyint,  
    @vti_hay_concepto_extra tinyint  
    
    /* Incializa variables */    
    
     SELECT @tiempo_prog_vac   = 0,    
     @dif_tiempo               = 0,    
     @fecha_ini_prog           = '',    
     @fecha_fin_prog           = '',    
     @fecha_pago_vac           = '',    
     @fecha_ingreso            = '',    
     @fecha_tope               = '',    
     @concepto_pagado          = 0,    
     @concepto_ausencia        = 0,    
     @tiempo                   = 0,    
     @ciclo_laboral            = '',    
     @sec_prog_vac             = 0,    
     @referencia2              = '',    
     @w_hay_concepto_pagado    = 0,    
     @w_hay_concepto_ausencia  = 0,    
     @w_diasfest               = 0    
    
--delete from mf_debug    
    
     /* Obtiene concepto de vacaciones pagadas relacionada a la agrupacion W31 - CONCEPTO 100*/    
     SELECT @concepto_pagado = rca.concepto    
     FROM   rel_conceptos_agr rca, rel_conc_tipo_nomina rctn    
     WHERE  rca.agr_conceptos = 'W31'     
     AND    rca.compania      = @compania    
     AND    rca.concepto      = rctn.concepto    
     AND    rca.compania      = rctn.compania    
     AND    rctn.tipo_nomina  = @tipo_nomina    
    
     IF @@Rowcount = 0    
          SELECT @w_hay_concepto_pagado = 0    
     ELSE    
          SELECT @w_hay_concepto_pagado = 1    
    
    /* data, jcl, 1,  abril 2/03 */  
    /* Manejo del bono de vacaciones W73 - CONCEPTO 110*/    
    SELECT  @vti_conteo = 0    
    
    SELECT  @vti_conteo = count(rca.concepto)    
    FROM rel_conceptos_agr rca,rel_conc_tipo_nomina rctn    
    WHERE rca.agr_conceptos = 'W73'    
    AND   rca.compania      = @compania    
    AND   rca.concepto      = rctn.concepto    
    AND   rca.compania      = rctn.compania    
    AND   rctn.tipo_nomina  = @tipo_nomina    
    
   /*** ESTA VALIDACIÓN SE OMITIO POR PETICIÓN DE CALIDAD LAURA H. YA QUE ESTE MENSAJE LES ***/    
   /*** APARECE AL USUARIO CADA VEZ QUE INCORPOREN VAC. O REALICEN CALCULOS MASIVOS. ***/    
   /*      IF (@vti_conteo = 0)    
 BEGIN    
    RAISERROR 20001 "No Tiene ningún concepto relacionado a la agrupación 'W73'."    
    RETURN 1    
 END */    
    
   IF (@vti_conteo > 1)    
 BEGIN    
    RAISERROR 20001 'Tiene más de un concepto relacionado a la agrupación "W73".'    
    RETURN 1    
 END    
    
   SELECT  @vsi_cnc_extra = rca.concepto    
   FROM rel_conceptos_agr rca,rel_conc_tipo_nomina rctn    
   WHERE rca.agr_conceptos = 'W73'    
   AND rca.compania = @compania    
   AND rca.concepto = rctn.concepto    
   AND rca.compania = rctn.compania    
   AND rctn.tipo_nomina = @tipo_nomina    
    
   IF @@Rowcount = 0    
 Select @vti_hay_concepto_extra = 0    
   ELSE    
 Select @vti_hay_concepto_extra = 1    
    
   /* Termina manejo del bono de vacaciones */    
/* end data jcl 1 */  
  
 SELECT @fecha_liquidacion = fecha_liquidacion    
 FROM liquidaciones_enc    
 WHERE compania = @compania    
 AND numero_liquidacion = @numero_liquidacion    
 AND trabajador = @trabajador    
    
 /* Obtiene concepto de ausencia de vacaciones relacionada a la agrupacion W32  - CONCEPTO 120*/    
 SELECT @concepto_ausencia = rca.concepto    
 FROM   rel_conceptos_agr rca,rel_conc_tipo_nomina rctn    
 WHERE  rca.agr_conceptos = 'W32'    
 AND    rca.compania      = @compania    
    AND    rca.concepto      = rctn.concepto    
    AND    rca.compania      = rctn.compania    
    AND    rctn.tipo_nomina  = @tipo_nomina    
 IF @@Rowcount = 0    
  Select @w_hay_concepto_ausencia = 0    
 else    
  Select @w_hay_concepto_ausencia = 1     
    
 /*delete from liquidaciones_det    
 WHERE compania = @compania    
 AND numero_liquidacion = @numero_liquidacion    
 AND trabajador = @trabajador    
 AND concepto in (@concepto_ausencia, @concepto_pagado)*/    
/* no se sabe quien comentareo las lineas antecedentes */  
  
/* jcl data 3 */  
DELETE liquidaciones_det  
WHERE numero_liquidacion = @numero_liquidacion  
 AND trabajador = @trabajador    
AND origen_transaccion = 12  
/* end jcl data 3 */   
   
   
    
 DECLARE cr_programacion_vacaciones cursor FOR     
 SELECT a.tiempo_prog_vac,    
   a.fecha_ini_per_vac,    
   a.fecha_fin_per_vac,    
   a.fecha_pago_vac,    
   a.ciclo_laboral,    
   a.sec_prog_vac,    
   b.fecha_ingreso    
  FROM   programacion_vacaciones a, trabajadores_grales b    
 WHERE  a.compania           = @compania    
 AND    a.trabajador         = @trabajador     
 AND    a.situacion_programa = 2 /* Confirmadas */    
 AND    a.compania           = b.compania    
 AND    a.trabajador         = b.trabajador    
    
 OPEN cr_programacion_vacaciones    
    
 WHILE (1 = 1)    
 BEGIN    
  FETCH cr_programacion_vacaciones INTO    
   @tiempo_prog_vac,    
   @fecha_ini_prog,    
   @fecha_fin_prog,    
   @fecha_pago_vac,    
   @ciclo_laboral,    
   @sec_prog_vac,    
   @fecha_ingreso    
    
  select @referencia2 = '     ' + convert(char(5),@sec_prog_vac)    
    
  IF (@@FETCH_STATUS <> 0)    
   BREAK    
    
  /*** Se verifica la existencia de la fecha base ***/    
  --IF @fecha_base IS NOT NULL    
  -- SELECT @fecha_tope = @fecha_base    
  --ELSE    
   SELECT @fecha_tope = @fecha_liquidacion    
    
  BEGIN    
   /* Procesa Incorporacion de vacaciones pagadas W31 */    
   insert into mf_debug values('fecha_pago_vac',convert(char,@fecha_pago_vac,112),null)    
   insert into mf_debug values('fecha_ingreso',convert(char,@fecha_ingreso,112),null)    
   insert into mf_debug values('fecha_tope',convert(char,@fecha_tope,112),null)    
   IF @fecha_pago_vac >= @fecha_ingreso AND @fecha_pago_vac <= @fecha_tope    
   BEGIN    
    
--insert into mf_debug values ('hay concepto pagado',null,null)    
    
    IF @w_hay_concepto_pagado = 1    
    BEGIN    
--     insert into mf_debug values('ingreso:',null,null)    
     IF NOT EXISTS (SELECT 1 FROM liquidaciones_enc    
       WHERE compania         = @compania    
       AND tipo_nomina        = @tipo_nomina    
       AND anio_acumular      = @anio_acumular    
       AND mes_acumular       = @mes_acumular    
       AND numero_liquidacion = @numero_liquidacion    
       AND trabajador         = @trabajador)    
     EXECUTE sp_alta_liquidaciones_enc    
       @compania,    
       @tipo_nomina,    
       @anio_acumular,    
       @mes_acumular,    
       @numero_liquidacion,    
       @trabajador,    
       @fecha_liquidacion,    
       @fecha_base,    
       @causa_baja,    
       1    
    
    EXECUTE sp_alta_liquidaciones_det    
      @compania,    
      @tipo_nomina,    
      @anio_acumular,    
      @mes_acumular,    
      @numero_liquidacion,    
      @concepto_pagado,    
      @trabajador,    
      @ciclo_laboral,  /* referencia */    
      null,      /* secuencia */    
      @referencia2,     /* referencia2 */    
      @fecha_pago_vac, /* fecha */    
      null,      /* fecha2*/    
      @tiempo_prog_vac, /* tiempo */    
      null,      /* factor_01 */    
      null,      /* factor_02 */    
      null,      /* factor_03 */    
      0,         /* importe_reportado */    
      0,         /* importado */    
      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 */    
      null,   /* coleccion 1 */    
      null,   /* coleccion 2 */    
      null,   /* coleccion 3 */    
      12,      /* origen_transaccion */    
      @usuario,   /* usuario_registro */    
      @sdtmfecha_hoy,   /* fecha_registro */    
      null,      /* usuario_proceso */    
      null,   /* fecha_proceso */    
      null,      /* usuario_cambio */    
      null,      /* fecha_cambio */    
      1       /* sit_transaccion */    
    END   /* w_hay_concepto_pagado = 1 */    
   END    
  END    
    
  /* Procesa Incorporacion de ausencias por vacaciones W32 */    
  EXECUTE sp_calcula_tiempo_per @compania, @trabajador, @tiempo_prog_vac, @fecha_ini_prog,    
   @fecha_fin_prog, @fecha_ingreso, @fecha_tope, @tiempo out,@w_diasfest OUT    
    
                SELECT @dif_tiempo =  @tiempo - @tiempo_prog_vac    
    
--                IF @dif_tiempo != 0     
--                 BEGIN    
--                    RAISERROR 20001 "Existen todavÝa vacaciones programadas con situaci¾n 2.-'Confirmadas'.    
--                        con fechas posteriores a la fecha de liquidaci¾n del trabajador .Verifique por favor."    
--                    RETURN    
--                 END    
    
  IF @tiempo != 0    
  BEGIN    
   IF @w_hay_concepto_ausencia = 1    
   BEGIN    
    IF NOT EXISTS (SELECT 1 FROM liquidaciones_enc    
      WHERE compania         = @compania    
      AND tipo_nomina        = @tipo_nomina    
      AND anio_acumular      = @anio_acumular    
      AND mes_acumular       = @mes_acumular    
      AND numero_liquidacion = @numero_liquidacion    
      AND trabajador         = @trabajador)    
     EXECUTE sp_alta_liquidaciones_enc    
       @compania,    
       @tipo_nomina,    
       @anio_acumular,    
       @mes_acumular,    
       @numero_liquidacion,    
       @trabajador,    
       @fecha_liquidacion,    
       @fecha_base,    
       @causa_baja,    
       1    
    
    EXECUTE sp_alta_liquidaciones_det    
      @compania,    
      @tipo_nomina,    
      @anio_acumular,    
      @mes_acumular,    
      @numero_liquidacion,    
      @concepto_ausencia,    
      @trabajador,    
      @ciclo_laboral, /* referencia */    
      null,      /* secuencia */    
      @referencia2, /* referencia2 */    
      @fecha_pago_vac, /* fecha */    
      null,      /* fecha2*/    
      @tiempo,     /* tiempo */    
      null,      /* factor_01 */    
      null,      /* factor_02 */    
      null,      /* factor_03 */    
      0,         /* importe_reportado */    
      0,         /* importado */    
      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 */    
      null,   /* coleccion 1 */    
      null,   /* coleccion 2 */    
      null,   /* coleccion 3 */    
      12,      /* origen_transaccion */    
      @usuario,   /* usuario_registro */    
      @sdtmfecha_hoy,   /* fecha_registro */    
      null,      /* usuario_proceso */    
      null,   /* fecha_proceso */    
      null,      /* usuario_cambio */    
      null,      /* fecha_cambio */    
      1       /* sit_transaccion */    
   END  /* w_hay_concepto_ausencia */    
  END    
 END /* WHILE */    
    
 CLOSE cr_programacion_vacaciones    
 DEALLOCATE cr_programacion_vacaciones    
  
    /* Incorpora concepto relacionado en la tal W73 jcl, data, 2, abril 2/03 */  
    IF @vti_hay_concepto_extra = 1  
    BEGIN  
  
        DECLARE cr_73 CURSOR FOR  
        SELECT   
            ciclo_laboral, sec_prog_vac, fecha_pago_vac, tiempo_prog_vac  
        FROM  
            programacion_vacaciones  
        WHERE  
            compania = @compania And  
            trabajador = @trabajador And  
            situacion_programa = 1 And  
            tipo_vacaciones = 3  
      
        OPEN cr_73  
      
        FETCH NEXT FROM cr_73 INTO @ciclo_laboral, @sec_prog_vac, @fecha_pago_vac, @tiempo  
      
        WHILE @@fetch_status = 0  
        BEGIN  
            SET @referencia2 = '     ' + convert(char(5),@sec_prog_vac)    
      
            EXECUTE sp_alta_liquidaciones_det    
              @compania,    
              @tipo_nomina,    
              @anio_acumular,    
              @mes_acumular,    
              @numero_liquidacion,    
              @vsi_cnc_extra,  
              @trabajador,    
              @ciclo_laboral, /* referencia */    
              null,      /* secuencia */    
              @referencia2, /* referencia2 */    
              @fecha_pago_vac, /* fecha */    
              null,      /* fecha2*/    
              @tiempo,     /* tiempo */    
              null,      /* factor_01 */    
              null,      /* factor_02 */    
              null,      /* factor_03 */    
              0,         /* importe_reportado */    
              0,         /* importado */    
              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 */    
              null,   /* coleccion 1 */    
              null,   /* coleccion 2 */    
              null,   /* coleccion 3 */    
              12,      /* origen_transaccion */    
              @usuario,   /* usuario_registro */    
              @sdtmfecha_hoy,   /* fecha_registro */    
              null,      /* usuario_proceso */    
              null,   /* fecha_proceso */    
              null,      /* usuario_cambio */    
              null,      /* fecha_cambio */    
              1       /* sit_transaccion */    
      
            FETCH NEXT FROM cr_73 INTO @ciclo_laboral, @sec_prog_vac, @fecha_pago_vac, @tiempo  
          
        END  
      
        CLOSE cr_73  
        DEALLOCATE cr_73    
    END  
    /* fin jcl, data, 2 */  
  
		--Data Tecnologia, Abril-28-2008: Invocacion procedimiento de incorporacion de ausentismos 
		EXEC sp_fco_incorp_ausentismos_ni @compania, @tipo_nomina, @anio_acumular, @mes_acumular, @numero_liquidacion, 
		@trabajador, @fecha_liquidacion, @fecha_base, @usuario, @sdtmfecha_hoy
  
 /*Incorpora los créditos por vacaciones     
 execute sp_incorpora_cred_vac_ni @compania,@tipo_nomina,@anio_acumular, @mes_acumular,    
 @numero_liquidacion,null,@trabajador,@fecha_liquidacion,@fecha_base,@usuario, @sdtmfecha_hoy,    
 null,0,0  */  
END  
