You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PackageHelper/www/assets/js/packages.js

170 lines
4.9 KiB
JavaScript

/*
* 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;
5 years ago
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++) {
5 years ago
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");
}
});
}