Remove item lines from Sales order created from estimate using Client Script

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

Leave a comment

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