This script is used to get the req del date column in the item line and then using the suitelet fields the sales order lines can be updated fo the mentioned roles
define([
‘N/ui/serverWidget’,
‘N/record’,
‘N/runtime’,
‘N/format’
],
/**
*
* @param {*} serverWidget
* @param {*} record
* @param {*} runtime
* @param {*} format
* @returns
*/
(serverWidget, record, runtime, format) => {
“use strict”
const REQ_DEL_DATE_EDIT_ALLOWED_ROLES = {
‘JJ_CORE_ADMINISTRATOR’: 1112,
‘AHA_DIRECTOR_OF_ECOMMERCE’: 1113,
‘AHA_DATA_ANALYST’: 1244
}
const CHANGE_COUNT_FIELD = ‘custbody_jj_req_date_change_count’;
const DELIMITOR = ‘u0001‘;
const SUBLIST_DELIMITOR = ”;
const SUBLIST_FIELD_DELIMITOR = ”;
const CLIENT_SCRIPT_ID = ‘SuiteScripts/Jobin and Jismi IT Services/AHAP-1669-Changing-SalesLocation/jj_cs_req_del_date_ahap_3692.js’;
const MAXIMUM_EDITS = 3;
/**
* Defines the Suitelet script trigger point.
* @param {Object} scriptContext
* @param {ServerRequest} scriptContext.request – Incoming request
* @param {ServerResponse} scriptContext.response – Suitelet response
* @since 2015.2
*/
const onRequest = (scriptContext) => {
try {
let userRole = runtime.getCurrentUser().role;
if (scriptContext.request.method === ‘GET’) {
let request = scriptContext.request;
let response = scriptContext.response;
let soId = request.parameters.recordId;
if (!soId) {
response.write(‘Missing Sales Order ID.’);
return;
}
let salesOrder = record.load({
type: record.Type.SALES_ORDER,
id: soId,
isDynamic: true
});
let changeCount = getChangeCount(salesOrder);
let createdFrom = getCreatedFrom(salesOrder);
if (Object.values(REQ_DEL_DATE_EDIT_ALLOWED_ROLES).includes(userRole) && Number(changeCount) >= Number(MAXIMUM_EDITS) && !createdFrom) {
response.write(`<h3 style=”color:red;”>You have exceeded the maximum number of allowed changes for Requested Delivery Date on this Sales Order.</h3>`);
return;
}
let form = serverWidget.createForm({
title: ‘Edit Requested Delivery Dates’,
hideNavBar: true
});
form.clientScriptModulePath = CLIENT_SCRIPT_ID;
form.addField({
id: ‘custpage_header_req_date’,
type: serverWidget.FieldType.DATE,
label: ‘Global Requested Delivery Date’
});
let hiddenSoIdField = form.addField({
id: ‘custpage_soid’,
type: serverWidget.FieldType.TEXT,
label: ‘Sales Order ID’
});
hiddenSoIdField.defaultValue = soId;
hiddenSoIdField.updateDisplayType({
displayType: serverWidget.FieldDisplayType.HIDDEN
});
let sublist = form.addSublist({
id: ‘custpage_sublist’,
type: serverWidget.SublistType.EDITOR,
label: ‘Sales Order Lines’
});
let lineField = sublist.addField({ id: ‘line’, label: ‘Line’, type: serverWidget.FieldType.INTEGER });
lineField.updateDisplayType({ displayType: serverWidget.FieldDisplayType.DISABLED });
let itemField = sublist.addField({ id: ‘item’, label: ‘Item’, type: serverWidget.FieldType.TEXT });
itemField.updateDisplayType({ displayType: serverWidget.FieldDisplayType.DISABLED });
let description = sublist.addField({ id: ‘description’, label: ‘Description’, type: serverWidget.FieldType.TEXT });
description.updateDisplayType({ displayType: serverWidget.FieldDisplayType.DISABLED });
sublist.addField({ id: ‘req_date’, label: ‘Requested Delivery Date’, type: serverWidget.FieldType.DATE });
let lineCount = salesOrder.getLineCount({ sublistId: ‘item’ });
for (let i = 0; i < lineCount; i++) {
sublist.setSublistValue({ id: ‘line’, line: i, value: (i + 1).toString() });
sublist.setSublistValue({ id: ‘item’, line: i, value: salesOrder.getSublistText({ sublistId: ‘item’, fieldId: ‘item’, line: i }) });
sublist.setSublistValue({ id: ‘description’, line: i, value: salesOrder.getSublistValue({ sublistId: ‘item’, fieldId: ‘description’, line: i }) || ” });
let reqDate = salesOrder.getSublistValue({ sublistId: ‘item’, fieldId: ‘custcol_req_del_date’, line: i });
if (reqDate) {
reqDate = formatDate(reqDate);
sublist.setSublistValue({ id: ‘req_date’, line: i, value: reqDate });
}
}
form.addSubmitButton({ label: ‘Apply Changes’ });
response.writePage(form);
}
else if (scriptContext.request.method === ‘POST’) {
let params = scriptContext.request.parameters;
let rawData = params.custpage_sublistdata;
const fields = params.custpage_sublistfields.split(DELIMITOR);
let records = rawData.split(SUBLIST_DELIMITOR);
let result = records.map(record => {
let fields = record.split(SUBLIST_FIELD_DELIMITOR);
return { fields };
});
let soId = scriptContext.request.parameters.custpage_soid;
let salesOrder = record.load({
type: record.Type.SALES_ORDER,
id: soId,
isDynamic: true
});
let lineCount = salesOrder.getLineCount({ sublistId: ‘item’ });
let globalDate = scriptContext.request.parameters.custpage_header_req_date;
for (let i = 0; i < lineCount; i++) {
let paramDate = result[i].req_date || globalDate;
if (paramDate) {
salesOrder.selectLine({ sublistId: ‘item’, line: i });
salesOrder.setCurrentSublistValue({
sublistId: ‘item’,
fieldId: ‘custcol_req_del_date’,
value: new Date(paramDate),
ignoreFieldChange: true
});
salesOrder.commitLine({ sublistId: ‘item’ });
}
}
if (Object.values(REQ_DEL_DATE_EDIT_ALLOWED_ROLES).includes(userRole)) {
let changeCount = getChangeCount(salesOrder);
salesOrder.setValue({
fieldId: CHANGE_COUNT_FIELD,
value: Number(changeCount) + 1
});
}
salesOrder.save();
scriptContext.response.write(`<h3 style=”color:green;”>Requested Delivery Dates updated successfully!</h3>
<script>
window.opener.location.reload();
setTimeout(function() {
window.close();
}, 2000);
</script>
`);
}
}
catch (error) {
log.error(‘Error in onRequest’, error);
scriptContext.response.write(`<h3 style=”color:red;”>An error occurred: ${error.message}</h3>`);
}
}
/**
* @description This function is to format the date object.
* @param {*} parsedDateStringAsRawDateObject – the date object.
* @returns { string }
* formattedDateString – The Formatted date in the ‘M/DD/YYYY’ format.’
*/
function formatDate(parsedDateStringAsRawDateObject) {
try {
let formattedDateString = format.format({
value: parsedDateStringAsRawDateObject,
type: format.Type.DATE
});
return formattedDateString;
} catch (e) {
log.error(‘error @formatDate’, e);
return ”;
}
}
/**
* @description Function to get the change count of the sales order.
* @param {*} salesOrder – the sales order record.
* @returns { number }
* changeCount – The change count of the sales order record.
*/
function getChangeCount(salesOrder) {
try {
let changeCount = salesOrder.getValue({ fieldId: CHANGE_COUNT_FIELD }) || 0;
return changeCount;
} catch (e) {
log.error(‘error @ getChangeCount’, e);
return 0;
}
}
function getCreatedFrom(salesOrder) {
try {
let createdFrom = salesOrder.getValue({ fieldId: ‘createdfrom’ });
if (createdFrom) {
return createdFrom;
}
else {
return null;
}
}
catch (e) {
log.error(‘error @ getCreatedFrom’, e);
return nulll;
}
}
return { onRequest }
});