|
|
|
/*
|
|
|
|
* 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 addPackage(address, latitude, longitude) {
|
|
|
|
var added = false;
|
|
|
|
for (var i = 0; i < packages.length; i++) {
|
|
|
|
if (packages[i].coords[0] == latitude && packages[i].coords[1] == longitude && packages[i].address == address) {
|
|
|
|
packages[i].items.push({
|
|
|
|
address: address,
|
|
|
|
delivered: false,
|
|
|
|
type: "package",
|
|
|
|
id: uuidv4()
|
|
|
|
});
|
|
|
|
added = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!added) {
|
|
|
|
packages.push({
|
|
|
|
coords: [
|
|
|
|
latitude,
|
|
|
|
longitude
|
|
|
|
],
|
|
|
|
id: uuidv4(),
|
|
|
|
address: address,
|
|
|
|
items: [
|
|
|
|
{
|
|
|
|
address: address,
|
|
|
|
delivered: false,
|
|
|
|
type: "package",
|
|
|
|
id: uuidv4()
|
|
|
|
}
|
|
|
|
]
|
|
|
|
});
|
|
|
|
}
|
|
|
|
localStorage.setItem("packages", JSON.stringify(packages));
|
|
|
|
|
|
|
|
playSound("ok");
|
|
|
|
|
|
|
|
app.toast.show({
|
|
|
|
text: 'Package Added!<br><span style="font-size: 80%;">' + address + "</span>",
|
|
|
|
position: "bottom",
|
|
|
|
destroyOnClose: true,
|
|
|
|
closeTimeout: 1000 * 3
|
|
|
|
});
|
|
|
|
|
|
|
|
if (map != null) {
|
|
|
|
reloadMap();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
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 (typeof packages[id].delivered == "undefined" || packages[id].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(id) {
|
|
|
|
app.dialog.confirm(
|
|
|
|
"Delete package at " + packages[id].address + "?",
|
|
|
|
"Confirm",
|
|
|
|
function () {
|
|
|
|
// delete
|
|
|
|
deletePackage(id);
|
|
|
|
},
|
|
|
|
function () {
|
|
|
|
// cancel
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
function deletePackage(id) {
|
|
|
|
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();
|
|
|
|
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 addPackageByAddress(address, citystate) {
|
|
|
|
$.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]);
|
|
|
|
} 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]);
|
|
|
|
} else {
|
|
|
|
addPackage(resp.address.street, resp.coords[0], resp.coords[1]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
} else {
|
|
|
|
playSound("error");
|
|
|
|
app.dialog.alert(resp.message, "Error");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|