define(["N/record","N/format","N/config"], (record,format,config) => {
/**
* @description Generate date value from the Date string
* @param {*} dateObj
* @returns
*/
function generateDateString(dateObj) {
let date = dateObj;
log.debug("date", date);
let d = date.getDate();
let m = date.getMonth() + 1;
let y = date.getFullYear();
let dateString =
(m <= 9 ? "0" + m : m) + "/" + (d <= 9 ? "0" + d : d) + "/" + y;
return dateString;
}
/**
* @description Generate time value from the Date string
* @param {*} dateobj2
* @returns
*/
function generateTimeString(dateobj2) {
let h = dateobj2.getHours();
let m = dateobj2.getMinutes();
let s = dateobj2.getSeconds();
let ampm = h >= 12 ? 'pm' : 'am';
h = h % 12;
h = h ? h : 12; // the hour '0' should be '12'
m = m < 10 ? '0' + m : m;
let strTime = h + ':' + m + ':' + s + ' ' + ampm;
return strTime;
}
/**
* Defines the function definition that is executed after 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 afterSubmit = (scriptContext) => {
try {
if (scriptContext.type === scriptContext.UserEventType.CREATE) {
let currentSO = scriptContext.newRecord;
log.debug("currentRec id ", currentSO.id);
let currentRec = record.load({
type: record.Type.SALES_ORDER,
id: currentSO.id,
isDynamic: true,
});
let currentDate = new Date();
//Fetch the time zone of currently logged user
let currentTimeZone = config.load({type: config.Type.USER_PREFERENCES}).getValue({fieldId: "TIMEZONE"})
log.debug("currentTimeZone()",currentTimeZone)
// Convert current date into this time zone
let convertTimeZone = format.format({
value : currentDate,
type : format.Type.DATETIME,
timezone : currentTimeZone
});
// Fetch the Date value from the current date
let newShipDate = generateDateString(new Date(convertTimeZone));
log.debug("newShipDate", newShipDate);
// Fetch the Time value from the current date
let newShipTime = generateTimeString(new Date(convertTimeZone));
log.debug("newShipTime", newShipTime);
//Append the current date and time in a specific format
let newDateTime = newShipDate +" "+ newShipTime
log.debug("newDateTime", newDateTime);
// Fetch Today and Tommorrow date
let currentDay = new Date(newShipDate);
log.debug("currentDay", currentDay);
let nextDay = new Date(currentDay);
nextDay.setDate(currentDay.getDate() + 1);
log.debug("nextDay", nextDay);
let timeSuffix = newDateTime.split(" ")[2]
log.debug("timeSuffix", timeSuffix);
// The Ship date field value is updated with tomorrow date if it is order is placed after 12 PM. Otherwise updated with today date.
let formatedShipDate;
if(timeSuffix == "am"){
formatedShipDate = format.parse({
value: currentDay,
type: format.Type.DATE,
});
log.debug("formatedShipDate - IF", formatedShipDate);
}
else {
formatedShipDate = format.parse({
value: nextDay,
type: format.Type.DATE,
});
log.debug("formatedShipDate - ELSE", formatedShipDate);
}
currentRec.setValue({
fieldId: "shipdate",
value: formatedShipDate,
});
let recordId = currentRec.save({
enableSourcing: true,
ignoreMandatoryFields: true,
});
}
} catch (e) {
log.debug({ title: "error@afterSubmit", details: e });
}
};
return { afterSubmit };
});