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