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+/="
}
})();