Implement schedule status update functionality for driver workflows; enhance navigation button behavior to reflect status changes

This commit is contained in:
Sven laptop
2026-05-08 19:19:57 +02:00
parent 3415cfa2b9
commit b00b93e7f0
5 changed files with 113 additions and 38 deletions
+35 -2
View File
@@ -1523,6 +1523,39 @@ app.patch('/routes/:routeId/status', authMiddleware, async (req, res) => {
}
});
// ============================================
// DRIVER - Update schedule status
// ============================================
app.patch('/driver/schedules/:scheduleId/status', authMiddleware, async (req, res) => {
try {
const { scheduleId } = req.params;
const { status } = req.body;
const validStatuses = ['planned', 'in_progress', 'completed', 'cancelled', 'active'];
if (!validStatuses.includes(status)) {
return res.status(400).json({ error: 'invalid_status' });
}
const normalizedStatus = status === 'active' ? 'in_progress' : status;
const result = await db.query(`
UPDATE transit.schedules
SET status = $1, updated_at = NOW()
WHERE id = $2
RETURNING *
`, [normalizedStatus, scheduleId]);
if (result.rows.length === 0) {
return res.status(404).json({ error: 'schedule_not_found' });
}
res.json({ schedule: result.rows[0] });
} catch (err) {
console.error(err);
res.status(500).json({ error: 'internal_error', details: err.message });
}
});
// ============================================
// ADMIN - Get drivers for scheduling
// ============================================
@@ -2142,7 +2175,7 @@ app.post('/driver/schedules/:scheduleId/stops/:stopOrder/passed', authMiddleware
schedule.status = 'completed';
schedule.endTime = actualPassedAt.toISOString();
} else if (schedule.status === 'planned') {
schedule.status = 'active';
schedule.status = 'in_progress';
}
return res.json({
@@ -2233,7 +2266,7 @@ app.post('/driver/schedules/:scheduleId/stops/:stopOrder/passed', authMiddleware
const totalStops = Number(totalsResult.rows[0]?.total_stops || 0);
const passedStops = Number(totalsResult.rows[0]?.passed_stops || 0);
const isCompleted = totalStops > 0 && passedStops >= totalStops;
const nextStatus = isCompleted ? 'completed' : 'active';
const nextStatus = isCompleted ? 'completed' : 'in_progress';
await db.query(`
UPDATE transit.schedules