407 lines
12 KiB
Plaintext
407 lines
12 KiB
Plaintext
{
|
|
=========================================================================
|
|
PROGRAMA : MAINMENU
|
|
OBJETIVO : INICIAR EL MENU DEL SISTEMA
|
|
PROGRAMADOR : ING. JUAN SOTO
|
|
FECHA : 13 de Marzo 2009
|
|
========================================================================
|
|
}
|
|
|
|
|
|
IMPORT os
|
|
CONSTANT filename = "mainmenu.data"
|
|
|
|
|
|
GLOBALS
|
|
DEFINE dirs DYNAMIC ARRAY OF RECORD
|
|
ddir STRING
|
|
END RECORD,
|
|
usuario,nclave,cclave,clave char(50),
|
|
altera CHAR(100),
|
|
cambia_c,accesso CHAR(2),
|
|
pperfil SMALLINT,
|
|
sesion INT,
|
|
ptasa DEC(12,2)
|
|
|
|
DEFINE mbs DYNAMIC ARRAY OF RECORD
|
|
mbs STRING,
|
|
prog STRING,
|
|
type STRING,
|
|
desc STRING
|
|
END RECORD
|
|
DEFINE nmbs INTEGER
|
|
DEFINE longDesc STRING,
|
|
pprograma CHAR(50),
|
|
ckprinter,pprinter1,pprinter2 SMALLINT
|
|
|
|
END GLOBALS
|
|
|
|
MAIN
|
|
|
|
DEFINE pprograma CHAR(50),
|
|
i int,
|
|
pdescripcion,pdir VARCHAR(100)
|
|
|
|
DEFER INTERRUPT
|
|
OPTIONS ACCEPT KEY RETURN
|
|
OPTIONS INPUT WRAP
|
|
|
|
CONNECT to "smarmotech" AS "MSSQL" USER 'jsoto' USING 'lmmjvsd2014'
|
|
|
|
|
|
OPEN FORM main FROM "mainmenuform_1"
|
|
DISPLAY FORM main
|
|
CALL ui.Interface.LoadStyles("mainmenu")
|
|
|
|
CALL init_mbs()
|
|
|
|
DIALOG ATTRIBUTES(FIELD ORDER FORM, UNBUFFERED)
|
|
DISPLAY ARRAY dirs TO dirs.*
|
|
BEFORE ROW
|
|
CALL sync_mbs(DIALOG)
|
|
CALL DIALOG.setCurrentRow("mbs",1)
|
|
|
|
END DISPLAY
|
|
|
|
DISPLAY ARRAY mbs TO mbs.*
|
|
|
|
END DISPLAY
|
|
|
|
INPUT BY NAME longDesc
|
|
END INPUT
|
|
ON ACTION show
|
|
SET CONNECTION "MSSQL"
|
|
FOR i = 1 TO mbs.getLength()
|
|
IF mbs[i].prog IS NOT NULL THEN
|
|
LET pprograma=mbs[i].prog CLIPPED
|
|
LET pdescripcion = mbs[i].mbs CLIPPED
|
|
LET pdir = dirs[arr_curr()].ddir CLIPPED
|
|
SELECT MAX(a.programa) FROM seg0004 a WHERE a.programa = pprograma
|
|
IF STATUS <> NOTFOUND THEN
|
|
DISPLAY "descripcion ",pprograma,"(",pdescripcion,")",pdir
|
|
|
|
UPDATE seg0004 SET descripcion = RTRIM(pdescripcion),sistema=RTRIM(pdir) WHERE programa=pprograma
|
|
ELSE
|
|
INSERT INTO seg0004 VALUES (RTRIM(pprograma),RTRIM(pdir),RTRIM(pdescripcion),' ')
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
|
|
ON ACTION clave
|
|
CALL cambia_clave()
|
|
|
|
ON ACTION close
|
|
EXIT DIALOG
|
|
END DIALOG
|
|
|
|
END MAIN
|
|
|
|
FUNCTION show_mbs(d)
|
|
DEFINE d ui.Dialog
|
|
DEFINE rdir, rmbs INTEGER
|
|
DEFINE cmd STRING,file_path VARCHAR(100),
|
|
strconect VARCHAR(20)
|
|
|
|
LET rdir = d.getCurrentRow("dirs")
|
|
LET rmbs = d.getCurrentRow("mbs")
|
|
IF mbs[rmbs].prog IS NULL THEN RETURN END IF
|
|
|
|
IF mbs[rmbs].type = "services" THEN
|
|
|
|
#CONTROL ACCESO AL PROGRAMA
|
|
LET pprograma = mbs[rmbs].prog
|
|
DISPLAY BY NAME usuario,file_path,pperfil
|
|
|
|
IF accesso = "SI" THEN
|
|
SELECT a.ruta,a.conexion INTO file_path,strconect FROM seg0005 a
|
|
WHERE a.cod_perfil = pperfil AND
|
|
a.programa = pprograma
|
|
|
|
DISPLAY BY NAME file_path,pperfil
|
|
DISPLAY "conect ",strconect
|
|
LET cmd = "fglrun ",file_path CLIPPED, "\\",mbs[rmbs].prog, ".42r " ,usuario CLIPPED," ",clave CLIPPED,
|
|
" ",pprinter1 ," ",pprinter2, " ",ckprinter," ",file_path," ",strconect
|
|
|
|
RUN cmd WITHOUT WAITING
|
|
UPDATE seg0001 SET ultimo_programa_ejecutado = pprograma WHERE seg0001.usuario = usuario
|
|
|
|
ELSE
|
|
CALL FGL_WINMESSAGE( "ATENCION", "USUARIO NO TIENE PERMISOS PARA UTILIZAR OPCION", "stop")
|
|
END IF
|
|
END IF
|
|
|
|
IF mbs[rmbs].type = "FILE" THEN
|
|
|
|
#IF accesso = "SI" THEN
|
|
LET cmd = fgl_getenv("FGLFILE"), "\\",mbs[rmbs].prog CLIPPED,".XLS"
|
|
# RUN cmd WITHOUT WAITING
|
|
# ELSE
|
|
# CALL FGL_WINMESSAGE( "ATENCION", "USUARIO NO TIENE PERMISOS PARA UTILIZAR OPCION", "stop")
|
|
# END IF
|
|
#CALL showfile(dirs[rdir].ddir || "/" || mbs[rmbs].prog)
|
|
RETURN
|
|
END IF
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION init_mbs()
|
|
DEFINE reader om.XmlReader,
|
|
attributes om.SaxAttributes,
|
|
saxevent STRING,
|
|
s_sel,puser CHAR(50)
|
|
|
|
LET reader = om.XmlReader.createFileReader(filename)
|
|
|
|
LET attributes = reader.getAttributes()
|
|
LET saxevent = reader.read()
|
|
|
|
DISPLAY today TO fecha_sistema
|
|
|
|
CALL dirs.clear()
|
|
CALL mbs.clear()
|
|
WHILE saxevent IS NOT NULL
|
|
CASE saxevent
|
|
WHEN 'StartDocument'
|
|
LET nmbs=0
|
|
WHEN 'StartElement'
|
|
CASE reader.getTagName()
|
|
WHEN 'mbs'
|
|
-- Nothing
|
|
WHEN 'DDir'
|
|
CALL dirs.appendElement()
|
|
LET dirs[dirs.getLength()].ddir = attributes.getValue('name')
|
|
WHEN 'mbs'
|
|
-- Nothing
|
|
OTHERWISE
|
|
DISPLAY "Error: wrong tagName:",reader.getTagName()
|
|
END CASE
|
|
WHEN 'EndElement'
|
|
-- Nothing
|
|
END CASE
|
|
LET saxevent=reader.read()
|
|
END WHILE
|
|
END FUNCTION
|
|
|
|
FUNCTION sync_mbs(d)
|
|
DEFINE d ui.Dialog
|
|
DEFINE reader om.XmlReader,
|
|
attributes om.SaxAttributes,
|
|
saxevent STRING
|
|
DEFINE n INTEGER
|
|
LET reader = om.XmlReader.createFileReader(filename)
|
|
LET attributes = reader.getAttributes()
|
|
LET saxevent = reader.read()
|
|
INITIALIZE longDesc TO NULL
|
|
CALL mbs.clear()
|
|
WHILE saxevent IS NOT NULL
|
|
CASE saxevent
|
|
WHEN 'StartDocument'
|
|
LET nmbs=0
|
|
WHEN 'StartElement'
|
|
CASE reader.getTagName()
|
|
WHEN 'mbs'
|
|
-- Nothing
|
|
WHEN 'DDir'
|
|
IF attributes.getValue('name') == dirs[d.getCurrentRow("dirs")].ddir THEN
|
|
LET saxevent = reader.read()
|
|
WHILE saxevent IS NOT NULL
|
|
IF saxevent == 'StartElement' THEN
|
|
CASE reader.getTagName()
|
|
WHEN 'mbs'
|
|
CASE attributes.getValue('type')
|
|
WHEN "V"
|
|
CALL mbs.appendElement()
|
|
LET n = mbs.getLength()
|
|
LET mbs[n].type="services"
|
|
LET mbs[n].mbs=attributes.getValue('name')
|
|
LET mbs[n].prog=attributes.getValue('program')
|
|
LET mbs[n].desc=attributes.getValue('description')
|
|
WHEN "F"
|
|
CALL mbs.appendElement()
|
|
LET n = mbs.getLength()
|
|
LET mbs[n].type="FILE"
|
|
LET mbs[n].mbs=attributes.getValue('name')
|
|
LET mbs[n].prog=attributes.getValue('program')
|
|
LET mbs[n].desc=attributes.getValue('description')
|
|
WHEN "B"
|
|
|
|
IF attributes.getValue('program') == "README" THEN
|
|
LET longDesc = readfile(dirs[d.getCurrentRow("dirs")].ddir || "/README")
|
|
|
|
ELSE
|
|
CALL mbs.appendElement()
|
|
LET n = mbs.getLength()
|
|
LET mbs[n].type="file"
|
|
LET mbs[n].mbs=attributes.getValue('name')
|
|
LET mbs[n].prog=attributes.getValue('program')
|
|
LET mbs[n].desc=attributes.getValue('description')
|
|
END IF
|
|
WHEN "C"
|
|
CALL mbs.appendElement()
|
|
LET n = mbs.getLength()
|
|
LET mbs[n].type="file"
|
|
LET mbs[n].mbs=attributes.getValue('name')
|
|
LET mbs[n].prog=attributes.getValue('program')
|
|
LET mbs[n].desc=attributes.getValue('description')
|
|
|
|
END CASE
|
|
OTHERWISE
|
|
RETURN
|
|
END CASE
|
|
END IF
|
|
LET saxevent = reader.read()
|
|
END WHILE
|
|
END IF
|
|
WHEN 'mbs'
|
|
OTHERWISE
|
|
DISPLAY "Error: wrong tagName:",reader.getTagName()
|
|
END CASE
|
|
WHEN 'EndElement'
|
|
-- Nothing
|
|
END CASE
|
|
|
|
LET saxevent=reader.read()
|
|
END WHILE
|
|
END FUNCTION
|
|
|
|
FUNCTION showfile(fn)
|
|
DEFINE fn STRING
|
|
DEFINE txt STRING
|
|
OPEN WINDOW w WITH FORM "Maindisp"
|
|
ATTRIBUTE(TEXT="File: ["||fn||"]",STYLE="dialog")
|
|
LET txt = readfile(fn)
|
|
INPUT BY NAME txt WITHOUT DEFAULTS
|
|
AFTER INPUT
|
|
IF INT_FLAG THEN
|
|
EXIT INPUT
|
|
END IF
|
|
CONTINUE INPUT
|
|
END INPUT
|
|
CLOSE WINDOW w
|
|
END FUNCTION
|
|
|
|
FUNCTION readfile(fn)
|
|
DEFINE fn STRING
|
|
DEFINE txt STRING
|
|
DEFINE ln STRING
|
|
DEFINE ch base.Channel
|
|
LET ch=base.Channel.create()
|
|
CALL ch.openfile(fn,"r")
|
|
|
|
CALL ch.setDelimiter("")
|
|
WHILE ch.read(ln)
|
|
IF txt IS NULL THEN
|
|
IF ln IS NULL THEN
|
|
LET txt = "\n"
|
|
else
|
|
LET txt = ln
|
|
END IF
|
|
ELSE
|
|
IF ln IS NULL THEN
|
|
LET txt = txt || "\n"
|
|
ELSE
|
|
LET txt = txt || "\n" || ln
|
|
END IF
|
|
END IF
|
|
END WHILE
|
|
CALL ch.close()
|
|
RETURN txt
|
|
END FUNCTION
|
|
|
|
{================================================
|
|
FUNCION : AUTENTIFICACION
|
|
OBJETIVO : VALIDAR FUNCION DEL USUARIO
|
|
FECHA : 30/6/2009
|
|
PROGRAMADOR: JUAN SOTO
|
|
==================================================
|
|
}
|
|
|
|
FUNCTION autentificacion()
|
|
|
|
WHENEVER ERROR CONTINUE
|
|
CALL startlog("errores.log")
|
|
|
|
OPEN WINDOW inicio AT 1,1 WITH FORM "inicial"
|
|
|
|
INPUT BY NAME usuario,clave WITHOUT DEFAULTS
|
|
AFTER INPUT
|
|
IF INT_FLAG THEN
|
|
ERROR "OPERACION CANCELADA"
|
|
EXIT INPUT
|
|
END IF
|
|
|
|
CONNECT TO "smarmotech" USER usuario USING clave
|
|
IF STATUS < 0 THEN
|
|
ERROR "USUARIO NO ES VALIDO"
|
|
CONTINUE INPUT
|
|
END IF
|
|
SELECT a.cod_perfil,a.printerdefecto,a.otro_printer ,a.printer_cheque,a.cambia_clave
|
|
INTO pperfil,pprinter1,pprinter2,ckprinter,cambia_c
|
|
FROM seg0001 a
|
|
WHERE a.usuario = usuario
|
|
|
|
IF STATUS != 0 THEN
|
|
ERROR "APLICACION ESTA REPORTANDO UN ERROR, COMUNIQUESE CON SU ADMINISTRADOR"
|
|
END IF
|
|
UPDATE seg0001 SET seg0001.fecha_ultimo_login = getdate(),
|
|
seg0001.clave = clave WHERE seg0001.usuario = usuario
|
|
|
|
LET cambia_c = UPSHIFT(cambia_c)
|
|
IF cambia_c = "SI" THEN
|
|
CALL fgl_winmessage("INFO","DEBE CAMBIAR LA CLAVE","INFO")
|
|
CALL cambia_clave()
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
CLOSE WINDOW inicio
|
|
END FUNCTION
|
|
|
|
FUNCTION cambia_clave()
|
|
|
|
OPEN WINDOW cambia AT 1,1 WITH FORM "cambia"
|
|
DISPLAY usuario TO usuario
|
|
DISPLAY clave TO clave
|
|
INPUT BY NAME nclave,cclave
|
|
AFTER INPUT
|
|
IF INT_FLAG THEN
|
|
CALL FGL_WINMESSAGE( "ATENCION", "OPERACION CANCELADA", "stop")
|
|
EXIT INPUT
|
|
END IF
|
|
|
|
IF nclave IS NULL OR nclave = " " THEN
|
|
CALL FGL_WINMESSAGE( "ATENCION", "CLAVE NUEVA NO PUEDE ESTAR EN BLANCO", "stop")
|
|
NEXT FIELD nclave
|
|
END IF
|
|
IF cclave IS NULL OR cclave = " " THEN
|
|
CALL FGL_WINMESSAGE( "ATENCION", "CLAVE NUEVA NO PUEDE ESTAR EN BLANCO", "stop")
|
|
NEXT FIELD cclave
|
|
END IF
|
|
IF nclave <> cclave THEN
|
|
CALL FGL_WINMESSAGE( "ATENCION", "CLAVE NUEVA NO COINCIDE CON LA CONFIRMACION DE LA CLAVE", "stop")
|
|
NEXT FIELD nclave
|
|
ELSE
|
|
|
|
LET altera = "sp_password @old = '", clave CLIPPED,"', ",
|
|
"@new = '",nclave CLIPPED,"' ,",
|
|
"@loginame = '",usuario CLIPPED, "'"
|
|
|
|
PREPARE caltera FROM altera
|
|
EXECUTE caltera
|
|
IF STATUS = 0 THEN
|
|
UPDATE seg0001 SET cambia_clave = "NO" WHERE seg0001.usuario = usuario
|
|
CALL FGL_WINMESSAGE( "ATENCION", "CLAVE CAMBIADA SATISFACTORIAMENTE", "stop")
|
|
LET clave = nclave
|
|
ELSE
|
|
CALL FGL_WINMESSAGE( "ATENCION", "NO FUE POSIBLE EL CAMBIO DE LA CLAVE, TRATE NUEVA VEZ", "stop")
|
|
NEXT FIELD nclave
|
|
END IF
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
IF INT_FLAG THEN
|
|
LET INT_FLAG = FALSE
|
|
RETURN
|
|
CLOSE WINDOW cambia
|
|
END IF
|
|
END FUNCTION |