Files
MBS/PROYECTO/otrodir/api_test.4gl
T

1338 lines
46 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : MaintainX_API
OBJETIVO : Código que ejecuta los POST, GET Y PUT ENTRE MAINTAINX
Y GÉNERO
PROGRAMADOR : Ing. Elvis García.
FECHA REALIZACION : Agosto 15, 2024.
------------------------------------------------------------------
}
OPTIONS
SHORT CIRCUIT
IMPORT com
IMPORT util
SCHEMA smarmotech
DEFINE url, token STRING
--DEFINE result STRING
DEFINE http_req com.HTTPRequest
DEFINE http_resp com.HTTPResponse
DEFINE json_response STRING
DEFINE arr_POST RECORD --Para crear un activo en maintainX
name VARCHAR(100),
description VARCHAR(200),
barcode VARCHAR(100),
criticalityId INTEGER,
parentId INTEGER,
locationId INTEGER,
teamIds DYNAMIC ARRAY OF INTEGER,
assetTypes DYNAMIC ARRAY OF STRING,
extraFields RECORD
Model VARCHAR(100),
ID_Transacciones INT,
Codigo_ABR VARCHAR(100),
ID_Sistema_Contable STRING,
Year STRING,
Manufacturer STRING,
Serial_Number STRING
END RECORD,
vendorIds DYNAMIC ARRAY OF INTEGER
END RECORD
DEFINE repuestoAPI RECORD --Repuestos record
name VARCHAR(100),
description VARCHAR(200),
area VARCHAR(100),
unitCost INTEGER,
availableQuantity INTEGER,
minimumQuantity INTEGER,
barcode VARCHAR(100),
locationId INTEGER,
partTypes DYNAMIC ARRAY OF STRING,
assetIds DYNAMIC ARRAY OF INTEGER,
teamIds DYNAMIC ARRAY OF INTEGER,
extraFields RECORD
exercitation_5c VARCHAR(100),
esse1 VARCHAR(100),
anim_13 VARCHAR(100)
END RECORD,
vendorIds DYNAMIC ARRAY OF INTEGER
END RECORD
DEFINE answer RECORD
id INT
END RECORD
DEFINE response, path STRING, path_option INT
DEFINE cmd STRING
{MAIN
CALL ARG_VAL(1) RETURNING usuario
CALL ARG_VAL(2) RETURNING clave
CONNECT TO "smarmotech" USER usuario USING clave
CALL add_repuestos() --AGREGAR REPUESTOS DE GENERO A MAINTAINX
--CALL delete_repuestos() --ELIMINAR REPUESTOS
END MAIN}
FUNCTION ApiMaintainC(metodo, idApi, Data, usuario) --FUNCION PARA COMPRAS
DEFINE data RECORD
area_sp VARCHAR(10),
ciu_sp VARCHAR(30),
cod_pais VARCHAR(3),
cod_sp SMALLINT,
cod_sp_sec SMALLINT,
cont_sp VARCHAR(30),
contactID INTEGER,
dir_sp VARCHAR(60),
email VARCHAR(60),
fax_sp VARCHAR(25),
fech_crea DATETIME YEAR TO FRACTION,
fech_mod DATETIME YEAR TO FRACTION,
id_maintainx INTEGER,
nom_sp VARCHAR(41),
status_t VARCHAR(1),
tel_sp VARCHAR(25),
term_sp SMALLINT,
us_crea VARCHAR(50),
us_mod VARCHAR(50)
END RECORD,
usuario STRING
DEFINE response RECORD
name STRING,
description STRING,
phoneNumber STRING
END RECORD
DEFINE
metodo STRING,
idAPi,answer STRING,
answer2, i INTEGER
DEFINE post_response RECORD
id INTEGER
END RECORD
DEFINE post_workorder RECORD
partsUsed DYNAMIC ARRAY OF RECORD
partId INT,
quantityUsed DECIMAL
END RECORD
END RECORD
DEFINE container STRING
DEFINE SplitID base.StringTokenizer
INITIALIZE response TO NULL
CALL select_path()
IF metodo = 'CHECK' OR metodo = 'PATCH_WORKORDER' THEN
LET url = "https://api.getmaintainx.com/v1/workorders"
ELSE
LET url = "https://api.getmaintainx.com/v1/vendors"
END IF
LET token =
"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjUyNDIwMCwib3JnYW5pemF0aW9uSWQiOjIwNDA2MCwiaWF0IjoxNzIyNjAzOTQ3LCJzdWIiOiJSRVNUX0FQSV9BVVRIIiwianRpIjoiYTc3NjQzY2EtYWEzNy00MzQ0LWJlMmEtYTA2ZTM4OTVjZjA0In0.EmlDZmbojh0MW_We_GX829zMNKIsn4W8Q6qK60xfWFw"
IF idApi IS NOT NULL THEN
LET url = url || '/' || idApi
END IF
IF metodo = 'CHECK' THEN
LET url = url,"?useSequentialId=true"
END IF
DISPLAY url
LET http_req = com.HTTPRequest.Create(url)
CALL http_req.setConnectionTimeout(10)
CALL http_req.setCharset("UTF-8")
CALL http_req.setHeader("Authorization", token)
CALL http_req.setHeader("Content-Type", "application/json")
CALL http_req.setHeader("accept", "application/json")
CASE metodo
WHEN 'CHECK'
INITIALIZE answer2 TO NULL
TRY
CALL http_req.setMethod('GET')
CALL http_req.doRequest()
LET http_resp = http_req.getResponse()
IF http_resp.getStatusCode() != 200 THEN
#CALL show_sync_err(http_resp.getStatusDescription())
DISPLAY "ERROR EN LA CONSULTA"
ELSE
LET json_response = http_resp.getTextResponse()
LET SplitID = base.StringTokenizer.create(json_response, ":,")
LET i = 0
WHILE SplitId.hasMoreTokens()
LET container = SplitID.nextToken()
LET i = i + 1
IF i = 3 THEN
LET answer = container
EXIT WHILE
END IF
END WHILE
DISPLAY answer
END IF
CATCH
DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)",
STATUS, SQLCA.SQLERRM)
END TRY
EXIT CASE
WHEN 'PATCH_WORKORDER'
INITIALIZE ANSWER2 TO NULL
IF data.contactID < 0 THEN
LET data.contactID = data.contactID * -1
END IF
LET post_workorder.partsUsed[1].quantityUsed = data.contactID
LET post_workorder.partsUsed[1].partId = data.id_maintainx
TRY
LET json_response = util.JSON.stringify(post_workorder)
DISPLAY json_response
IF path_option = 1 THEN
# SERVIDOR DE DESARROLLO
LET path = 'F:/MARMOTECHC/copia/',usuario CLIPPED,"-",CURRENT YEAR TO DAY CLIPPED,".json"
ELSE
# SERVIDOR DE PRODUCCION
LET path = 'E:/MARMOTECHC/MX_Api_Managment/',usuario CLIPPED,"-",CURRENT YEAR TO DAY CLIPPED,".json"
END IF
LET cmd = 'echo ',json_response,' > ', path
RUN cmd
IF path_option = 1 THEN
# SERVIDOR DE DESARROLLO
LET cmd = 'C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy Bypass -File "F:/MARMOTECHC/copia/patch_request.ps1" -Path ',path,' -apiUrl "', url, '"'
ELSE
# SERVIDOR DE PRODUCCION
LET cmd = 'C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy Bypass -File "E:/MARMOTECHC/MX_Api_Managment/patch_request.ps1" -Path ',path,' -apiUrl "', url, '"'
END IF
RUN cmd
LET answer = 1
CATCH
DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)",
STATUS, SQLCA.SQLERRM)
END TRY
EXIT CASE
WHEN 'POST'
INITIALIZE answer2 TO NULL
TRY
LET response.name = data.nom_sp
LET response.description =
"CODIGO: "
|| data.cod_sp
|| "-"
|| data.cod_sp_sec
|| ", DIRECCION: "
|| data.dir_sp
{ IF data.tel_sp IS NOT NULL THEN
LET response.phoneNumbers[1] = data.tel_sp
END IF }
LET json_response = util.JSON.stringify(response)
DISPLAY json_response
CALL http_req.setMethod(metodo)
CALL http_req.doTextRequest(json_response)
LET http_resp = http_req.getResponse()
IF http_resp.getStatusCode() != 201 THEN
#CALL show_sync_err(http_resp.getStatusDescription())
ELSE
LET json_response = http_resp.getTextResponse()
CALL util.JSON.parse(json_response, post_response)
LET answer = post_response.id
IF answer IS NOT NULL AND answer != 0 THEN
IF data.cont_sp IS NOT NULL OR data.tel_sp IS NOT NULL THEN
LET url = url || '/' || answer , '/contacts'
DISPLAY url
LET http_req = com.HTTPRequest.Create(url)
CALL http_req.setConnectionTimeout(10)
CALL http_req.setCharset("UTF-8")
CALL http_req.setHeader("Authorization", token)
CALL http_req.setHeader("Content-Type", "application/json")
CALL http_req.setHeader("accept", "application/json")
CALL http_req.setMethod(metodo)
INITIALIZE response, json_response TO NULL
LET response.name = data.cont_sp
IF data.tel_sp IS NOT NULL THEN
LET response.phoneNumber = data.tel_sp
END IF
LET json_response = util.JSON.stringify(response)
DISPLAY json_response
CALL http_req.doTextRequest(json_response)
LET http_resp = http_req.getResponse()
IF http_resp.getStatusCode() != 201 THEN
#CALL show_sync_err(http_resp.getStatusDescription())
INITIALIZE answer TO NULL
ELSE
LET json_response = http_resp.getTextResponse()
CALL util.JSON.parse(json_response, post_response)
LET answer2 = post_response.id
END IF
ELSE
LET answer2 = 0
END IF
END IF
END IF
CATCH
DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)",
STATUS, SQLCA.SQLERRM)
END TRY
EXIT CASE
WHEN 'PATCH'
INITIALIZE answer2 TO NULL
TRY
INITIALIZE answer TO NULL
LET response.name = data.nom_sp
LET response.description =
"CODIGO: "
|| data.cod_sp
|| "-"
|| data.cod_sp_sec
|| ", DIRECCION: "
|| data.dir_sp
LET json_response = util.JSON.stringify(response)
DISPLAY json_response
IF path_option = 1 THEN
# SERVIDOR DE DESARROLLO
LET path = 'F:/MARMOTECHC/copia/',usuario CLIPPED,"-",CURRENT YEAR TO DAY CLIPPED,".json"
ELSE
# SERVIDOR DE PRODUCCION
LET path = 'E:/MARMOTECHC/MX_Api_Managment/',usuario CLIPPED,"-",CURRENT YEAR TO DAY CLIPPED,".json"
END IF
LET cmd = 'echo ',json_response,' > ', path
RUN cmd
IF path_option = 1 THEN
# SERVIDOR DE DESARROLLO
LET cmd = 'C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy Bypass -File "F:/MARMOTECHC/copia/patch_request.ps1" -Path ',path,' -apiUrl "', url, '"'
ELSE
# SERVIDOR DE PRODUCCION
LET cmd = 'C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy Bypass -File "E:/MARMOTECHC/MX_Api_Managment/patch_request.ps1" -Path ',path,' -apiUrl "', url, '"'
END IF
RUN cmd
LET answer = 0
IF data.contactID IS NOT NULL THEN
LET url = url || '/contacts/', data.contactID
DISPLAY url
INITIALIZE response, json_response TO NULL
LET response.name = data.cont_sp
IF data.tel_sp IS NOT NULL THEN
LET response.phoneNumber = data.tel_sp
END IF
LET json_response = util.JSON.stringify(response)
DISPLAY json_response
LET cmd = 'echo ',json_response,' > ', path
RUN cmd
# SERVIDOR DE DESARROLLO
#LET cmd = 'C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy Bypass -File "F:/MARMOTECHC/copia/patch_request.ps1" -Path ',path,' -apiUrl "', url, '"'
# SERVIDOR DE PRODUCCION
LET cmd = 'C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy Bypass -File "E:/MARMOTECHC/MX_Api_Managment/patch_request.ps1" -Path ',path,' -apiUrl "', url, '"'
RUN cmd
LET answer = answer + 1
ELSE
LET answer = 1
END IF
CATCH
DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)",
STATUS, SQLCA.SQLERRM)
END TRY
EXIT CASE
WHEN 'PATCH_WORKORDER'
EXIT CASE
WHEN 'DELETE'
INITIALIZE answer2 TO NULL
TRY
CALL http_req.setMethod(metodo)
CALL http_req.doRequest()
LET http_resp = http_req.getResponse()
IF http_resp.getStatusCode() != 204
AND http_resp.getStatusCode() != 404 THEN
#CALL show_sync_err(http_resp.getStatusDescription())
ELSE
DISPLAY "Se ha dado de baja el activo con exito"
LET answer = 1
END IF
CATCH
DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)",
STATUS, SQLCA.SQLERRM)
END TRY
EXIT CASE
OTHERWISE
DISPLAY "Nothing happened..."
EXIT CASE
END CASE
IF answer2 IS NOT NULL THEN
DISPLAY answer2
RETURN answer, answer2
ELSE
RETURN answer
END IF
END FUNCTION
FUNCTION ApiMaintainD(metodo, idApi, Data, usuario) --FUNCION PARA DEPARTAMENTOS
DEFINE data RECORD LIKE adtb00001.*, usuario STRING
DEFINE response RECORD
name STRING,
description STRING,
extraFields RECORD
IDMTECH STRING
END RECORD
END RECORD
DEFINE
i INTEGER,
metodo STRING,
idAPi STRING,
answer INTEGER
DEFINE post_response RECORD
id INTEGER
END RECORD
INITIALIZE response TO NULL
CALL select_path()
LET url = "https://api.getmaintainx.com/v1/locations"
LET token =
"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjUyNDIwMCwib3JnYW5pemF0aW9uSWQiOjIwNDA2MCwiaWF0IjoxNzIyNjAzOTQ3LCJzdWIiOiJSRVNUX0FQSV9BVVRIIiwianRpIjoiYTc3NjQzY2EtYWEzNy00MzQ0LWJlMmEtYTA2ZTM4OTVjZjA0In0.EmlDZmbojh0MW_We_GX829zMNKIsn4W8Q6qK60xfWFw"
IF idApi IS NOT NULL THEN
LET url = url || '/' || idApi
END IF
LET http_req = com.HTTPRequest.Create(url)
CALL http_req.setConnectionTimeout(10)
CALL http_req.setCharset("UTF-8")
CALL http_req.setHeader("Authorization", token)
CALL http_req.setHeader("Content-Type", "application/json")
CALL http_req.setHeader("accept", "application/json")
CASE metodo{
WHEN 'CHECK'
TRY
CALL http_req.setMethod('GET')
CALL http_req.doRequest()
LET http_resp = http_req.getResponse()
IF http_resp.getStatusCode() != 200 THEN
CALL show_sync_err(http_resp.getStatusDescription())
ELSE
LET json_response = http_resp.getTextResponse()
LET answer = 1
END IF
CATCH
DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)",
STATUS, SQLCA.SQLERRM)
END TRY
EXIT CASE}
WHEN 'POST'
TRY
LET response.name = data.nom_dpto CLIPPED
LET response.extraFields.IDMTECH = data.departamento CLIPPED
LET json_response = util.JSON.stringify(response)
DISPLAY json_response
CALL http_req.setMethod(metodo)
CALL http_req.doTextRequest(json_response)
LET http_resp = http_req.getResponse()
IF http_resp.getStatusCode() != 200 THEN
#CALL show_sync_err(http_resp.getStatusDescription())
ELSE
LET json_response = http_resp.getTextResponse()
CALL util.JSON.parse(json_response, post_response)
LET answer = post_response.id
END IF
CATCH
DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)",
STATUS, SQLCA.SQLERRM)
END TRY
EXIT CASE
WHEN 'PATCH'
TRY
LET response.name = data.nom_dpto
LET response.extraFields.IDMTECH = data.departamento
LET json_response = util.JSON.stringify(response)
DISPLAY json_response
IF path_option = 1 THEN
# SERVIDOR DE DESARROLLO
LET path = 'F:/MARMOTECHC/copia/',usuario CLIPPED,"-",CURRENT YEAR TO DAY CLIPPED,".json"
ELSE
# SERVIDOR DE PRODUCCION
LET path = 'E:/MARMOTECHC/MX_Api_Managment/',usuario CLIPPED,"-",CURRENT YEAR TO DAY CLIPPED,".json"
END IF
LET cmd = 'echo ',json_response,' > ', path
RUN cmd
IF path_option = 1 THEN
# SERVIDOR DE DESARROLLO
LET cmd = 'C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy Bypass -File "F:/MARMOTECHC/copia/patch_request.ps1" -Path ',path,' -apiUrl "', url, '"'
ELSE
# SERVIDOR DE PRODUCCION
LET cmd = 'C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy Bypass -File "E:/MARMOTECHC/MX_Api_Managment/patch_request.ps1" -Path ',path,' -apiUrl "', url, '"'
END IF
RUN cmd
LET answer = 1
CATCH
DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)",
STATUS, SQLCA.SQLERRM)
END TRY
EXIT CASE
WHEN 'DELETE'
TRY
CALL http_req.setMethod(metodo)
CALL http_req.doRequest()
LET http_resp = http_req.getResponse()
IF http_resp.getStatusCode() != 204
AND http_resp.getStatusCode() != 404 THEN
#CALL show_sync_err(http_resp.getStatusDescription())
ELSE
DISPLAY "Se ha dado de baja el activo con exito"
LET answer = 1
END IF
CATCH
DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)",
STATUS, SQLCA.SQLERRM)
END TRY
EXIT CASE
OTHERWISE
DISPLAY "Nothing happened..."
EXIT CASE
END CASE
RETURN answer
END FUNCTION
FUNCTION ApiMaintainR(metodo, idApi, repuestos, usuario) --FUNCION PARA REPUESTOS
DEFINE repuestos RECORD LIKE irtb00002.*
DEFINE
i INTEGER,
metodo STRING,
idAPi STRING,
answer INT,
usuario STRING
DEFINE post_response RECORD
id INTEGER
END RECORD
INITIALIZE repuestoAPI TO NULL
CALL select_path()
LET url = "https://api.getmaintainx.com/v1/parts"
LET token =
"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjUyNDIwMCwib3JnYW5pemF0aW9uSWQiOjIwNDA2MCwiaWF0IjoxNzIyNjAzOTQ3LCJzdWIiOiJSRVNUX0FQSV9BVVRIIiwianRpIjoiYTc3NjQzY2EtYWEzNy00MzQ0LWJlMmEtYTA2ZTM4OTVjZjA0In0.EmlDZmbojh0MW_We_GX829zMNKIsn4W8Q6qK60xfWFw"
IF idApi IS NOT NULL THEN
LET url = url || '/' || idApi
END IF
LET http_req = com.HTTPRequest.Create(url)
CALL http_req.setConnectionTimeout(10)
CALL http_req.setCharset("UTF-8")
CALL http_req.setHeader("Authorization", token)
CALL http_req.setHeader("Content-Type", "application/json")
CALL http_req.setHeader("accept", "application/json")
INITIALIZE answer TO NULL
CASE metodo
WHEN 'GET'
TRY
CALL http_req.setMethod(metodo)
CALL http_req.doRequest()
LET http_resp = http_req.getResponse()
IF http_resp.getStatusCode() != 200 THEN
#CALL show_sync_err(http_resp.getStatusDescription())
ELSE
LET json_response = http_resp.getTextResponse()
END IF
CATCH
CALL fgl_winmessage(
"CATCH ERROR MESSAGE",
"HTTP request error: STATUS="
|| STATUS
|| " ("
|| SQLCA.SQLERRM
|| ")",
"stop")
END TRY
EXIT CASE
WHEN 'POST'
TRY
LET repuestoAPI.name =
repuestos.cod_n
|| "-"
|| repuestos.cod_grupo
|| "-"
|| repuestos.cod_tipo
|| "-"
|| repuestos.cod_sec
|| " "
|| repuestos.descrip_esp CLIPPED
LET repuestoAPI.description = repuestos.descrip_esp CLIPPED
IF repuestos.existencia IS NOT NULL THEN
LET repuestoAPI.availableQuantity = repuestos.existencia
END IF
IF repuestos.exist_min < 0 THEN
LET repuestos.exist_min = repuestos.exist_min * -1
END IF
LET repuestoAPI.minimumQuantity = repuestos.exist_min
--LET repuestoAPI.assetIds[1] = 6210945
DISPLAY repuestos.cod_sp
IF repuestos.cod_sp IS NOT NULL AND repuestos.cod_sp_Sec IS NOT NULL
AND repuestos.cod_sp != 0 THEN
SELECT id_maintainx INTO repuestoAPI.vendorIds[1] FROM cotb00001
WHERE cod_sp = repuestos.cod_sp AND cod_sp_sec = repuestos.cod_sp_sec
AND status_t IS NULL
WHENEVER NOT FOUND CONTINUE
END IF
IF repuestos.descrip_ing IS NOT NULL THEN
LET repuestoAPI.unitCost = repuestos.descrip_ing
LET repuestoAPI.unitCost = repuestoAPI.unitCost * 100
END IF
LET json_response = util.JSON.stringify(repuestoAPI)
DISPLAY json_response
CALL http_req.setMethod(metodo)
CALL http_req.doTextRequest(json_response)
LET http_resp = http_req.getResponse()
IF http_resp.getStatusCode() != 201 THEN
#CALL show_sync_err(http_resp.getStatusDescription())
DISPLAY 'ERROR STATUS CODE = 201'
ELSE
LET json_response = http_resp.getTextResponse()
CALL util.JSON.parse(json_response, post_response)
DISPLAY SFMT("Se ha creado el activo con ID: %1",
post_response.id)
LET answer = post_response.id
END IF
CATCH
DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)",
STATUS, SQLCA.SQLERRM)
DISPLAY "STATUS = ", STATUS
END TRY
EXIT CASE
WHEN 'PATCH'
TRY
LET repuestoAPI.name =
repuestos.cod_n
|| "-"
|| repuestos.cod_grupo
|| "-"
|| repuestos.cod_tipo
|| "-"
|| repuestos.cod_sec
|| " "
|| repuestos.descrip_esp
LET repuestoAPI.description = repuestos.descrip_esp
IF repuestos.existencia IS NOT NULL THEN
LET repuestoAPI.availableQuantity = repuestos.existencia
END IF
IF repuestos.exist_min < 0 THEN
LET repuestos.exist_min = repuestos.exist_min * -1
END IF
LET repuestoAPI.minimumQuantity = repuestos.exist_min
--LET repuestoAPI.assetIds[1] = 6210945
DISPLAY repuestos.cod_sp
IF repuestos.cod_sp IS NOT NULL AND repuestos.cod_sp_Sec IS NOT NULL
AND repuestos.cod_sp != 0 THEN
SELECT id_maintainx INTO repuestoAPI.vendorIds[1] FROM cotb00001
WHERE cod_sp = repuestos.cod_sp AND cod_sp_sec = repuestos.cod_sp_sec
AND status_t IS NULL
WHENEVER NOT FOUND CONTINUE
END IF
IF repuestos.descrip_ing IS NOT NULL THEN
LET repuestoAPI.unitCost = repuestos.descrip_ing
LET repuestoAPI.unitCost = repuestoAPI.unitCost * 100
END IF
LET json_response = util.JSON.stringify(repuestoAPI)
DISPLAY json_response
IF path_option = 1 THEN
# SERVIDOR DE DESARROLLO
LET path = 'F:/MARMOTECHC/copia/',usuario CLIPPED,"-",CURRENT YEAR TO DAY CLIPPED,".json"
ELSE
# SERVIDOR DE PRODUCCION
LET path = 'E:/MARMOTECHC/MX_Api_Managment/',usuario CLIPPED,"-",CURRENT YEAR TO DAY CLIPPED,".json"
END IF
LET cmd = 'echo ',json_response,' > ', path
RUN cmd
IF path_option = 1 THEN
# SERVIDOR DE DESARROLLO
LET cmd = 'C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy Bypass -File "F:/MARMOTECHC/copia/patch_request.ps1" -Path ',path,' -apiUrl "', url, '"'
ELSE
# SERVIDOR DE PRODUCCION
LET cmd = 'C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy Bypass -File "E:/MARMOTECHC/MX_Api_Managment/patch_request.ps1" -Path ',path,' -apiUrl "', url, '"'
END IF
RUN cmd RETURNING response
DISPLAY response
LET answer = 1
CATCH
CALL fgl_winmessage(
"CATCH ERROR MESSAGE",
"HTTP request error: STATUS="
|| STATUS
|| " ("
|| SQLCA.SQLERRM
|| ")",
"stop")
END TRY
EXIT CASE
WHEN 'DELETE'
TRY
CALL http_req.setMethod(metodo)
CALL http_req.doRequest()
LET http_resp = http_req.getResponse()
IF http_resp.getStatusCode() != 204
AND http_resp.getStatusCode() != 404 THEN
#CALL show_sync_err(http_resp.getStatusDescription())
ELSE
DISPLAY "Se ha dado de baja el activo con exito"
LET answer = 1
END IF
CATCH
CALL fgl_winmessage(
"CATCH ERROR MESSAGE",
"HTTP request error: STATUS="
|| STATUS
|| " ("
|| SQLCA.SQLERRM
|| ")",
"stop")
END TRY
EXIT CASE
OTHERWISE
DISPLAY "Nothing happened..."
EXIT CASE
END CASE
RETURN answer
END FUNCTION
FUNCTION ApiMaintainX(metodo, idApi, Data, maquina, extraCampos, usuario) --FUNCION PARA ACTIVOS
DEFINE Data RECORD
codigo INT,
descripcion1 STRING,
cuenta_no CHAR(8),
cta_depr CHAR(8),
cta_gasto CHAR(8),
departamento SMALLINT,
fech_compra DATE,
duracion INT,
fech_elim DATE,
referencia STRING,
fabricante STRING,
status_t CHAR(1),
us_crea STRING,
fech_crea DATE,
us_mod STRING,
fech_mod DATE,
sucid INT,
id_MaintainX INT,
id_maquina INT,
desc_maquina STRING
END RECORD
DEFINE maquina RECORD
unidad_med CHAR(10),
modelo STRING,
serie STRING,
departamento STRING,
codigo_externo STRING
END RECORD
DEFINE extraCampos RECORD
cod_sp INT,
cod_sp_sec INT,
nom_prov STRING,
tipo_Activo STRING,
activo_padre INT,
nom_activoPadre STRING
END RECORD
DEFINE depto_desc STRING
DEFINE
i INTEGER,
metodo STRING,
idAPi,
answer INTEGER,
usuario STRING
DEFINE post_response RECORD
id INTEGER
END RECORD
CALL select_path()
INITIALIZE arr_post TO NULL
LET url = "https://api.getmaintainx.com/v1/assets"
LET token =
"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjUyNDIwMCwib3JnYW5pemF0aW9uSWQiOjIwNDA2MCwiaWF0IjoxNzIyNjAzOTQ3LCJzdWIiOiJSRVNUX0FQSV9BVVRIIiwianRpIjoiYTc3NjQzY2EtYWEzNy00MzQ0LWJlMmEtYTA2ZTM4OTVjZjA0In0.EmlDZmbojh0MW_We_GX829zMNKIsn4W8Q6qK60xfWFw"
IF idApi IS NOT NULL THEN
LET url = url || '/' || idApi
END IF
LET http_req = com.HTTPRequest.Create(url)
CALL http_req.setConnectionTimeout(10)
CALL http_req.setCharset("UTF-8")
CALL http_req.setHeader("Authorization", token)
CALL http_req.setHeader("Content-Type", "application/json")
CALL http_req.setHeader("accept", "application/json")
INITIALIZE answer TO NULL
CASE metodo
WHEN 'GET'
TRY
CALL http_req.setMethod(metodo)
CALL http_req.doRequest()
LET http_resp = http_req.getResponse()
IF http_resp.getStatusCode() != 200 THEN
#CALL show_sync_err(http_resp.getStatusDescription())
ELSE
LET json_response = http_resp.getTextResponse()
END IF
CATCH
DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)",
STATUS, SQLCA.SQLERRM)
END TRY
EXIT CASE
WHEN 'POST'
TRY
LET arr_POST.name = data.descripcion1 CLIPPED
LET arr_POST.description = data.codigo CLIPPED || " - " || data.descripcion1 CLIPPED
LET arr_POST.barcode = data.codigo
{ LET arr_POST.criticalityId = NULL}
SELECT id_maintainx INTO arr_Post.parentId FROM actb00001
WHERE codigo = extraCampos.activo_padre AND status_t IS NULL
SELECT a.id_maintainx
INTO arr_POST.locationId
FROM adtb00001 a
WHERE a.departamento = data.departamento
#FOR i = 1 TO 1
LET arr_POST.assetTypes[1] = extraCampos.tipo_Activo
# END FOR
LET arr_POST.extraFields.model = data.descripcion1 CLIPPED
LET arr_POST.extraFields.ID_Transacciones = NULL
LET arr_POST.extraFields.codigo_ABR = maquina.codigo_externo
LET arr_POST.extraFields.ID_Sistema_Contable = data.codigo
LET arr_post.extraFields.YEAR = YEAR(TODAY)
LET arr_POST.extraFields.Manufacturer = data.fabricante
LET arr_POST.extraFields.Serial_Number = maquina.serie
# FOR i = 1 TO 1
SELECT id_maintainx INTO arr_POST.vendorIds[1] FROM cotb00001
WHERE cod_sp = extraCampos.cod_sp AND cod_sp_sec = extraCampos.cod_sp_sec
#END FOR
LET json_response = util.JSON.stringify(arr_POST)
DISPLAY json_response
CALL http_req.setMethod(metodo)
CALL http_req.doTextRequest(json_response)
LET http_resp = http_req.getResponse()
IF http_resp.getStatusCode() != 201 THEN
#CALL show_sync_err(http_resp.getStatusDescription())
ELSE
LET json_response = http_resp.getTextResponse()
CALL util.JSON.parse(json_response, post_response)
DISPLAY SFMT("Se ha creado el activo con ID: %1",
post_response.id)
LET answer = post_response.id
END IF
CATCH
DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)",
STATUS, SQLCA.SQLERRM)
END TRY
EXIT CASE
WHEN 'PATCH'
TRY
LET arr_POST.name = data.descripcion1 CLIPPED
LET arr_POST.description = data.codigo CLIPPED|| " - " || data.descripcion1 CLIPPED
LET arr_POST.barcode = data.codigo
{ LET arr_POST.criticalityId = NULL}
SELECT id_maintainx INTO arr_Post.parentId FROM actb00001
WHERE codigo = extraCampos.activo_padre AND status_t IS NULL
SELECT a.id_maintainx
INTO arr_POST.locationId
FROM adtb00001 a
WHERE a.departamento = data.departamento
#FOR i = 1 TO 1
LET arr_POST.assetTypes[1] = extraCampos.tipo_Activo
# END FOR
LET arr_POST.extraFields.model = data.descripcion1 CLIPPED
LET arr_POST.extraFields.ID_Transacciones = NULL
LET arr_POST.extraFields.codigo_ABR = maquina.codigo_externo
LET arr_POST.extraFields.ID_Sistema_Contable = data.codigo
LET arr_post.extraFields.YEAR = YEAR(TODAY)
LET arr_POST.extraFields.Manufacturer = data.fabricante
LET arr_POST.extraFields.Serial_Number = maquina.serie
# FOR i = 1 TO 1
SELECT id_maintainx INTO arr_POST.vendorIds[1] FROM cotb00001
WHERE cod_sp = extraCampos.cod_sp AND cod_sp_sec = extraCampos.cod_sp_sec
#END FOR
LET json_response = util.JSON.stringify(arr_POST)
DISPLAY json_response
IF path_option = 1 THEN
# SERVIDOR DE DESARROLLO
LET path = 'F:/MARMOTECHC/copia/',usuario CLIPPED,"-",CURRENT YEAR TO DAY CLIPPED,".json"
ELSE
# SERVIDOR DE PRODUCCION
LET path = 'E:/MARMOTECHC/MX_Api_Managment/',usuario CLIPPED,"-",CURRENT YEAR TO DAY CLIPPED,".json"
END IF
LET cmd = 'echo ',json_response,' > ', path
RUN cmd
IF path_option = 1 THEN
# SERVIDOR DE DESARROLLO
LET cmd = 'C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy Bypass -File "F:/MARMOTECHC/copia/patch_request.ps1" -Path ',path,' -apiUrl "', url, '"'
ELSE
# SERVIDOR DE PRODUCCION
LET cmd = 'C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy Bypass -File "E:/MARMOTECHC/MX_Api_Managment/patch_request.ps1" -Path ',path,' -apiUrl "', url, '"'
END IF
RUN cmd RETURNING response
LET answer = 1
CATCH
DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)",
STATUS, SQLCA.SQLERRM)
END TRY
EXIT CASE
WHEN 'DELETE'
TRY
CALL http_req.setMethod(metodo)
CALL http_req.doRequest()
LET http_resp = http_req.getResponse()
IF http_resp.getStatusCode() != 204
AND http_resp.getStatusCode() != 404 THEN
#CALL show_sync_err(http_resp.getStatusDescription())
ELSE
DISPLAY "Se ha dado de baja el activo con exito"
LET answer = 1
END IF
CATCH
DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)",
STATUS, SQLCA.SQLERRM)
END TRY
EXIT CASE
OTHERWISE
DISPLAY "Nothing happened..."
EXIT CASE
END CASE
RETURN answer
END FUNCTION
FUNCTION add_repuestos()
--ID donde iran todos los repuestos: 6210945
DEFINE
repuestos DYNAMIC ARRAY OF RECORD
cod_n INT,
cod_grupo INT,
cod_tipo INT,
cod_sec INT,
descrip_esp STRING,
{descrip_eng STRING,
unidad_med VARCHAR(10),}
existencia NUMERIC(10, 5),
existencia_min NUMERIC(10, 5),
{dia_llegada SMALLINT,
categoria CHAR(1),
status_t CHAR(1),
us_crea CHAR(50),
fech_crea DATETIME YEAR TO FRACTION,
us_mod CHAR(50),
fech_mod DATETIME YEAR TO FRACTION,
codid INT,
cuenta CHAR(14),}
id_maintainX INT,
enviarMX CHAR(5)
END RECORD,
i , j INT,
flag BOOLEAN
DEFINE maquina DYNAMIC ARRAY OF RECORD
codigo INT,
nombre STRING
END RECORD
LET url = "https://api.getmaintainx.com/v1/parts"
LET token =
"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjUyNDIwMCwib3JnYW5pemF0aW9uSWQiOjIwNDA2MCwiaWF0IjoxNzIyNjAzOTQ3LCJzdWIiOiJSRVNUX0FQSV9BVVRIIiwianRpIjoiYTc3NjQzY2EtYWEzNy00MzQ0LWJlMmEtYTA2ZTM4OTVjZjA0In0.EmlDZmbojh0MW_We_GX829zMNKIsn4W8Q6qK60xfWFw"
LET http_req = com.HTTPRequest.Create(url)
CALL http_req.setConnectionTimeout(10)
CALL http_req.setCharset("UTF-8")
CALL http_req.setHeader("Authorization", token)
CALL http_req.setHeader("Content-Type", "application/json")
CALL http_req.setHeader("accept", "application/json")
CALL http_req.setMethod('POST')
DECLARE buscar CURSOR FOR
SELECT DISTINCT a.cod_n,
a.cod_grupo,
a.cod_Tipo,
a.cod_sec,
b.descrip_esp,
isnull(b.existencia, 0) AS existencia,
isnull(b.exist_min, 0) AS existencia_min
FROM irtb00006 a, irtb00002 b, irtb00009 c
WHERE a.cod_n = b.cod_n
AND a.cod_grupo = b.cod_Grupo
AND a.cod_Tipo = b.cod_tipo
AND a.cod_sec = b.cod_sec
AND a.maquina IS NOT NULL
AND a.maquina = c.codigo
AND a.status_t IS NULL
AND b.id_maintainX IS NULL
LET i = 1
FOREACH buscar INTO repuestos[i].*
INITIALIZE repuestoAPI TO null
LET repuestoAPI.name =
repuestos[i].cod_n
|| "-"
|| repuestos[i].cod_grupo
|| "-"
|| repuestos[i].cod_tipo
|| "-"
|| repuestos[i].cod_sec
|| " "
|| repuestos[i].descrip_esp
LET repuestoAPI.description = repuestos[i].descrip_esp
LET repuestoAPI.availableQuantity = repuestos[i].existencia
LET repuestoAPI.minimumQuantity = repuestos[i].existencia_min
LET repuestoAPI.assetIds[1] = 6210945
DECLARE buscar3 CURSOR FOR --BUSCANDO MAQUINAS DE ESTE REPUESTO
SELECT DISTINCT a.maquina, c.nombre
FROM irtb00006 a, irtb00002 b, irtb00009 c
WHERE a.cod_n = b.cod_n
AND a.cod_grupo = b.cod_Grupo
AND a.cod_Tipo = b.cod_tipo
AND a.cod_sec = b.cod_sec
AND a.maquina IS NOT NULL
AND a.maquina = c.codigo
AND a.status_t IS NULL
AND b.cod_n = repuestos[i].cod_n
AND b.cod_grupo = repuestos[i].cod_grupo
AND b.cod_tipo = repuestos[i].cod_tipo
AND b.cod_sec = repuestos[i].cod_sec
LET j = 1
FOREACH buscar3 INTO maquina[j].*
LET repuestoAPI.partTypes[j] = "(",maquina[j].codigo," - ",maquina[j].nombre,")"
LET j = j + 1
END FOREACH
LET json_response = util.JSON.stringify(repuestoAPI)
--DISPLAY json_response
TRY
CALL http_req.doTextRequest(json_response)
LET http_resp = http_req.getResponse()
IF http_resp.getStatusCode() != 201 THEN
#CALL show_sync_err(http_resp.getStatusDescription())
DISPLAY "Se ha salido del programa"
LET flag = FALSE
RETURN
ELSE
LET json_response = http_resp.getTextResponse()
CALL util.JSON.parse(json_response, answer)
DISPLAY SFMT("Se ha creado un repuesto con ID: %1", answer.id)
UPDATE irtb00002
SET id_maintainx = answer.id, enviarMX = 'SI'
WHERE cod_n = repuestos[i].cod_n
AND cod_grupo = repuestos[i].cod_grupo
AND cod_tipo = repuestos[i].cod_tipo
AND cod_sec = repuestos[i].cod_sec
IF STATUS < 0 THEN
DISPLAY "No se hizo el update"
END IF
LET flag = TRUE
END IF
CATCH
DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)",
STATUS, SQLCA.SQLERRM)
END TRY
IF flag = FALSE THEN
RETURN
END IF
LET i = i + 1
END FOREACH
END FUNCTION
FUNCTION delete_repuestos()
DEFINE
id_maintain DYNAMIC ARRAY OF INT,
i INT,
flag BOOLEAN
DECLARE buscar2 CURSOR FOR
SELECT DISTINCT id_maintainX
FROM irtb00002
WHERE id_maintainx IS NOT NULL
LET i = 1
FOREACH buscar2 INTO id_maintain[i]
LET url = "https://api.getmaintainx.com/v1/parts/", id_maintain[i]
LET token =
"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjUyNDIwMCwib3JnYW5pemF0aW9uSWQiOjIwNDA2MCwiaWF0IjoxNzIyNjAzOTQ3LCJzdWIiOiJSRVNUX0FQSV9BVVRIIiwianRpIjoiYTc3NjQzY2EtYWEzNy00MzQ0LWJlMmEtYTA2ZTM4OTVjZjA0In0.EmlDZmbojh0MW_We_GX829zMNKIsn4W8Q6qK60xfWFw"
LET http_req = com.HTTPRequest.Create(url)
CALL http_req.setConnectionTimeout(-1)
CALL http_req.setCharset("UTF-8")
CALL http_req.setHeader("Authorization", token)
CALL http_req.setHeader("Content-Type", "application/json")
CALL http_req.setHeader("accept", "application/json")
CALL http_req.setMethod('DELETE')
TRY
CALL http_req.doRequest()
LET http_resp = http_req.getResponse()
IF http_resp.getStatusCode() != 204
AND http_resp.getStatusCode() != 404 THEN
#CALL show_sync_err(http_resp.getStatusDescription())
LET flag = FALSE
RETURN
ELSE
DISPLAY SFMT("ID %1 Eliminado", id_maintain[i])
UPDATE irtb00002
SET id_maintainx = NULL, enviarMX = NULL
WHERE id_maintainx = id_maintain[i]
IF STATUS < 0 THEN
DISPLAY "No se hizo el update"
END IF
LET flag = TRUE
END IF
CATCH
DISPLAY SFMT("HTTP request error: STATUS=%1 (%2)",
STATUS, SQLCA.SQLERRM)
END TRY
IF flag != TRUE THEN
RETURN
END IF
LET i = i + 1
END FOREACH
END FUNCTION
FUNCTION select_path()
LET path_option = 2
# 1 = SERVIDOR DE DESARROLLO
# 2 = SERVIDOR DE PRODUCCION
END FUNCTION