Files
MBS/PROYECTO/addir/adprrp016.4gl
T

288 lines
9.0 KiB
Plaintext

{
-------------------------------------------------------------------------
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,
hora_e LIKE adtb00023.hora_ent
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 "08:10" AND "13: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
SELECT min(b.hora_ent)
INTO hora_e
FROM adtb00023 b
WHERE b.fecha = datos_tarde.fecha and
b.hora_ent < "08:10" AND b.status_t IS NULL and
b.num_emp = datos_tarde.num_emp
IF hora_e IS NULL THEN
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.hora_ent CLIPPED," ",
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.hora_ent CLIPPED," ",
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.hora_ent CLIPPED," ",
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.hora_ent CLIPPED," ",
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.hora_ent CLIPPED," ",
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 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.comp_on,letras.doce
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.comp_on,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 31, "MARTES",
COLUMN 62, "MIERCOLES",
COLUMN 92, "JUEVES",
COLUMN 125, "VIERNES"
PRINT COLUMN 1,
"---------------------------------------------------------------------------",
"--------------------------------------------------------------------------"
ON LAST ROW
FOR l = 1 TO idx
PRINT COLUMN 1, salida[l].lunes CLIPPED,
COLUMN 31, salida[l].martes CLIPPED,
COLUMN 62, salida[l].miercoles CLIPPED,
COLUMN 92, salida[l].jueves CLIPPED,
COLUMN 125, 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
PRINT letras.comp_off
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