Auto Populate Ship date in Sales Order using script

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 };
});

Leave a comment

Your email address will not be published. Required fields are marked *