Package AI Integration(Package AI with NetSuite)

When the Order in Package AI is updated the JSON data will send to the suitlet, which is set up in the Package AI. The suitlet will get that JSON data and create a custom record. Later we will update the PO order based on the JSON data.

/**
 * @NApiVersion 2.x
 * @NScriptType Suitelet
 * @NModuleScope SameAccount
 */
/**

* Script Description

* This suitelet to create custom record Package AI.

*/

/*******************************************************************************
 * 
 * NetSuite Name :AHDTC-23 Pakage API Custom Record
 * Script ID :customscript_jj_package_ai_sl_url
 * 
 * *****************************************************************************
 * 
 *  
 * $Author: Jobin & Jismi IT Services LLP $
 * 
 * DESCRIPTION
 * This suitelet to create custom record Package AI with the details that are posted by the third party(Package API)
 * 
 * Date Created :24-07-2019
 * 
 * REVISION HISTORY Update:
 * 
 * 
 * 
 ******************************************************************************/
define(['N/search', 'N/runtime', 'N/record', 'N/https', 'N/encode', 'N/ui/serverWidget', 'N/email'],
    function (search, runtime, record, https, encode, serverWidget, email) {
        var main = {
            onRequest: function (context) {
                log.debug("context.request.body", context.request.body)
                var data = JSON.parse(context.request.body)
                try {
                    var packageRecord = record.create({
                        type: 'customrecord_jj_package_ai'
                    })
                    packageRecord.setValue({
                        fieldId: 'custrecord_jj_package_ai_event',
                        value: data.eventType
                    });
                    if (data.eventType == 'ORDER_COMMUNICATED') {
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_time_stamp',
                            value: data.timestamp
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_order_number',
                            value: data.orderStateUpdate.orderId
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_state',
                            value: data.orderStateUpdate.state
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_truck',
                            value: data.orderStateUpdate.vehicleId
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_service_unit',
                            value: data.orderStateUpdate.routeName
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_scheduled_date',
                            value: data.orderStateUpdate.scheduledDate
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_scheduled_time_window',
                            value: data.orderStateUpdate.scheduledTimeWindowStart + " - " + data.orderStateUpdate.scheduledTimeWindowEnd
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_conversation_li',
                            value: data.orderStateUpdate.conversationLink
                        });
                    } else if (data.eventType == 'ORDER_CONFIRMED') {
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_time_stamp',
                            value: data.timestamp
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_order_number',
                            value: data.orderStateUpdate.orderId
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_state',
                            value: data.orderStateUpdate.state
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_scheduled_date',
                            value: data.orderStateUpdate.scheduledDate
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_scheduled_time_window',
                            value: data.orderStateUpdate.scheduledTimeWindowStart + " - " + data.orderStateUpdate.scheduledTimeWindowEnd
                        });
                    } else if (data.eventType == 'ORDER_RESCHEDULED') {
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_time_stamp',
                            value: data.timestamp
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_order_number',
                            value: data.orderRescheduled.orderId
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_state',
                            value: data.orderRescheduled.state
                        });
                        if (data.orderRescheduled.state == "PLANNED") {
                            packageRecord.setValue({
                                fieldId: 'custrecord_jj_package_ai_truck',
                                value: data.orderRescheduled.vehicleId
                            });
                            packageRecord.setValue({
                                fieldId: 'custrecord_jj_package_ai_service_unit',
                                value: data.orderRescheduled.routeName
                            });
                            packageRecord.setValue({
                                fieldId: 'custrecord_jj_package_ai_scheduled_date',
                                value: data.orderRescheduled.scheduledDate
                            });
                            packageRecord.setValue({
                                fieldId: 'custrecord_jj_scheduled_time_window',
                                value: data.orderRescheduled.scheduledTimeWindowStart + " - " + data.orderRescheduled.scheduledTimeWindowEnd
                            });
                        } else {
                            packageRecord.setValue({
                                fieldId: 'custrecord_jj_package_ai_truck',
                                value: ""
                            });
                            packageRecord.setValue({
                                fieldId: 'custrecord_jj_package_ai_service_unit',
                                value: ""
                            });
                            packageRecord.setValue({
                                fieldId: 'custrecord_jj_package_ai_scheduled_date',
                                value: ""
                            });
                            packageRecord.setValue({
                                fieldId: 'custrecord_jj_scheduled_time_window',
                                value: ""
                            });
                        }
                    } else if (data.eventType == 'ORDER_OUT_ON_ROUTE') {
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_time_stamp',
                            value: data.timestamp
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_order_number',
                            value: data.orderStateUpdate.orderId
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_state',
                            value: data.orderStateUpdate.state
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_truck',
                            value: data.orderStateUpdate.vehicleId
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_service_unit',
                            value: data.orderStateUpdate.routeName
                        });
                    } else if (data.eventType == 'ORDER_COMPLETED') {
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_time_stamp',
                            value: data.timestamp
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_order_number',
                            value: data.orderStateUpdate.orderId
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_state',
                            value: data.orderStateUpdate.state
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_signed_by',
                            value: data.orderStateUpdate.signedBy
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_signature_url',
                            value: data.orderStateUpdate.signatureUrl
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_summary_url',
                            value: data.orderStateUpdate.summaryUrl
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_photo_url',
                            value: data.orderStateUpdate.photoURLs[0]
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_driver_note',
                            value: data.orderStateUpdate.driverNotes
                        });
                    } else if (data.eventType == 'ORDER_FAILED') {
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_time_stamp',
                            value: data.timestamp
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_order_number',
                            value: data.orderStateUpdate.orderId
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_state',
                            value: data.orderStateUpdate.state
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_photo_url',
                            value: data.orderStateUpdate.photoURLs[0]
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_driver_note',
                            value: data.orderStateUpdate.driverNotes + "\n" + data.orderStateUpdate.failureReason
                        });
                    } else if (data.eventType == 'POSITIVE_FEEDBACK_RECEIVED') {
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_time_stamp',
                            value: data.timestamp
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_order_number',
                            value: data.orderFeedback.orderId
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_feedback_score',
                            value: data.orderFeedback.score
                        });
                        // packageRecord.setValue({
                        //     fieldId: 'custrecord_jj_package_ai_truck',
                        //     value: data.orderStateUpdate.vehicleId
                        // });
                    } else if (data.eventType == 'OPERATOR_NOTES_ADDED') {
                        // packageRecord.setValue({
                        //     fieldId: 'custrecord_jj_package_ai_time_stamp',
                        //     value: data.timestamp
                        // });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_order_number',
                            value: data.orderNotes.orderId
                        });
                        packageRecord.setValue({
                            fieldId: 'custrecord_jj_package_ai_driver_note',
                            value: data.orderNotes.note + " by " + data.orderNotes.writtenBy
                        });
                    }
                    packageRecord.setValue({
                        fieldId: 'custrecord_jj_package_ai_json_data',
                        value: JSON.stringify(data)
                    });
                    packageRecord.save();
                } catch (er) {
                    log.debug("er", er)
                    var packageRecord = record.create({
                        type: 'customrecord_jj_package_ai'
                    })
                    packageRecord.setValue({
                        fieldId: 'custrecord_jj_package_ai_event',
                        value: 'ERROR_OCCURRED'
                    });
                    packageRecord.setValue({
                        fieldId: 'custrecord_jj_package_ai_error_message',
                        value: er.message
                    });
                    packageRecord.save();
                }
            }
        }
        for (var key in main) {
            if (typeof main[key] === 'function') {
                main[key] = trycatch(main[key], key);
            }
        }

        function trycatch(myfunction, key) {
            return function () {
                try {
                    return myfunction.apply(this, arguments);
                } catch (e) {
                    log.debug("e in  " + key, e);
                }
            }
        };
        return main;
    });
