Files
MBS/PROYECTO/codir/coprmt025.4gl
T
Abel LópezandClaude Sonnet 5 b05e858ac6 Añadir coprmt010, coprmt015, coprmt016, coprmt025 y coprcs005 (modulo COMPRAS)
- coprmt010 (Paises): corregir condicion invertida en "Escoger" que
  bloqueaba editar registros activos y solo permitia editar los ya
  eliminados (status_t != "E" -> = "E").
- coprmt016 (Terminos de Pago): usar el formulario .4fd (el .per no tenia
  el grid "Tabla" que el codigo espera); agregar columna "dias" faltante
  al INSERT (la tabla real tiene 9 columnas, el INSERT solo daba 8 valores
  sin lista de columnas explicita).
- coprmt025 (Requisicion Compras): agregar funciones faltantes
  (busca_departamento2 en depto.4gl, enviaemail en FUNCIONESEMAIL);
  sincronizar el RECORD "data" y la aridad de RETURNING de ApiMaintainC
  con el fix de api_test.4gl; reemplazar fgl_report_* (no disponible) por
  om.XmlWriter en las 3 rutas de impresion.
- coprmt015 y coprcs005: sin cambios de codigo, solo registro en el
  proyecto.
- mbsERP.4pw: registrar los 5 programas; investigar/configurar Java para
  coprmt025 (FGLJVMPATH/JAVA_HOME/CLASSPATH apuntando a un JRE Temurin
  8u504 local). Pendiente: el puente Java de esta instalacion de Genero
  sigue fallando ("Can not create java VM") incluso con el ejemplo oficial
  de FGL: parece un problema de la instalacion misma, no de version de
  Java. Se sugirio reparar via MsiExec /f {3B1E10F3-FBCC-4737-8BDF-284359029D70}
  (Four Js Genero BDL with Web Services 6.00.02), pendiente de ejecutar.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-27 16:18:51 -04:00

