/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ var packages = []; if (localStorage.getItem("packages") != null) { packages = JSON.parse(localStorage.getItem("packages")); } /** * Count how many items are still undelivered for an address. * @param {type} address An item in the packages array. * @returns {Number} */ function getUndeliveredCount(address) { var undelivered = 0; for (var i = 0; i < address.items.length; i++) { if (!address.items[i].delivered) { undelivered++; } } return undelivered; } function getPackage(packageid) { for (var i = 0; i < packages.length; i++) { for (var j = 0; j < packages[i].items.length; j++) { if (packages[i].items[j].id == packageid) { return packages[i].items[j]; } } } } function getIconForType(packagetype) { switch (packagetype) { case "package": return "fas fa-box"; case "letter": return "fas fa-envelope"; case "express": return "fas fa-shipping-fast"; default: return "fas fa-box"; } } function getMapIconForItems(items) { var types = { package: 0, letter: 0, express: 0 }; var deliveredcount = 0; var type = "package"; for (var i = 0; i < items.length; i++) { // Don't consider delivered packages when determining icon, // only count them to check if everything is delivered if (items[i].delivered) { deliveredcount++; continue; } types[items[i].type]++; } if (deliveredcount == items.length) { return "check"; } if (types.letter == 0 && types.express == 0) { if (types.package > 1) { return "boxes"; } return "box"; } if (types.package == 0 && types.express == 0) { if (types.letter > 1) { return "envelopes"; } return "envelope"; } if (types.package == 0 && types.letter == 0) { return "express"; } return "multiple-items"; } function addPackage(address, latitude, longitude, type, callback) { var added = false; if (typeof type == 'undefined') { type = "package"; } var packageID = uuidv4(); var coordsID = ""; for (var i = 0; i < packages.length; i++) { if (packages[i].coords[0] == latitude && packages[i].coords[1] == longitude && packages[i].address == address) { coordsID = packages[i].id; packages[i].items.push({ address: address, delivered: false, type: type, id: packageID }); added = true; break; } } if (!added) { coordsID = uuidv4(); packages.push({ coords: [ latitude, longitude ], id: coordsID, address: address, items: [ { address: address, delivered: false, type: type, id: packageID } ] }); } localStorage.setItem("packages", JSON.stringify(packages)); playSound("ok"); app.toast.show({ text: 'Package Added!
' + address + "", position: "bottom", destroyOnClose: true, closeTimeout: 1000 * 3 }); if (map != null) { reloadMap(); } if (typeof callback == 'function') { callback({ coordsID: coordsID, packageID: packageID }); } addAutofillEntry(address); } function markDelivered(id, delivered) { for (var i = 0; i < packages.length; i++) { for (var j = 0; j < packages[i].items.length; j++) { if (packages[i].items[j].id == id) { if (typeof delivered == 'undefined') { if (packages[i].items[j].delivered == false) { delivered = true; } else { delivered = false; } } packages[i].items[j].delivered = delivered; if (delivered) { packages[i].items[j].deliverytimestamp = Date.now(); } } } } localStorage.setItem("packages", JSON.stringify(packages)); } function confirmDeletePackage(package, callback) { app.dialog.confirm( "Delete item at " + package.address + "?", "Confirm", function () { // delete deletePackage(package.id, callback); }, function () { // cancel } ); } function deletePackage(id, callback) { for (var i = 0; i < packages.length; i++) { for (var j = 0; j < packages[i].items.length; j++) { if (packages[i].items[j].id == id) { packages[i].items.splice(j, 1); if (packages[i].items.length == 0) { packages.splice(i, 1); } localStorage.setItem("packages", JSON.stringify(packages)); loadPackageList(); if (typeof callback == 'function') { callback(id); } return; } } } } function countRemainingPackages() { var undelivered = 0; for (var i = 0; i < packages.length; i++) { for (var j = 0; j < packages[i].items.length; j++) { if (packages[i].items[j].delivered != true) { undelivered++; } } } return undelivered; } function countPackages() { var count = 0; for (var i = 0; i < packages.length; i++) { for (var j = 0; j < packages[i].items.length; j++) { count++; } } return count; } function addPackageByAddress(address, citystate, type, callback) { $.getJSON(SETTINGS.geocodeapi, { address: address + " " + citystate }, function (resp) { if (resp.status == "OK") { if (resp.accuracy.ok) { addPackage(resp.address.street, resp.coords[0], resp.coords[1], type, callback); } 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); } } ); } } else { playSound("error"); app.dialog.alert(resp.message, "Error"); } }); }