Tracking Studio and Independent Dancer Payments

Record, adjust, waive, refund, and bulk-manage fees for studios and independent dancers, with full audit trail.

The Entry Fees page lets you track how much each studio and independent dancer owes, record payments received, apply adjustments, and monitor outstanding balances across your event.


Accessing Entry Fees

From your Event Dashboard, click Entry Fees in the sidebar.


Summary Cards

Three summary cards at the top show event-wide totals across both the Studio Fees and Independent Dancer Fees tables:

  • Total Owed: sum of all fees (studios and independent dancers)
  • Amount Collected: total payments received so far (green)
  • Outstanding Balance: remaining unpaid amount (red if positive)

Totals are hidden until you reveal them. Because helpers can use the organiser portal, the three summary cards and the footer totals of both tables show a mask each time you open the page. Per-row amounts stay visible so a helper can still record payments. Click any masked figure (each shows an eye icon and says Click to reveal) and every total on the page appears. A small eye-slash beside each large figure hides them again. Nothing is remembered: the next visit starts hidden.

The Studio Fees footer adds up the studio rows only. Independent dancers are in their own table and have their own footer.


Payment Instructions

If you have configured payment instructions (bank details, payment methods, due dates) on the event editor's Payment Details section, they are displayed prominently here for your reference. Studios and dancers see the same instructions in their portals.


Studio Fees Table

The Studio Fees table lists every studio registered for the event. Each row shows:

ColumnDescription
StudioStudio name
DancersCount of unique dancers actually entered into one or more entries by this studio
EntriesNumber of entries this studio has submitted
OwedTotal fees for this studio (an asterisk * appears if a manual override is active)
PaidPayments received (green)
BalanceOutstanding amount (red if positive)
StatusUnpaid / Partial / Paid / Waived / Refunded
ActionsRecord Payment · Adjust · History

How the Owed amount is calculated:

  • Studio registration fee (from the event config)
  • Plus dancer registration fee × number of dancers whose registration fee is charged to this studio
  • Plus, for each entry, the per-dancer fee for that performance type × the number of dancers in the entry
Multi-studio dancers: When a dancer is registered under multiple studios for the same event, the dancer registration fee is only charged to the studio they registered with first. The Dancers column always reflects how many unique dancers this studio actually has entered, even if their registration fee is being charged elsewhere.
Live status: Adding or removing entries after a payment was recorded automatically re-evaluates the status. A studio that was "Paid" but later has new entries added will flip back to "Partial" without you needing to do anything. Waived and Refunded statuses are sticky: they only change if you re-adjust the row.

Independent Dancer Fees Table

Below the Studio Fees table is the Independent Dancer Fees table, which lists every independent dancer (a dancer registered for the event without a studio affiliation). Each row shows the dancer's entry count, owed amount, paid, balance, status, and actions.

The Owed amount for an independent dancer is:

  • The dancer registration fee (if applicable to that dancer)
  • Plus the per-dancer fee for each of their entries
Dancers who are registered with both an independent registration and a studio registration for the same event are billed via their studio and will not appear in the independent table. This prevents double-billing.

Searching and Filtering

Each table has its own search box and status filter in the header:

  • Search: type any part of a studio or dancer name to filter the list
  • Status filter: show only rows in a specific state (Unpaid / Partial / Paid / Waived / Refunded)

The header counter updates to show "X of Y" while a filter is active.


Recording a Payment or Refund

  1. Click Record Payment next to a studio or independent dancer.
  2. Choose the Type:
    • Payment received: increases the paid amount.
    • Refund issued: decreases the paid amount. The original payment record is preserved; the refund is stored as a separate record so the audit trail stays intact.
  3. Fill in the modal:
    • Amount: how much was received or refunded (always positive; the type determines the sign)
    • Payment date: when the transaction happened
    • Payment method: EFT / Cash / Card / Online / Other
    • Reference / Transaction ID: optional
    • Note: optional
  4. Click Record Payment or Record Refund.

The balance updates immediately and the status is recalculated. If this is the first transaction for that studio or dancer, a fee record is automatically created behind the scenes.

Studio fee records are now created eagerly: as soon as a studio registers for an event, a corresponding fee record is created so the studio appears on the payments dashboard immediately and has a record to attach payments, adjustments, and per-row due dates to. (Lazy creation still happens as a fallback if eager creation failed for any reason.)

Adjusting Fees (Discounts, Waivers, Refunds, Manual Totals, Due Dates)

Click Adjust next to any studio or dancer to open the Adjust Fees modal. You'll see five options:

