diff --git a/config.xml b/config.xml index 2155fb7..6fb62ec 100644 --- a/config.xml +++ b/config.xml @@ -1,5 +1,5 @@ - + PackageHelper Assistant app for door-to-door package delivery. diff --git a/package.json b/package.json index a996e96..59ed21d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "com.netsyms.packagehelper", "displayName": "PackageHelper", - "version": "1.5.0", + "version": "1.5.1", "description": "Assistant app for door-to-door package delivery.", "product_string": "PackageHelper", "main": "www/index.html", diff --git a/www/assets/js/add.js b/www/assets/js/add.js index 03dcc9f..d36712c 100644 --- a/www/assets/js/add.js +++ b/www/assets/js/add.js @@ -4,6 +4,35 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +$(".scanbarcodebtn").click(function () { + scanBarcode(function (code) { + playSound("scan"); + if (code != "" && (code.match(/^([^\\t]*\\t[^\\t]*){13}$/) || code.match(/.*\\x1D.*/))) { + addPackageByBarcode(code, $("input[name=itemtype]:checked").val(), + function (ids) { + var packageObj = getPackage(ids.packageID); + // Reset item type to default + $("input[name=itemtype][data-default=1]").prop("checked", true); + $("#historylist").prepend('
  • ' + + '
    ' + + ' ' + + '
    ' + + '
    ' + + '
    ' + + ' ' + packageObj.address + + '
    ' + + '
    ' + + '
  • '); + $("#tap-to-remove-history-prompt").removeClass("display-none"); + }); + } else { + app.dialog.alert("That barcode doesn't contain the required data.", "Error"); + } + }, function (error) { + app.dialog.alert(error, "Error"); + }); +}); + $(".addpackagebtn").click(function () { if ($("input[name=number]").val().trim() == "") { playSound("error"); diff --git a/www/assets/js/packages.js b/www/assets/js/packages.js index 0346d03..732e96b 100644 --- a/www/assets/js/packages.js +++ b/www/assets/js/packages.js @@ -607,6 +607,122 @@ function addPackageByAddress(number, unit, street, citystate, zip, type, callbac } } +function addPackageByBarcode(barcode, type, callback) { + var requestfinished = false; + var searchingdialogopen = false; + var deadline = false; + + var ajaxlookup = function () { + $.ajax({ + url: SETTINGS.geocodebarcodeapi, + dataType: 'json', + data: { + code: barcode, + type: SETTINGS.itemtypes[type].allowedlocationtypes + }, + timeout: 15 * 1000, + success: function (resp) { + if (searchingdialogopen) { + app.dialog.close(); + searchingdialogopen = false; + } + requestfinished = true; + if (resp.status == "OK") { + if (resp.accuracy.ok) { + addPackage(resp.address.street, resp.coords[0], resp.coords[1], type, callback, deadline); + } else { + playSound("error"); + app.dialog.alert("The scanned address couldn't be reliably located.", "Error"); + } + } else { + playSound("error"); + app.dialog.alert(resp.message, "Error"); + } + }, + error: function (jqXHR, status, errorThrown) { + if (searchingdialogopen) { + app.dialog.close(); + searchingdialogopen = false; + } + requestfinished = true; + playSound("error"); + app.dialog.alert("There was a network issue while looking up the barcode. Please try again.", "Error"); + } + }); + + // Open a loading message if there's a delay finding the address + setTimeout(function () { + if (!requestfinished) { + app.dialog.preloader("Looking up barcode..."); + searchingdialogopen = true; + } + }, 750); + } + + var prelookup = function () { + if (type == "express") { + if (getStorage("deadlinealarm_minutes") == null) { + setStorage("deadlinealarm_minutes", 20); + } + var minutes = getStorage("deadlinealarm_minutes"); + app.dialog.create({ + title: 'Express Item', + text: 'Set a reminder for ' + minutes + ' minutes before:', + buttons: [ + { + text: '10:30 AM', + close: true + }, + { + text: '12:00 PM', + close: true + }, + { + text: '3:00 PM', + close: true + }, + { + text: "No reminder", + color: "red", + close: true + } + ], + verticalButtons: true, + onClick: function (dialog, index) { + deadline = new Date(); + switch (index) { + case 0: + deadline.setMinutes(30); + deadline.setHours(10); + break; + case 1: + deadline.setMinutes(00); + deadline.setHours(12); + break; + case 2: + deadline.setMinutes(00); + deadline.setHours(12 + 3); + break; + case 3: + default: + deadline = false; + break; + } + + if (deadline != false) { + deadline = deadline.getTime() / 1000; + } + ajaxlookup(); + } + }).open(); + } else { + ajaxlookup(); + } + } + + prelookup(); +} + function checkDeadlines() { if (getStorage("deadlinealarm_minutes") == null) { setStorage("deadlinealarm_minutes", 20); diff --git a/www/package.json b/www/package.json index aa4b0b4..888e266 100644 --- a/www/package.json +++ b/www/package.json @@ -1,6 +1,6 @@ { "name": "PackageHelper", - "version": "1.5.0", + "version": "1.5.1", "main": "index.html", "license": "MPL-2.0", "dependencies": { diff --git a/www/pages/add.html b/www/pages/add.html index b943e96..c0d0f44 100644 --- a/www/pages/add.html +++ b/www/pages/add.html @@ -15,6 +15,9 @@
    Add Items
    Add Items
    + + center_focus_strong + more_vert @@ -119,7 +125,7 @@