diff --git a/examples/AutomaticTerritories/data/addresses_200.json b/examples/AutomaticTerritories/data/addresses_200.json new file mode 100644 index 0000000..599fceb --- /dev/null +++ b/examples/AutomaticTerritories/data/addresses_200.json @@ -0,0 +1,801 @@ +[{ + "id": "19585", + "lat": 25.654134, + "lng": -80.356132 +}, { + "id": "578057", + "lat": 25.8450891, + "lng": -80.3679899 +}, { + "id": "168098", + "lat": 25.7524161, + "lng": -80.2372082 +}, { + "id": "537559", + "lat": 25.4428908, + "lng": -80.4842769 +}, { + "id": "86449", + "lat": 25.7287949, + "lng": -80.3931322 +}, { + "id": "46454", + "lat": 25.7318312, + "lng": -80.3467989 +}, { + "id": "328194", + "lat": 25.6864343, + "lng": -80.4442117 +}, { + "id": "222965", + "lat": 25.4940215, + "lng": -80.5052347 +}, { + "id": "558346", + "lat": 25.5489175, + "lng": -80.3755818 +}, { + "id": "331662", + "lat": 25.7493533, + "lng": -80.208926 +}, { + "id": "167849", + "lat": 25.7052482, + "lng": -80.4207961 +}, { + "id": "291847", + "lat": 25.7693534, + "lng": -80.2780867 +}, { + "id": "388996", + "lat": 25.7168523, + "lng": -80.4135651 +}, { + "id": "171867", + "lat": 25.676643, + "lng": -80.4350283 +}, { + "id": "245216", + "lat": 25.4884575, + "lng": -80.4157341 +}, { + "id": "312309", + "lat": 25.7415591, + "lng": -80.4443732 +}, { + "id": "261105", + "lat": 25.7671713, + "lng": -80.2250248 +}, { + "id": "152030", + "lat": 25.6179037, + "lng": -80.4242664 +}, { + "id": "517609", + "lat": 25.8830183, + "lng": -80.177387 +}, { + "id": "342855", + "lat": 25.4433482, + "lng": -80.4471593 +}, { + "id": "446302", + "lat": 25.8272577, + "lng": -80.1827731 +}, { + "id": "418823", + "lat": 25.8449458, + "lng": -80.305499 +}, { + "id": "394643", + "lat": 25.499581, + "lng": -80.5179051 +}, { + "id": "430390", + "lat": 25.7766003, + "lng": -80.3929545 +}, { + "id": "257975", + "lat": 25.8606331, + "lng": -80.3139409 +}, { + "id": "345964", + "lat": 25.8139258, + "lng": -80.1965873 +}, { + "id": "416175", + "lat": 25.7494983, + "lng": -80.2314027 +}, { + "id": "518041", + "lat": 25.6950703, + "lng": -80.169075 +}, { + "id": "261799", + "lat": 25.7915879, + "lng": -80.1914341 +}, { + "id": "424228", + "lat": 25.7375374, + "lng": -80.2599545 +}, { + "id": "586724", + "lat": 25.7610643, + "lng": -80.2138014 +}, { + "id": "53563", + "lat": 25.9118683, + "lng": -80.1837494 +}, { + "id": "437394", + "lat": 25.8537627, + "lng": -80.2561543 +}, { + "id": "344867", + "lat": 25.674241, + "lng": -80.4154245 +}, { + "id": "299591", + "lat": 25.7544902, + "lng": -80.3094908 +}, { + "id": "285409", + "lat": 25.9263689, + "lng": -80.3273629 +}, { + "id": "138002", + "lat": 25.973055, + "lng": -80.1497351 +}, { + "id": "410286", + "lat": 25.6605428, + "lng": -80.3786342 +}, { + "id": "346626", + "lat": 25.7704612, + "lng": -80.27342 +}, { + "id": "98399", + "lat": 25.7460088, + "lng": -80.3956667 +}, { + "id": "563431", + "lat": 25.7425853, + "lng": -80.4199241 +}, { + "id": "36817", + "lat": 25.7601012, + "lng": -80.3240334 +}, { + "id": "406486", + "lat": 25.4846791, + "lng": -80.4841271 +}, { + "id": "416321", + "lat": 25.7228847, + "lng": -80.371511 +}, { + "id": "35464", + "lat": 25.7970052, + "lng": -80.2144827 +}, { + "id": "127298", + "lat": 25.8558484, + "lng": -80.1840334 +}, { + "id": "581455", + "lat": 25.9172493, + "lng": -80.3546707 +}, { + "id": "518944", + "lat": 25.948512, + "lng": -80.2849524 +}, { + "id": "496682", + "lat": 25.8333877, + "lng": -80.2159668 +}, { + "id": "377076", + "lat": 25.9635958, + "lng": -80.2266519 +}, { + "id": "556518", + "lat": 25.9009326, + "lng": -80.2536408 +}, { + "id": "84078", + "lat": 25.842194, + "lng": -80.1316617 +}, { + "id": "105004", + "lat": 25.480126, + "lng": -80.4868582 +}, { + "id": "290277", + "lat": 25.7001824, + "lng": -80.2889016 +}, { + "id": "73150", + "lat": 25.7126363, + "lng": -80.4406227 +}, { + "id": "339268", + "lat": 25.5771145, + "lng": -80.3414127 +}, { + "id": "293118", + "lat": 25.8621269, + "lng": -80.2377344 +}, { + "id": "551535", + "lat": 25.4605711, + "lng": -80.4403738 +}, { + "id": "552299", + "lat": 25.7713417, + "lng": -80.2870674 +}, { + "id": "438355", + "lat": 25.6990348, + "lng": -80.3519674 +}, { + "id": "356595", + "lat": 25.7490086, + "lng": -80.2228416 +}, { + "id": "269901", + "lat": 25.8599694, + "lng": -80.1729015 +}, { + "id": "505848", + "lat": 25.6315583, + "lng": -80.3727182 +}, { + "id": "176637", + "lat": 25.7859166, + "lng": -80.3405102 +}, { + "id": "34976", + "lat": 25.9374804, + "lng": -80.1903 +}, { + "id": "566596", + "lat": 25.7083778, + "lng": -80.2915296 +}, { + "id": "73715", + "lat": 25.8986762, + "lng": -80.1490272 +}, { + "id": "318912", + "lat": 25.8774397, + "lng": -80.3400124 +}, { + "id": "391440", + "lat": 25.7444868, + "lng": -80.2609001 +}, { + "id": "217405", + "lat": 25.7444749, + "lng": -80.351404 +}, { + "id": "181002", + "lat": 25.9561103, + "lng": -80.2172571 +}, { + "id": "282850", + "lat": 25.6841693, + "lng": -80.4375292 +}, { + "id": "458595", + "lat": 25.8370185, + "lng": -80.2655444 +}, { + "id": "34568", + "lat": 25.5788713, + "lng": -80.3912613 +}, { + "id": "86446", + "lat": 25.9332307, + "lng": -80.3308948 +}, { + "id": "26160", + "lat": 25.4830804, + "lng": -80.4944565 +}, { + "id": "83092", + "lat": 25.762786, + "lng": -80.3931626 +}, { + "id": "405161", + "lat": 25.9215553, + "lng": -80.3279527 +}, { + "id": "4566", + "lat": 25.6966414, + "lng": -80.3573166 +}, { + "id": "322320", + "lat": 25.4870072, + "lng": -80.4725932 +}, { + "id": "495269", + "lat": 25.8172306, + "lng": -80.3040736 +}, { + "id": "279406", + "lat": 25.7973594, + "lng": -80.2391536 +}, { + "id": "571907", + "lat": 25.8422409, + "lng": -80.3549632 +}, { + "id": "149866", + "lat": 25.7166495, + "lng": -80.4289884 +}, { + "id": "278691", + "lat": 25.6799473, + "lng": -80.3989558 +}, { + "id": "108857", + "lat": 25.9086822, + "lng": -80.3427988 +}, { + "id": "438062", + "lat": 25.7302357, + "lng": -80.2446496 +}, { + "id": "243726", + "lat": 25.7581322, + "lng": -80.4462496 +}, { + "id": "288806", + "lat": 25.7063134, + "lng": -80.3250411 +}, { + "id": "201965", + "lat": 25.8185595, + "lng": -80.3122158 +}, { + "id": "242369", + "lat": 25.9516726, + "lng": -80.1227593 +}, { + "id": "505024", + "lat": 25.8922329, + "lng": -80.1655965 +}, { + "id": "567355", + "lat": 25.8260443, + "lng": -80.195048 +}, { + "id": "245959", + "lat": 25.9351877, + "lng": -80.3229328 +}, { + "id": "28562", + "lat": 25.4433571, + "lng": -80.4558871 +}, { + "id": "395954", + "lat": 25.8454113, + "lng": -80.2353374 +}, { + "id": "181814", + "lat": 25.7342784, + "lng": -80.2462966 +}, { + "id": "343972", + "lat": 25.5727233, + "lng": -80.3513325 +}, { + "id": "517326", + "lat": 25.9378535, + "lng": -80.2197183 +}, { + "id": "500705", + "lat": 25.7216345, + "lng": -80.3490815 +}, { + "id": "546479", + "lat": 25.7435509, + "lng": -80.3629235 +}, { + "id": "569975", + "lat": 25.8945409, + "lng": -80.3369873 +}, { + "id": "566905", + "lat": 25.8692711, + "lng": -80.2199412 +}, { + "id": "256694", + "lat": 25.9350343, + "lng": -80.1351717 +}, { + "id": "201233", + "lat": 25.6477852, + "lng": -80.3781565 +}, { + "id": "413768", + "lat": 25.4835581, + "lng": -80.5072531 +}, { + "id": "169646", + "lat": 25.692641, + "lng": -80.3807061 +}, { + "id": "256556", + "lat": 25.5036354, + "lng": -80.4059657 +}, { + "id": "109528", + "lat": 25.8431612, + "lng": -80.1811224 +}, { + "id": "479063", + "lat": 25.9032681, + "lng": -80.2453686 +}, { + "id": "478215", + "lat": 25.5727287, + "lng": -80.5141425 +}, { + "id": "351654", + "lat": 25.9366637, + "lng": -80.1783762 +}, { + "id": "370673", + "lat": 25.6329825, + "lng": -80.4460536 +}, { + "id": "4774", + "lat": 25.9535247, + "lng": -80.248528 +}, { + "id": "511721", + "lat": 25.7604888, + "lng": -80.1455638 +}, { + "id": "66637", + "lat": 25.7656284, + "lng": -80.2791814 +}, { + "id": "567433", + "lat": 25.8408948, + "lng": -80.193433 +}, { + "id": "126998", + "lat": 25.8464155, + "lng": -80.265334 +}, { + "id": "436234", + "lat": 25.7407178, + "lng": -80.4346965 +}, { + "id": "369441", + "lat": 25.862308, + "lng": -80.2920032 +}, { + "id": "224269", + "lat": 25.7092419, + "lng": -80.2828026 +}, { + "id": "198422", + "lat": 25.8898664, + "lng": -80.1302894 +}, { + "id": "410983", + "lat": 25.9367621, + "lng": -80.2722366 +}, { + "id": "88066", + "lat": 25.6606744, + "lng": -80.3919296 +}, { + "id": "48025", + "lat": 25.7333153, + "lng": -80.398749 +}, { + "id": "422977", + "lat": 25.75687, + "lng": -80.2418314 +}, { + "id": "346837", + "lat": 25.5640433, + "lng": -80.49687 +}, { + "id": "561274", + "lat": 25.765752, + "lng": -80.1931722 +}, { + "id": "125281", + "lat": 25.9307252, + "lng": -80.1655589 +}, { + "id": "585863", + "lat": 25.919663, + "lng": -80.3569944 +}, { + "id": "320559", + "lat": 25.9305855, + "lng": -80.3252137 +}, { + "id": "510948", + "lat": 25.4895242, + "lng": -80.4400828 +}, { + "id": "99499", + "lat": 25.9304892, + "lng": -80.2211946 +}, { + "id": "556262", + "lat": 25.5568288, + "lng": -80.3675989 +}, { + "id": "444956", + "lat": 25.6049124, + "lng": -80.3724153 +}, { + "id": "165732", + "lat": 25.969529, + "lng": -80.161399 +}, { + "id": "583391", + "lat": 25.4944582, + "lng": -80.4241079 +}, { + "id": "15250", + "lat": 25.6730116, + "lng": -80.3118434 +}, { + "id": "116135", + "lat": 25.5754139, + "lng": -80.3486707 +}, { + "id": "482052", + "lat": 25.6164744, + "lng": -80.3414812 +}, { + "id": "118190", + "lat": 25.9179726, + "lng": -80.3175735 +}, { + "id": "381047", + "lat": 25.5793862, + "lng": -80.3314591 +}, { + "id": "527409", + "lat": 25.7088347, + "lng": -80.4622504 +}, { + "id": "493629", + "lat": 25.7769069, + "lng": -80.2241137 +}, { + "id": "63526", + "lat": 25.6329228, + "lng": -80.451064 +}, { + "id": "244688", + "lat": 25.8417866, + "lng": -80.2050447 +}, { + "id": "191535", + "lat": 25.7563223, + "lng": -80.3473487 +}, { + "id": "474979", + "lat": 25.9633603, + "lng": -80.2620535 +}, { + "id": "47753", + "lat": 25.8973992, + "lng": -80.1776238 +}, { + "id": "107038", + "lat": 25.7435993, + "lng": -80.4034296 +}, { + "id": "44544", + "lat": 25.7462669, + "lng": -80.3778359 +}, { + "id": "154762", + "lat": 25.7694919, + "lng": -80.414901 +}, { + "id": "247580", + "lat": 25.8146157, + "lng": -80.2243441 +}, { + "id": "49739", + "lat": 25.5793713, + "lng": -80.3273949 +}, { + "id": "148828", + "lat": 25.7411019, + "lng": -80.2509526 +}, { + "id": "395386", + "lat": 25.7605982, + "lng": -80.2252116 +}, { + "id": "151327", + "lat": 25.7044977, + "lng": -80.3058845 +}, { + "id": "508649", + "lat": 25.6592363, + "lng": -80.4132808 +}, { + "id": "326730", + "lat": 25.8765751, + "lng": -80.1232435 +}, { + "id": "41935", + "lat": 25.7592833, + "lng": -80.4117638 +}, { + "id": "478581", + "lat": 25.9189186, + "lng": -80.3184283 +}, { + "id": "97644", + "lat": 25.8536123, + "lng": -80.31323 +}, { + "id": "363748", + "lat": 25.5841201, + "lng": -80.3533193 +}, { + "id": "304589", + "lat": 25.6227492, + "lng": -80.3305762 +}, { + "id": "485780", + "lat": 25.6147548, + "lng": -80.4235966 +}, { + "id": "311706", + "lat": 25.8434179, + "lng": -80.285884 +}, { + "id": "431288", + "lat": 25.8420315, + "lng": -80.181124 +}, { + "id": "534304", + "lat": 25.8838967, + "lng": -80.3507177 +}, { + "id": "115305", + "lat": 25.6834477, + "lng": -80.3827952 +}, { + "id": "219115", + "lat": 25.856861, + "lng": -80.1990037 +}, { + "id": "400490", + "lat": 25.7292451, + "lng": -80.3321236 +}, { + "id": "80230", + "lat": 25.7238139, + "lng": -80.4151169 +}, { + "id": "317634", + "lat": 25.6879387, + "lng": -80.4055585 +}, { + "id": "480003", + "lat": 25.615952, + "lng": -80.3561281 +}, { + "id": "533414", + "lat": 25.4338486, + "lng": -80.4874752 +}, { + "id": "226129", + "lat": 25.883869, + "lng": -80.2021725 +}, { + "id": "581798", + "lat": 25.9160282, + "lng": -80.3428923 +}, { + "id": "254832", + "lat": 25.8102043, + "lng": -80.3644036 +}, { + "id": "494208", + "lat": 25.7329758, + "lng": -80.3101965 +}, { + "id": "247751", + "lat": 25.9511825, + "lng": -80.3326125 +}, { + "id": "554831", + "lat": 25.7266473, + "lng": -80.2733322 +}, { + "id": "387173", + "lat": 25.6112539, + "lng": -80.5386242 +}, { + "id": "109730", + "lat": 25.7812079, + "lng": -80.2077541 +}, { + "id": "142435", + "lat": 25.6282834, + "lng": -80.4508534 +}, { + "id": "310133", + "lat": 25.5435222, + "lng": -80.3705601 +}, { + "id": "479240", + "lat": 25.494036, + "lng": -80.4931857 +}, { + "id": "232127", + "lat": 25.6903203, + "lng": -80.3109452 +}, { + "id": "29481", + "lat": 25.9500298, + "lng": -80.2838625 +}, { + "id": "291027", + "lat": 25.9416996, + "lng": -80.2478679 +}, { + "id": "575345", + "lat": 25.8861471, + "lng": -80.3564722 +}, { + "id": "556681", + "lat": 25.9016938, + "lng": -80.2117351 +}, { + "id": "428049", + "lat": 25.8155781, + "lng": -80.2643191 +}, { + "id": "213347", + "lat": 25.667204, + "lng": -80.3217244 +}, { + "id": "420696", + "lat": 25.8339634, + "lng": -80.2880394 +}, { + "id": "119012", + "lat": 25.8581792, + "lng": -80.3296006 +}, { + "id": "25969", + "lat": 25.9429284, + "lng": -80.2745237 +}, { + "id": "503993", + "lat": 25.6903521, + "lng": -80.3242074 +}, { + "id": "212412", + "lat": 25.8872878, + "lng": -80.2072095 +}, { + "id": "20423", + "lat": 25.8176031, + "lng": -80.2769395 +}, { + "id": "501647", + "lat": 25.9425014, + "lng": -80.2220548 +}] diff --git a/examples/AutomaticTerritories/full-flow-sync.js b/examples/AutomaticTerritories/full-flow-sync.js new file mode 100644 index 0000000..b941044 --- /dev/null +++ b/examples/AutomaticTerritories/full-flow-sync.js @@ -0,0 +1,122 @@ +"use strict" + +const path = require("path") +const chai = require("chai") +const debug = require("debug")("route4me-node:examples") +require("../init-examples-suite") +const helper = require("../../test/helper") + +helper.describeIntegration(helper.toSuiteName(__filename), function T() { + this.timeout(5000) + this.slow(3000) + it(path.basename(__filename), (done) => { + // const Route4Me = require("route4me-node") + const expect = chai.expect + const apiKey = "11111111111111111111111111111111" + const route4me = new Route4Me(apiKey) + + const addresses = require("./data/addresses_200.json") + const mode = 1 + const params = [2] + + function createJobSync(addresses, mode, params) { + return new Promise((resolve) => { + route4me.AutomaticTerritories.createJob(addresses, mode, params, (err, data) => { + if(err) throw err + resolve(data) + }) + }) + } + + function getJobStatusSync(jobID) { + return new Promise((resolve) => { + const hInterval = setInterval(() => { + route4me.AutomaticTerritories.getJobStatus(jobID, (err, data) => { + if(err) { + clearInterval(hInterval) + throw err + } + if(data.status === "processed") { + clearInterval(hInterval) + resolve(data) + } + }) + }, 10000) + }) + } + + function getJobResultSync(jobID) { + return new Promise((resolve) => { + route4me.AutomaticTerritories.getJobResult(jobID, (err, data) => { + if(err) throw err + resolve(data) + }) + }) + } + + function optimizationSync(params) { + return new Promise((resolve) => { + route4me.Optimizations.create(params, false, (err, data) => { + if(err) throw err + resolve(data) + }) + }) + } + + (async () => { + try { + const job = await createJobSync(addresses, mode, params) + await getJobStatusSync(job.job_id) + const res = await getJobResultSync(job.job_id) + debug("result ", res) + expect(res).exist + + if(res) { + const zone_0 = data.clusters[0].addresses_ids + + for(let i = 0; i < addresses.length; ++i) { + addresses[i].original_route_id = (zone_0.includes(addresses[i].id) ? "ZONE - 0" : "ZONE - 1") + addresses[i].time = 60 + } + + addresses.unshift({ + alias: "DEPOT", + lat: 25.7559171435, + lng: -80.317204775, + is_depot: 1 + }) + + const params = { + parameters: { + algorithm_type: 3, + share_route: 0, + store_route: 0, + rt: 1, + route_time: 46800, + route_name: "Smart Zone Example", + optimize: "Time", + distance_unit: "mi", + device_type: "web", + travel_mode: "Driving", + parts: 1, + route_max_duration: 57600 + }, + addresses: addresses + } + + const opts = await optimizationSync(params) + + debug("opts ", opts) + expect(opts).exist + console.log(opts) + } + } + catch(err) { + debug("error ", err) + expect(err).is.null + } + })() + // TODO: remove `done` call from examples + done() + }) +}) diff --git a/examples/AutomaticTerritories/full-flow.js b/examples/AutomaticTerritories/full-flow.js index c221230..f4d97c9 100644 --- a/examples/AutomaticTerritories/full-flow.js +++ b/examples/AutomaticTerritories/full-flow.js @@ -14,19 +14,11 @@ helper.describeIntegration(helper.toSuiteName(__filename), function T() { const expect = chai.expect const apiKey = "11111111111111111111111111111111" const route4me = new Route4Me(apiKey) - - const addresses = [ - { "id": "1", "lat": 39.86374, "lng": -86.199121 }, - { "id": "2", "lat": 39.792024, "lng": -86.221094 }, - { "id": "3", "lat": 39.728683, "lng": -86.210107 }, - { "id": "4", "lat": 39.787803, "lng": -84.254541 }, - { "id": "5", "lat": 39.728683, "lng": -84.254541 }, - { "id": "6", "lat": 39.762472, "lng": -84.117212 } - ]; - - const mode = 0; - const params = [] - + + const addresses = require("./data/addresses_200.json") + const mode = 1 + const params = [2] + route4me.AutomaticTerritories.createJob(addresses, mode, params, (err, res) => { debug("error ", err) debug("result ", res) @@ -46,8 +38,47 @@ helper.describeIntegration(helper.toSuiteName(__filename), function T() { if(data.status === "processed") { clearInterval(hInterval) route4me.AutomaticTerritories.getJobResult(jobID, (err, data) => { - if(err) console.log(err) + if(err) { + console.log(err) + return + } console.log(data) + + const zone_0 = data.clusters[0].addresses_ids + + for(let i = 0; i < addresses.length; ++i) { + addresses[i].original_route_id = (zone_0.includes(addresses[i].id) ? "ZONE - 0" : "ZONE - 1") + addresses[i].time = 60 + } + + addresses.unshift({ + alias: "DEPOT", + lat: 25.7559171435, + lng: -80.317204775, + is_depot: 1 + }) + + const params = { + parameters: { + algorithm_type: 3, + share_route: 0, + store_route: 0, + rt: 1, + route_time: 46800, + route_name: "Smart Zone Example", + optimize: "Time", + distance_unit: "mi", + device_type: "web", + travel_mode: "Driving", + parts: 1, + route_max_duration: 57600 + }, + addresses: addresses + } + + route4me.Optimizations.create(params, false, (err, data) => { + console.log(data) + }) }) } }) diff --git a/package.json b/package.json index bbeef36..c188d82 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "route4me-nodejs-sdk", - "version": "1.0.18", + "version": "1.0.19", "description": "Access Route4Me's logistics-as-a-service API using our Node.js SDK", "main": "src/index.js", "browser": "src/route4me.js",