147 lines
4.0 KiB
Plaintext
147 lines
4.0 KiB
Plaintext
IMPORT util
|
|
IMPORT security
|
|
|
|
FUNCTION gestion_gastos(pdata)
|
|
|
|
DEFINE i SMALLINT
|
|
DEFINE pdata STRING
|
|
|
|
DEFINE data RECORD
|
|
generales RECORD
|
|
usuario, clave VARCHAR(50)
|
|
END RECORD,
|
|
detalle DYNAMIC ARRAY OF RECORD
|
|
tipo_gasto VARCHAR(100),
|
|
fecha DATE,
|
|
ncf STRING,
|
|
rnc STRING,
|
|
nombreproveedor VARCHAR(100),
|
|
valor NUMERIC(18,2),
|
|
itbis NUMERIC(18,2),
|
|
documento BYTE,
|
|
fech_crea DATE
|
|
END RECORD,
|
|
mensajes RECORD
|
|
cod_msg INT,
|
|
descripcion STRING
|
|
END RECORD
|
|
END RECORD
|
|
|
|
DEFINE raw_data RECORD
|
|
generales RECORD
|
|
usuario, clave VARCHAR(50)
|
|
END RECORD,
|
|
detalle DYNAMIC ARRAY OF RECORD
|
|
tipo_gasto VARCHAR(100),
|
|
fecha DATE,
|
|
ncf STRING,
|
|
rnc STRING,
|
|
nombreproveedor VARCHAR(100),
|
|
valor NUMERIC(18,2),
|
|
itbis NUMERIC(18,2),
|
|
documento STRING, -- base64 aquí
|
|
fech_crea DATE
|
|
END RECORD,
|
|
mensajes RECORD
|
|
cod_msg INT,
|
|
descripcion STRING
|
|
END RECORD
|
|
END RECORD
|
|
|
|
DEFINE r_out RECORD
|
|
orden INT,
|
|
mensaje_out STRING,
|
|
cod_msg INT
|
|
END RECORD
|
|
|
|
DEFINE numemp INT, query STRING
|
|
|
|
DISPLAY "VERSION #", 8
|
|
-- ? Parseamos el JSON en raw_data (con documento en base64 como STRING)
|
|
CALL util.JSON.parse(pdata, raw_data)
|
|
|
|
DISPLAY 'usuario: ', raw_data.generales.usuario
|
|
# DISPLAY 'clave: ', raw_data.generales.clave
|
|
|
|
CONNECT TO "marmotech" USER raw_data.generales.usuario USING raw_data.generales.clave
|
|
IF STATUS < 0 THEN
|
|
LET r_out.cod_msg = STATUS
|
|
LET r_out.orden = 0
|
|
LET r_out.mensaje_out = 'ERROR EN USUARIO CONECTANDOSE A LA BASE DE DATOS'
|
|
DISCONNECT CURRENT
|
|
RETURN util.JSON.stringify(r_out)
|
|
END IF
|
|
|
|
--Convertir de raw_data a data (conversión de base64 incluida)
|
|
FOR i = 1 TO raw_data.detalle.getLength()
|
|
LET data.detalle[i].tipo_gasto = raw_data.detalle[i].tipo_gasto
|
|
LET data.detalle[i].fecha = raw_data.detalle[i].fecha
|
|
LET data.detalle[i].ncf = raw_data.detalle[i].ncf
|
|
LET data.detalle[i].rnc = raw_data.detalle[i].rnc
|
|
LET data.detalle[i].nombreproveedor = raw_data.detalle[i].nombreproveedor
|
|
LET data.detalle[i].valor = raw_data.detalle[i].valor
|
|
LET data.detalle[i].itbis = raw_data.detalle[i].itbis
|
|
LET data.detalle[i].fech_crea = raw_data.detalle[i].fech_crea
|
|
|
|
IF raw_data.detalle[i].documento IS NOT NULL THEN
|
|
LOCATE data.detalle[i].documento IN MEMORY
|
|
CALL security.Base64.ToByte(raw_data.detalle[i].documento, data.detalle[i].documento)
|
|
END IF
|
|
END FOR
|
|
|
|
LET query = "SELECT num_emp FROM marmotech.dbo.seg0001 WHERE
|
|
usuario = ? AND status_t IS NULL"
|
|
|
|
PREPARE buscaEmpleado FROM query
|
|
EXECUTE buscaEmpleado INTO numemp USING raw_data.generales.usuario
|
|
|
|
IF data.detalle.getLength() > 0 THEN
|
|
FOR i = 1 TO data.detalle.getLength()
|
|
|
|
# DISPLAY "Bytes cargados de registro: ", LENGTH(data.detalle[i].documento)
|
|
|
|
INSERT INTO cptb00014 (
|
|
ficha_emp,
|
|
tipo_gasto,
|
|
fecha,
|
|
rnc,
|
|
nombreproveedor,
|
|
ncf,
|
|
itbis,
|
|
valor,
|
|
documento,
|
|
fech_crea
|
|
)
|
|
VALUES (
|
|
numemp,
|
|
data.detalle[i].tipo_gasto,
|
|
data.detalle[i].fecha,
|
|
data.detalle[i].rnc,
|
|
data.detalle[i].nombreproveedor,
|
|
data.detalle[i].ncf,
|
|
data.detalle[i].itbis,
|
|
data.detalle[i].valor,
|
|
data.detalle[i].documento,
|
|
data.detalle[i].fech_crea
|
|
)
|
|
END FOR
|
|
END IF
|
|
|
|
LET r_out.cod_msg = 13
|
|
LET r_out.mensaje_out = 'SINCRONIZACION EXITOSA'
|
|
DISCONNECT CURRENT
|
|
RETURN util.JSON.stringify(r_out)
|
|
|
|
END FUNCTION
|
|
{
|
|
FUNCTION b64_to_file(str_64, f_sal)
|
|
DEFINE str_64, f_sal, str_aux STRING
|
|
|
|
TRY
|
|
CALL security.Base64.SaveBinary(f_sal, str_64)
|
|
CATCH
|
|
LET str_aux = "No pude convertir el file Base64: " || STATUS
|
|
CALL fgl_winmessage("ERROR", str_aux, "stop")
|
|
END TRY
|
|
END FUNCTION
|
|
} |