feat: Úhrada za všechny jednou osobou (#29) #53
Reference in New Issue
Block a user
Delete Branch "feat/single-payment"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #29
Co tato PR přidává
Jeden strávník zaplatí celý účet v restauraci (nebo skupině v OBJEDNAVAM) a ostatní obdrží QR kód pro refundaci. Ikona 💸 se zobrazí v řádku každé LunchChoice pokud: uživatel je sám strávníkem, má ≥2 strávníky a vyplněný bankovní účet v nastavení.
Dialog umožňuje:
Po potvrzení se zavolá stávající
POST /api/qr/generate— žádný nový endpoint.Prerekvizita: podpora více QR kódů na (příjemce, den)
Před touto PR platilo:
addPendingQrdeduplikoval podledate,qr.tsukládal PNG pod${date}_${md5(login)}.png. Druhý QR na stejného příjemce ve stejný den se tiše zahodil (pizza-day QR + manuální QR + tento nový flow = kolize).Opraveno:
PendingQr.id(UUID) — každý QR má vlastní identifikátordismissPendingQra obě místa generování nyní pracují sidmístodateGET /api/qrvyžaduje?id=parametros.tmpdir()— přežijí redeploy serveruZměněné soubory
types/schemas/_index.yml,types/paths/getPizzaQr.yml,types/paths/pizzaDay/dismissQr.ymlserver/src/qr.ts,server/src/pizza.ts,server/src/routes/qrRoutes.ts,server/src/routes/pizzaDayRoutes.ts,server/src/index.tsclient/src/App.tsx,client/src/components/modals/PayForAllModal.tsx(nový),client/src/utils/parsePrice.ts(nový)Poznámky k migraci
Existující
PendingQrzáznamy v Redis bez poleidzůstanou zobrazené v „Nevyřízené platby", ale obrázek QR se nenačte (broken image). Jsou krátkodobé — příjemci je během dne/dvou odškrtnou.Out-of-scope (kandidáti na follow-up)
QR_VYGENEROVANpřes ntfy/Teams/DiscordbankAccount+holderName(aktuálně jen localStorage per-zařízení)2e8db88f07to7772db8e63Přidává možnost, aby jeden strávník zaplatil celý účet v restauraci a ostatní obdrželi QR kód pro refundaci. Prerekvizita — podpora více QR kódů na (příjemce, den): - PendingQr.id (UUID) nahrazuje deduplikaci podle data; každý QR má vlastní klíč - QR obrázky uloženy do Redis/storage (base64) místo tmpdir — přežijí redeploy - GET /api/qr vyžaduje ?id= parametr; dismissQr přijímá {id} místo {date} Feature: - Ikona 'Zaplatit za všechny' v choices-table pro každou LunchChoice (kromě PIZZA/NEOBEDVAM/ROZHODUJI); viditelná jen při ≥2 strávnících a vyplněném účtu - PayForAllModal: tabulka strávníků s prefillovanými cenami z menu, příplatky per-diner, celkové dýško rozpočtené rovnoměrně, generování QR přes POST /api/qr/generate - parsePriceCzk() helper pro parsing 'N Kč' → number Co se nemění: POST /api/qr/generate API kontrakt, PizzaOrder.hasQr boolean Co se mění v OpenAPI: PendingQr.id (required), getPizzaQr ?id param, dismissQr body Co-Authored-By: opmrdkazkrtkaus <opmrdkazkrtkaus@melancholik.eu>7772db8e63to1e1e23df80@mates rivjů plz
yolo, literally zero checks/fucks given
shipping fast