{
-------------------------------------------------------------------------
PROGRAMA    : ADPRRP016
OBJETIVO    : Tardanzas de los Empleados
PROGRAMADOR : Juan F. Soto
FECHA       : Septiembre 29, 1994.
-------------------------------------------------------------------------
}
GLOBALS
  "adprgb000.4gl"
   DEFINE permiso CHAR(1)
   DEFINE fecha1 DATE
   DEFINE cant_dia INTEGER
   DEFINE datos_tarde RECORD 
          num_emp     SMALLINT,
          nom_emp     CHAR(14),
          apell       CHAR(14),
          fecha       DATE,
          hora_ent    LIKE adtb00023.hora_ent,
          hora_sal    LIKE adtb00023.hora_sal
    END RECORD,
          hora_control LIKE adtb00023.hora_ent,
          l,m,mi,j,v SMALLINT

    DEFINE  salida ARRAY[100] OF RECORD
            lunes        CHAR(30),
            martes       CHAR(30),
            miercoles    CHAR(30),
            jueves       CHAR(30),
            viernes      CHAR(30)
   END RECORD

    DEFINE semana_del,semana_al DATE
    DEFINE dias_1 INTEGER

FUNCTION adprrp016()
   OPTIONS
        ERROR LINE 24,
        FORM LINE 8

   CALL pantalla()
   DISPLAY "adprrp016" AT 4,3 ATTRIBUTE(RED)
   DISPLAY "Tardanzas de Personal" AT 6,30 ATTRIBUTE(BLACK)
   OPEN FORM adfmrp016 FROM "adfmrp016"
   DISPLAY FORM adfmrp016
   
   LET tipo_papel = 1
   CALL msgrp000(tipo_papel)
       CALL defecto(impresor) RETURNING imprime, letras.*, archivo


   INPUT BY NAME semana_del,semana_al

 ON KEY(CONTROL-P)
      CALL busca_printer() RETURNING imprime,letras.*, archivo
   


   AFTER FIELD semana_al
   LET dias_1 = semana_al - semana_del

   IF dias_1 > 5 THEN
      LET numero_msg = 97
      CALL msg(numero_msg)
      NEXT FIELD semana_del
    END IF

   IF dias_1 < 4 THEN
      LET numero_msg = 98
      CALL msg(numero_msg)
      NEXT FIELD semana_del
    END IF

    AFTER INPUT
   IF int_flag THEN
      LET numero_msg = 2
      CALL msg(numero_msg)
      LET int_flag = false
      RETURN
   END IF
   EXIT INPUT
   END INPUT

   DISPLAY "Buscando Informacion... Espere Por Favor" AT 19,14

  ## Busca Los Empleados con su horario de llegada

   DECLARE busca CURSOR FOR
   SELECT UNIQUE a.num_emp,a.nom1_emp,a.apell1_emp,b.fecha,min(b.hora_ent)
   FROM adtb00003 a,adtb00023 b
   WHERE a.num_emp = b.num_emp and a.nivel_emp != 1 and
         b.fecha between semana_del and semana_al and
         b.hora_ent between "01:00" and "10:00" AND b.status_t IS NULL
   GROUP BY 1,2,3,4 ORDER BY b.fecha

   DISPLAY "Impresion en Proceso... Espere Por Favor" AT 19,14
   START REPORT tarde TO archivo

   LET l = 0
   LET m = 0
   LET mi = 0
   LET j = 0
   LET v = 0
   LET idx = 0
 
   FOREACH busca INTO datos_tarde.*

     LET fecha1 = NULL
     LET cant_dia = 0
     LET permiso = "N"

    ### Busca si el empleado tuvo permiso para tardanza
     SELECT MAX(a.fecha) INTO fecha1 FROM adtb00032 a
     WHERE a.num_emp = datos_tarde.num_emp AND a.cod_mov = 9 AND a.sec_mov = 99
       AND a.fecha <= datos_tarde.fecha

     SELECT a.num_dia INTO cant_dia FROM adtb00032 a
     WHERE a.num_emp = datos_tarde.num_emp AND a.cod_mov = 9 AND a.sec_mov = 99
       AND a.fecha = fecha1

      IF cant_dia IS NULL THEN LET cant_dia = 0 END IF
      IF fecha1   IS NULL THEN LET fecha1   = datos_tarde.fecha - 1 END IF

      IF datos_tarde.fecha>=fecha1 AND datos_tarde.fecha<=(fecha1+cant_dia) THEN
         LET fecha1 = datos_tarde.fecha + 10
      ELSE
         LET fecha1 = datos_tarde.fecha - 10
      END IF
      IF STATUS = NOTFOUND THEN
         LET fecha1 = datos_tarde.fecha - 10
      END IF

      IF fecha1 < datos_tarde.fecha THEN
        IF datos_tarde.hora_ent >= "08:10" THEN
           LET idx = idx + 1
           CASE
           WHEN weekday(datos_tarde.fecha) = 1
           LET l = l + 1
           LET salida[l].lunes = datos_tarde.nom_emp clipped," ",
                                        datos_tarde.apell clipped
           EXIT CASE
           WHEN weekday(datos_tarde.fecha) = 2
           LET m = m + 1
           LET salida[m].martes = datos_tarde.nom_emp clipped," ",
                                        datos_tarde.apell clipped
           EXIT CASE
           WHEN weekday(datos_tarde.fecha) = 3
           LET mi = mi + 1
           LET salida[mi].miercoles = datos_tarde.nom_emp clipped," ",
                                       datos_tarde.apell clipped
           EXIT CASE
           WHEN weekday(datos_tarde.fecha) = 4
           LET j = j + 1
           LET salida[j].jueves = datos_tarde.nom_emp clipped," ",
                                        datos_tarde.apell clipped
           EXIT CASE
           WHEN weekday(datos_tarde.fecha) = 5
           LET v = v + 1
           LET salida[v].viernes = datos_tarde.nom_emp clipped," ",
                                        datos_tarde.apell clipped
           EXIT CASE
       END CASE
       LET permiso = "S"
       OUTPUT TO REPORT tarde()
      END IF
     END IF
   END FOREACH

   FINISH REPORT tarde
   RUN imprime
   END FUNCTION

   REPORT tarde()
   
    DEFINE nombre1,apellidos11,apellidos1,nombre,apellidos CHAR(20)
    DEFINE dias_2 SMALLINT

    OUTPUT 
          LEFT MARGIN 3

    FORMAT
       PAGE HEADER
       

       PRINT letras.negrillas_on,
             COLUMN 19, "R A Y . O . V A C  D O M I N I C A N A, S. A."
       PRINT COLUMN 30, "Tardanzas de Los Empleados"

    #### Busca nombre del Gerente General
       SELECT nom1_emp,apell1_emp,apell2_emp INTO nombre1,apellidos1,apellidos11
       FROM adtb00003 
       WHERE departamento = 3000 and nivel_emp = 1 and
            (status_t is null or status_t NOT IN ("D","T","E"))

