Custom module for API Configuration of NetSuite-TrackTraceRX Integration.
/**
* @NApiVersion 2.x
* @NModuleScope SameAccount
*/
/************************************************************************************************
* * Netsuite - TrackTraceRX integration **
* Library
*
* **********************************************************************************************
*
* Author: Jobin & Jismi IT Services LLP
*
* Date Created : 11.04.2023
*
* REVISION HISTORY
*
* REVISED BY :
* LAST EDITOR:
***********************************************************************************************/
define(['N/runtime', 'N/record', 'N/search', 'N/encode', 'N/https', 'N/error'],
function (runtime, record, search, encode, https, error) {
let Library;
(function () {
let TRACKTRACERX_API_REQUESTS = {
products: "/products",
locationManagement: "/locations",
tradingPartners: "/trading_partners",
transactionCreate: "/transactions/{transaction_type}",
transactionUpdate: "/transactions/{transaction_type}/{transaction_uuid}",
transactionDelete: "/transactions/{transaction_type}/{transaction_uuid}",
transaction: "/transactions",
shipments: "/shipments",
approveSalesOrder: "/transactions/sales/{transaction_uuid}/approve",
createPicking: "/shipments/picking/",
pickItemsAndClose: "/shipments/picking/{picking_uuid}/pick_and_close"
}
/**
* @description The API configuration record
*/
let REC_API_CONFIGURATION = "customrecord_jj_cr_tracktrace_api_config";
let API_CONFIG_REC_ID = 1;
let FLD_DOMAIN = "custrecord_jj_tracktrace_endpt_ssrx461";
let VERSION = "custrecord_jj_tracktrace_version_ssrx461";
let API_KEY = "custrecord_jj_tracktrace_api_key_ssrx461";
try {
Library = new trackTraceLibrary();
} catch (e) {
log.debug("error trackTraceLibrary", e.message);
}
/**
* @description Class to encapsulate Maersk Library functionality.
*/
function trackTraceLibrary() {
this.TRACKTRACERX_API_REQUESTS = TRACKTRACERX_API_REQUESTS;
this.REC_API_CONFIGURATION = REC_API_CONFIGURATION;
this.API_CONFIG_REC_ID = API_CONFIG_REC_ID;
this.FLD_DOMAIN = FLD_DOMAIN;
this.API_KEY = API_KEY;
this.VERSION = VERSION;
this.apiConfigfileSearch = apiConfigfileSearch;
this.getTrackTraceRequestHeaders = getTrackTraceRequestHeaders;
this.deleteTrackTraceHeaders = deleteTrackTraceHeaders;
this.trackTraceCreateOrUpdate = trackTraceCreateOrUpdate;
this.trackTraceDelete = trackTraceDelete;
this.createTrackTraceTradingPartnerAddressBook = createTrackTraceTradingPartnerAddressBook;
this.updateTrackTraceTradingPartnerAddressBook = updateTrackTraceTradingPartnerAddressBook;
this.requestTrackTrace = requestTrackTrace;
}
/**
* @description search used for getting corresponding account config
* @scope private
*/
function apiConfigfileSearch() {
let integrationRecordObj = search.lookupFields({
type: REC_API_CONFIGURATION,
id: API_CONFIG_REC_ID,
columns: [FLD_DOMAIN, API_KEY, VERSION]
});
let integrationCredentialObj = {
"domain": integrationRecordObj[FLD_DOMAIN],
"apiKey": integrationRecordObj[API_KEY],
"version": integrationRecordObj[VERSION]
}
return integrationCredentialObj;
}
/**
*@description header for https request
* @returns {{}} -headers
*/
function getTrackTraceRequestHeaders(configuration) {
const headers = {};
headers['content-type'] = 'application/x-www-form-urlencoded'
headers['Authorization'] = configuration?.apiKey;
headers['Accept'] = 'application/json';
headers['Accept-Encoding'] = 'gzip, deflate, br';
return headers;
}
/**
*@description header for https delete request
* @returns {{}} -headers
*/
function deleteTrackTraceHeaders(configuration) {
const headers = {};
headers['Authorization'] = configuration?.apiKey;
headers['Accept'] = 'application/json';
return headers;
}
/**
* @description https request to sync to track trace
* @param {*}
* @returns object
*/
function requestTrackTrace(httpMethod, requestUrl, requestBody, configurationSearch, requestHeaders) {
try {
log.debug('data',{
'url': configurationSearch?.domain + '/' + configurationSearch?.version + requestUrl,
'headers': requestHeaders,
'body': requestBody
});
let createTracktraceRequest = https.request({
method: httpMethod,
url: configurationSearch?.domain + '/' + configurationSearch?.version + requestUrl,
headers: requestHeaders,
body: requestBody
});
return createTracktraceRequest;
} catch (e) {
log.error({
title: 'error @ requestTrackTrace',
details: e
});
return false;
}
}
/**
* @description create or update request
* @param {string} methodSelected
* @param {string} urlRequired
* @param {formData} dataDetails
* @returns {object}
*/
function trackTraceCreateOrUpdate(methodSelected,urlRequired,dataDetails){
let configurationSearch = apiConfigfileSearch();
let responseReceived = https.request({
method: methodSelected,
url: urlRequired,
headers: getTrackTraceRequestHeaders(configurationSearch),
body: dataDetails
});
let responseBody = {
"body": JSON.parse(responseReceived?.body),
"code": responseReceived?.code
}
return responseBody;
}
/**
* @description delete request
* @param {string} methodSelected
* @param {string} urlRequired
* @returns {object}
*/
function trackTraceDelete(methodSelected,urlRequired){
let configurationSearch = apiConfigfileSearch()
let responseReceived = https.request({
method: methodSelected,
url: urlRequired,
headers: deleteTrackTraceHeaders(configurationSearch),
});
let responseBody = {
"code": responseReceived.code
}
return responseBody;
}
/**
* @description https request to create address book
* @param {formData} addressDetails vendor address body
* @param {string} partnerUuid partnerUuid
* @returns {object}
*/
function createTrackTraceTradingPartnerAddressBook(addressDetails, partnerUuid) {
let configurationSearch = apiConfigfileSearch();
let createAddressResponse = https.request({
method: "POST",
url: configurationSearch?.domain + '/' + configurationSearch?.version + TRACKTRACERX_API_REQUESTS.tradingPartners + '/' + partnerUuid + '/' + 'addresses',
headers: getTrackTraceRequestHeaders(configurationSearch),
body: addressDetails
});
let addressResponse = {
"body": JSON.parse(createAddressResponse?.body),
"code": createAddressResponse?.code
}
return addressResponse;
}
/**
* @description https request to update address book
* @param {formData} addressDetails address body
* @param {string} partnerUuid partner Uuid
* @param {string} addressUuid address Uuid
* @returns {object}
*/
function updateTrackTraceTradingPartnerAddressBook(addressDetails, partnerUuid, addressUuid) {
let configurationSearch = apiConfigfileSearch();
let updateAddressResponse = https.request({
method: "PUT",
url: configurationSearch?.domain + '/' + configurationSearch?.version + TRACKTRACERX_API_REQUESTS.tradingPartners + '/' + partnerUuid + '/' + 'addresses' + '/' + addressUuid,
headers: getTrackTraceRequestHeaders(configurationSearch),
body: addressDetails
});
let addressResponse = {
"body": JSON.parse(updateAddressResponse?.body),
"code": updateAddressResponse?.code
}
return addressResponse;
}
})()
return {
Library: Library,
}
})