Create Sales Order from the AWS JSON file

Jira Code: AHD-24

The sales order is created by using JSON file from AWS.

/**
 * @NApiVersion 2.x
 * @NScriptType ScheduledScript
 * @NModuleScope SameAccount
 */
/*******************************************************************************
 * 
 * AHD-28 AWS Authorization
 * 
 * *******************************************************************************
 * 
 * Date: 10-01-2019
 * 
 * Author: Jobin & Jismi IT Services LLP
 * 
 *****************************************************************************
 **/
define(['N/email', 'N/file', 'N/url', 'N/http', 'N/record', 'N/runtime', 'N/search', 'N/https', 'N/task', 'N/render'],
    /**
     * @param {email} email
     * @param {http} http
     * @param {https} https
     * @param {record} record
     * @param {runtime} runtime
     * @param {search} search
     * @param {url} url
     */
    function (email, file, url, http, record, runtime, search, https, task, render) {

        /**
         * Definition of the Scheduled script trigger point.
         *
         * @param {Object} scriptContext
         * @param {string} scriptContext.type - The context in which the script is executed. It is one of the values from the scriptContext.InvocationType enum.
         * @Since 2015.2
         */
        var main = {
            execute: function (scriptContext) {
                var salesID = runtime.getCurrentScript().getParameter("custscript_jj_salesid");
                var orderObjects = main.fetchObjects();
                var fileidarray = [];
                var loadfileObj, singlePurchaseOrder, locPath, deletesSinglePurchaseOrder, uploadResponse;
                for (var i = 0; i < 1; i++) {
                    if (((orderObjects[Object.keys(orderObjects)[i]]).toString()).search('xml') > (-1)) {
                        // neglect XML files
                        continue;
                    }
                    locPath = (orderObjects[Object.keys(orderObjects)[i]]).split("Inbound/")[1];
                    //If no JSON file is found in File Cabinet,then Create sales order
                    singlePurchaseOrder = main.fetchAnObject(orderObjects[Object.keys(orderObjects)[i]]);
                    singlePurchaseOrder = JSON.parse(singlePurchaseOrder);
                    salesID = main.createdeliveryid(singlePurchaseOrder, locPath, fileidarray);
                    fileidarray.push(salesID)
                }
                //Create the file which has fileid of the JSON from AWS.
                log.debug("test", fileidarray)
                var filearray = file.create({
                    name: 'filetoprocess.txt',
                    fileType: file.Type.PLAINTEXT,
                    contents: fileidarray.toString(),
                    folder: 900,
                });
                var filearrayid = filearray.save();

                for (var a = 0; a < fileidarray.length; a++) {
                    //Create Call for Delivery Order from the JSON file.
                    var deliveryorder = main.createdeliveryorder(singlePurchaseOrder, locPath, fileidarray[a], a);
                }
                var remainingUsage = runtime.getCurrentScript().getRemainingUsage();
                var mrTask = task.create({
                    taskType: task.TaskType.SCHEDULED_SCRIPT,
                    scriptId: "customscript_jj_aws_authorization",
                    deploymentId: "customdeploy1",
                });
                var scriptTaskId = mrTask.submit();
                log.debug("rescheduleScriptandReturn_scriptTaskId", remainingUsage);
                return;

            },
            createdeliveryid: function (singlePurchaseOrder, locPath, fileidarray) {
                //Create JSON file from the AWS.
                var JSONdata = JSON.stringify(singlePurchaseOrder);
                locPath = locPath.split(".")[0]
                var filetosave = file.create({
                    name: locPath + ".json",
                    fileType: file.Type.JSON,
                    contents: JSONdata
                });
                filetosave.folder = 14049;
                var fileid = filetosave.save();
                return fileid;
            },
            createdeliveryorder: function (singlePurchaseOrder, locPath, salesID, position) {
                //Create Delivery Order from the JSON file.
                try {
                    var fileget = file.load({
                        id: salesID
                    });
                    var fileobj = JSON.parse(fileget.getContents());
                    var idcustomer;
                    for (var SHIPMENT_DETAILS in fileobj) {
                        for (var ProNumber in fileobj[SHIPMENT_DETAILS]) {
                            var deleteorder = main.deleteOrder(fileobj[SHIPMENT_DETAILS].ProNumber.split("-")[0])
                            var deliveryorder = record.create({
                                type: record.Type.SALES_ORDER,
                                isDynamic: false
                            });
                            deliveryorder.setValue({
                                fieldId: 'custbody_cl_pro_number',
                                value: fileobj[SHIPMENT_DETAILS].ProNumber.split("-")[0],
                                ignoreFieldChange: true
                            });
                            deliveryorder.setValue({
                                fieldId: 'tranid',
                                value: fileobj[SHIPMENT_DETAILS].ProNumber.split("-")[0],
                                ignoreFieldChange: true
                            });
                            if (fileobj[SHIPMENT_DETAILS].ServiceType == "Delivery") {
                                deliveryorder.setValue({
                                    fieldId: 'custbody17',
                                    value: 2,
                                    ignoreFieldChange: true
                                });
                                if (fileobj[SHIPMENT_DETAILS].ServiceLevel == "STANDARD") {
                                    deliveryorder.setText({
                                        fieldId: 'custbody_service_level',
                                        text: "CURB",
                                        ignoreFieldChange: true
                                    });
                                } else {
                                    deliveryorder.setText({
                                        fieldId: 'custbody_service_level',
                                        text: fileobj[SHIPMENT_DETAILS].ServiceLevel,
                                        ignoreFieldChange: true
                                    });
                                }
                            } else if (fileobj[SHIPMENT_DETAILS].ServiceType == "Exchange") {
                                deliveryorder.setValue({
                                    fieldId: 'custbody17',
                                    value: 3,
                                    ignoreFieldChange: true
                                });
                                deliveryorder.setText({
                                    fieldId: 'custbody_service_level',
                                    text: fileobj[SHIPMENT_DETAILS].ServiceLevel,
                                    ignoreFieldChange: true
                                });
                            } else if (fileobj[SHIPMENT_DETAILS].ServiceType == "Pickup" || fileobj[SHIPMENT_DETAILS].ServiceType == "PickUp" || fileobj[SHIPMENT_DETAILS].ServiceType == "PICKUP") {
                                deliveryorder.setValue({
                                    fieldId: 'custbody17',
                                    value: 5,
                                    ignoreFieldChange: true
                                });
                                deliveryorder.setText({
                                    fieldId: 'custbody_service_level',
                                    text: fileobj[SHIPMENT_DETAILS].ServiceLevel,
                                    ignoreFieldChange: true
                                });
                            }
                            if (fileobj[SHIPMENT_DETAILS].ServiceLevel == "INST") {
                                deliveryorder.setText({
                                    fieldId: 'custbody_service_level',
                                    text: "CURB",
                                    ignoreFieldChange: true
                                });
                            }
                            deliveryorder.setValue({
                                fieldId: 'custbody_seller_bol_no',
                                value: fileobj[SHIPMENT_DETAILS].Reference.BOL,
                                ignoreFieldChange: true
                            });
                            deliveryorder.setValue({
                                fieldId: 'otherrefnum',
                                value: fileobj[SHIPMENT_DETAILS].Reference.PO,
                                ignoreFieldChange: true
                            });
                            var ordrdate = fileobj[SHIPMENT_DETAILS].OrderDate;
                            ordrdate = main.getdate(ordrdate)

                            deliveryorder.setValue({
                                fieldId: 'trandate',
                                value: new Date(ordrdate),
                                ignoreFieldChange: false
                            });
                            deliveryorder.setValue({
                                fieldId: 'custbody_ola_created_on',
                                value: new Date(ordrdate),
                                ignoreFieldChange: false
                            });
                            var shipdate = fileobj[SHIPMENT_DETAILS].ShipDate;
                            shipdate = main.getdate(shipdate)
                            deliveryorder.setValue({
                                fieldId: 'shipdate',
                                value: new Date(shipdate),
                                ignoreFieldChange: false
                            });
                            var dueDate = fileobj[SHIPMENT_DETAILS].DueDate;
                            if (dueDate == "" || dueDate == null || dueDate == undefined) { } else {
                                dueDate = main.getdate(dueDate)
                                deliveryorder.setValue({
                                    fieldId: 'custbody_cl_due_date',
                                    value: new Date(dueDate),
                                    ignoreFieldChange: false
                                });
                            }

                            var customerSearchObj = search.create({
                                type: "customer",
                                filters: [
                                    ["entityid", "is", fileobj[SHIPMENT_DETAILS].BillTo.Name]
                                ],
                                columns: [
                                    search.createColumn({
                                        name: "entityid",
                                        sort: search.Sort.ASC,
                                        label: "ID"
                                    }),
                                    search.createColumn({
                                        name: "internalid",
                                        label: "Internal ID"
                                    })
                                ]
                            });
                            var searchResultCount = customerSearchObj.runPaged().count;
                            var resultsearch = customerSearchObj.run().getRange(0, 1);

                            if (searchResultCount > 0) {
                                idcustomer = resultsearch[0].getValue({
                                    name: "internalid",
                                    label: "Internal ID"
                                });
                            } else {
                                var seller = record.create({
                                    type: record.Type.CUSTOMER,
                                    isDynamic: false
                                });
                                seller.setValue({
                                    fieldId: 'entityid',
                                    value: fileobj[SHIPMENT_DETAILS].BillTo.CustNo,
                                    ignoreFieldChange: true
                                });
                                seller.setValue({
                                    fieldId: 'companyname',
                                    value: fileobj[SHIPMENT_DETAILS].BillTo.Name,
                                    ignoreFieldChange: true
                                });
                                seller.setValue({
                                    fieldId: 'subsidiary',
                                    value: 1,
                                    ignoreFieldChange: true
                                });
                                idcustomer = seller.save({
                                    enableSourcing: false,
                                    ignoreMandatoryFields: true
                                });
                                log.debug("idcustomer", idcustomer)
                            }
                            deliveryorder.setValue({
                                fieldId: 'entity',
                                value: idcustomer,
                                ignoreFieldChange: true
                            });
                            deliveryorder.setText({
                                fieldId: 'billaddress',
                                text: fileobj[SHIPMENT_DETAILS].BillTo.Name + "\n" + fileobj[SHIPMENT_DETAILS].BillTo.Address1 + "\n" + fileobj[SHIPMENT_DETAILS].BillTo.City + " " + fileobj[SHIPMENT_DETAILS].BillTo.State + " " + fileobj[SHIPMENT_DETAILS].BillTo.Zip + "\n" + fileobj[SHIPMENT_DETAILS].BillTo.Telephone + "\n" + fileobj[SHIPMENT_DETAILS].BillTo.Email,
                                ignoreFieldChange: true
                            });
                            deliveryorder.setValue({
                                fieldId: 'custbody_jj_email_bill_to',
                                value: fileobj[SHIPMENT_DETAILS].BillTo.Email,
                                ignoreFieldChange: true
                            });
                            var items = fileobj[SHIPMENT_DETAILS].LineItems
                            for (var k = 0; k < items.length; k++) {

                                if (items[k].Model == "" || items[k].Model == null || items[k].Model == undefined) {
                                    items[k].Model = "UNDEFINED"

                                }
                                var itemSearchObj = search.create({
                                    type: "item",
                                    filters: [
                                        ["name", "is", items[k].Model]
                                    ],
                                    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"
                                    });
                                } else {
                                    var newitem = record.create({
                                        type: record.Type.SERIALIZED_INVENTORY_ITEM,
                                        isDynamic: false
                                    });
                                    newitem.setValue({
                                        fieldId: 'itemid',
                                        value: items[k].Model,
                                        ignoreFieldChange: true
                                    });
                                    var item_displayname = items[k].Description
                                    newitem.setValue({
                                        fieldId: 'displayname',
                                        value: item_displayname.substr(0, 60),
                                        ignoreFieldChange: true
                                    });
                                    newitem.setValue({
                                        fieldId: 'cogsaccount',
                                        value: 212,
                                        ignoreFieldChange: true
                                    });
                                    newitem.setValue({
                                        fieldId: 'assetaccount',
                                        value: 565,
                                        ignoreFieldChange: true
                                    });
                                    newitem.setValue({
                                        fieldId: 'taxschedule',
                                        value: 2,
                                        ignoreFieldChange: true
                                    });
                                    newitem.setValue({
                                        fieldId: 'cost',
                                        value: 0.00,
                                        ignoreFieldChange: true
                                    });
                                    itemid = newitem.save({
                                        enableSourcing: false,
                                        ignoreMandatoryFields: true
                                    });
                                    log.debug("itemid", itemid)
                                }
                                try {
                                    deliveryorder.setSublistValue({
                                        sublistId: 'item',
                                        fieldId: 'item',
                                        value: itemid,
                                        line: k,
                                        ignoreFieldChange: true
                                    });
                                    deliveryorder.setSublistValue({
                                        sublistId: 'item',
                                        fieldId: 'quantity',
                                        value: items[k].Pieces,
                                        line: k,
                                        ignoreFieldChange: true
                                    });
                                    var item_displayname = items[k].Description
                                    deliveryorder.setSublistValue({
                                        sublistId: 'item',
                                        fieldId: 'custcol6',
                                        value: item_displayname.substr(0, 60),
                                        line: k,
                                        ignoreFieldChange: true
                                    });
                                    deliveryorder.setSublistValue({
                                        sublistId: 'item',
                                        fieldId: 'custcol_item_level_statuses',
                                        value: 1,
                                        line: k,
                                        ignoreFieldChange: true
                                    });
                                    try {
                                        deliveryorder.setSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'custcol9',
                                            value: items[k].Weight,
                                            line: k,
                                            ignoreFieldChange: true
                                        });
                                    } catch (weight) {

                                    }
                                    try {
                                        deliveryorder.setSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'custcol4',
                                            value: items[k].Height,
                                            line: k,
                                            ignoreFieldChange: true
                                        });
                                    } catch (height) {

                                    }
                                    try {
                                        deliveryorder.setSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'custcol2',
                                            value: items[k].Length,
                                            line: k,
                                            ignoreFieldChange: true
                                        });
                                    } catch (Length) {

                                    }
                                    try {
                                        deliveryorder.setSublistValue({
                                            sublistId: 'item',
                                            fieldId: 'custcol3',
                                            value: items[k].Width,
                                            line: k,
                                            ignoreFieldChange: true
                                        });
                                    } catch (width) {

                                    }
                                    deliveryorder.setSublistValue({
                                        sublistId: 'item',
                                        fieldId: 'custcol_no_plts',
                                        value: items[k].Pallets,
                                        line: k,
                                        ignoreFieldChange: true
                                    });
                                    deliveryorder.setSublistValue({
                                        sublistId: 'item',
                                        fieldId: 'amount',
                                        value: 0,
                                        line: k,
                                        ignoreFieldChange: true
                                    });
                                } catch (err) {
                                    log.debug(err.name, err.message);
                                }
                            }
                            try {
                                var seritems = fileobj[SHIPMENT_DETAILS].ServiceItems

                                if (seritems == "" || seritems == null) {

                                } else {
                                    for (var p = 0; p < seritems.length; p++) {
                                        var itemdescription = seritems[p].Description
                                        var itemdescriptioncount = itemdescription.search("SERVICE LEVEL:");
                                        if (itemdescriptioncount == -1) {
                                            var itemSearchObj = search.create({
                                                type: "item",
                                                filters: [
                                                    ["name", "is", seritems[p].ServiceCode]
                                                ],
                                                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"
                                                });
                                            } else {
                                                var newitem = record.create({
                                                    type: record.Type.SERVICE_ITEM,
                                                    isDynamic: false
                                                });
                                                newitem.setValue({
                                                    fieldId: 'itemid',
                                                    value: seritems[p].ServiceCode,
                                                    ignoreFieldChange: true
                                                });
                                                newitem.setValue({
                                                    fieldId: 'itemtypename',
                                                    value: "Service for Resale",
                                                    ignoreFieldChange: true
                                                });
                                                newitem.setValue({
                                                    fieldId: 'displayname',
                                                    value: seritems[p].Description,
                                                    ignoreFieldChange: true
                                                });
                                                newitem.setValue({
                                                    fieldId: 'taxschedule',
                                                    value: 2,
                                                    ignoreFieldChange: true
                                                });
                                                itemid = newitem.save({
                                                    enableSourcing: false,
                                                    ignoreMandatoryFields: true
                                                });
                                                log.debug("new seritemid", itemid)
                                            }
                                            try {
                                                deliveryorder.setSublistValue({
                                                    sublistId: 'item',
                                                    fieldId: 'item',
                                                    value: itemid,
                                                    line: k,
                                                    ignoreFieldChange: true
                                                });
                                                deliveryorder.setSublistValue({
                                                    sublistId: 'item',
                                                    fieldId: 'custcol6',
                                                    value: seritems[p].Description,
                                                    line: k,
                                                    ignoreFieldChange: true
                                                });
                                                deliveryorder.setSublistValue({
                                                    sublistId: 'item',
                                                    fieldId: 'custcol_item_level_statuses',
                                                    value: 1,
                                                    line: k,
                                                    ignoreFieldChange: true
                                                });
                                                deliveryorder.setSublistValue({
                                                    sublistId: 'item',
                                                    fieldId: 'amount',
                                                    value: 0,
                                                    line: k,
                                                    ignoreFieldChange: true
                                                });
                                                k++;
                                            } catch (err) {
                                                log.debug(err.name, err.message);
                                            }
                                        }
                                    }
                                }

                            } catch (errorrr) {
                                log.debug("errorrr", errorrr)
                            }
                        }
                    }
                    //reschedule the script based on the usage

                    try {
                        var memovalue = '';
                        if (fileobj[SHIPMENT_DETAILS].NotesItems.length > 1) {
                            for (var q = 0; q < fileobj[SHIPMENT_DETAILS].NotesItems.length; q++) {
                                memovalue = memovalue + "\t " + ' \n  ' + fileobj[SHIPMENT_DETAILS].NotesItems[q].Description + " ||"
                            }
                            deliveryorder.setValue({
                                fieldId: 'memo',
                                value: memovalue
                            });
                        } else {
                            deliveryorder.setValue({
                                fieldId: 'memo',
                                value: fileobj[SHIPMENT_DETAILS].NotesItems[0].Description
                            });
                        }
                    } catch (e) {
                        var noteitem = " "
                        deliveryorder.setValue({
                            fieldId: 'memo',
                            value: noteitem
                        });
                    }
                    try {
                        if (fileobj[SHIPMENT_DETAILS].ServiceLevel == "INST") {
                            var inst = fileobj[SHIPMENT_DETAILS].Reference.Instructions
                            inst = inst.split("SERVICE LEVEL")
                            deliveryorder.setValue({
                                fieldId: 'custbody_do_con_service5',
                                value: "INST" + inst[1]
                            });
                        } else {
                            deliveryorder.setValue({
                                fieldId: 'custbody_do_con_service5',
                                value: fileobj[SHIPMENT_DETAILS].Reference.Instructions
                            });
                        }
                    } catch (e) {
                        var instruction = '';
                        deliveryorder.setValue({
                            fieldId: 'custbody_do_con_service5',
                            value: instruction
                        });
                    }
                    deliveryorder.setValue({
                        fieldId: 'custbody_pickupline_locations',
                        value: fileobj[SHIPMENT_DETAILS].Shipper.NAME + "\n" + fileobj[SHIPMENT_DETAILS].Shipper.Address1 + "\n" + fileobj[SHIPMENT_DETAILS].Shipper.City + " " + fileobj[SHIPMENT_DETAILS].Shipper.State + " " + fileobj[SHIPMENT_DETAILS].Shipper.Zip + "\n" + fileobj[SHIPMENT_DETAILS].Shipper.Email + " " + fileobj[SHIPMENT_DETAILS].Shipper.Telephone
                    });
                    var pickaddr = {};
                    pickaddr.name = fileobj[SHIPMENT_DETAILS].Shipper.NAME
                    pickaddr.Address1 = fileobj[SHIPMENT_DETAILS].Shipper.Address1
                    pickaddr.Address2 = fileobj[SHIPMENT_DETAILS].Shipper.Address2
                    pickaddr.City = fileobj[SHIPMENT_DETAILS].Shipper.City
                    pickaddr.State = fileobj[SHIPMENT_DETAILS].Shipper.State
                    pickaddr.Zip = fileobj[SHIPMENT_DETAILS].Shipper.Zip
                    pickaddr.email = fileobj[SHIPMENT_DETAILS].Shipper.Email
                    pickaddr.PhoneNumber = fileobj[SHIPMENT_DETAILS].Shipper.Telephone
                    var res_pick = main.validateaddr(idcustomer, pickaddr, 'Pickup Address', fileobj[SHIPMENT_DETAILS].ServiceType)
                    log.debug("res_pick", res_pick)
                    if (fileobj[SHIPMENT_DETAILS].ServiceType == "Pickup" || fileobj[SHIPMENT_DETAILS].ServiceType == "PickUp" || fileobj[SHIPMENT_DETAILS].ServiceType == "PICKUP") { 
                        
                    } else {
                        deliveryorder.setValue({
                            fieldId: 'custbody_pickup_method',
                            value: res_pick.pickmethod
                        });
                    }
                    if (res_pick.hold == 'ON') {
                        deliveryorder.setValue({
                            fieldId: 'custbody_on_hold',
                            value: true
                        });
                        deliveryorder.setValue({
                            fieldId: 'custbody_hold_reason',
                            value: 'Please Contact Acct. Dept'
                        });
                    }
                    var zippickdetails = main.update_pu_dl(fileobj[SHIPMENT_DETAILS].Shipper.Zip)
                    log.debug("zippickdetails", zippickdetails)
                    deliveryorder.setValue({
                        fieldId: 'custbody29',
                        value: zippickdetails[3]
                    });
                    deliveryorder.setValue({
                        fieldId: 'custbody30',
                        value: zippickdetails[1]
                    });
                    deliveryorder.setValue({
                        fieldId: 'custbody_pickup_route',
                        value: zippickdetails[2]
                    });
                    deliveryorder.setValue({
                        fieldId: 'custbody_mzc_dmi_rel_day_sh',
                        value: zippickdetails[6]
                    });
                    deliveryorder.setValue({
                        fieldId: 'custbody_mzc_day_trailer_loaded_sh',
                        value: zippickdetails[5]
                    });
                    var id = deliveryorder.save({
                        enableSourcing: false,
                        ignoreMandatoryFields: true
                    });

                    deliveryorder = record.load({
                        id: id,
                        type: record.Type.SALES_ORDER
                    });

                    deliveryorder.setValue({
                        fieldId: 'custbody_do_special_instruction',
                        value: fileobj[SHIPMENT_DETAILS].Pronotes
                    });
                    var declaredvalue = '';
                    var declValue = fileobj[SHIPMENT_DETAILS].BillTo.DeclValue
                    declValue = declValue.split("$")[1]
                    declValue = declValue.split(",")
                    for (var p = 0; p < declValue.length; p++) {
                        declaredvalue = declaredvalue + declValue[p]
                    }
                    deliveryorder.setValue({
                        fieldId: 'custbody27',
                        value: declaredvalue
                    });
                    var shipaddr = {};
                    var shiperemail = fileobj[SHIPMENT_DETAILS].Consignee.email
                    shiperemail = shiperemail.split("," && ";");
                    shipaddr.createflag = false
                    shipaddr.attention = ""
                    shipaddr.altphone = ''
                    shipaddr.consignaltphone = ''
                    shipaddr.consignphone = ''
                    shipaddr.addresse = fileobj[SHIPMENT_DETAILS].Consignee.NAME
                    shipaddr.address1 = fileobj[SHIPMENT_DETAILS].Consignee.Address1
                    shipaddr.address2d = fileobj[SHIPMENT_DETAILS].Consignee.Address2
                    shipaddr.city = fileobj[SHIPMENT_DETAILS].Consignee.City
                    shipaddr.state = fileobj[SHIPMENT_DETAILS].Consignee.State
                    shipaddr.zip = fileobj[SHIPMENT_DETAILS].Consignee.Zip
                    shipaddr.email = shiperemail[0]
                    shipaddr.phone = fileobj[SHIPMENT_DETAILS].Consignee.PhoneNumber
                    try {
                        shipaddr.altphone = fileobj[SHIPMENT_DETAILS].Consignee.SecondNumber
                    } catch (er) {
                        shipaddr.altphone = ''
                    }
                    // Search fields for DO
                    deliveryorder.setValue({
                        fieldId: 'custbody_jj_ship_addresse',
                        value: fileobj[SHIPMENT_DETAILS].Consignee.NAME
                    });
                    deliveryorder.setValue({
                        fieldId: 'custbody_jj_ship_address1',
                        value: fileobj[SHIPMENT_DETAILS].Consignee.Address1
                    });
                    deliveryorder.setValue({
                        fieldId: 'custbody_jj_ship_address2',
                        value: fileobj[SHIPMENT_DETAILS].Consignee.Address2
                    });
                    deliveryorder.setValue({
                        fieldId: 'custbody_jj_ship_city',
                        value: fileobj[SHIPMENT_DETAILS].Consignee.City
                    });
                    deliveryorder.setValue({
                        fieldId: 'custbody_jj_ship_state',
                        value: fileobj[SHIPMENT_DETAILS].Consignee.State
                    });
                    deliveryorder.setValue({
                        fieldId: 'custbody_jj_ship_zip',
                        value: fileobj[SHIPMENT_DETAILS].Consignee.Zip
                    });
                    deliveryorder.setValue({
                        fieldId: 'custbody_jj_ship_phone',
                        value: fileobj[SHIPMENT_DETAILS].Consignee.PhoneNumber
                    });
                    deliveryorder.setValue({
                        fieldId: 'custbody_jj_ship_alt_no',
                        value: shipaddr.altphone
                    });
                    var zipshipetails = main.update_pu_dl(fileobj[SHIPMENT_DETAILS].Consignee.Zip)
                    deliveryorder.setValue({
                        fieldId: 'custbody_delivery_branch',
                        value: zipshipetails[3]
                    });
                    deliveryorder.setValue({
                        fieldId: 'custbody_do_delivery_zone',
                        value: zipshipetails[1]
                    });
                    deliveryorder.setValue({
                        fieldId: 'custbody_delivery_route',
                        value: zipshipetails[2]
                    });
                    deliveryorder.setValue({
                        fieldId: 'custbody_mzc_pkup_schd_day_sh',
                        value: zipshipetails[4]
                    });
                    deliveryorder.setValue({
                        fieldId: 'custbody_mzc_special_ins_co',
                        value: zipshipetails[7]
                    });
                    try {
                        deliveryorder.setValue({
                            fieldId: "custbody_delivery_address_jj",
                            value: JSON.stringify(shipaddr)
                        });
                    } catch (setvalueerror) {
                        log.debug("setvalueerror", setvalueerror)
                    }
                    deliveryorder.setValue({
                        fieldId: 'shipaddresslist',
                        value: ""
                    });
                    var do_number = deliveryorder.getValue('tranid');

                    var validationemail = main.checkEmail(shipaddr, deliveryorder);

                    if (validationemail == false) {
                        //Create case if email is not valid
                        var supportcase = record.create({
                            type: record.Type.SUPPORT_CASE,
                            isDynamic: false
                        })
                        supportcase.setValue({
                            fieldId: 'company',
                            value: idcustomer
                        });
                        supportcase.setValue({
                            fieldId: 'status',
                            value: 1
                        });
                        supportcase.setValue({
                            fieldId: 'title',
                            value: 'Invalid Consignee E-mail ' + fileobj[SHIPMENT_DETAILS].Consignee.email
                        });
                        supportcase.setValue({
                            fieldId: 'incomingmessage',
                            value: "Invalid Ship E-mail address  " + fileobj[SHIPMENT_DETAILS].Consignee.email + "for Delivery Order " + do_number
                        });
                        supportcase.setValue({
                            fieldId: 'email',
                            value: 'dean@wglgroupusa.com'
                        });
                        supportcase.setValue({
                            fieldId: 'emailform',
                            value: true
                        })
                        supportcase.setValue({
                            fieldId: 'custevent_customer_name',
                            value: shipaddr.addresse
                        });
                        supportcase.setValue({
                            fieldId: 'phone',
                            value: shipaddr.phone
                        });
                        supportcase.setValue({
                            fieldId: 'custevent_order_number',
                            value: do_number
                        });
                        supportcase.setValue({
                            fieldId: 'issue',
                            value: 12
                        });
                        supportcase.setValue({
                            fieldId: 'category',
                            value: 3
                        });
                        supportcase.setValue({
                            fieldId: 'origin',
                            value: -5
                        });
                        supportcase.setValue({
                            fieldId: 'priority',
                            value: 1
                        });
                        supportcase.setValue({
                            fieldId: 'assigned',
                            value: 4336
                        });

                        deliveryorder = record.load({
                            id: id,
                            type: record.Type.SALES_ORDER
                        });
                        supportcase.setValue({
                            fieldId: 'custevent_record_created_by',
                            value: 'SYSTEM'
                        });
                        supportcase.setValue({
                            fieldId: 'custevent_jj_do_order_number',
                            value: id
                        });
                        caseId = supportcase.save({
                            enableSourcing: true,
                            ignoreMandatoryFields: true
                        });
                        deliveryorder.setValue({
                            fieldId: 'custbody_case_id_do',
                            value: caseId
                        });
                        log.debug("caseId", caseId)
                    }
                    var attachid = record.attach({
                        record: {
                            type: 'file',
                            id: salesID
                        },
                        to: {
                            type: 'salesorder',
                            id: id
                        }
                    });
                    //Save the JSON file which is success in Archive folder
                    fileget.folder = 901;
                    fileget.save();
                    var upload = main.uploadAnObject(salesID, 'Archive/', locPath)
                } catch (error) {
                    log.debug("error", error.message);
                    //Case creation when the delivery order is not created.
                    var error_case = main.errorcase(salesID, error.message, locPath, idcustomer, fileobj[SHIPMENT_DETAILS].Consignee.NAME, fileobj[SHIPMENT_DETAILS].Consignee.PhoneNumber)
                    log.debug("error_case", error_case)
                    // Save the JSON errored file to Error folder.
                    fileget.folder = 902;
                    fileget.save();
                    var upload = main.uploadAnObject(salesID, 'Failed-Inserts/', locPath)
                }

            },
            //Delete duplicate record.
            deleteOrder: function (ordernumber) {
                var transactionSearch = search.create({
                    type: "salesorder",
                    filters: [
                        ["type", "anyof", "SalesOrd"],
                        "AND",
                        ["numbertext", "is", ordernumber]
                    ],
                    columns: [
                        search.createColumn({
                            name: "internalid",
                            label: "Internal ID"
                        })
                    ]
                });
                var searchResultCount = transactionSearch.runPaged().count;
                var doId;
                if (searchResultCount > 0) {
                    var result = transactionSearch.run().getRange(0, 1);
                    doId = result[0].getValue({
                        name: "internalid",
                        label: "Internal ID"
                    });
                    log.debug("doId", doId)

                    var featureRecord = record.delete({
                        type: record.Type.SALES_ORDER,
                        id: doId,
                    });
                }
                return featureRecord;
            },
            //Case creation when the error in DO Creation
            errorcase: function (salesID, message, locPath, idcustomer, addresse, phone) {
                locPath = locPath.split("-");
                var orderno = locPath[0].split("_")[2]
                var supportcase = record.create({
                    type: record.Type.SUPPORT_CASE,
                    isDynamic: false
                })
                supportcase.setValue({
                    fieldId: 'company',
                    value: idcustomer
                });
                supportcase.setValue({
                    fieldId: 'status',
                    value: 1
                });
                supportcase.setValue({
                    fieldId: 'custevent_order_number',
                    value: orderno
                });
                supportcase.setValue({
                    fieldId: 'title',
                    value: 'Failed Order #' + orderno
                });
                supportcase.setValue({
                    fieldId: 'incomingmessage',
                    value: "The Order No " + orderno + " is failed due to " + message
                });
                supportcase.setValue({
                    fieldId: 'email',
                    value: 'dean@wglgroupusa.com'
                });
                supportcase.setValue({
                    fieldId: 'emailform',
                    value: true
                })
                supportcase.setValue({
                    fieldId: 'custevent_customer_name',
                    value: addresse
                });
                supportcase.setValue({
                    fieldId: 'phone',
                    value: phone
                });
                supportcase.setValue({
                    fieldId: 'quicknote',
                    value: message
                });
                supportcase.setValue({
                    fieldId: 'category',
                    value: 3
                });
                supportcase.setValue({
                    fieldId: 'origin',
                    value: -5
                });
                supportcase.setValue({
                    fieldId: 'priority',
                    value: 1
                });
                supportcase.setValue({
                    fieldId: 'assigned',
                    value: 11
                });
                supportcase.setValue({
                    fieldId: 'custevent_record_created_by',
                    value: 'SYSTEM'
                });
                caseId = supportcase.save({
                    enableSourcing: true,
                    ignoreMandatoryFields: true
                });
                var attachid = record.attach({
                    record: {
                        type: 'file',
                        id: salesID
                    },
                    to: {
                        type: 'supportcase',
                        id: caseId
                    }
                });

                return caseId;
            },
            checkEmail: function (shipaddr, deliveryorder) {
                //To check the shipemail is valid or not
                var validmail = true
                try {
                    var shipermail = shipaddr.email
                    shipermail = shipermail.split(",")
                    deliveryorder.setValue({
                        fieldId: 'custbody_jj_email',
                        value: shipermail[0]
                    });
                    if (shipaddr.altphone == undefined) {
                        deliveryorder.setValue({
                            fieldId: 'shipaddress',
                            value: shipaddr.addresse + "\n" + shipaddr.address1 + " " + shipaddr.address2d + "\n" + shipaddr.city + " " + shipaddr.state + " " + shipaddr.zip + " \n " + shipaddr.phone + "\n" + shipermail[0]
                        });
                    } else {
                        deliveryorder.setValue({
                            fieldId: 'shipaddress',
                            value: shipaddr.addresse + "\n" + shipaddr.address1 + " " + shipaddr.address2d + "\n" + shipaddr.city + " " + shipaddr.state + " " + shipaddr.zip + " \n " + shipaddr.phone + " \n " + shipaddr.altphone + "\n" + shipermail[0]
                        });
                    }
                    var SoID = deliveryorder.save({
                        enableSourcing: true,
                        ignoreMandatoryFields: true
                    });
                    log.debug("SoIDtry", SoID);
                } catch (emailerror) {
                    validmail = false
                    deliveryorder.setValue({
                        fieldId: 'custbody_jj_email',
                        value: ""
                    });
                    if (shipaddr.altphone == undefined) {
                        deliveryorder.setValue({
                            fieldId: 'shipaddress',
                            value: shipaddr.addresse + "\n" + shipaddr.address1 + " " + shipaddr.address2d + "\n" + shipaddr.city + " " + shipaddr.state + " " + shipaddr.zip + "\n" + shipaddr.phone
                        });
                    } else {
                        deliveryorder.setValue({
                            fieldId: 'shipaddress',
                            value: shipaddr.addresse + "\n" + shipaddr.address1 + " " + shipaddr.address2d + "\n" + shipaddr.city + " " + shipaddr.state + " " + shipaddr.zip + "\n" + shipaddr.phone + " \n " + shipaddr.altphone
                        });
                    }
                    var SoID = deliveryorder.save({
                        enableSourcing: true,
                        ignoreMandatoryFields: true
                    });
                    log.debug("SoIDcatch", SoID);
                }
                log.debug("validmail", validmail);

                return validmail
            },
            //Delete from the AWS Inbound Folder.
            deleteAnObject: function (pathKey) {
                var staticObj = main.getAWSAuthObj();
                /* CanonicalRequest */
                var payload = "";
                var CanonicalRequest = "DELETE" + "\n" + //HTTPRequestMethod
                    encodeURI("/" + pathKey) + "\n" + //CanonicalURI
                    "\n" + //CanonicalQueryString
                    "host:amt-orders.s3.amazonaws.com" + "\n" + //CanonicalHeaders
                    "x-amz-content-sha256:" + CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(payload)).toLowerCase() + "\n" + //CanonicalHeaders
                    "x-amz-date:" + staticObj.amzDate + "\n" + //CanonicalHeaders
                    "\n" + //CanonicalHeaders
                    "host;x-amz-content-sha256;x-amz-date" + "\n" + //SignedHeaders
                    CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(payload)).toLowerCase(); //HashedPayload;
                CanonicalRequest = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(CanonicalRequest));

                /* stringToSign */
                var stringToSign = "AWS4-HMAC-SHA256" + "\n" +
                    staticObj.amzDate + "\n" +
                    staticObj.authDate + "/" + staticObj.region + "/" + staticObj.serviceName + "/aws4_request" + "\n" +
                    CanonicalRequest;

                /*  signingKey  */
                var signingKey = main.getSignatureKey(staticObj.aws_secret_access_key, staticObj.dateOnly, staticObj.region, staticObj.serviceName);

                /*  signature   */
                var signature = CryptoJS.HmacSHA256(stringToSign, signingKey);
                signature = CryptoJS.enc.Hex.stringify(signature);

                /* authHeader */
                var authHeader = "AWS4-HMAC-SHA256" +
                    " Credential=" + staticObj.aws_access_key_id + "/" + staticObj.authDate + "/" + staticObj.region + "/" + staticObj.serviceName + "/aws4_request," +
                    " SignedHeaders=host;x-amz-content-sha256;x-amz-date," +
                    " Signature=" + signature;

                /* request */
                var response = https.delete({
                    url: "https://amt-orders.s3.amazonaws.com/" + pathKey,
                    headers: {
                        'Authorization': authHeader,
                        'host': 'amt-orders.s3.amazonaws.com',
                        'x-amz-content-sha256': CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(payload)).toLowerCase(),
                        'x-amz-date': staticObj.amzDate
                    }
                });
                log.debug("response", response)
                /* response.code */
                var responseCode = (response.code);

                return responseCode;
            },
            update_pu_dl: function (zip) {
                //To get the Zone,Branch and Route for PU/DL
                var arrRetData = [];
                var customrecord173SearchObj = search.create({
                    type: "customrecord173",
                    filters: [
                        ["name", "is", zip]
                    ],
                    columns: [
                        search.createColumn({
                            name: "custrecord_ratezone_zip_code",
                            label: "Zip Code"
                        }),
                        search.createColumn({
                            name: "custrecord_mzct_zone",
                            label: "Zone_"
                        }),
                        search.createColumn({
                            name: "custrecord_branch_id",
                            label: "Branch_ID"
                        }),
                        search.createColumn({
                            name: "custrecord_mzct_route",
                            label: "Route_"
                        }),
                        search.createColumn({
                            name: "custrecord_mzct_delivery_schedule_day",
                            label: "Delivery_Schedule_Day"
                        }),
                        search.createColumn({
                            name: "custrecord_mzct_day_trailer_is_loaded",
                            label: "Day_Trailer_is_Loaded"
                        }),
                        search.createColumn({
                            name: "custrecord_mzct_dmi_release_day",
                            label: "DMI_Release_Day"
                        }),
                        search.createColumn({
                            name: "custrecord_mzct_special_instructions",
                            label: "Special_Instructions"
                        }),
                    ]
                });
                var searchResultCount = customrecord173SearchObj.runPaged().count;
                customrecord173SearchObj.run().each(function (result) {
                    var branch = result.getText({
                        name: "custrecord_branch_id",
                        label: "Branch_ID"
                    })
                    arrRetData.push(branch)
                    var zone = result.getValue({
                        name: "custrecord_mzct_zone",
                        label: "Zone_"
                    })
                    arrRetData.push(zone)
                    var route = result.getValue({
                        name: "custrecord_mzct_route",
                        label: "Route_"
                    })
                    arrRetData.push(route)
                    var branchtext = result.getValue({
                        name: "custrecord_branch_id",
                        label: "Branch_ID"
                    })
                    arrRetData.push(branchtext)
                    var delivery_schedule = result.getValue({
                        name: "custrecord_mzct_delivery_schedule_day",
                        label: "Delivery_Schedule_Day"
                    })
                    arrRetData.push(delivery_schedule)
                    var day_trailer = result.getValue({
                        name: "custrecord_mzct_day_trailer_is_loaded",
                        label: "Day_Trailer_is_Loaded"
                    })
                    arrRetData.push(day_trailer)
                    var dmi_release_day = result.getValue({
                        name: "custrecord_mzct_dmi_release_day",
                        label: "DMI_Release_Day"
                    })
                    arrRetData.push(dmi_release_day)
                    var special_instructions = result.getValue({
                        name: "custrecord_mzct_special_instructions",
                        label: "Special_Instructions"
                    })
                    arrRetData.push(special_instructions)
                });
                return arrRetData;
            },
            validateaddr: function (custId, objLineAdrs, labelname, ServiceType) {
                //To validate address of seller is exist or not
                var route_delivery;
                var pickmethod;
                var pickUpadrsId = "";
                var rec = record.load({
                    type: record.Type.CUSTOMER,
                    id: custId,
                    isDynamic: false
                });
                var hold = rec.getValue('creditholdoverride');
                var adrsLines = rec.getLineCount('addressbook');
                for (var iw = 0; iw < adrsLines; iw++) {
                    var flag = true;
                    var subrec = rec.getSublistSubrecord({
                        sublistId: 'addressbook',
                        fieldId: 'addressbookaddress',
                        line: iw
                    });
                    var addrsInternalId = rec.getSublistValue({
                        sublistId: 'addressbook',
                        fieldId: 'internalid',
                        line: iw
                    });
                    // Retrieve the subrecord to be checked.
                    var addressee = subrec.getValue('addressee');
                    var addr1 = subrec.getValue('addr1');
                    var addr2 = subrec.getValue('addr2');
                    var city = subrec.getValue('city');
                    var state = subrec.getValue('state');
                    var zip = subrec.getValue('zip');
                    var phone = subrec.getValue('addrphone');
                    var emailid = subrec.getValue('custrecord152');

                    if (addressee == objLineAdrs.name && addr1 == objLineAdrs.Address1 && addr2 == objLineAdrs.Address2 && city == objLineAdrs.City && state == objLineAdrs.State && zip == objLineAdrs.Zip) {
                        if (phone == objLineAdrs.PhoneNumber) { } else {
                            log.debug("objLineAdrs.PhoneNumber", objLineAdrs.PhoneNumber)
                            subrec.setValue({
                                fieldId: 'addrphone',
                                value: objLineAdrs.PhoneNumber
                            });
                        }
                        try {
                            if (emailid == objLineAdrs.email) { } else {
                                log.debug("objLineAdrs.email", objLineAdrs.email)
                                try {
                                    subrec.setValue({
                                        fieldId: 'custrecord152',
                                        value: objLineAdrs.email
                                    });
                                } catch (emailerr) {
                                    log.debug("emailerr", emailerr)
                                }
                            }
                            pickUpadrsId = addrsInternalId;
                            log.debug("pickUpadrsId", pickUpadrsId)
                            pickmethod = subrec.getValue('custrecord_pickup_method');
                            var recId = rec.save({
                                enableSourcing: true,
                                ignoreMandatoryFields: true
                            });
                        } catch (erro) {
                            log.debug("erro", erro)
                        }
                    } else {
                        flag = false;
                    }
                }

                if (pickUpadrsId == "" || pickUpadrsId == null || pickUpadrsId == undefined) {
                    if (ServiceType == "Pickup" || ServiceType == "PickUp" || ServiceType == "PICKUP") {
                        return {
                            hold: hold,
                        }
                    } else {
                        var custrecId = main.createNewAdrs(custId, objLineAdrs, labelname);
                        log.debug("custrecId", custrecId)
                        var rec = record.load({
                            type: record.Type.CUSTOMER,
                            id: custId,
                            isDynamic: false
                        });
                        var adrsLines = rec.getLineCount('addressbook');
                        var subrec = rec.getSublistSubrecord({
                            sublistId: 'addressbook',
                            fieldId: 'addressbookaddress',
                            line: adrsLines - 1
                        });
                        var addrsInternalId = rec.getSublistValue({
                            sublistId: 'addressbook',
                            fieldId: 'internalid',
                            line: adrsLines - 1
                        });
                        pickmethod = subrec.getValue('custrecord_pickup_method');

                        return {
                            pickUpadrsId: addrsInternalId,
                            pickmethod: pickmethod,
                            hold: hold
                        }
                    }
                } else {
                    return {
                        pickUpadrsId: pickUpadrsId,
                        pickmethod: pickmethod,
                        hold: hold
                    }
                }

            },
            createNewAdrs: function (custId, objLineAdrs, labelname) {
                //create seller address
                log.debug("createnewaddre", "createnewaddre")
                var caseId;
                var rec = record.load({
                    type: record.Type.CUSTOMER,
                    id: custId,
                    isDynamic: true
                });

                var pickup_method = rec.getValue('custentity_preferred_pickup_method');
                // Create a line in the Address sublist.
                rec.selectNewLine({
                    sublistId: 'addressbook'
                });

                // Set an optional field on the sublist line.
                rec.setCurrentSublistValue({
                    sublistId: 'addressbook',
                    fieldId: 'label',
                    value: labelname
                });

                // Create an address subrecord for the line.
                var subrec = rec.getCurrentSublistSubrecord({
                    sublistId: 'addressbook',
                    fieldId: 'addressbookaddress'
                });

                // Set body fields on the subrecord.
                subrec.setValue({
                    fieldId: 'addressee',
                    value: objLineAdrs.name
                });
                subrec.setValue({
                    fieldId: 'defaultshipping',
                    value: true
                });

                subrec.setValue({
                    fieldId: 'city',
                    value: objLineAdrs.City
                });

                subrec.setValue({
                    fieldId: 'state',
                    value: objLineAdrs.State
                });

                subrec.setValue({
                    fieldId: 'zip',
                    value: objLineAdrs.Zip
                });

                subrec.setValue({
                    fieldId: 'addr1',
                    value: objLineAdrs.Address1
                });

                subrec.setValue({
                    fieldId: 'addr2',
                    value: objLineAdrs.Address2
                });

                subrec.setText({
                    fieldId: 'addrphone',
                    text: objLineAdrs.PhoneNumber
                });
                subrec.setValue({
                    fieldId: 'custrecord_pickup_method',
                    value: pickup_method
                });
                try {
                    subrec.setValue({
                        fieldId: 'custrecord152',
                        value: objLineAdrs.email
                    });
                } catch (createemilerr) {
                    log.debug("createemilerr", createemilerr)
                }
                // Save the sublist line.
                rec.commitLine({
                    sublistId: 'addressbook'
                });

                // Save the record.

                var recId = rec.save({
                    enableSourcing: true,
                    ignoreMandatoryFields: true
                });
                log.debug('New Adrress created successfully | Customer Id: ', recId);

                return recId;
            },

            //Upload to the AWS Archive / Error Folder.
            uploadAnObject: function (salesID, pathKey, locPath) {
                var staticObj = main.getAWSAuthObj();
                var fileget = file.load({
                    id: salesID
                });
                var fileobj = (fileget.getContents());
                /* CanonicalRequest */
                var CanonicalRequest = "PUT" + "\n" + //HTTPRequestMethod
                    encodeURI("/" + pathKey + fileget.name) + "\n" + //CanonicalURI
                    "\n" + //CanonicalQueryString
                    "content-length:" + fileget.size + "\n" + //CanonicalHeaders
                    "content-type:application/json" + "\n" + //CanonicalHeaders
                    "expect:100-continue" + "\n" + //CanonicalHeaders
                    "host:amt-orders.s3.amazonaws.com" + "\n" + //CanonicalHeaders
                    "x-amz-content-sha256:" + CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(fileobj)).toLowerCase() + "\n" + //CanonicalHeaders
                    "x-amz-date:" + staticObj.amzDate + "\n" + //CanonicalHeaders
                    "\n" + //CanonicalHeaders
                    "content-length;content-type;expect;host;x-amz-content-sha256;x-amz-date" + "\n" + //SignedHeaders
                    CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(fileobj)).toLowerCase(); //HashedPayload;
                CanonicalRequest = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(CanonicalRequest));

                /* stringToSign */
                var stringToSign = "AWS4-HMAC-SHA256" + "\n" +
                    staticObj.amzDate + "\n" +
                    staticObj.authDate + "/" + staticObj.region + "/" + staticObj.serviceName + "/aws4_request" + "\n" +
                    CanonicalRequest;

                /*  signingKey  */
                var signingKey = main.getSignatureKey(staticObj.aws_secret_access_key, staticObj.dateOnly, staticObj.region, staticObj.serviceName);

                /*  signature   */
                var signature = CryptoJS.HmacSHA256(stringToSign, signingKey);
                signature = CryptoJS.enc.Hex.stringify(signature);

                /* authHeader */
                var authHeader = "AWS4-HMAC-SHA256" +
                    " Credential=" + staticObj.aws_access_key_id + "/" + staticObj.authDate + "/" + staticObj.region + "/" + staticObj.serviceName + "/aws4_request," +
                    " SignedHeaders=content-length;content-type;expect;host;x-amz-content-sha256;x-amz-date," +
                    " Signature=" + signature;

                /* request */
                var response = https.put({
                    url: "https://amt-orders.s3.amazonaws.com/" + pathKey + fileget.name,
                    headers: {
                        'Authorization': authHeader,
                        'Content-Length': fileget.size,
                        'Content-Type': 'application/json',
                        'Expect': '100-continue',
                        'host': 'amt-orders.s3.amazonaws.com',
                        'x-amz-content-sha256': CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(fileobj)).toLowerCase(),
                        'x-amz-date': staticObj.amzDate
                    },
                    body: fileobj
                });

                /* response.code */
                var responseCode = (response.code);
                log.debug("response", "Inbound/" + fileget.name)
                main.deleteAnObject("Inbound/" + fileget.name)
                return responseCode;


            },
            getdate: function (date) {
                //get the date in the format
                var date = new Date(date);
                var newdate = new Date(date);

                newdate.setDate(newdate.getDate());

                var dd = newdate.getDate();
                var mm = newdate.getMonth() + 1;
                var y = newdate.getFullYear() + 100;
                var someFormattedDate = mm + '/' + dd + '/' + y;

                return someFormattedDate;
            },
            fetchObjects: function () {
                var staticObj = main.getAWSAuthObj();
                var payload = "";
                var CanonicalRequest = "GET" + "\n" + //HTTPRequestMethod
                    encodeURI("/") + "\n" + //CanonicalURI
                    encodeURI("list-type") + "=" + encodeURI("2") + "&" + //CanonicalQueryString
                    encodeURI("max-keys") + "=" + encodeURI("1000") + "&" + //CanonicalQueryString
                    encodeURI("prefix") + "=" + encodeURI("Inbound") + //CanonicalQueryString
                    "\n" + //CanonicalQueryString
                    "host:amt-orders.s3.amazonaws.com" + "\n" + //CanonicalHeaders
                    "x-amz-content-sha256:" + CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(payload)).toLowerCase() + "\n" + //CanonicalHeaders
                    "x-amz-date:" + staticObj.amzDate + "\n" + //CanonicalHeaders
                    "\n" + //CanonicalHeaders
                    "host;x-amz-content-sha256;x-amz-date" + "\n" + //SignedHeaders
                    CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(payload)).toLowerCase(); //HashedPayload;
                CanonicalRequest = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(CanonicalRequest));
                var stringToSign = "AWS4-HMAC-SHA256" + "\n" + //Algorithm
                    staticObj.amzDate + "\n" + //RequestDate
                    staticObj.authDate + "/" + staticObj.region + "/" + staticObj.serviceName + "/aws4_request" + "\n" + //CredentialScope
                    CanonicalRequest; //HashedCanonicalRequest
                /*  signingKey  */
                var signingKey = main.getSignatureKey(staticObj.aws_secret_access_key, staticObj.dateOnly, staticObj.region, staticObj.serviceName);
                /*  signature   */
                var signature = CryptoJS.HmacSHA256(stringToSign, signingKey);
                signature = CryptoJS.enc.Hex.stringify(signature);

                /* authHeader */
                var authHeader = "AWS4-HMAC-SHA256" +
                    " Credential=" + staticObj.aws_access_key_id + "/" + staticObj.authDate + "/" + staticObj.region + "/" + staticObj.serviceName + "/aws4_request," +
                    " SignedHeaders=host;x-amz-content-sha256;x-amz-date," +
                    " Signature=" + signature;
                /* request */
                var response = https.get({
                    url: "https://amt-orders.s3.amazonaws.com?list-type=2&max-keys=1000&prefix=Inbound",
                    headers: {
                        'Authorization': authHeader,
                        'host': 'amt-orders.s3.amazonaws.com',
                        'x-amz-content-sha256': CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(payload)).toLowerCase(),
                        'x-amz-date': staticObj.amzDate
                    }
                });
                /* response.body */
                var XMLdata = (response.body).toString();

                //to split data between <Key> and </Key> and store it in Array
                var XMLArray = new Array();
                var pos = 0;
                XMLArray = XMLdata.split('<Key>');
                while (pos < XMLArray.length) {
                    if (XMLArray[pos].split('</Key>')[0]) {
                        XMLArray[pos] = XMLArray[pos].split('</Key>')[0];
                    }
                    pos++;
                }

                var prefixName = "Inbound";
                //To create an Object with Key as 'PO**' number and value as 'PO**' path
                var XMLcontent, XMLkey;
                var XMLObject = new Object();
                pos = 2;
                while (pos < XMLArray.length) {
                    XMLkey = (XMLArray[pos].split(prefixName + '/')[1].split('.json')[0]) || (XMLArray[pos].split(prefixName + '/')[1].split('.JSON')[0]);
                    XMLcontent = XMLArray[pos];
                    XMLObject[XMLkey] = XMLcontent;
                    pos++;
                }
                log.debug("XMLOb", XMLObject);
                return XMLObject;

            },
            getAWSAuthObj: function () {
                var currentDate = new Date();
                var dateStampISOConverted = currentDate.toISOString();
                while (dateStampISOConverted.indexOf('-') > (-1)) {
                    dateStampISOConverted = dateStampISOConverted.replace("-", "");
                }
                while (dateStampISOConverted.indexOf(':') > (-1)) {
                    dateStampISOConverted = dateStampISOConverted.replace(":", "");
                }
                dateStampISOConverted = dateStampISOConverted.split(".")[0] + "Z";
                var dateOnly = (currentDate.toISOString()).split("T")[0];
                while (dateOnly.search('-') > (-1)) {
                    dateOnly = dateOnly.replace("-", "");
                }
                var staticAWSDetilsObj = {
                    "aws_access_key_id": "AKIAIXZ3UWDMZ3K45VPA",
                    "aws_secret_access_key": "lTE1gXlzOZmJwXgpQlPx+r0ezEycZ2Qmz6L8Emob",
                    "bucket": "amt-orders",
                    "region": "us-east-1",
                    "serviceName": "s3",
                    "currentDate": currentDate,
                    "parseDate": Date.parse(currentDate),
                    "dateStampISO": currentDate.toISOString(),
                    "dateStampUTC": currentDate.toUTCString(),
                    "dateString": currentDate.toString(),
                    "dateStampISOConverted": dateStampISOConverted,
                    "dateOnly": dateOnly,
                    "amzDate": dateStampISOConverted,
                    "authDate": dateOnly
                };
                return staticAWSDetilsObj;
            },
            getSignatureKey: function (key, dateStamp, regionName, serviceName) {
                var kDate = CryptoJS.HmacSHA256(dateStamp, "AWS4" + key);
                var kRegion = CryptoJS.HmacSHA256(regionName, kDate);
                var kService = CryptoJS.HmacSHA256(serviceName, kRegion);
                var kSigning = CryptoJS.HmacSHA256("aws4_request", kService);
                return kSigning;
            },
            /* to return complete data of specific object in a Bucket */
            fetchAnObject: function (pathKey) {
                try {
                    var staticObj = main.getAWSAuthObj();
                    /* CanonicalRequest */
                    var payload = "";
                    var CanonicalRequest = "GET" + "\n" + //HTTPRequestMethod
                        encodeURI("/" + pathKey) + "\n" + //CanonicalURI
                        "\n" + //CanonicalQueryString
                        "host:amt-orders.s3.amazonaws.com" + "\n" + //CanonicalHeaders
                        "x-amz-content-sha256:" + CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(payload)).toLowerCase() + "\n" + //CanonicalHeaders
                        "x-amz-date:" + staticObj.amzDate + "\n" + //CanonicalHeaders
                        "\n" + //CanonicalHeaders
                        "host;x-amz-content-sha256;x-amz-date" + "\n" + //SignedHeaders
                        CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(payload)).toLowerCase(); //HashedPayload;

                    CanonicalRequest = CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(CanonicalRequest));

                    var stringToSign = "AWS4-HMAC-SHA256" + "\n" + //Algorithm
                        staticObj.amzDate + "\n" + //RequestDate
                        staticObj.authDate + "/" + staticObj.region + "/" + staticObj.serviceName + "/aws4_request" + "\n" + //CredentialScope
                        CanonicalRequest; //HashedCanonicalRequest
                    /*  signingKey  */
                    var signingKey = main.getSignatureKey(staticObj.aws_secret_access_key, staticObj.dateOnly, staticObj.region, staticObj.serviceName);
                    /*  signature   */
                    var signature = CryptoJS.HmacSHA256(stringToSign, signingKey);
                    signature = CryptoJS.enc.Hex.stringify(signature);

                    /* authHeader */
                    var authHeader = "AWS4-HMAC-SHA256" +
                        " Credential=" + staticObj.aws_access_key_id + "/" + staticObj.authDate + "/" + staticObj.region + "/" + staticObj.serviceName + "/aws4_request," +
                        " SignedHeaders=host;x-amz-content-sha256;x-amz-date," +
                        " Signature=" + signature;
                    var response = https.get({
                        url: "https://amt-orders.s3.amazonaws.com/" + pathKey,
                        headers: {
                            'Authorization': authHeader,
                            'host': 'amt-orders.s3.amazonaws.com',
                            'x-amz-content-sha256': CryptoJS.enc.Hex.stringify(CryptoJS.SHA256(payload)).toLowerCase(),
                            'x-amz-date': staticObj.amzDate
                        }
                    });

                    /* response.body */
                    var JSONdata = (response.body);

                    return JSONdata;

                } catch (err) {
                    log.debug(err, 'function fetchAnObject(' + pathKey + ')');
                    return false;
                }
            }
        }
        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;

    });


