fix: allow organiser to approve shift assignments when shift is full
The approve() and bulkApprove() methods in ShiftAssignmentService hard-blocked with a 422 when all slots were filled. This was incorrect for organiser actions — only volunteer claims (portal self-service) should enforce capacity limits. Organiser assign() already allowed overbooking, making the approve block inconsistent. Changes: - Remove capacity hard-block from approve() and bulkApprove(), replace with audit log entry (shift.overbooked_approval) - Add overbook confirmation dialog in ShiftDetailPanel before approving a full shift (single + bulk approve) - Add onError handlers to all mutations in ShiftDetailPanel (approve, reject, cancel, bulk-approve) so errors display in the snackbar - Add global 422 validation error display in axios interceptor via useNotificationStore as safety net for all components - Add PHPUnit test for approve-when-full scenario Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -62,7 +62,11 @@ apiClient.interceptors.response.use(
|
||||
notificationStore.show('The requested item was not found.', 'warning')
|
||||
}
|
||||
else if (status === 422) {
|
||||
// Validation errors — pass through to calling component
|
||||
// Show validation message to user; still reject so component onError handlers can react
|
||||
const message = error.response?.data?.message
|
||||
if (message && typeof message === 'string') {
|
||||
notificationStore.show(message, 'error')
|
||||
}
|
||||
}
|
||||
else if (status === 503) {
|
||||
notificationStore.show('Service temporarily unavailable. Please try again later.', 'error')
|
||||
|
||||
Reference in New Issue
Block a user