70 lines
2.6 KiB
JavaScript
70 lines
2.6 KiB
JavaScript
const pool = require('../config/db');
|
|
const { logActivity } = require('../services/activityLog');
|
|
|
|
exports.listByMember = async (req, res) => {
|
|
try {
|
|
const [rows] = await pool.query(`
|
|
SELECT a.*,
|
|
u.prenom AS created_prenom,
|
|
r.prenom AS remplace_prenom, r.nom AS remplace_nom,
|
|
rg.prenom AS remplace_guest_prenom, rg.nom AS remplace_guest_nom
|
|
FROM absences a
|
|
LEFT JOIN users u ON u.id = a.created_by
|
|
LEFT JOIN users r ON r.id = a.remplace_par_id AND (a.remplace_par_type = 'member' OR a.remplace_par_type IS NULL)
|
|
LEFT JOIN invites rg ON rg.id = a.remplace_par_guest_id AND a.remplace_par_type = 'guest'
|
|
WHERE a.membre_id = ?
|
|
ORDER BY a.date_absence DESC
|
|
`, [req.params.id]);
|
|
res.json(rows);
|
|
} catch (err) {
|
|
console.error(err);
|
|
res.status(500).json({ error: 'Erreur serveur' });
|
|
}
|
|
};
|
|
|
|
exports.create = async (req, res) => {
|
|
try {
|
|
const { membre_id, date_absence, motif, prevenu, remplace_par_type, remplace_par_guest_id, remplace_par_id } = req.body;
|
|
const rType = remplace_par_type === 'guest' && remplace_par_guest_id ? 'guest' : 'member'
|
|
const rMemberId = rType === 'member' ? (remplace_par_id || null) : null
|
|
const rGuestId = rType === 'guest' ? (remplace_par_guest_id || null) : null
|
|
await pool.query(
|
|
'INSERT INTO absences (membre_id, date_absence, motif, prevenu, remplace_par_id, remplace_par_type, remplace_par_guest_id, created_by) VALUES (?, ?, ?, ?, ?, ?, ?, ?)',
|
|
[membre_id, date_absence, motif || null, prevenu ? 1 : 0, rMemberId, rType, rGuestId, req.user.id]
|
|
);
|
|
logActivity(req, 'absence_ajout', { membre_id, date_absence });
|
|
res.status(201).json({ message: 'Absence enregistrée' });
|
|
} catch (err) {
|
|
console.error(err);
|
|
res.status(500).json({ error: 'Erreur serveur' });
|
|
}
|
|
};
|
|
|
|
exports.remove = async (req, res) => {
|
|
try {
|
|
await pool.query('DELETE FROM absences WHERE id = ?', [req.params.id]);
|
|
logActivity(req, 'absence_suppression', { absenceId: req.params.id });
|
|
res.json({ message: 'Absence supprimée' });
|
|
} catch (err) {
|
|
console.error(err);
|
|
res.status(500).json({ error: 'Erreur serveur' });
|
|
}
|
|
};
|
|
|
|
exports.stats = async (req, res) => {
|
|
try {
|
|
const [rows] = await pool.query(`
|
|
SELECT u.id, u.prenom, u.nom, COUNT(a.id) AS total_absences
|
|
FROM users u
|
|
LEFT JOIN absences a ON a.membre_id = u.id
|
|
WHERE u.actif = 1
|
|
GROUP BY u.id
|
|
ORDER BY total_absences DESC
|
|
LIMIT 10
|
|
`);
|
|
res.json(rows);
|
|
} catch (err) {
|
|
console.error(err);
|
|
res.status(500).json({ error: 'Erreur serveur' });
|
|
}
|
|
}; |