{ ------------------------------------------------------------------------- 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