Script for update customers in clutch when the record being edited in NetSuite or Webstore
define(['N/record', 'N/runtime', 'N/https', 'N/encode'],
(record,runtime, https, encode) => {
/**
* @description the function for searching customers in clutch
* @param- customer- passing customer id
* @param- headerObj- passing header object
* */
function searchCustomers(customer, headerObj) {
var searchObj = JSON.stringify({
"filters": {
"customCardNumber": customer
},
"returnFields": {
"balances": true,
"customer": true,
"alternateCustomer": true,
"giverCustomer": true,
"isEnrolled": true,
"customData": true,
"customCardNumber": true
}
})
let searchRequestUrl = "https://api.clutch.com:443/merchant/search";
var searchResponse = https.post({
url: searchRequestUrl,
body: searchObj,
headers: headerObj,
});
//log.debug("searchResponse", searchResponse);
var card = JSON.parse(searchResponse.body)
var status = searchResponse.code
if (status === 200) {
var cards = card.cards
}
return cards;
}
/**
* @description the function to check whether a value exists in parameter
* @param parameter -passing parameter
* @param parameterName - passing parameter name
* @returns{Boolean}
*/
function checkForParameter(parameter, parameterName) {
if (
parameter != "" &&
parameter != null &&
parameter != undefined &&
parameter != "null" &&
parameter != "undefined" &&
parameter != " " &&
parameter != false
) {
return true;
} else {
if (parameterName)
log.debug(
"Empty Value found",
"Empty Value for parameter " + parameterName
);
return false;
}
}
const afterSubmit = (scriptContext) => {
try {
if (scriptContext.type === scriptContext.UserEventType.EDIT) {
let currentRec = scriptContext.newRecord;
var customer = currentRec.id;
log.debug("customer",customer)
var rewardEmail=currentRec.getValue({
fieldId: 'custentity15'
});
var custPhone =currentRec.getValue({
fieldId: 'phone'
});
var firstName =currentRec.getValue({
fieldId: 'firstname'
});
var isPerson = currentRec.getValue({
fieldId: 'isperson'
});
var lastName = currentRec.getValue({
fieldId: 'lastname'
});
var lName = lastName.slice(0, 35);
if (isPerson === 'T') {
var cName = currentRec.getValue({
fieldId: 'firstname'
});
var fName = cName.slice(0, 35);
log.debug("fName",fName)
} else {
var cName = currentRec.getValue({
fieldId: 'companyname'
});
var fName = cName.slice(0, 35);
log.debug("fName",fName)
}
// taking headers from the configuration record
var configRecord = record.load({
type: 'customrecord_jj_clutch_config_record',
id: 1,
isDynamic: true,
});
var apiKey = configRecord.getValue({
fieldId: 'custrecord_jj_api_key'
})
var secretKey = configRecord.getValue({
fieldId: 'custrecord_jj_api_secret'
})
var brandId = configRecord.getValue({
fieldId: 'custrecord_jj_brand_id'
})
var locationId = configRecord.getValue({
fieldId: 'custrecord_jj_location_id'
})
var terminalId = configRecord.getValue({
fieldId: 'custrecord_jj_terminal_id'
})
var authorization = encode.convert({
string: apiKey + ':' + secretKey,
inputEncoding: encode.Encoding.UTF_8,
outputEncoding: encode.Encoding.BASE_64
});
var basicAuth = "Basic " + authorization
var headerObj = {
authorization: basicAuth,
brand: brandId,
location: locationId,
terminal: terminalId
};
var cardNumber= searchCustomers(customer, headerObj)
log.debug("cardNumber",cardNumber)
if(cardNumber.length>0) {
var existingCustCardNum = cardNumber[0].cardNumber
log.debug("existingCustCardNum", existingCustCardNum)
if (checkForParameter(lName)) {
//request object for customer update
var custUpdateObj = JSON.stringify({
"cardSetId": "SMECustomers",
"cardNumber": existingCustCardNum,
"countAsEnrollment": true,
"primaryCustomer": {
"firstName": fName,
"lastName": lName,
"phone": custPhone,
"email": rewardEmail
},
"customCardNumber": customer
})
} else {
//request object for customer update
var custUpdateObj = JSON.stringify({
"cardSetId": "SMECustomers",
"cardNumber": existingCustCardNum,
"countAsEnrollment": true,
"primaryCustomer": {
"firstName": fName,
"phone": custPhone,
"email": rewardEmail
},
"customCardNumber": customer
})
}
var updateCustUpdateUrl = "https://api.clutch.com:443/merchant/updateAccount";
//customer updation
var customerupdationResponse = https.post({
url: updateCustUpdateUrl,
body: custUpdateObj,
headers: headerObj,
});
log.debug("customerupdationResponse", customerupdationResponse)
}
}
}catch(e){
log.debug("error",e)
}
}
return {afterSubmit}
});