CRM · Customer loyalty — raffle tickets
Read-oriented view of a customer’s raffle entries per campaign: ticket code, originating receipt, store, rule, creation date, plus a per-rule resume with pending balance.
| Area | CRM |
| Routes | crm.users.edit |
| Centre modules | tickets |
| Staff levels | root · admin · manager · crmmanager · crmoperator · weboperator |
| Models | campaign · ticket |
| UI label | ticket.raffle |
| Coverage | 2 use cases · 1 happy · 2 failure |
How it works
One of four steps inside the loyalty tab (loyalty.js computes raffleStepId, loyaltyCardStepId, rewardStepId, couponStepId and shows only the ones the centre’s modules allow). Campaign selection (changeCampaign) re-queries the tickets. The resume columns expose ticket.pending-balance, i.e. purchase value not yet converted into an entry.
Use cases
Why someone opens this (2)
- Answering ‘how many entries do I have?’ at the information desk.
- Auditing which receipt and rule produced a given ticket when a customer disputes a draw.
Path map
flowchart LR F(["Customer loyalty — raffle tickets"]):::feat F --> H1["Review a customer's entries"]:::ok F -.-> X1["Module disabled"]:::bad F -.-> X2["Ticket list fails to load"]:::bad classDef feat fill:#157068,stroke:#157068,color:#ffffff,font-weight:bold classDef ok fill:#e3f1ea,stroke:#0d6b42,color:#0d4a2e classDef bad fill:#f7e6e2,stroke:#9a2d1c,color:#6e1f13
Happy paths
Review a customer's entries
- Operator opens the loyalty tab and the raffle step.
- Picks a campaign; the ticket list and the per-rule resume load.
- Pending balance explains any purchase amount not yet converted.
Failure paths
Module disabled
Cause — Centre has no tickets module.
What happens — The raffle step is not offered at all.
Ticket list fails to load
Cause — API error on the campaign-scoped query.
What happens — No dedicated message in this component — the table stays empty.
QA checklist
Tick these off while regression-testing this feature. The boxes are plain Markdown, so progress is visible in git diffs.
- ✅ Review a customer’s entries
- ⛔ Module disabled
- ⛔ Ticket list fails to load
Implementation
Translation keys (7)
Key English ticket.raffleRaffle ticket.codeCode ticket.receipt-codeReceipt code ticket.ruleRule ticket.tickets-numberTickets ticket.pending-balancePending balance ticket.commerce-nameStore
Related
- Same area — Customer list & filtering · Customer create & edit · Customer deletion with unsubscribe notice · Customer CSV export with column picker · Customer CSV import · Children CSV import · AI natural-language customer filter · Save current filters as a segment · Segment list, refresh & export · Segment builder with automatic tag actions · Segment categories · User tags (user types) · Customer receipts tab & ticket-stamp generation · Customer loyalty — cards & stamps · Customer loyalty — rewards · Customer loyalty — coupon exchanges · Customer children (dependants) · Receipt verification queue · Store list, filters & exports · Store create & edit · Store CSV import · Store labels (store types) · Customer action log (dormant)
- Shares data with — Activity editor (loyalty mechanics, rules & targeting) · Activity list & duplication · Activity report & PDF · Activity campaigns (programme grouping) · Proposal editor (content, coupon, push, AI images) · Push notification editor (scheduling, geofencing, deep links) · App button manager (MOFs)
- Behind the same module — Customer receipts tab & ticket-stamp generation · Receipt verification queue · Activity editor (loyalty mechanics, rules & targeting)
Generated from doc/feature-inventory.json · id crm-customer-loyalty-raffles · commit 276788ca6