sync database and api's

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
Sven laptop
2026-05-06 18:27:39 +02:00
parent d81da9a475
commit 619a825137
2 changed files with 26 additions and 7 deletions
+19 -3
View File
@@ -10,6 +10,7 @@ export default function ScheduleMaker({ token, user }) {
const [busLines, setBusLines] = useState([])
const [buses, setBuses] = useState([])
const [drivers, setDrivers] = useState([])
const [selectedDriverFilter, setSelectedDriverFilter] = useState('')
const [message, setMessage] = useState(null)
const [isAdmin] = useState(Boolean(user?.userCode))
const [deleteConfirm, setDeleteConfirm] = useState(null)
@@ -137,9 +138,12 @@ export default function ScheduleMaker({ token, user }) {
return date.toLocaleTimeString('nl-NL', { hour: '2-digit', minute: '2-digit' })
}
// Group schedules by date and time
// Group schedules by date and time (apply driver filter if selected)
const timeSlots = generateTimeSlots()
const schedulesBySlot = groupSchedulesByTimeSlot(schedules, timeSlots)
const filteredSchedules = selectedDriverFilter
? schedules.filter(s => String(s.driverId) === String(selectedDriverFilter))
: schedules
const schedulesBySlot = groupSchedulesByTimeSlot(filteredSchedules, timeSlots)
return (
<section className="card">
@@ -148,7 +152,19 @@ export default function ScheduleMaker({ token, user }) {
<h2>Diensten Inplannen</h2>
<p>Maak diensten aan met automatische eindtijd, vertrektijden per halte en herhaald rooster.</p>
</div>
<button className="secondary" onClick={loadSchedules}>Refresh</button>
<div style={{ display: 'flex', gap: '0.5rem', alignItems: 'center' }}>
<button className="secondary" onClick={loadSchedules}>Refresh</button>
<select
value={selectedDriverFilter}
onChange={e => setSelectedDriverFilter(e.target.value)}
style={{ padding: '6px', borderRadius: '6px', border: '1px solid #ccc' }}
>
<option value="">Alle chauffeurs</option>
{drivers.map(d => (
<option key={d.id} value={d.id}>{d.name}</option>
))}
</select>
</div>
</div>
{isAdmin && (
+7 -4
View File
@@ -1051,18 +1051,21 @@ app.get('/admin/drivers', authMiddleware, adminMiddleware, async (req, res) => {
}
const result = await db.query(`
SELECT id, name, email, phone
SELECT id, firstname, lastname, email, phone, job, joined, status
FROM workers.employees
WHERE status = 'active'
ORDER BY name ASC
ORDER BY firstname, lastname ASC
`);
res.json({
drivers: result.rows.map(row => ({
id: row.id,
name: row.name,
name: (String(row.firstname || '') + ' ' + String(row.lastname || '')).trim(),
email: row.email,
phone: row.phone,
job: row.job,
joined: row.joined,
status: row.status,
})),
});
} catch (err) {
@@ -1099,7 +1102,7 @@ app.get('/admin/schedules', authMiddleware, adminMiddleware, async (req, res) =>
bl.estimated_duration_minutes,
b.name as bus_name,
b.license_plate,
e.name as driver_name
TRIM(COALESCE(e.firstname, '') || ' ' || COALESCE(e.lastname, '')) as driver_name
FROM transit.schedules s
LEFT JOIN transit.bus_lines bl ON s.bus_line_id = bl.id
LEFT JOIN fleet.bus b ON s.bus_id = b.id