Custom module for API Configuration of NetSuite-TrackTraceRX Integration.

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,
        }
    })

Leave a comment

Your email address will not be published. Required fields are marked *