---
title: Bulk Payment Actions
slug: bulk-payment-actions
docTags: 
createdAt: 2026-03-06T19:27:17.542Z
---

When you have many payment records to update or create at once, use **bulk actions** instead of editing them one by one.

***

## 📤 Bulk Generate Payments

**Bulk Generate** creates recurring invoices for multiple students at once — ideal for generating monthly or annual fees for an entire class or location at the start of a billing period.

Go to **Payments → Bulk Generate**:

1. Select the **payment type** (monthly or annual)
2. Optionally filter by **location** and/or **class**
3. Select the **billing period** (month or specific quarter)
4. Click **Preview** to see what will be created — per student, showing created / skipped (already exists) / failed status. Frequency-based enrolments are labelled with their real billing cycle (Quarterly Fee, Semi-Annual Fee, etc.) so they're easy to tell apart from monthly fees
5. Click **Generate** to create all invoices at once

:::hint{type="info"}
Payments that already exist for the selected period are automatically skipped — no duplicates are created.
:::

***

## ✏️ Add Payment (Single or Bulk)

The **Add Payment** dialog supports creating payments for one or multiple students at once.

### Single Payment

| Field          | Notes                                                                                                    |
| -------------- | -------------------------------------------------------------------------------------------------------- |
| Student        | Search by name                                                                                           |
| Payment type   | Select from your configured payment types                                                                |
| Amount         | Pre-filled from the student's enrolled fee or payment type default — edit as needed                      |
| Discount (RM)  | Optional — deducted from the amount; enter a reason when applying                                        |
| Billing period | Month and year this payment covers (see below)                                                           |
| Due date       | When payment is due                                                                                      |
| Description    | Optional note shown on the invoice — auto-filled from the description builder when a package is selected |

If the student has a **fee override** set on their enrolment, the amount field is pre-filled with that override instead of the class default.

### Custom billing period (one-off invoices)

For one-off payment types (Material Fee, Registration Fee, custom charges), the **Billing period** field is now flexible. Toggle **Set billing period** on or off:

- **Off** — no billing period is stored. The invoice falls back to its **invoice date** for grouping in monthly reports
- **On** — choose either:
  - **Single month** — pick a Month + Year (e.g. "May 2026")
  - **Spans multiple months** — pick a Start Month/Year + End Month/Year (e.g. "June 2026 → August 2026" for a quarterly material fee or semester levy)

Recurring fees (monthly tuition, etc.) always use a single billing period; the spans-multiple option is for one-offs that genuinely cover a longer window.

For **annual** payment types in **Based on range** mode, the billing period is set as a date range (start and end dates). The invoice's auto end date is calculated from the start; the period label on the line item is derived from the range.

### "All enrolled classes" combined invoice

When the selected student is enrolled in **2 or more fee-bearing classes**, an **All enrolled classes** toggle appears in the Add Payment dialog.

Turn it on to create a **single combined invoice** with one line item per enrolment — saving the work of adding multiple lines or creating separate invoices. The preview shows each class, its payment type, and fee.

You can still add or remove individual lines before submitting. The resulting invoice is a standard invoice (not an enrollment invoice) and can be edited like any other.

When you edit an existing payment with a clean full-month range, the dialog auto-detects this and pre-seeds the toggle and pickers.

**Trial classes are included too.** A student's **Trial** enrolments appear as lines at their trial fee (the class's trial fee, or the Trial payment type's default), so you can combine several trial classes for a new student into one invoice instead of one invoice per trial. This is handy if you turn off auto-invoicing on enrolment and invoice trials yourself afterwards.

### Adding another class to a single-class invoice

When you create an invoice for one class, an **Add another class to this invoice** picker below the line items lists the student's other enrolled classes. Pick one to add it as a new line, with its amount and description filled in automatically from its billing type (Monthly, Per Hour, Trial, etc.). The same picker is available when editing an invoice.

:::hint{type="info"}
Per Hour and Trial fees can't be added from the generic **+ Add Line Item** dropdown when the student has an enrolment of that type you haven't added yet — use **Add another class** instead, so the amount and lesson details are worked out for you.
:::

The invoice number is shown before saving so you can confirm the next number in the sequence.

### Line items & multi-item invoices

The Add Payment form uses a **line items editor** — you can add multiple line items to a single invoice, each with its own payment type, amount, and description.

Click **+ Add Line Item** to add another row. Each row supports:

- **Payment type** — any configured type (fee, package, custom)
- **Amount** — auto-filled from the payment type default; editable
- **Description** — auto-filled from the line item context; editable

### Description builder for packages

When you select a **Package** payment type on a line item, the description is auto-generated with:

- The package description (from the package's settings)
- The tier label (if the package uses tiered pricing — e.g. "Beginner", "Advanced")
- **Sessions** count (e.g. "Sessions: 10")
- **Validity** period (e.g. "Validity: 3 months")
- **Term / Period** dates (e.g. "Term/Period: 14 Apr 2026 – 13 Jul 2026")

The generated description appears as multi-line text in the invoice and on the generated PDF. You can still edit it manually before saving.

### Bulk Payment

Switch to the **Bulk** tab to create the same payment for multiple students at once:

1. Select a **location** and optionally a specific **class** to filter students
2. Students are listed — check the ones to include (or use **Select All**)
3. Set the shared **amount**, optional **discount**, **billing period**, and **due date**
4. Click **Create Payments** — payments are created one by one with a progress indicator

:::hint{type="info"}
Each student gets their own individual invoice. The bulk tab is for creating the same payment details across a group — not one shared invoice.
:::

***

## ✅ Bulk Mark as Paid

Mark multiple existing payments as paid in one action. Useful when:

- You've received cash payments from several students at once
- You've confirmed a batch of bank transfers offline
- You want to clear all overdue records for a specific month

1. Go to **Payments**
2. Use the checkboxes on the left of each row to select payments
3. Click **Mark as Paid** in the bulk toolbar
4. Confirm

:::hint{type="info"}
**Note:** All selected payments are marked as paid with the current timestamp. No individual receipts are sent for bulk marks — use this for internal record-keeping.
:::

***

## 🗑️ Bulk Delete

Permanently delete multiple payment records at once. Use this to clean up incorrectly generated payments or duplicates.

1. Select the payment rows to delete
2. Click **Delete** in the bulk toolbar
3. Confirm — this action cannot be undone

:::hint{type="warning"}
**Important:** Deleted payments cannot be recovered. Only delete records you are certain are incorrect.
:::

***

## 🔍 Filtering Before Bulk Actions

Always filter first to avoid accidentally selecting the wrong records:

| Filter              | Use case                                         |
| ------------------- | ------------------------------------------------ |
| By location / class | Mark all students in one class or branch as paid |
| By billing period   | Clear all payments for a specific month          |
| By status (Overdue) | Review and clean up overdue records              |
| By student          | Manage all payments for one student              |
| By week             | Filter per-session payments by a specific week   |
| New Enrollments     | View only one-time enrollment invoices           |

The location/class filter uses expandable pills — click a location to expand its classes, then click a specific class to narrow further.

***

## 📊 Exporting Payments

From the Payments page you can also export the current filtered list as a CSV for offline record-keeping or reconciliation. Click **Export** above the payments table.
