SCHEMA smarmotech DEFINE usuario, clave, answer STRING, checking INT --Para verificar si los campos llenados ya existen en la BD DEFINE datos RECORD LIKE seg0001.* --Datos individuales DEFINE propiedades RECORD LIKE seg0003.* --Propiedades individuales DEFINE Duser DYNAMIC ARRAY OF RECORD --Display user abreviado ficha1 INT, usuario1 VARCHAR(100), nombreusuario1 VARCHAR(100), email1 VARCHAR(100) END RECORD DEFINE propiedades2 DYNAMIC ARRAY OF RECORD --tabla seg0007 sec_vend SMALLINT, nombre VARCHAR(100), tipo_usuario1 VARCHAR(100), comision CHAR(10), porc_cobros DECIMAL(12, 4) END RECORD MAIN --login y programa CALL ARG_VAL(1) RETURNING usuario CALL ARG_VAL(2) RETURNING clave CONNECT TO "marmotech" AS "IFMX" USER usuario USING clave CONNECT TO "smarmotech" AS "MSSQL" USER usuario USING clave CALL segprmt0001() END MAIN FUNCTION segprmt0001() SET CONNECTION "MSSQL" OPEN WINDOW w1 WITH FORM 'segfmmt001' CALL buscaUsuarios() RETURNING Duser DIALOG ATTRIBUTE(UNBUFFERED) DISPLAY ARRAY Duser TO susuarios.* BEFORE DISPLAY --Llenando todos los combo box CALL localidades('1') CALL departamentos() CALL bodegas('1') CALL perfiles() CALL printers() ON ACTION agregar ATTRIBUTES(TEXT = "Nuevo", IMAGE = "fa-address-book-o") INPUT BY NAME datos.* BEFORE INPUT NEXT FIELD num_emp AFTER FIELD num_emp SELECT a.nom1_emp || a.apell1_Emp INTO datos.nombreusuario FROM adtb00003 a WHERE a.num_emp = datos.num_emp AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD num_Emp ELSE DISPLAY BY NAME datos.nombreusuario CALL DIALOG.setFieldActive('usuario', TRUE) CALL msg(12) END IF AFTER INPUT CALL SegAdd() --Para agregar un registro a la tabla CALL DIALOG.setFieldActive('usuario', FALSE) ON ACTION CANCEL CALL msg(2) EXIT INPUT END INPUT ON ACTION borrar ATTRIBUTES(TEXT = "Eliminar", IMAGE = "delete") LET answer = fgl_winquestion( "Eliminar registro", "ESTA SEGURO DE ELIMINAR ESTE REGISTRO?", "YES", "YES|NO", "QUESTION", 0) IF answer = 'YES' THEN CALL DeleteRec(arr_curr()) ELSE CALL msg(2) END IF IF int_flag THEN CALL msg(39) END IF ON ACTION CANCEL ATTRIBUTES(TEXT = "Salir", IMAGE = "quit") EXIT PROGRAM BEFORE ROW CALL getdata(arr_curr()) --Obtenemos los datos del registro CALL buscaUsuarios() RETURNING Duser CALL fgl_settitle("Administracion de Usuarios") --seleccionado CONTINUE DIALOG END DISPLAY INPUT ARRAY propiedades2 FROM susuarios2.* ATTRIBUTES(WITHOUT DEFAULTS) AFTER FIELD sec_vend SELECT a.nom1_emp || a.apell1_Emp INTO propiedades2[arr_curr()].nombre FROM adtb00003 a WHERE a.num_emp = propiedades2[arr_curr()].sec_vend AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD sec_vend ELSE DISPLAY propiedades2[arr_curr()].nombre TO nombre NEXT FIELD tipo_usuario1 END IF ON ACTION guardar ATTRIBUTES(TEXT = "Guardar", IMAGE = "save") LET int_flag = TRUE FOR checking = 1 TO propiedades2.getLength() IF propiedades2[checking].sec_vend IS NULL THEN CALL msg(16) LET int_flag = FALSE END IF IF propiedades2[checking].tipo_usuario1 IS NULL THEN CALL msg(16) LET int_flag = FALSE END IF END FOR IF int_flag THEN BEGIN WORK DELETE FROM seg0007 WHERE seg0007.usuario = datos.usuario FOR checking = 1 TO propiedades2.getLength() INSERT INTO seg0007 VALUES(datos.usuario, propiedades2[checking].nombre, propiedades2[checking].sec_vend, propiedades2[checking].tipo_usuario1, propiedades2[checking].comision, propiedades2[checking].porc_cobros) END FOR IF sqlca.sqlcode == 0 THEN COMMIT WORK ELSE ROLLBACK WORK LET int_flag = FALSE END IF END IF IF int_flag THEN CALL msg(13) ELSE CALL msg(16) END IF ON ACTION salir ATTRIBUTES(TEXT = "Salir", IMAGE = "quit") RETURN END INPUT INPUT BY NAME datos.* ATTRIBUTES(WITHOUT DEFAULTS) BEFORE INPUT NEXT FIELD email CALL DIALOG.setFieldActive('usuario', FALSE) AFTER FIELD num_emp SELECT a.nom1_emp || ' ' || a.apell1_Emp INTO datos.nombreusuario FROM adtb00003 a WHERE a.num_emp = datos.num_emp AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL msg(3) NEXT FIELD num_Emp END IF ON ACTION addfirma CALL firmas(datos.num_emp) ON ACTION actualizar ATTRIBUTES(TEXT = "Actualizar", IMAGE = "fa-refresh") LET int_flag = FALSE IF datos.tipo_usuario IS NULL THEN CALL msg(16) ELSE LET datos.us_mod = usuario LET datos.fech_mod = CURRENT UPDATE seg0001 SET seg0001.* = datos.* WHERE seg0001.num_emp = datos.num_emp LET int_flag = TRUE END IF IF int_flag THEN CALL msg(13) ELSE CALL msg(16) END IF ON ACTION CANCEL ATTRIBUTES(TEXT = "Salir", IMAGE = "quit") EXIT PROGRAM CONTINUE DIALOG END INPUT INPUT BY NAME propiedades.* ATTRIBUTES(WITHOUT DEFAULTS) ON ACTION actualizar ATTRIBUTES(TEXT = "actualizar", IMAGE = "fa-refresh") LET int_flag = FALSE --Se actualiza uno por uno ya que en el formulario --Existían dos usuarios, entonces le coloqué PropUsuario a propiedades UPDATE seg0003 SET seg0003.nom_puesto = propiedades.nom_puesto, seg0003.autorizacionDespacho = propiedades.autorizaciondespacho, seg0003.controlDespacho = propiedades.controldespacho, seg0003.controlDespiece = propiedades.controldespiece, seg0003.controlDibujo = propiedades.controldibujo, seg0003.controlDescuento = propiedades.controldescuento, seg0003.correo = propiedades.correo, seg0003.actualizacion_log_produccion = propiedades.actualizacion_log_produccion, seg0003.fotos_adicionales_inventario = propiedades.fotos_adicionales_inventario, seg0003.aviso_reservas = propiedades.aviso_reservas, seg0003.aviso_requisicion_compras = propiedades.aviso_requisicion_compras, seg0003.distributionlist = propiedades.distributionlist, seg0003.aviso_existencia_minima_repuesto = propiedades.aviso_existencia_minima_repuesto, seg0003.controlOutlet = propiedades.controloutlet, seg0003.controlOrdenesE = propiedades.controlordenese, seg0003.controlBuzon = propiedades.controlbuzon, seg0003.controlOutlet2 = propiedades.controloutlet2, seg0003.requisicionesCompras = propiedades.requisicionesCompras WHERE seg0003.usuario = Duser[arr_curr()].usuario1 LET int_flag = TRUE IF int_flag THEN CALL msg(13) ELSE CALL msg(2) END IF ON ACTION CANCEL ATTRIBUTES(TEXT = "Salir", IMAGE = "quit") EXIT PROGRAM END INPUT END DIALOG CLOSE WINDOW w1 END FUNCTION FUNCTION getdata(i INT) --Obtener los datos y las propiedades del empleado --Seleccionado en el Duser IF i = 0 THEN INITIALIZE datos.* TO NULL RETURN END IF BEGIN WORK LOCATE datos.firmafactura IN FILE SELECT a.*, b.* INTO datos.*, propiedades.* FROM seg0001 a, seg0003 b WHERE a.num_emp = Duser[i].ficha1 AND b.usuario = a.usuario DISPLAY datos.firmafactura TO firmafactura CALL buscaPropiedades2(Duser[i].usuario1) RETURNING propiedades2 COMMIT WORK END FUNCTION FUNCTION SegAdd() --Insertar nuevo registro LET int_flag = FALSE IF datos.usuario IS NULL THEN CALL msg(16) RETURN END IF IF datos.cod_perfil IS NULL THEN CALL msg(16) RETURN END IF IF datos.printerdefecto IS NULL THEN CALL msg(16) RETURN END IF IF datos.otro_printer IS NULL THEN CALL msg(16) RETURN END IF IF datos.printer_cheque IS NULL THEN CALL msg(16) RETURN END IF IF datos.num_emp IS NULL THEN CALL msg(16) RETURN END IF BEGIN WORK LET datos.us_crea = usuario, datos.fech_crea = CURRENT INSERT INTO seg0001 VALUES datos.* INSERT INTO seg0003( usuario, nom_puesto, correo) VALUES(datos.usuario, datos.usuario, datos.email) IF sqlca.sqlcode == 0 THEN COMMIT WORK LET int_flag = TRUE ELSE ROLLBACK WORK END IF IF int_flag THEN CALL msg(1) ELSE CALL msg(2) END IF END FUNCTION FUNCTION DeleteRec(DelUser INT) LET int_flag = FALSE BEGIN WORK --Si eliminamos un registro, se eliminan sus propiedades DELETE FROM seg0001 WHERE seg0001.usuario = Duser[DelUser].usuario1 DELETE FROM seg0003 WHERE seg0003.usuario = Duser[DelUser].usuario1 DELETE FROM seg0007 WHERE seg0007.usuario = Duser[DelUser].usuario1 LET int_flag = TRUE COMMIT WORK END FUNCTION