Files

279 lines
7.9 KiB
Plaintext

{
-------------------------------------------------------------------------------
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