Remove item lines from Sales Order created from Estimate, If the item with its corresponding quantity is already created in Sales Orders using Client Script.
/**
* @NApiVersion 2.1
* @NScriptType ClientScript
* @NModuleScope SameAccount
*/
define(['N/currentRecord', 'N/url', 'N/record', 'N/search'],
function (currentRecord, url, record, search) {
let mode = "";
function checkItemsInSalesOrders(internalID) {
try {
let quoteItemQuantities = {};
// Create a search to find quantities of items in related Sales Orders
let salesorderSearchObj = search.create({
type: "salesorder",
filters: [
["type", "anyof", "SalesOrd"],
"AND",
["createdfrom", "anyof", internalID], // Filter by current Quote
"AND",
["taxline", "is", "F"],
"AND",
["mainline", "is", "F"],
"AND",
["shipping", "is", "F"]
],
columns: [
search.createColumn({
name: "quantity",
summary: "SUM",
label: "Quantity"
}),
search.createColumn({
name: "item",
summary: "GROUP",
label: "Item"
}),
search.createColumn({
name: "custcol_jj_quote_number",
summary: "GROUP",
label: "Quote Line Number"
})
]
});
salesorderSearchObj.run().each(function (result) {
let itemId = result.getValue({
name: "item",
summary: "GROUP",
label: "Item"
});
let quantitySum = parseFloat(result.getValue({
name: "quantity",
summary: "SUM",
label: "Quantity"
}));
let quoteNumber = result.getValue({
name: "custcol_jj_quote_number",
summary: "GROUP",
label: "Quote Line Number"
});
if (!quoteItemQuantities[itemId]) {
quoteItemQuantities[itemId] = {};
}
quoteItemQuantities[itemId][quoteNumber] = quantitySum;
return true;
});
return quoteItemQuantities;
} catch (error) {
console.error('Error in checkItemsInSalesOrders', error);
}
}
function hideDuplicateItems(currentRecordObj) {
try {
let internalID = currentRecordObj.getValue({ fieldId: 'createdfrom' });
let lineCount = currentRecordObj.getLineCount({ sublistId: 'item' });
if (internalID) {
let quoteItemQuantities = checkItemsInSalesOrders(internalID);
for (let i = lineCount - 1; i >= 0; i--) {
let itemId = currentRecordObj.getSublistValue({ sublistId: 'item', fieldId: 'item', line: i });
let quantity = currentRecordObj.getSublistValue({ sublistId: 'item', fieldId: 'quantity', line: i });
let quoteNumber = currentRecordObj.getSublistValue({ sublistId: 'item', fieldId: 'custcol_jj_quote_number', line: i });
if (quoteItemQuantities[itemId] && quoteItemQuantities[itemId][quoteNumber] >= quantity) {
currentRecordObj.removeLine({
sublistId: 'item',
line: i,
ignoreRecalc: true
});
}
}
}
} catch (error) {
console.error('Error in hideDuplicateItems', error);
}
}
/**
* @param {Object} scriptContext
* @param {Record} scriptContext.currentRecord - Current form record
* @returns {boolean} Return true if record is valid
*
* @since 2015.2
*/
function pageInit(scriptContext) {
try {
let currentRecord = scriptContext.currentRecord
mode = scriptContext.mode;
if (mode == 'copy') {
hideDuplicateItems(currentRecord);
}
} catch (e) {
console.error('error in pageinit', e)
}
}
return {
pageInit: pageInit
}
}
);