401 lines
12 KiB
Plaintext
401 lines
12 KiB
Plaintext
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
|