/**
* @NApiVersion 2.1
* @NScriptType UserEventScript
*/
/**
* * *********************************************************************************************************
* Airport Home Appliance-US-NS
*
* AHAP-1065 : Source sales invoice cost from custom record to sales order based on contract date period.
*
* ************************************************************************************************************
* Author : Jobin and Jismi IT Services
*
* Date Created: 29 - May - 2023
*
* Created by: Linu Paul, Jobin and Jismi IT Services
*
* Description: This User Event script is used for sourcing sale invoice script from custom record to sales order
* Revision History:
*
* *
* ***************************************************************************************************************
*/
define(['N/record', 'N/search'],
/**
* @param{error} error
* @param{record} record
* @param{search} search
*/
(record, search) => {
"use strict";
/**
* 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 afterSubmit = (scriptContext) => {
try {
let newRec = scriptContext.newRecord;
if (newRec.type === record.Type.SALES_ORDER) {
let cusName = newRec.getValue({
fieldId: "entity"
});
let createdDate = newRec.getValue({
fieldId: "trandate"
});
if (scriptContext.type === scriptContext.UserEventType.EDIT || scriptContext.type === scriptContext.UserEventType.CREATE) {
let lineCount = newRec.getLineCount({
sublistId: "item"
});
let i;
let interId = scriptContext.newRecord.id;
let salesOrderLoad = record.load({
type: record.Type.SALES_ORDER,
id: interId,
isDynamic: true
});
for (i = 0; i < lineCount; i++) {
let itemName = newRec.getSublistValue({
sublistId: "item",
fieldId: "item",
line: i
});
let customrecord_jj_contract_record_ahap1065SearchObj = search.create({
type: "customrecord_jj_contract_record_ahap1065",
filters:
[
["custrecord_jj_customername", "anyof", cusName],
"AND",
["custrecord_jj_itemname", "anyof", itemName],
"AND",
["isinactive", "is", "F"]
],
columns:
[
search.createColumn({ name: "internalid", label: "Internal ID" }),
search.createColumn({ name: "custrecord_jj_customername", label: "Customer Name" }),
search.createColumn({ name: "custrecord_jj_itemname", label: "Item Name" }),
search.createColumn({ name: "custrecord_jj_startdate", label: "Contract Period Start Date" }),
search.createColumn({ name: "custrecord_jj_enddate", label: "Contract Period End Date" }),
search.createColumn({ name: "custrecord_jj_salescost", label: "Sales Invoice Cost" }),
search.createColumn({
name: "lastmodified",
sort: search.Sort.DESC,
label: "Last Modified"
})
]
});
let searchResultCount = customrecord_jj_contract_record_ahap1065SearchObj.runPaged().count;
if (searchResultCount > 0) {
let arr = [];
let obj;
let searchResult = customrecord_jj_contract_record_ahap1065SearchObj.run();
searchResult.each(function (result) {
obj = {};
obj.start_date = result.getValue(searchResult.columns[3]);
obj.end_date = result.getValue(searchResult.columns[4]);
obj.item_name = result.getValue(searchResult.columns[2]);
obj.sales_invoice_cost = result.getValue(searchResult.columns[5]);
arr.push(obj);
return true;
});
let j;
let salesCost, startDate, endDate, itemId;
let checked = 0;
for (j = 0; j < arr.length; j++) {
salesCost = arr[j].sales_invoice_cost;
itemId = arr[j].item_name;
log.debug("item name", itemId);
startDate = new Date(arr[j].start_date);
endDate = new Date(arr[j].end_date);
if (createdDate >= startDate && createdDate <= endDate) {
if (checked == 0) {
checked = 1;
salesOrderLoad.selectLine({
sublistId: 'item',
line: i
});
//To set the sublist value amount
salesOrderLoad.setCurrentSublistValue({
sublistId: "item",
fieldId: "custcol_aha_sales_invoice_cost",
value: salesCost,
line: i,
ignoreFieldChange: true
});
salesOrderLoad.commitLine({
sublistId: 'item'
});
}
}
else {
let itemSearchObj = search.create({
type: "item",
filters:
[
["internalid", "anyof", itemName],
"AND",
["isinactive", "is", "F"]
],
columns:
[
search.createColumn({ name: "custitem_aha_sales_invoice_cost", label: "Sales Invoice Cost" })
]
});
let searchResultCount = itemSearchObj.runPaged().count;
log.debug("itemSearchObj result count", searchResultCount);
let salesInvoice;
if (searchResultCount > 0) {
itemSearchObj.run().each(function (result) {
// .run().each has a limit of 4,000 results
salesInvoice = result.getValue(itemSearchObj.columns[0]);
return true;
});
log.debug("sales invoice cost of item without search", salesInvoice);
if (checked == 0) {
checked = 1;
salesOrderLoad.selectLine({
sublistId: 'item',
line: i
});
//To set the sublist value amount
salesOrderLoad.setCurrentSublistValue({
sublistId: "item",
fieldId: "custcol_aha_sales_invoice_cost",
value: salesInvoice,
line: i,
ignoreFieldChange: true
});
salesOrderLoad.commitLine({
sublistId: 'item'
});
}
}
}
}
}
else {
log.debug("item name in without search", itemName);
let itemSearchObj = search.create({
type: "item",
filters:
[
["internalid", "anyof", itemName],
"AND",
["isinactive", "is", "F"]
],
columns:
[
search.createColumn({ name: "custitem_aha_sales_invoice_cost", label: "Sales Invoice Cost" })
]
});
let searchResultCount = itemSearchObj.runPaged().count;
log.debug("itemSearchObj result count", searchResultCount);
let salesInvoice;
if (searchResultCount > 0) {
itemSearchObj.run().each(function (result) {
// .run().each has a limit of 4,000 results
salesInvoice = result.getValue(itemSearchObj.columns[0]);
return true;
});
log.debug("sales invoice cost of item without search", salesInvoice);
salesOrderLoad.selectLine({
sublistId: 'item',
line: i
});
//To set the sublist value amount
salesOrderLoad.setCurrentSublistValue({
sublistId: "item",
fieldId: "custcol_aha_sales_invoice_cost",
value: salesInvoice,
line: i,
ignoreFieldChange: true
});
salesOrderLoad.commitLine({
sublistId: 'item'
});
}
}
}
salesOrderLoad.save({
enableSourcing: true,
ignoreMandatoryFields: true
});
}
}
}
catch (e) {
log.error("error @aftersubmit", e);
}
}
return { afterSubmit }
});