Initial commit: Club DynaSQY
This commit is contained in:
@@ -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' });
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user