/*******************************************************************************/
/*
 * Additional Libraries 
 */
/*******************************************************************************/


/*******************************************************************************/
/*
 * Encryption Library
 * HMAC-SHA256.js
 */

var CryptoJS = CryptoJS || function (h, s) {
    var f = {},
        g = f.lib = {},
        q = function () { },
        m = g.Base = {
            extend: function (a) {
                q.prototype = this;
                var c = new q;
                a && c.mixIn(a);
                c.hasOwnProperty("init") || (c.init = function () {
                    c.$super.init.apply(this, arguments)
                });
                c.init.prototype = c;
                c.$super = this;
                return c
            },
            create: function () {
                var a = this.extend();
                a.init.apply(a, arguments);
                return a
            },
            init: function () { },
            mixIn: function (a) {
                for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]);
                a.hasOwnProperty("toString") && (this.toString = a.toString)
            },
            clone: function () {
                return this.init.prototype.extend(this)
            }
        },
        r = g.WordArray = m.extend({
            init: function (a, c) {
                a = this.words = a || [];
                this.sigBytes = c != s ? c : 4 * a.length
            },
            toString: function (a) {
                return (a || k).stringify(this)
            },
            concat: function (a) {
                var c = this.words,
                    d = a.words,
                    b = this.sigBytes;
                a = a.sigBytes;
                this.clamp();
                if (b % 4)
                    for (var e = 0; e < a; e++) c[b + e >>> 2] |= (d[e >>> 2] >>> 24 - 8 * (e % 4) & 255) << 24 - 8 * ((b + e) % 4);
                else if (65535 < d.length)
                    for (e = 0; e < a; e += 4) c[b + e >>> 2] = d[e >>> 2];
                else c.push.apply(c, d);
                this.sigBytes += a;
                return this
            },
            clamp: function () {
                var a = this.words,
                    c = this.sigBytes;
                a[c >>> 2] &= 4294967295 <<
                    32 - 8 * (c % 4);
                a.length = h.ceil(c / 4)
            },
            clone: function () {
                var a = m.clone.call(this);
                a.words = this.words.slice(0);
                return a
            },
            random: function (a) {
                for (var c = [], d = 0; d < a; d += 4) c.push(4294967296 * h.random() | 0);
                return new r.init(c, a)
            }
        }),
        l = f.enc = {},
        k = l.Hex = {
            stringify: function (a) {
                var c = a.words;
                a = a.sigBytes;
                for (var d = [], b = 0; b < a; b++) {
                    var e = c[b >>> 2] >>> 24 - 8 * (b % 4) & 255;
                    d.push((e >>> 4).toString(16));
                    d.push((e & 15).toString(16))
                }
                return d.join("")
            },
            parse: function (a) {
                for (var c = a.length, d = [], b = 0; b < c; b += 2) d[b >>> 3] |= parseInt(a.substr(b,
                    2), 16) << 24 - 4 * (b % 8);
                return new r.init(d, c / 2)
            }
        },
        n = l.Latin1 = {
            stringify: function (a) {
                var c = a.words;
                a = a.sigBytes;
                for (var d = [], b = 0; b < a; b++) d.push(String.fromCharCode(c[b >>> 2] >>> 24 - 8 * (b % 4) & 255));
                return d.join("")
            },
            parse: function (a) {
                for (var c = a.length, d = [], b = 0; b < c; b++) d[b >>> 2] |= (a.charCodeAt(b) & 255) << 24 - 8 * (b % 4);
                return new r.init(d, c)
            }
        },
        j = l.Utf8 = {
            stringify: function (a) {
                try {
                    return decodeURIComponent(escape(n.stringify(a)))
                } catch (c) {
                    throw Error("Malformed UTF-8 data");
                }
            },
            parse: function (a) {
                return n.parse(unescape(encodeURIComponent(a)))
            }
        },
        u = g.BufferedBlockAlgorithm = m.extend({
            reset: function () {
                this._data = new r.init;
                this._nDataBytes = 0
            },
            _append: function (a) {
                "string" == typeof a && (a = j.parse(a));
                this._data.concat(a);
                this._nDataBytes += a.sigBytes
            },
            _process: function (a) {
                var c = this._data,
                    d = c.words,
                    b = c.sigBytes,
                    e = this.blockSize,
                    f = b / (4 * e),
                    f = a ? h.ceil(f) : h.max((f | 0) - this._minBufferSize, 0);
                a = f * e;
                b = h.min(4 * a, b);
                if (a) {
                    for (var g = 0; g < a; g += e) this._doProcessBlock(d, g);
                    g = d.splice(0, a);
                    c.sigBytes -= b
                }
                return new r.init(g, b)
            },
            clone: function () {
                var a = m.clone.call(this);
                a._data = this._data.clone();
                return a
            },
            _minBufferSize: 0
        });
    g.Hasher = u.extend({
        cfg: m.extend(),
        init: function (a) {
            this.cfg = this.cfg.extend(a);
            this.reset()
        },
        reset: function () {
            u.reset.call(this);
            this._doReset()
        },
        update: function (a) {
            this._append(a);
            this._process();
            return this
        },
        finalize: function (a) {
            a && this._append(a);
            return this._doFinalize()
        },
        blockSize: 16,
        _createHelper: function (a) {
            return function (c, d) {
                return (new a.init(d)).finalize(c)
            }
        },
        _createHmacHelper: function (a) {
            return function (c, d) {
                return (new t.HMAC.init(a,
                    d)).finalize(c)
            }
        }
    });
    var t = f.algo = {};
    return f
}(Math);
(function (h) {
    for (var s = CryptoJS, f = s.lib, g = f.WordArray, q = f.Hasher, f = s.algo, m = [], r = [], l = function (a) {
        return 4294967296 * (a - (a | 0)) | 0
    }, k = 2, n = 0; 64 > n;) {
        var j;
        a: {
            j = k;
            for (var u = h.sqrt(j), t = 2; t <= u; t++)
                if (!(j % t)) {
                    j = !1;
                    break a
                }
            j = !0
        }
        j && (8 > n && (m[n] = l(h.pow(k, 0.5))), r[n] = l(h.pow(k, 1 / 3)), n++);
        k++
    }
    var a = [],
        f = f.SHA256 = q.extend({
            _doReset: function () {
                this._hash = new g.init(m.slice(0))
            },
            _doProcessBlock: function (c, d) {
                for (var b = this._hash.words, e = b[0], f = b[1], g = b[2], j = b[3], h = b[4], m = b[5], n = b[6], q = b[7], p = 0; 64 > p; p++) {
                    if (16 > p) a[p] =
                        c[d + p] | 0;
                    else {
                        var k = a[p - 15],
                            l = a[p - 2];
                        a[p] = ((k << 25 | k >>> 7) ^ (k << 14 | k >>> 18) ^ k >>> 3) + a[p - 7] + ((l << 15 | l >>> 17) ^ (l << 13 | l >>> 19) ^ l >>> 10) + a[p - 16]
                    }
                    k = q + ((h << 26 | h >>> 6) ^ (h << 21 | h >>> 11) ^ (h << 7 | h >>> 25)) + (h & m ^ ~h & n) + r[p] + a[p];
                    l = ((e << 30 | e >>> 2) ^ (e << 19 | e >>> 13) ^ (e << 10 | e >>> 22)) + (e & f ^ e & g ^ f & g);
                    q = n;
                    n = m;
                    m = h;
                    h = j + k | 0;
                    j = g;
                    g = f;
                    f = e;
                    e = k + l | 0
                }
                b[0] = b[0] + e | 0;
                b[1] = b[1] + f | 0;
                b[2] = b[2] + g | 0;
                b[3] = b[3] + j | 0;
                b[4] = b[4] + h | 0;
                b[5] = b[5] + m | 0;
                b[6] = b[6] + n | 0;
                b[7] = b[7] + q | 0
            },
            _doFinalize: function () {
                var a = this._data,
                    d = a.words,
                    b = 8 * this._nDataBytes,
                    e = 8 * a.sigBytes;
                d[e >>> 5] |= 128 << 24 - e % 32;
                d[(e + 64 >>> 9 << 4) + 14] = h.floor(b / 4294967296);
                d[(e + 64 >>> 9 << 4) + 15] = b;
                a.sigBytes = 4 * d.length;
                this._process();
                return this._hash
            },
            clone: function () {
                var a = q.clone.call(this);
                a._hash = this._hash.clone();
                return a
            }
        });
    s.SHA256 = q._createHelper(f);
    s.HmacSHA256 = q._createHmacHelper(f)
})(Math);
(function () {
    var h = CryptoJS,
        s = h.enc.Utf8;
    h.algo.HMAC = h.lib.Base.extend({
        init: function (f, g) {
            f = this._hasher = new f.init;
            "string" == typeof g && (g = s.parse(g));
            var h = f.blockSize,
                m = 4 * h;
            g.sigBytes > m && (g = f.finalize(g));
            g.clamp();
            for (var r = this._oKey = g.clone(), l = this._iKey = g.clone(), k = r.words, n = l.words, j = 0; j < h; j++) k[j] ^= 1549556828, n[j] ^= 909522486;
            r.sigBytes = l.sigBytes = m;
            this.reset()
        },
        reset: function () {
            var f = this._hasher;
            f.reset();
            f.update(this._iKey)
        },
        update: function (f) {
            this._hasher.update(f);
            return this
        },
        finalize: function (f) {
            var g =
                this._hasher;
            f = g.finalize(f);
            g.reset();
            return g.finalize(this._oKey.clone().concat(f))
        }
    })
})();

