diff --git a/www/assets/js/notes.js b/www/assets/js/notes.js index 8ee6476..fd9716e 100644 --- a/www/assets/js/notes.js +++ b/www/assets/js/notes.js @@ -11,6 +11,44 @@ if (inStorage("notes")) { setStorage("notes", "[]"); } +function findNote(number, street) { + for (i in notes) { + if (notes[i].number == number && notes[i].street.toUpperCase() == street.toUpperCase()) { + return notes[i]; + } + } + return null; +} + +function isDeliverable(number, street) { + var note = findNote(number, street); + + var ok = true; + var reason = ""; + + if (note != null) { + for (t in note.toggles) { + if (!note.toggles.hasOwnProperty(t)) { + continue; + } + + for (tt in SETTINGS.routenotetoggles) { + if (SETTINGS.routenotetoggles[tt].id == t) { + if (SETTINGS.routenotetoggles[tt].preventsDelivery == true && note.toggles[t] == true) { + ok = false; + reason = SETTINGS.routenotetoggles[tt].reason; + } + } + } + } + } + + return { + ok: ok, + reason: reason + }; +} + function saveNote(id) { var exists = false; var index = -1; diff --git a/www/assets/js/packages.js b/www/assets/js/packages.js index abc6503..0f63770 100644 --- a/www/assets/js/packages.js +++ b/www/assets/js/packages.js @@ -376,63 +376,82 @@ function addPackageByAddress(number, street, citystate, type, callback) { }, 750); } - 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; - } + 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; + if (deadline != false) { + deadline = deadline.getTime() / 1000; + } + ajaxlookup(); } - ajaxlookup(); - } - }).open(); + }).open(); + } else { + ajaxlookup(); + } + } + + var deliverable = isDeliverable(number, street); + + if (deliverable.ok) { + prelookup(); } else { - ajaxlookup(); + app.dialog.confirm( + "A route note says this address is " + deliverable.reason + ". Add item anyways?", + "Confirm", + function () { + prelookup(); + }, + function () { + // cancel + } + ); } } diff --git a/www/settings.js b/www/settings.js index 134a985..bf99429 100644 --- a/www/settings.js +++ b/www/settings.js @@ -305,15 +305,21 @@ var SETTINGS = { routenotetoggles: [ { name: "Vacant", - id: "vacant" + id: "vacant", + preventsDelivery: true, + reason: "vacant" }, { name: "Outside delivery radius", - id: "undeliverable" + id: "undeliverable", + preventsDelivery: true, + reason: "too far from the route" }, { name: "On hold", - id: "hold" + id: "hold", + preventsDelivery: true, + reason: "on hold" } ], synckeyblacklist: [