Jira Code: LEAD-16
Add prepaid schedules on the line level of the bill in NetSuite and then create Amortization JE at month end, the PO Number has to include in the line level.
/**
* @NApiVersion 2.x
* @NScriptType ScheduledScript
* @NModuleScope SameAccount
*/
/**
*
* This ScheduledScript to edit and save the amortized journal entry.
*
*/
/*******************************************************************************
*
* LEAD-16 JJ Schedule Add PO
*
* **************************************************************************
*
* Date: 28-12-2018
*
* Author: Jobin & Jismi IT Services LLP
*
*****************************************************************************
**/
define(['N/email', 'N/file', 'N/url', 'N/https', 'N/record', 'N/runtime', 'N/search', 'N/ui/serverWidget', 'N/task', 'N/render', 'N/currency'],
/**
* @param {email} email
* @param {http} http
* @param {https} https
* @param {record} record
* @param {runtime} runtime
* @param {search} search
* @param {url} url
*/
function (email, file, url, https, record, runtime, search, serverWidget, task, render, currency) {
/**
* Definition of the Scheduled script trigger point.
*
* @param {Object} scriptContext
* @param {string} scriptContext.type - The context in which the script is executed. It is one of the values from the scriptContext.InvocationType enum.
* @Since 2015.2
*/
var main = {
execute: function (scriptContext) {
var records = main.findtheRecords();
for (var i = 0; i < records.length; i++) {
main.process(records[i])
}
},
findtheRecords: function () {
var recordId = [];
var accountingtransactionSearchObj = search.create({
type: "accountingtransaction",
filters: [
["type", "anyof", "Journal"],
"AND",
["transaction.datecreated", "on", "today"]
],
columns: [
search.createColumn({
name: "internalid",
summary: "GROUP",
label: "Internal ID"
})
]
});
var searchResultCount = accountingtransactionSearchObj.runPaged().count;
log.debug("accountingtransactionSearchObj result count", searchResultCount);
accountingtransactionSearchObj.run().each(function (result) {
var internalid = result.getValue({
name: "internalid",
summary: "GROUP",
label: "Internal ID"
});
recordId.push(internalid)
return true;
});
log.debug("recordId", recordId)
return recordId;
},
process: function (recid) {
var newrec = record.load({
type: record.Type.JOURNAL_ENTRY,
id: recid,
isDynamic: true,
});
var book = newrec.getValue({
fieldId: 'bookje'
});
var flag = newrec.getValue({
fieldId: 'custbody_jj_amortized_journal'
});
log.debug("flag", flag)
if (flag == false || flag == "F") {
if (book == "T") {
var numLines = newrec.getLineCount({
sublistId: 'line'
});
for (var i = 0; i < numLines; i++) {
var lineNum = newrec.selectLine({
sublistId: 'line',
line: i
});
var memo = newrec.getCurrentSublistValue({
fieldId: 'memo',
sublistId: 'line'
})
var currencyjournal = newrec.getText({
fieldId: 'currency'
});
if (memo == "Amortization Destination" || memo == "Amortization Source") {
var schedulenumber = newrec.getCurrentSublistValue({
fieldId: 'schedulenum',
sublistId: 'line'
})
var schedule = record.load({
type: record.Type.AMORTIZATION_SCHEDULE,
id: schedulenumber,
isDynamic: true,
});
var sourcerecid = schedule.getValue({
fieldId: 'sourcetran'
});
var amountsch = schedule.getValue({
fieldId: 'totalamount'
});
try {
var sourcerecord = record.load({
type: record.Type.VENDOR_BILL,
id: sourcerecid,
isDynamic: true,
});
var billdate = sourcerecord.getText({
fieldId: 'createddate'
});
var currencybill = sourcerecord.getText({
fieldId: 'currency'
});
log.debug("billdate", billdate)
if (currencybill != currencyjournal){
var rate = currency.exchangeRate({
source: currencyjournal,
target: currencybill,
date: new Date(billdate)
});
amountsch = amountsch * rate;
amountsch = Math.ceil(amountsch);
log.debug("amountsch", amountsch)
}
var numLinesinsource = sourcerecord.getLineCount({
sublistId: 'expense'
});
for (var j = 0; j < numLinesinsource; j++) {
var amount = sourcerecord.getSublistValue({
fieldId: 'amount',
sublistId: 'expense',
line: j
});
if (amountsch == amount) {
ponumber = sourcerecord.getSublistValue({
fieldId: 'custcol_po_number',
sublistId: 'expense',
line: j
});
} else {
amount = "-" + amount
if (amountsch == amount) {
ponumber = sourcerecord.getSublistValue({
fieldId: 'custcol_po_number',
sublistId: 'expense',
line: j
});
}
}
}
} catch (err) {
try {
var sourcerecord = record.load({
type: record.Type.VENDOR_CREDIT,
id: sourcerecid,
isDynamic: true,
});
var numLinesinsource = sourcerecord.getLineCount({
sublistId: 'expense'
});
for (var j = 0; j < numLinesinsource; j++) {
var amount = sourcerecord.getSublistValue({
fieldId: 'amount',
sublistId: 'expense',
line: j
});
if (amountsch == amount) {
ponumber = sourcerecord.getSublistValue({
fieldId: 'custcol_po_number',
sublistId: 'expense',
line: j
});
} else {
amount = "-" + amount
if (amountsch == amount) {
ponumber = sourcerecord.getSublistValue({
fieldId: 'custcol_po_number',
sublistId: 'expense',
line: j
});
}
}
}
} catch (error) {
var sourcerecord = record.load({
type: record.Type.JOURNAL_ENTRY,
id: sourcerecid,
isDynamic: true,
});
var numLinesinsource = sourcerecord.getLineCount({
sublistId: 'line'
});
for (var j = 0; j < numLinesinsource; j++) {
var amount = sourcerecord.getSublistValue({
fieldId: 'debit',
sublistId: 'line',
line: j
});
if (amountsch == amount) {
ponumber = sourcerecord.getSublistValue({
fieldId: 'custcol_po_number',
sublistId: 'line',
line: j
});
} else {
amount = "-" + amount
if (amountsch == amount) {
ponumber = sourcerecord.getSublistValue({
fieldId: 'custcol_po_number',
sublistId: 'expense',
line: j
});
}
}
}
}
}
newrec.setCurrentSublistValue({
sublistId: 'line',
fieldId: "custcol_po_number",
value: ponumber
});
newrec.commitLine({
sublistId: 'line'
});
}
}
newrec.setValue({
fieldId: 'custbody_jj_amortized_journal',
value: true,
ignoreFieldChange: true
});
var id = newrec.save({
enableSourcing: false,
ignoreMandatoryFields: true
});
log.debug("id", id);
}
}
}
}
for (var key in main) {
if (typeof main[key] === 'function') {
main[key] = trycatch(main[key], key);
}
}
function trycatch(myfunction, key) {
return function () {
try {
return myfunction.apply(this, arguments);
} catch (e) {
log.debug("e in " + key, e);
}
}
};
return main;
});