Gross Profit Calculation on Button click

 /**

     * @description Function to check value

     * @param {*} parameter

     * @returns boolean

     */

    function checkForParameter(parameter) {

        if (parameter !== “” && parameter !== null && parameter !== undefined && parameter !== false && parameter !== “null” && parameter !== “undefined” && parameter !== ” “ && parameter !== ‘false’ && parameter !== {}) {

            return true;

        } else {

            return false;

        }

    }

    /**

     * Function to exchange the rate

     * @param {int} fromCurrency

     * @param {int} toCurrency

     * @param {date} date

     * @returns

     */

    function getExchangeRate(fromCurrency, toCurrency, date) {

        let exchangeRate = 1; // Default to 1 if no conversion is needed

        try {

            // Fetch exchange rate from source to target currency on a specific date

            exchangeRate = currency.exchangeRate({

                source: fromCurrency,

                target: toCurrency,

                date: date

            }) || 1;

            return exchangeRate;

        } catch (e) {

            console.error(‘Error fetching exchange rate:’, e);

        }

        return exchangeRate;

    }

    /**

     * @description Function to update GP

     * @param {*} recId

     * @param {*} typeOfRec

     */

    function updateGPFields(recId, typeOfRec, path) {

        try {

            let rec;

            rec = record.load({

                type: typeOfRec,

                id: recId,

                isDynamic: false,

            });

            let lineCount = rec.getLineCount({ sublistId: ‘item’ });

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

                let requestKey = rec.getSublistValue({

                    sublistId: ‘item’,

                    fieldId: ‘custcol_mhi_ibs_request_key’,

                    line: i

                });

                let lineCurrency;

                if (typeOfRec == “purchaseorder”) {

                    let vrfqId = rec.getSublistValue({

                        sublistId: ‘item’,

                        fieldId: ‘custcol_mhi_ibs_vendor_quote’,

                        line: i

                    });

                    let purchaseorderSearchObj = search.create({

                        type: search.Type.PURCHASE_ORDER,

                        filters: [

                            [‘internalid’, ‘anyof’, rec.id],

                            ‘AND’,

                            [‘custcol_mhi_ibs_request_key’, ‘is’, requestKey],

                            ‘AND’,

                            [‘custcol_mhi_ibs_vendor_quote’, ‘anyof’, vrfqId]

                        ],

                        columns: [

                            search.createColumn({ name: ‘custcol_mhi_ibs_vendor_currency’, join: ‘CUSTCOL_MHI_IBS_VENDOR_QUOTE’ })

                        ]

                    });

                    purchaseorderSearchObj.run().each(function (result) {

                        lineCurrency = result.getValue({ name: ‘custcol_mhi_ibs_vendor_currency’, join: ‘CUSTCOL_MHI_IBS_VENDOR_QUOTE’ });

                        // If lineCurrency is empty, skip to the next iteration

                        if (!lineCurrency) {

                            console.log(‘Vendor Currency is empty, moving to next iteration’);

                            return true; // Continue to the next iteration

                        }

                        return false; // Exit early after finding the first match

                    });

                } else {

                    lineCurrency = rec.getSublistValue({

                        sublistId: ‘item’,

                        fieldId: ‘custcol_mhi_ibs_vendor_currency’,

                        line: i

                    })

                }

                if (!requestKey) {

                    console.log(‘No request key on line ${i}’);

                    continue;

                }

                let soData = fetchSalesOrderData(requestKey);

                if ((!checkForParameter(soData.intId)) && (!checkForParameter(soData.quantity)) && (!checkForParameter(soData.rate)) && (!checkForParameter(soData.price))) {

                    alert(‘No Sales Order Data for line!’);

                    return;

                }

                else {

                    let soQty;

                    let estGP;

                    soQty = soData.quantity;

                    let exchangeRate = null;

                    if (lineCurrency != soData.currency) {

                        exchangeRate = getExchangeRate(lineCurrency, soData.currency, new Date()); // Assuming ‘1’ is USD

                    }

                    console.log(“exchangeRate…”, exchangeRate)

                    if (checkForParameter(soQty)) {

                        let altSaleAmt = soData.rate * exchangeRate;;

                        let allocationQty = rec.getSublistValue({

                            sublistId: ‘item’,

                            fieldId: ‘custcol_mhi_ibs_request_qty’,

                            line: i

                        });

                        estGP = (altSaleAmt / soQty) * allocationQty;

                    }

                    if (checkForParameter(soData.price)) {

                        let convertedPrice = exchangeRate != null ? soData.price * exchangeRate : soData.price;

                        rec.setSublistValue({

                            sublistId: ‘item’,

                            fieldId: ‘custcol_req_po_so_sale_price’,

                            line: i,

                            value: convertedPrice

                        });

                    }

                    if (checkForParameter(soData.amount)) {

                        let convertedAmount = exchangeRate != null ? soData.amount * exchangeRate : soData.amount; // Convert amount

                        rec.setSublistValue({

                            sublistId: ‘item’,

                            fieldId: ‘custcol_req_po_so_sale_amount’,

                            line: i,

                            value: convertedAmount

                        });

                    }

                    if (checkForParameter(soData.currency)) {

                        rec.setSublistValue({

                            sublistId: ‘item’,

                            fieldId: ‘custcol_req_po_so_sale_currency’,

                            line: i,

                            value: soData.currency

                        });

                    }

                    if (checkForParameter(estGP)) {

                        rec.setSublistValue({

                            sublistId: ‘item’,

                            fieldId: ‘custcol_req_po_so_est_gp’,

                            line: i,

                            value: estGP

                        });

                    }

                }

            }

            rec.save({

                enableSourcing: true,

                ignoreMandatoryFields: true,

            });

            alert(‘Gross Profit fields updated successfully!’);

            let parent = window.parent;

            parent.location.href = getRecURL(recId, path);

        } catch (e) {

            console.error(‘Error updating GP fields:’, e);

            alert(‘An error occurred while updating GP fields. Check the logs for details.’);

        }

    }

    /**

     * @description Function to reload record

     * @param {*} recId

     * @param {*} path

     * @returns string

     */

    function getRecURL(recId, path) {

        try {

            var recURL = url.format({

                domain: path,

                params: {

                    id: recId,

                    whence: ,

                }

            });

            window.parent.location.href = recURL;

            return recURL;

        }

        catch (e) {

            log.error(“error@getIFURL”, e);

        }

    }

    /**

     * @description Sales Order search

     * @param {*} requestKey

     * @returns object

     */

    function fetchSalesOrderData(requestKey) {

        var salesorderSearchObj = search.create({

            type: “salesorder”,

            filters: [

                [“type”, “anyof”, “SalesOrd”],

                “AND”,

                [“custcol_mhi_ibs_request_key”, “is”, requestKey],

                “AND”,

                [“taxline”, “is”, “F”],

                “AND”,

                [“mainline”, “is”, “F”],

                “AND”,

                [“cogs”, “is”, “F”],

                “AND”,

                [“shipping”, “is”, “F”]

            ],

            columns: [

                search.createColumn({ name: “internalid”, label: “Internal Id” }),

                search.createColumn({ name: “custcol_mhi_ibs_entity_price”, label: “Entity Price” }),

                search.createColumn({ name: “amount”, label: “Amount” }),

                search.createColumn({ name: “currency”, label: “Currency” }),

                search.createColumn({ name: “rate”, label: “Base Price” }),

                search.createColumn({ name: “quantity”, label: “Sale Qty” }),

                search.createColumn({ name: “fxestgrossprofit”, label: “Est. Gross Profit (Line) (Foreign Currency)” })

            ]

        });

        var obj = {};

        salesorderSearchObj.run().each(function (result) {

            obj.intId = result.getValue({ name: “internalid” });

            obj.price = result.getValue({ name: “custcol_mhi_ibs_entity_price” });

            obj.amount = result.getValue({ name: “amount” });

            obj.currency = result.getValue({ name: “currency” });

            obj.rate = result.getValue({ name: “fxestgrossprofit” });

            obj.quantity = result.getValue({ name: “quantity” });

            return false;

        });

        return obj;

    }

Leave a comment

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