const { pool } = require('../config/databases'); // 📌 Afficher la liste des employés exports.index = async (req, res) => { try { const [staffs] = await pool.query('SELECT * FROM staffs'); res.json(staffs); } catch (err) { res.status(500).json({ error: 'Erreur lors de la récupération des employés' }); } }; // 📌 Afficher un employé pour modification exports.edit = async (req, res) => { const id = req.params.id; try { const [rows] = await pool.query('SELECT * FROM staffs WHERE id = ?', [id]); if (rows.length === 0) { return res.status(404).json({ message: 'Employé non trouvé' }); } res.json(rows[0]); } catch (err) { res.status(500).json({ error: 'Erreur lors de la récupération de l\'employé' }); } }; // 🖊️ Mettre à jour un employé exports.update = async (req, res) => { const id = req.params.id; const data = req.body; if (data.planning && typeof data.planning === 'object') { data.planning = JSON.stringify(data.planning); data.heures_semaine = calculerHeuresSemaine(req.body.planning); } try { await pool.query('UPDATE staffs SET ? WHERE id = ?', [data, id]); res.json({ message: 'Employé mis à jour avec succès' }); } catch (err) { res.status(500).json({ error: 'Erreur lors de la mise à jour' }); } }; // ➕ Afficher formulaire de création (en REST on ne fait rien ici) exports.create = (req, res) => { res.json({ message: 'Créer un nouvel employé' }); }; // 🗂️ Enregistrer un nouvel employé exports.store = async (req, res) => { const data = req.body; // Gérer le champ "nouveau poste" if (data.poste === 'nouveau_poste') { if (!data.nouveau_poste || data.nouveau_poste.trim() === '') { return res.status(400).json({ error: 'Le champ Nouveau poste est requis.' }); } data.poste = data.nouveau_poste.trim(); } // Convertir planning + calcul heures if (data.planning && typeof data.planning === 'object') { data.planning = JSON.stringify(data.planning); data.heures_semaine = calculerHeuresSemaine(req.body.planning); } else { data.heures_semaine = 0; } data.performance = 0; // Validation simple if (!data.nom || !data.prenom || !data.poste || !data.telephone) { return res.status(400).json({ error: 'Champs obligatoires manquants.' }); } try { await pool.query('INSERT INTO staffs SET ?', [data]); res.status(201).json({ message: '✅ Employé ajouté avec succès' }); } catch (err) { res.status(500).json({ error: 'Erreur lors de l\'ajout de l\'employé' }); } }; // 📬 Simuler le contact de l’employé exports.contact = (req, res) => { const id = req.params.id; // Logique simulée res.json({ message: `Contact simulé avec l'employé ID ${id}` }); }; // 🧠 Calculer le statut de l’employé (présent/absent) exports.calculerStatutEmploye = async (req, res) => { const { employeId, date } = req.params; try { const [pointage] = await pool.query( `SELECT * FROM pointages WHERE employe_id = ? AND date = ?`, [employeId, date] ); if (pointage.length === 0) return res.json({ statut: 'absent' }); const employePresent = pointage[0].heure_sortie === null ? 'present' : 'present'; res.json({ statut: employePresent }); } catch (err) { res.status(500).json({ error: 'Erreur lors de la vérification du statut' }); } }; // 🕒 Fonction utilitaire pour calculer les heures à partir du planning function calculerHeuresSemaine(planning) { let totalHeures = 0; for (const jour in planning) { const horaires = planning[jour]; if (horaires.de && horaires.a) { const debut = new Date(`1970-01-01T${horaires.de}:00`); const fin = new Date(`1970-01-01T${horaires.a}:00`); const diffMs = fin - debut; const heures = diffMs / (1000 * 60 * 60); if (heures > 0) totalHeures += heures; } } return totalHeures; }