{ ------------------------------------------------------------------ PROGRAMA : NOPRRP039 OBJETIVO : REPORTE EMPLEADOS PROGRAMADOR : Ing. JUAN SOTO FECHA REALIZACION : Abril, 20 2010 ------------------------------------------------------------------ } IMPORT os 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 DEFINE chempleados,salario,fotos STRING, pano1,pano2 SMALLINT, vacaciones CHAR(2), anovacacion SMALLINT, foto_empleado BYTE MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL noprrp039() END MAIN FUNCTION noprrp039() DEFINE tipoEmpleados SMALLINT OPEN WINDOW w1 WITH FORM "nofmrp039" CONSTRUCT BY NAME criterio ON a.num_emp,a.cod_puesto,a.departamento,a.nomina,a.nom1_emp,a.apell1_emp, a.fech_efec,a.fecha_salida,a.fech_nac BEFORE CONSTRUCT LET kpuesto = ui.ComboBox.forName("formonly.cod_puesto") CALL puestos() CALL departamentos() AFTER CONSTRUCT IF int_flag THEN CALL msg(2) LET int_flag = FALSE EXIT PROGRAM END IF END CONSTRUCT LET chempleados = NULL INPUT BY NAME tipoEmpleados,salario,fotos, anovacacion,pano1,pano2 IF tipoEmpleados = 9 THEN LET chEmpleados = "TODOS LOS EMPLEADOS" IF fotos = "SI" THEN LET selec = "SELECT a.num_emp,a.departamento,a.cod_puesto,", " a.nom1_emp,a.apell1_emp,a.apell2_emp,a.calle,a.casa_num,CONVERT(CHAR(10),a.fech_efec,103), ", " a.cedula,a.sueldo_ac,a.fech_nac,a.foto_empleado ", " FROM adtb00003 a WHERE ",criterio CLIPPED, " AND and a.fech_efec IS NOT NULL AND a.foto_empleado IS NOT NULL ORDER BY a.departamento,a.num_emp " ELSE LET selec = "SELECT a.num_emp,a.departamento,a.cod_puesto,", " a.nom1_emp,a.apell1_emp,a.apell2_emp,a.calle,a.casa_num,CONVERT(CHAR(10),a.fech_efec,103), ", " a.cedula,a.sueldo_ac,a.fech_nac,a.foto_empleado ", " FROM adtb00003 a WHERE ",criterio CLIPPED, " AND and a.fech_efec IS NOT NULL AND a.foto_empleado IS NULL ORDER BY a.departamento,a.num_emp " END IF IF fotos = "TODOS" THEN LET selec = "SELECT a.num_emp,a.departamento,a.cod_puesto,", " a.nom1_emp,a.apell1_emp,a.apell2_emp,a.calle,a.casa_num,CONVERT(CHAR(10),a.fech_efec,103), ", " a.cedula,a.sueldo_ac,a.fech_nac,a.foto_empleado ", " FROM adtb00003 a WHERE ",criterio CLIPPED, " AND and a.fech_efec IS NOT NULL AND a.foto_empleado IS NOT NULL ORDER BY a.departamento,a.num_emp " END IF END IF IF tipoEmpleados = 0 THEN LET chEmpleados = "EMPLEADOS ACTIVOS" LET selec = "SELECT a.num_emp,a.departamento,a.cod_puesto,", " a.nom1_emp,a.apell1_emp,a.apell2_emp,a.calle,a.casa_num,CONVERT(CHAR(10),a.fech_efec,103), ", " a.cedula,a.sueldo_ac,a.fech_nac,a.foto_empleado ", " FROM adtb00003 a WHERE ",criterio CLIPPED, " AND (a.status_t is null or a.status_t = 'I') and a.fech_efec IS NOT NULL ", " ORDER BY a.departamento,a.num_emp " END IF IF tipoEmpleados = 1 THEN LET chEmpleados = "EMPLEADOS DESACTIVOS" LET selec = "SELECT a.num_emp,a.departamento,a.cod_puesto,", " a.nom1_emp,a.apell1_emp,a.apell2_emp,a.calle,a.casa_num,CONVERT(CHAR(10),a.fech_efec,103),", " a.cedula,a.sueldo_ac,a.fech_nac,a.foto_empleado ", " FROM adtb00003 a WHERE ",criterio CLIPPED, " AND a.status_t is not null and a.fech_efec IS NOT NULL", " ORDER BY a.departamento,a.num_emp " END IF IF int_flag THEN CALL msg(2) LET int_flag = FALSE EXIT PROGRAM END IF PREPARE comando FROM selec DECLARE busca_emp CURSOR FOR comando -- configure report engine; the functions prefixed fgl that are called here are part of the GRW API LET r_filename = 'noprrp039.4rp' LET idx =1 LOCATE foto_empleado IN MEMORY FOREACH busca_emp INTO emplea.num_emp,emplea.departamento,emplea.cod_puesto, emplea.nom1_emp,emplea.apell1_emp,emplea.apell2_emp, emplea.calle,emplea.casa_num,emplea.fech_efec, emplea.cedula,emplea.sueldo_ac,emplea.fech_nac, foto_empleado { IF foto_empleado IS NOT NULL THEN LET emplea.url_foto = ".\\IMAGENES\\EMPLEADOS\\",emplea.num_emp USING "&&&&&&",".jpg" CALL foto_empleado.writeFile(emplea.url_foto) # DISPLAY url_files TO fotos ELSE LET emplea.url_foto = ".\\IMAGENES\\EMPLEADOS\\NOIMAGEN.PNG" END IF } IF foto_Empleado IS NOT NULL THEN LET emplea.url_foto = ".\\IMAGENES\\EMPLEADOS\\",emplea.num_emp USING "&&&&&&",".jpg" DISPLAY "TRATE DE GUARDAR: ",emplea.url_foto CALL foto_empleado.writeFile(emplea.url_foto) ELSE LET emplea.url_foto = ".\\IMAGENES\\EMPLEADOS\\NOIMAGEN.PNG" END IF LET foto_empleado = NULL IF os.Path.exists(emplea.url_foto) THEN ELSE LET emplea.url_foto = ".\\IMAGENES\\EMPLEADOS\\NOIMAGEN.PNG" END IF #CALL fgl_winmessage("imagen",emplea.foto_empleado,"stop") 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 reporte TO XML HANDLER handler END IF END IF LET idx = idx +1 LET vacaciones=NULL IF anovacacion IS NOT NULL THEN #VERIFICA QUE EL EMPLEADO SE LE PAGO LA PROPORCION VACIONES SELECT DISTINCT a.num_emp FROM notb00008 a WHERE a.num_emp = emplea.num_emp AND a.cod_mov = 36 AND YEAR(a.fecha) = anovacacion IF STATUS != NOTFOUND THEN LET vacaciones = "SI" ELSE LET vacaciones = "NO" END IF END IF IF salario = "NO SUELDO" THEN LET emplea.sueldo_ac =0 END IF IF pano1 > 0 AND pano2 > 0 THEN LET tiempo = (today-emplea.fech_efec)/365 IF tiempo > pano1 AND tiempo < pano2 THEN OUTPUT TO REPORT reporte (emplea.*,tiempo) END IF ELSE OUTPUT TO REPORT reporte (emplea.*,tiempo) END IF END FOREACH IF idx > 1 THEN CALL fgl_winmessage("REPORTE","REPORTE TERMINADO","STOP") FINISH REPORT reporte ELSE CALL fgl_winmessage("ERROR","NO EXISTEN REGISTROS CON ESTA CONDCION","STOP") END IF CLOSE WINDOW w1 END FUNCTION REPORT reporte(x,xtiempo) DEFINE nombre_depto,nombre_puesto VARCHAR(30), x RECORD LIKE adtb00003.*, total_empleados,total_empleados_g INT, xtiempo SMALLINT, chfechnac,chfechent VARCHAR(10) # ORDER BY x.departamento FORMAT BEFORE GROUP OF x.departamento LET nombre_depto = NULL SELECT a.nom_dpto INTO nombre_depto FROM adtb00001 a WHERE a.departamento = x.departamento LET total_empleados = 0 ON EVERY ROW SELECT a.nom_puesto INTO nombre_puesto FROM adtb00004 a WHERE a.cod_puesto = x.cod_puesto IF x.fech_nac IS NULL THEN LET chfechnac='NO TIENE' ELSE LET chfechnac = x.fech_nac USING 'dd/mm/yyyy' END IF IF x.fech_efec IS NULL THEN LET chfechent='NO TIENE' ELSE LET chfechent = x.fech_efec USING 'dd/mm/yyyy' END IF DISPLAY "tmpfile ",x.url_foto LET total_empleados = total_empleados + 1 PRINTX x.*,p_companias.nombre,nombre_depto,nombre_puesto,chempleados, total_empleados,xtiempo,chfechnac,chfechent,vacaciones ON LAST ROW LET total_empleados_g = COUNT(*) PRINTX total_empleados_g END REPORT