feat(appointments): edit page + filters modal — phase C2/C3

- AppointmentEditPage (edit.pdf): full-page edit of بخش/سرویس/پرسنل, Jalali
  date + start/end time, deposit, status and notes; hydrates from
  GET /appointment/{uuid} and saves through the general PATCH with the
  optimistic-lock version. Routed at /admin/appointments/:uuid/edit (the
  actions-menu ویرایش target).
- AppointmentFiltersModal (filter-desktop.pdf): name/national-code search,
  بخش/سرویس selects, six status checkboxes (لغو شده covers both cancel
  reasons), gender radios, حذف همه reset. Filtering is client-side over the
  loaded day via the pure applyAppointmentFilters; toolbar gains the filter
  button with an active indicator.
- /my/appointments rows now include patient_national_code and patient_gender
  so the filters have data to match on.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
hamed
2026-07-14 00:02:22 +03:30
co-authored by Claude Fable 5
parent 91ea1b02aa
commit f736e4acd8
8 changed files with 493 additions and 1 deletions
@@ -154,6 +154,7 @@ class MyAppointmentsController extends BaseController
->select(
'DISTINCT a.uuid, a.slotStart, a.slotEnd, a.status, a.createdAt, a.version',
'a.isReserve, a.depositRequired, a.depositAmountRials, a.note, a.patientName as override_name',
'a.patientNationalCode as national_code, a.patientGender as gender',
'd.uuid as doctor_uuid, d.name as doctor_name',
'u.uuid as patient_uuid, u.mobileNumber as patient_mobile, u.realName as patient_name',
'ss.uuid as section_uuid, ss.name as section_name',
@@ -251,6 +252,8 @@ class MyAppointmentsController extends BaseController
'version' => (int) $a['version'],
'created_at' => date('c', (int) $a['createdAt']),
'is_reserve' => (bool) $a['isReserve'],
'patient_national_code' => $a['national_code'],
'patient_gender' => $a['gender'],
'deposit_required' => (bool) $a['depositRequired'],
'deposit_amount_rials' => $a['depositAmountRials'] !== null ? (int) $a['depositAmountRials'] : null,
'note' => $a['note'],