# Property of Four Js* # (c) Copyright Four Js 1995, 2019. All Rights Reserved. # * Trademark of Four Js Development Tools Europe Ltd # in the United States and elsewhere # # Four Js and its suppliers do not warrant or guarantee that these # samples are accurate and suitable for your purposes. Their inclusion is # purely for information purposes only. IMPORT os #IMPORT FGL demo_make_db IMPORT FGL demo_load SCHEMA decomarmol DEFINE fecha_licencia date DEFINE readme,nombre_cia,usuario,fecha_sistema,opcion,filedash,urldefecto STRING, ptasa FLOAT,dia_actual,dia_vencimiento,dia_quedan INT,mensaje varchar(100) ,accesso CHAR(2) DEFINE demos DYNAMIC ARRAY OF RECORD NAME, PROGRAM,args,tipo,basedatos,descripcion,dirname,ruta VARCHAR(255) END RECORD DEFINE topics DYNAMIC ARRAY OF RECORD NAME,parent,dirname VARCHAR(255), programa VARCHAR(50) END RECORD, usuarios,clave VARCHAR(50), pperfil,pprinter1,pprinter2,ckprinter,pcodcia INT, cambia_c VARCHAR(10), i INT, documento VARCHAR(255) MAIN call ui.Interface.loadStyles("menup") # CALL ui.Interface.setName("contenedor") # CALL ui.Interface.setType("container") # CALL ui.Interface.setText("This is the Container") # CALL ui.Interface.setSize("600px","1000px") # OPTIONS INPUT WRAP # OPTIONS ACCEPT KEY RETURN CALL autentificacion() RETURNING usuarios,clave,pperfil,pprinter1,pprinter2,ckprinter,cambia_c,pcodcia OPEN FORM main FROM "demo" DISPLAY FORM MAIN DISPLAY ".\\IMAGENES\\logo.png" TO logo SELECT a.nombre,a.url INTO nombre_cia,urldefecto FROM companias a WHERE a.cod_comp = pcodcia IF urldefecto IS NULL THEN LET urldefecto = FGL_GETENV("DASH"),"\\greeting.html" END IF DISPLAY "fecha 1" ,fecha_licencia DISPLAY BY NAME fecha_licencia # BUSCA EL NOMBRE DE LA EMPRESA SELECT a.nombre,a.fecha_licencia INTO nombre_cia,fecha_licencia FROM companias a SELECT a.prima INTO Ptasa FROM vetb00019 a WHERE disponible = "S" LET ptasa = 60 # LET usuario = 'JOHNNY SOTO' LET fecha_sistema = TODAY LET dia_actual=DAY(fecha_sistema) LET dia_vencimiento=DAY(fecha_licencia) LET dia_quedan=(fecha_licencia-fecha_sistema) DISPLAY dia_quedan ,dia_vencimiento,dia_actual IF dia_quedan <0 THEN LET dia_quedan =0 END IF IF dia_quedan<5 THEN LET mensaje ="SOLO QUEDAN",dia_quedan CLIPPED," DIAS PARA QUE SE TERMINE LA LICENCIA" CALL fgl_winmessage("ERROR",mensaje,"STOP") END IF DISPLAY "Usuario" TO lusuario DISPLAY "Fecha" TO lfecha DISPLAY "Tasa" TO ltasa DISPLAY "Dias Vence Licencia" TO diasl DISPLAY "Fecha Licencia" TO ifecha_licencia DISPLAY ptasa TO tasa DISPLAY BY NAME fecha_sistema DISPLAY BY NAME nombre_cia,fecha_licencia IF dia_quedan>10 AND dia_quedan <15THEN DISPLAY BY NAME dia_quedan ATTRIBUTE(cyan) ELSE IF dia_quedan<10 THEN DISPLAY "dia",dia_quedan DISPLAY BY NAME dia_quedan ATTRIBUTE(RED) ELSE DISPLAY BY NAME dia_quedan END IF END IF DISPLAY usuarios TO usuario CALL fetch_topics() DIALOG ATTRIBUTES(FIELD ORDER FORM, UNBUFFERED) DISPLAY ARRAY topics TO s_topics.* BEFORE ROW # CALL fetch_demos(topics[arr_curr()].*) # LET readme = readfile(os.Path.join(topics[arr_curr()].dirname, "README")) #DISPLAY "DATOS ",topics[arr_curr()].dirname # CALL fetch_doc('modulo',topics[arr_curr()].dirname) RETURNING readme CALL buscaDoc(topics[arr_curr()].programa) RETURNING documento DISPLAY BY NAME documento LET filedash = FGL_GETENV("DASH"),"\\",usuarios CLIPPED,'.html' IF os.Path.exists(filedash) THEN DISPLAY filedash CLIPPED TO dashboard ELSE LET filedash=urldefecto CLIPPED DISPLAY filedash CLIPPED TO dashboard END IF DISPLAY "url da ",filedash ON ACTION refrescar LET filedash = FGL_GETENV("DASH"),"\\",usuarios CLIPPED,'.html' IF os.Path.exists(filedash) THEN DISPLAY filedash CLIPPED TO dashboard ELSE LET filedash=urldefecto CLIPPED DISPLAY filedash CLIPPED TO dashboard DISPLAY "URL ",urldefecto END IF ON ACTION cambia ATTRIBUTE(TEXT="Cambia Clave",IMAGE='user') LET opcion = fgl_winquestion("Cambiar","Al cambiar la clave el sistema va a salir, debe volver a entrar con la clave nueva","NO","YES|NO","question",0) IF opcion = "YES" THEN CALL cambia_clave() EXIT PROGRAM END IF ON ACTION SHOW IF dia_quedan>0 THEN IF arr_curr() > 0 THEN CALL run_demo(topics[arr_curr()].programa) END IF ELSE CALL fgl_winmessage("ERROR","LICENCIA VENCIDA","STOP") END IF # ON EXPAND(i) # CALL fetch_demos(topics[arr_curr()].*) AFTER DISPLAY END DISPLAY { DISPLAY ARRAY demos TO s_demos.* ON ACTION show IF arr_curr() > 0 THEN CALL run_demo(demos[arr_curr()].*) END IF ON ACTION cambia ATTRIBUTE(TEXT="Cambia Clave",IMAGE='user') LET opcion = fgl_winquestion("Cambiar","Al cambiar la clave el sistema va a salir, debe volver a entrar con la clave nueva","NO","YES|NO","question",0) IF opcion = "YES" THEN CALL cambia_clave() EXIT PROGRAM END IF AFTER DISPLAY END DISPLAY } ON ACTION CANCEL EXIT DIALOG #IF int_flag THEN EXIT INPUT END if END DIALOG END MAIN FUNCTION fetch_topics() DEFINE topic RECORD NAME,parent,dirname VARCHAR(255), programa VARCHAR(50) END RECORD DEFINE n INT LET n = 0 DECLARE topic CURSOR FOR SELECT a.NAME as nombre,a.parent,a.dirname, ' ' AS programa,a.orden AS orden,a.dirname as directorio FROM topics a WHERE a.estado = 'online' UNION select distinct b.name as nombre,a.name as parent,b.dirname as directorio,b.program AS programa, b.orden AS orden,a.dirname from topics a inner join demos b on a.dirname = b.dirname and b.estado = 'online' where a.estado = 'online' order by orden,parent,nombre #SELECT * INTO topic.* FROM topics WHERE estado = 'online' # ORDER BY orden,dirname FOREACH topic INTO topic.* LET n = n + 1 LET topics[n].* = topic.* END FOREACH LET i = n END FUNCTION FUNCTION fetch_demos(topic) DEFINE topic RECORD NAME,parent,dirname,programa VARCHAR(255) END RECORD DEFINE demo RECORD NAME, PROGRAM,args,tipo,basedatos,descripcion,dirname,ruta VARCHAR(255) END RECORD DEFINE n INT CALL demos.clear() LET n = i # LET topic.dirname = '/CONTABILIDAD/Mantenimientos' DECLARE demo CURSOR FOR SELECT * INTO demo.* FROM demos WHERE dirname = topic.dirname AND estado = 'online' ORDER BY dirname FOREACH demo CASE demo.tipo WHEN "V" LET demo.tipo = "services" WHEN "B" LET demo.tipo = "file" END CASE LET n = n + 1 LET demos[n].* = demo.* LET topics[n].NAME = demo.name LET topics[n].dirname = demo.dirname END FOREACH END FUNCTION FUNCTION fetch_doc(tipo_p,opcion) DEFINE tipo_p,opcion VARCHAR(100), s STRING SELECT a.descripcion INTO s FROM documentos a WHERE a.tipo_programa = tipo_p AND a.programa = opcion LET s ="

