ecommerce-website/routes/listorder.js

111 lines
4.7 KiB
JavaScript
Raw Normal View History

2024-03-10 20:04:53 +00:00
const express = require('express');
const router = express.Router();
const sql = require('mssql');
const moment = require('moment');
const { getUser } = require('../util.js');
router.get('/', async (req, res, next) => {
let pool;
let stmt;
try {
pool = await sql.connect(dbConfig);
let orderResults;
if (getUser(req).isAdmin) {
orderResults = await pool.request().query(`
select o.orderId, o.orderDate, o.customerId, c.firstName, c.lastName, o.totalAmount
from ordersummary as o
left join customer as c on o.customerId = c.customerId
`);
} else {
stmt = new sql.PreparedStatement(pool);
stmt.input('customerId', sql.Int);
await stmt.prepare(`
select o.orderId, o.orderDate, o.customerId, c.firstName, c.lastName, o.totalAmount
from ordersummary as o
left join customer as c on o.customerId = c.customerId
where o.customerId = @customerId
`);
orderResults = await stmt.execute({customerId: getUser(req).id});
}
const productResults = await pool.request().query(`
select orderId, productId, quantity, price from orderproduct
`);
res.render('layouts/main', {
loggedIn: getUser(req) != null,
user: getUser(req),
spacer: true,
content: `
<!DOCTYPE html>
<html lang='en'>
<head>
<title>Nat & Samira's Grocery Order List</title>
</head>
<body>
<h1>Order List</h1>
<table>
<tbody>
<tr>
<th>Customer ID</th>
<th>Order Date</th>
<th>Customer ID</th>
<th>Customer Name</th>
<th>Total Amount</th>
</tr>
${orderResults.recordset.map(row => {
const products = productResults.recordset.filter(r => r.orderId == row.orderId);
return `
<tr>
<td>${row.orderId}</td>
<td>${row.orderDate.toDateString()}</td>
<td>${row.customerId}</td>
<td>${row.firstName} ${row.lastName}</td>
<td>$${row.totalAmount.toFixed(2)}</td>
</tr>
<tr>
<td colspan='5'>
<table>
<tbody>
<tr>
<th>Prouct Id</th>
<th>Quantity</th>
<th>Price</th>
</tr>
${products.map(productRow => `
<tr>
<td>${productRow.productId}</td>
<td>${productRow.quantity}</td>
<td>$${productRow.price.toFixed(2)}</td>
</tr>
`).join('\n')}
</tbody>
</table>
</td>
</tr>
`;
}).join('\n')}
</tbody>
</table>
</body>
</html>
`
});
pool.close();
} catch (err) {
res.write(err.toString());
res.end();
} finally {
if (stmt) stmt.unprepare();
if (pool) pool.close();
}
});
module.exports = router;