Add a new sales order

A custom screen where user can create a sales order and to the corresponding customer without adding items or other mandatory fields. Customer is also created if the corresponding name or email is entered. Scripts check the customer name and then search for the email id if there isn’t any then a customer record is created with details entered. A suitelet script creates the form and client script for doing the validations.

/**
 * @NApiVersion 2.x
 * @NScriptType ClientScript
 * @NModuleScope SameAccount
 */
/**
 * Script Description
 * Client Script to support Add new SO script
 */
/*******************************************************************************
 * Balaji Trading, Inc.
 * **************************************************************************
 * Date: 24/10/2017
 * 
 * Author: Jobin & Jismi IT Services LLP
 * 
 * 
 * REVISION HISTORY
 * 
 * Revision 1.0 $ 24/10/2017 edwint, rosemolj : Created
 * 
 ******************************************************************************/
define(
    ['N/http', 'N/https', 'N/url', 'N/ui/message', 'N/search', 'N/record'],
    /**
     * @param {http}
     *            http
     * @param {https}
     *            https
     * @param {redirect}
     *            redirect
     * @param {url}
     *            url
     */

    function(http, https, url, message, search, record) {

        /**
         * Validation function to be executed when record is saved.
         * 
         * @param {Object}
         *            scriptContext
         * @param {Record}
         *            scriptContext.currentRecord - Current form record
         * @returns {boolean} Return true if record is valid
         * 
         * @since 2015.2
         */
        function saveRecord(scriptContext) {
            try {

                var record = scriptContext.currentRecord;

                var oldcustomer = record.getValue({
                    fieldId: 'textfield_existingcustomer'
                });
                var name = record.getValue({
                    fieldId: 'textfield_customername'
                });
                var lastname = record.getValue({
                    fieldId: 'textfield_customerlname'
                });
                var email = record.getValue({
                    fieldId: 'textfield_customeremail'
                });
                var company = record.getValue({
                    fieldId: 'textfield_customercompany'
                });
                var Address1 = record.getValue({
                    fieldId: 'textfield_customeraddr1'
                });
                var Address2 = record.getValue({
                    fieldId: 'textfield_customeraddr2'
                });
                var City = record.getValue({
                    fieldId: 'textfield_customercity'
                });
                var State = record.getValue({
                    fieldId: 'textfield_customerstate'
                });
                var zip = record.getValue({
                    fieldId: 'textfield_customerzip'
                });
                var Phone = record.getValue({
                    fieldId: 'textfield_customerphone'
                });
                var Memo = record.getValue({
                    fieldId: 'textfield_customermemo'
                });
                if ((name == '' || email == '' || lastname == '') &&
                    (oldcustomer == '')) {
                    showError("Please fill all the mandatory fields");
                } else {

                    var Sodetails = {};

                    var sublistvalues = getItemsTableData(record);
                    logme('sublistvalues', sublistvalues);
                    var table_data = JSON.stringify(sublistvalues);

                    if (sublistvalues == '0' || sublistvalues.length < 1) {
                        showError('Please add atleast 1 item');
                    } else {
                        Sodetails.sublist = Sodetails;
                        var params = {
                            oldcustomer: oldcustomer,
                            name: name,
                            email: email,
                            company: company,
                            lastnames: lastname,
                            Memo: Memo,
                            zipcode: zip,
                            address1: Address1,
                            address2: Address2,
                            city: City,
                            state: State,
                            phone: Phone,
                            sodetails: JSON.stringify(sublistvalues)
                        };

                        var back_to_form_url = url
                            .resolveScript({
                                scriptId: "customscript_btn_76_btn85_jj_sladdnewso",
                                deploymentId: "customdeploy_btn_76_btn85_jj_sladdnewso",
                                returnExternalUrl: false

                            });

                        var response = https.post({
                            url: back_to_form_url,
                            body: params
                        });
                        logme('response', response);
                        var errormsg = message.create({
                            title: "Error ",
                            message: (response.body).substring(5),
                            type: message.Type.ERROR
                        });

                        var Success = message
                            .create({
                                title: "You have generated a new Sales Order ",
                                message: " ",
                                type: message.Type.CONFIRMATION
                            });

                        if ((response.body).indexOf('Success') > -1)

                        {
                            clearfields(record);
                            Success.hide();

                            errormsg.hide();
                            var recdid = (response.body).substring(7);
                            var Success = message
                                .create({
                                    title: "You have generated a new Sales Order ",
                                    message: recdid,
                                    type: message.Type.CONFIRMATION
                                });

                            Success.show({
                                duration: 5000
                            });

                            var dashboard_url = url
                                .resolveScript({
                                    scriptId: "customscript_btn_76_btn85_jj_sldashboard",
                                    deploymentId: "customdeploy_btn_76_btn85_jj_sldashboard",
                                    returnExternalUrl: false

                                });

                            console.log(recdid);
                            window.location = dashboard_url + "&recordid=" +
                                recdid;
                        } else {
                            Success.hide();

                            errormsg.show();
                            setTimeout(errormsg.hide, 15000);
                        }
                        console.log(response);
                    }
                }

            } catch (e) {
                logme('TRY1', getError(e));
            }
        }
        /**
         * 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) {

            if (scriptContext.fieldId == 'textfield_existingbyemail') {
                var records = scriptContext.currentRecord;
                var customeremail = records.getValue({
                    fieldId: 'textfield_existingbyemail'
                });
                var internal = finduserbymail(search, customeremail);
                if (internal == 0) {
                    showError("No Result Found .Please enter a valid email id");
                    clearfields(records);
                } else {
                    records.setValue({
                        fieldId: 'textfield_existingcustomer',
                        value: internal,
                        ignoreFieldChange: false
                    });
                }
                logme('internals', internal);
            }
            if (scriptContext.fieldId == 'textfield_existingcustomer') {

                try {

                    var records = scriptContext.currentRecord;
                    var customer = records.getValue({
                        fieldId: 'textfield_existingcustomer'
                    });

                    var resultrec = record.load({
                        type: record.Type.CUSTOMER,
                        id: customer,
                        isDynamic: true
                    });

                    var customer = {};
                    customer.fname = resultrec.getValue({
                        fieldId: 'firstname'
                    });
                    customer.lname = resultrec.getValue({
                        fieldId: 'lastname'
                    });
                    customer.email = resultrec.getValue({
                        fieldId: 'email'
                    });
                    customer.company = resultrec.getValue({
                        fieldId: 'companyname'
                    });

                    customer.phone = resultrec.getValue({
                        fieldId: 'phone'
                    });

                    var numLines = resultrec.getLineCount({
                        sublistId: 'addressbook'
                    });
                    if (numLines > 0) {
                        for (var i = 0; i < numLines; i++) {
                            var defaultshipping = resultrec
                                .getSublistValue({
                                    sublistId: 'addressbook',
                                    fieldId: 'defaultshipping',
                                    line: i
                                });
                            customer.street1 = resultrec.getSublistValue({
                                sublistId: 'addressbook',
                                fieldId: 'addr1_initialvalue',
                                line: i
                            });
                            customer.street2 = resultrec.getSublistValue({
                                sublistId: 'addressbook',
                                fieldId: 'addr2_initialvalue',
                                line: i
                            });
                            customer.companys = resultrec.getSublistValue({
                                sublistId: 'addressbook',
                                fieldId: 'addressee_initialvalue',
                                line: i
                            });
                            customer.city = resultrec.getSublistValue({
                                sublistId: 'addressbook',
                                fieldId: 'city_initialvalue',
                                line: i
                            });
                            customer.country = resultrec.getSublistValue({
                                sublistId: 'addressbook',
                                fieldId: 'country_initialvalue',
                                line: i
                            });
                            customer.state = resultrec.getSublistValue({
                                sublistId: 'addressbook',
                                fieldId: 'dropdownstate_initialvalue',
                                line: i
                            });
                            customer.zip = resultrec.getSublistValue({
                                sublistId: 'addressbook',
                                fieldId: 'zip_initialvalue',
                                line: i
                            });

                        }

                    }

                    records.setValue({
                        fieldId: 'textfield_customername',
                        value: customer.fname,
                        ignoreFieldChange: true
                    });
                    records.setValue({
                        fieldId: 'textfield_customerlname',
                        value: customer.fname,
                        ignoreFieldChange: true
                    });
                    records.setValue({
                        fieldId: 'textfield_customeremail',
                        value: customer.email,
                        ignoreFieldChange: true
                    });
                    records.setValue({
                        fieldId: 'textfield_customercompany',
                        value: customer.company,
                        ignoreFieldChange: true
                    });
                    records.setValue({
                        fieldId: 'textfield_customeraddr1',
                        value: customer.street1,
                        ignoreFieldChange: true
                    });
                    records.setValue({
                        fieldId: 'textfield_customeraddr2',
                        value: customer.street2,
                        ignoreFieldChange: true
                    });
                    records.setValue({
                        fieldId: 'textfield_customercity',
                        value: customer.city,
                        ignoreFieldChange: true
                    });

                    records.setValue({
                        fieldId: 'textfield_customerstate',
                        value: customer.state,
                        ignoreFieldChange: true
                    });
                    records.setValue({
                        fieldId: 'textfield_customerzip',
                        value: customer.zip,
                        ignoreFieldChange: true
                    });
                    records.setValue({
                        fieldId: 'textfield_customerphone',
                        value: customer.phone,
                        ignoreFieldChange: true
                    });
                    console.log(customer);

                } catch (err) {

                    logme("Error@fieldChange", err);
                }
            }

        }

        return {

            saveRecord: saveRecord,
            fieldChanged: fieldChanged
        };

        /*******************************************************************
         * This function will get data from sublist
         */
        function getItemsTableData(assistant) {

            var array_of_items = [];
            try {
                var sublistid1 = assistant.getSublist({
                    sublistId: 'sublistiditemdetails'
                });
                var numLines = assistant.getLineCount({
                    sublistId: 'sublistiditemdetails'
                });

                for (var i = 0; i < numLines; i++) {

                    var currentItem = {};
                    currentItem.id = assistant.getSublistValue({
                        fieldId: 'custpage_item',
                        sublistId: 'sublistiditemdetails',
                        line: i
                    });
                    currentItem.quantity = assistant.getSublistValue({
                        fieldId: 'fieldqty',
                        sublistId: 'sublistiditemdetails',
                        line: i
                    });

                    array_of_items.push(currentItem);
                }

                return array_of_items;
            } catch (e) {
                logme('E@getItemsTableData', getError(e));

                return 0;
            }

        }

        function clearfields(records) {

            records.setValue({
                fieldId: 'textfield_existingcustomer',
                value: "",
                ignoreFieldChange: true
            });
            records.setValue({
                fieldId: 'textfield_existingbyemail',
                value: "",
                ignoreFieldChange: true
            });
            records.setValue({
                fieldId: 'textfield_customername',
                value: "",
                ignoreFieldChange: true
            });
            records.setValue({
                fieldId: 'textfield_customerlname',
                value: "",
                ignoreFieldChange: true
            });
            records.setValue({
                fieldId: 'textfield_customeremail',
                value: "",
                ignoreFieldChange: true
            });
            records.setValue({
                fieldId: 'textfield_customercompany',
                value: "",
                ignoreFieldChange: true
            });

            records.setValue({
                fieldId: 'textfield_customeraddr1',
                value: "",
                ignoreFieldChange: true
            });
            records.setValue({
                fieldId: 'textfield_customeraddr2',
                value: "",
                ignoreFieldChange: true
            });
            records.setValue({
                fieldId: 'textfield_customercity',
                value: "",
                ignoreFieldChange: true
            });

            records.setValue({
                fieldId: 'textfield_customerstate',
                value: "",
                ignoreFieldChange: true
            });
            records.setValue({
                fieldId: 'textfield_customerzip',
                value: "",
                ignoreFieldChange: true
            });
            records.setValue({
                fieldId: 'textfield_customerphone',
                value: "",
                ignoreFieldChange: true
            });
            records.setValue({
                fieldId: 'textfield_customermemo',
                value: "",
                ignoreFieldChange: true
            });
            var numLines = records.getLineCount({
                sublistId: 'sublistiditemdetails'
            });
            console.log('numLines afrr ' + numLines);

            for (var i = 0; i < numLines; i++) {
                console.log('i in loop' + i);

                records.removeLine({
                    sublistId: 'sublistiditemdetails',
                    line: 0,
                    ignoreRecalc: true
                });
            }

        }

        function finduserbymail(search, value) {
            var usrid = "";
            try {
                var filter = ['email', 'is', value];
                logme("filter", filter);
                var result = 'internalid';
                // create search
                var mySearch = search.create({
                    type: record.Type.CUSTOMER,
                    title: 'My Search',
                    columns: result,
                    filters: filter
                });
                // perform search operation
                var search_run = mySearch.run().getRange({
                    start: 0,
                    end: 1
                });
                // if email exist
                if (search_run.length > 0) {
                    // get internal id of the record
                    usrid = search_run[0].getValue({
                        name: 'internalid',
                    });
                } else {
                    usrid = 0;
                }
            } catch (E) {
                logme("searchError", E);
            }
            return usrid;
        }
        /*******************************************************************
         * return error
         * 
         * @param e
         * @returns
         * 
         * Created on 09-Aug-2017 by rosemol
         */
        function getError(e) {
            var stErrMsg = '';
            if (e.getDetails != undefined) {
                stErrMsg = '_' + e.getCode() + '<br>' + e.getDetails() +
                    '<br>' + e.getStackTrace();
            } else {
                stErrMsg = '_' + e.toString();
            }
            return stErrMsg;
        }

        /*******************************************************************
         * Log these data
         * 
         * @param title
         * @param details
         * @returns
         * 
         * Created on 09-Aug-2017 by rosemol
         */
        function logme(title, details) {
            console.log(title + " " + details);
            log.debug({
                title: title,
                details: details
            });
        }

        /*******************************************************************
         * Show error module
         */
        function showError(message_string) {
            var errormsg_mf = message.create({
                title: "Error",
                message: message_string,
                type: message.Type.ERROR
            });
            errormsg_mf.hide();
            errormsg_mf.show();
            setTimeout(errormsg_mf.hide, 3000);
        }
    });
