Files
2026-09-22 20:38:51 -04:00

285 lines
9.6 KiB
Plaintext

{
PROGRAMA : prprmt020
OBJETIVO : Administrar los documentos de las ordenes
PROGRAMADOR : ING. JUAN SOTO
FECHA : 10/1/2013
ACTUALIZACION: SE CAMBIO DE SOLO ADMINISTRAR LOS DIBUJOS A MANEJAR TODOS LOS DOCUMENTOS RELACIONADOS A LA ORDEN
FECHA ACTUALIZACION: 1/12/2015
}
IMPORT os
GLOBALS "prprgb000.4gl"
DEFINE d_tipos,mensaje,f_tipos,filepath,extension,xdestino,l_file,tmpdir_file STRING
MAIN
DEFER INTERRUPT
CALL STARTLOG("prmt020.log")
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
# CALL showDir("F:\\MASTER\\DOCUMENTOS_ORDENES")
CONNECT to "marmotech_t" AS "IFMX" USER 'jsoto' USING 'lmmjvsd2014'
CONNECT to "decomarmol_te" AS "MSSQL" USER usuarios USING clave
DECLARE buscacorreo CURSOR FOR
SELECT a.correo FROM seg0003 a
WHERE a.controldibujo = 'SI'
LET idx = 1
FOREACH buscacorreo INTO copiacorreo[idx]
LET copiaemail = copiaemail CLIPPED,";",copiacorreo[idx]
LET idx = idx + 1
END FOREACH
CALL prprmt020()
END MAIN
FUNCTION prprmt020()
DEFINE nombre_cliente,email,emailsubject,emailbody,procedimiento,vendedor,dir_file CHAR(60),
url,filedestino VARCHAR(200),
documentos DYNAMIC ARRAY OF RECORD
idx INT,
tipo_file CHAR(20),
bodega SMALLINT,
num_doc INT,
nombre_file VARCHAR(100),
filedestino BYTE
END RECORD,
p_res,i SMALLINT,
chpath VARCHAR(1),
cmd VARCHAR(200),
exito BOOLEAN,
tipo_file CHAR(20),
bodega SMALLINT,
num_doc INT
# Busca correo usuario
SELECT a.email INTO email FROM seg0001 a
WHERE a.usuario = usuarios
LET i = 1
OPEN WINDOW w1 WITH FORM "prfmmt012"
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
INPUT BY NAME prtb08.num_oc
BEFORE INPUT
LET d_tipos="PDF"
LET f_tipos="*.pdf *.jpg *.png"
LET mensaje=%"Elige Documento"
AFTER FIELD num_oc
SELECT a.cotizacion_no,b.nombre,a.sec_vend,ISNULL(c.nom1_emp,' ')+ISNULL(c.apell1_emp,' '),
a.tipo_cliente,a.sec_cliente
INTO prtb08.cotizacion_no,nombre_cliente,prtb08.sec_vend,vendedor,
prtb08.tipo_cliente,prtb08.sec_cliente
FROM prtb00012 a,vetb00004 b,adtb00003 c
WHERE a.num_oc = prtb08.num_oc AND
a.tipo_cliente = b.tipo_cliente AND
a.sec_cliente = b.sec_cliente AND
a.sec_vend = c.num_emp
IF STATUS = NOTFOUND THEN
CALL msg(3)
NEXT FIELD num_oc
ELSE
CALL documentos.clear()
DECLARE busca_dibujo CURSOR FOR
SELECT a.id,a.tipo_file,a.bodega,a.num_doc,a.nombre_file,
a.documento
FROM prtb00029 a
WHERE a.num_oc = prtb08.num_oc
ORDER BY a.id
LET idx = 1
LOCATE documentos[idx].filedestino IN MEMORY
FOREACH busca_dibujo INTO documentos[idx].*
LET idx = idx + 1
LOCATE documentos[idx].filedestino IN MEMORY
END FOREACH
END IF
SELECT MAX(a.id) INTO i FROM prtb00029 a
WHERE a.num_oc = prtb08.num_oc
SELECT a.path_documentos_ordenes,a.url_file_destino INTO filedestino,url
FROM companias a
DISPLAY BY NAME prtb08.cotizacion_no,nombre_cliente,vendedor
NEXT FIELD tipo_file
AFTER INPUT
END INPUT
INPUT ARRAY documentos FROM sdibujo.* ATTRIBUTE(WITHOUT DEFAULTS)
ON ACTION dibujo
CALL ui.Interface.frontCall("standard","openfile", [dir_file,d_tipos,f_tipos,mensaje], [filepath] )
IF filepath IS NOT NULL THEN
IF downshift(os.Path.extension(filepath)) = "pdf" OR
downshift(os.Path.extension(filepath)) = "jpg" OR
downshift(os.Path.extension(filepath)) = "png" THEN
DISPLAY filepath TO ruta_file
CALL documentos.appendElement()
IF idx IS NULL THEN
LET idx = 1
END IF
LOCATE documentos[idx].filedestino IN MEMORY
CALL documentos[idx].filedestino.readFile(filepath)
LET documentos[idx].nombre_file=os.Path.basename(filepath)
LET idx = idx + 1
ELSE
CALL fgl_winmessage("ERROR","EL FILE DEBE SER PDF, JPG, PNG","INFO")
END IF
END IF
AFTER FIELD num_doc
IF num_doc IS NOT NULL AND tipo_file = "CO" THEN
CASE
WHEN tipo_file = "CO"
IF bodega IS NULL THEN
NEXT FIELD bodega
END IF
SELECT DISTINCT a.num_doc FROM iptb00006 a,iptb00005 b
WHERE a.bodega = documentos[arr_curr()].bodega AND
a.num_doc = documentos[arr_curr()].num_doc AND
a.cod_mov = b.cod_mov AND b.control_despacho ="SI" AND
a.num_oc = prtb08.num_oc AND
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
CALL fgl_Winmessage("ERROR","DOCUMENTO NO EXISTE o NO PERTENECE A ESTA ORDEN","INFO")
NEXT FIELD num_doc
END IF
WHEN tipo_file="DE"
SET CONNECTION "IFMX"
SELECT DISTINCT a.num_doc FROM cctb00001 a
WHERE a.num_doc = documentos[arr_curr()].num_doc AND
a.tipo_doc = "NC" AND
a.tipo_cliente = prtb08.tipo_cliente AND
a.sec_cliente = prtb08.sec_cliente AND
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
CALL fgl_Winmessage("ERROR","DOCUMENTO NO EXISTE","INFO")
NEXT FIELD num_doc
END IF
END CASE
END IF
BEFORE INPUT
CALL bodegas("1")
ON ACTION abrir
TRY
LET tmpdir_file = "tmp\\",usuarios CLIPPED,documentos[arr_curr()].nombre_file
CALL documentos[arr_curr()].filedestino.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)
DISPLAY "l_file ",l_file
CALL ui.Interface.frontCall("standard","shellexec", [l_file],[p_res])
CATCH
CALL fgl_winmessage("ERROR",err_get(STATUS),"INFO")
END TRY
ON ACTION actualiza
# WHENEVER ERROR CONTINUE
BEGIN WORK
DELETE FROM prtb00029 WHERE num_oc = prtb08.num_oc
FOR idx = 1 TO documentos.getLength()
IF documentos[idx].nombre_file IS NOT NULL THEN
INSERT INTO prtb00029 (num_oc,documento,
tipo_file,
nombre_file,num_doc,bodega,id,us_crea,fech_crea)
VALUES (prtb08.num_oc,documentos[idx].filedestino,
documentos[idx].tipo_file,
documentos[idx].nombre_file,
documentos[idx].num_doc,documentos[idx].bodega, idx,usuarios,getdate())
IF STATUS < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage("ERROR","NO INSERTE DOCUMENTO EN LA ORDEN","INFO")
EXIT PROGRAM
END IF
IF tipo_file= 'DI' THEN
LET emailsubject = "ACTUALIZACION DIBUJO ORDEN ",prtb08.num_oc USING "&&&&&&"
LET emailbody = "El usuario ",usuarios," Adiciono un dibujo a la orden ",prtb08.num_oc USING "&&&&&&"
LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
CALL envia_correo(email,copiaemail,emailbody,emailsubject,procedimiento)
END IF
END IF
END FOR
COMMIT WORK
CALL fgl_winmessage("ACTUALIZACION","ACTUALIZACION EXITOSA","INFO")
NEXT FIELD num_oc
END INPUT
ON ACTION CANCEL
LET INT_FLAG = FALSE
CALL msg(2)
EXIT DIALOG
CLOSE WINDOW w1
END DIALOG
END FUNCTION
FUNCTION showDir(path)
DEFINE path STRING
DEFINE child STRING
DEFINE h INTEGER,
contenido DYNAMIC ARRAY OF STRING,
exito BOOLEAN
OPEN WINDOW w2 WITH FORM "prtest"
IF NOT os.Path.exists(path) THEN
CALL fgl_winmessage("NO",path,"info")
RETURN
END IF
IF NOT os.Path.isdirectory(path) THEN
DISPLAY " ", os.Path.basename(path)
RETURN
END IF
LET contenido[1]="[",path,"]"
LET idx = 1
CALL os.Path.dirsort("name", 1)
LET h = os.Path.diropen(path)
WHILE h > 0
LET child = os.Path.dirnext(h)
IF child IS NULL THEN EXIT WHILE END IF
IF child == "." OR child == ".." THEN CONTINUE WHILE END IF
LET contenido[idx] = os.Path.join( path, child )
LET idx = idx + 1
END WHILE
CALL os.Path.dirclose(h)
DISPLAY ARRAY contenido TO scontenido.*
ON ACTION borrar
CALL os.Path.delete(contenido[arr_curr()]) RETURNING exito
IF NOT exito THEN
CALL fgl_winmessage("E","NO BORRE EL FILE","INFO")
CONTINUE DISPLAY
END IF
AFTER DISPLAY
IF INT_FLAG THEN
EXIT PROGRAM
END IF
EXIT DISPLAY
END DISPLAY
CLOSE WINDOW w2
END FUNCTION