205 lines
6.6 KiB
Plaintext
205 lines
6.6 KiB
Plaintext
{
|
|
------------------------------------------------------------------
|
|
PROGRAMA : VEPRMT102
|
|
OBJETIVO : Capturar, Modificar, Eliminar registros de la
|
|
Tabla de Documentos del cliente
|
|
PROGRAMADOR : Ing. Luis Soto
|
|
FECHA REALIZACION : Enero 27, 2026.
|
|
------------------------------------------------------------------
|
|
} IMPORT os
|
|
IMPORT util
|
|
GLOBALS "veprgb000.4gl"
|
|
DEFINE documentos DYNAMIC ARRAY OF RECORD
|
|
nombre_file VARCHAR(100),
|
|
filedestino string,
|
|
data BYTE,
|
|
tipo_file CHAR(20),
|
|
arch_tipo int
|
|
END RECORD
|
|
DEFINE cliente RECORD
|
|
tipo_cliente INT,
|
|
sec_cliente INT,
|
|
nom_cliente VARCHAR(100)
|
|
END RECORD
|
|
|
|
DEFINE tmpdir_file,tipos_foto,dir_file,dir_foto CHAR(60),
|
|
d_tipos,mensaje,f_tipos,l_file,filepath,extension,extension_foto,tmp_dirfoto,imagefac,tmp_destino STRING,ffoto,pimagen BYTE
|
|
, nombre_file_foto,foto VARCHAR(100),p_res smallint
|
|
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
|
|
CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave
|
|
|
|
CALL veprmt102()
|
|
|
|
END MAIN
|
|
|
|
FUNCTION veprmt102()
|
|
|
|
|
|
OPTIONS
|
|
|
|
ERROR LINE 23,
|
|
MESSAGE LINE 24,
|
|
COMMENT LINE 21
|
|
|
|
OPEN WINDOW vefmmt102 AT 2,2 WITH FORM "vefmmt102" ATTRIBUTE
|
|
(BORDER,FORM LINE FIRST+4,COMMENT LINE LAST)
|
|
|
|
INITIALIZE cliente_bas.* TO NULL
|
|
INITIALIZE cliente_dir.* TO NULL
|
|
|
|
MENU
|
|
|
|
ON ACTION adicionar
|
|
LET int_flag = FALSE
|
|
SET CONNECTION "MSSQL"
|
|
CLEAR FORM
|
|
CALL vepcad102()
|
|
|
|
ON ACTION salir
|
|
LET INT_FLAG = FALSE
|
|
EXIT PROGRAM
|
|
END MENU
|
|
LET INT_FLAG = FALSE
|
|
CLOSE WINDOW vefmmt102
|
|
END FUNCTION
|
|
|
|
FUNCTION vepcad102()
|
|
DIALOG ATTRIBUTES(UNBUFFERED)
|
|
INPUT BY NAME cliente.*
|
|
AFTER FIELD sec_cliente
|
|
IF cliente.tipo_cliente is NULL or
|
|
cliente.tipo_cliente = 0 then
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo_cliente
|
|
END IF
|
|
|
|
SELECT a.nombre
|
|
INTO cliente.nom_cliente
|
|
FROM vetb00004 a
|
|
WHERE a.tipo_cliente = cliente.tipo_cliente AND
|
|
a.sec_cliente = cliente.sec_cliente AND
|
|
a.status_t IS NULL
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD tipo_cliente
|
|
END IF
|
|
|
|
END INPUT
|
|
|
|
INPUT ARRAY documentos FROM docu.* ATTRIBUTES(WITHOUT DEFAULTS)
|
|
BEFORE INPUT
|
|
IF cliente.tipo_Cliente IS NULL OR cliente.sec_cliente IS NULL THEN
|
|
CALL fgl_winmessage("ERROR","EL CLIENTE NO PUEDE ESTAR VACIO","STOP")
|
|
NEXT FIELD tipo_cliente
|
|
END IF
|
|
DECLARE buscat CURSOR FOR
|
|
SELECT a.nombre_file, a.ruta, a.arch_tipo, a.tipo
|
|
FROM vetb00062 a
|
|
WHERE a.tipo_Cliente=cliente.tipo_cliente AND a.sec_cliente =cliente.sec_cliente
|
|
|
|
LET idx=1
|
|
FOREACH buscat INTO documentos[idx].nombre_file,documentos[idx].filedestino,
|
|
documentos[idx].arch_tipo,documentos[idx].tipo_file
|
|
LET idx=idx+1
|
|
END FOREACH
|
|
BEFORE ROW
|
|
# LET documentos[arr_curr()].filedestino =NULL
|
|
DISPLAY documentos[arr_curr()].filedestino TO foto
|
|
ON ACTION busca_foto ATTRIBUTE(TEXT="Foto",IMAGE="upload")
|
|
CALL agregar_archivo(arr_curr()) RETURNING tmp_dirfoto
|
|
DISPLAY "destino ",tmp_dirfoto
|
|
LET documentos[arr_curr()].nombre_file = os.Path.basename(tmp_dirfoto)
|
|
LET documentos[arr_curr()].tipo_file = os.Path.extension(tmp_dirfoto)
|
|
LET documentos[arr_curr()].filedestino=tmp_dirfoto
|
|
|
|
LOCATE documentos[arr_curr()].data IN MEMORY
|
|
CALL documentos[arr_curr()].data.readfile(tmp_dirfoto)
|
|
DISPLAY documentos[arr_curr()].filedestino TO foto
|
|
|
|
ON ACTION abrir_doc
|
|
TRY
|
|
LET tmpdir_file = documentos[arr_curr()].filedestino
|
|
|
|
# CALL documentos[arr_curr()].data.writeFile(tmpdir_file)
|
|
|
|
CALL ui.Interface.frontCall("standard","getenv", ["TEMP"], [l_file] )
|
|
|
|
LET l_file = l_file CLIPPED,"\\",documentos[arr_curr()].nombre_file
|
|
|
|
CALL fgl_putfile(tmpdir_file,l_file)
|
|
|
|
CALL ui.Interface.frontCall("standard","shellexec", [l_file],[p_res])
|
|
|
|
CATCH
|
|
CALL fgl_winmessage("ERROR",err_get(STATUS),"INFO")
|
|
END TRY
|
|
|
|
END INPUT
|
|
|
|
ON ACTION guardar
|
|
BEGIN WORK
|
|
DELETE FROM vetb00062
|
|
WHERE tipo_cliente=cliente.tipo_cliente AND sec_cliente=cliente.sec_cliente
|
|
FOR idx=1 TO documentos.getLength()
|
|
INSERT INTO vetb00062
|
|
(tipo_cliente, sec_cliente, nombre_file, ruta, arch_tipo, tipo)
|
|
VALUES(cliente.tipo_cliente,cliente.sec_cliente,documentos[idx].nombre_file,documentos[idx].filedestino,
|
|
documentos[idx].arch_tipo,documentos[idx].tipo_file)
|
|
END FOR
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
CALL fgl_winmessage("ERROR","NO PUDE ACTUALIZAR DOCUMENTOS","STOP")
|
|
ELSE
|
|
COMMIT WORK
|
|
LET numero_msg = 1
|
|
CALL msg(numero_msg)
|
|
CALL documentos.clear()
|
|
INITIALIZE cliente.* TO NULL
|
|
RETURN
|
|
END IF
|
|
|
|
|
|
ON ACTION CANCEL
|
|
LET INT_FLAG = FALSE
|
|
CALL msg(2)
|
|
RETURN
|
|
|
|
END DIALOG
|
|
END FUNCTION
|
|
FUNCTION agregar_archivo(i)
|
|
|
|
DEFINE filepath STRING
|
|
DEFINE tmpfile STRING
|
|
DEFINE i INTEGER
|
|
DEFINE tmp_destino,nombre_foto string
|
|
|
|
LET filepath= NULL
|
|
CALL ui.Interface.frontCall(
|
|
"standard","openfile",
|
|
[NULL,"Images","*.jpg *.png *.gif *.pdf","Seleccione archivo"],
|
|
[filepath]
|
|
)
|
|
|
|
{IF filepath IS NULL THEN
|
|
RETURN
|
|
END IF}
|
|
LET nombre_foto =cliente.tipo_cliente USING "<<<<<<<<","-",cliente.sec_cliente USING "<<<<<<<<","-",i USING "<<<<"
|
|
LET tmpfile = FGL_GETENV("TEMP"),"\\",nombre_foto CLIPPED,".jpg"
|
|
LET tmp_destino=fgl_getenv("IMAGENES"),"\\clientes\\",nombre_foto CLIPPED,".",os.Path.extension(filepath)
|
|
|
|
DISPLAY "tmp file",tmpfile
|
|
DISPLAY "nombre ",nombre_foto
|
|
-- Copia local FE ? FE
|
|
CALL fgl_getfile(filepath, tmp_destino)
|
|
|
|
RETURN tmp_destino
|
|
END FUNCTION
|