{
       SELECT nom1_emp,apell1_emp INTO nombre,apellidos
       FROM adtb00003
       WHERE departamento = 1000 and nivel_emp = 1
 }      

       PRINT letras.negrillas_off
       SKIP 1 LINE
       #PRINT COLUMN 1, "A        : ",nombre1 clipped," ",apellidos1
       PRINT COLUMN 1, "A        : ","RENE MONTES"
       PRINT
       PRINT COLUMN 1, "DE       : ","Gerencia de Personal"
       PRINT
       PRINT COLUMN 1, "ASUNTO   : ","Tardanzas del personal"
       PRINT
       PRINT COLUMN 1, "FECHA    : ",today using "dd/mm/yyyy"
       PRINT letras.doce
       LET dias_1 = month(semana_del)
       LET dias_2 = month(semana_al)
       CALL meses()

       SKIP 2 LINES
       PRINT       
"Mas abajo detallo las personas que llegaron tarde en la semana del ",  
day(semana_del) using "##"," de ",nombre_mes[dias_1]

PRINT "al ",day(semana_al) using "##", " de ",nombre_mes[dias_2] clipped,
" del ",year(semana_del) using "####",
" segun reporte de entrada que suministran los vigilantes."
        SKIP 2 LINE
       PRINT COLUMN 1, "LUNES",
             COLUMN 21, "MARTES",
             COLUMN 42, "MIERCOLES",
             COLUMN 64, "JUEVES",
             COLUMN 85, "VIERNES"
       PRINT COLUMN 1,
"---------------------------------------------------------------------------",
"---------------------"
      ON LAST ROW    
      FOR l = 1 TO idx
          PRINT COLUMN 1, salida[l].lunes CLIPPED,
                COLUMN 21, salida[l].martes CLIPPED,
                COLUMN 42, salida[l].miercoles CLIPPED,
                COLUMN 62, salida[l].jueves CLIPPED,
                COLUMN 85, salida[l].viernes CLIPPED
      END FOR
      PAGE TRAILER
       ### Busca nombre del Gerente de Personal

       SELECT nom1_emp,apell1_emp,apell2_emp INTO nombre1,apellidos1,apellidos11
       FROM adtb00003 
       WHERE departamento = 3000 and nivel_emp = 1 and
            (status_t is null or status_t NOT IN ("D","T","E"))

      PRINT COLUMN 40, "Atentamente, "
      SKIP 2 LINES
      PRINT COLUMN 38, nombre1 clipped," ",apellidos1 clipped," ",apellidos11
      PRINT COLUMN 38, "GERENTE DE PERSONAL"
      SKIP 14 LINES
      END REPORT

FUNCTION meses()
LET nombre_mes[1] = "Enero"
LET nombre_mes[2] = "Febrero"
LET nombre_mes[3] = "Marzo"
LET nombre_mes[4] = "Abril"
LET nombre_mes[5] = "Mayo"
LET nombre_mes[6] = "Junio"
LET nombre_mes[7] = "Julio"
LET nombre_mes[8] = "Agosto"
LET nombre_mes[9] = "Septiembre"
LET nombre_mes[10] = "Octubre"
LET nombre_mes[11] = "Noviembre"
LET nombre_mes[12] = "Diciembre" 
END FUNCTION
