f368765419
CI/CD / CI · API (dotnet build + test) (push) Successful in 43s
CI/CD / CI · Admin API (dotnet build) (push) Successful in 29s
CI/CD / CI · Dashboard (tsc) (push) Successful in 1m11s
CI/CD / CI · Admin Web (tsc) (push) Successful in 39s
CI/CD / CI · Website (tsc) (push) Successful in 46s
CI/CD / CI · Koja (tsc) (push) Successful in 50s
CI/CD / Deploy · all services (push) Successful in 2m49s
Two go-live money-correctness bugs in the POS pay flow (deferred TODO #1/#2): #2 — pay against the server's amount, not a client recompute. The pay sheet took `orderAmountDue(payTarget) || total`, so any time the server figure was absent/zero it silently fell back to the POS's own 9% tax recompute. The backend records whatever amount the client posts (it only uses its own order.Total to decide closure), so a client/server mismatch books the wrong cash-drawer amount. Now a real (server) order always charges orderAmountDue(serverOrder); only a genuinely-local offline order — which has no server figure — uses the client total. #1 — don't record a card payment that wasn't confirmed. A connected terminal that declines already throws POS_DEVICE_* and records nothing. But when no terminal is wired up the request is "skipped" and the card was booked as paid with zero proof it cleared. Now, when the card leg isn't machine-confirmed, the cashier must confirm "card approved on the terminal?" before it's recorded; cancel records nothing. Also raise the shared AlertDialog to z-[80] so a confirmation renders above the POS pay sheet (z-[60]) and its busy overlay (z-[70]); still below toasts. tsc clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Meezi Dashboard
Next.js 14 POS dashboard for Meezi (میزی).
Setup
cd web/dashboard
npm install
cp .env.example .env.local
npm run dev
Open http://localhost:3000/fa/login
Ensure the API is running at NEXT_PUBLIC_API_URL (default https://localhost:7208).
Demo login
- Phone:
09121234567 - OTP: check API console log (
DEV OTP for ...) when Kavenegar is not configured
Features (Sprint 4)
- i18n:
fa(default, RTL),ar(RTL),en(LTR) - Dashboard layout with RTL-aware sidebar
- POS screen: menu grid + cart + order submit
- KDS screen: live orders + SignalR + status advance
- Placeholder pages for upcoming modules