Files
MBS/WEBSERVICES/REST/gestiongastos_add.4gl
T

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
}