Files
MBS/PROYECTO/otrodir/MainMenu_1.4gl
T

392 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 currForm ui.Form,
nombre_cia,kusuario CHAR(50)
DEFER INTERRUPT
OPTIONS ACCEPT KEY RETURN
OPTIONS INPUT WRAP
CALL autentificacion()
OPEN FORM main FROM "mainmenuform"
DISPLAY FORM main
# BUSCA EL NOMBRE DE LA EMPRESA
SELECT a.nombre INTO nombre_cia FROM companias a
SELECT a.prima INTO Ptasa FROM vetb00019 a WHERE disponible = "S"
DISPLAY "Usuario" TO lusuario
DISPLAY "Fecha" TO lfecha
DISPLAY "Prima" TO ltasa
DISPLAY ptasa TO tasa
DISPLAY BY NAME nombre_cia,usuario
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
CALL show_mbs(DIALOG)
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
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
CALL seg000(usuario,pperfil,pprograma) RETURNING accesso
IF accesso = "SI" THEN
UPDATE seg0001 SET ultimo_programa_ejecutado = pprograma WHERE seg0001.usuario = usuario
LET cmd = "fglrun ",fgl_getenv("FGLPROG"), "\\",mbs[rmbs].prog , ".42r " ,usuario CLIPPED," ",clave CLIPPED,
" ",pprinter1 ," ",pprinter2, " ",ckprinter
RUN cmd WITHOUT WAITING
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 fgl_winmessage("prueba",fn,"stop")
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 fecha_ultimo_login = getdate() WHERE seg0001.usuario = usuario
LET cambia_c = UPSHIFT(cambia_c)
IF cambia_c = "SI" THEN
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 = cclave THEN
CALL FGL_WINMESSAGE( "ATENCION", "CLAVE NUEVA NO PUEDE SER IGUAL A LA VIEJA", "stop")
NEXT FIELD nclave
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