Jira Code: TRS-2:
Description:
First transaction screen is the creation of a journal, based on the subsidiary.
Create a suitelet page, by using this page we create two custom journals. That uses subsidiary fields – “subsidiaryfrom” and “subsidiaryto”.
/**
* @NApiVersion 2.x
* @NScriptType Suitelet
* @NModuleScope SameAccount
*/
/** Script Description
* .
******************************************************************************************************
TRUST BRIDGE GLOBAL
CREATE CUSTOM JOURNAL FORM
******************************************************************************************************
* Date: 11/06/2019
*
* Author: Jobin & Jismi IT Services LLP
*
* Revision 1.0 Anju Babu 11/06/2019
*****************************************************************************************************/
var urlArray = [{
"Name": "CREATE",
"SuitletId": "customscript_trus73_sl_create_je_entry",
"DeploymentId": "customdeploy_trus73_sl_create_je_entry",
"Link": ""
},
{
"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/runtime'],
function(record, search, serverWidget, url, 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
*/
function onRequest(context) {
try {
for (var i = 0; i < urlArray.length; i++) {
urlArray[i]['Link'] = url.resolveScript({
scriptId: urlArray[i]['SuitletId'],
deploymentId: urlArray[i]['DeploymentId'],
returnExternalUrl: false
});
}
// to create form
if (context.request.method == 'GET') {
var form = serverWidget.createForm({
title: ' Subsidiary Journal '
});
form.clientScriptFileId = 667;
var date = form.addField({
id: "date",
type: serverWidget.FieldType.DATE,
label: 'Date'
});
date.isMandatory = true;
var subsidiaryFrom = form.addField({
id: "subsidiary_from",
type: serverWidget.FieldType.SELECT,
label: 'Subsidiary From',
source: "subsidiary"
});
subsidiaryFrom.isMandatory = true;
var subsidiaryTo = form.addField({
id: "subsidiary_to",
type: serverWidget.FieldType.SELECT,
label: 'Subsidiary To',
source: "subsidiary"
});
subsidiaryTo.isMandatory = true;
if (subsidiaryFrom === subsidiaryTo) {
alert("Please select different subsidiary.");
subsidiaryFrom.defaultValue = ' ';
subsidiaryTo.defaultValue = ' ';
}
var currency = form.addField({
id: "currency",
type: serverWidget.FieldType.SELECT,
label: 'Currency',
source: "currency"
});
currency.isMandatory = true;
var amount = form.addField({
id: "amount",
type: serverWidget.FieldType.CURRENCY,
label: 'Amount'
});
amount.isMandatory = true;
var headerMemo = form.addField({
id: "header_memo",
type: serverWidget.FieldType.TEXT,
label: 'Header Memo'
});
headerMemo.isMandatory = true;
var lineMemo = form.addField({
id: "line_memo",
type: serverWidget.FieldType.TEXT,
label: 'Line Memo'
});
var fundNumber = form.addField({
id: "fund_number",
type: serverWidget.FieldType.SELECT,
label: 'Fund Number',
source: "customrecord_cseg5"
});
var fundNumberTgf = form.addField({
id: "fund_send",
type: serverWidget.FieldType.SELECT,
label: 'Fund Number Send/TGF',
source: "customrecord_cseg5"
});
fundNumberTgf.isMandatory = true;
fundNumber.isMandatory = true;
form.addSubmitButton({
id: 'buttonid',
label: 'Create '
});
form.addButton({
id: 'buttonid',
label: 'LIST',
functionName: 'backAction'
});
context.response.writePage(form);
}
if (context.request.method == 'POST') {
// to get the user
var userObj = runtime.getCurrentUser();
log.debug({
title: 'user',
details: userObj
});
var userId = userObj.id;
// to get the details...
var dateOfJE = context.request.parameters.date;
var subsidiaryOfFrom = context.request.parameters.subsidiary_from;
var subsidiaryOfTo = context.request.parameters.subsidiary_to;
var currencyOfJE = context.request.parameters.currency;
log.debug('currencyOfJE', currencyOfJE);
var amountOfJE = context.request.parameters.amount;
var headerMemoOfJE = context.request.parameters.header_memo;
var lineMemoOfJE = context.request.parameters.line_memo;
var fundNumberJE = context.request.parameters.fund_number;
var fundNumberTGF = context.request.parameters.fund_send;
if (lineMemoOfJE == null || lineMemoOfJE == undefined || lineMemoOfJE == "" || lineMemoOfJE == " ")
lineMemoOfJE = null;
var virtualAccount;
var accountSearchObj = search.create({
type: "account",
filters: [
["custrecord_virtual_currency", "anyof", currencyOfJE]
],
columns: [
search.createColumn({ name: "internalid", label: "Internal ID" }),
search.createColumn({
name: "name",
sort: search.Sort.ASC,
label: "Name"
}),
search.createColumn({ name: "type", label: "Account Type" }),
search.createColumn({ name: "description", label: "Description" }),
search.createColumn({ name: "balance", label: "Balance" }),
search.createColumn({ name: "custrecord_virtual_currency", label: "Virtual Currency" }),
search.createColumn({ name: "cseg5", label: "Fund Number" })
]
});
var searchResultCount = accountSearchObj.runPaged().count;
log.debug("accountSearchObj result count", searchResultCount);
accountSearchObj.run().each(function(result) {
virtualAccount = result.getValue({
name: "internalid",
label: "Internal ID"
})
});
var jornalID;
if (searchResultCount > 0) {
if (subsidiaryOfFrom != subsidiaryOfTo) {
if (subsidiaryOfFrom) {
//Fromsubsidiary creation
var journalEntryRecord = record.create({
type: 'journalentry',
isDynamic: true
});
// to set the body fields
journalEntryRecord.setText({
fieldId: 'trandate',
text: dateOfJE
})
journalEntryRecord.setValue({
fieldId: 'subsidiary',
value: subsidiaryOfFrom
})
journalEntryRecord.setValue({
fieldId: 'currency',
value: currencyOfJE
})
journalEntryRecord.setValue({
fieldId: 'memo',
value: headerMemoOfJE
})
journalEntryRecord.setValue({
fieldId: 'custbody_fund_num_send',
value: fundNumberJE
})
journalEntryRecord.setValue({
fieldId: 'custbody_jj_created_by',
value: userId
})
// to set line values
//debit
var AccountFrom = ["266", "293", virtualAccount, virtualAccount, "293", "266"]; //346;
log.debug("subsidiaryOfFrom", subsidiaryOfFrom);
var subnettingValue = searchSubnetting(subsidiaryOfFrom);
var fundNumFrom = [fundNumberJE, fundNumberTGF, fundNumberTGF, fundNumberJE, subnettingValue, subnettingValue];
//var creditAccountFrom = [293, currencyAccnt, 266]; //286;
for (var k = 0; k < AccountFrom.length - 3; k++) {
log.debug('debit', AccountFrom[(2 * k)])
log.debug('credit', AccountFrom[(2 * k) + 1])
var selectLine = journalEntryRecord.selectNewLine({
sublistId: 'line'
});
//Debit line field Values
journalEntryRecord.setCurrentSublistValue({
sublistId: 'line',
value: AccountFrom[(2 * k)], //Debit Account Id
fieldId: 'account'
});
journalEntryRecord.setCurrentSublistValue({
sublistId: 'line',
value: amountOfJE, //Amount of checque
fieldId: 'debit'
});
// memo
journalEntryRecord.setCurrentSublistValue({
sublistId: 'line',
value: lineMemoOfJE, //Amount of checque
fieldId: 'memo'
});
//cseg5
journalEntryRecord.setCurrentSublistValue({
sublistId: 'line',
value: fundNumFrom[(2 * k)], //Amount of checque
fieldId: 'cseg5'
});
journalEntryRecord.commitLine({ sublistId: 'line' });
// virtual account
var selectLine = journalEntryRecord.selectNewLine({
sublistId: 'line'
});
//Credit line field Values
journalEntryRecord.setCurrentSublistValue({
sublistId: 'line',
value: AccountFrom[(2 * k) + 1], //Credit Account Id
fieldId: 'account'
});
journalEntryRecord.setCurrentSublistValue({
sublistId: 'line',
value: amountOfJE, //Amount of checque
fieldId: 'credit'
});
// memo
journalEntryRecord.setCurrentSublistValue({
sublistId: 'line',
value: lineMemoOfJE, //Amount of checque
fieldId: 'memo'
});
//cseg5
journalEntryRecord.setCurrentSublistValue({
sublistId: 'line',
value: fundNumFrom[(2 * k) + 1], //Amount of checque
fieldId: 'cseg5'
});
journalEntryRecord.commitLine({ sublistId: 'line' });
}
log.debug('journalEntryRecord', journalEntryRecord);
// to set the User created By
journalEntryRecord.setValue({
fieldId: 'custbody_jj_created_by',
value: userId
})
jornalID = journalEntryRecord.save({
ignoreMandatoryFields: true
});
log.debug('jornalID', jornalID);
}
if (subsidiaryOfTo) {
//Tosubsidiary joournal creation
var journalEntryRecordTo = record.create({
type: 'journalentry',
isDynamic: true
});
// to set the body fields
journalEntryRecordTo.setText({
fieldId: 'trandate',
text: dateOfJE
})
journalEntryRecordTo.setValue({
fieldId: 'subsidiary',
value: subsidiaryOfTo
})
journalEntryRecordTo.setValue({
fieldId: 'currency',
value: currencyOfJE
})
journalEntryRecordTo.setValue({
fieldId: 'memo',
value: headerMemoOfJE
})
journalEntryRecordTo.setValue({
fieldId: 'custbody_fund_num_send',
value: fundNumberJE
})
// to set the User created By
journalEntryRecordTo.setValue({
fieldId: 'custbody_jj_created_by',
value: userId
})
journalEntryRecord.setValue({
fieldId: 'custbody_jj_created_by',
value: userId
})
// journalEntryRecord.setValue({
// fieldId: 'custbody_fund_num_send',
// value: fundNumberSendOfJE
// })
// to set line values
//debit
var AccountTo = [virtualAccount, virtualAccount, "266", "293"]; //286;
var fundNumTo = [fundNumberJE, "393", "393", fundNumberJE];
for (var n = 0; n < AccountTo.length - 2; n++) {
var selectLine = journalEntryRecordTo.selectNewLine({
sublistId: 'line'
});
//Debit line field Values
journalEntryRecordTo.setCurrentSublistValue({
sublistId: 'line',
value: AccountTo[(2 * n)], //Debit Account Id
fieldId: 'account'
});
journalEntryRecordTo.setCurrentSublistValue({
sublistId: 'line',
value: amountOfJE, //Amount of checque
fieldId: 'debit'
});
// memo
journalEntryRecordTo.setCurrentSublistValue({
sublistId: 'line',
value: lineMemoOfJE, //Amount of checque
fieldId: 'memo'
});
//cseg5
journalEntryRecordTo.setCurrentSublistValue({
sublistId: 'line',
value: fundNumTo[(2 * n)], //Amount of checque
fieldId: 'cseg5'
});
journalEntryRecordTo.commitLine({ sublistId: 'line' });
// virtual account
var selectLine = journalEntryRecordTo.selectNewLine({ sublistId: 'line' });
//Credit line field Values
journalEntryRecordTo.setCurrentSublistValue({
sublistId: 'line',
value: AccountTo[(2 * n) + 1], //Credit Account Id
fieldId: 'account'
});
journalEntryRecordTo.setCurrentSublistValue({
sublistId: 'line',
value: amountOfJE, //Amount of checque
fieldId: 'credit'
});
// memo
journalEntryRecordTo.setCurrentSublistValue({
sublistId: 'line',
value: lineMemoOfJE, //Amount of checque
fieldId: 'memo'
});
//cseg5
journalEntryRecordTo.setCurrentSublistValue({
sublistId: 'line',
value: fundNumTo[(2 * n) + 1], //Amount of checque
fieldId: 'cseg5'
});
journalEntryRecordTo.commitLine({ sublistId: 'line' });
}
jornalIDTo = journalEntryRecordTo.save({
ignoreMandatoryFields: true
});
}
// to get the URl
if (jornalIDTo && jornalID) {
var JE_RECORD = record.load({
type: "journalentry",
id: jornalID,
isDynamic: false,
});
JE_RECORD.setValue({
fieldId: 'custbody_jj_child_destination',
value: jornalIDTo
})
var JE_JOURNAL_FROM = JE_RECORD.save({
ignoreMandatoryFields: true
});
var JE_RECORD_TO = record.load({
type: "journalentry",
id: jornalIDTo,
isDynamic: false,
});
JE_RECORD_TO.setValue({
fieldId: 'custbody_jj_source_of_origin',
value: jornalID
})
var JE_JOURNAL_TO = JE_RECORD_TO.save({
ignoreMandatoryFields: true
});
var htmlCode = '<html><head></head><body><script>confirm("Success fully created Journal Entry. Internal ID of Journal entries are ' + JE_JOURNAL_TO + ' & ' + JE_JOURNAL_FROM + '");window.location.href ="' + urlArray[1]['Link'] + '"</script></body></html>';
} else
var htmlCode = '<html><head></head><body><script>confirm("Sorry we could not create Journal Entry ")window.location.href ="' + urlArray[0]['Link'] + '"</script></body></html>';
context.response.write(htmlCode);
} else {
var htmlCode = '<html><head></head><body><script>confirm("Please enter different subsidiaries ");window.location.href ="' + urlArray[0]['Link'] + '"</script></body></html>';
context.response.write(htmlCode);
}
} else {
var htmlCodeFRom = '<html><head></head><body><script>confirm("Sorry we could not create Journal Entry due to no virtual account for the selected currency ");window.location.href ="' + urlArray[0]['Link'] + '"</script></body></html>';
log.debug("else inn", htmlCodeFRom)
context.response.write(htmlCodeFRom);
}
}
} catch (e) {
log.debug("Err@ onRequest FN ", e);
log.error("Err@ onRequest FN ", e);
//console.log("Err@ FN =",e);
}
}
function searchSubnetting(subsidiaryOfFrom) {
log.debug("subsidiaryOfFrom", subsidiaryOfFrom);
var customrecord_cseg5SearchObj = search.create({
type: "customrecord_cseg5",
filters: [
["custrecord_fund_subsidiary", "anyof", subsidiaryOfFrom]
],
columns: [
search.createColumn({ name: "internalid", label: "Internal ID" }),
search.createColumn({
name: "name",
sort: search.Sort.ASC,
label: "Name"
}),
search.createColumn({ name: "custrecord_fund_subsidiary", label: "Fund Subsidiary" })
]
});
var searchResultCount = customrecord_cseg5SearchObj.runPaged().count;
log.debug("customrecord_cseg5SearchObj result count", searchResultCount);
var subnetting;
customrecord_cseg5SearchObj.run().each(function(result) {
// .run().each has a limit of 4,000 results
subnetting = result.getValue(customrecord_cseg5SearchObj.columns[0]);
return true;
});
log.debug("subnetting", subnetting);
return subnetting;
}
return {
onRequest: onRequest
};
});