87 lines
3.7 KiB
JavaScript
87 lines
3.7 KiB
JavaScript
|
|
const express = require('express');
|
||
|
|
const router = express.Router();
|
||
|
|
const { getDb, logAudit } = require('../db');
|
||
|
|
|
||
|
|
router.get('/', (req, res) => {
|
||
|
|
const db = getDb();
|
||
|
|
const { type, status, client_id } = req.query;
|
||
|
|
let sql = `SELECT e.*, c.name as client_name
|
||
|
|
FROM engagements e JOIN clients c ON c.id = e.client_id WHERE 1=1`;
|
||
|
|
const params = [];
|
||
|
|
if (type) { sql += ' AND e.type = ?'; params.push(type); }
|
||
|
|
if (status) { sql += ' AND e.status = ?'; params.push(status); }
|
||
|
|
if (client_id) { sql += ' AND e.client_id = ?'; params.push(client_id); }
|
||
|
|
sql += ' ORDER BY e.updated_at DESC';
|
||
|
|
const engagements = db.prepare(sql).all(...params);
|
||
|
|
res.render('engagement-list', { engagements, filters: req.query });
|
||
|
|
});
|
||
|
|
|
||
|
|
router.get('/new', (req, res) => {
|
||
|
|
const db = getDb();
|
||
|
|
const clients = db.prepare('SELECT id, name FROM clients ORDER BY name').all();
|
||
|
|
res.render('engagement-form', { engagement: null, clients, selected: req.query.client_id || null, error: null });
|
||
|
|
});
|
||
|
|
|
||
|
|
router.get('/new/:clientId', (req, res) => {
|
||
|
|
const db = getDb();
|
||
|
|
const clients = db.prepare('SELECT id, name FROM clients ORDER BY name').all();
|
||
|
|
const selected = req.params.clientId;
|
||
|
|
res.render('engagement-form', { engagement: null, clients, selected, error: null });
|
||
|
|
});
|
||
|
|
|
||
|
|
router.post('/new', (req, res) => {
|
||
|
|
const db = getDb();
|
||
|
|
const { client_id, type, title, description, status, start_date, end_date } = req.body;
|
||
|
|
if (!client_id || !title || !title.trim()) {
|
||
|
|
const clients = db.prepare('SELECT id, name FROM clients ORDER BY name').all();
|
||
|
|
return res.render('engagement-form', { engagement: null, clients, selected: client_id || null, error: 'Titel is verplicht' });
|
||
|
|
}
|
||
|
|
const result = db.prepare(`INSERT INTO engagements (client_id, type, title, description, status, start_date, end_date)
|
||
|
|
VALUES (?, ?, ?, ?, ?, ?, ?)`).run(client_id, type, title, description, status || 'planned', start_date, end_date);
|
||
|
|
res.redirect('/engagements/' + result.lastInsertRowid);
|
||
|
|
});
|
||
|
|
|
||
|
|
router.get('/:id', (req, res) => {
|
||
|
|
const db = getDb();
|
||
|
|
const engagement = db.prepare(`
|
||
|
|
SELECT e.*, c.name as client_name
|
||
|
|
FROM engagements e
|
||
|
|
JOIN clients c ON c.id = e.client_id
|
||
|
|
WHERE e.id = ?
|
||
|
|
`).get(req.params.id);
|
||
|
|
if (!engagement) return res.redirect('/engagements');
|
||
|
|
const tasks = db.prepare('SELECT * FROM tasks WHERE engagement_id = ? ORDER BY created_at DESC').all(req.params.id);
|
||
|
|
res.render('engagement-detail', { engagement, tasks });
|
||
|
|
});
|
||
|
|
|
||
|
|
router.get('/:id/edit', (req, res) => {
|
||
|
|
const db = getDb();
|
||
|
|
const engagement = db.prepare('SELECT * FROM engagements WHERE id = ?').get(req.params.id);
|
||
|
|
if (!engagement) return res.redirect('/engagements');
|
||
|
|
const clients = db.prepare('SELECT id, name FROM clients ORDER BY name').all();
|
||
|
|
res.render('engagement-form', { engagement, clients, selected: engagement.client_id, error: null });
|
||
|
|
});
|
||
|
|
|
||
|
|
router.post('/:id/edit', (req, res) => {
|
||
|
|
const db = getDb();
|
||
|
|
const { client_id, type, title, description, status, start_date, end_date, outcome } = req.body;
|
||
|
|
db.prepare(`UPDATE engagements SET client_id=?, type=?, title=?, description=?, status=?, start_date=?, end_date=?, outcome=?, updated_at=datetime('now') WHERE id=?`)
|
||
|
|
.run(client_id, type, title, description, status, start_date, end_date, outcome, req.params.id);
|
||
|
|
res.redirect('/engagements/' + req.params.id);
|
||
|
|
});
|
||
|
|
|
||
|
|
router.post('/:id/delete', (req, res) => {
|
||
|
|
const db = getDb();
|
||
|
|
db.prepare('DELETE FROM engagements WHERE id = ?').run(req.params.id);
|
||
|
|
res.redirect('/engagements');
|
||
|
|
});
|
||
|
|
|
||
|
|
router.post('/:id/status', (req, res) => {
|
||
|
|
const db = getDb();
|
||
|
|
db.prepare("UPDATE engagements SET status=?, updated_at=datetime('now') WHERE id=?")
|
||
|
|
.run(req.body.status, req.params.id);
|
||
|
|
res.redirect('/engagements/' + req.params.id);
|
||
|
|
});
|
||
|
|
|
||
|
|
module.exports = router;
|