/**
* @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
}
});