diff --git a/models/service.js b/models/service.js
index bb9d5de..917a920 100644
--- a/models/service.js
+++ b/models/service.js
@@ -5,6 +5,21 @@ module.exports = (sequelize, DataTypes) => {
type: DataTypes.DATEONLY,
defaultValue: DataTypes.NOW,
primaryKey: true
+ },
+ sandwich1Busy: {
+ type: DataTypes.BOOLEAN,
+ defaultValue: false,
+ allowNull: false
+ },
+ sandwich2Busy: {
+ type: DataTypes.BOOLEAN,
+ defaultValue: false,
+ allowNull: false
+ },
+ sandwich3Busy: {
+ type: DataTypes.BOOLEAN,
+ defaultValue: false,
+ allowNull: false
}
}, {
tableName: "Services"
diff --git a/public/javascripts/commands.js b/public/javascripts/commands.js
index 8fb87bc..4b4b252 100644
--- a/public/javascripts/commands.js
+++ b/public/javascripts/commands.js
@@ -323,11 +323,11 @@ socket.on("clear command", data => {
clear(document.querySelector(`.list #cmd${data}`))
});
-socket.on("WIPed command", data => {
- WIP(document.querySelector(`.list #cmd${data.id}`), data.sandwich)
+socket.on("WIP command", data => {
+ WIP(document.querySelector(`.list #cmd${data.number}`), data.sandwich)
});
-socket.on("finish command", data => {
+socket.on("done command", data => {
done(document.querySelector(`.list #cmd${data}`))
});
diff --git a/public/javascripts/kitchen.js b/public/javascripts/kitchen.js
index 495d256..31ec5eb 100644
--- a/public/javascripts/kitchen.js
+++ b/public/javascripts/kitchen.js
@@ -1,22 +1,25 @@
-let socket = io();
-let WIP = document.getElementById("encours");
-let done = document.getElementById("realisee");
-let waiting = document.getElementById("attente");
+const socket = io();
+const WIP = document.getElementById("WIP");
+const done = document.getElementById("done");
+const waiting = document.getElementById("waiting");
-function addcmd(id, plate, ingredient, sauce, drink, dessert, state, client, sandwich) {
- for (let i of ["plate", "ingredient", "sauce", "drink", "dessert", "state", "sandwich"])
- if (!eval(i))
- eval(`${i} = ""`);
- done.insertAdjacentHTML("beforeend", `
${id}
${sandwich}
${client}
${plate} | ${ingredient}
${sauce}
${drink}
${dessert}
`);
- let e = document.getElementById(`cmd${id}`);
- switch (state) {
- case "WIP":
- WIPed(e, sandwich);
- break;
- case "waiting":
- wait(e);
- break;
- }
+function addCmd(c) {
+ done.insertAdjacentHTML("beforeend", `
+
${c.number}
+
${c.sandwich}
+
${c.client}
+
${c.dish} | ${c.ingredient}
+
${c.sauce}
+
${c.drink}
+
${c.dessert}
+
`);
+ let e = document.getElementById(`cmd${c.number}`);
+ if (c.error || c.give || c.done)
+ finish(e)
+ else if (c.WIP)
+ WIPed(e, c.sandwich)
+ else
+ wait(e)
}
function WIPed(e, name) {
@@ -32,8 +35,8 @@ function WIPed(e, name) {
WIP.children[names.indexOf(name)-1].insertAdjacentHTML("afterend", e.outerHTML);
}
- WIP.querySelector(`#${e.id}`).addEventListener("click", ev => {
- socket.emit("done command", {"id": parseInt(e.id.replace("cmd", ""))});
+ WIP.querySelector(`#${e.id}`).addEventListener("click", () => {
+ socket.emit("done command", parseInt(e.id.replace("cmd", "")));
});
e.remove();
}
@@ -55,16 +58,13 @@ function waiter() {
i = waiting.children.length;
else
i = 3 - WIP.children.length;
- for (i-=1; i >= 0; i--) {
- socket.emit("WIP command", {"id": waiting.children[i].querySelector("h1").innerHTML})
- }
+ for (i-=1; i >= 0; i--)
+ socket.emit("WIP command", waiting.children[i].querySelector("h1").innerHTML);
}
}
-socket.on("connect", data => {
- if (data === "ok") {
- socket.emit("list service");
- }
+socket.on("connected", () => {
+ socket.emit("list service");
});
socket.on("list command", data => {
@@ -75,49 +75,57 @@ socket.on("list command", data => {
child = e.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);
+ for (let c of data) {
+ addCmd(c);
}
waiter();
});
socket.on("list service", data => {
- if (Object.keys(data).length === 0)
+ if (!data || Object.keys(data).length === 0) {
alert("No service set !");
- else
+ } else
socket.emit("list command");
});
+socket.on("set service", () => {
+ socket.emit("list service");
+})
+
socket.on("new command", data => {
- addcmd(data.id, data.plate, data.ingredient, data.sauce, data.drink, data.dessert, data.state, data.client, data.sandwich);
+ addCmd(data);
waiter();
});
-socket.on("cleared command", data => {
- wait(document.getElementById((`cmd${data.id}`)));
+socket.on("clear command", data => {
+ wait(document.getElementById((`cmd${data}`)));
waiter();
});
-socket.on("WIPed command", data => {
- WIPed(document.getElementById((`cmd${data.id}`)), data.sandwich);
+socket.on("WIP command", data => {
+ WIPed(document.getElementById((`cmd${data.number}`)), data.sandwich);
waiter();
});
-socket.on("finish command", data => {
- finish(document.getElementById((`cmd${data.id}`)));
+socket.on("done command", data => {
+ finish(document.getElementById((`cmd${data}`)));
waiter();
});
-socket.on("gave command", data => {
- finish(document.getElementById((`cmd${data.id}`)));
+socket.on("give command", data => {
+ finish(document.getElementById((`cmd${data}`)));
waiter();
});
-socket.on("glitched command", data => {
- finish(document.getElementById(`cmd${data.id}`));
+socket.on("error command", data => {
+ finish(document.getElementById(`cmd${data}`));
waiter();
});
+socket.on("internal error", () => {
+ alert("An error occurred !");
+})
+
document.addEventListener("keyup", ev => {
let keys = [["Digit1", "Numpad1"], ["Digit2", "Numpad2"], ["Digit3", "Numpad3"]];
for (let i=0; i {
socket.on("set service", () => {
console.log("close !")
window.close();
-})
+});
socket.on("fail add user", data => {
alert("User creation fail !");
@@ -76,7 +76,7 @@ socket.on("fail add user", data => {
socket.on("internal error", () => {
alert("An error occurred !");
-})
+});
document.querySelectorAll("input[type='text']").forEach(e => {
e.addEventListener("keyup", ev => {hinter(ev)})
diff --git a/sockets/WIPCommand.js b/sockets/WIPCommand.js
new file mode 100644
index 0000000..1432fbc
--- /dev/null
+++ b/sockets/WIPCommand.js
@@ -0,0 +1,40 @@
+const models = require("../models");
+
+module.exports = socket => {
+ return async (data) => {
+ try {
+ let sandwich;
+ let c = await models.Command.findOne({where: {number: {[models.Sequelize.Op.eq]: data}, date: {[models.Sequelize.Op.eq]: new Date()}}});
+ let s = await models.Service.findOne({where:{date:{[models.Sequelize.Op.eq]: new Date()}}, include: ["sandwich1", "sandwich2", "sandwich3"]});
+ if (!c)
+ throw new Error("Command not found")
+ else if (!s)
+ throw new Error("Service not found");
+
+ for (let sn of ["sandwich1", "sandwich2", "sandwich3"]) {
+ console.log(sn + " " + s[sn + "Busy"])
+ if (!s[sn + "Busy"]) {
+ s[sn + "Busy"] = true;
+ sandwich = s[sn];
+ break;
+ }
+ }
+
+ if (sandwich) {
+ c.WIP = true;
+ await c.setSandwich(sandwich);
+ await c.save();
+ await s.save();
+ let send = {
+ number: data,
+ sandwich: sandwich.username
+ }
+ socket.emit("WIP command", send);
+ socket.broadcast.emit("WIP command", send);
+ }
+ } catch (e) {
+ socket.emit("internal error");
+ console.error(e);
+ }
+ }
+}
diff --git a/sockets/clearCommand.js b/sockets/clearCommand.js
index e9ceaf6..334b839 100644
--- a/sockets/clearCommand.js
+++ b/sockets/clearCommand.js
@@ -1,5 +1,4 @@
const models = require("../models");
-const utils = require("./utils");
module.exports = socket => {
return async (data) => {
@@ -11,7 +10,6 @@ module.exports = socket => {
c.give = null;
c.error = false;
- utils.resetService(c, await models.Service.findOne({where:{date:{[models.Sequelize.Op.eq]: new Date()}}}));
c.WIP = false;
await c.save();
diff --git a/sockets/doneCommand.js b/sockets/doneCommand.js
new file mode 100644
index 0000000..2eb8ce2
--- /dev/null
+++ b/sockets/doneCommand.js
@@ -0,0 +1,23 @@
+const models = require("../models");
+const utils = require("./utils");
+
+module.exports = socket => {
+ return async (data) => {
+ try {
+ let c = await models.Command.findOne({where: {number: {[models.Sequelize.Op.eq]: data}, date: {[models.Sequelize.Op.eq]: new Date()}}});
+ if (!c)
+ throw new Error("Command not found");
+
+ c.done = new Date();
+ await utils.resetService(c);
+ c.WIP = false;
+
+ await c.save();
+ socket.emit("done command", data);
+ socket.broadcast.emit("done command", data);
+ } catch (e) {
+ socket.emit("internal error");
+ console.error(e);
+ }
+ }
+}
diff --git a/sockets/giveCommand.js b/sockets/giveCommand.js
index 880feb3..d42277f 100644
--- a/sockets/giveCommand.js
+++ b/sockets/giveCommand.js
@@ -10,7 +10,7 @@ module.exports = socket => {
c.give = new Date()
- utils.resetService(c, await models.Service.findOne({where:{date:{[models.Sequelize.Op.eq]: new Date()}}}));
+ await utils.resetService(c);
c.WIP = false;
await c.save();
diff --git a/sockets/index.js b/sockets/index.js
index f368407..a81cfe8 100644
--- a/sockets/index.js
+++ b/sockets/index.js
@@ -10,6 +10,8 @@ const addCommand = require("./addCommand");
const addUSer = require("./addUser");
const setService = require("./setService");
const giveCommand = require("./giveCommand");
+const WIPCommand = require("./WIPCommand");
+const doneCommand = require("./doneCommand");
const errorCommand = require("./errorCommand");
const clearCommand = require("./clearCommand");
const price = require("./price")
@@ -28,6 +30,8 @@ module.exports = socket => {
socket.on("add user", addUSer(socket));
socket.on("set service", setService(socket));
socket.on("give command", giveCommand(socket));
+ socket.on("WIP command", WIPCommand(socket));
+ socket.on("done command", doneCommand(socket));
socket.on("error command", errorCommand(socket));
socket.on("clear command", clearCommand(socket));
socket.on("price", price(socket));
diff --git a/sockets/utils.js b/sockets/utils.js
index 138e076..59fd784 100644
--- a/sockets/utils.js
+++ b/sockets/utils.js
@@ -17,11 +17,16 @@ function commandExport (c) {
}
}
-function resetService(c, service) {
+async function resetService(c) {
+ let service = await models.Service.findOne({where:{date:{[models.Sequelize.Op.eq]: new Date()}}, include: ["sandwich1", "sandwich2", "sandwich3"]});
if (c.WIP && service) {
- let sandwiches = [service.sandwich1Id, service.sandwich2Id, service.sandwich3Id]
- if (c.sandwichId in sandwiches)
- service["sandwich"+sandwiches.indexOf(c.sandwichId)+1] = false;
+ for (let sn of ["sandwich1", "sandwich2", "sandwich3"]) {
+ if (service[sn].username === c.sandwichUsername) {
+ service[sn + "Busy"] = false;
+ await service.save();
+ break;
+ }
+ }
}
}