/*******************************************************************************/

/*
CryptoJS v3.1.2
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
(function () {
    var h = CryptoJS,
        j = h.lib.WordArray;
    h.enc.Base64 = {
        stringify: function (b) {
            var e = b.words,
                f = b.sigBytes,
                c = this._map;
            b.clamp();
            b = [];
            for (var a = 0; a < f; a += 3)
                for (var d = (e[a >>> 2] >>> 24 - 8 * (a % 4) & 255) << 16 | (e[a + 1 >>> 2] >>> 24 - 8 * ((a + 1) % 4) & 255) << 8 | e[a + 2 >>> 2] >>> 24 - 8 * ((a + 2) % 4) & 255, g = 0; 4 > g && a + 0.75 * g < f; g++) b.push(c.charAt(d >>> 6 * (3 - g) & 63));
            if (e = c.charAt(64))
                for (; b.length % 4;) b.push(e);
            return b.join("")
        },
        parse: function (b) {
            var e = b.length,
                f = this._map,
                c = f.charAt(64);
            c && (c = b.indexOf(c), -1 != c && (e = c));
            for (var c = [], a = 0, d = 0; d <
                e; d++)
                if (d % 4) {
                    var g = f.indexOf(b.charAt(d - 1)) << 2 * (d % 4),
                        h = f.indexOf(b.charAt(d)) >>> 6 - 2 * (d % 4);
                    c[a >>> 2] |= (g | h) << 24 - 8 * (a % 4);
                    a++
                }
            return j.create(c, a)
        },
        _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
    }
})();

Leave a comment

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