bonamin
e5b8ef32be
feat: Phase 2B — staff payroll / hourly rate
- Users: add hourly_rate (Float, nullable) — manager-only, not shown to waiter
- WaiterShift: add hourly_rate_snapshot — copied from user.hourly_rate at shift open, never updated
- Shift start (both /start and /manager/start): snapshot rate at shift creation
- compute_shift_pay(): calculates worked hours (minus breaks) × rate_snapshot; returns None if unset
- _enrich_shift(): now includes hourly_rate_snapshot, duration_hours, shift_pay
- shifts_report in reports.py: delegates to _enrich_shift so all shift endpoints are consistent
- Shifts CSV export: adds duration_hours, hourly_rate, shift_pay columns
- StaffTab: hourly_rate field in waiter edit modal (Μισθοδοσία section, col 3)
- ShiftsOverview report: Αμοιβή/ώρα + Αποδοχές columns; untracked shows 'Δεν παρακολουθείται'
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 20:55:24 +03:00
..
2026-05-20 14:04:38 +03:00
2026-05-20 14:04:38 +03:00
2026-06-07 20:25:22 +03:00
2026-06-01 09:59:21 +03:00
2026-05-20 14:04:38 +03:00
2026-05-20 14:04:38 +03:00
2026-05-20 14:04:38 +03:00
2026-05-20 14:04:38 +03:00
2026-06-07 20:46:33 +03:00
2026-06-07 20:46:33 +03:00
2026-06-07 20:55:24 +03:00
2026-06-07 20:25:22 +03:00
2026-06-07 20:25:22 +03:00
2026-05-20 14:04:38 +03:00
2026-06-07 20:55:24 +03:00
2026-05-20 14:04:38 +03:00
2026-06-07 20:25:22 +03:00
2026-06-07 20:25:22 +03:00
2026-06-07 20:25:22 +03:00