Skip to content

Commit

Permalink
WIP Admin users
Browse files Browse the repository at this point in the history
  • Loading branch information
megastary committed Mar 18, 2024
1 parent 7f8345a commit 8928191
Show file tree
Hide file tree
Showing 8 changed files with 322 additions and 134 deletions.
2 changes: 2 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ import editProductRouter from "./routes/edit_product.js";
import dashboardRouter from "./routes/admin/admin_dashboard.js";
import newCategoryRouter from "./routes/admin/new_category.js";
import editCategoryRouter from "./routes/admin/edit_category.js";
import usersRouter from "./routes/admin/admin_users.js";
// Access for kiosk
import kioskKeypadRouter from "./routes/kiosk_keypad.js";
import kioskShopRouter from "./routes/kiosk_shop.js";
Expand Down Expand Up @@ -165,6 +166,7 @@ app.use("/admin_invoice", invoiceRouter);
app.use("/admin_payments", paymentsRouter);
app.use("/new_category", newCategoryRouter);
app.use("/edit_category", editCategoryRouter);
app.use("/admin_users", usersRouter);
// Access for kiosk
app.use("/kiosk_keypad", kioskKeypadRouter);
app.use("/kiosk_shop", kioskShopRouter);
Expand Down
39 changes: 39 additions & 0 deletions public/javascripts/admin_users.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// Initialize DataTables
// dom customizes header paging, search and export
// columndefs makes id unsortable, sortabledate hidden, date linked for filtering and displays currency next to price
// sort by date by default
document.addEventListener("DOMContentLoaded", function () {
$("#table-users").DataTable({
dom:
"<'row'<'col-sm-12 col-md-4'l><'col-sm-12 col-md-4'f><'col-sm-12 col-md-4'B>>" +
"<'row'<'col-sm-12'tr>>" +
"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
buttons: [
{
extend: "print",
exportOptions: {
columns: [1, 2, 3, 4, 5, 6, 7, 8],
},
},
"copyHtml5",
"excelHtml5",
"csvHtml5",
{
extend: "pdfHtml5",
exportOptions: {
columns: [1, 2, 3, 4, 5, 6, 7, 8],
},
},
],
language: {
url: "/datatables/cs.json",
searchPlaceholder: "Hledaný výraz",
},
lengthMenu: [
[10, 25, 50, -1],
[10, 25, 50, "Vše"],
],
order: [[0, "asc"]],
stateSave: false,
});
});
152 changes: 76 additions & 76 deletions routes/add_products.js
Original file line number Diff line number Diff line change
@@ -1,76 +1,76 @@
import { Router } from 'express'
import { ensureAuthenticated } from '../functions/ensureAuthenticated.js'
import Product from '../models/product.js'
import Delivery from '../models/delivery.js'
import csrf from 'csurf'
import logger from '../functions/logger.js'
import { sendFavoriteProductNotification } from '../functions/sendFavoriteProductNotification.js'
var router = Router()
var csrfProtection = csrf()
router.use(csrfProtection)
import { Router } from "express";
import { ensureAuthenticated } from "../functions/ensureAuthenticated.js";
import Product from "../models/product.js";
import Delivery from "../models/delivery.js";
import csrf from "csurf";
import logger from "../functions/logger.js";
import { sendFavoriteProductNotification } from "../functions/sendFavoriteProductNotification.js";
var router = Router();
var csrfProtection = csrf();
router.use(csrfProtection);

/* GET add product page. */
router.get('/', ensureAuthenticated, function (req, res) {
router.get("/", ensureAuthenticated, function (req, res) {
if (!req.user.supplier) {
logger.warn(
`server.routes.addproducts.get__User tried to access supplier page without permission.`,
{
metadata: {
result: req.user
}
result: req.user,
},
}
)
res.redirect('/')
return
);
res.redirect("/");
return;
}
if (req.session.alert) {
var alert = req.session.alert
delete req.session.alert
var alert = req.session.alert;
delete req.session.alert;
}
Product.find()
.sort([['displayName', 1]])
.sort([["displayName", 1]])
.then((product) => {
logger.debug(
`server.routes.addproducts.get__Successfully loaded ${product.length} products.`,
{
metadata: {
result: product
}
result: product,
},
}
)
);

res.render('shop/add_products', {
title: 'Naskladnit | Lednice IT',
res.render("shop/add_products", {
title: "Naskladnit | Lednice IT",
products: product,
user: req.user,
alert: alert,
csrfToken: req.csrfToken()
})
csrfToken: req.csrfToken(),
});
})
.catch((err) => {
logger.error(`server.routes.addproducts.get__Failed to load products.`, {
metadata: {
error: err.message
}
})
res.status(err.status || 500)
res.render('error')
})
})
error: err.message,
},
});
res.status(err.status || 500);
res.render("error");
});
});

