feat(admin): let the secretary pre-assign an operator when booking

The backend already accepted staff_uuid on POST /api/v1/my/appointment; only
the booking modal never sent it, so the pre-assignment half of the operator
model had no way in.

The field sits in step 1 next to the section select and is optional by design:
left empty, the session stays in the shared queue that every allowed operator
sees. Its placeholder says so rather than leaving the blank state unexplained.

The section select is no longer the only combobox in the modal, so the tests
target it by its label instead of by role.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
hamed
2026-08-07 12:39:35 +03:30
co-authored by Claude Opus 5
parent 38ea477429
commit 251b45d807
3 changed files with 67 additions and 3 deletions
+14 -1
View File
@@ -275,7 +275,7 @@ single-session again. Idempotent: deleting a service that has no protocol still
| Method | Path | کار |
|---|---|---|
| GET | `/dashboard/staff/treatment-sessions` | جلسات امروزِ همین پرسنل |
| GET | `/dashboard/staff/treatment-sessions` | صفِ امروزِ همین پرسنل — پایین را ببینید |
| GET | `/dashboard/staff/treatment-session/{uuid}` | جزئیات جلسه + نواحی + `devices` + `forms` |
| POST | `/dashboard/staff/treatment-session/{uuid}/start` | شروع جلسه |
| POST | `/dashboard/staff/treatment-session/{uuid}/finish` | اتمام جلسه |
@@ -283,6 +283,19 @@ single-session again. Idempotent: deleting a service that has no protocol still
| POST | `/dashboard/staff/session-area/{uuid}/complete` | ثبت خوانده‌های دستگاه |
| POST | `/dashboard/staff/session-area/{uuid}/skip` | صرف‌نظر از ناحیه |
### «جلسات امروز من» یک صف است
جلسهٔ امروز از سه راه به یک اپراتور می‌رسد:
- جلسه‌ای که خودش برداشته — `TreatmentSession.performedBy` هنگام «شروع جلسه» ست می‌شود.
- نوبتی که منشی از قبل به او داده — `staff_uuid` هنگام ثبت نوبت.
- کارِ بی‌صاحبِ امروز، اگر پروتکلِ آن سرویس نامش را برده باشد.
پروتکلی که هیچ پرسنلی برایش تعریف نشده یعنی همه مجازند، نه هیچ‌کس — همان قاعدهٔ
`ResourceServiceOffering` که نبودِ رکورد را محدودیت حساب نمی‌کند.
نتیجه همیشه به محیطِ خودِ پرسنل محدود است.
### شروع جلسه
رکوردِ هر ناحیهٔ پرونده یک بار ساخته می‌شود، پس فراخوانی دوباره ناحیهٔ تکراری نمی‌سازد.