/**
 * @NApiVersion 2.x
 * @NScriptType Suitelet
 * @NModuleScope SameAccount
 */
/**
 * Script Description
 * This suitelet will display a screen which will allow the user to add new customer and add a sales order
 */
/*******************************************************************************
 * Balaji Trading, Inc.
 * **************************************************************************
 * Date: 24/10/2017
 * 
 * Author: Jobin & Jismi IT Services LLP
 * 
 * 
 * REVISION HISTORY
 * 
 * Revision 1.0 $ 24/10/2017 edwint, rosemolj : Created
 * 
 ******************************************************************************/
define(
    ['N/http', 'N/https', 'N/record', 'N/search', 'N/ui/serverWidget',
        'N/url', 'N/runtime'
    ],
    /**
     * @param {http}
     *            http
     * @param {https}
     *            https
     * @param {record}
     *            record
     * @param {search}
     *            search
     * @param {serverWidget}
     *            serverWidget
     * @param {url}
     *            url
     */
    function(http, https, record, search, serverWidget, url, runtime) {

        /**
         * Definition of the Suitelet script trigger point.
         * 
         * @param {Object}
         *            context
         * @param {ServerRequest}
         *            context.request - Encapsulation of the incoming
         *            request
         * @param {ServerResponse}
         *            context.response - Encapsulation of the Suitelet
         *            response
         * @Since 2015.2
         */
        function onRequest(context) {
            try {
                var form;
                var sublist;
                var newsub;
                if (context.request.method === 'GET') {
                    form = serverWidget.createForm({
                        title: 'Add New Sales Order 	'
                    });
                    var addnewcustomer = form.addFieldGroup({
                        id: 'fieldgroupidexisting',
                        label: 'Choose an Existing Customer'
                    });

                    // var inline = form.addField({
                    // id : 'textfield_inlines',
                    // type : serverWidget.FieldType.INLINEHTML,
                    // label : ' D',
                    // container : 'fieldgroupidexisting'
                    // });
                    //
                    // inline.defaultValue = " To generate a Sales Order,
                    // you can choose a cutomer using emailid or userid, Or
                    // if you prefer to choose new customer then add file
                    // the add new cutomer fields.";
                    // inline.updateBreakType({
                    // breakType : serverWidget.FieldBreakType.STARTROW
                    // });

                    var name = form.addField({
                        id: 'textfield_existingcustomer',
                        type: serverWidget.FieldType.SELECT,
                        source: 'customer',
                        label: 'Choose Customer by Name',
                        container: 'fieldgroupidexisting'
                    });
                    name.updateBreakType({
                        breakType: serverWidget.FieldBreakType.STARTROW
                    });
                    var existingbyemail = form.addField({
                        id: 'textfield_existingbyemail',
                        type: serverWidget.FieldType.EMAIL,
                        label: 'Choose Customer by Email',
                        container: 'fieldgroupidexisting'
                    });
                    existingbyemail.updateBreakType({
                        breakType: serverWidget.FieldBreakType.STARTCOL
                    });
                    var inline = form.addField({
                        id: 'textfield_inlines',
                        type: serverWidget.FieldType.INLINEHTML,
                        label: '  D',
                        container: 'fieldgroupidexisting'
                    });

                    inline.defaultValue = "  To generate a  Sales Order, you can choose a cutomer using emailid or userid, Or if you prefer to choose new customer then add file the add new cutomer fields.";
                    var addnewcustomer1 = form.addFieldGroup({
                        id: 'fieldgroupidnewcustomer',
                        label: 'Customer Details/Add New',
                        isCollapsible: true
                    });
                    addnewcustomer1.isCollapsible = true;
                    var name = form.addField({
                        id: 'textfield_customername',
                        type: serverWidget.FieldType.TEXT,
                        label: 'Customer First Name',
                        container: 'fieldgroupidnewcustomer'
                    });
                    // name.isMandatory = true;
                    var laname = form.addField({
                        id: 'textfield_customerlname',
                        type: serverWidget.FieldType.TEXT,
                        label: 'Customer Last Name',
                        container: 'fieldgroupidnewcustomer'
                    });
                    // laname.isMandatory = true;
                    var email = form.addField({
                        id: 'textfield_customeremail',
                        type: serverWidget.FieldType.EMAIL,
                        label: 'Customer Email Id',
                        container: 'fieldgroupidnewcustomer'
                    });
                    var companyname = form.addField({
                        id: 'textfield_customercompany',
                        type: serverWidget.FieldType.TEXT,
                        label: 'Customer Company Name',
                        container: 'fieldgroupidnewcustomer'
                    });
                    // email.isMandatory = true;

                    //						
                    // var fieldgroup = form.addFieldGroup({
                    // id : 'fieldgroupaddress',
                    // label : 'Address'
                    // });

                    var shipaddresstextarea = form.addField({
                        id: 'textfield_customeraddr1',
                        type: serverWidget.FieldType.TEXT,
                        label: 'Address 1',
                        container: 'fieldgroupidnewcustomer'
                    });

                    shipaddresstextarea.updateBreakType({
                        breakType: serverWidget.FieldBreakType.STARTCOL
                    });

                    form.addField({
                        id: 'textfield_customeraddr2',
                        type: serverWidget.FieldType.TEXT,
                        label: 'Address 2 ',
                        container: 'fieldgroupidnewcustomer'
                    });

                    form.addField({
                        id: 'textfield_customercity',
                        type: serverWidget.FieldType.TEXT,
                        label: 'City',
                        container: 'fieldgroupidnewcustomer'
                    });

                    form.addField({
                        id: 'textfield_customerstate',
                        type: serverWidget.FieldType.TEXT,
                        label: 'State',
                        container: 'fieldgroupidnewcustomer'
                    });

                    form.addField({
                        id: 'textfield_customerzip',
                        type: serverWidget.FieldType.TEXT,
                        label: 'Zip',
                        container: 'fieldgroupidnewcustomer'
                    });

                    form.addField({
                        id: 'textfield_customerphone',
                        type: serverWidget.FieldType.PHONE,
                        label: 'Phone',
                        container: 'fieldgroupidnewcustomer'
                    });

                    form.addSubtab({
                        id: 'subtabsalesorder',
                        label: 'Sales Order details'
                    });

                    form.clientScriptFileId = '257822';

                    var fillsodetailsgrp = form.addFieldGroup({
                        id: 'fillsodetailsgrp',
                        label: 'Fill Sales Order Details'
                    });
                    var email = form.addField({
                        id: 'textfield_customermemo',
                        type: serverWidget.FieldType.TEXT,
                        label: 'Memo',
                        container: 'fillsodetailsgrp'
                    });

                    newsub = form.addSublist({
                        id: 'sublistiditemdetails',
                        type: serverWidget.SublistType.INLINEEDITOR,
                        label: 'Item Details',
                        tab: 'subtabsalesorder'
                    });

                    var itemField = newsub.addField({
                        id: 'custpage_item',
                        label: 'SKU',
                        type: serverWidget.FieldType.SELECT,
                        source: 'inventoryitem'
                    });

                    itemField.isMandatory = true;

                    var qty = newsub.addField({
                        id: 'fieldqty',
                        type: serverWidget.FieldType.INTEGER,
                        label: 'quantity'
                    });
                    qty.isMandatory = true;

                    form.addSubmitButton({
                        label: 'Generate SO'
                    });

                    context.response.writePage(form);

                } else {

                    try {

                        var existingcustomer = context.request.parameters.oldcustomer;
                        var firstname = context.request.parameters.name;
                        var phone = context.request.parameters.phone;
                        var company = context.request.parameters.company;

                        var email = context.request.parameters.email;
                        var lastname = context.request.parameters.lastnames;
                        var Memo = context.request.parameters.Memo;

                        var zipcode = context.request.parameters.zipcode;
                        var address1 = context.request.parameters.address1;
                        var address2 = context.request.parameters.address2;
                        var state = context.request.parameters.state;
                        var city = context.request.parameters.city;
                        var phone = context.request.parameters.phone;
                        var sodetails = context.request.parameters.sodetails;

                        var custLocation = 1;
                        var Item_details = JSON.parse(sodetails);

                        var itemId = [];
                        var itemQuantity = [];

                        for (var i = 0; i < Item_details.length; i++) {

                            itemId.push(Item_details[i].id)
                            itemQuantity.push(Item_details[i].quantity);

                        }

                        log.debug({
                            title: "itemId",
                            details: itemId
                        });
                        log.debug({
                            title: "itemQuantity",
                            details: itemQuantity
                        });

                    } catch (e) {

                        logme('e@3', getError(e));
                    }
                    try {
                        if (existingcustomer == '') {
                            var objRecord = record.create({
                                type: record.Type.CUSTOMER,
                                isDynamic: true
                            });

                            objRecord.setValue({
                                fieldId: 'subsidiary',
                                value: 1
                            });
                            objRecord.setValue({
                                fieldId: 'isperson',
                                value: 'T'
                            });

                            objRecord.setValue({
                                fieldId: 'email',
                                value: email
                            });
                            objRecord.setValue({
                                fieldId: 'firstname',
                                value: firstname
                            });
                            objRecord.setValue({
                                fieldId: 'lastname',
                                value: lastname
                            });
                            objRecord.setValue({
                                fieldId: 'companyname',
                                value: company
                            });

                            var Xparcel_Expediated = '64955';
                            objRecord.setValue({
                                fieldId: 'shipmethod',
                                value: Xparcel_Expediated,
                                ignoreFieldChange: true
                            });
                            objRecord.setValue({
                                fieldId: 'category',
                                value: '4',
                                ignoreFieldChange: true
                            });

                            objRecord.selectNewLine({
                                sublistId: 'addressbook'
                            });
                            var myaddressSubrecord = objRecord
                                .getCurrentSublistSubrecord({
                                    sublistId: 'addressbook',
                                    fieldId: 'addressbookaddress'
                                });
                            myaddressSubrecord.setValue({
                                fieldId: 'addr1',
                                value: address1
                            });
                            myaddressSubrecord.setValue({
                                fieldId: 'addr2',
                                value: address2
                            });
                            myaddressSubrecord.setValue({
                                fieldId: 'city',
                                value: city
                            });
                            myaddressSubrecord.setValue({
                                fieldId: 'state',
                                value: state
                            });
                            myaddressSubrecord.setValue({
                                fieldId: 'zip',
                                value: zipcode
                            });
                            objRecord.commitLine({
                                sublistId: 'addressbook'
                            });
                            objRecord.setValue({
                                fieldId: 'phone',
                                value: phone
                            });
                            var recordId = objRecord.save({
                                enableSourcing: 'false',
                                ignoreMandatoryFields: 'false'
                            });
                        } else {

                            var recordId = existingcustomer;
                        }
                    } catch (e) {

                        logme('e@2', getError(e));
                        context.response.write("ERROR" + e.message);
                    }

                    createsales(recordId);

                }
            } catch (e) {
                logme('TRY1', getError(e));
            }

            /***************************************************************
             * This function will create a new SO
             */
            function createsales(recordId) {
                try {
                    // Create Sales Order
                    var objRecord = record.transform({
                        fromType: record.Type.CUSTOMER,
                        fromId: recordId,
                        toType: record.Type.SALES_ORDER,
                        isDynamic: true,
                    });
                    if (Memo != '') {
                        objRecord.setValue({
                            fieldId: 'memo',
                            value: Memo
                        });
                    }

                    var Xparcel_Expediated = '64955';
                    objRecord.setValue({
                        fieldId: 'shipmethod',
                        value: Xparcel_Expediated,
                        ignoreFieldChange: true
                    });

                    objRecord.setValue({
                        fieldId: 'paymentmethod',
                        value: 1,
                        ignoreFieldChange: true
                    });
                    objRecord.setValue({
                        fieldId: 'custbody_bw_ordertype',
                        value: 2
                    });

                    objRecord.setValue({
                        fieldId: 'department',
                        value: 35
                    });
                    for (var k = 0; k < itemId.length; k++) {
                        objRecord.selectNewLine({
                            sublistId: 'item'
                        });
                        objRecord.setCurrentSublistValue({
                            sublistId: 'item',
                            fieldId: 'item',
                            value: itemId[k],
                            ignoreFieldChange: false
                        });
                        objRecord.setCurrentSublistValue({
                            sublistId: 'item',
                            fieldId: 'quantity',
                            value: itemQuantity[k],
                            ignoreFieldChange: false
                        });
                        objRecord.setCurrentSublistValue({
                            sublistId: 'item',
                            fieldId: 'amount',
                            value: '0',
                            ignoreFieldChange: false
                        });
                        objRecord.commitLine({
                            sublistId: 'item'
                        });
                    }
                    var recordId = objRecord.save({
                        enableSourcing: false,
                        ignoreMandatoryFields: false
                    });
                    logme('SOID recordId', recordId);
                    var objRecord = record.load({

                        type: record.Type.SALES_ORDER,

                        id: recordId,

                        isDynamic: false,

                    });

                    var tranid = objRecord.getValue({
                        fieldId: 'tranid'
                    })
                    objRecord.setValue({
                        fieldId: 'tranid',
                        value: tranid + '-M'
                    });
                    var tranid = objRecord.getValue({
                        fieldId: 'tranid'
                    })
                    var recordId = objRecord.save({
                        enableSourcing: false,
                        ignoreMandatoryFields: false
                    });

                    context.response.write("Success" + tranid);
                } catch (err) {
                    logme('Error in sales', getError(err));
                    context.response.write("ERROR" + err.message);
                }
            }

            var remainingUsage = runtime.getCurrentScript()
                .getRemainingUsage();
            if (remainingUsage < 200) {
                logme("remainingUsage ", remainingUsage);
            }
        }
        return {
            onRequest: onRequest
        };

    });

/*******************************************************************************
 * return error
 * 
 * @param e
 * @returns
 * 
 * Created on 09-Aug-2017 by rosemol
 */
function getError(e) {
    var stErrMsg = '';
    if (e.getDetails != undefined) {
        stErrMsg = '_' + e.getCode() + '<br>' + e.getDetails() + '<br>' +
            e.getStackTrace();
    } else {
        stErrMsg = '_' + e.toString();
    }
    return stErrMsg;
}

/*******************************************************************************
 * Log these data
 * 
 * @param title
 * @param details
 * @returns
 * 
 * Created on 09-Aug-2017 by rosemol
 */
function logme(title, details) {
    log.debug({
        title: title,
        details: details
    });
}

Leave a comment

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