to customize the customer portal by automating the field named Sales Effective/ Shipping Date in the Sales Order.
When the Sales Rep must approve the SO, the Sales Effective/Shipping Date shall be applied. Depending on the Customer Price Level (e.g. OEM, Distributor, Dealer, Builder) there would be specific number of working days added to the date of SO release.
Sales Effective/Shipping Date = Date + Number of working days corresponds to the channel
Number of Working Days to be added for each customer channel
OEM +45 working days, Distributor +15 working days, Dealer +5 working days, Builder +5 working days , Retail +2 working days, Artist +2 working days
/**
* @NApiVersion 2.1
* @NScriptType UserEventScript
*/
/************************************************************************************************
*Script for updating Sales Effective date*
*
*********************************************************************************************
*
* Author: GRAPH TECH INNOVATIONS LTD
*
* Date Created : 22-April-2022
*
* Created By: VAIRAMUTHU, GRAPH TECH INNOVATIONS LTD
*
* Description : Script for updating Sales Effective date
*
* REVISION HISTORY
*
***********************************************************************************************/
define(['N/record'],
/**
* @param{record} record
*/
(record) => {
/**
*
* @param newDate
* @param daysToAdd
* @returns newDate
*/
function addBusinessDays(newDate, daysToAdd)
{
log.debug({title: 'new date', details: newDate});
log.debug({title: 'daysToAdd', details: daysToAdd});
let dayCounter = 0;
while (dayCounter < daysToAdd)
{
newDate.setDate(newDate.getDate() + 1);
if (newDate.getDay() === 0) //Day 0 is sunday
{
newDate.setDate(newDate.getDate() + 1);
}
else if (newDate.getDay() === 6) //Day 6 is saturday
{
newDate.setDate(newDate.getDate() + 2);
}
dayCounter++;
}
return newDate;
}
/**
* Defines the function definition that is executed before record is submitted.
* @param {Object} scriptContext
* @param {Record} scriptContext.newRecord - New record
* @param {Record} scriptContext.oldRecord - Old record
* @param {string} scriptContext.type - Trigger type; use values from the context.UserEventType enum
* @since 2015.2
*/
const beforeSubmit = (scriptContext) =>
{
try
{
if (scriptContext.type === 'create')
{
let newRecord = scriptContext.newRecord;
let date = newRecord.getValue({fieldId: 'trandate'});
log.debug({title: 'date', details: date});
let channel = newRecord.getValue({fieldId: 'custbody_eb_channel'});
log.debug({title: 'channel', details: channel});
let salesEffectiveDate;
switch (channel)
{
case '2':
salesEffectiveDate = addBusinessDays(date, 2);
break;
case '3':
salesEffectiveDate = addBusinessDays(date, 5);
break;
case '5':
salesEffectiveDate = addBusinessDays(date, 5);
break;
case '4':
salesEffectiveDate = addBusinessDays(date, 5);
break;
case '6':
salesEffectiveDate = date; //working days not giving for this channel
break;
case '7':
salesEffectiveDate = date; //working days not giving for this channel
break;
case '12':
salesEffectiveDate = addBusinessDays(date, 45);
break;
case '8':
salesEffectiveDate = addBusinessDays(date, 45);
break;
case '9':
salesEffectiveDate = addBusinessDays(date, 45);
break;
case '10':
salesEffectiveDate = date; //working days not giving for this channel
break;
case '11':
salesEffectiveDate = date; //working days not giving for this channel
break;
}
log.debug({title: 'Sales Effective Date', details: salesEffectiveDate});
newRecord.setValue({fieldId: 'saleseffectivedate', value: salesEffectiveDate}); //set the values to sales effective date field
}
}
catch (e)
{
log.debug({title: 'error in beforeSubmit', details: e});
}
}
return {beforeSubmit}
});