325 lines
11 KiB
Plaintext
325 lines
11 KiB
Plaintext
# 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 ="<html><body><h1><b>", s clipped,"</b></h1></body></html>"
|
|
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 |