288 lines
9.0 KiB
Plaintext
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
|