OptionWhat it does
Set custom total (discount or manual price)Replaces the calculated total with a number you enter. Use this for negotiated discounts, sponsorships, or any time the owed amount needs to differ from what the system would calculate. The owed cell will show an asterisk * to indicate a manual override is active.
Reset to calculated totalClears the manual override and returns the owed amount to the live calculation. Only available when an override is active or the row is currently waived.
Waive remaining balanceSets the total to whatever has already been paid (so the balance becomes zero) and marks the row as Waived. The waived status is sticky: adding new entries afterwards won't change it back. Payment records are preserved.
Mark as refundedMarks the row as Refunded for tracking purposes. Amounts are not changed. To actually reduce the paid amount, use Record Payment → Refund issued instead.
Set / change payment due dateOverrides the event-wide due date for just this studio or dancer. Useful for granting extensions or setting earlier deadlines for specific entities. The custom due date appears under the row name.

Every adjustment also captures an optional Reason field: a short note explaining why the change was made. The reason is stored in the audit trail (see below).

Important: Adjustments never delete payment records or other data. The "Reset to calculated" option lets you undo a manual override or waiver without losing any history.

Payment History and Audit Trail

Click History next to any studio or dancer to see two tabs:

Payments and Refunds tab: every payment and refund recorded against this row:

  • Date, type (Payment / Refund), amount (refunds shown with a minus sign)
  • Method, reference, note
  • Who recorded it
  • A footer shows the Net Paid (payments minus refunds)

You can delete an individual payment or refund record from this view (for example, to correct a mistakenly recorded transaction). Deleting recalculates the paid amount from the remaining records.

Adjustments tab: every fee adjustment ever applied to this row:

  • Date the adjustment was made
  • Type (Custom total / Reset / Waived / Marked refunded / Due date changed)
  • The change itself (e.g. "R 500.00 → R 450.00 (PARTIALLY_PAID → PAID)")
  • The reason the organizer entered
  • Who applied the adjustment

Adjustment records are immutable: they cannot be deleted or edited, so you always have a complete audit trail of who changed what, when, and why.


Drilling into a Studio's or Dancer's Fee Breakdown

Each row in the Studio Fees and Independent Dancer Fees tables has a chevron (▶) on the left. Click it to expand the row inline and see the same fee breakdown that the studio (or dancer) sees in their own portal:

  • Studio rows show the full studio fee breakdown: studio registration fee, dancer registration fees (with the count of waived multi-studio dancers), entry fees, any custom line items, and the per-dancer breakdown that lists each dancer with all of their entries and fees.
  • Independent dancer rows show the dancer's registration fee, every entry with its routine name and section, the subtotal, and the total.

A blue callout at the top of each expanded view explains what the studio sees where: the breakdown table is exactly what the studio sees on its Fees page, and the per-dancer cards are what it sees on its Dancer accounts page. This is the answer when a studio asks "why am I being charged this much?"

What you cannot see: the studio's Dancer accounts page also holds the studio's own record of what each dancer's family has given the studio. That ledger is private to the studio. It does not exist in your dashboard, it never changes the studio's bill, and a studio recording money there has not paid you anything. Payments to you are only ever the ones you record here (or that arrive through PayFast).

The breakdown UI is rendered from a single shared component used by both the organizer dashboard and the studio/dancer portals, so the two views can never drift apart.

Two convenience buttons at the top of each table:

  • Expand all: opens the breakdown for every visible (filtered) row at once
  • Collapse all: closes everything

Studio fee line items are loaded on-demand the first time you expand a row, so opening 26 studios doesn't load 26 sets of line items up front. Once loaded for a studio, the line items are cached for the rest of your session.


Bulk Actions: Mark All Paid and CSV Export

Each table has two bulk action buttons in its header:

Export CSV: downloads the currently filtered rows (respecting your search and status filter) as a CSV file. Columns include studio/dancer name, dancer count, entry count, owed, paid, balance, status, override flag, and due date. Use this for accounting, reconciliation, or sharing with bookkeepers.

Mark all paid: creates a payment record on every row in the currently filtered view that still has an outstanding balance, marks them all as Paid, and writes an audit-trail entry on each row noting the bulk action. Skipped automatically: any row that's already paid, or that's been Waived or Refunded. A confirmation prompt is shown before the bulk action runs, and progress is displayed in the button as it processes.

Tip: Use the search box and status filter first to narrow the list, then click Mark all paid to bulk-process just that subset. For example, set status to "Partial", then mark all partial rows paid in one click.

Payment Statuses

StatusMeaningCan flip automatically?
UnpaidNo payments receivedYes, back to Unpaid if all payments are deleted
PartialSome payment received, balance remainingYes, recalculated whenever totals or payments change
PaidFull amount receivedYes, flips back to Partial if new entries push the total above what's been paid
WaivedBalance was waived by the organiser via Adjust FeesNo, sticky until you Reset or change the adjustment
RefundedMarked as refunded by the organiser via Adjust FeesNo, sticky until you Reset or change the adjustment

Need more help?

Browse the Help Centre or email support@kompdesk.com.