By default NetSuite functionality, in order to write a check, a bill payment record has to be created and then a check record has to be created. From this check record, a cheque can be printed. In our custom functionality, all these steps are done automatically and check is written. The bills which are unpaid will be listed and these bills can be selected for which the cheque has to be written. On clicking submit button corresponding cheques will be created and displayed.
Suitelet
/**
* @NApiVersion 2.x
* @NScriptType Suitelet
* @NModuleScope SameAccount
*/
/**
*
* Project :CHESTNUT
*
* Author : Jobin and Jismi IT services LLP
*
* Created : :JOHN-11 JJ SL Custom Bill Payments Page
* updated :1/5/2018 :JOHN-53 bill payment/adding approved amount column
*
*
*/
define(['N/https', 'N/record', 'N/runtime', 'N/search', 'N/ui/serverWidget'],
/**
* @param {https} https
* @param {record} record
* @param {runtime} runtime
* @param {search} search
* @param {serverWidget} serverWidget
*/
function(https, record, runtime, search, serverWidget) {
/**
*
* 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) {
if (context.request.method === 'GET') {
try {
form = serverWidget.createForm({
title: 'Bill Payments '
});
var addnewcustomer = form.addFieldGroup({
id: 'fieldgroupidexisting',
label: 'Primary Information'
});
var apaccount = form.addField({
id: 'textfield_apaccount',
type: serverWidget.FieldType.SELECT,
label: 'A/P ACCOUNT',
container: 'fieldgroupidexisting'
});
apaccount.defaultValue = 113;
var userObj = runtime.getCurrentUser();
log.debug({ title: "userObj", details: userObj })
var role = userObj.role;
var subsidiary = userObj.subsidiary;
var empid = userObj.id;
apaccount = addpayableaccounts(apaccount);
var vendor = context.request.parameters.vendorid;
var billobj = findpayables(113, "", "", empid, role, vendor);
log.debug({ title: "billobj", details: billobj });
var account = form.addField({
id: 'textfield_account',
type: serverWidget.FieldType.SELECT,
label: 'ACCOUNT',
container: 'fieldgroupidexisting'
});
var defaccount = addaccountlist(role, empid, subsidiary, account);
// account.defaultValue = 1297;
var balance = form.addField({
id: 'textfield_balance',
type: serverWidget.FieldType.TEXT,
label: 'Balance',
container: 'fieldgroupidexisting'
});
balance.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
balance.updateDisplaySize({
height: 60,
width: 34.8
});
var date = form.addField({
id: 'textfield_date',
type: serverWidget.FieldType.DATE,
label: 'Date',
container: 'fieldgroupidexisting'
});
date.updateBreakType({
breakType: serverWidget.FieldBreakType.STARTCOL
});
date.updateDisplaySize({
height: 60,
width: 120
});
date.updateLayoutType({
layoutType: serverWidget.FieldLayoutType.STARTROW
});
var postingperiod = form.addField({
id: 'textfield_posting',
type: serverWidget.FieldType.SELECT,
label: 'Postingperiod',
container: 'fieldgroupidexisting'
});
postingperiod.updateLayoutType({
layoutType: serverWidget.FieldLayoutType.ENDROW
});
postingperiod.updateDisplaySize({
height: 60,
width: 120
});
var cheque = form.addField({
id: 'textfield_cheque',
type: serverWidget.FieldType.TEXT,
label: 'Starting Check #',
container: 'fieldgroupidexisting'
});
cheque.updateLayoutType({
layoutType: serverWidget.FieldLayoutType.STARTROW
});
cheque.updateDisplaySize({
height: 60,
width: 14.3
});
var chequeending = form.addField({
id: 'textfield_chequeend',
type: serverWidget.FieldType.TEXT,
label: 'Ending Check #',
container: 'fieldgroupidexisting'
});
chequeending.updateLayoutType({
layoutType: serverWidget.FieldLayoutType.ENDROW
});
chequeending.updateDisplaySize({
height: 60,
width: 14.3
});
chequeending.updateDisplayType({
displayType: serverWidget.FieldDisplayType.DISABLED
});
var payeee = form.addField({
id: 'textfield_payee',
type: serverWidget.FieldType.SELECT,
label: 'Payee',
source: 'vendor',
container: 'fieldgroupidexisting'
})
payeee.updateDisplaySize({
height: 60,
width: 34.8
});
addposting(postingperiod)
// var startdate = form.addField({
// id: 'textfield_startdate',
// type: serverWidget.FieldType.DATE,
// label: 'Start Date',
// container: 'fieldgroupidexisting'
// });
// var enddate = form.addField({
// id: 'textfield_enddate',
// type: serverWidget.FieldType.DATE,
// label: 'End Date',
// container: 'fieldgroupidexisting'
// });
// var amount = form.addField({
// id: 'textfield_amount',
// type: serverWidget.FieldType.TEXT,
// label: 'Amount',
// container: 'fieldgroupidexisting'
// });
// amount.updateDisplayType({
// displayType: serverWidget.FieldDisplayType.DISABLED
// });
var addnewcustomer = form.addFieldGroup({
id: 'fieldgroupidclass',
label: 'Classification'
});
var newsub = form.addSublist({
id: 'sublistidbilldetails',
type: serverWidget.SublistType.LIST,
label: 'Bill Details'
});
// newsub.addButton({
// id: 'buttoncheckall',
// label: 'Select All',
// functionName: 'processcheckbox'
// });
newsub.addMarkAllButtons();
var checkbox = newsub.addField({
id: 'custpage_check',
label: 'check',
type: serverWidget.FieldType.CHECKBOX
});
checkbox.updateDisplayType({ displayType: serverWidget.FieldDisplayType.ENTRY });
var internalid = newsub.addField({
id: 'custpage_internalid',
label: 'Hidden',
type: serverWidget.FieldType.TEXT
});
internalid.updateDisplayType({ displayType: serverWidget.FieldDisplayType.HIDDEN });
// <style> p.ex1 { margin-left: 10%; } </style>
var duedate = newsub.addField({
id: 'custpage_duedate',
label: 'DUE DATE',
type: serverWidget.FieldType.TEXT
});
duedate.updateDisplayType({ displayType: serverWidget.FieldDisplayType.DISABLED });
var bill = newsub.addField({
id: 'custpage_bill',
label: 'Bill',
type: serverWidget.FieldType.TEXT
});
bill.updateDisplayType({ displayType: serverWidget.FieldDisplayType.HIDDEN });
var vendorid = newsub.addField({
id: 'custpage_vendorid',
label: 'Vendorid',
type: serverWidget.FieldType.TEXT
});
vendorid.updateDisplayType({ displayType: serverWidget.FieldDisplayType.HIDDEN });
var vendor = newsub.addField({
id: 'custpage_vendor',
label: 'Vendor',
type: serverWidget.FieldType.TEXT
});
vendor.updateDisplayType({ displayType: serverWidget.FieldDisplayType.DISABLED });
var vendorinternalid = newsub.addField({
id: 'custpage_vendorint',
label: 'Vendor',
type: serverWidget.FieldType.TEXT
});
vendorinternalid.updateDisplayType({ displayType: serverWidget.FieldDisplayType.HIDDEN });
var reference = newsub.addField({
id: 'custpage_reference',
label: 'Invoice Number',
type: serverWidget.FieldType.TEXT
});
reference.updateDisplayType({ displayType: serverWidget.FieldDisplayType.DISABLED });
var orgamount = newsub.addField({
id: 'custpage_amount',
label: 'Orginal Amount',
type: serverWidget.FieldType.TEXT
});
orgamount.updateDisplayType({ displayType: serverWidget.FieldDisplayType.DISABLED });
var dueamount = newsub.addField({
id: 'custpage_dueamount',
label: 'Amount due',
type: serverWidget.FieldType.TEXT
});
var approvedAmount = newsub.addField({
id: 'custpage_upy_approved_payment',
label: 'Approved amount',
type: serverWidget.FieldType.TEXT
});
dueamount.updateDisplayType({ displayType: serverWidget.FieldDisplayType.DISABLED });
var payment = newsub.addField({
id: 'custpage_payment',
label: 'Payment',
type: serverWidget.FieldType.TEXT
});
payment.updateDisplayType({ displayType: serverWidget.FieldDisplayType.ENTRY });
var set = setsublist(billobj, newsub);
form.clientScriptFileId = '1999';
form.addSubmitButton({
label: 'Save and Print '
});
context.response.writePage(form);
} catch (e) {
log.debug({ details: e, title: "e" });
}
}
}
return {
onRequest: onRequest
};
/*Add payables account to the payable dropdown list*/
function addpayableaccounts(field) {
try {
var accountSearchObj = search.create({
type: "account",
filters: [
["type", "anyof", "AcctPay"]
],
columns: [
search.createColumn({
name: "name",
sort: search.Sort.ASC
})
]
});
var searchResultCount = accountSearchObj.runPaged().count;
var search_run = accountSearchObj.run().getRange({
start: 0,
end: 1000
});
if (search_run.length > 0) {
field.addSelectOption({
value: 0,
text: " "
});
for (var i = 0; i < search_run.length; i++) {
var name = search_run[i].getValue({
name: 'name'
});
var id = search_run[i].id;
field.addSelectOption({
value: id,
text: name
});
}
}
return field;
} catch (e) {
log.debug({ title: "e", details: e });
}
}
/*add select fied to posting period*/
function addposting(field) {
try {
var post = [{ "value": "54", "text": "Jan 2014" }, { "value": "55", "text": "Feb 2014" }, { "value": "56", "text": "Mar 2014" }, { "value": "58", "text": "Apr 2014" }, { "value": "59", "text": "May 2014" }, { "value": "60", "text": "Jun 2014" }, { "value": "62", "text": "Jul 2014" }, { "value": "63", "text": "Aug 2014" }, { "value": "64", "text": "Sep 2014" }, { "value": "66", "text": "Oct 2014" }, { "value": "67", "text": "Nov 2014" }, { "value": "68", "text": "Dec 2014" }, { "value": "37", "text": "Jan 2015" }, { "value": "38", "text": "Feb 2015" }, { "value": "39", "text": "Mar 2015" }, { "value": "41", "text": "Apr 2015" }, { "value": "42", "text": "May 2015" }, { "value": "43", "text": "Jun 2015" }, { "value": "45", "text": "Jul 2015" }, { "value": "46", "text": "Aug 2015" }, { "value": "47", "text": "Sep 2015" }, { "value": "49", "text": "Oct 2015" }, { "value": "50", "text": "Nov 2015" }, { "value": "51", "text": "Dec 2015" }, { "value": "20", "text": "Jan 2016" }, { "value": "21", "text": "Feb 2016" }, { "value": "22", "text": "Mar 2016" }, { "value": "24", "text": "Apr 2016" }, { "value": "25", "text": "May 2016" }, { "value": "26", "text": "Jun 2016" }, { "value": "28", "text": "Jul 2016" }, { "value": "29", "text": "Aug 2016" }, { "value": "30", "text": "Sep 2016" }, { "value": "32", "text": "Oct 2016" }, { "value": "33", "text": "Nov 2016" }, { "value": "34", "text": "Dec 2016" }, { "value": "3", "text": "Jan 2017" }, { "value": "4", "text": "Feb 2017" }, { "value": "5", "text": "Mar 2017" }, { "value": "7", "text": "Apr 2017" }, { "value": "8", "text": "May 2017" }, { "value": "9", "text": "Jun 2017" }, { "value": "11", "text": "Jul 2017" }, { "value": "12", "text": "Aug 2017" }, { "value": "13", "text": "Sep 2017" }, { "value": "15", "text": "Oct 2017" }, { "value": "16", "text": "Nov 2017" }, { "value": "17", "text": "Dec 2017" }, { "value": "71", "text": "Jan 2018" }, { "value": "72", "text": "Feb 2018" }, { "value": "73", "text": "Mar 2018" }, { "value": "75", "text": "Apr 2018" }, { "value": "76", "text": "May 2018" }, { "value": "77", "text": "Jun 2018" }, { "value": "79", "text": "Jul 2018" }, { "value": "80", "text": "Aug 2018" }, { "value": "81", "text": "Sep 2018" }, { "value": "83", "text": "Oct 2018" }, { "value": "84", "text": "Nov 2018" }, { "value": "85", "text": "Dec 2018" }, { "value": "88", "text": "Jan 2019" }, { "value": "89", "text": "Feb 2019" }, { "value": "90", "text": "Mar 2019" }, { "value": "92", "text": "Apr 2019" }, { "value": "93", "text": "May 2019" }, { "value": "94", "text": "Jun 2019" }, { "value": "96", "text": "Jul 2019" }, { "value": "97", "text": "Aug 2019" }, { "value": "98", "text": "Sep 2019" }, { "value": "100", "text": "Oct 2019" }, { "value": "101", "text": "Nov 2019" }, { "value": "102", "text": "Dec 2019" }, { "value": "105", "text": "Jan 2020" }, { "value": "106", "text": "Feb 2020" }, { "value": "107", "text": "Mar 2020" }, { "value": "109", "text": "Apr 2020" }, { "value": "110", "text": "May 2020" }, { "value": "111", "text": "Jun 2020" }, { "value": "113", "text": "Jul 2020" }, { "value": "114", "text": "Aug 2020" }, { "value": "115", "text": "Sep 2020" }, { "value": "117", "text": "Oct 2020" }, { "value": "118", "text": "Nov 2020" }, { "value": "119", "text": "Dec 2020" }, { "value": "122", "text": "Jan 2021" }, { "value": "123", "text": "Feb 2021" }, { "value": "124", "text": "Mar 2021" }, { "value": "126", "text": "Apr 2021" }, { "value": "127", "text": "May 2021" }, { "value": "128", "text": "Jun 2021" }, { "value": "130", "text": "Jul 2021" }, { "value": "131", "text": "Aug 2021" }, { "value": "132", "text": "Sep 2021" }, { "value": "134", "text": "Oct 2021" }, { "value": "135", "text": "Nov 2021" }, { "value": "136", "text": "Dec 2021" }];
for (var i = 0; i < post.length; i++) {
field.addSelectOption({
value: post[i].value,
text: post[i].text
});
}
} catch (e) {
log.debug({ title: "e", details: e });
}
}
/*Add account to the Drop down field */
function addaccountlist(role, empid, subsidiary, field) {
try {
var subsidiary = findsubsidiaryfilter(empid, role);
// var employeeSearchObj = search.create({
// type: "employee",
// filters: [
// ["internalidnumber", "equalto", empid],
// "AND", ["role.internalidnumber", "equalto", role]
// ],
// columns: [
// "altname",
// "role",
// "subsidiary",
// search.createColumn({
// name: "subsidiaries",
// join: "role"
// })
// ]
// });
// var searchResultCount = employeeSearchObj.runPaged().count;
// var subsidiaries = [];
// employeeSearchObj.run().each(function(result) {
// var sub = result.getValue({
// name: "subsidiaries",
// join: "role"
// });
// if (sub != null || sub != "" || sub != undefined)
// subsidiaries.push(sub);
// return true;
// });
// log.debug({ title: "subsidiaries", details: subsidiaries });
// if (subsidiaries[0] == "" || subsidiaries[0] == null) {
// subsidiaries = ["Chestnut Group"]
// }
// var subsidiary = ["subsidiary", "anyof"];
// for (var i = 0; i < subsidiaries.length; i++) {
// subsidiary.push(subsidiaries[i]);
// }
// // ["user.role", "anyof", role],
// // "AND",
log.debug({ details: subsidiary, title: "subsidiary" });
var accountSearchObj = search.create({
type: "account",
filters: [
["type", "anyof", "Bank"],
"AND", subsidiary
],
columns: [
search.createColumn({
name: "name",
sort: search.Sort.ASC
}),
"type",
"description",
"balance",
"internalid"
]
});
var searchResultCount = accountSearchObj.runPaged().count;
accountSearchObj.run().each(function(result) {
var accountstext = result.getValue({
name: "name"
});
var accountsvalue = result.getValue({
name: "internalid"
});
field.addSelectOption({
value: accountsvalue,
text: accountstext
});
return true;
});
} catch (e) {
log.debug({ title: "e", details: e });
}
}
/*for getting the bill details for adding into the custom sublist */
function findsubsidiaryfilter(empid, role) {
try {
var employeeSearchObj = search.create({
type: "employee",
filters: [
["internalidnumber", "equalto", empid],
"AND", ["role.internalidnumber", "equalto", role]
],
columns: [
"role",
"subsidiary",
search.createColumn({
name: "subsidiaries",
join: "role"
})
]
});
//var searchResultCount = employeeSearchObj.runPaged().count;
var searchResultCount = 1;
var subsidiaries = [];
employeeSearchObj.run().each(function(result) {
var sub = result.getValue({
name: "subsidiaries",
join: "role"
});
if (sub != null || sub != "" || sub != undefined)
subsidiaries.push(sub);
return true;
});
log.debug({ title: "subsidiaries", details: subsidiaries });
if (subsidiaries[0] == "" || subsidiaries[0] == null) {
subsidiaries = ["Chestnut Group"]
}
var subsidiary = ["subsidiary", "anyof"];
for (var i = 0; i < subsidiaries.length; i++) {
subsidiary.push(subsidiaries[i]);
}
return subsidiary;
} catch (e) {
log.debug({ title: "e", details: e });
}
}
function findpayables(account, startdate, enddate, empid, role, vendor) {
try {
var subsidiary = findsubsidiaryfilter(empid, role);
log.debug({ details: account + " " + startdate + " " + enddate + " " })
if (vendor != null && vendor != undefined && vendor != "") {
var vendorfilter = ["vendor.internalidnumber", "equalto", vendor];
} else {
var vendorfilter = ["vendor.internalidnumber", "isnotempty", ""];
}
var filtersarray = [
["account", "anyof", account],
"AND", ["type", "anyof", "VendBill"],
"AND", ["billingstatus", "is", "T"],
"AND", ["approvalstatus", "anyof", "2"],
"AND", ["mainline", "is", "T"],
"AND", vendorfilter,
"AND", subsidiary
];
if (startdate == null || startdate == undefined || startdate == "") {
} else {
filtersarray.push("AND", ["duedate", "onorafter", startdate]);
}
if (enddate == null || enddate == undefined || enddate == "") {
} else {
filtersarray.push("AND", ["duedate", "onorbefore", enddate]);
}
var vendorbillSearchObj = search.create({
type: "vendorbill",
filters: filtersarray,
columns: [
search.createColumn({
name: "duedate",
sort: search.Sort.ASC
}),
"type",
"entity",
"amount",
"print",
"refnumber",
"statusref",
"duedate",
"internalid",
"custbody_sii_ref_no",
"tranid",
"amountremaining",
"custbody_upy_approved_amt",
"custbody_upy_approved_payment",
search.createColumn({
name: "entityid",
join: "vendor"
}),
search.createColumn({
name: "legalname",
join: "vendor",
label: "Legal Name"
}),
search.createColumn({
name: "internalid",
join: "vendor"
}),
]
});
var search_run = vendorbillSearchObj.run().getRange({
start: 0,
end: 1000
});
var billarray = [];
log.debug({ details: search_run, title: "search_run" });
if (search_run.length > 0) {
for (var i = 0; i < search_run.length; i++) {
var billobj = {};
billobj.trandate = search_run[i].getValue({
name: 'duedate'
});
billobj.type = search_run[i].getValue({
name: 'type'
});
billobj.entity = search_run[i].getValue({
name: "legalname",
join: "vendor",
label: "Legal Name"
});
billobj.amount = search_run[i].getValue({
name: 'amount'
});
billobj.vendorid = search_run[i].getValue({
name: 'entityid',
join: 'vendor'
});
billobj.vendorinternalid = search_run[i].getValue({
name: 'internalid',
join: 'vendor'
});
billobj.refnumber = search_run[i].getValue({
name: 'tranid'
});
billobj.currency = search_run[i].getText({
name: 'currency'
});
billobj.internalid = search_run[i].getText({
name: 'internalid'
});
billobj.orgamount = search_run[i].getValue({
name: 'amount'
});
billobj.dueamount = search_run[i].getValue({
name: 'amount'
});
billobj.discountamount = search_run[i].getValue({
name: 'discountamount'
});
billobj.amountremaining = search_run[i].getValue({
name: 'amountremaining'
});
billobj.termsdiscountdate = search_run[i].getValue({
name: 'termsdiscountdate'
});
billobj.custbody_upy_approved_amt = search_run[i].getValue({
name: 'custbody_upy_approved_amt'
});
billobj.custbody_upy_approved_payment = search_run[i].getValue({
name: 'custbody_upy_approved_payment'
});
billarray.push(billobj);
}
}
return billarray;
} catch (e) {
log.debug({ details: e, title: "e" });
}
}
// '<center>CHECKBOX</center>',
/*Setting sublist on page init */
function setsublist(billobj, records) {
try {
for (var i = 0, k = 0; i < billobj.length; i++) {
if (billobj[i].refnumber != "Memorized") {
records.setSublistValue({
id: 'custpage_check',
line: k,
value: 'F'
});
records.setSublistValue({
id: 'custpage_duedate',
line: k,
value: billobj[i].trandate
});
records.setSublistValue({
id: 'custpage_internalid',
line: k,
value: billobj[i].internalid
});
records.setSublistValue({
id: 'custpage_bill',
line: k,
value: billobj[i].type
});
records.setSublistValue({
id: 'custpage_duedate',
line: k,
value: billobj[i].trandate
});
records.setSublistValue({
id: 'custpage_vendor',
line: k,
value: billobj[i].entity
});
records.setSublistValue({
id: 'custpage_vendorid',
line: k,
value: billobj[i].vendorid
});
records.setSublistValue({
id: 'custpage_vendorint',
line: k,
value: billobj[i].vendorinternalid
});
if (billobj[i].refnumber != "" && billobj[i].refnumber != null) {
records.setSublistValue({
id: 'custpage_reference',
line: k,
value: billobj[i].refnumber
});
}
records.setSublistValue({
id: 'custpage_amount',
line: k,
value: billobj[i].amount
});
records.setSublistValue({
id: 'custpage_dueamount',
line: k,
value: billobj[i].amountremaining
});
records.setSublistValue({
id: 'custpage_payment',
line: k,
value: billobj[i].amountremaining
});
//if vendor bill is approved
if (billobj[i].custbody_upy_approved_payment) {
var approvedAmnt = billobj[i].custbody_upy_approved_amt;
if (approvedAmnt == "") approvedAmnt = billobj[i].amountremaining;
log.debug("approvedAmnt", approvedAmnt);
records.setSublistValue({
id: 'custpage_upy_approved_payment',
line: k,
value: approvedAmnt
});
records.setSublistValue({
id: 'custpage_payment',
line: k,
value: approvedAmnt
});
}
k++;
}
}
} catch (e) {
log.debug({ details: e, title: "e in setsublist" })
}
}
});
Client script
/**
* @NApiVersion 2.x
* @NScriptType ClientScript
* @NModuleScope SameAccount
*/
define(['N/http', 'N/https', 'N/record', 'N/search',
'N/url', 'N/runtime', 'N/format',
'N/ui/message', 'N/currentRecord'
],
function(http, https, record, search, url, runtime, format, message, currentRecord) {
/**
* Function to be executed after page is initialized.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.currentRecord - Current form record
* @param {string} scriptContext.mode - The mode in which the record is being accessed (create, copy, or edit)
*
* @since 2015.2
*/
var checksarray = [];
var check = true;
function pageInit(scriptContext) {
try {
form = serverWidget.createForm({
title: 'Bill Payments '
});
var records = scriptContext.currentRecord;
jQuery("#sublistidbilldetailsmarkall,#sublistidbilldetailsunmarkall").click(function() {
findcheckend(jQuery('.checkbox'), records);
});
var value = records.getValue({
fieldId: 'textfield_apaccount'
});
// var billobj = findpayables(value, "", "");
var value = records.getValue({
fieldId: 'textfield_account'
});
var balance = findbalance(value)
records.setValue({
fieldId: 'textfield_balance',
value: balance,
ignoreFieldChange: true
});
var date = new Date()
var day = date.getDate();
var monthIndex = date.getMonth() + 1;
var year = date.getFullYear();
var days = monthIndex + "/" + day + "/" + year;
records.setValue({
fieldId: 'textfield_posting',
value: findposting(),
ignoreFieldChange: true
});
var parsedDate = format.parse({
value: days,
type: format.Type.DATE
});
records.setValue({
fieldId: 'textfield_date',
value: parsedDate,
ignoreFieldChange: true
});
// setsublist(billobj, records);
} catch (e) {
console.log(e);
}
}
/**
* Function to be executed when field is changed.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.currentRecord - Current form record
* @param {string} scriptContext.sublistId - Sublist name
* @param {string} scriptContext.fieldId - Field name
* @param {number} scriptContext.lineNum - Line number. Will be undefined if not a sublist or matrix field
* @param {number} scriptContext.columnNum - Line number. Will be undefined if not a matrix field
*
* @since 2015.2
*/
function fieldChanged(scriptContext) {
try {
var records = scriptContext.currentRecord;
if (scriptContext.fieldId == 'textfield_account') {
var value = records.getValue({
fieldId: 'textfield_account'
});
var balance = findbalance(value);
records.setValue({
fieldId: 'textfield_balance',
value: balance,
ignoreFieldChange: true
});
}
if (scriptContext.fieldId == 'textfield_cheque') {
findcheckend(jQuery('.checkbox'), records);
}
// if (scriptContext.fieldId == 'textfield_startdate') {
// var value = records.getValue({
// fieldId: 'textfield_apaccount'
// });
// var startdate = jQuery("#textfield_startdate").val();
// var enddate = jQuery("#textfield_enddate").val();
// var billobj = findpayables(value, startdate, enddate);
// setsublist(billobj, records);
// }
// if (scriptContext.fieldId == 'textfield_enddate') {
// var value = records.getValue({
// fieldId: 'textfield_apaccount'
// });
// var startdate = jQuery("#textfield_startdate").val();
// var enddate = jQuery("#textfield_enddate").val();
// var billobj = findpayables(value, startdate, enddate);
// setsublist(billobj, records);
// }
} catch (e) {
console.log(e);
}
}
/**
* Function to be executed after sublist is inserted, removed, or edited.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.currentRecord - Current form record
* @param {string} scriptContext.sublistId - Sublist name
*
* @since 2015.2
*/
function sublistChanged(scriptContext) {
try {
var records = scriptContext.currentRecord;
var rambo = findcheckend(jQuery('.checkbox'), records);
// var total = findduetotal(records)
// records.setValue({
// fieldId: 'textfield_amount',
// value: total,
// ignoreFieldChange: true
// });
} catch (e) {
console.log(e);
}
}
/**
* Validation function to be executed when record is saved.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.currentRecord - Current form record
* @returns {boolean} Return true if record is valid
*
* @since 2015.2
*/
function saveRecord(scriptContext) {
try {
// jQuery("#secondarysubmitter").attr("disabled", true);
var records = scriptContext.currentRecord;
var rambo = getsublist(records);
console.log(rambo);
var bills = paybills(rambo);
} catch (e) {
console.log(e);
}
}
return {
pageInit: pageInit,
fieldChanged: fieldChanged,
saveRecord: saveRecord,
sublistChanged: sublistChanged,
processcheckbox: processcheckbox
};
// /*for getting the bill details for adding into the custom sublist */
// function findpayables(account, startdate, enddate) {
// try {
// console.log(account, startdate, enddate);
// var filtersarray = [
// ["account", "anyof", account],
// "AND", ["type", "anyof", "VendBill"],
// "AND", ["billingstatus", "is", "T"],
// "AND", ["approvalstatus", "anyof", "2"],
// "AND", ["mainline", "is", "T"]
// ];
// if (startdate == null || startdate == undefined || startdate == "") {} else {
// filtersarray.push("AND", ["duedate", "onorafter", startdate]);
// }
// if (enddate == null || enddate == undefined || enddate == "") {} else {
// filtersarray.push("AND", ["duedate", "onorbefore", enddate]);
// }
// var vendorbillSearchObj = search.create({
// type: "vendorbill",
// filters: filtersarray,
// columns: [
// search.createColumn({
// name: "duedate",
// sort: search.Sort.ASC
// }),
// "type",
// "entity",
// "amount",
// "print",
// "refnumber",
// "statusref",
// "duedate",
// "internalid",
// "custbody_sii_ref_no",
// "tranid",
// search.createColumn({
// name: "entityid",
// join: "vendor"
// }),
// search.createColumn({
// name: "altname",
// join: "vendor"
// }),
// search.createColumn({
// name: "internalid",
// join: "vendor"
// })
// ]
// });
// var search_run = vendorbillSearchObj.run().getRange({
// start: 0,
// end: 1000
// });
// var billarray = [];
// console.log(search_run);
// if (search_run.length > 0) {
// for (var i = 0; i < search_run.length; i++) {
// var billobj = {};
// billobj.trandate = search_run[i].getValue({
// name: 'duedate'
// });
// billobj.type = search_run[i].getValue({
// name: 'type'
// });
// billobj.entity = search_run[i].getValue({
// name: "altname",
// join: "vendor"
// });
// billobj.amount = search_run[i].getValue({
// name: 'amount'
// });
// billobj.vendorid = search_run[i].getValue({
// name: 'entityid',
// join: 'vendor'
// });
// billobj.vendorinternalid = search_run[i].getValue({
// name: 'internalid',
// join: 'vendor'
// });
// billobj.refnumber = search_run[i].getValue({
// name: 'tranid'
// });
// billobj.currency = search_run[i].getText({
// name: 'currency'
// });
// billobj.internalid = search_run[i].getText({
// name: 'internalid'
// });
// billobj.orgamount = search_run[i].getValue({
// name: 'amount'
// });
// billobj.dueamount = search_run[i].getValue({
// name: 'amount'
// });
// billobj.discountamount = search_run[i].getValue({
// name: 'discountamount'
// });
// billobj.termsdiscountdate = search_run[i].getValue({
// name: 'termsdiscountdate'
// });
// billarray.push(billobj);
// }
// }
// return billarray;
// } catch (e) {
// var errormsg = message.create({
// title: refund.substring(5),
// message: "",
// type: message.Type.ERROR
// });
// errormsg.show({
// duration: 5000
// });
// console.log(e);
// }
// }
// /*Setting sublist on page init */
// function setsublist(billobj, records) {
// try {
// var numLines = records.getLineCount({
// sublistId: 'sublistidbilldetails'
// });
// for (var i = 0; i < numLines; i++) {
// records.removeLine({
// sublistId: 'sublistidbilldetails',
// line: 0,
// ignoreRecalc: true
// });
// }
// for (var i = 0; i < billobj.length; i++) {
// if (billobj[i].refnumber != "Memorized") {
// records.selectNewLine({
// sublistId: 'sublistidbilldetails'
// });
// records.setCurrentSublistValue({
// sublistId: 'sublistidbilldetails',
// fieldId: 'custpage_check',
// value: false,
// ignoreFieldChange: true
// });
// records.setCurrentSublistValue({
// sublistId: 'sublistidbilldetails',
// fieldId: 'custpage_duedate',
// value: billobj[i].trandate,
// ignoreFieldChange: true
// });
// records.setCurrentSublistValue({
// sublistId: 'sublistidbilldetails',
// fieldId: 'custpage_internalid',
// value: billobj[i].internalid,
// ignoreFieldChange: true
// });
// records.setCurrentSublistValue({
// sublistId: 'sublistidbilldetails',
// fieldId: 'custpage_bill',
// value: billobj[i].type,
// ignoreFieldChange: true
// });
// records.setCurrentSublistValue({
// sublistId: 'sublistidbilldetails',
// fieldId: 'custpage_duedate',
// value: billobj[i].trandate,
// ignoreFieldChange: true
// });
// records.setCurrentSublistValue({
// sublistId: 'sublistidbilldetails',
// fieldId: 'custpage_vendor',
// value: billobj[i].entity,
// ignoreFieldChange: true
// });
// records.setCurrentSublistValue({
// sublistId: 'sublistidbilldetails',
// fieldId: 'custpage_vendorid',
// value: billobj[i].vendorid,
// ignoreFieldChange: true
// });
// records.setCurrentSublistValue({
// sublistId: 'sublistidbilldetails',
// fieldId: 'custpage_vendorint',
// value: billobj[i].vendorinternalid,
// ignoreFieldChange: true
// });
// records.setCurrentSublistValue({
// sublistId: 'sublistidbilldetails',
// fieldId: 'custpage_reference',
// value: billobj[i].refnumber,
// ignoreFieldChange: true
// });
// records.setCurrentSublistValue({
// sublistId: 'sublistidbilldetails',
// fieldId: 'custpage_discamount',
// value: billobj[i].discountamount,
// ignoreFieldChange: true
// });
// records.setCurrentSublistValue({
// sublistId: 'sublistidbilldetails',
// fieldId: 'custpage_amount',
// value: billobj[i].amount,
// ignoreFieldChange: true
// });
// records.setCurrentSublistValue({
// sublistId: 'sublistidbilldetails',
// fieldId: 'custpage_dueamount',
// value: billobj[i].amount,
// ignoreFieldChange: true
// });
// records.setCurrentSublistValue({
// sublistId: 'sublistidbilldetails',
// fieldId: 'custpage_payment',
// value: billobj[i].amount,
// ignoreFieldChange: true
// });
// records.commitLine({
// sublistId: 'sublistidbilldetails'
// });
// }
// }
// setfocus(true)
// } catch (e) {
// console.log(e);
// }
// }
// /*To set focus to the top of the screen*/
// function setfocus(focus) {
// if (focus)
// setTimeout(function() {
// jQuery('#textfield_cheque').focus();
// }, 1000);
// }
/*on field change get the balance of the correspoding account */
function findbalance(value) {
try {
var accountSearchObj = search.create({
type: "account",
filters: [
["internalidnumber", "equalto", value]
],
columns: [
"balance"
]
});
var search_run = accountSearchObj.run().getRange({
start: 0,
end: 1000
});
var billarray = [];
if (search_run.length > 0) {
var balance = search_run[0].getValue({
name: 'balance'
});
}
return balance;
} catch (e) {
console.log(e);
}
}
/*getting sublist values happens here*/
function getsublist(record) {
try {
var bill_details = {};
bill_details.cheque = record.getValue({
fieldId: 'textfield_cheque'
});
bill_details.account = record.getValue({
fieldId: 'textfield_account'
});
var numLines = record.getLineCount({
sublistId: 'sublistidbilldetails'
});
var sublistarray = [];
for (var i = 0; i < numLines; i++) {
var currentItem = {};
var check = record.getSublistValue({
fieldId: 'custpage_check',
sublistId: 'sublistidbilldetails',
line: i
});
if (check) {
currentItem.bill = record.getSublistValue({
fieldId: 'custpage_internalid',
sublistId: 'sublistidbilldetails',
line: i
});
currentItem.payment = record
.getSublistText({
fieldId: 'custpage_payment',
sublistId: 'sublistidbilldetails',
line: i
});
currentItem.vendor = record
.getSublistValue({
fieldId: 'custpage_vendor',
sublistId: 'sublistidbilldetails',
line: i
});
currentItem.vendorid = record
.getSublistValue({
fieldId: 'custpage_vendorid',
sublistId: 'sublistidbilldetails',
line: i
});
currentItem.vendorinternalid = record
.getSublistValue({
fieldId: 'custpage_vendorint',
sublistId: 'sublistidbilldetails',
line: i
});
sublistarray.push(currentItem);
}
}
bill_details.sublist = sublistarray;
return bill_details;
} catch (e) {
console.log(e);
}
}
/*bill payment proccess happens here*/
function paybills(bill_details) {
try {
var billstocheck = [];
if (bill_details.sublist.length < 1) {
showmessage(false, "Please Enter atleast one line Item");
return false
}
if (bill_details.cheque == "" || bill_details.cheque == null || bill_details.cheque == undefined) {
showmessage(false, "Please Enter the Check Number");
jQuery('#textfield_cheque').focus();
return false
}
for (var i = 0; i < bill_details.sublist.length; i++) {
var resultrec = record.transform({
fromType: record.Type.VENDOR_BILL,
fromId: bill_details.sublist[i].bill,
toType: record.Type.VENDOR_PAYMENT,
isDynamic: true
});
console.log("bill_details.bill" + bill_details.sublist[0].bill);
var checksnum = parseInt(bill_details.cheque) + i;
console.log(checksnum + "checksnum");
resultrec.setValue({
fieldId: 'tranid',
value: checksnum,
ignoreFieldChange: true
});
resultrec.setValue({
fieldId: 'total',
value: bill_details.sublist[i].payment,
ignoreFieldChange: true
});
// resultrec.setValue({
// fieldId: 'account',
// value: bill_details.account,
// ignoreFieldChange: true
// });
resultrec.selectLine({
sublistId: 'apply',
line: 0
});
resultrec.setCurrentSublistValue({
sublistId: 'apply',
fieldId: 'amount',
value: bill_details.sublist[i].payment,
ignoreFieldChange: true
});
resultrec.setCurrentSublistValue({
sublistId: 'apply',
fieldId: 'total',
value: bill_details.sublist[i].payment,
ignoreFieldChange: true
});
resultrec.commitLine({
sublistId: 'apply'
});
var BPrecordId = resultrec.save({
enableSourcing: 'false',
ignoreMandatoryFields: 'false'
});
console.log("BPrecordId" + BPrecordId);
var checks = writechecks(bill_details.sublist[i].payment, checksnum, bill_details.sublist[i].vendorinternalid)
billstocheck.push(bill_details.sublist[i].bill)
}
var billstocheck = billstocheck.toString();
var checks = checks.toString();
var checkwite_url = url.resolveScript({
scriptId: "customscriptjohn11_sl_checkwriter",
deploymentId: "customdeployjohn11_sl_checkwriter",
returnExternalUrl: false
});
jQuery("#secondarysubmitter").attr("disabled", false);
window.open(checkwite_url + "&id=" + checks + "&billid=" + billstocheck);
window.location.reload();
} catch (e) {
showmessage(false, e.message);
console.log(e);
}
}
/*to find the due total to pay by the bill payment module*/
function findduetotal(record) {
try {
var numLines = record.getLineCount({
sublistId: 'sublistidbilldetails'
});
var total = 0;
for (var i = 0; i < numLines; i++) {
total += parseFloat(record.getSublistText({
fieldId: 'custpage_payment',
sublistId: 'sublistidbilldetails',
line: i
}));
}
return total.toFixed(2)
} catch (e) {
console.log(e);
}
}
function writechecks(amount, checknum, vendor) {
try {
var resultrec = record.create({
type: record.Type.CHECK,
isDynamic: true
});
resultrec.setValue({
fieldId: 'entity',
value: vendor,
ignoreFieldChange: false
});
resultrec.setValue({
fieldId: 'tranid',
value: checknum,
ignoreFieldChange: false
});
var lineNum = resultrec.selectLine({
sublistId: 'expense',
line: 0
});
resultrec.setCurrentSublistValue({
sublistId: 'expense',
fieldId: 'amount',
value: amount,
ignoreFieldChange: true
});
resultrec.commitLine({
sublistId: 'expense'
});
var CWrecordId = resultrec.save({
enableSourcing: 'false',
ignoreMandatoryFields: 'false'
});
console.log("CWrecordId" + CWrecordId);
checksarray.push(CWrecordId);
console.log(checksarray);
return checksarray;
} catch (e) {
console.log(e);
}
}
/*To get posting Period */
function findposting() {
try {
var post = [{ "value": "54", "text": "Jan 2014" }, { "value": "55", "text": "Feb 2014" }, { "value": "56", "text": "Mar 2014" }, { "value": "58", "text": "Apr 2014" }, { "value": "59", "text": "May 2014" }, { "value": "60", "text": "Jun 2014" }, { "value": "62", "text": "Jul 2014" }, { "value": "63", "text": "Aug 2014" }, { "value": "64", "text": "Sep 2014" }, { "value": "66", "text": "Oct 2014" }, { "value": "67", "text": "Nov 2014" }, { "value": "68", "text": "Dec 2014" }, { "value": "37", "text": "Jan 2015" }, { "value": "38", "text": "Feb 2015" }, { "value": "39", "text": "Mar 2015" }, { "value": "41", "text": "Apr 2015" }, { "value": "42", "text": "May 2015" }, { "value": "43", "text": "Jun 2015" }, { "value": "45", "text": "Jul 2015" }, { "value": "46", "text": "Aug 2015" }, { "value": "47", "text": "Sep 2015" }, { "value": "49", "text": "Oct 2015" }, { "value": "50", "text": "Nov 2015" }, { "value": "51", "text": "Dec 2015" }, { "value": "20", "text": "Jan 2016" }, { "value": "21", "text": "Feb 2016" }, { "value": "22", "text": "Mar 2016" }, { "value": "24", "text": "Apr 2016" }, { "value": "25", "text": "May 2016" }, { "value": "26", "text": "Jun 2016" }, { "value": "28", "text": "Jul 2016" }, { "value": "29", "text": "Aug 2016" }, { "value": "30", "text": "Sep 2016" }, { "value": "32", "text": "Oct 2016" }, { "value": "33", "text": "Nov 2016" }, { "value": "34", "text": "Dec 2016" }, { "value": "3", "text": "Jan 2017" }, { "value": "4", "text": "Feb 2017" }, { "value": "5", "text": "Mar 2017" }, { "value": "7", "text": "Apr 2017" }, { "value": "8", "text": "May 2017" }, { "value": "9", "text": "Jun 2017" }, { "value": "11", "text": "Jul 2017" }, { "value": "12", "text": "Aug 2017" }, { "value": "13", "text": "Sep 2017" }, { "value": "15", "text": "Oct 2017" }, { "value": "16", "text": "Nov 2017" }, { "value": "17", "text": "Dec 2017" }, { "value": "71", "text": "Jan 2018" }, { "value": "72", "text": "Feb 2018" }, { "value": "73", "text": "Mar 2018" }, { "value": "75", "text": "Apr 2018" }, { "value": "76", "text": "May 2018" }, { "value": "77", "text": "Jun 2018" }, { "value": "79", "text": "Jul 2018" }, { "value": "80", "text": "Aug 2018" }, { "value": "81", "text": "Sep 2018" }, { "value": "83", "text": "Oct 2018" }, { "value": "84", "text": "Nov 2018" }, { "value": "85", "text": "Dec 2018" }, { "value": "88", "text": "Jan 2019" }, { "value": "89", "text": "Feb 2019" }, { "value": "90", "text": "Mar 2019" }, { "value": "92", "text": "Apr 2019" }, { "value": "93", "text": "May 2019" }, { "value": "94", "text": "Jun 2019" }, { "value": "96", "text": "Jul 2019" }, { "value": "97", "text": "Aug 2019" }, { "value": "98", "text": "Sep 2019" }, { "value": "100", "text": "Oct 2019" }, { "value": "101", "text": "Nov 2019" }, { "value": "102", "text": "Dec 2019" }, { "value": "105", "text": "Jan 2020" }, { "value": "106", "text": "Feb 2020" }, { "value": "107", "text": "Mar 2020" }, { "value": "109", "text": "Apr 2020" }, { "value": "110", "text": "May 2020" }, { "value": "111", "text": "Jun 2020" }, { "value": "113", "text": "Jul 2020" }, { "value": "114", "text": "Aug 2020" }, { "value": "115", "text": "Sep 2020" }, { "value": "117", "text": "Oct 2020" }, { "value": "118", "text": "Nov 2020" }, { "value": "119", "text": "Dec 2020" }, { "value": "122", "text": "Jan 2021" }, { "value": "123", "text": "Feb 2021" }, { "value": "124", "text": "Mar 2021" }, { "value": "126", "text": "Apr 2021" }, { "value": "127", "text": "May 2021" }, { "value": "128", "text": "Jun 2021" }, { "value": "130", "text": "Jul 2021" }, { "value": "131", "text": "Aug 2021" }, { "value": "132", "text": "Sep 2021" }, { "value": "134", "text": "Oct 2021" }, { "value": "135", "text": "Nov 2021" }, { "value": "136", "text": "Dec 2021" }];
var objDate = new Date();
var locale = "en-us";
var date = objDate.toLocaleString(locale, { month: "short" }) + " " + objDate.getFullYear();
for (var i = 0; i < post.length; i++) {
if (date == post[i].text) {
var value = post[i].value;
}
}
return value
} catch (e) {
console.log(e);
}
}
/*Check all and ucheck button functions */
function processcheckbox() {
try {
console.log(check + "On entry");
if (check) {
check = false;
jQuery("#buttoncheckall").val("Clear All");
} else {
check = true;
jQuery("#buttoncheckall").val("Select All");
}
var records = currentRecord.get();
var numLines = records.getLineCount({
sublistId: 'sublistidbilldetails'
});
console.log(check + "Before loop");
for (var i = 0; i < numLines; i++) {
records.selectLine({
sublistId: 'sublistidbilldetails',
line: i
});
if (check) {
jQuery('.checkbox').prop('checked', false); // UnChecks it
} else {
jQuery('.checkbox').prop('checked', true); // Checks it
}
records.commitLine({
sublistId: 'sublistidbilldetails'
});
}
setfocus(true);
} catch (e) {
console.log(e);
}
}
function showmessage(type, content) {
if (type) {
var messagetype = message.Type.CONFIRMATION
} else {
var messagetype = message.Type.ERROR
}
var msg = message.create({
title: "ERROR",
message: content,
type: messagetype
});
jQuery("html, body").animate({
scrollTop: 0
}, 600);
msg.show({
duration: 5000
});
}
function findcheckend(checkarray, records) {
var count = 0;
for (var i = 0; i < checkarray.length; i++) {
if (checkarray[i].checked) {
count++
}
}
var cheques = records.getValue({
fieldId: 'textfield_cheque'
});
if (cheques == null && cheques == undefined || cheques == "") {
records.setValue({
fieldId: 'textfield_cheque',
value: 0,
ignoreFieldChange: true
});
var cheques = 0;
}
if (count == 0) {
records.setValue({
fieldId: 'textfield_chequeend',
value: count + parseInt(cheques),
ignoreFieldChange: true
});
} else {
records.setValue({
fieldId: 'textfield_chequeend',
value: count + parseInt(cheques) - 1,
ignoreFieldChange: true
});
}
}
});