wasrusgen
02f8dba469
feat: expeditor cabinet, electronic signature (OTP+canvas), invoice room picker
...
New modules:
- expeditor_dashboard.js: route list (date-grouped) + act detail + signature screen
- invoice.js: 3-col chip room picker, 2500₽ base + 1000₽ extra logic
- act4.js, measurer_dashboard.js, finance_summary.js, client_timeline.js, feedback.js, staff_roster.js
Backend:
- /api/expeditor_inbox: filtered assembly list for expeditor role
- /api/act4_request_otp: 6-digit OTP via Telegram, 10-min expiry
- /api/act4_verify_otp: validates code, marks act as signed
- /api/act4_save_signature: saves base64 canvas signature
- Act4s sheet: added signature_b64, otp_code, otp_expires_at columns
Tests:
- tests/expeditor_scenarios.md: 11 manual test scenarios
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 14:11:20 +03:00
wasrusgen
44379576f2
feat: date scheduling flow for assembler/measurer
...
Backend:
- _assembly_columns: +date_range, +confirm_by, +confirmed_at
- _handle_assembly_create: sets confirm_by = now+3h when assigned_to_tg_id provided
- /api/assembly_schedule: staff confirms exact datetime → status→scheduled
+ gcal event create/update + bot notify manager "Лид закреплён 🎯 "
- /api/measurement_schedule: same for measurers
- staff_clients: return date_range/confirm_by/confirmed_at per assembly,
preferred_date/preferred_time_of_day per measurement
Frontend (staff_clients.js):
- Assembly cards: show date_range hint, confirm_by countdown timer
- "📞 Подтвердить дату после созвона" button (only when status=created, no scheduled_at)
- Measurement cards: show preferred_date from client, confirm button
- _openScheduleOverlay: datetime-local picker + note → POST assembly/measurement_schedule
→ reload client list on success
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 13:11:07 +03:00
wasrusgen
e8b9c68c5c
feat: staff client list for assembler/measurer (#/master/clients)
...
- /api/staff_clients — returns clients grouped by client, filtered by role
(assembler sees assemblies, measurer sees measurements, both if combined)
Supports filter: active | done | all
- staff_clients.js — client list with status tags + detail card view
(phone link, assembly cards → AssemblyDetailScreen, measurement cards)
- app.js — route #/master/clients, button "👥 Мои клиенты" for assembler+measurer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 13:05:16 +03:00