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.

AreaCRM
Routescrm.users.edit
Centre modulestickets
Staff levelsroot · admin · manager · crmmanager · crmoperator · weboperator
Modelscampaign · ticket
UI labelticket.raffle
Coverage2 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

  1. Operator opens the loyalty tab and the raffle step.
  2. Picks a campaign; the ticket list and the per-rule resume load.
  3. Pending balance explains any purchase amount not yet converted.

Failure paths

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


Generated from doc/feature-inventory.json · id crm-customer-loyalty-raffles · commit 276788ca6