Initial commit: Club DynaSQY

This commit is contained in:
2026-08-23 09:04:47 +00:00
commit 0875890dc7
145 changed files with 16947 additions and 0 deletions
+65
View File
@@ -0,0 +1,65 @@
const pool = require('../config/db');
function escapeCsv(val) {
if (val == null) return '';
const s = String(val);
return s.includes(',') || s.includes('"') || s.includes('\n') || s.includes('\r')
? `"${s.replace(/"/g, '""')}"`
: s;
}
function rowsToCsv(headers, rows) {
const lines = [headers.map(escapeCsv).join(',')];
for (const row of rows) {
lines.push(headers.map((h) => escapeCsv(row[h])).join(','));
}
return '\uFEFF' + lines.join('\r\n');
}
exports.exportCsv = async (req, res) => {
try {
const [members] = await pool.query(
'SELECT id, prenom, nom, email, telephone, societe, fonction, activite, site_web, role, actif, date_echeance, created_at FROM users ORDER BY nom, prenom'
);
const [guests] = await pool.query(
`SELECT i.id, i.prenom, i.nom, i.email, i.telephone, i.societe, i.activite, i.site_web, i.statut, i.visit_number, i.invite_par_id, u.prenom AS invite_par_prenom, u.nom AS invite_par_nom, i.date_club, i.commentaires, i.created_at
FROM invites i
LEFT JOIN users u ON u.id = i.invite_par_id
ORDER BY i.date_club DESC, i.nom, i.prenom`
);
const [recs] = await pool.query(
`SELECT r.id, r.date, r.nom_prospect, r.type, r.transformee, r.ca_realise,
m.prenom AS membre_prenom, m.nom AS membre_nom, m.societe AS membre_societe,
d.prenom AS dest_prenom, d.nom AS dest_nom, d.societe AS dest_societe
FROM recommandations r
LEFT JOIN users m ON m.id = r.membre_id
LEFT JOIN users d ON d.id = r.destinataire_id
ORDER BY r.date DESC`
);
const membresCsv = rowsToCsv(
['id', 'prenom', 'nom', 'email', 'telephone', 'societe', 'fonction', 'activite', 'site_web', 'role', 'actif', 'date_echeance', 'date_inscription'],
members
);
const invitesCsv = rowsToCsv(
['id', 'prenom', 'nom', 'email', 'telephone', 'societe', 'activite', 'site_web', 'statut', 'visite_numero', 'invite_par_id', 'invite_par_prenom', 'invite_par_nom', 'date_club', 'commentaires', 'date_creation'],
guests
);
const recosCsv = rowsToCsv(
['id', 'date', 'nom_prospect', 'type', 'transformee', 'ca_realise', 'membre_prenom', 'membre_nom', 'membre_societe', 'destinataire_prenom', 'destinataire_nom', 'destinataire_societe'],
recs
);
const date = new Date().toISOString().slice(0, 10);
res.setHeader('Content-Type', 'text/csv; charset=utf-8');
res.setHeader('Content-Disposition', `attachment; filename="dyna-biz-export-${date}.csv"`);
res.write('=== MEMBRES ===\r\n' + membresCsv + '\r\n\r\n');
res.write('=== INVITES ===\r\n' + invitesCsv + '\r\n\r\n');
res.write('=== RECOMMANDATIONS ===\r\n' + recosCsv);
res.end();
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Erreur export' });
}
};