You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.2 KiB
106 lines
3.2 KiB
const { pool } = require('../config/databases');
|
|
|
|
exports.index = async (req, res) => {
|
|
try {
|
|
const [tables] = await pool.query('SELECT * FROM tables');
|
|
res.render('tables/index', { tables });
|
|
} catch (err) {
|
|
res.status(500).send('Erreur serveur : ' + err.message);
|
|
}
|
|
};
|
|
|
|
// Affiche formulaire création (rendu simple, adapter selon moteur de vue)
|
|
exports.create = (req, res) => {
|
|
res.render('tables/create');
|
|
};
|
|
|
|
// Enregistre nouvelle table
|
|
exports.store = async (req, res) => {
|
|
const { numero_table, capacite, statut_actuel } = req.body;
|
|
|
|
try {
|
|
await pool.query(
|
|
`INSERT INTO tables (numero_table, capacite, statut_actuel, id_reservation_actuelle)
|
|
VALUES (?, ?, ?, NULL)`,
|
|
[numero_table, capacite, statut_actuel]
|
|
);
|
|
res.redirect('/tables?success=Table ajoutée avec succès.');
|
|
} catch (err) {
|
|
// En cas d'erreur, tu peux passer l'erreur en query string ou gérer autrement
|
|
res.redirect('/tables/create?error=' + encodeURIComponent(err.message));
|
|
}
|
|
};
|
|
|
|
// Affiche formulaire édition
|
|
exports.edit = async (req, res) => {
|
|
const id = req.params.id;
|
|
try {
|
|
const [rows] = await pool.query('SELECT * FROM tables WHERE id = ?', [id]);
|
|
if (rows.length === 0) {
|
|
return res.status(404).send('Table non trouvée');
|
|
}
|
|
res.render('tables/edit', { table: rows[0] });
|
|
} catch (err) {
|
|
res.status(500).send('Erreur serveur : ' + err.message);
|
|
}
|
|
};
|
|
|
|
// Met à jour une table
|
|
exports.update = async (req, res) => {
|
|
const id = req.params.id;
|
|
const data = req.body;
|
|
|
|
try {
|
|
// Mettre à jour la table
|
|
const [result] = await pool.query(
|
|
`UPDATE tables SET numero_table = ?, capacite = ?, statut_actuel = ? WHERE id = ?`,
|
|
[data.numero_table, data.capacite, data.statut_actuel, id]
|
|
);
|
|
res.redirect('/tables?success=Table modifiée avec succès.');
|
|
} catch (err) {
|
|
res.redirect(`/tables/${id}/edit?error=` + encodeURIComponent(err.message));
|
|
}
|
|
};
|
|
|
|
// Supprimer une table
|
|
exports.delete = async (req, res) => {
|
|
const id = req.params.id;
|
|
try {
|
|
await pool.query('DELETE FROM tables WHERE id = ?', [id]);
|
|
res.redirect('/tables?success=Table supprimée.');
|
|
} catch (err) {
|
|
res.status(500).send('Erreur serveur : ' + err.message);
|
|
}
|
|
};
|
|
|
|
// Afficher détails JSON d'une table + client réservation en cours
|
|
exports.show = async (req, res) => {
|
|
const id = req.params.id;
|
|
try {
|
|
const [tables] = await pool.query('SELECT * FROM tables WHERE id = ?', [id]);
|
|
if (tables.length === 0) {
|
|
return res.status(404).json({ error: 'Table non trouvée' });
|
|
}
|
|
const table = tables[0];
|
|
|
|
|
|
const [reservations] = await pool.query(`
|
|
SELECT client_nom FROM reservations
|
|
WHERE type_reservation = 'table'
|
|
AND numero_table_chambre = ?
|
|
AND statut_reservation IN ('Confirmée', 'En attente')
|
|
LIMIT 1
|
|
`, [table.numero_table]);
|
|
|
|
const reservation = reservations.length > 0 ? reservations[0] : {};
|
|
|
|
res.json({
|
|
capacite: table.capacite,
|
|
details: table.details || 'N/A',
|
|
statut_actuel: table.statut_actuel,
|
|
client_nom: reservation.client_nom || null,
|
|
});
|
|
} catch (err) {
|
|
res.status(500).json({ error: 'Erreur serveur', details: err.message });
|
|
}
|
|
};
|
|
|