1682 lines
64 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : COPRMT025
OBJETIVO : Capturar, Consultar y Eliminar registros de la
Tabla de Requisiciones.
PROGRAMADOR : Ing. Juan Soto
FECHA REALIZACION : Marzo 19, 1997
FECHA MODIFICACION: Febrero 23, 2016.
------------------------------------------------------------------
}
IMPORT os
GLOBALS "coprgb000.4gl"
DEFINE c_cuenta SMALLINT
DEFINE
cantidad_fur, multiplo DECIMAL(12,2),
ult_req,p_res,pmultiplo,ult_orden INTEGER,
nocalcula CHAR(1),
actualiza CHAR(2),
proveedor_sugerido VARCHAR(100),
inserteDetalle,notifica VARCHAR(2), empty STRING
DEFINE adicional RECORD
detalle1, detalle2, detalle3 CHAR(70)
END RECORD,
ktipo_cliente,ksec_cliente INT,
cliente,knombre VARCHAR(100)
DEFINE d_tipos,mensaje,f_tipos,l_file,filepath,extension,extension_foto,tmp_dirfoto STRING,
tmpdir_file,tipos_foto,dir_file,dir_foto CHAR(60) ,
fdocumento,ffoto BYTE,
xnombreusuario VARCHAR(200)
DEFINE xusername,xsmtphost,xsmtpport,xpassword STRING,
subject,attachment VARCHAR(100),
cuerpo_correo,
toEmail, orden_trabajo, answer_workorder, descrip_depto STRING, depto INT
-- Debe coincidir exactamente (mismos campos, mismo orden) con el RECORD
-- "data" del parametro de ApiMaintainC() en otrodir/api_test.4gl: el
-- enlazador exige la misma aridad en todos los llamadores.
DEFINE data RECORD
area_sp VARCHAR(10),
ciu_sp VARCHAR(30),
cod_pais VARCHAR(3),
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
cont_sp VARCHAR(30),
contactID INTEGER,
cuenta_no VARCHAR(10),
dir_sp VARCHAR(60),
email VARCHAR(60),
fax_sp VARCHAR(25),
fech_crea DATETIME YEAR TO FRACTION,
fech_mod DATETIME YEAR TO FRACTION,
id_maintainx INTEGER,
nom_sp VARCHAR(41),
rnc VARCHAR(11),
status_t VARCHAR(1),
tel_sp VARCHAR(25),
term_sp SMALLINT,
tipo_doc VARCHAR(10),
us_crea VARCHAR(50),
us_mod VARCHAR(50)
END RECORD
DEFINE p_reportfile STRING
DEFINE container RECORD
tipo_inv STRING,
cod_n INT,
cod_grupo INT,
cod_tipo INT,
cod_sec INT
END RECORD
MAIN
DEFER INTERRUPT
CALL STARTLOG("coprmt025.log")
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave
CALL buscarToemail()
CALL coprmt025()
END MAIN
FUNCTION coprmt025()
CLEAR SCREEN
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21,
PROMPT LINE 25
#CALL defecto(impresor) RETURNING imprime,letras.*, archivo
OPEN FORM cofmmt025 FROM "cofmmt025"
DISPLAY FORM cofmmt025
MENU "OPCIONES"
COMMAND "Adicionar"
"<Esc> Adiciona Registro <Ctrl-C> Cancela Operacion "
CLEAR FORM
LET actualiza = "NO"
CALL copcad025()
COMMAND "Consultar-Anular"
"<Esc> Realiza Busqueda <Ctrl-C> Cancela Operacion"
LET actualiza = "SI"
CLEAR FORM
CALL copcmf025()
COMMAND "Salir" "Retorna Menu Anterior"
DELETE FROM cotb00042
WHERE num_req = 0 AND us_crea = suser_sname() AND status_t IS NULL
EXIT MENU
END MENU
END FUNCTION
FUNCTION copcad025()
DEFINE tiene_Dato CHAR(2), answer STRING
DEFINE answer2 INTEGER
INITIALIZE depto TO NULL
# Captura los datos que va a contener el registro
DIALOG ATTRIBUTE(UNBUFFERED)
INPUT BY NAME requisi2.*,salida,notifica, orden_trabajo, depto ATTRIBUTE(WITHOUT DEFAULTS)
BEFORE INPUT
LET d_tipos="PDF"
LET f_tipos="*.pdf *.jpg *.png *.doc *.xls"
LET tipos_foto ="*.jpg *.png"
LET mensaje=%"Elige Documento"
IF actualiza = "NO" THEN
LET dir_file = NULL
LOCATE fdocumento IN MEMORY
END IF
LOCATE ffoto IN MEMORY
IF requisi2.estado IS NULL THEN
LET requisi2.estado = 'EN PROCESO'
END IF
DISPLAY BY NAME requisi2.estado
CALL busca_departamento2()
IF actualiza = "NO" THEN
IF tiene_dato IS NULL THEN
LET tiene_dato = "NO"
END IF
LET requisi2.num_req = 0
LET requisi2.departamento = NULL
LET requisi2.cod_emp_sec = NULL
LET requisi2.fech_req = TODAY
LET requisi2.prioridad='NORMAL'
LET requisi2.num_oc=NULL
IF tiene_Dato = "NO" THEN
CALL arr_requisi2.clear()
END IF
SELECT a.departamento,a.num_emp,b.nom_dpto,RTRIM(c.nom1_emp)||' '||ISNULL(c.apell1_emp,' ')
INTO requisi2.departamento,requisi2.cod_emp_sec,descrip1
FROM seg0001 a,adtb00001 b,adtb00003 c
WHERE a.usuario = usuarios AND a.departamento = b.departamento AND a.num_emp = c.num_emp
LET depto = requisi2.departamento
DISPLAY BY NAME requisi2.departamento,requisi2.cod_emp_sec,descrip1, depto
END IF
LET salida = "PDF"
ON ACTION bdocumento
LET dir_file = NULL
CALL ui.Interface.frontCall("standard","openfile", [dir_file,d_tipos,f_tipos,mensaje], [filepath] )
IF filepath IS NOT NULL THEN
LET dir_file = os.Path.basename(filepath)
CALL fgl_getfile(filepath,dir_file)
CALL fdocumento.readFile(dir_file)
DISPLAY BY NAME dir_file
LET extension = os.Path.extension(dir_file)
END IF
ON ACTION busca_depto
CALL busca_dpto() RETURNING requisi2.departamento,descrip1
DISPLAY BY NAME descrip1,requisi2.departamento
ON ACTION busca_emp
CALL busca_emp() RETURNING requisi2.cod_emp_sec,descrip2
LET identifica = null
IF existe = "S" THEN
IF not int_flag THEN
DISPLAY BY NAME descrip2,requisi2.cod_emp_sec
NEXT FIELD uso
END IF
LET int_flag = false
END IF
IF int_flag THEN
LET int_flag = FALSE
END IF
BEFORE FIELD fech_req
LET requisi2.fech_req = today
DISPLAY BY NAME requisi2.fech_req
AFTER FIELD fech_req
IF requisi2.fech_req < today THEN
LET numero_msg = 369
CALL msg(numero_msg)
NEXT FIELD fech_req
END IF
AFTER FIELD departamento
IF requisi2.departamento IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fech_req
ELSE
SELECT b.nom_dpto INTO descrip1
FROM adtb00001 b
WHERE b.departamento = requisi2.departamento
IF status >= 0 THEN
IF status = notfound THEN
LET numero_msg = 371
CALL msg(numero_msg)
NEXT FIELD departamento
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
DISPLAY BY NAME descrip1
END IF
AFTER FIELD cod_emp_sec
IF requisi2.cod_emp_sec IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD departamento
ELSE
SELECT RTRIM(a.nom1_emp)||' '||ISNULL(a.apell1_emp,' ') INTO descrip2
FROM adtb00003 a,adtb00001 b
WHERE a.num_emp = requisi2.cod_emp_sec and
b.departamento = requisi2.departamento and
a.departamento = b.departamento
IF status >= 0 THEN
IF status = notfound THEN
LET numero_msg = 371
CALL msg(numero_msg)
NEXT FIELD cod_emp_sec
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
DISPLAY BY NAME descrip2
END IF
AFTER FIELD prioridad
IF requisi2.prioridad IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD prioridad
END IF
AFTER FIELD num_oc
LET ktipo_cliente = NULL
LET ksec_cliente=NULL
LET knombre=NULL
IF requisi2.num_oc IS NOT NULL AND requisi2.num_oc <> 0 THEN
SELECT a.tipo_cliente,a.sec_cliente,b.nombre INTO ktipo_cliente,ksec_cliente,knombre
FROM prtb00012 a,vetb00004 b
WHERE a.num_oc = requisi2.num_oc AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND
a.status_t IS NULL
IF STATUS = NOTFOUND THEN
CALL fgl_Winmessage("INFO","ORDEN NO EXISTE","INFO")
NEXT FIELD num_oc
END IF
LET cliente = ktipo_cliente USING "&&","-",ksec_cliente USING "&&&&&&&&"," ",knombre CLIPPED
DISPLAY BY NAME cliente
IF actualiza <> "SI" THEN
CALL busca_det_orden()
END IF
END IF
AFTER FIELD uso
IF requisi2.uso IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD uso
END IF
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
IF orden_trabajo IS NOT NULL THEN
INITIALIZE data.* TO NULL
CALL ApiMaintainC('CHECK', orden_trabajo, data.*, usuarios) RETURNING answer, answer2
IF answer = 0 OR answer IS NULL THEN
CALL fgl_winmessage(
"ORDEN DE TRABAJO EN MAINTAINX",
"El ID de la orden de trabajo colocada no se encuentra en MaintainX",
"stop")
NEXT FIELD orden_trabajo
ELSE
LET answer_workorder = answer
END IF
END IF
IF requisi2.departamento IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD departamento
END IF
IF depto IS NULL OR depto = 0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD depto
END IF
IF requisi2.cod_emp_sec IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cod_emp_sec
END IF
LET descrip2 = NULL
LET descrip1 = NULL
SELECT RTRIM(a.nom1_emp)||' '||ISNULL(a.apell1_emp,' ') INTO descrip2
FROM adtb00003 a,adtb00001 b
WHERE a.num_emp = requisi2.cod_emp_sec and
b.departamento = requisi2.departamento and
a.departamento = b.departamento
IF status >= 0 THEN
IF status = notfound THEN
LET numero_msg = 371
CALL msg(numero_msg)
NEXT FIELD cod_emp_sec
END IF
ELSE
CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
LET descrip2 = descrip2 clipped," ",descrip1 clipped
DISPLAY BY NAME descrip2
IF requisi2.num_oc IS NOT NULL AND requisi2.num_oc <> 0 THEN
IF actualiza = "SI" THEN
LET opt = fgl_winquestion("ORDEN","SE ACTUALIZARAN LOS ITEMS DE ESTA REQUISICION CON LOS QUE TIENE LA ORDEN DE PEDIDOS, DESEAS REALIZAR ESTA OPERACION?","NO","NO|YES","QUESTION",0)
IF opt = "YES" THEN
CALL busca_det_orden()
END IF
ELSE
CALL busca_det_orden()
END IF
ELSE
IF actualiza = "SI" THEN
CALL busca_det_req()
END IF
END IF
END INPUT
# Captura de los articulos requeridos
INPUT ARRAY arr_requisi2 FROM s_requisi2.* #ATTRIBUTE (WITHOUT DEFAULTS)
BEFORE INPUT
IF actualiza = "NO" AND tiene_dato = "NO" THEN
IF requisi2.num_oc IS NULL THEN
CALL arr_requisi2.clear()
END IF
END IF
LET tiene_dato = "SI"
ON ACTION bdownload
IF arr_requisi2[arr_curr()].foto IS NOT NULL THEN
# LET dir_foto = usuarios CLIPPED,dir_Foto CLIPPED
LET filepath = "foto.jpg"
CALL ui.Interface.frontCall("standard","savefile", [dir_foto,d_tipos,tipos_foto,mensaje], [filepath] )
CALL arr_requisi2[arr_curr()].foto.writeFile(dir_foto)
IF filepath IS NOT NULL THEN
CALL fgl_putfile(dir_foto,filepath)
CALL fgl_Winmessage("info","Download Terminado","info")
END IF
END IF
ON ACTION bfoto
LET curr = arr_curr()
LET dir_foto = NULL
LET ffoto = null
CALL ui.Interface.frontCall("standard","openfile", [dir_foto,d_tipos,tipos_foto,mensaje], [filepath] )
IF actualiza = "SI" THEN
IF filepath IS NOT NULL THEN
LET dir_foto = os.Path.basename(filepath)
LET extension_foto = os.Path.extension(filepath)
LET dir_foto = usuarios CLIPPED,dir_foto CLIPPED
LET tmp_dirfoto = "TMP\\",dir_foto CLIPPED
DISPLAY BY NAME filepath
CALL fgl_getfile(filepath,tmp_dirfoto)
# CALL FGL_WINMESSAGE("INFO",filepath,"info")
CALL ffoto.readfile(tmp_dirfoto)
DISPLAY tmp_dirfoto TO s_requisi2[scr_line()].ruta_file
LET arr_requisi2[curr].foto = ffoto
LET arr_requisi2[curr].ruta_file=dir_foto CLIPPED
END IF
ELSE
LOCATE arr_requisi2[curr].foto IN MEMORY
LET dir_foto = os.Path.basename(filepath)
LET extension_foto = os.Path.extension(filepath)
LET dir_foto = usuarios CLIPPED,dir_foto CLIPPED
LET tmp_dirfoto = "TMP\\",dir_foto CLIPPED
DISPLAY BY NAME filepath
CALL fgl_getfile(filepath,tmp_dirfoto)
# CALL FGL_WINMESSAGE("INFO",filepath,"info")
CALL arr_requisi2[curr].foto.readfile(tmp_dirfoto)
DISPLAY tmp_dirfoto TO s_requisi2[scr_line()].ruta_file
# LET arr_requisi2[curr].foto = ffoto
LET arr_requisi2[curr].ruta_file=dir_foto CLIPPED
END IF
ON ACTION producto
LET curr = arr_curr()
IF arr_requisi2[curr].tipo_inv IS NULL THEN
CALL msg(16)
NEXT FIELD tipo_inv
END IF
CALL busca_mt(arr_requisi2[curr].tipo_inv)
RETURNING arr_requisi2[curr].cod_n,arr_requisi2[curr].cod_grupo,arr_requisi2[curr].cod_tipo,
arr_requisi2[curr].cod_sec,arr_requisi2[curr].descrip_esp,arr_requisi2[curr].unidad_med
{ se cerro la creacion de codigos miscelaneos via la requisicion de compras
IF arr_requisi2[curr].tipo_inv = 'MISCELANEOS' AND arr_requisi2[curr].cod_n = 0 THEN
CALL fgl_winmessage("INFO","NO EXISTEN PRODUCTOS CON ESA CONDICION, VAS A CREARLO","INFO")
CALL crea_producto() RETURNING arr_requisi2[curr].cod_n,arr_requisi2[curr].cod_grupo,arr_requisi2[curr].cod_tipo,
arr_requisi2[curr].cod_sec,arr_requisi2[curr].descrip_esp,arr_requisi2[curr].unidad_med
END IF
}
DISPLAY arr_requisi2[curr].cod_n TO
s_requisi2[scr_l].cod_n
DISPLAY arr_requisi2[curr].cod_grupo TO
s_requisi2[scr_l].cod_grupo
DISPLAY arr_requisi2[curr].cod_tipo TO
s_requisi2[scr_l].cod_tipo
DISPLAY arr_requisi2[curr].cod_sec TO
s_requisi2[scr_l].cod_sec
DISPLAY arr_requisi2[curr].descrip_esp TO
s_requisi2[scr_l].descrip_esp
DISPLAY arr_requisi2[curr].unidad_med TO
s_requisi2[scr_l].unidad_med
LET c_cuenta = arr_requisi2.getLength()
CALL repite2()
IF verdad = "S" THEN
NEXT FIELD cod_n
END IF
IF verdad = "N" OR verdad is null THEN
NEXT FIELD cantidad
END IF
LET proveedor_sugerido = NULL
IF arr_requisi2[curr].cod_sec IS NOT NULL THEN
CALL busca_proveedor()
END IF
AFTER ROW
IF actualiza ="NO" THEN
IF arr_requisi2[curr].ruta_file IS NOT NULL THEN
LET tmp_dirfoto = "tmp\\",arr_requisi2[arr_curr()].ruta_file CLIPPED
CALL arr_requisi2[arr_curr()].foto.writeFile(tmp_dirfoto)
DISPLAY tmp_dirfoto TO filepath
ELSE
IF arr_requisi2[arr_curr()].ruta_file IS NULL AND arr_requisi2[arr_curr()].cod_sec IS NOT NULL THEN
LOCATE arr_requisi2[arr_curr()].foto IN MEMORY
END IF
END IF
END IF
BEFORE ROW
LET nocalcula = "N"
LET curr = arr_curr()
LET scr_l = scr_line()
# LOCATE arr_requisi2[curr].foto IN MEMORY
IF actualiza = "SI" THEN
# LOCATE arr_requisi2[curr].foto IN MEMORY
IF arr_requisi2[curr].ruta_file IS NOT NULL THEN
CALL ui.Interface.frontCall("standard","getenv", ["HOMEPATH"], [l_file] )
LET dir_foto =arr_requisi2[curr].ruta_file
LET l_file = "c:",l_file CLIPPED,"\\",dir_foto CLIPPED
# CALL fgl_Winmessage("info",dir_foto,"info")
CALL arr_requisi2[curr].foto.writeFile(dir_foto)
DISPLAY dir_foto TO filepath
END IF
ELSE
IF arr_requisi2[curr].ruta_file IS NOT NULL THEN
LET tmp_dirfoto = "tmp\\",arr_requisi2[curr].ruta_file CLIPPED
CALL arr_requisi2[curr].foto.writeFile(tmp_dirfoto)
DISPLAY tmp_dirfoto TO filepath
ELSE
LOCATE arr_requisi2[curr].foto IN MEMORY
END IF
END IF
AFTER FIELD cod_sec
IF orden_trabajo IS NOT NULL THEN
IF arr_requisi2[curr].cod_n is not null AND
arr_requisi2[curr].cod_grupo is not null AND
arr_requisi2[curr].cod_tipo is not null AND
arr_requisi2[curr].cod_sec is not null THEN
INITIALIZE answer TO NULL
SELECT enviarMX INTO answer FROM irtb00002 WHERE cod_n = arr_requisi2[curr].cod_n
AND cod_grupo = arr_requisi2[curr].cod_grupo AND cod_tipo = arr_requisi2[curr].cod_tipo
AND cod_sec = arr_requisi2[curr].cod_sec
DISPLAY answer
IF answer IS NULL THEN
CALL fgl_winmessage(
"PRODUCTO NO ENCONTRADO EN MAINTAINX",
"El producto insertado no se encuentra en MaintainX",
"stop")
NEXT FIELD cod_n
END IF
END IF
END IF
INITIALIZE container TO NULL
LET container.cod_n = arr_requisi2[curr].cod_n
LET container.cod_grupo = arr_requisi2[curr].cod_grupo
LET container.cod_tipo = arr_requisi2[curr].cod_tipo
LET container.cod_sec = arr_requisi2[curr].cod_sec
LET container.tipo_inv = arr_requisi2[curr].tipo_inv
LET int_flag = TRUE
CALL checkProducts() RETURNING int_flag
IF int_flag = FALSE THEN
LET numero_msg = 1676
CALL msg(numero_msg)
NEXT FIELD cod_n
END IF
CALL producto(arr_requisi2[curr].tipo_inv,arr_requisi2[curr].cod_n,arr_requisi2[curr].cod_grupo,
arr_requisi2[curr].cod_tipo,arr_requisi2[curr].cod_sec)
RETURNING arr_requisi2[curr].descrip_esp,arr_requisi2[curr].unidad_med
DISPLAY arr_requisi2[curr].descrip_esp TO
s_requisi2[scr_l].descrip_esp
DISPLAY arr_requisi2[curr].unidad_med TO
s_requisi2[scr_l].unidad_med
DISPLAY BY NAME arr_requisi2[curr].unidad_med
DISPLAY BY NAME arr_requisi2[curr].descrip_esp
LET arr_requisi[curr].cod_n = arr_requisi2[curr].cod_n
LET arr_requisi[curr].cod_grupo = arr_requisi2[curr].cod_grupo
LET arr_requisi[curr].cod_tipo = arr_requisi2[curr].cod_tipo
LET arr_requisi[curr].cod_sec = arr_requisi2[curr].cod_sec
LET verdad = "N"
CALL repite2()
IF verdad = "S" THEN
LET verdad = "N"
NEXT FIELD cod_n
END IF
AFTER FIELD cantidad
IF arr_requisi2[curr].cantidad IS NULL THEN
IF arr_requisi2[curr].cod_n IS NOT NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cantidad
END IF
END IF
IF nocalcula = "N" THEN
IF arr_requisi2[curr].cod_n = 1 THEN
SELECT UNIQUE a.cantidad INTO cantidad_fur
FROM cotb00004 a
WHERE a.cod_n = arr_requisi2[curr].cod_n AND
a.cod_grupo = arr_requisi2[curr].cod_grupo AND
a.cod_tipo = arr_requisi2[curr].cod_tipo AND
a.cod_sec = arr_requisi2[curr].cod_sec
IF STATUS != NOTFOUND THEN
IF arr_requisi2[curr].cantidad > cantidad_fur THEN
LET multiplo = arr_requisi2[curr].cantidad / cantidad_fur
LET pmultiplo = multiplo USING "#####"
LET arr_requisi2[curr].cantidad = cantidad_fur * pmultiplo
ELSE
LET arr_requisi2[curr].cantidad = cantidad_fur
END IF
END IF
DISPLAY arr_requisi2[curr].cantidad TO s_requisi2[scr_l].cantidad
END IF
END IF
LET proveedor_sugerido = NULL
IF arr_requisi2[curr].cod_sec IS NOT NULL THEN
CALL busca_proveedor()
END IF
AFTER FIELD tipo_inv
IF arr_requisi2[curr].tipo_inv IS NOT NULL THEN
IF requisi2.num_oc IS NOT NULL THEN
LET arr_requisi2[curr].tipo_inv = 'PRODUCTO TERMINADOS'
END IF
END IF
IF arr_requisi2[curr].tipo_inv IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD tipo_inv
END IF
ON ACTION guardar ATTRIBUTE(TEXT="Salvar", IMAGE="save")
IF actualiza = "NO" THEN
LET opt = fgl_winquestion("ADICIONA","ESTA SEGURO DE ADICIONAR ESTA REQUISICION?","NO","YES|NO","QUESTION",0)
IF opt = "YES" THEN
LET proveedor_sugerido = NULL
BEGIN WORK
FOR idx = 1 TO arr_requisi2.getLength()
IF arr_requisi2[idx].cod_sec IS NOT NULL THEN
CALL busca_proveedor()
END IF
END FOR
SELECT a.num_req INTO ult_req FROM cotb00007 a
IF STATUS = NOTFOUND THEN
LET ult_req = 0
INSERT INTO cotb00007 (num_req,us_crea,fech_crea) VALUES (0,usuarios,getdate())
END IF
LET ult_req = ult_req + 1
UPDATE cotb00007 SET num_req = ult_req,us_crea = usuarios,fech_crea = getdate()
LET requisi2.num_req = ult_req
DISPLAY BY NAME requisi2.num_req
INSERT INTO cotb00006 (num_req,fech_req,departamento,cod_emp_sec,uso,prioridad,us_crea,fech_crea,num_oc,tipo_cliente,sec_cliente,nombre_cliente,
observacion,nombre_file,documento,proveedor,estado, orden_trabajo, depto_destino)
VALUES (
requisi2.num_req,
requisi2.fech_req,
requisi2.departamento,
requisi2.cod_emp_sec,
requisi2.uso,
requisi2.prioridad,
suser_sname(),getdate(),requisi2.num_oc,ktipo_cliente,ksec_cliente,knombre,
requisi2.observacion,dir_file,fdocumento,proveedor_sugerido,requisi2.estado, orden_trabajo, depto)
# Asigna el numero serial de la requisicion cabecera para luego asignarsela
# a cada uno de los registros detalle de la requisicion.
IF dir_file IS NOT NULL THEN
LET dir_file = requisi2.num_req USING "&&&&&&&&",".",extension CLIPPED
UPDATE cotb00006 SET nombre_file = dir_file WHERE num_req = requisi2.num_req
END IF
# LET requisi2.num_req = SQLCA.SQLERRD[2]
IF requisi2.num_req =0 THEN
ROLLBACK WORK
CALL msg(16)
NEXT FIELD cod_n
END IF
LET inserteDetalle='NO'
FOR idx = 1 TO arr_requisi2.getLength()
IF arr_requisi2[idx].cod_n IS NOT NULL AND
arr_requisi2[idx].cod_grupo IS NOT NULL AND
arr_requisi2[idx].cod_tipo IS NOT NULL AND
arr_requisi2[idx].cod_sec IS NOT NULL THEN
IF arr_requisi2[idx].cantidad IS NULL THEN
ROLLBACK WORK
CALL msg(16)
NEXT FIELD cantidad
END IF
LET inserteDetalle = 'SI'
IF orden_trabajo IS NOT NULL THEN
LET data.contactID = arr_requisi2[idx].cantidad
SELECT id_maintainx INTO data.id_maintainx FROM irtb00002 WHERE cod_n = arr_requisi2[idx].cod_n
AND cod_grupo = arr_requisi2[idx].cod_grupo AND cod_tipo = arr_requisi2[idx].cod_tipo
AND cod_sec = arr_requisi2[idx].cod_sec AND status_t IS NULL
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("REPUESTO NO ESTA EN MAINTAINX",
"Por lo menos uno de los repuestos colocados en la requisicion no esta en MaintainX",
"stop")
ROLLBACK WORK
ELSE
CALL ApiMaintainC('PATCH_WORKORDER',answer_workorder, Data.*, usuarios)
RETURNING answer, answer2
IF answer != 1 THEN
DISPLAY "AQUI PATCH_WORKORDER"
ROLLBACK WORK
END IF
END IF
END IF
INSERT INTO cotb00008
(num_req
,tipo_inv
,cod_n
,cod_grupo
,cod_tipo
,cod_sec
,cantidad
,us_crea
,fech_crea
,procesada
,documento
,ruta_file
)
VALUES (requisi2.num_req,arr_requisi2[idx].tipo_inv,
arr_requisi2[idx].cod_n,
arr_requisi2[idx].cod_grupo,
arr_requisi2[idx].cod_tipo,
arr_requisi2[idx].cod_sec,
arr_requisi2[idx].cantidad,
suser_sname(),getdate(),'N',arr_requisi2[idx].foto,
arr_requisi2[idx].ruta_file)
END IF
END FOR
IF inserteDetalle='NO' THEN
ROLLBACK WORK
CALL msg(16)
NEXT FIELD cod_n
ELSE
UPDATE seg0001 SET seg0001.notificacion = notifica WHERE usuario = usuarios
COMMIT WORK
CALL seleccionarsalida() RETURNING salida
-- La API de configuracion de reportes (fgl_report_*) no esta
-- disponible en este FGL; se escribe el XML directo a un archivo
-- en FGLSPOOL en lugar de la vista previa/exportacion nativa.
LET p_reportfile = FGL_GETENV("FGLSPOOL"), "/coprmt025_req1.xml"
LET handler = om.XmlWriter.createFileWriter(p_reportfile)
START REPORT print_req TO XML HANDLER HANDLER
PREPARE query FROM
"SELECT nom_dpto FROM adtb00001 WHERE departamento = " || requisi2.departamento
EXECUTE query INTO descrip1
PREPARE query FROM
"SELECT nom_dpto FROM adtb00001 WHERE departamento = ?"
EXECUTE query USING depto INTO descrip_depto
FOR idx = 1 TO arr_requisi2.getLength()
OUTPUT TO REPORT print_req(requisi2.*, descrip1, descrip2, descrip3,
arr_requisi2[idx].*, orden_trabajo,depto,descrip_depto)
END FOR
FINISH REPORT print_req
call arr_requisi2.clear()
LET numero_msg = 1
CALL msg(numero_msg)
IF notifica = 'SI' THEN
#LET toEmail = 'jsoto@marmotech.com.do,jsoto@movilsoluciones.com.do,'
LET xusername ='notificacion@marmotech.com.do'
LET xsmtphost ='smtp.office365.com'
LET xsmtpport = '587'
LET xpassword = 'Lmmjvsd2020'
# LET vendedoremail = 'gespinal@marmotech.com.do;jsoto@marmotech.com.do'
LET subject = "ADICION RQUISICION COMPRAS ",requisi2.num_req USING "&&&&&&&"
LET cuerpo_correo="<!DOCTYPE html><body>", "<h1> ADICION REQUISICION COMPRAS NO. ",requisi2.num_req USING "&&&&&&&&",
"</h1><div><h2>",
"FUE ADICIONADA POR EL USUARIO ",xnombreusuario CLIPPED,"</h2></div>",
"<div><h2>",requisi2.uso CLIPPED,"</h2></div>",
"<div><h2>",requisi2.observacion CLIPPED,"</h2></div>"
IF dir_file IS NOT NULL THEN
LET cuerpo_correo = cuerpo_correo CLIPPED, "<div><h2>ESTA REQUISICION INCLUYE DOCUMENTO</h2></div>"
END IF
LET attachment = null
CALL enviaemail(toEmail,subject,cuerpo_correo,attachment,xusername,xsmtphost,xsmtpport,xpassword)
#RETURNING mensaje
END IF
# LET procedimiento = "{ call sp_enviacorreo(?,?,?,?) }" CLIPPED
# CALL envia_correo('yherasme@marmotech.com.do',vendedorEmail,cuerpo_correo,
# subject, procedimiento )
END IF
END IF
#-------------------------- ADICIONAR ------------------------------------
ELSE
LET opt = fgl_winquestion("MODIFICACION","ESTA SEGURO DE ACTUALIZAR ESTA REQUISICION?","NO","YES|NO","QUESTION",0)
IF opt = "YES" THEN
BEGIN WORK
UPDATE cotb00006 set (departamento,cod_emp_sec,uso,prioridad,us_mod,fech_mod,observacion,
nombre_file,documento,num_oc,tipo_cliente,sec_cliente,proveedor,estado)=
(requisi2.departamento,requisi2.cod_emp_sec,requisi2.uso,requisi2.prioridad,usuarios,getdate(),
requisi2.observacion,dir_file,fdocumento,requisi2.num_oc,ktipo_cliente,
ksec_cliente,proveedor_sugerido,requisi2.estado )
WHERE num_req = requisi2.num_req
LET inserteDetalle='NO'
DELETE FROM cotb00008 WHERE num_req = requisi2.num_req
FOR idx = 1 TO arr_requisi2.getLength()
IF arr_requisi2[idx].cod_n IS NOT NULL AND
arr_requisi2[idx].cod_grupo IS NOT NULL AND
arr_requisi2[idx].cod_tipo IS NOT NULL AND
arr_requisi2[idx].cod_sec IS NOT NULL THEN
IF arr_requisi2[idx].ruta_file IS NULL THEN
LOCATE arr_requisi2[idx].foto IN MEMORY
END IF
IF arr_requisi2[idx].cantidad IS NULL THEN
ROLLBACK WORK
CALL msg(16)
NEXT FIELD cantidad
END IF
LET inserteDetalle='SI'
INSERT INTO cotb00008
(num_req
,tipo_inv
,cod_n
,cod_grupo
,cod_tipo
,cod_sec
,cantidad
,us_crea
,fech_crea
,procesada
,documento
,ruta_file
)
VALUES (requisi2.num_req,arr_requisi2[idx].tipo_inv,
arr_requisi2[idx].cod_n,
arr_requisi2[idx].cod_grupo,
arr_requisi2[idx].cod_tipo,
arr_requisi2[idx].cod_sec,
arr_requisi2[idx].cantidad,
suser_sname(),getdate(),'N',arr_requisi2[idx].foto,
arr_requisi2[idx].ruta_file)
END IF
END FOR
IF inserteDetalle = 'NO' THEN
ROLLBACK WORK
CALL msg(16)
NEXT FIELD cod_n
ELSE
UPDATE seg0001 SET seg0001.notificacion = notifica WHERE usuario = usuarios
COMMIT WORK
CALL seleccionarsalida() RETURNING salida
-- Ver nota sobre fgl_report_* mas arriba en este archivo.
LET p_reportfile = FGL_GETENV("FGLSPOOL"), "/coprmt025_req2.xml"
LET handler = om.XmlWriter.createFileWriter(p_reportfile)
START REPORT print_req TO XML HANDLER HANDLER
PREPARE query FROM
"SELECT nom_dpto FROM adtb00001 WHERE departamento = " || requisi2.departamento
EXECUTE query INTO descrip1
PREPARE query FROM
"SELECT nom_dpto FROM adtb00001 WHERE departamento = ?"
EXECUTE query USING depto INTO descrip_depto
FOR idx = 1 TO arr_requisi2.getLength()
OUTPUT TO REPORT print_req(requisi2.*, descrip1, descrip2, descrip3,
arr_requisi2[idx].*, orden_trabajo,depto, descrip_depto)
END FOR
FINISH REPORT print_req
LET numero_msg = 13
CALL msg(numero_msg)
IF notifica = "SI" THEN
# LET toEmail = 'jsoto@marmotech.com.do'
LET xusername ='notificacion@marmotech.com.do'
LET xsmtphost ='smtp.office365.com'
LET xsmtpport = '587'
LET xpassword = 'Lmmjvsd2020'
# LET vendedoremail = 'gespinal@marmotech.com.do;jsoto@marmotech.com.do'
LET subject = "MODIFICAION RQUISICION COMPRAS ",requisi2.num_req USING "&&&&&&&"
# LET cuerpo_correo = 'FUE ADICIONADA POR EL EMPLEADO',descrip1 CLIPPED
LET cuerpo_correo="<!DOCTYPE html><body>", "<h1> MODIFIACION REQUISICION COMPRAS NO. ",requisi2.num_req USING "&&&&&&&&",
"</h1><div><h2>",
"FUE MODIFICADA POR EL USUARIO ",xnombreusuario CLIPPED,"</h2></div>",
"<div><h2>",requisi2.uso CLIPPED,"</h2></div>",
"<div><h2>",requisi2.observacion CLIPPED,"</h2></div>"
IF dir_file IS NOT NULL THEN
LET cuerpo_correo = cuerpo_correo CLIPPED, "<div><h2>ESTA REQUISICION INCLUYE DOCUMENTO</h2></div>"
END IF
LET attachment = null
CALL enviaemail(toEmail,subject,cuerpo_correo,attachment,xusername,xsmtphost,xsmtpport,xpassword)
# RETURNING mensaje
END IF
END IF
END IF
END IF
# LET commandprompt = "del ",dir_file CLIPPED
# RUN commandprompt
CALL arr_requisi2.clear()
RETURN
END INPUT
ON ACTION CANCEL
LET INT_FLAG = FALSE
EXIT PROGRAM
END DIALOG
END FUNCTION
FUNCTION copcmf025()
DEFINE usuario RECORD
usuario CHAR(50),
fecha LIKE cotb00008.fech_crea
END RECORD,
bempleados string
# Aqui se prepara para la captura del criterio de seleccion
CONSTRUCT criterio ON cotb00006.num_req,cotb00006.fech_req,
cotb00006.departamento,cotb00006.cod_emp_sec,
cotb00006.uso
FROM num_req,fech_req,departamento,cod_emp_sec,uso
AFTER CONSTRUCT
EXIT CONSTRUCT
END CONSTRUCT
CALL busca_departamento2()
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET bempleados ="
SELECT RTRIM(a.nom1_emp)+' '+a.apell1_emp
FROM adtb00003 a,adtb00001 b
WHERE a.num_emp =? and
b.departamento =? and
a.departamento = b.departamento"
PREPARE buempleados FROM bempleados
LET SELEC = " SELECT num_req,fech_req,departamento,",
"cod_emp_sec,estado,uso,prioridad,num_oc,observacion,tipo_cliente,sec_cliente,nombre_cliente, ",
" nombre_file,documento,proveedor, orden_trabajo, depto_destino ",
" FROM cotb00006 ",
" WHERE ",
criterio clipped,
# " AND us_crea = suser_sname() ",
" and status_t is null ",
" ORDER BY num_req"
PREPARE busca8 FROM selec
DECLARE datos SCROLL CURSOR FOR busca8
OPEN datos
LOCATE fdocumento IN MEMORY
INITIALIZE requisi2.* TO NULL
FETCH FIRST datos INTO requisi2.*,ktipo_cliente,ksec_cliente,knombre,dir_file,fdocumento,proveedor_sugerido, orden_trabajo, depto
IF status = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
SELECT a.nom_dpto INTO descrip1 FROM adtb00001 a
WHERE a.departamento = requisi2.departamento and
a.status_t is NULL
EXECUTE buempleados INTO descrip2 USING requisi2.cod_emp_sec,requisi2.departamento
CALL busca_orden()
DISPLAY BY NAME requisi2.*,descrip1,descrip2,dir_file,proveedor_sugerido, orden_trabajo, depto
DIALOG ATTRIBUTE (UNBUFFERED)
DISPLAY ARRAY arr_requisi2 TO s_requisi2.*
BEFORE ROW
LET curr = arr_curr()
IF arr_requisi2[curr].ruta_file IS NOT NULL THEN
CALL ui.Interface.frontCall("standard","getenv", ["HOMEPATH"], [l_file] )
LET dir_foto =arr_requisi2[curr].ruta_file
LET l_file = "c:",l_file CLIPPED,"\\",dir_foto CLIPPED
CALL arr_requisi2[curr].foto.writeFile(dir_foto)
DISPLAY dir_foto TO filepath
END IF
BEFORE DISPLAY
CALL arr_requisi2.clear()
CALL busca_det_req()
# MENU "OPCIONES "
ON ACTION bdocumento
LET dir_file = NULL
CALL ui.Interface.frontCall("standard","openfile", [dir_file,d_tipos,f_tipos,mensaje], [filepath] )
IF filepath IS NOT NULL THEN
LET dir_file = os.Path.basename(filepath)
LET tmpdir_file = "tmp\\",dir_file CLIPPED
CALL fgl_getfile(filepath,tmpdir_file)
CALL fdocumento.readfile(tmpdir_file)
LET extension = os.Path.extension(dir_file)
LET dir_file = requisi2.num_req USING "&&&&&&&&",".",extension CLIPPED
DISPLAY BY NAME dir_file
END IF
ON ACTION bborrar
UPDATE cotb00006 SET nombre_file = NULL,documento = NULL WHERE num_req = requisi2.num_req
LET dir_file = NULL
DISPLAY BY NAME dir_file
ON ACTION bopen
IF dir_file IS NOT NULL THEN
LET tmpdir_file = "tmp\\",usuarios CLIPPED,dir_file CLIPPED
CALL fdocumento.writeFile(tmpdir_file)
#CALL ui.Interface.frontCall("standard","getenv", ["HOMEPATH"], [l_file] )
CALL ui.Interface.frontCall("standard","getenv", ["TEMP"], [l_file] )
LET l_file = l_file CLIPPED,"\\",dir_file CLIPPED
CALL fgl_putfile(tmpdir_file,l_file)
CALL ui.Interface.frontCall("standard","shellexec", [l_file],[p_res])
# CALL fgl_winmessage("info",p_res,"info")
END IF
ON ACTION Siguiente
FETCH NEXT datos INTO requisi2.*,ktipo_cliente,ksec_cliente,knombre,dir_file,fdocumento,proveedor_sugerido , orden_trabajo, depto
IF status = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
SELECT a.nom_dpto INTO descrip1 FROM adtb00001 a
WHERE a.departamento = requisi2.departamento and
a.status_t is NULL
EXECUTE buempleados INTO descrip2 USING requisi2.cod_emp_sec,requisi2.departamento
CALL busca_orden()
DISPLAY BY NAME requisi2.*,descrip1,descrip2,dir_file,proveedor_sugerido, orden_trabajo, depto
CALL arr_requisi2.clear()
CALL busca_det_req()
ON ACTION Anterior
FETCH PREVIOUS datos INTO requisi2.*,ktipo_cliente,ksec_cliente,knombre,dir_file,fdocumento,proveedor_sugerido, orden_trabajo, depto
IF status = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
SELECT nom_dpto INTO descrip1 FROM adtb00001
WHERE @departamento = requisi2.departamento and
status_t is null
EXECUTE buempleados INTO descrip2 USING requisi2.cod_emp_sec,requisi2.departamento
CALL busca_orden()
DISPLAY BY NAME requisi2.*,descrip1,descrip2,dir_file,proveedor_sugerido, orden_trabajo, depto
CALL arr_requisi2.clear()
CALL busca_det_req()
ON ACTION Primero
FETCH FIRST datos INTO requisi2.*,ktipo_cliente,ksec_cliente,knombre,dir_file,fdocumento,proveedor_sugerido, orden_trabajo, depto
IF status = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
SELECT nom_dpto INTO descrip1 FROM adtb00001
WHERE @departamento = requisi2.departamento and
status_t is NULL
EXECUTE buempleados INTO descrip2 USING requisi2.cod_emp_sec,requisi2.departamento
CALL busca_orden()
DISPLAY BY NAME requisi2.*,descrip1,descrip2,dir_file,proveedor_sugerido, orden_trabajo, depto
CALL arr_requisi2.clear()
CALL busca_det_req()
LET numero_msg = 5
CALL msg(numero_msg)
ON ACTION Ultimo
FETCH LAST datos INTO requisi2.*,ktipo_cliente,ksec_cliente,knombre,dir_file,fdocumento,proveedor_sugerido, orden_trabajo, depto
SELECT a.nom_dpto INTO descrip1 FROM adtb00001 a
WHERE a.departamento = requisi2.departamento and
a.status_t is null
EXECUTE buempleados INTO descrip2 USING requisi2.cod_emp_sec,requisi2.departamento
CALL busca_orden()
DISPLAY BY NAME requisi2.*,descrip1,descrip2,dir_file,proveedor_sugerido, orden_trabajo, depto
CALL arr_requisi2.clear()
CALL busca_det_req()
LET numero_msg = 4
CALL msg(numero_msg)
ON ACTION acTualizar
# Verifica si la requisicion tiene orden
SELECT UNIQUE a.num_req FROM cotb00015 a WHERE a.num_req = requisi2.num_req AND a.status_t IS NULL
IF STATUS <> NOTFOUND THEN
CALL fgl_winmessage("INFO","REQUISICION TIENE ORDEN, NO PUEDES MODIFICARLA","INFO")
CONTINUE DIALOG
END IF
CALL copcad025()
ON ACTION impresor
IF salida IS NULL THEN
LET salida = 'PDF'
END IF
-- Ver nota sobre fgl_report_* mas arriba en este archivo.
LET p_reportfile = FGL_GETENV("FGLSPOOL"), "/coprmt025_req3.xml"
LET handler = om.XmlWriter.createFileWriter(p_reportfile)
START REPORT print_req TO XML HANDLER HANDLER
PREPARE query FROM
"SELECT nom_dpto FROM adtb00001 WHERE departamento = ?"
EXECUTE query USING requisi2.departamento INTO descrip1
PREPARE query FROM
"SELECT nom_dpto FROM adtb00001 WHERE departamento = ?"
EXECUTE query USING depto INTO descrip_depto
FOR idx = 1 TO arr_requisi2.getLength()
OUTPUT TO REPORT print_req(requisi2.*, descrip1, descrip2, descrip3,
arr_requisi2[idx].*, orden_trabajo,depto, descrip_depto)
END FOR
FINISH REPORT print_req
ON ACTION aNular
SELECT DISTINCT a.num_req FROM cotb00015 a WHERE a.num_req = requisi2.num_req AND a.status_t IS NULL
IF STATUS <> NOTFOUND THEN
CALL msg(1004)
CONTINUE DIALOG
END IF
LET opt = fgl_winquestion("ANULAR","ESTA SEGURO DE ANULAR REQUISICION?","NO","YES|NO","QUESTION",0)
IF opt = "YES" THEN
UPDATE cotb00006 set status_t = "N",
us_mod = suser_sname(),
fech_mod = getdate()
WHERE num_req = requisi2.num_req
UPDATE cotb00008 set status_t = "E",
us_mod = suser_sname(),
fech_mod = getdate()
WHERE num_req = requisi2.num_req
LET numero_msg = 39
CALL msg(numero_msg)
LET procedimiento = "{ call cc_avisadespacho(?,?,?,?) }" CLIPPED
LET vendedoremail = 'gespinal@marmotech.com.do;jsoto@marmotech.com.do'
LET subject = "ANULACION RQUISICION COMPRAS ",requisi2.num_req USING "&&&&&&&"
LET cuerpo_correo="<tr><th>","FUE ANULADA POR EL EMPLEADO ",descrip1 CLIPPED,"</tr>",
"<tr><td>",requisi2.uso CLIPPED,"</td></tr>",
"<tr><td>",requisi2.observacion CLIPPED,"</td></tr>"
CALL envia_correo('yherasme@marmotech.com.do',vendedorEmail,cuerpo_correo,
subject, procedimiento )
END IF
{ ON ACTION Retornar
LET commandprompt = "del c:",l_file CLIPPED
DISPLAY "commnad ",commandprompt
CALL ui.Interface.frontCall( "standard", "execute", [commandprompt,p_res], [p_res] )
# LET commandprompt = "del ", dir_file CLIPPED
# RUN commandprompt
CLEAR FORM}
ON ACTION CANCEL
RETURN
END DISPLAY
END DIALOG
END FUNCTION
FUNCTION repite2()
LET ant_art.cod_n = arr_requisi2[curr].cod_n
LET ant_art.cod_grupo = arr_requisi2[curr].cod_grupo
LET ant_art.cod_tipo = arr_requisi2[curr].cod_tipo
LET ant_art.cod_sec = arr_requisi2[curr].cod_sec
FOR idx = 1 TO c_cuenta
IF idx < 10 THEN
IF idx != curr THEN
IF arr_requisi2[idx].cod_n IS NOT NULL AND
arr_requisi2[idx].cod_grupo IS NOT NULL AND
arr_requisi2[idx].cod_tipo IS NOT NULL AND
arr_requisi2[idx].cod_sec IS NOT NULL THEN
IF arr_requisi2[idx].cod_n = ant_art.cod_n AND
arr_requisi2[idx].cod_grupo = ant_art.cod_grupo AND
arr_requisi2[idx].cod_tipo = ant_art.cod_tipo AND
arr_requisi2[idx].cod_sec = ant_art.cod_sec THEN
LET numero_msg = 21
CALL msg(numero_msg)
LET verdad = "S"
ELSE
IF verdad != "S" THEN
LET verdad = "N"
END IF
END IF
END IF
END IF
END IF
END FOR
END FUNCTION
FUNCTION busca_det_req()
# Antes buscar el detalle de la requisicion limpia la pantalla
# Busca los registros detalle de la requisicion
DECLARE datos2 CURSOR FOR SELECT a.tipo_inv,a.cod_n,a.cod_grupo,a.cod_tipo,
a.cod_sec,
a.cantidad,a.ruta_file,a.documento
FROM cotb00008 a
WHERE a.num_req = requisi2.num_req and
a.status_t is null
LET idx = 1
LOCATE arr_requisi2[idx].foto IN MEMORY
FOREACH datos2 INTO arr_requisi2[idx].tipo_inv,arr_requisi2[idx].cod_n,
arr_requisi2[idx].cod_grupo,arr_requisi2[idx].cod_tipo,
arr_requisi2[idx].cod_sec, arr_requisi2[idx].cantidad,
arr_requisi2[idx].ruta_file,arr_requisi2[idx].foto
IF arr_requisi2[idx].tipo_inv="MATERIA PRIMA" THEN
SELECT a.descrip_esp,a.unidad_med INTO arr_requisi2[idx].descrip_esp,arr_requisi2[idx].unidad_med
FROM intb00001 a
WHERE a.cod_n = arr_requisi2[idx].cod_n AND
a.cod_grupo = arr_requisi2[idx].cod_grupo AND
a.cod_tipo = arr_requisi2[idx].cod_tipo AND
a.cod_sec = arr_requisi2[idx].cod_sec AND
a.status_t IS null
END IF
IF arr_requisi2[idx].tipo_inv="PRODUCTO TERMINADOS" THEN
SELECT a.descrip_esp,a.unidad_med INTO arr_requisi2[idx].descrip_esp,arr_requisi2[idx].unidad_med
FROM iptb00002 a
WHERE a.cod_n = arr_requisi2[idx].cod_n AND
a.cod_grupo = arr_requisi2[idx].cod_grupo AND
a.cod_tipo = arr_requisi2[idx].cod_tipo AND
a.cod_sec = arr_requisi2[idx].cod_sec AND
a.status_t IS null
END IF
IF arr_requisi2[idx].tipo_inv="REPUESTOS" THEN
SELECT a.descrip_esp,a.unidad_med INTO arr_requisi2[idx].descrip_esp,arr_requisi2[idx].unidad_med
FROM irtb00002 a
WHERE a.cod_n = arr_requisi2[idx].cod_n AND
a.cod_grupo = arr_requisi2[idx].cod_grupo AND
a.cod_tipo = arr_requisi2[idx].cod_tipo AND
a.cod_sec = arr_requisi2[idx].cod_sec AND
a.status_t IS null
END IF
IF arr_requisi2[idx].tipo_inv="MISCELANEOS" THEN
SELECT a.descrip_esp,a.unidad_med INTO arr_requisi2[idx].descrip_esp,arr_requisi2[idx].unidad_med
FROM istb00002 a
WHERE a.cod_n = arr_requisi2[idx].cod_n AND
a.cod_grupo = arr_requisi2[idx].cod_grupo AND
a.cod_tipo = arr_requisi2[idx].cod_tipo AND
a.cod_sec = arr_requisi2[idx].cod_sec AND
a.status_t IS null
END IF
LET idx = idx + 1
LOCATE arr_requisi2[idx].foto IN MEMORY
END FOREACH
END FUNCTION
FUNCTION busca_det_orden()
DECLARE busca_orden CURSOR FOR
SELECT DISTINCT 'PRODUCTO TERMINADOS',a.cod_n,a.cod_grupo,a.cod_tipo,
a.cod_sec,a.cantidad,b.descrip_esp,b.unidad_med
FROM prtb00013 a,iptb00002 b
WHERE a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec AND
a.num_oc = requisi2.num_oc
LET idx = 1
LOCATE arr_requisi2[idx].foto IN MEMORY
FOREACH busca_orden INTO arr_requisi2[idx].tipo_inv,arr_requisi2[idx].cod_n,
arr_requisi2[idx].cod_grupo,arr_requisi2[idx].cod_tipo,
arr_requisi2[idx].cod_sec,arr_requisi2[idx].cantidad,
arr_requisi2[idx].descrip_esp,arr_requisi2[idx].unidad_med
LET idx = idx + 1
LOCATE arr_requisi2[idx].foto IN MEMORY
END FOREACH
END FUNCTION
#-------------------------------------------------------------------------
# Impresion de la Requisicion.
#-------------------------------------------------------------------------
REPORT print_req(x,descrip11,descrip22,descrip33,z, y, w, descrip44)
DEFINE x RECORD
num_req LIKE cotb00006.num_req,
fech_req LIKE cotb00006.fech_req,
departamento LIKE adtb00001.departamento,
cod_emp_sec LIKE cotb00006.cod_emp_sec,
estado LIKE cotb00006.estado,
uso LIKE cotb00006.uso,
prioridad LIKE cotb00006.prioridad,
num_oc INT,
observacion VARCHAR(100)
END RECORD
DEFINE descrip11, descrip22, descrip33, descrip44 CHAR(30)
DEFINE y, w STRING
DEFINE z RECORD
tipo_inv VARCHAR(20),
cod_n LIKE cotb00008.cod_n,
cod_grupo LIKE cotb00008.cod_grupo,
cod_tipo LIKE cotb00008.cod_tipo,
cod_sec LIKE cotb00008.cod_sec,
descrip_esp VARCHAR(180),
unidad_med LIKE intb00001.unidad_med,
cantidad LIKE cotb00008.cantidad,
ruta_file VARCHAR(100),
foto BYTE
END RECORD,
existencia,consumo DECIMAL(12,2),
fecha1 DATE,
doce CHAR(2)
OUTPUT
TOP MARGIN 10
PAGE LENGTH 100
#ORDER BY x.num_req,z.cod_sec
FORMAT
PAGE HEADER
# LET negrillas_on = ASCII 27, ASCII 71
# LET negrillas_off = ASCII 27, ASCII 72
# LET doble_on = ASCII 14
# LET doble_off = ASCII 20
# LET comp_on = ASCII 15
# LET comp_off = ASCII 18
# LET comprimido_12_on = ASCII 27, ASCII 77
# LET comprimido_12_off = ASCII 27, ASCII 80
# LET doce = ASCII 27, ASCII 12
PRINT doce
PRINT COLUMN 1,"MARMOTECH, S.A",
COLUMN 49,"REQUISICION DE COMPRA No. ",x.num_req using "&&&&&&"
PRINT
PRINT COLUMN 1,"Solicitante :",
COLUMN 15,"(",x.cod_emp_sec using '<<<<<<',") ",
descrip22 clipped,
COLUMN 53,"Fecha Requisicion : ",x.fech_req using "dd/mm/yyyy"
PRINT COLUMN 1,"Departamento :",
COLUMN 15,"(",x.departamento using '<<<<<<',") ",
descrip11 clipped
PRINT COLUMN 1,"Prioridad :",x.prioridad CLIPPED
PRINT COLUMN 1, "Uso :",x.uso CLIPPED
PRINT COLUMN 1, "ORDEN PEDIDO :",x.num_oc USING "&&&&&&"," ",cliente CLIPPED
PRINT COLUMN 1, "ORDEN DE TRABAJO :",y.trim()
PRINT COLUMN 1, "DEPTO. DESTINO :", "(", w.trim(),") ", descrip44
PRINT COLUMN 1, "OBSERVACIONES :", x.observacion[1,70]
PRINT COLUMN 1, "PROVEEDOR SUGERIDO:",proveedor_sugerido CLIPPED
PRINT COLUMN 1,"----------------------------------------",
"----------------------------------------",
"---------------------------"
PRINT COLUMN 1, "INVENTARIO",
COLUMN 21,"Codigo",
COLUMN 42,"Descripcion",
COLUMN 73, "Existencia",
COLUMN 86, "Consumo",
COLUMN 95,"Cantidad",
COLUMN 104,"Und"
PRINT COLUMN 1,"----------------------------------------",
"----------------------------------------",
"---------------------------"
LET fecha1 = x.fech_req - 90
ON EVERY ROW
IF z.cod_n is not null and
z.cod_grupo is not null and
z.cod_tipo is not null and
z.cod_sec is not null THEN
# BUSCA EXISTENCIA
CASE
WHEN z.cod_n = 1
SELECT SUM(a.cantidad_2) INTO existencia
FROM intb00006 a
WHERE a.cod_n = z.cod_n AND
a.cod_grupo = z.cod_grupo AND
a.cod_tipo = z.cod_tipo AND
a.cod_sec = z.cod_sec AND
a.status_t IS NULL
EXIT CASE
WHEN z.cod_n = 3 OR z.cod_n = 6 OR
z.cod_n = 9
SELECT SUM(a.cantidad_2) INTO existencia
FROM iptb00006 a
WHERE a.cod_n = z.cod_n AND
a.cod_grupo = z.cod_grupo AND
a.cod_tipo = z.cod_tipo AND
a.cod_sec = z.cod_sec AND
a.status_t IS NULL
EXIT CASE
WHEN z.cod_n = 5
SELECT SUM(a.cantidad_2) INTO existencia
FROM irtb00006 a
WHERE a.cod_n = z.cod_n AND
a.cod_grupo = z.cod_grupo AND
a.cod_tipo = z.cod_tipo AND
a.cod_sec = z.cod_sec AND
a.status_t IS NULL
EXIT CASE
END CASE
#-----------------------------------------------------------------------
# BUSCA EL CONSUMO DEL ARTICULO
CASE
WHEN z.cod_n = 1
SELECT SUM(a.cantidad_2) INTO consumo
FROM intb00006 a
WHERE a.cod_n = z.cod_n AND
a.cod_grupo = z.cod_grupo AND
a.cod_tipo = z.cod_tipo AND
a.cod_sec = z.cod_sec AND
a.fecha BETWEEN fecha1 AND x.fech_req AND
a.cod_mov = 36 AND
a.status_t IS NULL
EXIT CASE
WHEN z.cod_n = 3 OR z.cod_n = 6 OR
z.cod_n = 9
SELECT SUM(a.cantidad_2) INTO consumo
FROM iptb00006 a
WHERE a.cod_n = z.cod_n AND
a.cod_grupo = z.cod_grupo AND
a.cod_tipo = z.cod_tipo AND
a.cod_sec = z.cod_sec AND
a.fecha BETWEEN fecha1 AND x.fech_req AND
a.cod_mov in (30,31) AND
a.status_t IS NULL
EXIT CASE
WHEN z.cod_n = 5
SELECT SUM(a.cantidad_2) INTO consumo
FROM irtb00006 a,irtb00030 b
WHERE a.cod_n = z.cod_n AND
a.cod_grupo = z.cod_grupo AND
a.cod_tipo = z.cod_tipo AND
a.cod_sec = z.cod_sec AND
a.fecha BETWEEN fecha1 AND x.fech_req AND
a.cod_mov = b.cod_grupo AND
a.status_t IS NULL
EXIT CASE
END CASE
#---------------------------------------------------------------------
PRINT COLUMN 1, z.tipo_inv,
COLUMN 20, z.cod_n using "&&&&","-",
z.cod_grupo using "&&&&","-",
z.cod_tipo using "&&&&","-",
z.cod_sec using "&&&&&&",
COLUMN 44, z.descrip_esp WORDWRAP RIGHT MARGIN 77,
COLUMN 74, existencia USING "<<<<,<<<.##",
COLUMN 86, consumo USING "<<<<<,<<<.##",
COLUMN 99, z.cantidad using "<<,<<<,<<<.##",
" ",z.unidad_med
INITIALIZE adicional.* TO NULL
SELECT a.detalle1,a.detalle2,a.detalle3
INTO adicional.detalle1, adicional.detalle2, adicional.detalle3
FROM cotb00042 a
WHERE a.status_t is null AND
a.num_req = x.num_req AND
a.cod_n = z.cod_n AND
a.cod_grupo = z.cod_grupo AND
a.cod_tipo = z.cod_tipo AND
a.cod_sec = z.cod_sec
IF adicional.detalle1 IS NOT NULL THEN
PRINT COLUMN 13, adicional.detalle1
END IF
IF adicional.detalle2 IS NOT NULL THEN
PRINT COLUMN 13, adicional.detalle2
END IF
IF adicional.detalle3 IS NOT NULL THEN
PRINT COLUMN 13, adicional.detalle3
END IF
END IF
PAGE TRAILER
PRINT COLUMN 1,"----------------------------------------",
"----------------------------------------"
PRINT COLUMN 1,"AUTORIZACION"
SKIP 5 LINES
PRINT COLUMN 3,"--------------------",
COLUMN 31,"--------------------",
COLUMN 58,"--------------------"
PRINT COLUMN 3,"Gerente Departamento",
COLUMN 31," Gerente General ",
COLUMN 58," Gerente Materiales "
END REPORT
FUNCTION busca_orden()
# SELECT a.tipo_cliente,a.sec_cliente,b.nombre INTO ktipo_cliente,ksec_cliente,knombre
# FROM prtb00012 a,vetb00004 b
# WHERE a.num_oc = requisi2.num_oc AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND
# a.status_t IS NULL
LET cliente = ktipo_cliente USING "&&","-",ksec_cliente USING "&&&&&&&&"," ",knombre CLIPPED
DISPLAY BY NAME cliente
END FUNCTION
FUNCTION busca_proveedor()
SELECT MAX(a.num_oc) INTO ult_orden FROM cotb00014 a,cotb00015 b
WHERE (a.num_oc = b.num_oc) AND
b.cod_n = arr_requisi2[curr].cod_n AND
b.cod_grupo = arr_requisi2[curr].cod_grupo AND
b.cod_tipo = arr_requisi2[curr].cod_tipo AND
b.cod_sec = arr_requisi2[curr].cod_sec AND
a.status_t IS NULL
IF ult_orden IS NOT NULL THEN
SELECT CAST(a.cod_sp AS VARCHAR(4)) +'-'+CAST(a.cod_sp_sec AS VARCHAR(8))+' '+
a.nom_sp INTO proveedor_sugerido
FROM cotb00001 a,cotb00014 b
WHERE (a.cod_sp = b.cod_sp AND
a.cod_sp_sec = b.cod_sp_sec) AND
(b.num_oc = ult_orden) AND
b.status_t IS NULL
DISPLAY BY NAME proveedor_sugerido
END IF
END FUNCTION
FUNCTION buscarToemail()
DEFINE xemail VARCHAR(255)
SELECT a.email,a.nombreusuario,a.notificacion
INTO toemail,xnombreusuario,notifica FROM seg0001 a WHERE a.usuario = usuarios
DECLARE buscaremail CURSOR FOR
SELECT a.correo FROM seg0003 a WHERE a.requisicionescompras='SI'
FOREACH buscaremail INTO xemail
LET toemail = toemail CLIPPED,",",xemail CLIPPED
END FOREACH
DISPLAY "EMAIL ",toemail," NOTIFICA ",notifica , " u ",usuarios
END FUNCTION
FUNCTION checkProducts()
DEFINE cont, i INT
LET cont = 0
FOR i = 1 TO arr_requisi2.getLength()
IF arr_requisi2[i].cod_n = container.cod_n AND
arr_requisi2[i].cod_grupo = container.cod_grupo AND
arr_requisi2[i].cod_tipo = container.cod_tipo AND
arr_requisi2[i].cod_sec = container.cod_sec AND
arr_requisi2[i].tipo_inv = container.tipo_inv THEN
LET cont = cont + 1
END IF
END FOR
IF cont >= 2 THEN
RETURN FALSE
ELSE
RETURN TRUE
END IF
END FUNCTION