REQUIREMENT
Need to display an alert if the PO# with that customer exists in sales order record. Also, display an alert message if sales order is tried to save with the duplicate order# value.
SOLUTION
/**
* @NApiVersion 2.x
* @NScriptType ClientScript
* @NModuleScope SameAccount
*/
define(['N/currentRecord', 'N/record', 'N/search'],
/**
* @param{currentRecord} currentRecord
* @param{record} record
* @param{search} search
*/
function (currentRecord, record, search) {
/**
* 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
*/
//Search to check if duplicate PO and Customer combination exists.
// It returns the count, if count >0, duplicate PO nad customer combination exists. If count =0, combination does not exists
function checkDuplicatePO(poNum, customer) {
var salesorderSearchObj = search.create({
type: "salesorder",
filters:
[
["type", "anyof", "SalesOrd"],
"AND",
["formulatext: {otherrefnum}", "is", poNum],
"AND",
["customer.internalid", "anyof", customer],
"AND",
["mainline", "is", "T"]
],
columns:
[
search.createColumn({name: "internalid", label: "Internal ID"}),
search.createColumn({name: "otherrefnum", label: "PO/Check Number"})
]
});
var searchRes = salesorderSearchObj.runPaged().count;
console.log('Counnt in search', searchRes)
return searchRes;
}
function pageInit(scriptContext) {
try {
console.log('In cs page inint')
} catch (e) {
console.log('error@ pageInit', 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 {
console.log('IN cs ')
//Get Current Record
var currentRec = scriptContext.currentRecord;
var currentRecId = currentRec.id
log.debug('currentRecId', currentRecId)
//Get po#
var poNum = currentRec.getValue({
fieldId: 'otherrefnum'
});
//Get Customer
var customer = currentRec.getValue({
fieldId: 'entity'
});
//Get subsidiary
var sub = currentRec.getValue({
fieldId: 'subsidiary'
});
//Following code executes only if Po# and customer value is present
if ((poNum != '') && (customer != '')) {
//Check the subsidiary for Australia , US and UK
if (sub == 2 || sub == 7 || sub == 9) {
console.log('In sub ')
if (!(scriptContext.currentRecord.id)) {
//Calling the function to check if duplicate PO exists
var searchResultCount = checkDuplicatePO(poNum, customer);
console.log('Count', searchResultCount)
//If duplicate PO exists searchResultCount will be greater than 0, and will displays an alert
if (searchResultCount > 0) {
alert('You have entered a duplicate PO# for this customer')
return false
}
}
}
}
var soNum = currentRec.getValue({
fieldId: 'tranid'
})
log.debug('soNum', soNum)
// var searchConfig
if ((soNum != '') && (customer != '')) {
//if in edit context
if (checkForParameter(currentRecId)) {
var searchConfig = [["internalid", "noneof", currentRecId]]
} else {
var searchConfig = [["internalid", "noneof", "@NONE@"]]
}
var searchResultCount = checkDuplicateSOEdit(soNum, customer, searchConfig)
if (searchResultCount > 0) {
alert('You have entered a duplicate Order# for this sales order !')
return false
}
}
return true;
} catch (e) {
console.log('Error@SveRecord', e)
}
}
function checkDuplicateSO(soNum, customer) {
try {
log.debug('In duplicate SO create')
var salesorderSearchObjSo = search.create({
type: "salesorder",
filters:
[
["type", "anyof", "SalesOrd"],
"AND",
["formulatext: {tranid}","is","SO-177953"],
"AND",
["mainline", "is", "T"]
],
columns:
[
search.createColumn({name: "internalid", label: "Internal ID"}),
// search.createColumn({name: "otherrefnum", label: "PO/Check Number"})
]
});
var resultCount = salesorderSearchObjSo.runPaged().count;
return resultCount;
} catch (e) {
log.debug('error@checkDuplicateSO', e)
}
}
function checkDuplicateSOEdit(soNum, customer, searchConfig) {
try {
var salesorderSearchObjSOEdit = search.create({
type: "salesorder",
filters:
[
[searchConfig],
"AND",
["type", "anyof", "SalesOrd"],
"AND",
["formulatext: {tranid}","is",soNum],
"AND",
["mainline", "is", "T"]
],
columns:
[
search.createColumn({name: "internalid", label: "Internal ID"}),
search.createColumn({name: "otherrefnum", label: "PO/Check Number"})
]
});
log.debug('In salesorderSearchObj SO', salesorderSearchObjSOEdit)
var resultCount = salesorderSearchObjSOEdit.runPaged().count;
return resultCount;
} catch (e) {
log.debug('error@checkDuplicateSOEdit', e)
}
}
function checkForParameter(parameter) {
try {
if (parameter != "" && parameter != null && parameter != undefined && parameter != "null" && parameter != "undefined" && parameter != " " && parameter != false) {
return true;
} else {
return false;
}
} catch (e) {
console.log("Error @ empty check Function: ", e.name + ' : ' + e.message)
}
}
return {
pageInit: pageInit,
saveRecord: saveRecord
};
});