How to filter the currency based on a Vendor

Add a virtual field to populate the currency based on a vendor using a User event script

const currencyField = form.addField({
id: 'custpage_jj_currency_vf',
type : serverWidget.FieldType.SELECT,
label: 'Vendor Currencies'

});
currencyField.addSelectOption({
value: 'NONE',
text: '- None -'
});

Use a client script to populate the values

/**
     * Funtion to search Vendor currency details
     * @param getVendorCurrency
     * @returns {boolean|*[]}
     */
    function vendorCurrencyDetails(getVendorCurrency) {
        try {
            var vendorSearchObj = search.create({
                type: "vendor",
                filters:
                    [
                        ["internalid", "anyof", getVendorCurrency]
                    ],
                columns:
                    [
                        search.createColumn({
                            name: "currency",
                            join: "VendorCurrencyBalance",
                            label: "Currency"
                        })
                    ]
            });
            var searchResultCount = vendorSearchObj.runPaged().count;

            if (searchResultCount > 0) {
                var currencyArray = [];
                vendorSearchObj.run().each(function (result) {

                    var curr = result.getValue({
                        name: "currency",
                        join: "VendorCurrencyBalance",
                        label: "Currency"
                    });

                    currencyArray.push(curr);
                    return true;
                });
                return currencyArray;
            }
            else {
             //   return false;
                return [];

            }
        } catch (e) {
            console.log("Error @vendorCurrencyDetails", e.message);
            return [];
        }
    }

    /**
     * Function to search the currency
     * @param currencyArray
     * @returns {boolean|*[]}
     */
    function allCurrencySearch(currencyArray) {
        try {
            var vendorCurrencyList = [];
            var currencySearchObj = search.create({
                type: "currency",
                filters:
                    [],
                columns:
                    [
                        search.createColumn({
                            name: "name",
                            sort: search.Sort.ASC,
                            label: "Name"
                        }),
                        search.createColumn({name: "internalid", label: "Internal ID"})
                    ]
            });
            var searchResultCount = currencySearchObj.runPaged().count;

            if (searchResultCount > 0) {
                currencySearchObj.run().each(function (result) {
                    var internalId = result.getValue({
                        name: "internalid", label: "Internal ID"
                    });
                    var currency = result.getValue({
                        name: "name",
                        sort: search.Sort.ASC,
                        label: "Name"
                    })
                    if (currencyArray.includes(currency)) {
                        var temp = {}
                        temp.vendorCurrency = currency;
                        temp.currencyId = internalId;
                        vendorCurrencyList.push(temp);
                    }
                    return true;
                });
                return vendorCurrencyList;
            }
            else
            {
                return []
            }

        } catch (error) {
            console.log("Error @vendorCurrencySearch", error.message);
            return []
        }
    }

    /**
     * Function to remove options
     * @param subsidiaryVirtualField
     * @param isPageInit
     * @param currencyVirtualField
     */
    function removeOptions(isPageInit, currencyVirtualField) {
        try {
            // var options = subsidiaryVirtualField.getSelectOptions();
            // console.log("remove subsidiary");
            // for (var optionKey in options) {
            //     if (options[optionKey].value !== "NONE")
            //         subsidiaryVirtualField.removeSelectOption({
            //             value: options[optionKey].value,
            //         });
            //     if (!isPageInit) {
            //         currentRecord.setValue({
            //             fieldId: "custrecord_jj_subsidiary",
            //             value: " ",
            //         });
            //         currentRecord.setValue({
            //             fieldId: "custrecord_jj_vendor_currency",
            //             value: " ",
            //         });
            //     }
            // }
            var currencyOptions = currencyVirtualField.getSelectOptions();
            console.log("remove currency");
            for (var curOptionKey in currencyOptions) {
                if (currencyOptions[curOptionKey].value !== "NONE")
                    currencyVirtualField.removeSelectOption({
                        value: currencyOptions[curOptionKey].value,
                    });
                if (!isPageInit) {
                    // currentRecord.setValue({
                    //     fieldId: "custrecord_jj_subsidiary",
                    //     value: " ",
                    // });
                    currentRecord.setValue({
                        fieldId: "custrecord_jj_vendor_currency",
                        value: " ",
                    });
                }
            }
        } catch (error) {
            console.log("Error @removeOptions", error);
        }
    }

    /**
     * Add options to virtual fields
     * @param subsidiaryVirtualField
     * @param vendorSearchDetails
     */
    function addOptions( currencyVirtualField,CurrencySearchResult) {
        // subsidiaryVirtualField, vendorSearchDetails,
        try {
            // for (var key in vendorSearchDetails) {
            //     subsidiaryVirtualField.insertSelectOption({
            //         value: vendorSearchDetails[key]['subsidiaryId'],
            //         text: vendorSearchDetails[key]['vendorSubsidiary'],
            //     });
            // }
            for (var key in CurrencySearchResult) {
                currencyVirtualField.insertSelectOption({
                    value: CurrencySearchResult[key]['currencyId'],
                    text: CurrencySearchResult[key]['vendorCurrency'],
                });
            }
        } catch (error) {
            console.log("Error @addOptions", error);
        }
    }

    /**
     * @description Function to set display type of the Store Number virtual field
     */

    function setDisplay(isPageInit) {
        try {
            var vendorName = currentRecord.getValue({
                fieldId: "custrecord_jj_vendor",
            });
            // var subsidiaryVirtualField = currentRecord.getField({
            //     fieldId: "custpage_jj_subsidiary_vf",
            // });

            var currencyVirtualField = currentRecord.getField({
                fieldId: "custpage_jj_currency_vf",
            });

            if (vendorName) {
                // subsidiaryVirtualField.isDisplay = true;
                // subsidiaryVirtualField.isDisabled = false;

                currencyVirtualField.isDisplay = true;
                currencyVirtualField.isDisabled = false;

                // var vendorSearchDetails = vendorSubsidiaryDetails(vendorName);
                // console.log("vendorSearchDetails", vendorSearchDetails);

                var CurrencyDetails = vendorCurrencyDetails(vendorName);
                console.log("CurrencyDetails", CurrencyDetails);
                if(CurrencyDetails.length > 0)
                {
                    console.log("vendor currencies.")
                    var CurrencySearchResult = allCurrencySearch(CurrencyDetails);
                    console.log("CurrencySearchResult", CurrencySearchResult);
                    console.log("CurrencyID", CurrencySearchResult[0].currencyId);
                    console.log("object length",Object.keys(CurrencySearchResult).length)
                    console.log("array length",CurrencySearchResult.length)
                    //if (Object.keys(CurrencySearchResult).length > 0) {
                    if (CurrencySearchResult.length > 0) {
                        // (Object.keys(vendorSearchDetails).length > 0) ||
                        removeOptions(isPageInit, currencyVirtualField);
                        addOptions(currencyVirtualField,CurrencySearchResult);
                    } else {
                        removeOptions(isPageInit, currencyVirtualField);
                    }
                }


            }


            else {
                // subsidiaryVirtualField.isDisplay = false;
                currencyVirtualField.isDisplay = false;
                // currentRecord.setValue({
                //     fieldId: "custrecord_jj_subsidiary",
                //     value: " ",
                // });
                currentRecord.setValue({
                    fieldId: "custrecord_jj_vendor_currency",
                    value: " ",
                });
            }
        }
        catch (error) {
            console.log("Error @setDisplay", error);
        }
    }

    /**
     * Function to search the prefferd  vendor price from the custom record vendor price
     * @param parentItem
     * @param VPMarket
     * @returns {boolean}
     */

    function getPreferredVendorPriceChecked(parentItem,VPMarket) {

        try {
            var customrecord_jj_vendor_priceSearchObj = search.create({
                type: "customrecord_jj_vendor_price",
                filters:
                    [
                        ["custrecord_jj_parent_item_vendorprice","anyof",parentItem],
                        "AND",
                        ["custrecord_jj_preferred_price","is","T"],
                        "AND",
                        ["custrecord_jj_market","anyof",VPMarket]
                    ],
                columns:
                    [
                        search.createColumn({name: "internalid", label: "Internal ID"}),
                        search.createColumn({name: "custrecord_jj_parent_item_vendorprice", label: "Parent Item"}),
                        search.createColumn({name: "custrecord_jj_preferred_price", label: "Preferred Price"}),
                        search.createColumn({name: "custrecord_jj_market", label: "Market"})
                    ]
            });
            var searchResultCount = customrecord_jj_vendor_priceSearchObj.runPaged().count;
            console.log("searchResultCOunt", searchResultCount);
            if(searchResultCount > 0){
                return true;
            }else{
                return false;
            }
        }
        catch
            (error)
        {
            console.log("Error @getPreferredVendorPriceChecked", error.message);
            return false;
        }
    }



    /**
     * Function to be executed after page is initialized.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.mode - The mode in which the record is being accessed (create, copy, or edit)
     *
     * @since 2015.2
     */
    function pageInit(scriptContext) {
        try {
            currentRecord = scriptContext.currentRecord;
            mode = scriptContext.mode;
            if (mode === "create") {

            } else if (mode === "edit") {
                console.log("edit context if")
                var vendorName = currentRecord.getValue({
                    fieldId: "custrecord_jj_vendor",
                });
                console.log("vendorName",vendorName)
                if (vendorName) {
                    var isPageInit = true
                    setDisplay(isPageInit)
                }
            }
        } catch (error) {
            console.log("Error @pageinit", error);
        }
    }

    /**
     * Function to be executed when field is changed.
     *
     * @param {Object} scriptContext
     * @param {Record} scriptContext.currentRecord - Current form record
     * @param {string} scriptContext.sublistId - Sublist name
     * @param {string} scriptContext.fieldId - Field name
     * @param {number} scriptContext.lineNum - Line number. Will be undefined if not a sublist or matrix field
     * @param {number} scriptContext.columnNum - Line number. Will be undefined if not a matrix field
     *
     * @since 2015.2
     */
    function fieldChanged(scriptContext) {
        try {
            var isPageInit = false;
            var fieldChanged = scriptContext.fieldId;
            if ((mode === "create") || (mode === "edit")) {
                // if (fieldChanged === "custpage_jj_subsidiary_vf") {
                //
                //     var subsidiaryVF = currentRecord.getValue({
                //         fieldId: "custpage_jj_subsidiary_vf",
                //     });
                //     var currencyVF = currentRecord.getValue({
                //         fieldId: "custpage_jj_currency_vf",
                //     });
                //
                //     if (subsidiaryVF !== "- None -") {
                //         currentRecord.setValue({
                //             fieldId: "custrecord_jj_subsidiary",
                //             value: subsidiaryVF,
                //         });
                //         // currentRecord.setValue({
                //         //     fieldId: "custrecord_jj_vendor_currency",
                //         //     value: subsidiaryVF,
                //         // });
                //     } else {
                //         currentRecord.setValue({
                //             fieldId: "custrecord_jj_subsidiary",
                //             value: " ",
                //         });
                //         // currentRecord.setValue({
                //         //     fieldId: "custrecord_jj_vendor_currency",
                //         //     value: " ",
                //         // });
                //     }
                // }

                if (fieldChanged === "custpage_jj_currency_vf") {
                    console.log("field change currency")
                    var currencyVF = currentRecord.getValue({
                        fieldId: "custpage_jj_currency_vf",
                    });
                    console.log("currencyVF", currencyVF)
                    if (currencyVF !== "- None -") {

                        currentRecord.setValue({
                            fieldId: "custrecord_jj_vendor_currency",
                            value: currencyVF,
                        });
                    } else {
                        currentRecord.setValue({
                            fieldId: "custrecord_jj_vendor_currency",
                            value: " ",
                        });
                    }
                } else if (fieldChanged === "custrecord_jj_vendor") {
                    console.log("field change of vendor")
                    setDisplay(isPageInit);
                }
                
               
            }
        } catch (error) {
            console.log("Error @fieldChanged", error);
        }
    }

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

Leave a comment

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