1
0
Fork 0
This repository has been archived on 2024-02-17. You can view files and clone it, but cannot push or open issues or pull requests.
Kfet-depreciated/app/static/js/pc.js

343 lines
11 KiB
JavaScript
Raw Normal View History

2020-01-27 17:36:58 +01:00
let socket = io();
2020-02-01 18:31:47 +01:00
let plate = document.querySelector("#plat ul");
let ingredient = document.querySelector("#ingredient ul");
let sauce = document.querySelector("#sauce ul");
let drink = document.querySelector("#boisson ul");
let dessert = document.querySelector("#dessert ul");
let list = document.querySelector(".liste");
2020-02-04 23:40:39 +01:00
let current = {"plate": null, "ingredient": [], "sauce": [], "drink": null, "dessert": null, "price": {}};
let radios = {"plate": null, "drink": null, "dessert": null};
2020-02-04 23:40:39 +01:00
let db = {"plate": {}, "ingredient": {}, "sauce": {}, "drink": {}, "dessert": {}};
2020-01-27 17:36:58 +01:00
function addcmd(id, plate, ingredient, sauce, drink, dessert, state, client, sandwich) {
2020-02-04 22:52:28 +01:00
for (let i of ["plate", "ingredient", "sauce", "drink", "dessert", "state", "sandwich"])
if (!eval(i))
eval(`${i} = ""`);
list.insertAdjacentHTML("beforeend", `<div class="com" id="cmd${id}"> <button class="donner">Donnée</button> <h1>${id}</h1> <div class="spec"> <h2>${sandwich}</h2><h3>${client}</h3><p>${plate}</p><p>${ingredient}</p><p>${sauce}</p><p>${drink}</p><p>${dessert}</p><button class="annuler">Annuler</button><button class="erreur">Erreur</button> </div> </div>`);
let e = document.querySelector(`.liste #cmd${id}`);
2020-02-01 18:31:47 +01:00
e.addEventListener( "click" ,ev => {
ev.stopPropagation();
e.classList.toggle("show-spec");
2020-01-27 17:36:58 +01:00
});
2020-02-01 18:31:47 +01:00
e.querySelector(".donner").addEventListener("click", ev => {
ev.stopPropagation();
socket.emit("give command", {"id": id});
});
e.querySelector(".annuler").addEventListener("click", ev => {
ev.stopPropagation();
socket.emit("clear command", {"id": id});
});
e.querySelector(".erreur").addEventListener("click", ev => {
ev.stopPropagation();
socket.emit("error command", {"id": id});
});
2020-01-27 17:36:58 +01:00
switch (state) {
2020-02-02 18:51:02 +01:00
case "WIP":
2020-02-02 22:30:28 +01:00
WIP(e, sandwich);
2020-02-02 18:51:02 +01:00
break;
2020-02-01 16:43:22 +01:00
case "done":
done(e);
break;
2020-01-27 17:36:58 +01:00
case "gave":
give(e);
2020-01-27 17:36:58 +01:00
break;
case "error":
error(e);
2020-01-27 17:36:58 +01:00
break;
}
2020-02-01 18:31:47 +01:00
document.querySelector("#resume>h1").innerHTML = `Commande ${id+1}`;
2020-01-27 17:36:58 +01:00
}
2020-02-01 17:40:01 +01:00
function addplate(id, name) {
plate.insertAdjacentHTML("beforeend", `<li><input type="radio" name="plate" id="${id}"><label for="${id}">${name}</label></li>`);
2020-02-01 17:40:01 +01:00
let e = document.querySelector(`input[id=${id} ]`);
e.addEventListener("click", () => {
radiocheck(e, "plate",0);
document.querySelectorAll("input[name=ingredient],input[name=sauce]").forEach( el => {
if (el.checked)
el.click();
});
document.querySelectorAll("input[name=ingredient],input[name=sauce]").forEach( el => {
el.disabled = !(e.checked && !db["plate"][e.id]["avoid " + el.name]);
2020-03-06 15:56:26 +01:00
});
})
2020-02-01 17:40:01 +01:00
}
2020-02-01 17:40:01 +01:00
function addingredient(id, name) {
ingredient.insertAdjacentHTML("beforeend", `<li><input type="checkbox" disabled=true name="ingredient" id="${id}"><label for="${id}">${name}</label></li>`);
2020-02-01 17:40:01 +01:00
let e = document.querySelector(`input[id=${id} ]`);
e.addEventListener("click", () => {
checkcheck(e, "ingredient", 1, 3)
})
2020-02-01 17:40:01 +01:00
}
2020-02-01 17:40:01 +01:00
function addsauce(id, name) {
sauce.insertAdjacentHTML("beforeend", `<li><input type="checkbox" disabled=true name="sauce" id="${id}"><label for="${id}">${name}</label></li>`);
2020-02-01 17:40:01 +01:00
let e = document.querySelector(`input[id=${id} ]`);
e.addEventListener("click", () => {
checkcheck(e, "sauce", 2, 2)
})
2020-02-01 17:40:01 +01:00
}
2020-02-01 17:40:01 +01:00
function adddrink(id, name) {
drink.insertAdjacentHTML("beforeend", `<li><input type="radio" name="drink" id="${id}"><label for="${id}">${name}</label></li>`);
2020-02-01 17:40:01 +01:00
let e = document.querySelector(`input[id=${id} ]`);
e.addEventListener("click", () => {
radiocheck(e, "drink", 3)
})
2020-02-01 17:40:01 +01:00
}
2020-02-01 17:40:01 +01:00
function adddessert(id, name) {
dessert.insertAdjacentHTML("beforeend", `<li><input type="radio" name="dessert" id="${id}"><label for="${id}">${name}</label></li>`);
2020-02-01 17:40:01 +01:00
let e = document.querySelector(`input[id=${id} ]`);
e.addEventListener("click", () => {
radiocheck(e, "dessert", 4)
})
2020-02-01 17:40:01 +01:00
}
function radiocheck (e, n, p) {
if (e.checked) {
let curr, name;
if (e.id === radios[n]) {
e.checked = false;
radios[n] = null;
curr = null;
name = null;
} else {
radios[n] = e.id;
curr = e.id;
name = document.querySelector(`label[for=${e.id}]`).innerHTML;
}
current[n] = curr;
2020-02-04 23:40:39 +01:00
if (curr)
current["price"][n] = db[n][curr]["price"];
else
current["price"][n] = 0;
price();
document.querySelectorAll("#resume p")[p].innerHTML = name;
}
}
function checkcheck(e, n, p, l) {
if (e.checked)
current[n].push(e.id);
else
current[n].splice(current[n].indexOf(e.id), 1);
document.querySelectorAll(`input[name=${n}]`).forEach( e => {
if (!e.checked)
e.disabled = current[n].length === l
});
2020-02-04 23:40:39 +01:00
current["price"][n] = 0;
for (let i of current[n]) {
current["price"][n] += db[n][i]["price"]
}
price();
document.querySelectorAll("#resume p")[p].innerHTML = current[n].join(" - ");
}
2020-02-01 17:40:01 +01:00
function clear(e) {
2020-02-01 18:31:47 +01:00
e.classList.remove("finis");
e.classList.remove("donnee");
e.classList.remove("probleme");
2020-02-02 18:51:02 +01:00
e.classList.remove("WIP");
2020-02-01 18:31:47 +01:00
e.classList.remove("show-spec");
2020-02-01 17:40:01 +01:00
list.prepend(e);
}
2020-02-02 18:51:02 +01:00
function WIP(e, name) {
e.classList.remove("show-spec");
e.classList.add("WIP");
e.querySelector("h2").innerHTML = name;
}
2020-02-01 17:40:01 +01:00
function done(e) {
2020-02-01 18:31:47 +01:00
e.classList.remove("show-spec");
e.classList.add("finis");
2020-02-01 17:40:01 +01:00
}
function give(e) {
2020-02-01 18:31:47 +01:00
e.classList.remove("show-spec");
e.classList.add("donnee");
2020-02-01 17:40:01 +01:00
list.appendChild(e);
}
function error(e) {
2020-02-01 18:31:47 +01:00
e.classList.remove("show-spec");
e.classList.add("probleme");
2020-02-01 17:40:01 +01:00
list.appendChild(e);
}
2020-03-06 17:59:05 +01:00
function price() {
2020-02-04 23:40:39 +01:00
let p = 0;
for (let i in current["price"]) {
p += current["price"][i]
}
p = p.toFixed(2);
2020-02-04 23:40:39 +01:00
document.querySelector("#resume h2").innerHTML = p+"€";
2020-03-06 17:59:05 +01:00
return p;
2020-02-04 23:40:39 +01:00
}
2020-02-01 18:31:47 +01:00
socket.on("connect", data => {
2020-02-01 17:40:01 +01:00
if (data === "ok") {
socket.emit("list plate");
socket.emit("list ingredient");
socket.emit("list sauce");
socket.emit("list drink");
socket.emit("list dessert");
socket.emit("list command");
}
});
2020-02-01 18:31:47 +01:00
socket.on("list command", data => {
2020-02-01 17:40:01 +01:00
let child = list.lastElementChild;
while (child) {
list.removeChild(child);
child = list.lastElementChild;
}
for (let c of data.list) {
addcmd(c.id, c.plate, c.ingredient, c.sauce, c.drink, c.dessert, c.state, c.client, c.sandwich);
2020-02-01 17:40:01 +01:00
}
});
2020-02-01 18:31:47 +01:00
socket.on("list plate", data => {
2020-02-01 17:40:01 +01:00
let child = plate.lastElementChild;
while (child) {
plate.removeChild(child);
child = plate.lastElementChild;
}
for (let p of data.list) {
addplate(p.id, p.name);
2020-03-06 15:56:26 +01:00
db["plate"][p.id] = {"name": p.name, "price": p.price, "avoid ingredient": p.avoid_ingredient, "avoid sauce": p.avoid_sauce}
2020-02-01 17:40:01 +01:00
}
});
2020-02-01 18:31:47 +01:00
socket.on("list ingredient", data => {
2020-02-01 17:40:01 +01:00
let child = ingredient.lastElementChild;
while (child) {
ingredient.removeChild(child);
child = ingredient.lastElementChild;
}
for (let i of data.list) {
addingredient(i.id, i.name);
2020-02-04 23:40:39 +01:00
db["ingredient"][i.id] = {"name": i.name, "price": i.price}
2020-02-01 17:40:01 +01:00
}
});
2020-02-01 18:31:47 +01:00
socket.on("list sauce", data => {
2020-02-01 17:40:01 +01:00
let child = sauce.lastElementChild;
while (child) {
sauce.removeChild(child);
child = sauce.lastElementChild;
}
for (let s of data.list) {
addsauce(s.id, s.name);
2020-02-04 23:40:39 +01:00
db["sauce"][s.id] = {"name": s.name, "price": s.price}
2020-02-01 17:40:01 +01:00
}
});
2020-02-01 18:31:47 +01:00
socket.on("list drink", data => {
2020-02-01 17:40:01 +01:00
let child = drink.lastElementChild;
while (child) {
drink.removeChild(child);
child = drink.lastElementChild;
}
for (let d of data.list) {
adddrink(d.id, d.name);
2020-02-04 23:40:39 +01:00
db["drink"][d.id] = {"name": d.name, "price": d.price}
2020-02-01 17:40:01 +01:00
}
});
2020-02-01 18:31:47 +01:00
socket.on("list dessert", data => {
2020-02-01 17:40:01 +01:00
let child = dessert.lastElementChild;
while (child) {
dessert.removeChild(child);
child = dessert.lastElementChild;
}
for (let d of data.list) {
adddessert(d.id, d.name);
2020-02-04 23:40:39 +01:00
db["dessert"][d.id] = {"name": d.name, "price": d.price}
2020-02-01 17:40:01 +01:00
}
});
2020-02-01 18:31:47 +01:00
socket.on("new command", data => {
addcmd(data.id, data.plate, data.ingredient, data.sauce, data.drink, data.dessert, data.state, data.client, data.sandwich);
2020-02-01 17:40:01 +01:00
});
2020-02-01 18:31:47 +01:00
socket.on("cleared command", data => {
clear(document.querySelector(`.liste #cmd${data.id}`))
2020-02-01 17:40:01 +01:00
});
2020-02-02 18:51:02 +01:00
socket.on("WIPed command", data => {
2020-02-02 22:30:28 +01:00
WIP(document.querySelector(`.liste #cmd${data.id}`), data.sandwich)
2020-02-02 18:51:02 +01:00
});
2020-02-01 18:31:47 +01:00
socket.on("finish command", data => {
done(document.querySelector(`.liste #cmd${data.id}`))
2020-02-01 17:40:01 +01:00
});
2020-02-01 18:31:47 +01:00
socket.on("gave command", data => {
give(document.querySelector(`.liste #cmd${data.id}`))
2020-02-01 17:40:01 +01:00
});
2020-02-01 18:31:47 +01:00
socket.on("glitched command", data => {
error(document.querySelector(`.liste #cmd${data.id}`))
});
2020-02-01 18:31:47 +01:00
document.querySelector(".validation").addEventListener("click", ev => {
ev.stopPropagation();
let user = document.getElementById("user");
2020-02-01 20:07:13 +01:00
if (!current.plate && !current.ingredient.length && !current.sauce.length && !current.drink && !current.dessert) {
alert("Empty command !");
return;
} else if (user.style.color === "red") {
current["firstname"] = prompt("Prénom");
current["lastname"] = prompt("Nom");
2020-02-01 20:07:13 +01:00
}
current["client"] = user.value;
current["pc"] = pc_id;
2020-03-06 17:59:05 +01:00
current["price"] = price();
socket.emit("add command", current);
2020-02-04 23:40:39 +01:00
current = {"plate": null, "ingredient": [], "sauce": [], "drink": null, "dessert": null, "price": {}};
document.querySelectorAll("input[name=plate],input[name=drink],input[name=dessert]").forEach( e => {
e.checked = false;
});
document.querySelectorAll("input[name=ingredient],input[name=sauce]").forEach( e => {
e.checked = false;
e.disabled = true;
});
document.querySelectorAll("#resume p").forEach( e => {
e.innerHTML = ""
});
user.value = "";
user.style.color = "";
document.getElementById("user_list").innerHTML = "";
2020-03-06 17:59:05 +01:00
document.querySelector("#resume h2").innerHTML = "0€";
});
document.getElementById("user").addEventListener("keyup", ev => {hinter(ev)});
function hinter(ev) {
let input = ev.target;
let min_characters = 0;
if (input.value.length < min_characters)
return;
socket.emit("list users", {"user": input.value});
}
socket.on("list users", data => {
let user_list = document.getElementById("user_list");
user_list.innerHTML = "";
for (let u of data["list"]) {
user_list.insertAdjacentHTML("beforeend", `<option value="${u}">`);
}
let user = document.getElementById("user");
if (data["list"].indexOf(user.value) === -1)
user.style.color = "red";
else {
user.style.color = "";
}
});