{ PROGRAMA: ipautorizareq OBJETIVO: Mostrar al usuario las requisiciones autorizadas FECHA : Mayo 9, 2022 } GLOBALS "ipprgb000.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 FUNCTION ipautorizadas(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() CALL buscadataReq(xusuario) IF r = 1 THEN RETURN data.* END IF OPEN WINDOW w1 WITH FORM "ipautorizareq" INPUT ARRAY arr_busqueda1 FROM sbusqueda.* ATTRIBUTE(WITHOUT DEFAULTS) 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 CALL impdocumento() END IF ON ACTION procesar ATTRIBUTE(TEXT="Procesa",IMAGE="") IF arr_busqueda1[arr_curr()].numeroid > 0 THEN 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 EXIT INPUT END IF ON CHANGE observacion1 IF arr_busqueda1[arr_curr()].numeroid > 0 THEN UPDATE iptb00057 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 iptb00057 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,c.nombre, 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),' ','('||ISNULL(CAST(f.sec_vend AS VARCHAR(10)),'')||')'||isnull(k.nom1_emp,'')||' '||k.apell1_emp,b.url_destino, b.cod_mov,b.us_crea, b.tipo_cliente,b.sec_cliente,b.bodega,b.bodega_destino FROM iptb00005 a,iptb00057 b LEFT OUTER JOIN vetb00004 c ON c.tipo_cliente = b.tipo_cliente AND c.sec_cliente = b.sec_cliente LEFT OUTER JOIN prtb00012 f ON f.num_oc = b.num_oc LEFT OUTER JOIN adtb00003 k ON k.num_emp = f.sec_vend INNER JOIN iptb00048 d ON d.bodega = b.bodega AND d.usuario = pusuario WHERE a.cod_mov = b.cod_mov AND b.estado = 'AUTORIZADA' #AND # ESTA EN COMENTARIO PORQUE SE SUPONE QUE EL PROGRAMA IPPRMT044 CIERRA LAS REQUISICIONES # b.numero_doc NOT IN (SELECT DISTINCT c.numero_doc FROM iptb00006 c WHERE c.cod_mov = a.cod_mov AND # c.numero_doc = b.numero_doc AND c.status_t IS NULL) 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, '('||ISNULL(CAST(f.num_emp AS VARCHAR(10)),' ')||')'||ISNULL(rtrim(f.nom1_emp),' ')||' '||ISNULL(f.apell1_emp,' ') INTO p_iptb57.numero_doc,p_iptb57.cod_mov,p_iptb57.fecha,p_iptb57.num_oc,p_iptb57.tipo_cliente,p_iptb57.sec_cliente, p_iptb57.cliente,p_iptb57.bodega,p_iptb57.bodega_destino,p_iptb57.estado, p_iptb57.url_file,p_iptb57.observacion,nombreMov,nombreBodega,vendedor FROM iptb00057 a INNER JOIN iptb00005 b ON b.cod_mov = a.cod_mov INNER JOIN intb00009 c ON c.cod_bodega = a.bodega LEFT OUTER JOIN prtb00012 d ON d.num_oc = a.num_oc LEFT OUTER JOIN adtb00003 f ON f.num_emp = d.sec_vend WHERE a.numero_doc = numid AND a.cod_mov = codmov #BODEGA DESTINO IF p_iptb57.bodega_destino IS NOT NULL THEN SELECT a.descripcion INTO nombreBodegaDestino FROM intb00009 a WHERE a.cod_bodega = p_iptb57.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,b.factor_conv, c.id_etiqueta, c.lado_1,c.lado_2,c.lado_3,c.cantidad,c.medida FROM iptb00058 a INNER JOIN iptb00001 b ON 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 LEFT OUTER JOIN iptb00060 c ON c.cod_n =b.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_iptb58.clear() LET tienedespiece = FALSE FOREACH buscardetalle INTO arr_iptb58[idx].area, arr_iptb58[idx].cod_n, arr_iptb58[idx].cod_grupo, arr_iptb58[idx].cod_tipo, arr_iptb58[idx].cod_sec, arr_iptb58[idx].descripcion, arr_iptb58[idx].unidad_med, arr_iptb58[idx].cantidad_1, arr_iptb58[idx].cantidad, arr_iptb58[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 = "ipprmt020_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_iptb58.getLength() IF arr_iptb58[idx].cod_Sec IS NOT NULL THEN LET xcodigo =arr_iptb58[idx].cod_n USING '&&&&&','-', arr_iptb58[idx].cod_grupo USING '&&&&&','-', arr_iptb58[idx].cod_tipo USING '&&&&&&','-', arr_iptb58[idx].cod_sec USING '&&&&&&&' OUTPUT TO REPORT requiere(p_iptb57.*,arr_iptb58[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, observacion VARCHAR(200), tipo_cliente SMALLINT, sec_cliente INT, cliente VARCHAR(100), bodega SMALLINT, bodega_destino SMALLINT, estado VARCHAR(50), ruta_documento , url_file , idestado VARCHAR(200) 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