Files
mek-tech-consulting/routes/calendar.js
T

65 lines
2.8 KiB
JavaScript

const express = require('express');
const router = express.Router();
const { getDb, logAudit } = require('../db');
router.get('/', (req, res) => {
const db = getDb();
const events = db.prepare(`
SELECT e.*, c.name as client_name
FROM calendar_events e
LEFT JOIN clients c ON c.id = e.client_id
WHERE e.user_id = ? OR e.user_id IS NULL
ORDER BY e.start_time ASC
`).all(req.session.userId);
const clients = db.prepare('SELECT id, name FROM clients ORDER BY name').all();
const engagements = db.prepare('SELECT id, title FROM engagements ORDER BY title').all();
res.render('calendar-list', { events, clients, engagements });
});
router.get('/api/events', (req, res) => {
const db = getDb();
const events = db.prepare(`
SELECT e.*, c.name as client_name
FROM calendar_events e
LEFT JOIN clients c ON c.id = e.client_id
WHERE (e.user_id = ? OR e.user_id IS NULL)
ORDER BY e.start_time ASC
`).all(req.session.userId);
res.json(events.map(e => ({
id: e.id,
title: e.title,
start: e.start_time,
end: e.end_time,
allDay: !!e.all_day,
color: e.color,
extendedProps: { description: e.description, client_name: e.client_name, event_type: e.event_type }
})));
});
router.post('/new', (req, res) => {
const db = getDb();
const { title, description, client_id, engagement_id, event_type, start_time, end_time, all_day, color } = req.body;
if (!title || !start_time) return res.redirect('/calendar');
db.prepare('INSERT INTO calendar_events (user_id, client_id, engagement_id, title, description, event_type, start_time, end_time, all_day, color) VALUES (?,?,?,?,?,?,?,?,?,?)')
.run(req.session.userId, client_id || null, engagement_id || null, title, description || '', event_type || 'meeting', start_time, end_time || start_time, all_day === '1' ? 1 : 0, color || '#58a6ff');
logAudit(req.session.userId, req.session.username, 'event_created', 'calendar_event', null, `Event "${title}" aangemaakt`);
res.redirect('/calendar');
});
router.post('/:id/edit', (req, res) => {
const db = getDb();
const { title, description, client_id, engagement_id, event_type, start_time, end_time, all_day, color } = req.body;
if (!title) return res.redirect('/calendar');
db.prepare("UPDATE calendar_events SET title=?, description=?, client_id=?, engagement_id=?, event_type=?, start_time=?, end_time=?, all_day=?, color=?, updated_at=datetime('now') WHERE id=?")
.run(title, description, client_id || null, engagement_id || null, event_type, start_time, end_time, all_day === '1' ? 1 : 0, color, req.params.id);
res.redirect('/calendar');
});
router.post('/:id/delete', (req, res) => {
const db = getDb();
db.prepare('DELETE FROM calendar_events WHERE id = ?').run(req.params.id);
res.redirect('/calendar');
});
module.exports = router;