/**
* @NApiVersion 2.1
* @NScriptType fiParserPlugin
*/
define([‘N/format’, ‘N/runtime’],
function (format, runtime) {
function parseData(context) {
try {
log.debug(“parseData”, “========== STARTS EXECUTION ==========”);
log.debug(“Context”, context);
let rawData = JSON.parse(context.inputData.getContents());
log.debug(“Data in db context.inputData.getContents”, rawData);
for (let i = 0; i < rawData.length; i++) {
let statementArray = rawData[i].svStmtServiceRS.company[0].statement;
statementArray.forEach(function (statement) {
log.debug(“Statement”, statement);
let transactionData = statement.Transactions.TransactionData;
log.debug(“Transactions in a Statement”, transactionData);
// Create account data for each statement
if (transactionData) {
var accountData = context.createAccountData({
accountId: statement.acERPcode,
dataAsOfDate: statement.Transactions.ReceiptTime.split(“T”)[0],
openingBalance: transactionData && transactionData.OpeningBalance && transactionData.OpeningBalance.Amount,
closingBalance: transactionData && transactionData.ClosingBalance && transactionData.ClosingBalance.Amount,
currentBalance: transactionData && transactionData.ClosingAvailableBalance && transactionData.ClosingAvailableBalance.Amount,
dueBalance: transactionData && transactionData.ClosingBalance && transactionData.ClosingBalance.Amount
});
}
log.debug(“Account Data Processed”, accountData);
// Processing each transaction within the statement
let transactionDetailArray = transactionData.TransactionDetails;
log.debug(“transactionDetailArray”, transactionDetailArray);
if (transactionDetailArray.length > 0) {
transactionDetailArray.forEach(function (transaction) {
// log.debug(“Transaction”, transaction);
let valueDate = transaction.ValueDate;
let year = “20” + valueDate.substring(0, 2); // Assuming years are 20XX
let month = valueDate.substring(2, 4);
let day = valueDate.substring(4, 6);
// Creating a new Date object
let formattedDate = new Date(year, parseInt(month) – 1, day); // Month needs to be zero-based (0-11)
// Formatting the date to YYYY-MM-DD
let formattedDateString = formattedDate.getFullYear() + “-“ + (formattedDate.getMonth() + 1).toString().padStart(2, ‘0’) + “-“ + formattedDate.getDate().toString().padStart(2, ‘0’);
accountData.createNewTransaction({
date: formattedDateString,
amount: transaction.Amount,
transactionTypeCode: transaction.TransactionType,
uniqueId: transaction.BankReference,
payee: transaction.AccountOwnerReference,
memo: transaction.Description,
currency: transactionData.OpeningBalance.Currency
});
});
}
log.debug(“Transaction”, “created”)
});
}
log.debug(“Governance”, runtime.getCurrentScript().getRemainingUsage());
}
catch (e) {
log.error(‘Error @ parseData’, e);
}
}
function getStandardTransactionCodes(context) {
log.debug(“Inside “, “getStandardTransactionCodes”)
context.createNewStandardTransactionCode({
transactionCode: ‘CHARGE’,
transactionType: ‘PAYMENT’
});
}
function getExpenseCodes(context) {
// context.createNewExpenseCode({
// code: ‘CC’,
// description: ‘Customer Credit’
// });
}
return {
parseData: parseData,
getStandardTransactionCodes: getStandardTransactionCodes,
getExpenseCodes: getExpenseCodes
};
});