To display Sale Price, Amount & GP on Requisition & PO on button click

To display Sale Price, Amount & GP on Requisition & PO on button click

define(['N/record', 'N/search', 'N/currentRecord', 'N/url'], function (record, search, currentRecord, url) {


    function pageInit() {
    }
    /**
     * @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') {
            return true;
        } else {
            return false;
        }
    }


    /**
     * @description Function to update GP
     * @param {*} recId 
     * @param {*} typeOfRec 
     */
    function updateGPFields(recId, typeOfRec, path) {
        try {
            var rec;
            // console.log("recId", recId)
            // console.log("path", path)
            // console.log("typeOfRec", typeOfRec)
            rec = record.load({
                type: typeOfRec,
                id: recId,
                isDynamic: true,
            });
            //console.log("rec", rec)
            var lineCount = rec.getLineCount({ sublistId: 'item' });
            //console.log("lineCount", lineCount)
            for (var i = 0; i < lineCount; i++) {
                rec.selectLine({ sublistId: 'item', line: i });
                var requestKey = rec.getSublistValue({
                    sublistId: 'item',
                    fieldId: 'custcol_mhi_ibs_request_key',
                    line: i
                });


                if (!requestKey) {
                    console.log('No request key on line ${i}');
                    continue;
                }


                //console.log('Fetching data for requestKey: ${requestKey}');
                var soData = fetchSalesOrderData(requestKey);
                //console.log("soData-----------", soData)


                if (!checkForParameter(soData)) {
                    //console.log('No data found for requestKey: ${requestKey}');
                    alert('No Sales Order Data for line!');
                    break;
                }
                else {
                    //console.log('Sales Order Data for line ${i}:', soData);
                    var soQty;
                    soQty = soData.quantity;
                    //console.log('soQty', soQty);
                    if (checkForParameter(soQty)) {
                        var altSaleAmt = soData.rate;
                        var allocationQty = rec.getSublistValue({
                            sublistId: 'item',
                            fieldId: 'custcol_mhi_ibs_request_qty',
                            line: i
                        });
                        //console.log('allocationQty', allocationQty);
                        var estGP = (altSaleAmt / soQty) * allocationQty;
                        //console.log('estGP', estGP);
                    }
                    if (checkForParameter(soData.price)) {
                        rec.setCurrentSublistValue({
                            sublistId: 'item',
                            fieldId: 'custcol_req_po_so_sale_price',
                            value: soData.price
                        });
                    }


                    if (checkForParameter(soData.amount)) {
                        rec.setCurrentSublistValue({
                            sublistId: 'item',
                            fieldId: 'custcol_req_po_so_sale_amount',
                            value: soData.amount
                        });
                    }


                    if (checkForParameter(soData.currency)) {
                        rec.setCurrentSublistValue({
                            sublistId: 'item',
                            fieldId: 'custcol_req_po_so_sale_currency',
                            value: soData.currency
                        });
                    }


                    if (checkForParameter(estGP)) {
                        rec.setCurrentSublistValue({
                            sublistId: 'item',
                            fieldId: 'custcol_req_po_so_est_gp',
                            value: estGP
                        });
                    }


                    rec.commitLine({ sublistId: 'item' });
                    //console.log('Updated line ${i} with calculated GP: ${estGP}');
                }
                rec.save({
                    enableSourcing: true,
                    ignoreMandatoryFields: true,
                });
                alert('Gross Profit fields updated successfully!');
                var parent = window.parent;
                //console.log("recId================",recId)
                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;
        });
        //console.log("obj=====================", obj);
        return obj;
    }


    return {
        updateGPFields: updateGPFields,
        pageInit: pageInit
    };
});


Leave a comment

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