Script for creating the suitelet page from sales order and setting the value from suitelet page to Sales Order.

/**
 * @NApiVersion 2.1
 * @NScriptType Suitelet
 */
define(['N/record', 'N/redirect', 'N/ui/message', 'N/ui/serverWidget', 'N/search', 'SuiteScripts/vv_new_lib_constants.js', 'N/error'],
    /**
 * @param{record} record
 * @param{redirect} redirect
 * @param{message} message
 * @param{serverWidget} serverWidget
 */
    (record, redirect, message, serverWidget, search, _lib_constants, error) => {
        /**
         * Defines the Suitelet script trigger point.
         * @param {Object} scriptContext
         * @param {ServerRequest} scriptContext.request - Incoming request
         * @param {ServerResponse} scriptContext.response - Suitelet response
         * @since 2015.2
         */
        

        function addSelectField(form, FIELD_MAPPING, soId){

            var currSOHolds = search.lookupFields({
                type: search.Type.SALES_ORDER,
                id: soId,
                columns: ["custbody_vvs_sales_hold", "custbody_vv_so_hold_reason", "custbody_vv_taxholdreason"]
            });

            for(var key in FIELD_MAPPING){
                var obj = FIELD_MAPPING[key];

                var defValue = [];
                for(var i = 0; i < currSOHolds[obj.FIELD_ID].length; i++){
                    defValue.push(currSOHolds[obj.FIELD_ID][i].value);
                }

                var salesHoldField = form.addField(obj.FIELD_SETUP);
                salesHoldField.defaultValue = defValue

                if(key !== "SALES_HOLD"){
                    salesHoldField.addSelectOption({
                        value : "",
                        text : "- None -"
                    });
                }


                var salesHoldSSObj = search.create({
                    type: obj.LIST,
                    filters: [],
                    columns: ["name", "internalid"]
                });
                var results = salesHoldSSObj.run().getRange(0,1000);
                var exemptedSalesHold = obj.EXEMPTED_VALUES
                for(var i = 0; i < results.length; i++){
                    var name = results[i].getValue("name")
                    if(exemptedSalesHold.indexOf(name) === -1){
                        salesHoldField.addSelectOption({
                            value : results[i].getValue("internalid"),
                            text : name
                        });
                    }
                }
            }
            return form;
        }
        const onRequest = (scriptContext) => {
            const GLOBAL_CONSTANTS = _lib_constants.getConstants()
            const SALESHOLD_CREDIT_HOLD = GLOBAL_CONSTANTS.SALES_HOLD.CREDIT_HOLD
            
            if(scriptContext.request.method == "GET"){
                var soId = scriptContext.request.parameters.soId;
                var FIELD_MAPPING = {
                    SALES_HOLD: {
                        FIELD_SETUP: {
                            id: "custpage_hold",
                            type: serverWidget.FieldType.MULTISELECT,
                            label: "Sales Hold",
                        },
                        FIELD_ID: "custbody_vvs_sales_hold",
                        LIST: "customlist_sales_hold",
                        EXEMPTED_VALUES: ["HCK Hold", "Credit Hold", "Pending Payment", "New Prescription Hold", "Backorder Hold"],
                    },
                    ORDER_HOLD: {
                        FIELD_SETUP: {
                            id: "custpage_order_hold",
                            type: serverWidget.FieldType.SELECT,
                            label: "Customer Hold",
                        },
                        FIELD_ID: "custbody_vv_so_hold_reason",
                        LIST: "customlist_vv_order_hold_reasons",
                        EXEMPTED_VALUES: [],
                    },
                    TAX_HOLD: {
                        FIELD_SETUP: {
                            id: "custpage_tax_hold",
                            type: serverWidget.FieldType.SELECT,
                            label: "Tax Hold",
                        },
                        FIELD_ID: "custbody_vv_taxholdreason",
                        LIST: "customlist_vv_taxholdreason",
                        EXEMPTED_VALUES: [],
                    },
                }

                var form = serverWidget.createForm({
                    title: "Update Sales Hold",
                });
                var soField = form.addField({
                    id: "custpage_soid",
                    type: serverWidget.FieldType.TEXT,
                    label: "Sales Order Id",
                })
                soField.defaultValue = soId;
                soField.updateDisplayType({
                    displayType: serverWidget.FieldDisplayType.HIDDEN
                })

                form = addSelectField(form, FIELD_MAPPING, soId)

                form.addSubmitButton("Update")
                scriptContext.response.writePage(form);
            }else{

                log.debug("params", scriptContext.request.parameters)
                var salesHold = scriptContext.request.parameters.custpage_hold.split("\u0005");
                var orderHold = scriptContext.request.parameters.custpage_order_hold || "";
                var taxHold = scriptContext.request.parameters.custpage_tax_hold || "";
                var soId = scriptContext.request.parameters.custpage_soid;

                log.debug("custpage_sales_hold", salesHold);
                log.debug("custpage_order_hold", orderHold);
                log.debug("custpage_tax_hold", taxHold);
                try{
                    var soRec = record.load({
                        type: record.Type.SALES_ORDER,
                        id: soId,
                        isDynamic: true
                    });

                    var originalSalesHold = soRec.getValue("custbody_vvs_sales_hold");
                    var creditHold = originalSalesHold.includes(SALESHOLD_CREDIT_HOLD.toString());
                    var difference = originalSalesHold.filter(function(x){
                        if(x === SALESHOLD_CREDIT_HOLD.toString()){
                            return salesHold.indexOf(x) !== -1  
                        }
                        else{
                            return salesHold.indexOf(x) === -1
                        }
                    });
                    log.debug("difference", difference);
                    var currentTracker = soRec.getValue("custbody_vv_salesholdremovedtracker");
                    soRec.setValue("custbody_vv_salesholdremovedtracker", currentTracker.concat(difference))
                    if(creditHold){
                        salesHold.push(SALESHOLD_CREDIT_HOLD.toString());
                        salesHold = salesHold.filter(val => val);
                        soRec.setValue("custbody_vvs_sales_hold",salesHold);
                    }
                    else{
                        soRec.setValue("custbody_vvs_sales_hold", salesHold)
                    }  
                    soRec.setValue("custbody_vv_so_hold_reason", orderHold)
                    soRec.setValue("custbody_vv_taxholdreason", taxHold)
                    soRec.save();
                }catch (e) {
                    log.error("Error @ POST", JSON.stringify(e));
                }
                redirect.toRecord({
                    id: soId,
                    type: record.Type.SALES_ORDER,
                    isEditMode: false
                })
            }
        }
        return {onRequest}
    });

Leave a comment

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