{ ========================================================================= 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