Create Automatic item fulfillment from Sales Order for a specific item.

Create item fulfillment from sales order for the item mb000001. Whenever this item is added in sales order, item fulfillment record needs to create for that item in shipped status.

define([‘N/record’, ‘N/search’],

 /**

  * @param{record} record

  * @param{search} search

  */

  (record, search) => {

    /**

     * The function to create item fulfillment from slaes order for the item mb000001.

     * @param {Object} salesOrder

     * @param {array} specificItemArray

     */

    function createItemFulfillmentEdit(salesOrder) {

      try {

        let salesOrderId = salesOrder.getValue({ fieldId: ‘id’ });

        let lineCount = salesOrder.getLineCount({ sublistId: ‘item’ });

        let specificItemArray = [];

        // Check if the specific item ‘978743’ exists in the sales order

        for (let i = 0; i < lineCount; i++) {

          let item = salesOrder.getSublistValue({

            sublistId: ‘item’,

            fieldId: ‘item’,

            line: i

          });

          if (item == 978743) {

            specificItemArray.push(item)

          }

        }

        if (specificItemArray.length > 0) {

          // Search for existing item fulfillments for the specific item

          let fulfillmentSearch = search.create({

            type: “itemfulfillment”,

            filters: [

              [“type”, “anyof”, “ItemShip”],

              “AND”,

              [“mainline”, “is”, “T”],

              “AND”,

              [“createdfrom.internalid”, “anyof”, salesOrderId],

              “AND”,

              [“item.internalid”, “anyof”, “978743”]

            ],

          });

          let searchResults = fulfillmentSearch.run().getRange({ start: 0, end: 1 });

          // If no existing fulfillment found, proceed with creating a new one

          if (!searchResults || searchResults.length == 0) {

            // Transform Sales Order into Item Fulfillment

            let fulfillmentRecordObj = record.transform({

              fromType: record.Type.SALES_ORDER,

              fromId: salesOrderId,

              toType: record.Type.ITEM_FULFILLMENT,

              isDynamic: false

            });

            // Clear existing lines from the item fulfillment

            let fulfillmentLineCount = fulfillmentRecordObj.getLineCount({ sublistId: ‘item’ });

            for (let i = 0; i < fulfillmentLineCount; i++) {

              let item = fulfillmentRecordObj.getSublistValue({

                sublistId: ‘item’,

                fieldId: ‘item’,

                line: i

              });

              if (item != 978743) {

                fulfillmentRecordObj.setSublistValue({

                  sublistId: ‘item’,

                  fieldId: ‘itemreceive’,

                  value: false,

                  line: i,

                });

              }

            }

            fulfillmentRecordObj.setValue({

              fieldId: ‘shipstatus’,

              value: ‘C’

            });

            // Save the Item Fulfillment record

            let fulfillmentID = fulfillmentRecordObj.save({

              ignoreMandatoryFields: true,

              enableSourcing: true

            });

            log.debug(“Fulfillment Id”, fulfillmentID);

          }

        }

      } catch (e) {

        log.error(“Error while creating item fulfillment @ createItemFulfillmentEdit”, e);

      }

    }

    /**

     * The function to create item fulfillment from slaes order for the item mb000001.

     * @param {Object} salesOrder

     * @param {array} specificItemArray

     */

    function createItemFulfillmentCreate(salesOrder) {

      try {

        let salesOrderId = salesOrder.getValue({ fieldId: ‘id’ });

        log.debug(“salesOrderId”, salesOrderId)

        let lineCount = salesOrder.getLineCount({ sublistId: ‘item’ });

        let specificItemArray = [];

        // Check if the specific item ‘978743’ exists in the sales order

        for (let i = 0; i < lineCount; i++) {

          let item = salesOrder.getSublistValue({

            sublistId: ‘item’,

            fieldId: ‘item’,

            line: i

          });

          if (item == 978743) {

            specificItemArray.push(item)

          }

        }

        log.debug(“specificItemArray”, specificItemArray)

        if (specificItemArray.length > 0) {

          let fulfillmentRecordObj = record.transform({

            fromType: record.Type.SALES_ORDER,

            fromId: salesOrderId,

            toType: record.Type.ITEM_FULFILLMENT,

            isDynamic: false

          });

          // Clear existing lines from the item fulfillment

          let fulfillmentLineCount = fulfillmentRecordObj.getLineCount({ sublistId: ‘item’ });

          for (let i = 0; i < fulfillmentLineCount; i++) {

            let item = fulfillmentRecordObj.getSublistValue({

              sublistId: ‘item’,

              fieldId: ‘item’,

              line: i

            });

            if (item != 978743) {

              fulfillmentRecordObj.setSublistValue({

                sublistId: ‘item’,

                fieldId: ‘itemreceive’,

                value: false,

                line: i,

              });

            }

          }

          fulfillmentRecordObj.setValue({

            fieldId: ‘shipstatus’,

            value: ‘C’

          });

          // Save the Item Fulfillment record

          let fulfillmentID = fulfillmentRecordObj.save({

            ignoreMandatoryFields: true,

            enableSourcing: true

          });

          log.debug(“Fulfillment Id”, fulfillmentID);

        }

      } catch (e) {

        log.error(“Error while creating item fulfillment @ createItemFulfillmentCreate”, e);

      }

    }

    /**

     * 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 salesOrder = scriptContext.newRecord;

          let salesOrderStatus = salesOrder.getValue({ fieldId: ‘status’ });

          log.debug(“salesOrderStatus”, salesOrderStatus)

          if (salesOrderStatus == ‘Pending Fulfillment’ || salesOrderStatus == ‘Partially Fulfilled’ || salesOrderStatus == ‘Pending Billing/Partially Fulfilled’ || !salesOrderStatus) {

            createItemFulfillmentCreate(salesOrder);

          }

        }

        else if (scriptContext.type === scriptContext.UserEventType.EDIT) {

          let salesOrder = scriptContext.newRecord;

          let salesOrderStatus = salesOrder.getValue({ fieldId: ‘status’ });

          if (salesOrderStatus == ‘Pending Fulfillment’ || salesOrderStatus == ‘Partially Fulfilled’ || salesOrderStatus == ‘Pending Billing/Partially Fulfilled’) {

            createItemFulfillmentEdit(salesOrder);

          }

        }

      }

      catch (e) {

        log.error(“Error @ afterSubmit”, e)

      }

    }

    return {

      afterSubmit

    }

  });

Leave a comment

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