Files
MBS/PROYECTO/seguridad2.0/segprmt0001.4gl
T

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