66 lines
2.3 KiB
JavaScript
66 lines
2.3 KiB
JavaScript
const pool = require('../db/connection');
|
|
|
|
const getKPIs = async (req, res) => {
|
|
try {
|
|
const today = new Date().toISOString().split('T')[0];
|
|
|
|
const [totalRooms, availableRooms, checkIns, checkOuts] = await Promise.all([
|
|
pool.query('SELECT COUNT(*) as count FROM rooms'),
|
|
pool.query("SELECT COUNT(*) as count FROM rooms WHERE status = 'available'"),
|
|
pool.query("SELECT COUNT(*) as count FROM reservations WHERE check_in = $1 AND status IN ('confirmed', 'checked_in')", [today]),
|
|
pool.query("SELECT COUNT(*) as count FROM reservations WHERE check_out = $1 AND status = 'checked_in'", [today]),
|
|
]);
|
|
|
|
const total = parseInt(totalRooms.rows[0].count);
|
|
const available = parseInt(availableRooms.rows[0].count);
|
|
const occupancy = total > 0 ? Math.round(((total - available) / total) * 100) : 0;
|
|
|
|
res.json({
|
|
occupancy,
|
|
availableRooms: available,
|
|
totalRooms: total,
|
|
todayCheckIns: parseInt(checkIns.rows[0].count),
|
|
todayCheckOuts: parseInt(checkOuts.rows[0].count),
|
|
});
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json({ message: 'Error al obtener KPIs' });
|
|
}
|
|
};
|
|
|
|
const getWeeklyRevenue = async (req, res) => {
|
|
try {
|
|
const result = await pool.query(`
|
|
SELECT DATE(check_out) as day, COALESCE(SUM(total_amount), 0) as revenue
|
|
FROM reservations
|
|
WHERE check_out >= CURRENT_DATE - INTERVAL '7 days' AND status = 'checked_out'
|
|
GROUP BY DATE(check_out) ORDER BY day
|
|
`);
|
|
res.json({ weeklyRevenue: result.rows });
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json({ message: 'Error al obtener ingresos semanales' });
|
|
}
|
|
};
|
|
|
|
const getTodayArrivals = async (req, res) => {
|
|
try {
|
|
const today = new Date().toISOString().split('T')[0];
|
|
const result = await pool.query(`
|
|
SELECT r.id, r.check_in, r.check_out, r.room_id, r.status,
|
|
g.first_name, g.last_name, g.phone
|
|
FROM reservations r
|
|
JOIN guests g ON g.id = r.guest_id
|
|
WHERE (r.check_in = $1 OR r.check_out = $1)
|
|
AND r.status IN ('confirmed', 'checked_in')
|
|
ORDER BY r.check_in
|
|
`, [today]);
|
|
res.json({ arrivals: result.rows });
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json({ message: 'Error al obtener llegadas' });
|
|
}
|
|
};
|
|
|
|
module.exports = { getKPIs, getWeeklyRevenue, getTodayArrivals };
|