Jira Code: TRS-122
Description:
We can view the loaded journal using a NetSuite custom page. We redirect to the list page using a ‘list button’ and an ‘edit button’ is used to edit the current journal. And we can show the GL impact using GL Impact button.
Suitelet
/**
*@NApiVersion 2.x
*@NScriptType Suitelet
*/
/** Script Description
* .
******************************************************************************************************
TRUST BRIDGE GLOBAL
View the journal page for the id
******************************************************************************************************
* Date: 29/06/2019
*
* Author: Jobin & Jismi IT Services LLP
*
* Revision 1.0 Anju Babu 29/06/2019
*****************************************************************************************************/
var urlArray = [{
"Name": "LIST",
"SuitletId": "customscript_trs116_sl_creat_list_for_je",
"DeploymentId": "customdeploy_trs116_sl_creat_list_for_je",
"Link": ""
},
];
define(['N/record', 'N/search', 'N/ui/serverWidget', 'N/url', 'N/https', 'N/http', 'N/runtime'],
function(record, search, serverWidget, url, https, http, runtime) {
/**
* Definition of the Suitelet script trigger point.
*
* @param {Object} context
* @param {ServerRequest} context.request - Encapsulation of the incoming request
* @param {ServerResponse} context.response - Encapsulation of the Suitelet response
* @Since 2015.2
*/
//Common Try-Catch function
function applyTryCatch(DATA_OBJ, NAME) {
function tryCatch(myfunction, key) {
return function() {
try {
return myfunction.apply(this, arguments);
} catch (e) {
log.error("error in " + key, e);
log.debug("error in " + key, e);
return false;
}
};
}
for (var key in DATA_OBJ) {
if (typeof DATA_OBJ[key] === "function") {
DATA_OBJ[key] = tryCatch(DATA_OBJ[key], NAME + "." + key);
}
}
}
var main = {
onRequest: function(context) {
for (var i = 0; i < urlArray.length; i++) {
urlArray[i]['Link'] = url.resolveScript({
scriptId: urlArray[i]['SuitletId'],
deploymentId: urlArray[i]['DeploymentId'],
returnExternalUrl: false
});
}
// this.context = context;
if (context.request.method == 'GET') {
log.debug('context', context);
var recId = context.request.parameters.recid;
if (recId) {
log.debug('recId', recId);
var journalRecList = main.getData(recId);
log.debug('journalRecList', journalRecList);
if (journalRecList != false) {
log.debug('journalRecList', journalRecList);
var form = serverWidget.createForm({
title: 'Journal' + ' ' + '#' + journalRecList[0].tranid
});
form.clientScriptFileId = 667;
var date = form.addField({
id: "date",
type: serverWidget.FieldType.DATE,
label: 'Date'
});
date.defaultValue = journalRecList[0].date;
date.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var subsidiary = form.addField({
id: "subsidiary",
type: serverWidget.FieldType.TEXT,
label: 'Subsidiary',
source: "subsidiary"
});
subsidiary.defaultValue = journalRecList[0].Subsidiary;
subsidiary.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var currency = form.addField({
id: "currency",
type: serverWidget.FieldType.TEXT,
label: 'Currency',
source: "currency"
});
currency.defaultValue = journalRecList[0].Currency;
currency.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var exchangerate = form.addField({
id: "exchangerate",
type: serverWidget.FieldType.TEXT,
label: 'Exchange Rate',
source: "exchangerate"
});
exchangerate.defaultValue = journalRecList[0].exchangerate;
exchangerate.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var amount = form.addField({
id: "amount",
type: serverWidget.FieldType.TEXT,
label: 'Amount'
});
amount.defaultValue = journalRecList[0].Amount;
amount.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var headerMemo = form.addField({
id: "header_memo",
type: serverWidget.FieldType.TEXT,
label: 'Header Memo'
});
headerMemo.defaultValue = journalRecList[0].Header;
headerMemo.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var lineMemo = form.addField({
id: "line_memo",
type: serverWidget.FieldType.TEXT,
label: 'Line Memo'
});
lineMemo.defaultValue = journalRecList[0].Line;
lineMemo.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var fundNumberSend = form.addField({
id: "fund_send",
type: serverWidget.FieldType.TEXT,
label: 'Fund Number Send',
source: "customrecord_cseg5"
});
fundNumberSend.defaultValue = journalRecList[0].fund;
fundNumberSend.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var fundNumberReceived = form.addField({
id: "fund_received",
type: serverWidget.FieldType.TEXT,
label: 'Fund Number Received',
source: "customrecord_cseg5"
});
fundNumberReceived.defaultValue = journalRecList[0].fund1;
if ((journalRecList[0].source) || ((journalRecList[0].destination).length > 0)) {
fundNumberReceived.updateDisplayType({
displayType: serverWidget.FieldDisplayType.HIDDEN
});
} else {
fundNumberReceived.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
}
var screen = form.addField({
id: "custom_screen",
type: serverWidget.FieldType.TEXT,
label: 'Screen Source'
});
//source.isMandatory = true;
screen.defaultValue = journalRecList[0].screen;
screen.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var source = form.addField({
id: "source_received",
type: serverWidget.FieldType.TEXT,
label: 'Source',
source: "customrecord_cseg5"
});
//source.isMandatory = true;
source.defaultValue = journalRecList[0].source;
source.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var destination = form.addField({
id: "destination_received",
type: serverWidget.FieldType.TEXT,
label: 'Destination',
source: "customrecord_cseg5"
});
//source.isMandatory = true;
destination.defaultValue = journalRecList[0].destination;
destination.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var createdBy = form.addField({
id: "createdby_received",
type: serverWidget.FieldType.TEXT,
label: 'Created By',
source: "customrecord_cseg5"
});
//source.isMandatory = true;
createdBy.defaultValue = journalRecList[0].createdby;
createdBy.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var modifiedBy = form.addField({
id: "modifiedby_received",
type: serverWidget.FieldType.TEXT,
label: 'Last Modified By',
source: "customrecord_cseg5"
});
//source.isMandatory = true;
modifiedBy.defaultValue = journalRecList[0].modifiedBy;
modifiedBy.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
//updated on 4.07.19 sublist "LINE" from the JE
var sublist = form.addSublist({
id: 'custpage_table',
type: serverWidget.SublistType.STATICLIST,
label: 'LINES'
});
sublist.addField({
id: 'custpage_jeaacount',
label: 'Account',
type: serverWidget.FieldType.TEXT
});
sublist.addField({
id: 'custpage_jedebit',
label: 'Debit',
type: serverWidget.FieldType.TEXT
});
sublist.addField({
id: 'custpage_jecredit',
label: 'Credit ',
type: serverWidget.FieldType.TEXT
});
sublist.addField({
id: 'custpage_jefund',
label: 'Fund Number ',
type: serverWidget.FieldType.TEXT
});
sublist.addField({
id: 'custpage_jememo',
label: 'Memo',
type: serverWidget.FieldType.TEXT
});
// To see the list of journal ,click the button
var back = form.addButton({
id: 'buttonid',
label: 'LIST',
functionName: 'backAction'
});
// To edit the current journal ,click the button
var edit = form.addButton({
id: 'buttonEditid',
label: 'EDIT',
functionName: 'editAction'
});
var glImpact = form.addButton({
id: 'buttonid_glimpact',
label: 'GL Impact',
functionName: 'glImpact'
});
log.debug('outfor', journalRecList[1].accnt)
if (journalRecList.length > 1) {
for (var i = 1; i < journalRecList.length; i++) {
log.debug('infor', journalRecList[i].accnt)
sublist.setSublistValue({
id: 'custpage_jeaacount',
line: i - 1,
value: journalRecList[i].accnt || 'null'
});
journalRecList
sublist.setSublistValue({
id: 'custpage_jedebit',
line: i - 1,
value: journalRecList[i].debit || 'null'
});
sublist.setSublistValue({
id: 'custpage_jecredit',
line: i - 1,
value: journalRecList[i].credit || 'null'
});
sublist.setSublistValue({
id: 'custpage_jefund',
line: i - 1,
value: journalRecList[i].fundNum || 'null'
});
sublist.setSublistValue({
id: 'custpage_jememo',
line: i - 1,
value: journalRecList[i].Line || 'null'
});
}
}
context.response.writePage(form);
} else {
var htmlCode = '<html><head></head><body><script>confirm("Sorry we could not find Journal Entry ");window.location.href ="' + urlArray[0]['Link'] + '"</script></body></html>';
context.response.write(htmlCode);
}
} else {
var htmlCode = '<html><head></head><body><script>confirm("Sorry we could not find Journal Entry ");window.location.href ="' + urlArray[0]['Link'] + '"</script></body></html>';
context.response.write(htmlCode);
}
}
},
getData: function(recId) {
try {
var journalArr = [];
var journalRec = record.load({
type: "journalentry",
id: recId,
isDynamic: true,
});
log.debug('journalRec', journalRec)
var date = journalRec.getValue({
fieldId: 'trandate'
});
var Subsidiary = journalRec.getText({
fieldId: 'subsidiary'
});
var Currency = journalRec.getText({
fieldId: 'currency'
});
var Header = journalRec.getValue({
fieldId: 'memo'
});
var fundSnd = journalRec.getText({
fieldId: 'custbody_fund_num_send'
});
var fundRec = journalRec.getText({
fieldId: 'custbody_fund_num_recvd'
});
var source = journalRec.getText({
fieldId: 'custbody_jj_source_of_origin'
});
var destination = journalRec.getText({
fieldId: 'custbody_jj_child_destination'
});
var exchangerate = journalRec.getText({
fieldId: 'exchangerate'
});
var lineItem = {};
var numLines = journalRec.getLineCount({
sublistId: 'line'
});
var Line = journalRec.getSublistText({
sublistId: 'line',
fieldId: 'memo',
line: 0
});
var debit = journalRec.getSublistText({
sublistId: 'line',
fieldId: 'debit',
line: 0
});
var credit = journalRec.getSublistText({
sublistId: 'line',
fieldId: 'credit',
line: 0
});
log.debug('credit', credit);
log.debug('debit', debit);
if (debit)
journalArr.push({
'date': date,
'Subsidiary': Subsidiary,
'Currency': Currency,
'Header': Header,
'fund': fundSnd,
'fund1': fundRec,
'Line': Line,
'Amount': journalRec.getSublistText({
sublistId: 'line',
fieldId: 'debit',
line: 0
}),
'tranid': journalRec.getValue({ fieldId: 'tranid' }),
'screen': journalRec.getText({ fieldId: 'custbody_jj_screen_source' }),
'source': source,
'destination': destination,
'modifiedBy': journalRec.getText({ fieldId: 'custbody_last_modifiedby' }),
'createdby': journalRec.getText({ fieldId: 'custbody_jj_created_by' }),
'exchangerate': exchangerate
});
else
journalArr.push({
'date': date,
'Subsidiary': Subsidiary,
'Currency': Currency,
'Header': Header,
'fund': fundSnd,
'fund1': fundRec,
'Line': Line,
'Amount': journalRec.getSublistText({
sublistId: 'line',
fieldId: 'credit',
line: 0
}),
'tranid': journalRec.getValue({ fieldId: 'tranid' }),
'screen': journalRec.getText({ fieldId: 'custbody_jj_screen_source' }),
'source': source,
'destination': destination,
'modifiedBy': journalRec.getText({ fieldId: 'custbody_last_modifiedby' }),
'createdby': journalRec.getText({ fieldId: 'custbody_jj_created_by' }),
'exchangerate': exchangerate
});
if (numLines > 0) {
for (var j = 0; j < numLines; j++) {
lineItem.accnt = journalRec.getSublistText({
sublistId: 'line',
fieldId: 'account',
line: j
});
lineItem.debit = journalRec.getSublistText({
sublistId: 'line',
fieldId: 'debit',
line: j
});
lineItem.credit = journalRec.getSublistText({
sublistId: 'line',
fieldId: 'credit',
line: j
});
lineItem.fundNum = journalRec.getSublistText({
sublistId: 'line',
fieldId: 'cseg5',
line: j
});
lineItem.Line = journalRec.getSublistText({
sublistId: 'line',
fieldId: 'memo',
line: j
});
log.debug('lineItem', lineItem);
journalArr.push(lineItem);
lineItem = {};
log.debug('journalArrinside', journalArr);
}
}
log.debug('journalArr', journalArr);
return journalArr;
} catch (e) {
return false
}
}
}
applyTryCatch(main, "main");
return main;
});
Client Script
/**
*@NApiVersion 2.x
*@NScriptType ClientScript
*/
/** Script Description
* .
******************************************************************************************************
TRUST BRIDGE GLOBAL
The link for list and edit pages for journal
******************************************************************************************************
* Date: 29/06/2019
*
* Author: Jobin & Jismi IT Services LLP
*
* Revision 1.0 Anju Babu 29/06/2019
*****************************************************************************************************/
define(['N/currentRecord', 'N/url', 'N/https', 'N/http'], function(currentRecord, url, https, http) {
function pageInit(context) {
/*alert('ClientScript pageInit triggered')*/
}
function fieldChanged(context) {
//To avoid the subsidiaries become equal
var fieldIdSub = context.fieldId;
var currentRec = context.currentRecord;
if (fieldIdSub == 'subsidiary_from' || fieldIdSub == 'subsidiary_to') {
log.debug('currentRec', currentRec);
var fieldTo = currentRec.getValue({
fieldId: 'subsidiary_to'
});
var fieldFrom = currentRec.getValue({
fieldId: 'subsidiary_from'
});
if (fieldTo == fieldFrom) {
alert('Please enter different subsidiary');
currentRec.setValue({
fieldId: fieldIdSub,
value: ''
});
}
}
}
function backAction(context) {
// Load the list page
var urlOfScript = url.resolveScript({
scriptId: 'customscript_trs116_sl_creat_list_for_je',
deploymentId: 'customdeploy_trs116_sl_creat_list_for_je',
returnExternalUrl: false
});
window.location.href = (urlOfScript);
}
function editAction(context) {
log.debug('context', context);
var Id = getParameterByName('recid'); // '39'
var urlOfScript = url.resolveScript({
scriptId: 'customscript_trs123_jj_sl_editjeform',
deploymentId: 'customdeploy_trs123_jj_sl_editjeform',
returnExternalUrl: false
});
window.location.href = (urlOfScript) + '&recid=' + Id;
}
function glImpact(context) {
log.debug('context', context);
var JEId = getParameterByName('recid');
var conpanyid = '5432341_SB1'
var http = 'https://';
var urlComponents = '/app/accounting/transactions/impact.nl?trantype=journal&searchid=-36&Transaction_INTERNALID=' + JEId + '&Transaction_INTERNALIDtype=ANYOF&label=Journal'
var accountIdPart = url.resolveDomain({
hostType: url.HostType.APPLICATION,
accountId: conpanyid
});
var glURL = http + accountIdPart + urlComponents;
console.log('glURL', glURL);
window.open(glURL);
}
function getParameterByName(name, url) {
if (!url)
url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex
.exec(url);
if (!results)
return null;
if (!results[2])
return ' ';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
return {
pageInit: pageInit,
backAction: backAction,
editAction: editAction,
glImpact: glImpact,
fieldChanged: fieldChanged
}
});