JIra Code: MBS 5, MBS-7
Add a new sublist field(editable) into the custom record ‘Portfolio’ to store the cheque amount. On selecting the cheque from the list this field should be auto-populated. On the click of the ‘Create Payment’ button, a payment record is to be generated. Once generated an alert message is to be displayed with the record id and also the cheque number and amount must be saved in the sublist. In some case, multiple invoices will be issued a single cheque and that case should also be considered.
If more than one invoices are selected for payment by selecting the cheque, then those invoices are also applied to the payment record by checking the apply checkbox of the payment record. If the payment record is generated an alert message is displayed with the payment record id. Also, display an alert if an error occurs.
User event script
(MBS-3 JJ UE invoice sublist to Portfolio )
/**
* @NApiVersion 2.x
* @NScriptType UserEventScript
* @NModuleScope SameAccount
*/
define(['N/record', 'N/redirect','N/ui/serverWidget','N/search'],
/**
* @param {N} N
* @param {auth} auth
* @param {config} config
* @param {crypto} crypto
* @param {currency} currency
* @param {email} email
* @param {encode} encode
* @param {error} error
* @param {file} file
* @param {format} format
* @param {http} http
* @param {https} https
* @param {plugin} plugin
* @param {portlet} portlet
* @param {record} record
* @param {redirect} redirect
* @param {render} render
* @param {runtime} runtime
* @param {search} search
* @param {sso} sso
* @param {task} task
* @param {transaction} transaction
* @param {ui} ui
* @param {dialog} dialog
* @param {message} message
* @param {serverWidget} serverWidget
* @param {url} url
* @param {workflow} workflow
* @param {xml} xml
*/
function(record,redirect,serverWidget,search) {
/**
* Function definition to be triggered before record is loaded.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.newRecord - New record
* @param {string} scriptContext.type - Trigger type
* @param {Form} scriptContext.form - Current form
* @Since 2015.2
*/
function beforeLoad(scriptContext) {
try
{
if(scriptContext.type!='create')
{
scriptContext.form.clientScriptFileId = 4397;
var form = scriptContext.form;
//Create the Sublist for invoice
//Start
var sublist = form.addSublist({
id : 'custpage_invoice_for_check',
type : serverWidget.SublistType.LIST,
label : 'Invoices',
tab : 'custom32'
});
sublist.addField({
id: 'custpage_invoice_type',
type: serverWidget.FieldType.TEXT,
label: 'Type'
});
sublist.addField({
id: 'custpage_invoice_id',
type: serverWidget.FieldType.TEXT,
label: 'Invoice Id'
});
sublist.addField({
id: 'custpage_invoice_document_numb',
type: serverWidget.FieldType.TEXT,
label: 'Document Number'
})
sublist.addField({
id: 'custpage_invoice_customer',
type: serverWidget.FieldType.TEXT,
label: 'Customer'
});
sublist.addField({
id: 'custpage_invoice_date',
type: serverWidget.FieldType.TEXT,
label: 'Date'
});
sublist.addField({
id: 'custpage_invoice_due_date',
type: serverWidget.FieldType.TEXT,
label: 'Due Date'
});
sublist.addField({
id: 'custpage_invoice_status',
type: serverWidget.FieldType.TEXT,
label: 'Status'
});
sublist.addField({
id: 'custpage_invoice_amount',
type: serverWidget.FieldType.TEXT,
label: 'Amount'
});
sublist.addField({
id: 'custpage_invoice_due_amt',
type: serverWidget.FieldType.TEXT,
label: 'Invoice Due Amount'
});
var checkField=sublist.addField({
id: "custpage_invoice_check",
label: 'Select Check',
type: serverWidget.FieldType.SELECT
})
checkField.updateDisplayType({
displayType: serverWidget.FieldDisplayType.ENTRY
});
var parentID=scriptContext.newRecord.id;
checkField= setCheckList(parentID,checkField);
var amntField = sublist.addField({
id: 'custpage_cheque_amount',
type: serverWidget.FieldType.CURRENCY,
label: 'Cheque Amount'
});
amntField.updateDisplayType({
displayType: serverWidget.FieldDisplayType.ENTRY
});
var chequeId = sublist.addField({
id: 'custpage_cheque_id',
type: serverWidget.FieldType.TEXT,
label: 'Cheque idt'
});
chequeId.updateDisplayType({
displayType : serverWidget.FieldDisplayType.HIDDEN
});
sublist.addButton({
id : 'custpage_create_payment',
label : 'Create Payment',
functionName: 'makePayment'
});
//END
var customer=scriptContext.newRecord.getValue({
fieldId: 'custrecord_jj_customer_name'
});
sublist=addValueForSublist(sublist,customer);
}
}
catch(err)
{
log.debug("err",err);
}
}
function addValueForSublist(sublist,customer)
{
try
{
//Create Search for invocie
var invoiceSearchObj = search.create({
type: "invoice",
filters:
[
["type","anyof","CustInvc"],
"AND",
["status","anyof","CustInvc:A"],
"AND",
["name","anyof",customer],
"AND",
["mainline","is","T"]
],
columns:
[
search.createColumn({name: "type", label: "Type"}),//0
search.createColumn({name: "entity", label: "Name"}),//1
search.createColumn({
name: "trandate",
sort: search.Sort.ASC,
label: "Date"
}),//2
search.createColumn({name: "duedate", label: "Due Date/Receive By"}),//3
search.createColumn({name: "tranid", label: "Document Number"}),//4
search.createColumn({name: "statusref", label: "Status"}),//5
search.createColumn({name: "account", label: "Account"}),//6
search.createColumn({name: "amount", label: "Amount"}),//7
search.createColumn({name: "internalid", label: "Internal ID"}),//8
search.createColumn({name: "amountremaining", label: "Amount Remaining"}) //9
]
});
var searchResultCount = invoiceSearchObj.runPaged().count;
var i=0;
invoiceSearchObj.run().each(function(result){
//Set values for sublist
//Start
sublist.setSublistValue({
id : "custpage_invoice_type",
line : i,
value : checkif(result.getValue(invoiceSearchObj.columns[0]))
});
sublist.setSublistValue({
id : "custpage_invoice_id",
line : i,
value :checkif(result.getValue(invoiceSearchObj.columns[8]))
});
sublist.setSublistValue({
id : "custpage_invoice_document_numb",
line : i,
value : checkif(result.getValue(invoiceSearchObj.columns[4]))
});
sublist.setSublistValue({
id : "custpage_invoice_customer",
line : i,
value : checkif(result.getText(invoiceSearchObj.columns[1]))
});
sublist.setSublistValue({
id : "custpage_invoice_date",
line : i,
value : checkif(result.getValue(invoiceSearchObj.columns[2]))
});
sublist.setSublistValue({
id : "custpage_invoice_due_date",
line : i,
value :checkif(result.getValue(invoiceSearchObj.columns[3]))
});
sublist.setSublistValue({
id : "custpage_invoice_status",
line : i,
value : checkif(result.getValue(invoiceSearchObj.columns[5]))
});
sublist.setSublistValue({
id : "custpage_invoice_amount",
line : i,
value : checkif(result.getValue(invoiceSearchObj.columns[7]))
});
sublist.setSublistValue({
id : "custpage_invoice_due_amt",
line : i,
value : checkif(result.getValue(invoiceSearchObj.columns[9]))
});
i++;
//End
return true;
});
return sublist;
}
catch(err)
{
log.debug("err",err);
}
}
function setCheckList(parentID,checkField)
{
var customrecord83SearchObj = search.create({
type: "customrecord_jj_checkordraft",
filters:
[
["custrecord_jj_check_parentportfolio","anyof",parentID],
"AND",
["custrecord_mbs7_balance_amt_cust","greaterthan","0.00"]
],
columns:
[
search.createColumn({name: "name", label: "Cheque Number"}),
search.createColumn({name: "custrecord_jj_check_type", label: "Type"}),
search.createColumn({name: "custrecord_jj_check_amount", label: "Amount"})
]
});
var searchResultCount = customrecord83SearchObj.runPaged().count;
checkField.addSelectOption({
value : '',
text : ''
});
var j=0;
customrecord83SearchObj.run().each(function(result){
checkField.addSelectOption({
value : checkif(result.getValue(customrecord83SearchObj.columns[0])),
text : checkif(result.getValue(customrecord83SearchObj.columns[0]))
});
j++;
return true;
});
return checkField;
}
/**
* Function definition to be triggered before record is loaded.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.newRecord - New record
* @param {Record} scriptContext.oldRecord - Old record
* @param {string} scriptContext.type - Trigger type
* @Since 2015.2
*/
function beforeSubmit(scriptContext) {
}
/**
* Function definition to be triggered before record is loaded.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.newRecord - New record
* @param {Record} scriptContext.oldRecord - Old record
* @param {string} scriptContext.type - Trigger type
* @Since 2015.2
*/
function afterSubmit(scriptContext) {
}
return {
beforeLoad: beforeLoad,
beforeSubmit: beforeSubmit,
afterSubmit: afterSubmit
};
});
//nullcheck
function checkif(singleitem) {
if (singleitem != "" && singleitem != null && singleitem != undefined && singleitem !='- None -' && singleitem != " " && singleitem != NaN && singleitem != 'NaN') {
return singleitem;
} else{
return "-";
}
}
MBS-3 JJ UE Update field in Portfolio
/**
* @NApiVersion 2.x
* @NScriptType UserEventScript
* @NModuleScope SameAccount
*/
define(['N/search','N/record','N/format','N/ui/serverWidget'],
/**
* @param {N} N
* @param {auth} auth
* @param {config} config
* @param {crypto} crypto
* @param {currency} currency
* @param {email} email
* @param {encode} encode
* @param {error} error
* @param {file} file
* @param {format} format
* @param {http} http
* @param {https} https
* @param {plugin} plugin
* @param {portlet} portlet
* @param {record} record
* @param {redirect} redirect
* @param {render} render
* @param {runtime} runtime
* @param {search} search
* @param {sso} sso
* @param {task} task
* @param {transaction} transaction
* @param {ui} ui
* @param {dialog} dialog
* @param {message} message
* @param {serverWidget} serverWidget
* @param {url} url
* @param {workflow} workflow
* @param {xml} xml
*/
function(search,record,format,serverWidget) {
/**
* Function definition to be triggered before record is loaded.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.newRecord - New record
* @param {Record} scriptContext.oldRecord - Old record
* @param {string} scriptContext.type - Trigger type
* @Since 2015.2
*/
function dateFormatOld(date){
var m = date.getMonth();
var month = m+1;
var year= date.getFullYear();
var day = date.getUTCDate();
return day +"/" + month+ "/" + year;
}
function dateFormat(date){
var month = date.getMonth();
var year= date.getFullYear();
var day = date.getUTCDate();
return month+1 +"/" + day+ "/" + year;
}
function checkif(singleitem) {
if (singleitem != "" && singleitem != null && singleitem != undefined && singleitem !='- None -' && singleitem != " " && singleitem != NaN && singleitem != 'NaN') {
return singleitem;
} else{
return "0";
}
}
function formatToString(rawNum2) {
// Assume number format is 1.000.000,00 and negative format is (100)
return format.format({value:rawNum2, type: format.Type.CURRENCY})
}
function formatToDate(num) {
// Assume number format is 1.000.000,00 and negative format is (100)
return format.parse({value:num, type: format.Type.DATE});
}
/**
* Function definition to be triggered before record is loaded.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.newRecord - New record
* @param {string} scriptContext.type - Trigger type
* @param {Form} scriptContext.form - Current form
* @Since 2015.2
*/
function beforeLoad(scriptContext) {
try{
var portfolioId = scriptContext.newRecord.getValue({fieldId:'custrecord_jj_check_parentportfolio'});
var objRecord = record.load({
type:'customrecord_jj_portfolio',
id: portfolioId
});
var owner = objRecord.getValue({
fieldId: 'custrecord_jj_customer_name'
});
var currency = objRecord.getValue({
fieldId: 'custrecord_jj_portfolio_currency'
});
var chequeOwner = scriptContext.newRecord.setValue({
fieldId: 'custrecord_jj_check_owner',
value: owner
});
var chequeCurrency = scriptContext.newRecord.setValue({
fieldId: 'custrecord_jj_check_currency',
value: currency
});
}catch(error){
log.debug("error",error)
}
}
function afterSubmit(scriptContext) {
try
{ //to get the internal id of portfolio record
var portfolioId = scriptContext.newRecord.getValue({fieldId:'custrecord_jj_check_parentportfolio'});
var objRecord = record.load({
type:'customrecord_jj_portfolio',
id: portfolioId
});
var totAmount_portfolio = objRecord.getValue({
fieldId: 'custrecord_jj_portfolio_total_amount'
});
var checkNumber_portfolio = objRecord.getValue({
fieldId: 'custrecord_jj_portfolio_check_nos'
});
var avgDuedate_portfolio = objRecord.getValue({
fieldId: 'custrecord_jj_portfolio_avg_due_date'
});
var dueAmnt_portfolio = objRecord.getValue({
fieldId: 'custrecord_jj_portfolio_amountdue'
});
if(scriptContext.type=='create'){
var totalAmount = parseFloat(checkif(totAmount_portfolio)) + parseFloat(scriptContext.newRecord.getValue({fieldId:'custrecord_jj_check_amount'}));
}
else
if(scriptContext.type=='edit'){
var totalAmount = (parseFloat(checkif(totAmount_portfolio)) - parseFloat(scriptContext.oldRecord.getValue({fieldId:'custrecord_jj_check_amount'})))+(parseFloat(scriptContext.newRecord.getValue({fieldId:'custrecord_jj_check_amount'})));
}
else
if(scriptContext.type=='delete'){
var totalAmount = parseFloat(checkif(totAmount_portfolio)) - parseFloat(scriptContext.newRecord.getValue({fieldId:'custrecord_jj_check_amount'}));
}
if(scriptContext.type=='create'){
var duedate = parseFloat(checkif(dueAmnt_portfolio))+parseInt(new Date(dateFormat(formatToDate(scriptContext.newRecord.getValue({fieldId:'custrecord_jj_check_due_date'})))).getTime())*parseFloat(scriptContext.newRecord.getValue({fieldId:'custrecord_jj_check_amount'}));
}
else
if(scriptContext.type=='edit'){
var duedate = (parseFloat(checkif(dueAmnt_portfolio))-parseInt(new Date(dateFormat(formatToDate(scriptContext.oldRecord.getValue({fieldId:'custrecord_jj_check_due_date'})))).getTime())*parseFloat(scriptContext.oldRecord.getValue({fieldId:'custrecord_jj_check_amount'})))+(parseInt(new Date(dateFormat(formatToDate(scriptContext.newRecord.getValue({fieldId:'custrecord_jj_check_due_date'})))).getTime())*parseFloat(scriptContext.newRecord.getValue({fieldId:'custrecord_jj_check_amount'})));
}
else
if(scriptContext.type=='delete'){
var duedate = parseFloat(checkif(dueAmnt_portfolio))-parseInt(new Date(dateFormat(formatToDate(scriptContext.newRecord.getValue({fieldId:'custrecord_jj_check_due_date'})))).getTime())*parseFloat(scriptContext.newRecord.getValue({fieldId:'custrecord_jj_check_amount'}));
}
var avrgDueDate=dateFormatOld(new Date(checkif(duedate)/checkif(totalAmount)));
var checkNo = objRecord.getValue({
fieldId: 'custrecord_jj_portfolio_check_nos'
});
if(scriptContext.type=='create'){
var numbr_ofChque = parseInt(checkNo+1)
}
else
if(scriptContext.type=='edit'){
var numbr_ofChque = checkNo
}
else
if(scriptContext.type=='delete'){
var numbr_ofChque= parseInt(checkNo-1)
}
var otherId = record.submitFields({
type: 'customrecord_jj_portfolio',
id: portfolioId,
values: {
'custrecord_jj_portfolio_check_nos': numbr_ofChque,
'custrecord_jj_portfolio_total_amount' :totalAmount,
'custrecord_jj_portfolio_avg_due_date': avrgDueDate,
'custrecord_jj_portfolio_amountdue': duedate
}
});
}
catch(err)
{
log.debug("err",err);
}
}
return {
afterSubmit: afterSubmit,
beforeLoad:beforeLoad
};
});
Client Script
/**
* @NApiVersion 2.x
* @NScriptType ClientScript
* @NModuleScope SameAccount
*/
define(['N/currentRecord','N/url','N/search','N/record', 'N/ui/message'],
/**
* @param {N} N
* @param {auth} auth
* @param {config} config
* @param {crypto} crypto
* @param {currency} currency
* @param {email} email
* @param {encode} encode
* @param {error} error
* @param {file} file
* @param {format} format
* @param {http} http
* @param {https} https
* @param {plugin} plugin
* @param {portlet} portlet
* @param {record} record
* @param {redirect} redirect
* @param {render} render
* @param {runtime} runtime
* @param {search} search
* @param {sso} sso
* @param {task} task
* @param {transaction} transaction
* @param {ui} ui
* @param {dialog} dialog
* @param {message} message
* @param {serverWidget} serverWidget
* @param {url} url
* @param {workflow} workflow
* @param {xml} xml
*/
function(currentRecord,resolveurl,search,record,message) {
// var orgChq_amnt;
var flag;
/**
* 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
*/
function makePayment(scriptContext)
{
try{
// to craete an object
var chequeObj ={};
// to get the no.of lines in current sublist
var rec = currentRecord.get();
var numLines = rec.getLineCount({
sublistId: 'custpage_invoice_for_check'
});
console.log("numLines="+numLines)
// to get the Cheque name
for(var i=0;i<numLines;i++){
var cheqAmount = rec.getSublistValue({
sublistId: 'custpage_invoice_for_check',
fieldId: 'custpage_cheque_amount',
line: i
});
var checkid = rec.getSublistText({
sublistId: 'custpage_invoice_for_check',
fieldId:'custpage_invoice_check', //'custpage_cheque_id',
line: i
});
console.log("cheqAmount="+cheqAmount+"checkid= "+checkid)
if(cheqAmount && checkid)
{
// to get the invoice
if(!(checkid in chequeObj))
{
chequeObj[checkid]={};
// to get the balance amount
var balanceAmtAndID = getBalanceAmountFromCheque(checkid);
console.log("balanceAmtAndID="+balanceAmtAndID)
chequeObj[checkid]["BalanceAmt"]=balanceAmtAndID.balanceAmt;
chequeObj[checkid]["ID"]=balanceAmtAndID.ID;
chequeObj[checkid]["InvoiceArray"]= [];
chequeObj[checkid]["AmountArray"]= [];
chequeObj[checkid]["SumAmt"]=0;
chequeObj[checkid]["toDeduct"]=0;
}
// to enter invoice
var invIdnum = rec.getSublistValue({
sublistId: 'custpage_invoice_for_check',
fieldId: 'custpage_invoice_id',
line: i
});
chequeObj[checkid]["InvoiceArray"].push(invIdnum);
chequeObj[checkid]["AmountArray"].push(cheqAmount);
chequeObj[checkid]["SumAmt"] = parseFloat(chequeObj[checkid]["SumAmt"])+parseFloat(cheqAmount);
}
else if(cheqAmount!=null && cheqAmount!= undefined && cheqAmount!="" && (checkid==null || checkid== undefined || checkid==""))
{
alert("You have not entered Cheque Id for some invoices");
}
else if(checkid!=null && checkid!= undefined && checkid!="" && (cheqAmount==null || cheqAmount== undefined || cheqAmount==""))
{
alert("You have not entered Cheque amount for some invoices cheque Id ="+checkid);
}
}
// to show chequeObj
console.log("chequeObj="+JSON.stringify(chequeObj))
var toReject ={},toPayment={};
// loop for checking include or exclude from Payment
for(var key in chequeObj)
{
if(chequeObj[key]["SumAmt"]>chequeObj[key]["BalanceAmt"])
{
toReject[key] =chequeObj[key];
}
else
{
toPayment[key] =chequeObj[key];
}
}
console.log("toReject="+JSON.stringify(toReject))
console.log("toPayment="+JSON.stringify(toPayment))
if((Object.keys(toPayment)).length)
{
var keyValues = (Object.values(toPayment))[0]["InvoiceArray"][0];
console.log("keyValues="+keyValues);
// to craete payment
var objRecord = record.transform({
fromType: record.Type.INVOICE,
fromId: keyValues,
toType: record.Type.CUSTOMER_PAYMENT,
isDynamic: true
});
var numLinesobj = objRecord.getLineCount({
sublistId: 'apply'
});
console.log('numLinesobj',numLinesobj)
objRecord.setValue({
fieldId: 'undepfunds',
value: 'F'
});
objRecord.setValue({
fieldId: 'account',
value: '748'
});
// to select Invoices
var l=0;
for(var key in toPayment)
{
console.log('Object.values(toPayment)[l]',Object.values(toPayment)[l]);
console.log('Object.values(toPayment)[l]["InvoiceArray"]',Object.values(toPayment)[l]["InvoiceArray"]);
for(var i=0;i<Object.values(toPayment)[l]["InvoiceArray"].length;i++)
{
for(var j=0;j<numLinesobj;j++)
{
var invoice = objRecord.getSublistValue({
sublistId: 'apply',
fieldId: 'internalid',
line: j
});
console.log('Object.values(toPayment)[key]["InvoiceArray"][i]='+Object.values(toPayment)[l]["InvoiceArray"][i])
if(Object.values(toPayment)[l]["InvoiceArray"][i]==invoice)
{
objRecord.selectLine({
sublistId: 'apply',
line: j
});
objRecord.setCurrentSublistValue({
sublistId: 'apply',
fieldId: 'apply',
value: true
});
var amountToPay =objRecord.getCurrentSublistValue({
sublistId: 'apply',
fieldId: 'amount'
});
objRecord.setCurrentSublistValue({
sublistId: 'apply',
fieldId: 'amount',
value: Object.values(toPayment)[l]["AmountArray"][i]
});
//add condition to add the set amount for balance amount in check
if(amountToPay<Object.values(toPayment)[l]["AmountArray"][i] )
{
Object.values(toPayment)[l]["toDeduct"] = (parseFloat(Object.values(toPayment)[l]["toDeduct"])+parseFloat(amountToPay)).toFixed(2);
}else
{
Object.values(toPayment)[l]["toDeduct"] = (parseFloat(Object.values(toPayment)[l]["toDeduct"])+parseFloat(Object.values(toPayment)[l]["AmountArray"][i])).toFixed(2);
}
objRecord.commitLine({
sublistId: 'apply'
});
}
}
}
l++;
}
// to set "custbody_mbs7_jj_invoice_amt_json"
objRecord.setValue({
fieldId: 'custbody_mbs7_jj_invoice_amt_json',
value: JSON.stringify(toPayment)
});
var test = objRecord.getValue({
fieldId: 'custbody_mbs7_jj_invoice_amt_json'
});
console.log('toPayment out of loop',JSON.stringify(toPayment))
console.log("test wthout parsing=",test)
console.log("test wth parsing=",JSON.parse(test))
var paymentId=objRecord.save();
alert("You have successfully created Payment record with ID="+paymentId)
}
// to set the Cheque to Balance Amount
for(var key in toPayment)
{
try{
console.log("ID INN="+toPayment[key]["ID"])
console.log("VAlue INN="+toPayment[key]["toDeduct"])
// to get the internalID of Cheque
var Ids =record.submitFields({
type: 'customrecord_jj_checkordraft',
id:toPayment[key]["ID"],
values: {
'custrecord_mbs7_balance_amt_cust': parseFloat(toPayment[key]["BalanceAmt"]-toPayment[key]["toDeduct"])
}
});
}catch(e)
{
console.log("Err@ FN =",e.message);
}
}
console.log('toPayment out of loop',JSON.stringify(toPayment))
setRejectedValues(toReject);
}catch(err){
alert('Payment Record not generated:'+err.message)
console.log('error @ makePayment',err)
}
}
function setRejectedValues(toReject)
{ console.log("toReject=",toReject);
try{
var URL =window.location.href;
console.log("URL=",URL);
// to remove the unwanted rejected Object members
URL = URL.split("&rejectedObj")[0];
console.log("URL=",URL);
window.location.href =URL+"&rejectedObj="+JSON.stringify(toReject);
}catch(e)
{
console.log("Err@ FN =",e.message);
}
}
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, " "));
}
function pageInit(scriptContext) {
try{
//avoid the standard NetSuite warning message when navigating away
if (window.onbeforeunload) {
window.onbeforeunload = function() {
null;
};
}
var URL =window.location.href;
var rejectedObj=getParameterByName("rejectedObj",URL);
console.log('rejectedObj=',rejectedObj);
if(JSON.stringify(rejectedObj)!='"{}"' && rejectedObj!=null && rejectedObj!=undefined && rejectedObj!="" && rejectedObj!=" ")
{
message.create({
title: "Message",
message: "Some Payment record cannot be created because of Amount entered does not match with Balance amount",
type: message.Type.CONFIRMATION
}).show({
duration: 15000
});
}
console.log('JSON.stringify(rejectedObj)=',JSON.stringify(rejectedObj));
console.log('JSON.parse(rejectedObj)=',JSON.parse(rejectedObj));
setValuesInSublist(JSON.parse(rejectedObj));
}catch(e)
{
console.log("Err@ FN =",e.message);
}
}
function setValuesInSublist(rejectedObj)
{
try{
var rec = currentRecord.get();
var numLines = rec.getLineCount({
sublistId: 'custpage_invoice_for_check'
});
// to get the Cheque name
for(var i=0;i<numLines;i++){
var invoiceId = rec.getSublistValue({
sublistId: 'custpage_invoice_for_check',
fieldId: 'custpage_invoice_id',
line: i
});
console.log("invoiceId="+invoiceId)
var l=0;
for(var key in rejectedObj)
{
for(var j=0;j<Object.values(rejectedObj)[l]["InvoiceArray"].length;j++)
{
console.log('Object.values(rejectedObj)[l]["InvoiceArray"][j]=',Object.values(rejectedObj)[l]["InvoiceArray"][j]);
if(invoiceId==Object.values(rejectedObj)[l]["InvoiceArray"][j])
{
var lineNum = rec.selectLine({
sublistId: 'custpage_invoice_for_check',
line: i
});
rec.setCurrentSublistValue({
sublistId: 'custpage_invoice_for_check',
fieldId: 'custpage_cheque_amount',
value:Object.values(rejectedObj)[l]["AmountArray"][j]/*,
line: i*/
});
console.log('Object.keys(rejectedObj)='+Object.keys(rejectedObj))
rec.setCurrentSublistValue({
sublistId: 'custpage_invoice_for_check',
fieldId: 'custpage_invoice_check',
value:Object.keys(rejectedObj)
});
rec.commitLine({
sublistId: 'custpage_invoice_for_check'
});
}
}
l++;
}
}
}catch(e)
{
//log.debug("Err@ FN ",e.message);
//log.error("Err@ onAction FN ",e.message);
console.log("Err@ FN setValuesInSublist=",e.message);
}
}
/*****
* Function to get the balance amount from the Cheque
*/
function getBalanceAmountFromCheque(checkid)
{
try{
var balanceAmt;
// craete a search to get the amount
var customrecord83SearchObj = search.create({
type: "customrecord_jj_checkordraft",
filters:
[
["name","is",checkid]
],
columns:
[
search.createColumn({name: "custrecord_mbs7_balance_amt_cust", label: "Amount"}),
search.createColumn({name: "internalid", label: "Internal ID"}),
search.createColumn({
name: "name",
sort: search.Sort.ASC,
label: "Name"
})
]
});
var searchResult = customrecord83SearchObj.run().getRange({
start: 0,
end: 1
});
//console.log("searchResult="+JSON.stringify(searchResult))
if(searchResult.length>0)
{
balanceAmt = searchResult[0].getValue({
name: "custrecord_mbs7_balance_amt_cust"
});
ID = searchResult[0].getValue({
name: "internalid"
});
}
var obj ={};
obj.balanceAmt=balanceAmt;
obj.ID=ID;
console.log('obj='+JSON.stringify(obj));
return obj;
}catch(e)
{
console.log("Err@ getBalanceAmountFromCheque FN =",e.message);
}
}
/**
* 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{
//console.log('scriptContext.fieldId',scriptContext.fieldId)
if(scriptContext.fieldId=='custpage_invoice_check'){
var record = currentRecord.get();
console.log('record',record)
var field = scriptContext.fieldId
log.debug('field',field)
var sblistId = scriptContext.sublistId
log.debug('sblistId',sblistId)
var chequeId = record.getCurrentSublistText({
sublistId: sblistId,
fieldId: field
});
if(chequeId){
log.debug('chequeId',chequeId)
var customrecord83SearchObj = search.create({
type: "customrecord_jj_checkordraft",
filters:
[
["name","is",chequeId]
],
columns:
[
search.createColumn({name: "custrecord_mbs7_balance_amt_cust", label: "Amount"}),
search.createColumn({
name: "name",
sort: search.Sort.ASC,
label: "Name"
})
]
});
var searchResult = customrecord83SearchObj.run().getRange({
start: 0,
end: 100
});
log.debug('searchResult',searchResult)
for (var j = 0; j<searchResult.length; j++) {
var amnt = searchResult[j].getValue({
name: "custrecord_mbs7_balance_amt_cust"
});
log.debug('amnt',amnt)
var chqName = searchResult[j].getValue({
name: "name"
});
log.debug('chqName',chqName)
record.setCurrentSublistValue({
sublistId: sblistId,
fieldId:'custpage_cheque_amount',
value:amnt
});
record.setCurrentSublistValue({
sublistId: sblistId,
fieldId:'custpage_cheque_id',
value:chqName
});
}
}else{
record.setCurrentSublistValue({
sublistId: sblistId,
fieldId:'custpage_cheque_amount',
value:null
});
}
}
// if(changed_chequeAmnt > org_amnt)
}catch(er){
console.log('error @ fieldChanged',er)
}
}
/**
* Validation 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
*
* @returns {boolean} Return true if field is valid
*
* @since 2015.2
*/
function validateField(scriptContext) {
try{
if(scriptContext.fieldId=='custpage_cheque_amount'){
var record = scriptContext.currentRecord;
console.log('record',record)
var field = scriptContext.fieldId
console.log('field',field)
var sblistId = scriptContext.sublistId
console.log('sblistId',sblistId)
var chequeId = record.getCurrentSublistText({
sublistId: sblistId,
fieldId: 'custpage_invoice_check'
});
console.log('chequeId',chequeId)
var changed_chequeAmnt = record.getCurrentSublistText({
sublistId: sblistId,
fieldId: field
});
console.log('changed_chequeAmnt',changed_chequeAmnt)
if(chequeId){
log.debug('chequeId',chequeId)
var customrecord83SearchObj = search.create({
type: "customrecord_jj_checkordraft",
filters:
[
["name","is",chequeId]
],
columns:
[
search.createColumn({name: "custrecord_jj_check_amount", label: "Amount"}),
]
});
var searchResult = customrecord83SearchObj.run().getRange({
start: 0,
end: 100
});
console.log('searchResult',searchResult)
for (var j = 0; j<searchResult.length; j++) {
var org_amnt = searchResult[j].getValue({
name: "custrecord_jj_check_amount"
});
console.log('org_amnt',org_amnt)
}
}
}
parsed_changed_chequeAmnt = parseFloat(changed_chequeAmnt)
console.log('parsed_changed_chequeAmnt',parsed_changed_chequeAmnt)
if(parsed_changed_chequeAmnt > org_amnt){
console.log('error')
flag=true;
alert('The amount entered is not valid.Please enter a lesser amount')
flag=false;
return false;
}
}catch(err){
console.log('error @ validateField',err)
}
return true;
}
return {
pageInit: pageInit,
makePayment:makePayment,
fieldChanged:fieldChanged,
validateField:validateField
};
});
When Payment is deleted, amount changes ( Userevent script: MBS 7 UE JJ Delete Customer Payment)
/**
* @NApiVersion 2.x
* @NScriptType UserEventScript
* @NModuleScope SameAccount
*/
/*******************************************************************************
* Moneta Business Solutions
* MBS-7 | Delete Payment record
* **************************************************************************
* Date : ${30/01/2019}
*
* Author: Jobin & Jismi IT Services LLP
* Script Description : This triggers when a Customer Payment is deleted
* Date Created :30-Jan-2019
*
* REVISION HISTORY
*
* Revision 1.0 ${30/01/2019} aj : created
*
******************************************************************************/
define(['N/record', 'N/search'],
/**
* @param {record} record
* @param {search} search
*/
function(record, search) {
/**
* Function to get the current balance amount from cheque
*/
function getCurrentBalanceAmtFromCheque(id) {
try{
// create a search
var customrecord_jj_checkordraftSearchObj = search.create({
type: "customrecord_jj_checkordraft",
filters:
[
["internalidnumber","equalto",id]
],
columns:
[
search.createColumn({name: "internalid", label: "Internal ID"}),
search.createColumn({name: "custrecord_mbs7_balance_amt_cust", label: "Balance Amount from Customer"})
]
});
var searchResultCount = customrecord_jj_checkordraftSearchObj.runPaged().count;
var searchResult = customrecord_jj_checkordraftSearchObj.run().getRange({
start: 0,
end: 1
});
//console.log("searchResult="+JSON.stringify(searchResult))
if(searchResult.length>0)
{
var balanceAmt = searchResult[0].getValue({
name: "custrecord_mbs7_balance_amt_cust"
});
}
return balanceAmt;
}catch(e)
{
log.error("Err@ getCurrentBalanceAmtFromCheque FN ",e.message);
}
}
/**
* Function definition to be triggered before record is loaded.
*
* @param {Object} scriptContext
* @param {Record} scriptContext.newRecord - New record
* @param {Record} scriptContext.oldRecord - Old record
* @param {string} scriptContext.type - Trigger type
* @Since 2015.2
*/
function afterSubmit(scriptContext) {
try
{
if(scriptContext.type=='delete')
{
// to get current record
var currentRecord = scriptContext.newRecord;
// to get the current JSON
var deleteObj=currentRecord.getValue({
fieldId: 'custbody_mbs7_jj_invoice_amt_json'
});
// to get the keys
// to parse
deleteObj = JSON.parse(deleteObj);
// for setting the balance Amt
for(var key in deleteObj)
{
var currentBalanceAmt = getCurrentBalanceAmtFromCheque(deleteObj[key]["ID"]);
var newAmount = parseFloat(currentBalanceAmt)+parseFloat(deleteObj[key]["toDeduct"]);
// to submit cheque balance amount
var chequeID = record.submitFields({
type: 'customrecord_jj_checkordraft',
id:deleteObj[key]["ID"],
values: {
'custrecord_mbs7_balance_amt_cust':newAmount.toFixed(2)
}
});
}
}
}catch(e)
{
log.error("Err@ FN afterSubmit",e.message);
}
}
return {
afterSubmit: afterSubmit
};
});