279 lines
7.9 KiB
Plaintext
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
|