Commit inicial: fuentes MBS ERP (Genero 6) + .gitignore + docs/SETUP_PC_MBS.md
This commit is contained in:
@@ -0,0 +1,382 @@
|
||||
{
|
||||
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,l_file,tmpdir_file STRING,
|
||||
xusername,xsmtphost,xsmtpport,xpassword VARCHAR(100),
|
||||
nombre_file_orig DYNAMIC ARRAY OF VARCHAR(100),
|
||||
psec_vend INT, container, enviarEncuesta 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" AS "IFMX" USER usuarios USING clave
|
||||
|
||||
CONNECT to "smarmotech" AS "MSSQL" USER usuarios USING clave
|
||||
CALL prprmt020()
|
||||
END MAIN
|
||||
|
||||
FUNCTION prprmt020()
|
||||
DEFINE nombre_cliente,email,emailsubject,procedimiento,vendedor,dir_file CHAR(60),
|
||||
url,filedestino VARCHAR(200),
|
||||
emailbody STRING,
|
||||
documentos DYNAMIC ARRAY OF RECORD
|
||||
idx INT,
|
||||
tipo_file CHAR(20),
|
||||
bodega,cod_mov SMALLINT,
|
||||
|
||||
num_doc INT,
|
||||
nombre_file VARCHAR(100),
|
||||
filedestino BYTE,
|
||||
envio_correo,file_extension CHAR(10)
|
||||
|
||||
|
||||
END RECORD,
|
||||
p_res,i SMALLINT,
|
||||
chpath VARCHAR(1),
|
||||
cmd VARCHAR(200),
|
||||
exito BOOLEAN,
|
||||
tipo_file,enviar_email CHAR(20),
|
||||
bodega SMALLINT,
|
||||
num_doc INT
|
||||
|
||||
LET i = 1
|
||||
|
||||
OPEN WINDOW w1 WITH FORM "prfmmt012"
|
||||
DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
|
||||
INPUT BY NAME prtb09.num_oc
|
||||
|
||||
BEFORE INPUT
|
||||
LET d_tipos="PDF"
|
||||
LET f_tipos="*.pdf *.jpg *.png *.dwg *.dkf"
|
||||
LET mensaje=%"Elige Documento"
|
||||
|
||||
|
||||
# Busca correo usuario
|
||||
LET copiaemail = NULL
|
||||
LET email = null
|
||||
SELECT ISNULL(a.email,b.email) INTO email FROM seg0000 a,seg0001 b
|
||||
WHERE a.usuario = usuarios AND a.usuario = b.usuario
|
||||
|
||||
LET copiaemail = email CLIPPED
|
||||
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
|
||||
|
||||
|
||||
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 prtb09.cotizacion_no,nombre_cliente,psec_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.cod_mov, a.num_doc,a.nombre_file,
|
||||
a.documento,a.envio_notificacion
|
||||
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)) = "dwg" OR
|
||||
downshift(os.Path.extension(filepath)) = "dxf" OR
|
||||
downshift(os.Path.extension(filepath)) = "png" THEN
|
||||
LET dir_file = os.Path.basename(filepath)
|
||||
DISPLAY filepath TO ruta_file
|
||||
CALL documentos.appendElement()
|
||||
IF idx IS NULL THEN
|
||||
LET idx = 1
|
||||
END IF
|
||||
LOCATE documentos[idx].filedestino IN MEMORY
|
||||
|
||||
LET dir_file = "tmp\\",dir_file CLIPPED
|
||||
CALL fgl_getfile(filepath,dir_file)
|
||||
|
||||
CALL documentos[idx].filedestino.readFile(dir_file)
|
||||
LET documentos[idx].nombre_file=os.Path.basename(filepath)
|
||||
LET nombre_file_orig[idx] = filepath
|
||||
LET idx = idx + 1
|
||||
ELSE
|
||||
CALL fgl_winmessage("ERROR","EL FILE DEBE SER PDF, JPG, PNG, DWG","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 documentos[arr_curr()].bodega IS NULL THEN
|
||||
NEXT FIELD bodega
|
||||
END IF
|
||||
IF documentos[arr_curr()].cod_mov IS NULL THEN
|
||||
NEXT FIELD cod_mov
|
||||
END IF
|
||||
DISPLAY "datos: r ",arr_curr()," b ",documentos[arr_curr()].bodega," n ",documentos[arr_curr()].num_doc," c ",documentos[arr_curr()].cod_mov
|
||||
SELECT DISTINCT a.num_doc FROM iptb00006 a
|
||||
WHERE a.bodega = documentos[arr_curr()].bodega AND
|
||||
a.num_doc = documentos[arr_curr()].num_doc AND
|
||||
a.cod_mov =documentos[arr_curr()].cod_mov 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
|
||||
|
||||
AFTER FIELD tipo_file
|
||||
IF tipo_file = "CO" THEN
|
||||
CALL dialog.setFieldActive('cod_mov', TRUE)
|
||||
CALL codmov()
|
||||
END IF
|
||||
|
||||
BEFORE INPUT
|
||||
CALL bodegas("1")
|
||||
# CALL codmov()
|
||||
CALL dialog.setFieldActive('cod_mov', FALSE )
|
||||
|
||||
|
||||
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)
|
||||
|
||||
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
|
||||
LET enviar_email = 'SI'
|
||||
BEGIN WORK
|
||||
|
||||
SELECT enviaEncuesta INTO container FROM prtb00029
|
||||
WHERE num_oc = prtb08.num_oc AND tipo_file = 'CO'
|
||||
|
||||
DELETE FROM prtb00029 WHERE num_oc = prtb08.num_oc
|
||||
FOR idx = 1 TO documentos.getLength()
|
||||
|
||||
IF documentos[idx].filedestino IS NOT NULL THEN
|
||||
IF documentos[idx].tipo_file IS NULL THEN
|
||||
ROLLBACK WORK
|
||||
CALL fgl_winmessage("INFO","FAVOR DE COLOCAR EL TIPO DE FILE A ESTE DOCUMENTO","INFO")
|
||||
NEXT FIELD tipo_file
|
||||
END IF
|
||||
IF documentos[idx].nombre_file IS NOT NULL THEN
|
||||
LET documentos[idx].nombre_file= idx USING "&&&","-",prtb08.num_oc USING "&&&&&&&&",'.',os.Path.extension(documentos[idx].nombre_file)
|
||||
LET documentos[idx].file_extension = os.Path.extension(documentos[idx].nombre_file)
|
||||
ELSE
|
||||
LET documentos[idx].nombre_file= idx USING "&&&","-",prtb08.num_oc USING "&&&&&&&&",'.',os.Path.extension(filepath)
|
||||
LET documentos[idx].file_extension = os.Path.extension(documentos[idx].nombre_file)
|
||||
END IF
|
||||
|
||||
LET tipo_file = documentos[idx].tipo_file
|
||||
|
||||
IF documentos[idx].tipo_file = 'CO' THEN
|
||||
LET enviarEncuesta = container
|
||||
ELSE
|
||||
LET enviarEncuesta = NULL
|
||||
END IF
|
||||
|
||||
|
||||
INSERT INTO prtb00029 (num_oc,documento,
|
||||
tipo_file,
|
||||
nombre_file,num_doc,bodega,id,us_crea,fech_crea,
|
||||
ruta_file_original,file_extension,cod_mov, enviaEncuesta)
|
||||
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(),nombre_file_orig[idx],
|
||||
documentos[idx].file_extension,documentos[idx].cod_mov, enviarEncuesta
|
||||
)
|
||||
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
|
||||
IF enviar_email = "SI" 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
|
||||
|
||||
|
||||
LET xusername ='notificacion@marmotech.com.do'
|
||||
LET xsmtphost ='smtp.office365.com'
|
||||
LET xsmtpport = '587'
|
||||
LET xpassword = 'Lmmjvsd2020'
|
||||
# LET copiaemail = 'jsoto@marmotech.com.do,jsoto@marmotech.com.do,jsoto@marmotech.com.do,mpinales@marmotech.com.do,eamador@marmotech.com.do'
|
||||
TRY
|
||||
CALL enviaemail(copiaemail,emailsubject,emailbody,NULL,xusername,xsmtphost,xsmtpport,xpassword) #RETURNING retorne
|
||||
|
||||
UPDATE prtb00029 SET envio_notificacion = 'SI' WHERE num_oc =prtb08.num_oc AND
|
||||
tipo_file = 'DI' AND
|
||||
id = IDX
|
||||
INSERT INTO envia_email_log (email,estado,fecha,programa_envio,us_crea,display_name)
|
||||
VALUES (copiaemail,'ENVIO',getdate(),'prprmt020',usuarios,prtb08.num_oc)
|
||||
LET enviar_email = "NO"
|
||||
CATCH
|
||||
INSERT INTO envia_email_log (email,estado,fecha,programa_envio,us_crea,display_name)
|
||||
VALUES (copiaemail,'NO ENVIO',getdate(),'prprmt020',usuarios,prtb08.num_oc)
|
||||
END TRY
|
||||
END IF
|
||||
END IF
|
||||
END IF
|
||||
END FOR
|
||||
#Notifica que no tiene un DWG o DXF file
|
||||
COMMIT WORK
|
||||
{ IF email IS NOT NULL THEN
|
||||
SELECT ISNULL(COUNT(*),0) INTO cuenta_tipo FROM prtb00029 a
|
||||
WHERE a.num_oc = prtb08.num_oc AND a.tipo_file = 'DI' AND file_extension IN('DWG','DXF')
|
||||
|
||||
IF cuenta_tipo=0 THEN
|
||||
LET emailsubject = "FALTA DOCUMENTO AUTOCAD DE LA ORDEN ",prtb08.num_oc USING "&&&&&&"
|
||||
LET emailbody = "POR FAVOR ADICIONAR EL FILE DE AUTOCAD(DWG o DFX) CON LA FINALIDAD QUE LA ORDEN NO SE DETENGA EN EL PROCESO"
|
||||
# LET email = 'jsoto@marmotech.com.do'
|
||||
|
||||
CALL enviaemail(email,emailsubject,emailbody,NULL,xusername,xsmtphost,xsmtpport,xpassword) #RETURNING retorne
|
||||
|
||||
END IF
|
||||
END IF
|
||||
} 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
|
||||
Reference in New Issue
Block a user