", s clipped,"

" RETURN s END FUNCTION FUNCTION run_demo(xprograma) DEFINE demo RECORD NAME, PROGRAM,args,tipo,basedatos,descripcion,dirname,ruta VARCHAR(255) END RECORD DEFINE cmd,xprograma STRING DEFINE isUnix BOOLEAN LET demo.program = xprograma DISPLAY "programa ",demo.program CALL seg000(usuarios,pperfil,demo.program) RETURNING accesso # DISPLAY BY NAME usuario,demo.ruta,pperfil DISPLAY "acceso",accesso ,"us",usuario,"perfil",pperfil,"program",demo.program IF accesso = "SI" THEN SELECT MAX(a.ruta),MAX(a.tipo) INTO demo.ruta,demo.tipo FROM demos a WHERE a.program = demo.program IF demo.program IS NULL THEN RETURN END IF CASE demo.tipo WHEN "V" -- Run the command: Check if there is a script to run the demo LET isUnix = fgl_getenv("WINDIR") IS NULL IF NOT isUnix THEN LET demo.dirname = unixToDosPath(demo.dirname) END IF LET cmd = os.Path.join(demo.dirname, demo.program), IIF(isUnix, ".sh", ".bat") IF os.Path.exists(cmd) THEN -- Script IF isUnix THEN LET cmd = "sh ", cmd END IF LET cmd = cmd, " ", demo.args ELSE -- 4gl program LET cmd = "cd ", demo.ruta CLIPPED, " && fglrun ", demo.program CLIPPED, " ", usuarios," ",clave," ",pperfil," ", pprinter1," "," ", pprinter2, " ",ckprinter END IF RUN cmd WITHOUT WAITING WHEN "file" CALL showfile(os.Path.join(demo.dirname, demo.program)) OTHERWISE -- Can't happen? END CASE ELSE CALL FGL_WINMESSAGE( "ATENCION", "USUARIO NO TIENE PERMISOS PARA UTILIZAR OPCION", "stop") END IF END FUNCTION FUNCTION unixToDosPath(path) DEFINE path STRING DEFINE buf base.StringBuffer LET buf = base.StringBuffer.create() CALL buf.append(path) CALL buf.replace("/", "\\", 0) RETURN buf.toString() END FUNCTION FUNCTION showfile(fn) DEFINE fn STRING DEFINE txt STRING OPEN WINDOW w WITH FORM "demodisp" ATTRIBUTE(TEXT = "File: [" || fn || "]", STYLE = "dialog") LET txt = readfile(fn) INPUT BY NAME txt WITHOUT DEFAULTS; LET int_flag = FALSE CLOSE WINDOW w END FUNCTION FUNCTION readfile(fn) DEFINE fn STRING DEFINE t TEXT DEFINE s STRING LOCATE t IN FILE fn LET s = t RETURN s END FUNCTION FUNCTION buscadoc(xprograma) DEFINE xprograma VARCHAR(50), xdocumento VARCHAR(255) SELECT MAX(a.description) INTO xdocumento FROM demos a WHERE a.program = xprograma RETURN xdocumento END FUNCTION