/* POST add product form handle. */
router.post('/', ensureAuthenticated, function (req, res) {
router.post("/", ensureAuthenticated, function (req, res) {
if (!req.user.supplier) {
logger.warn(
`server.routes.addproducts.post__User tried to access supplier page without permission.`,
{
metadata: {
result: req.user
}
result: req.user,
},
}
)
res.redirect('/')
return
);
res.redirect("/");
return;
}

Product.findById(req.body.product_id)
Expand All @@ -79,17 +79,17 @@ router.post('/', ensureAuthenticated, function (req, res) {
`server.routes.addproducts.post__Successfully found product ${product.displayName} in the database.`,
{
metadata: {
result: product
}
result: product,
},
}
)
);
var newDelivery = new Delivery({
supplierId: req.user.id,
productId: product._id,
amount_supplied: req.body.product_amount,
amount_left: req.body.product_amount,
price: req.body.product_price
})
price: req.body.product_price,
});

newDelivery
.save()
Expand All @@ -98,64 +98,64 @@ router.post('/', ensureAuthenticated, function (req, res) {
`server.routes.addproducts.post__Successfully added product:[${product.displayName}] amount:[${delivery.amount_supplied}] price:${delivery.price}.`,
{
metadata: {
result: delivery
}
result: delivery,
},
}
)
);
const alert = {
type: 'success',
type: "success",
message: `Produkt ${product.displayName} přidán v počtu ${delivery.amount_supplied} ks za ${delivery.price} Kč.`,
success: 1
}
req.session.alert = alert
res.redirect('/add_products')
success: 1,
};
req.session.alert = alert;
res.redirect("/add_products");
sendFavoriteProductNotification(
product._id,
product.displayName,
product.imagePath,
req.user.displayName,
delivery.amount_supplied,
delivery.price
)
);
})
.catch((err) => {
logger.error(
`server.routes.addproducts.post__Failed to add product:[${product.displayName}] amount:[${req.body.product_amount}] price:${req.body.product_price}.`,
{
metadata: {
result: err.message
}
result: err.message,
},
}
)
);
const alert = {
type: 'danger',
component: 'db',
type: "danger",
component: "db",
message: err.message,
danger: 1
}
req.session.alert = alert
res.redirect('/add_products')
})
danger: 1,
};
req.session.alert = alert;
res.redirect("/add_products");
});
})
.catch((err) => {
logger.error(
`server.routes.addproducts.post__Failed to find product ${req.body.product_id} in the database.`,
{
metadata: {
error: err.message
}
error: err.message,
},
}
)
);
const alert = {
type: 'danger',
component: 'db',
type: "danger",
component: "db",
message: err.message,
danger: 1
}
req.session.alert = alert
res.redirect('/add_products')
return
})
})
danger: 1,
};
req.session.alert = alert;
res.redirect("/add_products");
return;
});
});

export default router
export default router;
58 changes: 58 additions & 0 deletions routes/admin/admin_users.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import { Router } from "express";
import moment from "moment";
import User from "../../models/user.js";
import { ensureAuthenticated } from "../../functions/ensureAuthenticated.js";
import { checkKiosk } from "../../functions/checkKiosk.js";
import logger from "../../functions/logger.js";
var router = Router();
moment.locale("cs");

/* GET users page. */
router.get("/", ensureAuthenticated, checkKiosk, function (req, res) {
if (!req.user.admin) {
logger.warn(
`server.routes.adminusers.get__User tried to access admin page without permission.`,
{
metadata: {
result: req.user,
},
}
);
res.redirect("/");
return;
}

if (req.session.alert) {
var alert = req.session.alert;
delete req.session.alert;
}
User.find()
.then((docs) => {
if (docs) {
logger.debug(
`server.routes.adminusers.get__Successfully loaded ${docs.length} users.`,
{
metadata: {
result: docs,
},
}
);
}

res.render("admin/admin_users", {
title: "Uživatelé | Lednice IT",
users: docs,
alert: alert,
user: req.user,
});
})
.catch((err) => {
logger.error(`server.routes.adminusers.get__Failed to load users.`, {
metadata: {
error: err.message,
},
});
});
});

export default router;
14 changes: 4 additions & 10 deletions routes/orders.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,10 @@ router.get("/", ensureAuthenticated, checkKiosk, function (req, res) {
// Order.listIndexes().then((indexes) => {
// console.log(indexes);
// });

if (req.session.alert) {
var alert = req.session.alert;
delete req.session.alert;
}
Order.aggregate([
{
$match: filter,
Expand Down Expand Up @@ -128,15 +131,6 @@ router.get("/", ensureAuthenticated, checkKiosk, function (req, res) {
},
])
.then((docs) => {
if (req.query.a) {
var alert = {
type: req.query.a,
component: req.query.c,
message: req.query.m,
success: req.query.s,
danger: req.query.d,
};
}
if (docs[0]) {
logger.debug(
`server.routes.orders.get__Successfully loaded ${docs[0].results.length} orders.`,
Expand Down

0 comments on commit 8928191

Please sign in to comment.