/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 * @NModuleScope SameAccount
 */
/*******************************************************************************
 * AHDTC-24 UE Custom Record to DO update
 * *************************************************************************
 * 
 * Date: 24-07-2019
 * 
 * 
 * Author: Jobin & Jismi IT Services LLP
 * 
 *****************************************************************************
 **/
define(['N/file', 'N/url', 'N/search', 'N/runtime', 'N/record', 'N/https', 'N/ui/serverWidget', 'N/email', 'N/task', 'N/format'],

    function (file, url, search, runtime, record, https, serverWidget, email, task, format) {
        var main = {

            afterSubmit: function (scriptContext) {
                if (scriptContext.type == "create") {
                    var packageAI = scriptContext.newRecord;
                    var eventType = packageAI.getValue('custrecord_jj_package_ai_event');
                    if (eventType == "ERROR_OCCURED") {
                        email.send({
                            author: -5,
                            recipients: 'dean@wglgroupusa.com',
                            subject: "ERROR IN PACKAGE AI RESPONSE",
                            body: packageAI.getValue('custrecord_jj_package_ai_error_message')
                        });
                    } else {
                        var orderNumber = packageAI.getValue({
                            fieldId: 'custrecord_jj_package_ai_order_number'
                        });
                        var deliveryid = main.salesOrderFind(orderNumber, packageAI)
                        if (deliveryid) {
                            var deliveryorder = record.load({
                                type: record.Type.SALES_ORDER,
                                id: deliveryid
                            });
                            if (eventType == "ORDER_COMMUNICATED") {
                                var timeStamp = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_time_stamp'
                                });
                                var status = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_state'
                                });
                                var truck = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_truck'
                                });
                                var scheduledDate = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_scheduled_date'
                                });
                                var timeWindow = packageAI.getValue({
                                    fieldId: 'custrecord_jj_scheduled_time_window'
                                });
                                var conversationLink = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_conversation_li'
                                });
                                var serviceUnit = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_service_unit'
                                });
                                var UserID = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_user'
                                });
                                var stop = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_stop'
                                });
                                var driverTeam = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_driver_team'
                                });
                                var jsonData = JSON.parse(packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_json_data'
                                }));
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_event_time_stamp',
                                    value: timeStamp
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_stop_number',
                                    value: stop
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_driver_helper',
                                    value: driverTeam
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_status',
                                    value: status
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_truck',
                                    value: truck
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_service_unit',
                                    value: serviceUnit
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_schedule_date',
                                    value: scheduledDate
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_scheduled_time_window',
                                    value: timeWindow
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_conversation_link',
                                    value: conversationLink
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_cl_order_history',
                                    value: 'Order Planned By ' + UserID + ' , ' + timeWindow + ' , ' + serviceUnit + ' , Stop#  ' + stop
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_extra_params',
                                    value: jsonData.orderStateUpdate.extraParams.toString()
                                });
                                var itemDetails = jsonData.orderStateUpdate.items
                                for (var i = 0; i < itemDetails.length; i++) {
                                    try {
                                        if (itemDetails[i].barcode) {
                                            var serialBarcode = itemDetails[i].barcode
                                            var lineNumber = deliveryorder.findSublistLineWithValue({
                                                sublistId: 'item',
                                                fieldId: 'custcol_serial_number',
                                                value: serialBarcode
                                            });
                                            deliveryorder.setSublistValue({
                                                sublistId: 'item',
                                                fieldId: 'custcol_item_level_statuses',
                                                line: lineNumber,
                                                value: 45
                                            });
                                        } else {
                                            var itemid = main.itemSearch(itemDetails[i].title)
                                            if (itemid) {
                                                var lineNumber = deliveryorder.findSublistLineWithValue({
                                                    sublistId: 'item',
                                                    fieldId: 'item',
                                                    value: itemid
                                                });
                                                deliveryorder.setSublistValue({
                                                    sublistId: 'item',
                                                    fieldId: 'custcol_item_level_statuses',
                                                    line: lineNumber,
                                                    value: 45
                                                });
                                            }
                                        }
                                    } catch (err) {
                                        log.debug("err", err)
                                    }
                                }
                                var fields = deliveryorder.getSublistFields({
                                    sublistId: 'item'
                                });
                                var orderStatusorg = deliveryorder.getValue({
                                    fieldId: 'custbody_order_level_status'
                                });
                                var lineObject = main.fetchLines(deliveryorder, fields);
                                var orderStatus = main.getOrderstatus(lineObject, orderStatusorg);
                                if (orderStatus != false) {
                                    deliveryorder.setValue({
                                        fieldId: "custbody_order_level_status",
                                        value: orderStatus
                                    });
                                }
                            } else if (eventType == 'ORDER_CONFIRMED') {
                                var timeStamp = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_time_stamp'
                                });
                                var status = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_state'
                                });
                                var scheduledDate = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_scheduled_date'
                                });
                                var timeWindow = packageAI.getValue({
                                    fieldId: 'custrecord_jj_scheduled_time_window'
                                });
                                var serviceUnit = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_service_unit'
                                });
                                // var UserID = packageAI.getValue({
                                //     fieldId: 'custrecord_jj_package_ai_user'
                                // });
                                var stop = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_stop'
                                });
                                var driverTeam = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_driver_team'
                                });
                                var jsonData = JSON.parse(packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_json_data'
                                }));

                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_event_time_stamp',
                                    value: timeStamp
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_stop_number',
                                    value: stop
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_driver_helper',
                                    value: driverTeam
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_service_unit',
                                    value: serviceUnit
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_status',
                                    value: status
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_schedule_date',
                                    value: scheduledDate
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_scheduled_time_window',
                                    value: timeWindow
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_cl_order_history',
                                    value: 'Schedule Confirmed by Customer: ' + timeWindow + ',' + serviceUnit + ', Stop#  ' + stop
                                });
                                var itemDetails = jsonData.orderStateUpdate.items
                                for (var i = 0; i < itemDetails.length; i++) {
                                    try {
                                        if (itemDetails[i].barcode) {
                                            var serialBarcode = itemDetails[i].barcode
                                            var lineNumber = deliveryorder.findSublistLineWithValue({
                                                sublistId: 'item',
                                                fieldId: 'custcol_serial_number',
                                                value: serialBarcode
                                            });
                                            deliveryorder.setSublistValue({
                                                sublistId: 'item',
                                                fieldId: 'custcol_item_level_statuses',
                                                line: lineNumber,
                                                value: 17
                                            });
                                        } else {
                                            var itemid = main.itemSearch(itemDetails[i].title)
                                            if (itemid) {
                                                var lineNumber = deliveryorder.findSublistLineWithValue({
                                                    sublistId: 'item',
                                                    fieldId: 'item',
                                                    value: itemid
                                                });
                                                deliveryorder.setSublistValue({
                                                    sublistId: 'item',
                                                    fieldId: 'custcol_item_level_statuses',
                                                    line: lineNumber,
                                                    value: 17
                                                });
                                            }
                                        }
                                    } catch (err) {
                                        log.debug("err", err)
                                    }
                                }
                                var fields = deliveryorder.getSublistFields({
                                    sublistId: 'item'
                                });
                                var orderStatusorg = deliveryorder.getValue({
                                    fieldId: 'custbody_order_level_status'
                                });
                                var lineObject = main.fetchLines(deliveryorder, fields);
                                var orderStatus = main.getOrderstatus(lineObject, orderStatusorg);
                                if (orderStatus != false) {
                                    deliveryorder.setValue({
                                        fieldId: "custbody_order_level_status",
                                        value: orderStatus
                                    });
                                }
                            } else if (eventType == 'ORDER_RESCHEDULED') {
                                var timeStamp = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_time_stamp'
                                });
                                var status = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_state'
                                });
                                var jsonData = JSON.parse(packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_json_data'
                                }));

                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_event_time_stamp',
                                    value: timeStamp
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_status',
                                    value: status
                                });
                                if (jsonData.orderRescheduled.state == "PLANNED") {
                                    var truck = packageAI.getValue({
                                        fieldId: 'custrecord_jj_package_ai_truck'
                                    });
                                    var serviceUnit = packageAI.getValue({
                                        fieldId: 'custrecord_jj_package_ai_service_unit'
                                    });
                                    var scheduledDate = packageAI.getValue({
                                        fieldId: 'custrecord_jj_package_ai_scheduled_date'
                                    });
                                    var timeWindow = packageAI.getValue({
                                        fieldId: 'custrecord_jj_scheduled_time_window'
                                    });
                                    var UserID = packageAI.getValue({
                                        fieldId: 'custrecord_jj_package_ai_user'
                                    });

                                    deliveryorder.setValue({
                                        fieldId: 'custbody_truck',
                                        value: truck
                                    });
                                    deliveryorder.setValue({
                                        fieldId: 'custbody_delivery_service_unit',
                                        value: serviceUnit
                                    });
                                    deliveryorder.setValue({
                                        fieldId: 'custbody_delivery_schedule_date',
                                        value: scheduledDate
                                    });
                                    deliveryorder.setValue({
                                        fieldId: 'custbody_scheduled_time_window',
                                        value: timeWindow
                                    });
                                } else {
                                    deliveryorder.setValue({
                                        fieldId: 'custbody_truck',
                                        value: ""
                                    });
                                    deliveryorder.setValue({
                                        fieldId: 'custbody_delivery_service_unit',
                                        value: ""
                                    });
                                    deliveryorder.setValue({
                                        fieldId: 'custbody_delivery_schedule_date',
                                        value: ""
                                    });
                                    deliveryorder.setValue({
                                        fieldId: 'custbody_scheduled_time_window',
                                        value: ""
                                    });
                                }
                                deliveryorder.setValue({
                                    fieldId: 'custbody_cl_order_history',
                                    value: 'Removed from Route by ' + UserID
                                });

                                // // var itemDetails = jsonData.orderRescheduled.items
                                var numLines = deliveryorder.getLineCount({
                                    sublistId: 'item'
                                });
                                for (var i = 0; i < numLines; i++) {
                                    try {
                                        deliveryorder.setSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'custcol_item_level_statuses',
                                            line: i,
                                            value: 43
                                        });
                                    } catch (err) {
                                        log.debug("err", err)
                                    }
                                }
                                var fields = deliveryorder.getSublistFields({
                                    sublistId: 'item'
                                });
                                var orderStatusorg = deliveryorder.getValue({
                                    fieldId: 'custbody_order_level_status'
                                });
                                var lineObject = main.fetchLines(deliveryorder, fields);
                                var orderStatus = main.getOrderstatus(lineObject, orderStatusorg);
                                if (orderStatus != false) {
                                    deliveryorder.setValue({
                                        fieldId: "custbody_order_level_status",
                                        value: orderStatus
                                    });
                                }
                            } else if (eventType == 'ORDER_OUT_ON_ROUTE') {
                                var timeStamp = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_time_stamp'
                                });
                                var status = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_state'
                                });
                                var truck = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_truck'
                                });
                                var serviceUnit = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_service_unit'
                                });
                                var jsonData = JSON.parse(packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_json_data'
                                }));
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_event_time_stamp',
                                    value: timeStamp
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_status',
                                    value: status
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_truck',
                                    value: truck
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_service_unit',
                                    value: serviceUnit
                                });
                                var itemDetails = jsonData.orderStateUpdate.items
                                for (var i = 0; i < itemDetails.length; i++) {
                                    try {
                                        if (itemDetails[i].barcode) {
                                            var serialBarcode = itemDetails[i].barcode
                                            var lineNumber = deliveryorder.findSublistLineWithValue({
                                                sublistId: 'item',
                                                fieldId: 'custcol_serial_number',
                                                value: serialBarcode
                                            });
                                            deliveryorder.setSublistValue({
                                                sublistId: 'item',
                                                fieldId: 'custcol_item_level_statuses',
                                                line: lineNumber,
                                                value: 33
                                            });
                                        } else {
                                            var itemid = main.itemSearch(itemDetails[i].title)
                                            if (itemid) {
                                                var lineNumber = deliveryorder.findSublistLineWithValue({
                                                    sublistId: 'item',
                                                    fieldId: 'item',
                                                    value: itemid
                                                });
                                                deliveryorder.setSublistValue({
                                                    sublistId: 'item',
                                                    fieldId: 'custcol_item_level_statuses',
                                                    line: lineNumber,
                                                    value: 33
                                                });
                                            }
                                        }
                                    } catch (err) {
                                        log.debug("err", err)
                                    }
                                }
                                var fields = deliveryorder.getSublistFields({
                                    sublistId: 'item'
                                });
                                var orderStatusorg = deliveryorder.getValue({
                                    fieldId: 'custbody_order_level_status'
                                });
                                var lineObject = main.fetchLines(deliveryorder, fields);
                                var orderStatus = main.getOrderstatus(lineObject, orderStatusorg);
                                if (orderStatus != false) {
                                    deliveryorder.setValue({
                                        fieldId: "custbody_order_level_status",
                                        value: orderStatus
                                    });
                                }
                            } else if (eventType == 'ORDER_COMPLETED') {
                                var timeStamp = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_time_stamp'
                                });
                                var status = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_state'
                                });
                                var signedBy = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_signed_by'
                                });
                                var signatureUrl = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_signature_url'
                                });
                                var summaryUrl = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_summary_url'
                                });
                                var photoUrl = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_photo_url'
                                });
                                var driverNote = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_driver_note'
                                });
                                var jsonData = JSON.parse(packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_json_data'
                                }));
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_event_time_stamp',
                                    value: timeStamp
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_status',
                                    value: status
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_signed_by',
                                    value: signedBy
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_signature_url',
                                    value: signatureUrl
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_order_photos_url',
                                    value: photoUrl
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_order_summary_url',
                                    value: summaryUrl
                                });
                                var driverNote1 = deliveryorder.getValue({
                                    fieldId: 'custbody_delivery_driver_notes'
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_driver_notes',
                                    value: driverNote1 + " \n " + driverNote
                                });
                                var itemDetails = jsonData.orderStateUpdate.items
                                for (var i = 0; i < itemDetails.length; i++) {
                                    try {
                                        if (itemDetails[i].barcode) {
                                            var serialBarcode = itemDetails[i].barcode
                                            var lineNumber = deliveryorder.findSublistLineWithValue({
                                                sublistId: 'item',
                                                fieldId: 'custcol_serial_number',
                                                value: serialBarcode
                                            });
                                            if (itemDetails[i].itemState == "COMPLETED") {
                                                deliveryorder.setSublistValue({
                                                    sublistId: 'item',
                                                    fieldId: 'custcol_item_level_statuses',
                                                    line: lineNumber,
                                                    value: 28
                                                });
                                            } else {
                                                deliveryorder.setSublistValue({
                                                    sublistId: 'item',
                                                    fieldId: 'custcol_item_level_statuses',
                                                    line: lineNumber,
                                                    value: 44
                                                });
                                            }
                                        } else {
                                            var itemid = main.itemSearch(itemDetails[i].title)
                                            if (itemid) {
                                                var lineNumber = deliveryorder.findSublistLineWithValue({
                                                    sublistId: 'item',
                                                    fieldId: 'item',
                                                    value: itemid
                                                });
                                                if (itemDetails[i].itemState == "COMPLETED") {
                                                    deliveryorder.setSublistValue({
                                                        sublistId: 'item',
                                                        fieldId: 'custcol_item_level_statuses',
                                                        line: lineNumber,
                                                        value: 28
                                                    });
                                                } else {
                                                    deliveryorder.setSublistValue({
                                                        sublistId: 'item',
                                                        fieldId: 'custcol_item_level_statuses',
                                                        line: lineNumber,
                                                        value: 44
                                                    });
                                                }
                                            }
                                        }
                                        deliveryorder.setSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'custcol_line_photos_url',
                                            line: lineNumber,
                                            value: itemDetails[i].photoURLs[0]
                                        });
                                    } catch (err) {
                                        log.debug("err", err)
                                    }
                                }
                                var fields = deliveryorder.getSublistFields({
                                    sublistId: 'item'
                                });
                                var orderStatusorg = deliveryorder.getValue({
                                    fieldId: 'custbody_order_level_status'
                                });
                                var lineObject = main.fetchLines(deliveryorder, fields);
                                var orderStatus = main.getOrderstatus(lineObject, orderStatusorg);
                                if (orderStatus != false) {
                                    deliveryorder.setValue({
                                        fieldId: "custbody_order_level_status",
                                        value: orderStatus
                                    });
                                }
                            } else if (eventType == 'ORDER_FAILED') {
                                var timeStamp = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_time_stamp'
                                });
                                var status = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_state'
                                });
                                var photoUrl = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_photo_url'
                                });
                                var driverNote = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_driver_note'
                                });
                                var jsonData = JSON.parse(packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_json_data'
                                }));

                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_event_time_stamp',
                                    value: timeStamp
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_status',
                                    value: status
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_order_photos_url',
                                    value: photoUrl
                                });
                                var driverNote1 = deliveryorder.getValue({
                                    fieldId: 'custbody_delivery_driver_notes'
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_driver_notes',
                                    value: driverNote1 + " \n " + driverNote
                                });
                                var itemDetails = jsonData.orderStateUpdate.items
                                for (var i = 0; i < itemDetails.length; i++) {
                                    try {
                                        if (itemDetails[i].barcode) {
                                            var serialBarcode = itemDetails[i].barcode
                                            var lineNumber = deliveryorder.findSublistLineWithValue({
                                                sublistId: 'item',
                                                fieldId: 'custcol_serial_number',
                                                value: serialBarcode
                                            });
                                            deliveryorder.setSublistValue({
                                                sublistId: 'item',
                                                fieldId: 'custcol_item_level_statuses',
                                                line: lineNumber,
                                                value: 44
                                            });
                                        } else {
                                            var itemid = main.itemSearch(itemDetails[i].title)
                                            if (itemid) {
                                                var lineNumber = deliveryorder.findSublistLineWithValue({
                                                    sublistId: 'item',
                                                    fieldId: 'item',
                                                    value: itemid
                                                });
                                                deliveryorder.setSublistValue({
                                                    sublistId: 'item',
                                                    fieldId: 'custcol_item_level_statuses',
                                                    line: lineNumber,
                                                    value: 44
                                                });
                                            }
                                        }
                                    } catch (err) {
                                        log.debug("err", err)
                                    }
                                }
                                var fields = deliveryorder.getSublistFields({
                                    sublistId: 'item'
                                });
                                var orderStatusorg = deliveryorder.getValue({
                                    fieldId: 'custbody_order_level_status'
                                });
                                var lineObject = main.fetchLines(deliveryorder, fields);
                                var orderStatus = main.getOrderstatus(lineObject, orderStatusorg);
                                if (orderStatus != false) {
                                    deliveryorder.setValue({
                                        fieldId: "custbody_order_level_status",
                                        value: orderStatus
                                    });
                                }
                            } else if (eventType == 'POSITIVE_FEEDBACK_RECEIVED') {
                                var timeStamp = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_time_stamp'
                                });
                                var score = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_feedback_score'
                                });

                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_event_time_stamp',
                                    value: timeStamp
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_feedback_score',
                                    value: score
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_feedback_text',
                                    value: score
                                });
                            } else if (eventType == 'OPERATOR_NOTES_ADDED') {
                                var driverNote = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_driver_note'
                                });
                                var UserID = packageAI.getValue({
                                    fieldId: 'custrecord_jj_package_ai_user'
                                });
                                var driverNote1 = deliveryorder.getValue({
                                    fieldId: 'custbody_delivery_driver_notes'
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_delivery_driver_notes',
                                    value: driverNote1 + " \n " + driverNote
                                });
                                deliveryorder.setValue({
                                    fieldId: 'custbody_cl_order_history',
                                    value: 'Note added By ' + UserID
                                });
                            }
                            var id = deliveryorder.save({
                                enableSourcing: false,
                                ignoreMandatoryFields: true
                            });
                        }
                    }
                }
            },
            itemSearch: function (itemName) {
                var itemSearchObj = search.create({
                    type: "item",
                    filters: [
                        ["name", "is", itemName]
                    ],
                    columns: [
                        search.createColumn({
                            name: "itemid",
                            sort: search.Sort.ASC,
                            label: "Name"
                        }),
                        search.createColumn({
                            name: "internalid",
                            label: "Internal ID"
                        })
                    ]
                });
                var searchResultCount = itemSearchObj.runPaged().count;
                var itemid;
                if (searchResultCount > 0) {
                    var result = itemSearchObj.run().getRange(0, 1);
                    itemid = result[0].getValue({
                        name: "internalid",
                        label: "Internal ID"
                    });
                    return itemid;
                } else {
                    return false;
                }
            },
            getOrderstatus: function (lineObj, orderStatus) {

                log.debug("orderStatus", orderStatus);
                if (orderStatus == "") {
                    /*Order Manually*/
                    if (main.checkStatus(lineObj, 3, '', false))
                        return 3
                }

                /*Received in Delivery Terminal*/
                if (main.checkStatus(lineObj, 10, 15, '', false))
                    return 32
                /*Received in Consol Center*/
                if (main.checkStatus(lineObj, 11, '', false))
                    return 15
                /*Routed for pickup*/
                if (main.checkStatus(lineObj, 5, '', false))
                    return 4
                /*Routed for pickup*/
                // if (main.checkStatus(lineObj, 4, '', false))
                //     return 4
                /*Routed for Delivery*/
                if (main.checkStatus(lineObj, 4, '', false))
                    return 18
                /*Finished*/
                if (main.checkStatus(lineObj, 28, '', false))
                    return 36
                /*ETA Delay*/
                if (main.checkStatus(lineObj, 30, '', false))
                    return 38
                /*Hold*/
                if (main.checkStatus(lineObj, 27, '', false))
                    return 35
                /*Failed*/
                if (main.checkStatus(lineObj, 44, '', false))
                    return 66
                /*Rescheduled*/
                if (main.checkStatus(lineObj, 43, '', false))
                    return 65
                /*Started*/
                if (main.checkStatus(lineObj, 29, '', false))
                    return 37
                /*Unable Start*/
                if (main.checkStatus(lineObj, 21, '', false))
                    return 27
                /*Unable Finish*/
                if (main.checkStatus(lineObj, 22, '', false))
                    return 28
                /*In-Transit to Delivery Terminal*/
                if (main.checkStatus(lineObj, 31, '', false))
                    return 20
                /*In-Transit to Consol Center*/
                if (main.checkStatus(lineObj, 32, '', false))
                    return 33
                /*In-Transit */
                if (main.checkStatus(lineObj, 33, '', false))
                    return 40
                /*Planned */
                if (main.checkStatus(lineObj, 45, '', false))
                    return 67
                /*Scheduled For Delivery */
                if (main.checkStatus(lineObj, 17, '', false))
                    return 22
                /*Picked up from Store*/
                if (main.checkStatus(lineObj, 9, '', false))
                    return 56

                if (orderStatus == "") {
                    /*Partially Received in electronic Orders recieved*/
                    if (main.checkStatus(lineObj, 1, '', true))
                        return 1
                }
                /*Partially Planned */
                if (main.checkStatus(lineObj, 45, '', true))
                    return 68
                /*Partially Received in Delivery Terminal*/
                if (main.checkStatus(lineObj, 10, 15, true))
                    return 16
                /*Partially Received in Consol Center*/
                if (main.checkStatus(lineObj, 11, '', true))
                    return 17
                /*Partialy Routed for Delivery*/
                if (main.checkStatus(lineObj, 12, '', true))
                    return 34
                // /*Partialy Routed for pickup*/
                // if (main.checkStatus(lineObj, 5, '', true))
                //     return 5
                /*Partialy In-Transit to Delivery Terminal*/
                if (main.checkStatus(lineObj, 31, '', true))
                    return 21
                /*Partialy In-Transit to Consol Center*/
                if (main.checkStatus(lineObj, 32, '', true))
                    return 39
                /*Partially Scheduled for Delivery*/
                if (main.checkStatus(lineObj, 17, '', true))
                    return 42
                /*Partially Picked Up from Store*/
                if (main.checkStatus(lineObj, 9, '', true))
                    return 57

                return false
            },
            checkStatus: function (lineObj, checkStatus1, checkStatus2, single) {
                var flag = false;
                for (var key in lineObj) {
                    if (lineObj[key]['itemtype'] == "InvtPart") {
                        var itemStatus = lineObj[key]['custcol_item_level_statuses'];
                        if (itemStatus == checkStatus1 || itemStatus == checkStatus2) {
                            flag = true;
                        } else {
                            if (single == false) {
                                flag = false;
                                return flag;
                            }
                        }
                    }
                }
                return flag;
            },
            fetchLines: function (deliveryorder, fields) {
                var numLines = deliveryorder.getLineCount({
                    sublistId: 'item'
                });
                var lineObj = {};
                for (var i = 0; i < numLines; i++) {
                    lineObj[i] = {};
                    for (var k = 0; k < fields.length; k++) {
                        lineObj[i][fields[k]] = deliveryorder.getSublistValue({
                            fieldId: fields[k],
                            sublistId: 'item',
                            line: i
                        });
                    }
                }

                return lineObj;
            },
            salesOrderFind: function (orderno, packageAI) {
                var deliveryid;
                var salesorderSearchObj = search.create({
                    type: "salesorder",
                    filters: [
                        ["type", "anyof", "SalesOrd"],
                        "AND",
                        ["numbertext", "is", orderno],
                        "AND",
                        ["mainline", "is", "T"]
                    ],
                    columns: [
                        search.createColumn({
                            name: "internalid",
                            label: "Internal ID"
                        })
                    ]
                });
                var searchResultCount = salesorderSearchObj.runPaged().count;
                log.debug("salesorderSearchObj result count", searchResultCount);
                if (searchResultCount == 0) {
                    var otherId = record.submitFields({
                        type: 'customrecord_jj_package_ai',
                        id: packageAI.id,
                        values: {
                            'custrecord_jj_package_ai_event': 'ERROR_OCCURRED',
                            'custrecord_jj_package_ai_error_message': 'Order is not present'
                        }
                    });
                } else {
                    salesorderSearchObj.run().each(function (result) {
                        deliveryid = result.getValue({
                            name: "internalid",
                            label: "Internal ID"
                        });
                    });
                    return deliveryid;
                }
            }
        };
        for (var key in main) {
            if (typeof main[key] === 'function') {
                main[key] = trycatch(main[key], key);
            }
        }

        function trycatch(myfunction, key) {
            return function () {
                try {
                    return myfunction.apply(this, arguments);
                } catch (e) {
                    log.debug("e in  " + key, e);
                }
            }
        };
        return main;
    });

Leave a comment

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