Sample Financial Institution Connectivity

/**

* @NApiVersion 2.x

* @NScriptType fiConnectivityPlugin

* @NModuleScope SameAccount

*/

define([‘N/search’],

    /**

    * @param {search}

    */

    function (search) {

        /**

         * Lookup currency symbol by internal ID.

         * @param {string} currencyInternalId – Internal ID of the currency.

         * @returns {string|null} – Symbol of the currency, or null if not found.

         */

        function getCurrencySymbol(currencyInternalId) {

            try {

                // Lookup fields for currency record

                var currencyLookup = search.lookupFields({

                    type: search.Type.CURRENCY,

                    id: currencyInternalId,

                    columns: [‘symbol’]

                });

                var currencySymbol = currencyLookup.symbol;

                if (currencySymbol) {

                    return currencySymbol;

                } else {

                    return null;

                }

            } catch (e) {

                log.debug(“error @getCurrencySymbol”, e);

                return null;

            }

        }

        /**

        * Function to get the bank statement details

        * @return {accountData}

        */

        function getBankStatementDetails() {

            try {

                var customrecord_jj_transaction_details_gxinSearchObj = search.create({

                    type: “customrecord_jj_transaction_details_gxin”,

                    filters:

                        [

                            [“custrecord_jj_bank_txn_date_gxin_650”, “onorafter”, “yesterday”],

                            “AND”,

                            [“isinactive”, “is”, “F”]

                        ],

                    columns:

                        [

                            search.createColumn({ name: “custrecord_jj_bank_transaction_id”, label: “Transaction Id” }),

                            search.createColumn({ name: “custrecord_jj_bank_txn_date_gxin_650”, label: “Transaction Date” }),

                            search.createColumn({ name: “custrecord_jj_bank_amount_gxin_650”, label: “Amount” }),

                            search.createColumn({ name: “custrecord_jj_balance_amount”, label: “Balance Amount” }),

                            search.createColumn({ name: “custrecord_jj_bank_memo_gxin_650”, label: “Memo” }),

                            search.createColumn({ name: “custrecord_jj_bank_type_gxin_650”, label: “Type” }),

                            search.createColumn({

                                name: “custrecord_jj_account_number”,

                                join: “CUSTRECORD_JJ_BANK_CONFIG_ID”,

                                label: “Account Number”

                            }),

                            search.createColumn({

                                name: “custrecord_jj_bank_currency_gxin_650”,

                                join: “CUSTRECORD_JJ_BANK_CONFIG_ID”,

                                label: “Currency”

                            })

                        ]

                });

                var searchResultCount = customrecord_jj_transaction_details_gxinSearchObj.runPaged().count;

                log.debug(“customrecord_jj_transaction_details_gxinSearchObj result count”, searchResultCount);

                var accountData = {};

                customrecord_jj_transaction_details_gxinSearchObj.run().each(function (result) {

                    // Extract values using getValue method

                    var transactionId = result.getValue({ name: “custrecord_jj_bank_transaction_id” });

                    var transactionDate = result.getValue({ name: “custrecord_jj_bank_txn_date_gxin_650” });

                    var amount = result.getValue({ name: “custrecord_jj_bank_amount_gxin_650” }) || 0.0;

                    var balanceAmount = result.getValue({ name: “custrecord_jj_balance_amount” });

                    var memo = result.getValue({ name: “custrecord_jj_bank_memo_gxin_650” });

                    var type = result.getValue({ name: “custrecord_jj_bank_type_gxin_650” });

                    var accountNumber = result.getValue({ name: “custrecord_jj_account_number”, join: “CUSTRECORD_JJ_BANK_CONFIG_ID” });

                    var currency = result.getValue({ name: “custrecord_jj_bank_currency_gxin_650”, join: “CUSTRECORD_JJ_BANK_CONFIG_ID” });

                    var currencySymbol = getCurrencySymbol(currency);

                    // Check if account number already exists in the object

                    if (!accountData[accountNumber]) {

                        accountData[accountNumber] = {

                            accountId: accountNumber,

                            dataAsOfDate: new Date().toISOString().split(‘T’)[0], // Current date

                            closingBalance: “”,

                            transactions: []

                        };

                    }

                    // Add transaction details to the account

                    accountData[accountNumber].transactions.push({

                        date: transactionDate,

                        id: transactionId,

                        payee: “”,

                        amount: parseFloat(amount).toFixed(1),

                        currency: currencySymbol,

                        memo: memo,

                        transactionTypeCode: type,

                        //uniqueId: transactionId,

                        transactionStatus: “Posted”

                    });

                    log.debug(“accountData”, accountData);

                    return true; // Continue to the next result

                });

            } catch (e) {

                log.debug(“error @getBankStatementDetails”, e);

                return {}

            }

        }

        /**

        * Function to get the date time

        * @return {formattedDateTime}

        */

        function formatDateTime() {

            try {

                var currentDate = new Date();

                // Extract the components of the current date and time

                var year = currentDate.getFullYear();

                var month = (currentDate.getMonth() + 1 < 10 ? ‘0’ : ) + (currentDate.getMonth() + 1); // Months are zero-indexed

                var day = (currentDate.getDate() < 10 ? ‘0’ : ) + currentDate.getDate();

                var hours = (currentDate.getHours() < 10 ? ‘0’ : ) + currentDate.getHours();

                var minutes = (currentDate.getMinutes() < 10 ? ‘0’ : ) + currentDate.getMinutes();

                var seconds = (currentDate.getSeconds() < 10 ? ‘0’ : ) + currentDate.getSeconds();

                // Format the date and time string

                var formattedDateTime = year + ‘-‘ + month + ‘-‘ + day + ‘T’ + hours + ‘:’ + minutes + ‘:’ + seconds;

                return formattedDateTime;

            } catch (e) {

                log.error(“Error @formatDateTime”, e);

                return null;

            }

        }

        /**

        * Function to get saved search details

        * @return {searchResults}

         */

        function getSavedsearchResult() {

            try {

                var customrecord_jj_bank_config_gxin_650SearchObj = search.create({

                    type: “customrecord_jj_bank_config_gxin_650”,

                    filters:

                        [

                            [“isinactive”, “is”, “F”]

                        ],

                    columns:

                        [

                            search.createColumn({ name: “custrecord_jj_account_number”, label: “Account Number” }),

                            search.createColumn({ name: “custrecord_jj_banj_display_name”, label: “Display Name” }),

                            search.createColumn({ name: “custrecord_jj_account_type”, label: “Account Type” }),

                            search.createColumn({ name: “custrecord_jj_bank_currency_gxin_650”, label: “Currency” }),

                            search.createColumn({ name: “custrecord_jj_group_name”, label: “Group Name” }),

                            search.createColumn({ name: “custrecord_jj_urn”, label: “URN” }),

                            search.createColumn({

                                name: “symbol”,

                                join: “CUSTRECORD_JJ_BANK_CURRENCY_GXIN_650”,

                                label: “Symbol”

                            })

                        ]

                });

                var searchResults = [];

                var searchResultCount = customrecord_jj_bank_config_gxin_650SearchObj.runPaged().count;

                log.debug(“customrecord_jj_bank_config_gxin_650SearchObj result count”, searchResultCount);

                customrecord_jj_bank_config_gxin_650SearchObj.run().each(function (result) {

                    var bankAccountObj = {};

                    bankAccountObj.accountNumber = result.getValue({ name: “custrecord_jj_account_number” });

                    bankAccountObj.displayName = result.getValue({ name: “custrecord_jj_banj_display_name” });

                    var accountType = result.getText({ name: “custrecord_jj_account_type” });

                    // Convert accountType to uppercase

                    if (accountType) {

                        bankAccountObj.accountType = accountType.toUpperCase();

                    }

                    bankAccountObj.symbol = result.getValue({

                        name: “symbol”,

                        join: “CUSTRECORD_JJ_BANK_CURRENCY_GXIN_650”

                    });

                    bankAccountObj.groupName = result.getText({ name: “custrecord_jj_group_name” });

                    bankAccountObj.urn = result.getValue({ name: “custrecord_jj_urn” });

                    searchResults.push(bankAccountObj);

                    return true;

                });

                return searchResults;

            } catch (e) {

                log.debug(“Error @getSavedsearchResult”, e);

                return []

            }

        }

        /**

        * Function to get account details

        * @param {context} – The context of the script

        */

        function getAccounts(context) {

            try {

                var bankStatement = getBankStatementDetails()

                log.debug(“bankStatement”, bankStatement);

                var formattedDateTime = formatDateTime()

                log.debug(“Inside getAccounts”, formattedDateTime);

                var configurationId = context.pluginConfiguration.getConfigurationFieldValue({ fieldName: “configuration_id” });

                log.debug(“configurationId33333”, configurationId)

                var savedSearch = getSavedsearchResult();

                log.debug(“savedSearch”, savedSearch);

                if (savedSearch.length > 0) {

                    savedSearch.forEach(function (account) {

                        context.addAccount({

                            accountMappingKey: account.accountNumber,

                            displayName: account.displayName,

                            accountType: account.accountType,

                            currency: account.symbol,

                            groupName: account.groupName,      // Assuming groupName is already in the correct format

                            lastUpdated: formattedDateTime

                        });

                    });

                }

            } catch (e) {

                log.error(“Error @getAccounts”, e);

            }

        }

        /**

        * Function to get bank transaction details

        * @param {context} – The context of the script

        */

        function getTransactionData(context) {

            try {

                var configurationId = context.pluginConfiguration.getConfigurationFieldValue({ fieldName: “configuration_id” });

                //var configuration = loadConfiguration(configurationId)

                var accountRequests = JSON.parse(context.accountRequestsJSON);

                log.debug(“accountRequests”, accountRequests)

                var bankStatement = getBankStatementDetails()

                log.debug(“bankStatement”, bankStatement);

                var firstObj = bankStatement.accountObj1;

                log.debug(“firstObj”, firstObj);

                var secondObj = bankStatement.accountObj2

                log.debug(“secondObj”, secondObj);

                var downloadedData = {

                    “accounts”: []

                }

                if (accountRequests != null) {

                    accountRequests.forEach(function (accountRequest) {

                        var accountId = accountRequest.accountMappingKey;

                        var fromDateTime = accountRequest.dataStartTime;

                        var toDateTime = accountRequest.dataEndTime;

                        if (accountId == “00236589741”) {

                            firstObj[“accountId”] = accountId;

                            downloadedData[“accounts”].push(firstObj);

                        } else if (accountId == “405001257”) {

                            secondObj[“accountId”] = accountId;

                            downloadedData[“accounts”].push(secondObj);

                        }

                    });

                }

                log.debug(“downloadedData”, downloadedData)

                context.addDataChunk({ dataChunk: JSON.stringify(downloadedData) });

                context.returnAccountRequestsJSON({ accountsJson: context.accountRequestsJSON });

                log.debug(“WRITED TO DB”)

            } catch (e) {

                log.error(“Error @getTransactionData”, e);

            }

        }

        return {

            getAccounts: getAccounts,

            getTransactionData: getTransactionData

        }

    });

Leave a comment

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