Jira Code: TRS-149
Description:
We can view the loaded CASH SALE 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 CASH SALE. And we can show the GL impact using ‘GL Impact’ button.
SUITE LET
/**
*@NApiVersion 2.x
*@NScriptType Suitelet
*/
/** Script Description
* .
******************************************************************************************************
TRUST BRIDGE GLOBAL
View the CASH SALE page for the id
******************************************************************************************************
* Date: 09/07/2019
*
* Author: Jobin & Jismi IT Services LLP
*
* Revision 1.0 Anju Babu 09/07/2019
*****************************************************************************************************/
var urlArray = [{
"Name": "LIST",
"SuitletId": "customscript_trs151_sl_list_of_cs",
"DeploymentId": "customdeploy_trs151_sl_list_of_cs",
"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; //'692';
log.debug('recId', recId);
var cashRecList = main.getData(recId);
if (cashRecList != false) {
/*log.debug('cashRecList', cashRecList);*/
for (var key in cashRecList) {
var cashArrRec = cashRecList['cashRec'];
var journalArr = cashRecList['journal'];
var form = serverWidget.createForm({
title: 'CASH SALE #' + cashArrRec[0].tranid + ' |' + cashArrRec[0].customer
});
form.clientScriptFileId = 685;
var date = form.addField({
id: "date",
type: serverWidget.FieldType.DATE,
label: 'Date'
});
date.defaultValue = cashArrRec[0].date;
date.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var customer = form.addField({
id: "customer",
type: serverWidget.FieldType.TEXT,
label: 'Customer',
source: "customer"
});
customer.defaultValue = cashArrRec[0].customer;
customer.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var currency = form.addField({
id: "currency",
type: serverWidget.FieldType.TEXT,
label: 'Currency',
source: "currency"
});
currency.defaultValue = cashArrRec[0].Currency;
currency.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var CustomerfundNumber = form.addField({
id: "customer_fund_num",
type: serverWidget.FieldType.TEXT,
label: 'Customer Fund Number',
source: "customrecord_cseg5"
});
CustomerfundNumber.defaultValue = cashArrRec[0].cusFund;
CustomerfundNumber.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var account = form.addField({
id: "account",
type: serverWidget.FieldType.TEXT,
label: ' Account'
});
account.defaultValue = cashArrRec[0].account;
account.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var amount = form.addField({
id: "amount",
type: serverWidget.FieldType.TEXT,
label: 'Amount'
});
amount.defaultValue = cashArrRec[0].Amount;
amount.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var journalId = form.addField({
id: "journalid",
type: serverWidget.FieldType.TEXT,
label: 'Related journal'
});
journalId.defaultValue = cashArrRec[0].journalId[0];
journalId.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
if ((cashArrRec[0].journalId).length > 0) {
log.debug('test', 'test');
var headerMemo = form.addField({
id: "header_memo",
type: serverWidget.FieldType.TEXT,
label: ' Memo from journal'
});
headerMemo.defaultValue = journalArr[0].memo;
headerMemo.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var fundNumber = form.addField({
id: "fund_num",
type: serverWidget.FieldType.TEXT,
label: 'Fund Number ',
source: "customrecord_cseg5"
});
fundNumber.defaultValue = journalArr[0].fund;
fundNumber.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var fundAssessmentExpenses = form.addField({
id: "fund_assessment",
type: serverWidget.FieldType.TEXT,
label: 'Fund Assessment Expenses'
});
fundAssessmentExpenses.defaultValue = journalArr[0].fundAssessmentExpenses;
fundAssessmentExpenses.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var fundAssessmentRevenue = form.addField({
id: "fund_revenue",
type: serverWidget.FieldType.TEXT,
label: 'Fund Assessment Revenue'
});
fundAssessmentRevenue.defaultValue = journalArr[0].fundAssessmentRevenue;
fundAssessmentRevenue.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
}
var createdBy = form.addField({
id: "createdby_received",
type: serverWidget.FieldType.TEXT,
label: 'Created By',
source: "customrecord_cseg5"
});
createdBy.defaultValue = cashArrRec[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"
});
modifiedBy.defaultValue = cashArrRec[0].modifiedBy;
modifiedBy.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var screen = form.addField({
id: "custom_screen",
type: serverWidget.FieldType.TEXT,
label: 'Screen Source'
});
//source.isMandatory = true;
screen.defaultValue = cashArrRec[0].screen;
screen.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
//Showing Cash sale itemlines
var sublistCash = form.addSublist({
id: 'custpage_table',
type: serverWidget.SublistType.STATICLIST,
label: 'Items'
});
sublistCash.addField({
id: 'custpage_csitem',
label: 'Item',
type: serverWidget.FieldType.TEXT
});
sublistCash.addField({
id: 'custpage_csqty',
label: 'Quantity ',
type: serverWidget.FieldType.TEXT
});
sublistCash.addField({
id: 'custpage_csamount',
label: 'Amount',
type: serverWidget.FieldType.TEXT
});
//Journal lines show
var sublistJournal = form.addSublist({
id: 'custpage_table1',
type: serverWidget.SublistType.STATICLIST,
label: 'Related Journal Lines'
});
sublistJournal.addField({
id: 'custpage_jeaacount',
label: 'Account',
type: serverWidget.FieldType.TEXT
});
sublistJournal.addField({
id: 'custpage_jedebit',
label: 'Debit',
type: serverWidget.FieldType.TEXT
});
sublistJournal.addField({
id: 'custpage_jecredit',
label: 'Credit ',
type: serverWidget.FieldType.TEXT
});
sublistJournal.addField({
id: 'custpage_jefund',
label: 'Fund Number ',
type: serverWidget.FieldType.TEXT
});
sublistJournal.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: 'listofCashsale'
});
// To edit the current journal ,click the button
var edit = form.addButton({
id: 'buttoneditid',
label: 'EDIT',
functionName: 'cashEdit'
});
var glImpact = form.addButton({
id: 'buttonid_glimpact',
label: 'GL Impact',
functionName: 'cashglImpact'
});
//cash item lines
var cashitemArr = cashRecList['cashitem'];
/*log.debug('cashArrRec', cashArrRec);*/
log.debug('cashitemArr', cashitemArr);
log.debug('outfor', cashitemArr[0].item)
log.debug('cashitemArr.length', cashitemArr.length)
if (cashitemArr.length > 0) {
for (var k = 0; k < cashitemArr.length; k++) {
log.debug('k', k);
sublistCash.setSublistValue({
id: 'custpage_csitem',
line: k,
value: cashitemArr[k].item //|| 'null'
});
log.debug('infor', cashitemArr[k].item)
sublistCash.setSublistValue({
id: 'custpage_csqty',
line: k,
value: cashitemArr[k].quantity //|| 'null'
});
sublistCash.setSublistValue({
id: 'custpage_csamount',
line: k,
value: cashitemArr[k].amount //|| 'null'
});
}
}
//end cash item lines
//start journal lines
if (journalArr.length > 0) {
log.debug('outfor', journalArr[1].accnt);
for (var i = 1; i < journalArr.length; i++) {
log.debug('infor', journalArr[i].accnt)
sublistJournal.setSublistValue({
id: 'custpage_jeaacount',
line: i - 1,
value: journalArr[i].accnt || 'null'
});
sublistJournal.setSublistValue({
id: 'custpage_jedebit',
line: i - 1,
value: journalArr[i].debit || 'null'
});
sublistJournal.setSublistValue({
id: 'custpage_jecredit',
line: i - 1,
value: journalArr[i].credit || 'null'
});
sublistJournal.setSublistValue({
id: 'custpage_jefund',
line: i - 1,
value: journalArr[i].fundNum || 'null'
});
sublistJournal.setSublistValue({
id: 'custpage_jememo',
line: i - 1,
value: journalArr[i].Line || 'null'
});
}
}
//end of journal lines
}
context.response.writePage(form);
} else {
var htmlCode = '<html><head></head><body><script>confirm("Sorry we could not find cashsale ");window.location.href ="' + urlArray[0]['Link'] + '"</script></body></html>';
context.response.write(htmlCode);
}
}
},
getData: function(recId) {
var cashArr = {};
var recArr = []
var cashRec = record.load({
type: "cashsale",
id: recId,
isDynamic: true,
});
var fundNum = '';
var date = cashRec.getValue({
fieldId: 'trandate'
});
var customer = cashRec.getText({
fieldId: 'entity'
});
var Currency = cashRec.getText({
fieldId: 'currency'
});
/*var fundnumber = cashRec.getText({
fieldId: 'cseg5'
});*/
var account = cashRec.getText({
fieldId: 'account'
});
var amount = cashRec.getSublistText({
sublistId: 'item',
fieldId: 'amount',
line: 0
});
var journalId = cashRec.getText({
fieldId: 'custbody_jj_child_destination'
});
//To get customer fund number
var customerId = cashRec.getValue({
fieldId: 'entity'
});
var cusfundnumber = search.lookupFields({
type: 'customer', //The intended record type
id: customerId, //Record ID
columns: ['cseg5'] //Desired joined field referenced_record.desired_field
});
fundNum = cusfundnumber.cseg5;
log.debug(fundNum, fundNum)
//source and destination
/*var source = cashRec.getText({
fieldId: 'custbody_jj_source_of_origin'
});
var destination = cashRec.getText({
fieldId: 'custbody_jj_child_destination'
});*/
if (fundNum.length > 0) {
fundNum = fundNum[0].text;
} else {
fundNum = fundNum;
}
recArr.push({
'date': date,
'customer': customer,
'Currency': Currency,
'account': account,
'Amount': amount,
'journalId': journalId,
'cusFund': fundNum,
'tranid': cashRec.getValue({ fieldId: 'tranid' }),
/*'source': source,
'destination': destination,*/
'modifiedBy': cashRec.getText({ fieldId: 'custbody_last_modifiedby' }),
'createdby': cashRec.getText({ fieldId: 'custbody_jj_created_by' }),
'screen': cashRec.getText({ fieldId: 'custbody_jj_screen_source' })
});
cashArr['cashRec'] = recArr;
var lineItemCash = {};
var numLinesCash = cashRec.getLineCount({
sublistId: 'item'
});
var itemArr = [];
if (numLinesCash > 0) {
for (var m = 0; m < numLinesCash; m++) {
lineItemCash.item = cashRec.getSublistText({
sublistId: 'item',
fieldId: 'item',
line: m
});
lineItemCash.quantity = cashRec.getSublistText({
sublistId: 'item',
fieldId: 'quantity',
line: m
});
lineItemCash.amount = cashRec.getSublistText({
sublistId: 'item',
fieldId: 'amount',
line: m
});
itemArr.push(lineItemCash);
lineItemCash = {};
log.debug('lineItemCash', itemArr);
}
}
cashArr['cashitem'] = itemArr;
var journalIdNum = cashRec.getValue({
fieldId: 'custbody_jj_child_destination'
});
log.debug('journalIdNum', journalIdNum[0])
var journalArr = [];
//To get memo and journal lines
if (journalIdNum.length > 0) {
var journalRec = record.load({
type: "journalentry",
id: journalIdNum[0],
isDynamic: true,
});
var memo = journalRec.getText({
fieldId: 'memo'
});
var fundnumber= journalRec.getSublistText({
sublistId: 'line',
fieldId: 'cseg5',
line: 0
});
var fundAssessmentExpenses = journalRec.getSublistText({
sublistId: 'line',
fieldId: 'account',
line: 2
});
var fundAssessmentRevenue = journalRec.getSublistText({
sublistId: 'line',
fieldId: 'account',
line: 5
});
//memo from the journalentry
journalArr.push({
'memo': memo,
'fund': fundnumber,
'fundAssessmentExpenses': fundAssessmentExpenses,
'fundAssessmentRevenue': fundAssessmentRevenue
});
var lineItem = {};
var numLines = journalRec.getLineCount({
sublistId: 'line'
});
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
});
journalArr.push(lineItem);
lineItem = {};
/*log.debug('journalArrinside', journalArr);*/
}
}
}
cashArr['journal'] = journalArr;
/*log.debug('cashArrjournal', cashArr['journal']);*/
log.debug('cashArr', cashArr);
return cashArr;
}
}
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 cash sale
******************************************************************************************************
* Date: 10/07/2019
*
* Author: Jobin & Jismi IT Services LLP
*
* Revision 1.0 Anju Babu 10/07/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;
if (fieldIdSub == 'journalid' ) {
log.debug('currentRec', currentRec);
var journal = currentRec.getValue({
fieldId: 'journalid'
});
if (journal == null) {
alert('Sorry we could not find related journal for this cash sale ');
}
}
}
function listofCashsale(context) {
// Load the list page
var urlOfScript = url.resolveScript({
scriptId: 'customscript_trs151_sl_list_of_cs',
deploymentId: 'customdeploy_trs151_sl_list_of_cs',
returnExternalUrl: false
});
window.location.href = (urlOfScript);
}
function cashEdit(context) {
log.debug('context', context);
var Id = getParameterByName('recid'); // '39'
var urlOfScript = url.resolveScript({
scriptId: 'customscript_trs150_jj_sl_editofcs',
deploymentId: 'customdeploy_trs150',
returnExternalUrl: false
});
window.location.href = (urlOfScript) + '&recid=' + Id;
}
function cashglImpact(context) {
log.debug('context', context);
var cashId = getParameterByName('recid');
var conpanyid = '5432341_SB1'
var http = 'https://';
var urlComponents = '/app/accounting/transactions/impact.nl?trantype=cashsale&searchid=-36&Transaction_INTERNALID=' + cashId + '&Transaction_INTERNALIDtype=ANYOF&label=Cash+Sale'
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,
listofCashsale: listofCashsale,
cashEdit: cashEdit,
cashglImpact: cashglImpact,
//fieldChanged: fieldChanged
}
});