Files
MBS/PROYECTO/nodir/noprrp043.4gl
T

194 lines
7.3 KiB
Plaintext

{
PROGRAMA : NOPRRP043
DESCRIPCION : GENERAR INFORMACION SOBRE EMPLEADOS REGISTRADOS DIARIOS
SISTEMA BIOMETRICO
FECHA DESARROYO : JUNIO 1, 2021
DESARROLLADO POR : ING. JUAN SOTO
}
IMPORT util
GLOBALS "noprgb000.4gl"
DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings()
r_filename STRING, -- filename of Report Design Document including .4rp extension
r_output STRING, -- output format option
preview INTEGER , -- TRUE/FALSE, to set preview option
xfecha1,xfecha2 DATE,
nombre_cia VARCHAR(100)
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.nombre INTO nombre_cia FROM companias a
CALL noprrp043()
END MAIN
FUNCTION noprrp043()
OPEN WINDOW w1 WITH FORM "nofmrp043"
DIALOG ATTRIBUTE(UNBUFFERED)
INPUT BY NAME xfecha1,xfecha2
END INPUT
CONSTRUCT criterio ON c.departamento,c.num_emp FROM departamento,num_emp
BEFORE CONSTRUCT
CALL departamentos()
AFTER CONSTRUCT
END CONSTRUCT
ON ACTION CANCEL ATTRIBUTE(TEXT="Cancelar", IMAGE="cancel")
EXIT PROGRAM
ON ACTION imprimir ATTRIBUTE(TEXT="Imprime", IMAGE="printer")
IF fecha_inicial IS NULL THEN
CALL msg(16)
NEXT FIELD fecha_inicial
END IF
IF xfecha1 IS NULL THEN
CALL msg(16)
NEXT FIELD xfecha1
END IF
IF xfecha2 < xfecha1 THEN
CALL msg(51)
NEXT FIELD xfecha1
END IF
CALL reporte()
END DIALOG
END FUNCTION
FUNCTION reporte()
DEFINE data RECORD
dia INT,
tipo_reg VARCHAR(2),
departamento VARCHAR(100),
num_emp INT,
nivel_emp,puesto,primer_nombre,primer_apellido VARCHAR(100),
checktime DATETIME YEAR TO MINUTE,
horas_trabajadas,horas_extras35,horas_extras100 DEC(12,2),
fecha DATETIME YEAR TO MINUTE,
entrada,salida VARCHAR(50),
hora_almuerzo INT
END RECORD,
fecha_ant DATE
LET selec = " SELECT datepart(weekday,a.checktime) as dia,a.checktype,'('+CAST(c.departamento AS CHAR(20))+') '+b.nom_dpto,a.num_emp,
' ',' ',c.nom1_emp,c.apell1_emp,a.checktime,ISNULL(a.h_trabajadas,0),ISNULL(a.h_extras35,0),ISNULL(a.h_extras100,0),
CAST(a.checktime as date)
FROM CHECKINOUT a,adtb00001 b ,adtb00003 c
WHERE c.departamento = b.departamento AND a.num_emp = c.num_emp AND
c.status_t is null and a.CHECKTIME between '",xfecha1 USING 'yyyy-mm-dd',"' and '",xfecha2 USING 'yyyy-mm-dd',"' and ",
criterio CLIPPED,
" order by '('+CAST(c.departamento AS CHAR(20))+') '+b.nom_dpto,a.num_emp,cast(a.checktime as date) "
{
" group by datepart(weekday,a.checktime) ,a.checktype,'('+CAST(c.departamento AS CHAR(20))+') '+b.nom_dpto,a.num_emp,
k1.nom_educa,k.nom_puesto,c.nom1_emp,c.apell1_emp,ISNULL(a.h_trabajadas,0),ISNULL(a.h_extras35,0),ISNULL(a.h_extras100,0),
cast(a.checktime as date) ",
}
PREPARE comando FROM selec
DECLARE buscar CURSOR FOR comando
LET idx = 1
LET r_filename = 'noprrp043.4rp'
FOREACH buscar INTO data.*
IF idx = 1 THEN
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
CALL seleccionarSalida() RETURNING r_output
LET preview=1
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
CALL fgl_report_configurexlsxdevice(null,null,null,false,false,null,1)
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
IF handler IS NOT NULL THEN -- report engine was configured ok
START REPORT registros TO XML HANDLER HANDLER
ELSE
EXIT PROGRAM
END IF
END IF
IF fecha_ant <> data.fecha THEN
LET data.entrada = NULL
LET data.salida = NULL
LET fecha_ant = data.fecha
END IF
CASE
WHEN UPSHIFT(data.tipo_reg) = "I"
LET data.entrada = util.Datetime.format( data.checktime, "(%A) %B %d, %Y %H:%M:%S" )
DISPLAY "en case I: ",data.entrada," ORIG: ",data.checktime
# LET data.salida = NULL
EXIT CASE
WHEN UPSHIFT(data.tipo_reg) = "O"
LET data.salida =util.Datetime.format( data.checktime, "(%A) %B %d, %Y %H:%M:%S" )
DISPLAY "en case O: ",data.salida," ORIG: ",data.checktime
# LET data.entrada = NULL
EXIT CASE
END CASE
# IF data.horas_trabajadas > 0 THEN
# LET data.horas_trabajadas = data.horas_trabajadas - hora_almuerzo
# END IF
LET data.dia = WEEKDAY(data.checktime)
DISPLAY "data ",data.fecha," ",data.entrada," ",data.salida," fa: ",fecha_ant," ",data.checktime," origen: ",data.tipo_reg,
" Emp ",data.num_emp
OUTPUT TO REPORT registros(data.*)
LET idx = idx +1
END FOREACH
IF idx > 1 THEN
FINISH REPORT registros
ELSE
CALL msg(3)
END IF
END FUNCTION
REPORT registros(x)
DEFINE x RECORD
dia INT,
tipo_reg VARCHAR(2),
departamento VARCHAR(100),
num_emp INT,
nivel_emp,puesto,primer_nombre,primer_apellido VARCHAR(100),
checktime DATETIME YEAR TO MINUTE,
horas_trabajadas,horas_extras35,horas_extras100 DEC(12,2),
fecha DATETIME YEAR TO MINUTE,
entrada,salida VARCHAR(50),
hora_almuerzo INT
END RECORD,
fecha1,fecha2 VARCHAR(20),
total_horas,thoras35,thoras100 DEC(12,2),
thalmuerzo,totalhoras INT,
hora string
ORDER BY x.departamento,x.num_emp,x.fecha
FORMAT
FIRST PAGE HEADER
LET hora = util.Datetime.format( CURRENT, "%Y-%m-%d %H:%M" )
LET fecha1 = xfecha1 USING "dd/mm/yyyy"
LET fecha2 = xfecha2 USING "dd/mm/yyyy"
PRINTX nombre_cia,hora,fecha1,fecha2
BEFORE GROUP OF x.departamento
PRINTX x.departamento
BEFORE GROUP OF x.num_emp
PRINTX x.num_emp,x.primer_nombre,x.primer_apellido
AFTER GROUP OF x.num_emp
LET total_horas= GROUP SUM(x.horas_trabajadas)
LET thoras35= GROUP SUM(x.horas_extras35)
LET thoras100= GROUP SUM(x.horas_extras100)
LET thalmuerzo = GROUP SUM(x.hora_almuerzo)
LET totalhoras = thoras35+thoras100+thalmuerzo+total_horas
# DISPLAY "emp ",x.num_emp," 35 ",thoras35," 100 ",thoras100," al ",thalmuerzo," thoras ",totalhoras
PRINTX total_horas,thoras35,thoras100,totalhoras
AFTER GROUP OF x.fecha
PRINTX x.entrada,x.salida,x.horas_trabajadas,x.horas_extras35,x.horas_extras100,
x.dia,thalmuerzo,x.hora_almuerzo
{ ON EVERY ROW
PRINTX x.dia,x.checktime,x.tipo_reg}
END REPORT