96 lines
3.5 KiB
JavaScript
96 lines
3.5 KiB
JavaScript
const express = require("express");
|
|
const router = express.Router();
|
|
const sessionCheck = require("../../../middlewares/sessionCheck");
|
|
const error = require("../../utils/error");
|
|
const models = require("../../../models");
|
|
|
|
|
|
router.get("/", sessionCheck(3), async (req, res) => {
|
|
if (!req.query.id)
|
|
return error(req, res, "Missing arg", 400);
|
|
|
|
let order = await models.Order.findByPk(req.query.id, {include: [models.Sandwich, models.User, models.Department]});
|
|
if (!order)
|
|
return error(req, res, "Invalid order !", 400);
|
|
|
|
res.render("admin/orders/edit", {
|
|
title: "SOD - Orders administration",
|
|
order: order,
|
|
departments: await models.Department.findAll(),
|
|
sandwiches: await models.Sandwich.findAll(),
|
|
users: await models.User.findAll()
|
|
});
|
|
}).post("/", sessionCheck(3), async (req, res) => {
|
|
if (!req.body.id || !req.body.department || !req.body.firstName || !req.body.lastName ||
|
|
req.body.sandwiches.length < 1 || req.body.dates.length < 1 ||
|
|
req.body.sandwiches.length !== req.body.dates.length)
|
|
return error(req, res, "Missing arguments !", 400);
|
|
|
|
let order = await models.Order.findByPk(req.body.id, {include: [models.Sandwich, models.User, models.Department]});
|
|
if (!order)
|
|
return error(req, res, "Invalid order edit !", 400, "Invalid order");
|
|
|
|
let department = await models.Department.findByPk(req.body.department);
|
|
if (!department)
|
|
return error(req, res, "Invalid order edit !", 400, "Invalid department");
|
|
if (department.name !== order.Department.name)
|
|
await order.setDepartment(department);
|
|
|
|
let user = null;
|
|
if (req.body.username)
|
|
user = await models.User.findOne({where: {username: req.body.username}});
|
|
if (user && (!order.User || user.username !== order.User.username))
|
|
await order.setUser(user);
|
|
else if (!user && order.User)
|
|
await order.setUser(null);
|
|
|
|
let sandwiches = [];
|
|
let price = 0;
|
|
for (let s in req.body.sandwiches) {
|
|
if (!req.body.dates[s])
|
|
return error(req, res, "Invalid order edit !", 400, "Sandwich without date");
|
|
|
|
let sandwich = await models.Sandwich.findByPk(req.body.sandwiches[s]);
|
|
if (!sandwich)
|
|
return error(req, res, "Invalid order edit !", 400, "Invalid sandwich: "+req.body.sandwiches[s]);
|
|
|
|
let date = new Date(req.body.dates[s]);
|
|
|
|
let give = false;
|
|
if (req.body.give && req.body.give[s])
|
|
give = req.body.give[s];
|
|
|
|
try {
|
|
sandwiches.push([sandwich.name, date.toISOString().substring(0, 10), give]);
|
|
} catch {
|
|
return error(req, res, "Invalid order edit !", 400, "Invalid date");
|
|
}
|
|
price += sandwich.price;
|
|
}
|
|
|
|
if (order.price !== price)
|
|
order.price = price;
|
|
|
|
if (req.body.firstName !== order.firstName)
|
|
order.firstName = req.body.firstName;
|
|
if (req.body.lastName !== order.lastName)
|
|
order.lastName = req.body.lastName;
|
|
if (req.body.paid !== order.paid)
|
|
order.paid = Boolean(req.body.paid);
|
|
|
|
await order.removeSandwiches(order.Sandwiches);
|
|
for (let data of sandwiches)
|
|
try {
|
|
await models.SandwichOrder.create({OrderId: order.id, SandwichName: data[0], date: data[1], give: data[2]});
|
|
} catch (e) {
|
|
await order.destroy();
|
|
error(req, res, "Invalid order !");
|
|
throw e;
|
|
}
|
|
|
|
await order.save();
|
|
|
|
res.redirect("/admin/orders");
|
|
});
|
|
|
|
module.exports = router;
|