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

318 lines
9.9 KiB
Plaintext

{
-------------------------------------------------------------------------
PROGRAMA : ADPRRP030
OBJETIVO : Tardanzas de los Empleados
Reporte de todos los empleados con tardanzas
para enviar a la Gerencia General
PROGRAMADOR : Juan F. Soto
FECHA : Septiembre 29, 1994.
-------------------------------------------------------------------------
}
GLOBALS
"adprgb000.4gl"
DEFINE ch_depto1 CHAR(4)
DEFINE nombre_dpto1 CHAR(30)
DEFINE fecha1 DATE
DEFINE depto1,cant_dia INTEGER
DEFINE datos_tarde RECORD
departamento INTEGER,
num_emp SMALLINT,
nom_emp CHAR(14),
apell CHAR(14),
fecha DATE,
hora_ent LIKE adtb00023.hora_ent,
hora_sal LIKE adtb00023.hora_sal,
depto INTEGER
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 adprrp030()
OPTIONS
ERROR LINE 24,
FORM LINE 8
CALL pantalla()
DISPLAY "adprrp030" AT 4,3 ATTRIBUTE(RED)
DISPLAY "Tardanzas de Empleados Por Departamento" AT 6,20 ATTRIBUTE(BLACK)
OPEN FORM adfmrp030 FROM "adfmrp016"
DISPLAY FORM adfmrp030
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
DECLARE busca CURSOR FOR
{SELECT UNIQUE a.departamento,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 a.departamento > 0
GROUP BY 1,2,3,4,5
ORDER BY b.fecha
}
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
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,5
ORDER BY b.fecha
DISPLAY "Buscando Informacion... Espere Por Favor" AT 19,14
START REPORT tarde30 TO archivo
DISPLAY "Impresion en Proceso... Espere Por Favor" AT 19,14
FOREACH busca INTO datos_tarde.*
SELECT a.departamento INTO datos_tarde.departamento
FROM adtb00003 a
WHERE a.num_emp = datos_tarde.num_emp
LET depto1 = datos_tarde.departamento
LET ch_depto1 = depto1 USING "&&&&"
LET ch_depto1 = ch_depto1[1],"000"
LET datos_tarde.depto = ch_depto1
LET fecha1 = NULL
LET cant_dia = 0
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
OUTPUT TO REPORT tarde30(datos_tarde.*)
END IF
END IF
END FOREACH
FINISH REPORT tarde30
RUN imprime
END FUNCTION
REPORT tarde30(x)
DEFINE x RECORD
departamento INTEGER,
num_emp SMALLINT,
nom_emp CHAR(14),
apell CHAR(14),
fecha DATE,
hora_ent LIKE adtb00023.hora_ent,
hora_sal LIKE adtb00023.hora_sal,
depto INTEGER
END RECORD,
mdepto INTEGER
DEFINE nombre1,apellidos11,apellidos1,nombre,apellidos CHAR(20)
DEFINE x_depto1 SMALLINT
DEFINE cc_dpto,cc_dpto1 CHAR(1)
DEFINE dias_2 SMALLINT
OUTPUT
LEFT MARGIN 3
ORDER BY x.depto,x.departamento
FORMAT
BEFORE GROUP OF x.depto
LET l = 0
LET m = 0
LET mi = 0
LET j = 0
LET v = 0
LET idx = 0
PRINT letras.negrillas_on
PRINT 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"
LET mdepto = x.depto + 100
SELECT UNIQUE nom1_emp,apell1_emp INTO nombre,apellidos
FROM adtb00003
WHERE departamento BETWEEN x.depto AND mdepto and nivel_emp = 1 AND
(status_t IS NULL OR status_t NOT IN ("D","T","E"))
LET cc_dpto = x.depto USING "&"
PRINT letras.negrillas_off
PRINT letras.comp_on,letras.doce
SKIP 1 LINE
PRINT COLUMN 1, "A : ",nombre clipped," ",apellidos
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 meses1()
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,
"---------------------------------------------------------------------------",
"--------------------------------------------------------------------------"
LET idx = 0
ON EVERY ROW
LET idx = idx + 1
CASE
WHEN weekday(x.fecha) = 1
LET l = l + 1
LET salida[l].lunes = x.hora_ent clipped ," ",
x.nom_emp clipped," ",
x.apell clipped
EXIT CASE
WHEN weekday(x.fecha) = 2
LET m = m + 1
LET salida[m].martes = x.hora_ent clipped ," ",
x.nom_emp clipped," ",
x.apell clipped
EXIT CASE
WHEN weekday(x.fecha) = 3
LET mi = mi + 1
LET salida[mi].miercoles = x.hora_ent clipped ," ",
x.nom_emp clipped," ",
x.apell clipped
EXIT CASE
WHEN weekday(x.fecha) = 4
LET j = j + 1
LET salida[j].jueves = x.hora_ent clipped ," ",
x.nom_emp clipped," ",
x.apell clipped
EXIT CASE
WHEN weekday(x.fecha) = 5
LET v = v + 1
LET salida[v].viernes = x.hora_ent clipped ," ",
x.nom_emp clipped," ",
x.apell clipped
EXIT CASE
END CASE
AFTER GROUP OF x.depto
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
FOR l = 1 TO idx
LET salida[l].lunes = NULL
LET salida[l].martes = NULL
LET salida[l].miercoles = NULL
LET salida[l].jueves = NULL
LET salida[l].viernes = NULL
END FOR
SKIP TO TOP OF PAGE
PAGE TRAILER
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 meses1()
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