Coupons & Group Purchasing

Overview

Nigall supports event-level coupon codes with percentage discounts and optional group purchasing for multiple tickets in a single checkout—configured on the Event model and honored in payment flows.

Purpose

Run promotions and group sales without manual invoice adjustments.

Who should use it

  • Marketing running discount campaigns
  • Organizers selling table packages or group bundles
  • Finance auditing discounted orders

Benefits

  • Single coupon per event (coupon_code + coupon_discount_percent)
  • Group purchasing toggle for multi-seat checkout
  • Discount applied before platform fee calculation on eligible flows

Action Path
Configure on event /events/<pk>/<tag>/edit/ → Ticketing section
Legacy checkout /payments/checkout/<event_id>/<tag>/
Ticket review /payments/tickets/<event_id>/<tag>/review/
Attendee registration /attendees/register/<pk>/<tag>/

Prerequisites

  • Event with paid tiers or price > 0
  • Coupon fields set on event
  • Stripe configured for paid checkout

Step-by-step — Add a coupon

  1. Edit event → Ticketing.
  2. Enter Coupon code (max 50 chars).
  3. Set Coupon discount percent (integer 0–100).
  4. Save event.
  5. Guests enter code at checkout/review step.

[SCREENSHOT: Coupon fields on edit form]


Step-by-step — Enable group purchasing

  1. Edit event → enable Allow group purchasing.
  2. Save.
  3. Checkout UI allows quantity > 1 where supported.

Field descriptions

Field Type Description
coupon_code CharField(50) Case-sensitive code guests enter
coupon_discount_percent PositiveInteger Percent off subtotal
allow_group_purchasing Boolean Multi-ticket single order
ticket_types TextField Tier definitions for group lines
price Decimal Base/legacy single price

Business rules

Rule Detail
One coupon per event Single code field — not multi-coupon stack
Percent discount Applied to eligible subtotal
Group purchasing Independent of coupon; enables multi-qty
Free events Coupon irrelevant when is_free=True
Platform fee Calculated on post-discount amount in calculate_payment_split

Validation rules

  • Discount percent 0–100
  • Code must match exactly at checkout

User permissions

Role Configure Apply at checkout
Host N/A
Buyer

Workflow

flowchart LR Cart[Select tiers/qty] --> Coupon{Valid code?} Coupon -->|Yes| Discount[Apply percent off] Coupon -->|No| Full[Full price] Discount --> Pay[Stripe checkout] Full --> Pay

Examples

EARLYBIRD 20%: First 100 registrations with code EARLYBIRD.

Team table: Group purchasing enabled, 10 seats one payment.

Best practices

  • Use memorable single-word codes
  • Document coupon in marketing email only (not public page) for exclusivity
  • Set registration cap to limit discounted seats

Tips

  • Test code in Stripe test mode checkout
  • Combine with communications blast for code delivery

Common mistakes

Mistake Result Fix
Typo in code Discount not applied Copy-paste code to form help text
0% discount Code useless Set percent > 0
Group off One ticket per order Enable allow_group_purchasing

FAQs

Multiple coupon codes?
Not supported — one coupon_code per event.

Stack with tier sale price?
Discount applies per checkout logic on subtotal.

Troubleshooting

Symptom Cause Fix
Code rejected Mismatch / typo Verify event.coupon_code
Discount not in email Email shows pre-discount Check template

Screenshot placeholders

  • [SCREENSHOT: Ticket review with coupon field]
  • [SCREENSHOT: Group quantity selector]

Administrator notes

  • No separate Coupon model — fields on Event
  • Future: multi-coupon campaigns would need migration

Developer/API notes

Coupon validated in payment views during checkout session creation.
Fields in EVENT_CREATE_BASE_FIELDS on event form.


See also: Event Field Reference