194 lines
7.3 KiB
Plaintext
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 |