Automated Item Pricing Based on the Preferred Vendor’s Purchase Price

/**

 * @NApiVersion 2.1

 * @NScriptType UserEventScript

 */

define([‘N/record’],

    /**

 * @param{record} record

 */

    (record) => {

        /**

         * 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 beforeSubmit = (context) => {

            if (context.type !== context.UserEventType.CREATE && context.type !== context.UserEventType.EDIT) {

                return;

            }

            const currentRecord = context.newRecord;

            let currencyId = currentRecord.getValue({ fieldId: ‘currency’ });

            log.debug(“currencyId”, currencyId);

            // Get the itemvendor sublist details

            let itemVendorCount = currentRecord.getLineCount({ sublistId: ‘itemvendor’ });

            log.debug(“itemVendorCount”, itemVendorCount);

            let preferredVendorDetails = null;

            // Loop through the sublist to find the preferred vendor

            for (let i = 0; i < itemVendorCount; i++) {

                let isPreferred = currentRecord.getSublistValue({

                    sublistId: ‘itemvendor’,

                    fieldId: ‘preferredvendor’,

                    line: i

                });

                if (isPreferred === true || isPreferred === ‘T’) {

                    preferredVendorDetails = {

                        vendor: currentRecord.getSublistValue({

                            sublistId: ‘itemvendor’,

                            fieldId: ‘vendor’,

                            line: i

                        }),

                        purchasePrice: currentRecord.getSublistValue({

                            sublistId: ‘itemvendor’,

                            fieldId: ‘purchaseprice’,

                            line: i

                        })

                    };

                    break;

                }

            }

            if (!preferredVendorDetails || isNaN(preferredVendorDetails.purchasePrice)) {

                throw (‘No Preferred Vendor Found in the Item Record. Please choose Preferred Vendor ‘);

            }

            let basePrice = (preferredVendorDetails.purchasePrice / (1 0.50)).toFixed(2);

            let discountPrice = (preferredVendorDetails.purchasePrice / (1 0.30)).toFixed(2);

            let onlinePrice = (preferredVendorDetails.purchasePrice / (1 0.30)).toFixed(2);

            log.debug(“Pricing Calculations”, { basePrice, discountPrice, onlinePrice });

            // Update the pricing sublist

            const price1Count = currentRecord.getLineCount({ sublistId: ‘price1’ });

            for (let i = 0; i < price1Count; i++) {

                const priceLevel = currentRecord.getSublistValue({

                    sublistId: ‘price1’,

                    fieldId: ‘pricelevel’,

                    line: i

                });

                if (priceLevel === ‘1’) { // Base Price

                    currentRecord.setSublistValue({

                        sublistId: ‘price1’,

                        fieldId: ‘price_1_’,

                        line: i,

                        value: basePrice

                    });

                } else if (priceLevel === ‘5’) { // Online Price

                    currentRecord.setSublistValue({

                        sublistId: ‘price1’,

                        fieldId: ‘price_1_’,

                        line: i,

                        value: onlinePrice

                    });

                } else if (priceLevel === ’13’) { // Discount Price

                    currentRecord.setSublistValue({

                        sublistId: ‘price1’,

                        fieldId: ‘price_1_’,

                        line: i,

                        value: discountPrice

                    });

                }

            }

        }

        return { beforeSubmit }

    });

Leave a comment

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