Commit inicial: fuentes MBS ERP (Genero 6) + .gitignore + docs/SETUP_PC_MBS.md

This commit is contained in:
2026-08-18 20:59:52 -04:00
commit 454973e269
5978 changed files with 2664094 additions and 0 deletions
+407
View File
@@ -0,0 +1,407 @@
{
=========================================================================
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