{ PROGRAMA: irautorizareq OBJETIVO: Mostrar al usuario las requisiciones autorizadas FECHA : Mayo 9, 2022 } GLOBALS "irprgb000.4gl" DEFINE r INT, arr_busqueda1 DYNAMIC ARRAY OF RECORD procesar VARCHAR(3), estado VARCHAR(20), idestado INT, num_oc INT, tipo_documento VARCHAR(100), numeroid INT, fecha DATE, nombre, observacion1, origen, destino, usuario VARCHAR(100), vendedor VARCHAR(100), archivo VARCHAR(200), cod_mov1 INT, us_crea VARCHAR(50), rtipo_cliente, rsec_cliente, bodega, bodega_destino INT END RECORD, nombreusuario, email, vendedor VARCHAR(100), tienedespiece BOOLEAN, cuentaimp INT DEFINE despiece1 DYNAMIC ARRAY OF RECORD id_etiqueta SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, lado_1 DEC(12, 5), lado_2 DEC(12, 5), lado_3 DEC(12, 5), cantidad DEC(12, 5), medida DEC(12, 5), secuencia, id_despiece INT, bodega SMALLINT END RECORD DEFINE curr INT FUNCTION irautorizadas(xusuario) DEFINE data RECORD rnumeroDoc, rcodMov, rtipo_cliente, num_oc, tipo_cliente, sec_cliente, bodega, bodega_destino INT, nombre VARCHAR(100) END RECORD, xusuario VARCHAR(50) CALL arr_busqueda1.clear() INITIALIZE curr TO NULL CALL buscadataReq(xusuario) IF r = 1 THEN RETURN data.* END IF OPEN WINDOW w1 WITH FORM "irautorizareq" INPUT ARRAY arr_busqueda1 FROM sbusqueda.* ATTRIBUTE(WITHOUT DEFAULTS, UNBUFFERED) BEFORE INPUT DISPLAY 'REQUISICIONES TRANSACCIONES AUTORIZADAS' TO etiqueta CALL DIALOG.setActionActive("accept", FALSE) { BEFORE ROW LET r = arr_curr() IF arr_busqueda1[r].archivo IS NULL THEN CALL DIALOG.setActionActive( "tfile", FALSE ) ELSE CALL DIALOG.setActionActive( "tfile", TRUE ) END IF} CALL estadosprocesos(1) ON ACTION tfile LET r = arr_curr() IF arr_busqueda1[r].archivo IS NOT NULL THEN CALL ui.Interface.frontCall( "standard", "launchURL", [arr_busqueda1[r].archivo], []) END IF ON ACTION imprimir ATTRIBUTE(TEXT = "Imprimir", IMAGE = "printer") IF arr_busqueda1[arr_curr()].numeroid > 0 THEN CALL buscadoc( arr_busqueda1[arr_curr()].numeroid, arr_busqueda1[arr_curr()].cod_mov1) LET data.rnumeroDoc = arr_busqueda1[arr_curr()].numeroid LET data.rcodMov = arr_busqueda1[arr_curr()].cod_mov1 LET data.rtipo_cliente = arr_busqueda1[arr_curr()].rtipo_cliente LET data.sec_cliente = arr_busqueda1[arr_curr()].rsec_cliente LET data.nombre = arr_busqueda1[arr_curr()].nombre LET data.num_oc = arr_busqueda1[arr_curr()].num_oc LET data.bodega = arr_busqueda1[arr_curr()].bodega LET data.bodega_destino = arr_busqueda1[arr_curr()].bodega_destino LET nombreUsuario = arr_busqueda1[arr_curr()].usuario DISPLAY data.* DISPLAY nombreUsuario CALL impdocumento() END IF ON ACTION procesar ATTRIBUTE(TEXT = "Procesa", IMAGE = "") LET curr = arr_curr() IF arr_busqueda1[curr].numeroid > 0 THEN LET data.rnumeroDoc = arr_busqueda1[curr].numeroid LET data.rcodMov = arr_busqueda1[curr].cod_mov1 LET data.rtipo_cliente = arr_busqueda1[curr].rtipo_cliente LET data.sec_cliente = arr_busqueda1[curr].rsec_cliente LET data.nombre = arr_busqueda1[curr].nombre LET data.num_oc = arr_busqueda1[curr].num_oc LET data.bodega = arr_busqueda1[curr].bodega LET data.bodega_destino = arr_busqueda1[curr].bodega_destino EXIT INPUT END IF ON CHANGE observacion1 IF arr_busqueda1[arr_curr()].numeroid > 0 THEN UPDATE irtb00057 SET observacion = arr_busqueda1[arr_curr()].observacion1, us_mod = usuarios, fech_mod = getdate() WHERE numero_doc = arr_busqueda1[arr_curr()].numeroid END IF ON CHANGE idestado IF arr_busqueda1[arr_curr()].numeroid > 0 THEN UPDATE irtb00057 SET idestado = arr_busqueda1[arr_curr()].idestado, observacion = arr_busqueda1[arr_curr()].observacion1, us_mod = usuarios, fech_mod = getdate() WHERE numero_doc = arr_busqueda1[arr_curr()].numeroid END IF AFTER INPUT IF int_flag THEN LET data.rnumeroDoc = NULL LET data.rcodMov = NULL LET data.rtipo_cliente = NULL LET data.sec_cliente = NULL LET data.nombre = NULL LET data.num_oc = NULL LET data.bodega = NULL LET data.bodega_destino = NULL LET int_flag = FALSE END IF EXIT INPUT END INPUT CLOSE WINDOW w1 RETURN data.* END FUNCTION FUNCTION buscadataReq(pusuario) DEFINE pusuario VARCHAR(50) DECLARE buscar CURSOR FOR SELECT ' ', b.estado, b.idestado, b.num_oc, CAST(a.cod_mov AS VARCHAR(10)) || ' ' || a.descrip_mov, b.numero_doc, b.fecha, '', b.observacion, (SELECT p1.descripcion FROM intb00009 p1 WHERE p1.cod_bodega = b.bodega) AS ORIGEN, (SELECT p2.descripcion FROM intb00009 p2 WHERE p2.cod_bodega = b.bodega_destino), ' ', ' ' , b.url_destino, b.cod_mov, b.us_crea, '0', '0', b.bodega, b.bodega_destino FROM irtb00005 a, irtb00057 b INNER JOIN irtb00048 d ON d.bodega = b.bodega AND d.usuario = pusuario WHERE a.cod_mov = b.cod_mov AND b.estado = 'AUTORIZADA' AND b.status_t IS NULL LET r = 1 CALL arr_busqueda1.clear() FOREACH buscar INTO arr_busqueda1[r].* CALL usuarioSistema( arr_busqueda1[r].us_crea) RETURNING nombreUsuario, email LET arr_busqueda1[r].usuario = nombreUsuario LET r = r + 1 END FOREACH END FUNCTION FUNCTION buscadoc(numid, codmov) DEFINE numid, codmov INT LET vendedor = NULL SELECT a.numero_Doc, a.cod_mov, a.fecha, a.num_oc, a.tipo_cliente, a.sec_cliente, a.nombre, a.bodega, a.bodega_destino, a.estado, a.url_destino, a.observacion, b.descrip_mov, c.descripcion INTO p_irtb57.numero_doc, p_irtb57.cod_mov, p_irtb57.fecha, p_irtb57.num_oc, p_irtb57.tipo_cliente, p_irtb57.sec_cliente, p_irtb57.cliente, p_irtb57.bodega, p_irtb57.bodega_destino, p_irtb57.estado, p_irtb57.url_file, p_irtb57.observacion, nombreMov, nombreBodega FROM irtb00057 a INNER JOIN irtb00005 b ON b.cod_mov = a.cod_mov INNER JOIN intb00009 c ON c.cod_bodega = a.bodega #-> Se eliminaron los JOIN a prtb00012 y adtb00003: una requisicion de # REPUESTOS no puede tener orden de pedido de cliente ni nada de ventas, # y el join por sec_vend rompia la consulta (-4104 f.sec_vend). WHERE a.numero_doc = numid AND a.cod_mov = codmov #BODEGA DESTINO IF p_irtb57.bodega_destino IS NOT NULL THEN SELECT a.descripcion INTO nombreBodegaDestino FROM intb00009 a WHERE a.cod_bodega = p_irtb57.bodega_destino END IF DECLARE buscardetalle CURSOR FOR SELECT a.area, a.cod_n, a.cod_grupo, a.cod_tipo, a.cod_sec, a.descripcion, a.unidad_med, a.cantidad_1, a.cantidad_2, c.id_etiqueta, c.lado_1, c.lado_2, c.lado_3, c.cantidad, c.medida FROM irtb00058 a LEFT OUTER JOIN irtb00060 c ON c.cod_n = a.cod_n AND c.cod_grupo = a.cod_grupo AND c.cod_tipo = a.cod_tipo AND c.cod_sec = a.cod_Sec AND c.id_despiece = a.numero_Doc WHERE a.numero_Doc = numid AND a.cod_mov = codmov LET idx = 1 CALL arr_irtb58.clear() LET tienedespiece = FALSE FOREACH buscardetalle INTO arr_irtb58[idx].area, arr_irtb58[idx].cod_n, arr_irtb58[idx].cod_grupo, arr_irtb58[idx].cod_tipo, arr_irtb58[idx].cod_sec, arr_irtb58[idx].descripcion, arr_irtb58[idx].unidad_med, arr_irtb58[idx].cantidad_1, arr_irtb58[idx].cantidad, #arr_irtb58[idx].factor_conv, despiece1[idx].id_etiqueta, despiece1[idx].lado_1, despiece1[idx].lado_2, despiece1[idx].lado_3, despiece1[idx].cantidad, despiece1[idx].medida IF despiece1[idx].cantidad > 0 THEN LET tienedespiece = TRUE ELSE LET tienedespiece = FALSE END IF LET idx = idx + 1 END FOREACH END FUNCTION FUNCTION impdocumento() DEFINE idx_l INT, xcodigo VARCHAR(50) LET r_filename = "irprmt020_1.4rp" IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file LET r_output = "PDF" LET preview = 1 CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes ELSE RETURN END IF START REPORT requiere TO XML HANDLER HANDLER FOR idx = 1 TO arr_irtb58.getLength() IF arr_irtb58[idx].cod_Sec IS NOT NULL THEN LET xcodigo = arr_irtb58[idx].cod_n USING '&&&&&', '-', arr_irtb58[idx].cod_grupo USING '&&&&&', '-', arr_irtb58[idx].cod_tipo USING '&&&&&&', '-', arr_irtb58[idx].cod_sec USING '&&&&&&&' OUTPUT TO REPORT requiere( p_irtb57.*, arr_irtb58[idx].*, despiece1[idx].*, xcodigo) END IF END FOR FINISH REPORT requiere END FUNCTION REPORT requiere(x, detalle, xdespiece, codigo) DEFINE hora STRING, detalle RECORD area INT, cod_n, cod_grupo, cod_tipo, cod_sec INT, descripcion VARCHAR(100), unidad_med VARCHAR(4), cantidad_1, cantidad, cantidad_o1, cantidad1, factor_conv DEC(12, 5) END RECORD, xdespiece RECORD id_etiqueta SMALLINT, cod_n SMALLINT, cod_grupo SMALLINT, cod_tipo SMALLINT, cod_sec SMALLINT, lado_1 DEC(12, 5), lado_2 DEC(12, 5), lado_3 DEC(12, 5), cantidad DEC(12, 5), medida DEC(12, 5), secuencia, id_despiece INT, bodega SMALLINT END RECORD, codigo VARCHAR(50), x RECORD numero_doc INT, cod_mov SMALLINT, fecha DATE, num_oc INT, orden_trabajo INT, observacion VARCHAR(200), tipo_cliente SMALLINT, sec_cliente INT, cliente VARCHAR(100), bodega SMALLINT, bodega_destino SMALLINT, estado VARCHAR(50), ruta_documento, url_file VARCHAR(250), idstado VARCHAR(60) END RECORD, etiqueta VARCHAR(100), total_cantidad, total_medida DEC(12, 5) ORDER BY codigo FORMAT FIRST PAGE HEADER SELECT a.nombre INTO p_companias.nombre FROM companias a LET hora = CURRENT PRINTX p_companias.nombre, hora, x.*, nombreMov, nombreBodega, nombreBodegaDestino, nombreUsuario, vendedor BEFORE GROUP OF codigo PRINTX dEtalle.* ON EVERY ROW SELECT a.descripcion INTO etiqueta FROM vetb00026 a WHERE a.codid = xdespiece.id_etiqueta LET total_cantidad = total_cantidad + xdespiece.cantidad PRINTX codigo, xdespiece.*, tienedespiece, etiqueta, total_cantidad, total_medida END REPORT