diff --git a/www/assets/js/packages.js b/www/assets/js/packages.js index 90a71c5..fb6ab98 100644 --- a/www/assets/js/packages.js +++ b/www/assets/js/packages.js @@ -82,10 +82,13 @@ function getMapIconForItems(items) { return icon; } -function addPackage(address, latitude, longitude, type, callback) { +function addPackage(address, latitude, longitude, type, callback, deadline) { var added = false; if (typeof type == 'undefined') { - type = "package"; + type = SETTINGS.itemtypes[0].id; + } + if (typeof deadline == 'undefined') { + deadline = false; } var packageID = uuidv4(); @@ -98,6 +101,7 @@ function addPackage(address, latitude, longitude, type, callback) { address: address, delivered: false, type: type, + deadline: deadline, id: packageID }); added = true; @@ -118,6 +122,7 @@ function addPackage(address, latitude, longitude, type, callback) { address: address, delivered: false, type: type, + deadline: deadline, id: packageID } ] @@ -232,57 +237,149 @@ function countPackages() { function addPackageByAddress(address, citystate, type, callback) { var requestfinished = false; var searchingdialogopen = false; - $.ajax({ - url: SETTINGS.geocodeapi, - dataType: 'json', - data: { - address: address + " " + citystate - }, - 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); + var deadline = false; + + var ajaxlookup = function () { + $.ajax({ + url: SETTINGS.geocodeapi, + dataType: 'json', + data: { + address: address + " " + citystate + }, + 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.confirm( + "The address \"" + address + "\" couldn't be reliably located. Add it anyways?", + "Accuracy Warning", + function (ok) { + if (resp.address.street == "") { + addPackage(address, resp.coords[0], resp.coords[1], type, callback, deadline); + } else { + addPackage(resp.address.street, resp.coords[0], resp.coords[1], type, callback, deadline); + } + } + ); + } } else { playSound("error"); - app.dialog.confirm( - "The address \"" + address + "\" couldn't be reliably located. Add it anyways?", - "Accuracy Warning", - function (ok) { - if (resp.address.street == "") { - addPackage(address, resp.coords[0], resp.coords[1], type, callback); - } else { - addPackage(resp.address.street, resp.coords[0], resp.coords[1], type, callback); - } - } - ); + app.dialog.alert(resp.message, "Error"); + } + }, + error: function (jqXHR, status, errorThrown) { + if (searchingdialogopen) { + app.dialog.close(); + searchingdialogopen = false; } - } else { + requestfinished = true; playSound("error"); - app.dialog.alert(resp.message, "Error"); + app.dialog.alert("There was a network issue while finding the address. Please try adding the item again.", "Error"); } - }, - error: function (jqXHR, status, errorThrown) { - if (searchingdialogopen) { - app.dialog.close(); - searchingdialogopen = false; + }); + + // Open a loading message if there's a delay finding the address + setTimeout(function () { + if (!requestfinished) { + app.dialog.preloader("Searching for address..."); + searchingdialogopen = true; } - requestfinished = true; - playSound("error"); - app.dialog.alert("There was a network issue while finding the address. Please try adding the item again.", "Error"); + }, 750); + } + + if (type == "express") { + if (localStorage.getItem("deadlinealarm_minutes") == null) { + localStorage.setItem("deadlinealarm_minutes", 20); } - }); + var minutes = localStorage.getItem("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(); + } +} - // Open a loading message if there's a delay finding the address - setTimeout(function () { - if (!requestfinished) { - app.dialog.preloader("Searching for address..."); - searchingdialogopen = true; +function checkDeadlines() { + if (localStorage.getItem("deadlinealarm_minutes") == null) { + localStorage.setItem("deadlinealarm_minutes", 20); + } + var minutes = localStorage.getItem("deadlinealarm_minutes"); + var currentTime = new Date().getTime() / 1000; + var deadlineTime = currentTime + (minutes * 60); + for (i in packages) { + for (j in packages[i].items) { + var item = packages[i].items[j]; + if (typeof item.deadline != 'undefined' && item.deadline != false && item.delivered != true) { + if ((typeof item.deadlinealarmed == 'undefined' || item.deadlinealarmed != true) && item.deadline <= deadlineTime) { + playSound("alert"); + app.dialog.alert( + "Item at " + item.address + " needs to be delivered by " + timestampToTimeString(item.deadline) + " (" + Math.floor((item.deadline - currentTime) / 60) + " minutes from now).", + "Delivery Alarm", + function () { + + } + ); + packages[i].items[j].deadlinealarmed = true; + } + } } - }, 750); -} \ No newline at end of file + } +} + +setInterval(checkDeadlines, 15 * 1000); \ No newline at end of file