48 lines
2.7 KiB
JavaScript
48 lines
2.7 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
const { getDb, logAudit } = require('../db');
|
|
|
|
router.get('/', (req, res) => {
|
|
const db = getDb();
|
|
const clients = db.prepare('SELECT id, name FROM clients ORDER BY name').all();
|
|
const clientId = req.query.client_id || null;
|
|
const saved = req.query.saved === '1';
|
|
let client = null, assessments = [], prevAssessment = null;
|
|
if (clientId) {
|
|
client = db.prepare('SELECT * FROM clients WHERE id = ?').get(clientId);
|
|
assessments = db.prepare('SELECT * FROM assessments WHERE client_id = ? ORDER BY created_at DESC LIMIT 10').all(clientId);
|
|
if (assessments.length > 0) prevAssessment = assessments[0];
|
|
}
|
|
res.render('consultancy-framework', { clients, clientId, client, assessments, prevAssessment, saved, loadedAnswers: null, loadedReport: null });
|
|
});
|
|
|
|
router.post('/save', async (req, res) => {
|
|
const db = getDb();
|
|
const { client_id, answers, report } = req.body;
|
|
if (!client_id) return res.status(400).json({ error: 'Client is required' });
|
|
if (!answers) return res.status(400).json({ error: 'Answers required' });
|
|
const answersJson = typeof answers === 'string' ? answers : JSON.stringify(answers);
|
|
const reportJson = typeof report === 'string' ? report : JSON.stringify(report || {});
|
|
const result = db.prepare('INSERT INTO assessments (client_id, answers, report) VALUES (?, ?, ?)').run(client_id, answersJson, reportJson);
|
|
logAudit(req.session.userId, req.session.username, 'assessment_created', 'assessment', result.lastInsertRowid, 'Consultancy framework assessment');
|
|
const client = db.prepare('SELECT * FROM clients WHERE id = ?').get(client_id);
|
|
if (client && client.status === 'lead') {
|
|
db.prepare("UPDATE clients SET status='active', updated_at=datetime('now') WHERE id=?").run(client_id);
|
|
}
|
|
res.json({ id: result.lastInsertRowid, redirect: '/consulting?client_id=' + client_id + '&saved=1' });
|
|
});
|
|
|
|
router.get('/report/:id', (req, res) => {
|
|
const db = getDb();
|
|
const assessment = db.prepare('SELECT a.*, c.name as client_name FROM assessments a LEFT JOIN clients c ON c.id = a.client_id WHERE a.id = ?').get(req.params.id);
|
|
if (!assessment) return res.redirect('/consulting');
|
|
try {
|
|
const answers = JSON.parse(assessment.answers);
|
|
const report = JSON.parse(assessment.report);
|
|
const clients = db.prepare('SELECT id, name FROM clients ORDER BY name').all();
|
|
res.render('consultancy-framework', { clients, clientId: assessment.client_id, client: { name: assessment.client_name }, assessments: [], prevAssessment: assessment, saved: false, loadedAnswers: answers, loadedReport: report });
|
|
} catch(e) { res.redirect('/consulting?client_id=' + assessment.client_id); }
|
|
});
|
|
|
|
module.exports = router;
|