How to set Contract Pricing through Custom Records

/**
 * @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 }

    });

Leave a comment

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