/**
* @NApiVersion 2.1
* @NScriptType Suitelet
*/
define(['N/record', 'N/redirect', 'N/ui/message', 'N/ui/serverWidget', 'N/search', 'SuiteScripts/vv_new_lib_constants.js', 'N/error'],
/**
* @param{record} record
* @param{redirect} redirect
* @param{message} message
* @param{serverWidget} serverWidget
*/
(record, redirect, message, serverWidget, search, _lib_constants, error) => {
/**
* Defines the Suitelet script trigger point.
* @param {Object} scriptContext
* @param {ServerRequest} scriptContext.request - Incoming request
* @param {ServerResponse} scriptContext.response - Suitelet response
* @since 2015.2
*/
function addSelectField(form, FIELD_MAPPING, soId){
var currSOHolds = search.lookupFields({
type: search.Type.SALES_ORDER,
id: soId,
columns: ["custbody_vvs_sales_hold", "custbody_vv_so_hold_reason", "custbody_vv_taxholdreason"]
});
for(var key in FIELD_MAPPING){
var obj = FIELD_MAPPING[key];
var defValue = [];
for(var i = 0; i < currSOHolds[obj.FIELD_ID].length; i++){
defValue.push(currSOHolds[obj.FIELD_ID][i].value);
}
var salesHoldField = form.addField(obj.FIELD_SETUP);
salesHoldField.defaultValue = defValue
if(key !== "SALES_HOLD"){
salesHoldField.addSelectOption({
value : "",
text : "- None -"
});
}
var salesHoldSSObj = search.create({
type: obj.LIST,
filters: [],
columns: ["name", "internalid"]
});
var results = salesHoldSSObj.run().getRange(0,1000);
var exemptedSalesHold = obj.EXEMPTED_VALUES
for(var i = 0; i < results.length; i++){
var name = results[i].getValue("name")
if(exemptedSalesHold.indexOf(name) === -1){
salesHoldField.addSelectOption({
value : results[i].getValue("internalid"),
text : name
});
}
}
}
return form;
}
const onRequest = (scriptContext) => {
const GLOBAL_CONSTANTS = _lib_constants.getConstants()
const SALESHOLD_CREDIT_HOLD = GLOBAL_CONSTANTS.SALES_HOLD.CREDIT_HOLD
if(scriptContext.request.method == "GET"){
var soId = scriptContext.request.parameters.soId;
var FIELD_MAPPING = {
SALES_HOLD: {
FIELD_SETUP: {
id: "custpage_hold",
type: serverWidget.FieldType.MULTISELECT,
label: "Sales Hold",
},
FIELD_ID: "custbody_vvs_sales_hold",
LIST: "customlist_sales_hold",
EXEMPTED_VALUES: ["HCK Hold", "Credit Hold", "Pending Payment", "New Prescription Hold", "Backorder Hold"],
},
ORDER_HOLD: {
FIELD_SETUP: {
id: "custpage_order_hold",
type: serverWidget.FieldType.SELECT,
label: "Customer Hold",
},
FIELD_ID: "custbody_vv_so_hold_reason",
LIST: "customlist_vv_order_hold_reasons",
EXEMPTED_VALUES: [],
},
TAX_HOLD: {
FIELD_SETUP: {
id: "custpage_tax_hold",
type: serverWidget.FieldType.SELECT,
label: "Tax Hold",
},
FIELD_ID: "custbody_vv_taxholdreason",
LIST: "customlist_vv_taxholdreason",
EXEMPTED_VALUES: [],
},
}
var form = serverWidget.createForm({
title: "Update Sales Hold",
});
var soField = form.addField({
id: "custpage_soid",
type: serverWidget.FieldType.TEXT,
label: "Sales Order Id",
})
soField.defaultValue = soId;
soField.updateDisplayType({
displayType: serverWidget.FieldDisplayType.HIDDEN
})
form = addSelectField(form, FIELD_MAPPING, soId)
form.addSubmitButton("Update")
scriptContext.response.writePage(form);
}else{
log.debug("params", scriptContext.request.parameters)
var salesHold = scriptContext.request.parameters.custpage_hold.split("\u0005");
var orderHold = scriptContext.request.parameters.custpage_order_hold || "";
var taxHold = scriptContext.request.parameters.custpage_tax_hold || "";
var soId = scriptContext.request.parameters.custpage_soid;
log.debug("custpage_sales_hold", salesHold);
log.debug("custpage_order_hold", orderHold);
log.debug("custpage_tax_hold", taxHold);
try{
var soRec = record.load({
type: record.Type.SALES_ORDER,
id: soId,
isDynamic: true
});
var originalSalesHold = soRec.getValue("custbody_vvs_sales_hold");
var creditHold = originalSalesHold.includes(SALESHOLD_CREDIT_HOLD.toString());
var difference = originalSalesHold.filter(function(x){
if(x === SALESHOLD_CREDIT_HOLD.toString()){
return salesHold.indexOf(x) !== -1
}
else{
return salesHold.indexOf(x) === -1
}
});
log.debug("difference", difference);
var currentTracker = soRec.getValue("custbody_vv_salesholdremovedtracker");
soRec.setValue("custbody_vv_salesholdremovedtracker", currentTracker.concat(difference))
if(creditHold){
salesHold.push(SALESHOLD_CREDIT_HOLD.toString());
salesHold = salesHold.filter(val => val);
soRec.setValue("custbody_vvs_sales_hold",salesHold);
}
else{
soRec.setValue("custbody_vvs_sales_hold", salesHold)
}
soRec.setValue("custbody_vv_so_hold_reason", orderHold)
soRec.setValue("custbody_vv_taxholdreason", taxHold)
soRec.save();
}catch (e) {
log.error("Error @ POST", JSON.stringify(e));
}
redirect.toRecord({
id: soId,
type: record.Type.SALES_ORDER,
isEditMode: false
})
}
}
return {onRequest}
});