feat(loyalty): transaction categories — admin UI + web terminal
Some checks failed
CI / ruff (push) Successful in 27s
CI / validate (push) Has been cancelled
CI / dependency-scanning (push) Has been cancelled
CI / docs (push) Has been cancelled
CI / deploy (push) Has been cancelled
CI / pytest (push) Has started running

Admin merchant detail page:
- New "Transaction Categories" section with store selector
- Inline add form, activate/deactivate toggle, delete button
- Categories CRUD via /admin/loyalty/stores/{id}/categories API

Web terminal:
- Loads categories on init via /store/loyalty/categories
- Category pill selector shown in PIN modal before stamp/earn actions
- Selected category_id passed to stamp and points API calls
- Categories are optional (selector hidden when none configured)

4 new i18n keys (EN).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-19 12:28:55 +02:00
parent 1cf9fea40a
commit ab2daf99bd
5 changed files with 178 additions and 4 deletions

View File

@@ -480,6 +480,9 @@
"table_points_earned": "Points Earned",
"table_points_redeemed": "Points Redeemed",
"table_transactions_30d": "Transactions (30d)",
"transaction_categories": "Transaction Categories",
"select_store": "Select a store...",
"no_categories": "No categories configured. Click Add to create one.",
"admin_policy_settings": "Admin Policy Settings",
"staff_pin_policy": "Staff PIN Policy",
"self_enrollment": "Self Enrollment",
@@ -709,6 +712,7 @@
"reward_redeemed": "Reward redeemed: {name}",
"card_label": "Card",
"confirm": "Confirm",
"select_category": "Category (what was sold)",
"pin_authorize_text": "Enter your staff PIN to authorize this transaction",
"free_item": "Free item",
"reward_label": "Reward",