{ ------------------------------------------------------------------ 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, cuenta_no VARCHAR(10), 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), rnc VARCHAR(11), status_t VARCHAR(1), tel_sp VARCHAR(25), term_sp SMALLINT, tipo_doc VARCHAR(10), 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 END IF RETURN answer, answer2 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