Files
mek-tech-consulting/lib/crm.js
T

51 lines
2.0 KiB
JavaScript

const { getDb } = require('../db');
function crmContextMiddleware(req, res, next) {
const db = getDb();
const qClientId = req.query.client_id || req.query.clientId;
if (qClientId && req.session) {
req.session.activeClientId = parseInt(qClientId, 10) || null;
}
const activeClientId = (req.session && req.session.activeClientId) || null;
let activeClient = null;
if (activeClientId) {
activeClient = db.prepare('SELECT id, name, status, industry FROM clients WHERE id = ?').get(activeClientId);
if (!activeClient) req.session.activeClientId = null;
}
const allClients = db.prepare('SELECT id, name, status FROM clients ORDER BY name').all();
res.locals.activeClient = activeClient;
res.locals.activeClientId = activeClient ? activeClient.id : null;
res.locals.allClients = allClients;
res.locals.clientQuery = (path) => {
if (!activeClient) return path;
const sep = path.includes('?') ? '&' : '?';
return `${path}${sep}client_id=${activeClient.id}`;
};
next();
}
function getClientHubLinks(clientId) {
const id = clientId;
const q = `?client_id=${id}`;
return [
{ href: `/clients/${id}`, icon: 'eye', label: 'Overzicht' },
{ href: `/engagements/new${q}`, icon: 'briefcase', label: 'Engagement' },
{ href: `/consulting${q}`, icon: 'clipboard-list', label: 'Framework' },
{ href: `/assess/${id}`, icon: 'file-search', label: 'Assessment' },
{ href: `/architecture/new/${id}`, icon: 'network', label: 'Design' },
{ href: `/architecture/designer${q}`, icon: 'pen-tool', label: 'Pro Designer' },
{ href: `/quality${q}`, icon: 'shield-check', label: 'Data Quality' },
{ href: `/racks${q}`, icon: 'server', label: 'Racks' },
{ href: `/networking${q}`, icon: 'share-2', label: 'Netwerk' },
{ href: `/time${q}`, icon: 'clock', label: 'Uren' },
{ href: `/invoices/new${q}`, icon: 'receipt', label: 'Factuur' },
{ href: `/email/compose${q}`, icon: 'mail', label: 'Email' }
];
}
module.exports = { crmContextMiddleware, getClientHubLinks };