{ ------------------------------------------------------------------------------- PROGRAMA : CPPRMT006 OBJETIVO : Administración Gestión de pagos móvil PROGRAMADOR : Ing. Elvis García FECHA : Febrero 5, 2026 ------------------------------------------------------------------------------- } GLOBALS "cpprgb000.4gl" DEFINE main_array DYNAMIC ARRAY OF RECORD idrow INT, tipo_gasto VARCHAR(100), empleado VARCHAR(100), fecha DATE, ncf STRING, rnc STRING, proveedor VARCHAR(100), valor NUMERIC(18, 2), itbis NUMERIC(18, 2), autorizado BOOLEAN END RECORD DEFINE autorizados_array DYNAMIC ARRAY OF RECORD idrow2 INT, tipo_gasto2 VARCHAR(100), empleado2 VARCHAR(100), fecha2 DATE, ncf2 STRING, rnc2 STRING, proveedor2 VARCHAR(100), valor2 NUMERIC(18, 2), itbis2 NUMERIC(18, 2), autorizado_por2 VARCHAR(100) END RECORD DEFINE rangoFechas RECORD fech_ini DATE, fech_fin DATE END RECORD DEFINE rol STRING MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT TO "marmotech" USER usuarios USING clave SELECT * INTO p_companias.* FROM companias SELECT nom_puesto INTO rol FROM seg0003 WHERE usuario = usuarios IF rol = 'FINANZAS' OR rol = 'FINANZA' THEN --Si alguien con rol de finanzas entra al programa podra observar todas, --las solicitudes pero no podrá aceptar ninguna CALL cpprmt006_1() ELSE CALL cpprmt006() END IF END MAIN FUNCTION cpprmt006() DEFINE documento_imagen BYTE, selec STRING DEFINE img_path STRING, i INT OPEN WINDOW w1 WITH FORM "cpfmmt006" DIALOG ATTRIBUTES(UNBUFFERED) INPUT ARRAY main_array FROM record2.* ATTRIBUTES( WITHOUT DEFAULTS, AUTO APPEND = FALSE, INSERT ROW = FALSE, DELETE ROW = FALSE, APPEND ROW = FALSE) ON ACTION guardar ATTRIBUTES(TEXT = 'Guardar cambios', IMAGE ='filesave') CALL save_data() CALL get_data() ON ACTION Filtros ATTRIBUTES(TEXT='Filtros', IMAGE='filter') CALL init_conditions() CALL get_data() ON ACTION autoriza_all FOR i = 1 TO main_array.getLength() LET main_array[i].autorizado = 1 END FOR ON ACTION CANCEL ATTRIBUTES(TEXT = "Cancelar", IMAGE='cancel') INITIALIZE main_array TO NULL EXIT DIALOG BEFORE ROW DISPLAY BY NAME main_array[arr_curr()].* IF main_array[arr_curr()].idrow IS NOT NULL THEN LET selec = 'SELECT a.documento FROM cptb00014 a WHERE idrow = ?' PREPARE imagen FROM selec LOCATE documento_imagen IN MEMORY EXECUTE imagen USING main_array[arr_curr()].idrow INTO documento_imagen DISPLAY img_path TO formonly.documento_imagen END IF END INPUT DISPLAY ARRAY autorizados_array TO record3.* END DISPLAY BEFORE DIALOG CALL init_conditions() CALL get_data() IF autorizados_array[1].empleado2 IS NULL AND main_array[1].autorizado IS NULL THEN CALL fgl_winmessage("INFO", "NO SE HAN ENCONTRADO DATOS QUE MOSTRAR PARA ESTE USUARIO", "OK") EXIT DIALOG END IF END DIALOG CLOSE WINDOW w1 END FUNCTION FUNCTION cpprmt006_1() OPEN WINDOW w1 WITH FORM "cpfmmt006" DISPLAY ARRAY autorizados_array TO record3.* ATTRIBUTES(UNBUFFERED) BEFORE DISPLAY CALL init_conditions() CALL get_data() END DISPLAY CLOSE WINDOW w1 END FUNCTION FUNCTION init_conditions() INITIALIZE RangoFechas TO NULL INPUT BY NAME RangoFechas.* ATTRIBUTE(UNBUFFERED, WITHOUT DEFAULTS) ON ACTION ACCEPT ATTRIBUTES(TEXT = 'aceptar') ACCEPT INPUT ON ACTION CANCEL EXIT INPUT AFTER INPUT IF RangoFechas.fech_ini IS NULL THEN CALL msg(16) NEXT FIELD fech_ini END IF IF RangoFechas.fech_fin IS NULL THEN CALL msg(16) NEXT FIELD fech_fin END IF IF RangoFechas.fech_ini > RangoFechas.fech_fin THEN CALL msg(86) NEXT FIELD fech_fin END IF END INPUT END FUNCTION FUNCTION get_data() DEFINE idx INT, selec STRING CALL main_array.clear() CALL autorizados_array.clear() IF rol = 'FINANZAS' OR rol = 'FINANZA' THEN LET selec = "SELECT a.idrow, a.tipo_gasto,CONCAT('(',a.ficha_emp,')',RTRIM(b.nom1_emp),' ',b.apell1_emp) as usuario, a.fecha, a.ncf, a.rnc, a.nombreproveedor, a.valor, a.itbis, autorizado_por FROM cptb00014 a inner join adtb00003 b on a.ficha_emp = b.num_emp WHERE a.estado = 1 AND a.fecha BETWEEN '", rangoFechas.fech_ini USING "mm/dd/yyyy", "' AND '", rangoFechas.fech_fin USING "mm/dd/yyyy","'" DECLARE buscar CURSOR FROM SELEC LET idx = 1 FOREACH buscar INTO autorizados_array[idx].* LET idx = idx + 1 END FOREACH ELSE LET selec = "SELECT a.idrow, a.tipo_gasto,CONCAT('(',a.ficha_emp,')',RTRIM(b.nom1_emp),' ',b.apell1_emp) as usuario, a.fecha, a.ncf, a.rnc, a.nombreproveedor, a.valor, a.itbis, 0 FROM cptb00014 a INNER JOIN adtb00003 b on a.ficha_emp = b.num_emp INNER JOIN seg0007 c on a.ficha_emp = c.sec_vend WHERE c.usuario = '",Usuarios ,"' AND a.estado IS NULL AND a.fecha BETWEEN '", rangoFechas.fech_ini USING "mm/dd/yyyy" ,"' AND '", rangoFechas.fech_fin USING "mm/dd/yyyy","'" DECLARE buscar2 CURSOR FROM SELEC LET idx = 1 FOREACH buscar2 INTO main_array[idx].* LET idx = idx + 1 END FOREACH LET selec = "SELECT a.idrow, a.tipo_gasto,CONCAT('(',a.ficha_emp,')',RTRIM(b.nom1_emp),' ',b.apell1_emp) as usuario, a.fecha, a.ncf, a.rnc, a.nombreproveedor, a.valor, a.itbis, autorizado_por FROM cptb00014 a inner join adtb00003 b on a.ficha_emp = b.num_emp INNER JOIN seg0007 c on a.ficha_emp = c.sec_vend WHERE c.usuario = '",Usuarios , "' AND a.estado = 1 AND a.fecha BETWEEN '", rangoFechas.fech_ini USING "mm/dd/yyyy", "' AND '", rangoFechas.fech_fin USING "mm/dd/yyyy","'" DECLARE buscar3 CURSOR FROM selec LET idx = 1 FOREACH buscar3 INTO autorizados_array[idx].* LET idx = idx + 1 END FOREACH END IF END FUNCTION FUNCTION save_data() DEFINE i INT TRY BEGIN WORK FOR i = 1 TO main_array.getLength() IF main_array[i].autorizado AND main_array[i].rnc IS NOT NULL THEN UPDATE cptb00014 SET estado = 1, autorizado_por = usuarios WHERE idrow = main_array[i].idrow END IF END FOR COMMIT WORK LET numero_msg = 13 CALL msg(numero_msg) CATCH ROLLBACK WORK LET numero_msg = 1663 CALL msg(numero_msg) END TRY END FUNCTION