JoomSchool's payment system records every fee a school charges, every payment it receives, and ties both to the student, the academic year and the billing month. This article covers the three building blocks (Pay Methods, Pay Types, Payments), the recording workflow, the bundled payment plugins (PayPal and Offline) and the most common reconciliation pitfalls.
Overview
Three concepts work together:
- Pay Method — the channel through which a payment is made (Cash, Cheque, Card, PayPal, Bank Transfer). The default install seeds three: Check, Cash and Card.
- Pay Type — a fee category with a default amount (Tuition, Lab, Activity, Transport, Library). Each pay type is associated with a numeric fee.
- Payment — a single transaction tied to a student, a class/section, a roll, a billing month and year, one or more pay types and a method. This is the row that appears on a parent's invoice list.
In addition, JoomSchool ships with two payment plugins that handle online flows: the bundled Offline plugin (records that the student will pay in person) and the PayPal plugin (sends the payer through the PayPal gateway and updates the payment status when it returns).
Prerequisites
- Students exist with class, section and roll number assigned.
- The currency is configured in Components → JoomSchool → Options → Payment (currency code, sign, decimals, position).
- The default payment method in the same options screen is set if you want a default to apply to new invoices.
Pay Methods
Components → JoomSchool → Pay Methods lists every channel available. The default install seeds Check, Cash and Card.
Adding or editing a pay method
- Click New (or click an existing row to edit).
- Fill in Name — the label parents see (e.g. "Bank Transfer"). This is a required text field.
- Set Status to Published.
- Click Save & Close.
Tying a pay method to an online plugin
For online channels, the pay method's name should match the plugin's element identifier (e.g. paypal). When an invoice's pay method matches an enabled plugin, the frontend payment view shows a Pay Now button that sends the user through that plugin's gateway flow.
Manual methods (Cash, Cheque) have no plugin — they are recorded by the admin after the parent pays in person.
Pay Types
Components → JoomSchool → Pay Types lists every fee category. Adding a comprehensive list at setup makes invoice entry much quicker — you pick from a dropdown instead of typing fees by hand.
Adding a pay type
- Click New.
- Fill in:
| Field | Description | Required |
|---|---|---|
| Title | The name of the fee (e.g. "Tuition", "Lab fee", "Library fee"). | Yes |
| Fee | Default amount for that fee. Used to pre-populate the Total Bill on the payment form. | Yes |
| Comment | Optional notes about what the fee covers. | No |
- Click Save & Close.
You can have as many pay types as you need. Schools commonly create separate types for tuition, transport, lab, activity, library, ID card replacement, and any one-off fees.
Recording a payment
Go to Components → JoomSchool → Payments and click New. The form has two tabs.
Student Academic tab
| Field | Description | Required |
|---|---|---|
| Class | The student's class. | Yes |
| Section | The student's section. | Yes |
| Roll | The student's roll number. JoomSchool looks up the student record by this combination. | Yes |
| Payment Method | Pick from your Pay Methods list. | Yes |
| Month | The billing month (Jan – Dec). | Yes |
| Year | The academic year. | Yes |
Payment Info tab
| Field | Description | Required |
|---|---|---|
| Pay For | One or more pay types from the Pay Types list. Multi-select. | Yes |
| Total Bill | The grand total for the invoice. JoomSchool can pre-fill this from the selected pay types. | No |
| Paid Amount | How much the parent has paid against this invoice. | Yes |
| Due Amount | The outstanding balance. | No |
| Status | Pending / Paid / Unpaid / Cancel / Under Review. | Yes |
| Comment | Free-text notes about the payment (cheque number, reference, late-payment reason). | No |
Click Save & Close. The new payment appears in the Payments list and on the student's frontend invoice list immediately.
Status values explained
| Status | Meaning |
|---|---|
| Pending | The invoice has been created but no payment has been processed yet. |
| Paid | Payment was completed in full. |
| Unpaid | The parent owes the full amount. |
| Cancel | The invoice has been cancelled and no payment is expected. |
| Under Review | A payment is in progress (e.g. a cheque is being cleared). |
Partial payments and arrears
If a parent pays only part of an invoice, fill in Paid Amount with what was paid and Due Amount with the balance, and set Status to Pending. Open the same invoice next month, increase Paid Amount with the new payment, decrease Due Amount correspondingly, and update the status. When Due Amount reaches 0 and Paid Amount equals Total Bill, switch to Paid.
The accounting reports (Components → JoomSchool → Accounting) sum these amounts month by month so you can see at a glance how much of each month's billing was actually collected.
Receipts and invoice PDFs
Each row in the Payments list view has two buttons:
- PDF — downloads a printable PDF of the invoice using the layout configured in Components → JoomSchool → Options → Header / Footer / PDF.
- Invoice — opens a printable web view.
Both render the school's logo, name, address (depending on the Options settings) and the line-by-line breakdown of pay types, total, paid and due.
The bundled Offline payment plugin
Installed at plugins/joomschool_payment/offline/. Enable it under System → Manage → Plugins.
The Offline plugin is a placeholder for "the parent will pay in person". When the parent clicks Pay Now on an invoice that uses the Offline method, JoomSchool shows a confirmation page reminding them to settle the bill at the school office. No gateway is involved.
The bundled PayPal payment plugin
Installed at plugins/joomschool_payment/paypal/. Enable it under System → Manage → Plugins → PayPal - JoomSchool Payment Plugin. The plugin's Options screen has the following settings:
Basic fieldset
| Field | Description |
|---|---|
| PayPal Email | Your school's PayPal Business email — payments are credited here. |
| Sandbox | Yes for testing against PayPal's sandbox; No for production. |
| Secure post (use https) | Recommended Yes — sends gateway requests over HTTPS. |
| Plugin name | Internal label, default "Paypal". |
| Write log | Yes / No. Useful while debugging gateway issues. |
| Bypass validation | Yes / No. Leave No in production. |
Style fieldset
| Field | Description |
|---|---|
| Title | Label shown on the payment selection screen. Default "Paypal". |
| Description | Optional descriptive text shown next to the title. |
| Preview Image | Image displayed alongside the payment option (default the bundled PayPal logo). |
| Buy Image | Optional graphic for the actual "Buy" button. |
Switching to live
When you're ready to take real payments, set Sandbox = No, save the plugin and run a small test transaction with a real card. PayPal credits the test amount to your business account; refund it after verifying.
Refunds and corrections
JoomSchool does not have a dedicated refund flow. The recommended way to handle refunds is:
- Open the original payment record.
- Set its Status to Cancel.
- Add a comment with the refund reference and date.
- If the parent later re-pays, create a fresh payment record rather than re-opening the cancelled one — accounting reports rely on records being immutable once cancelled.
Tips & Best Practices
- Define every Pay Type at setup. Typing free-form fee names on each invoice creates inconsistency in the accounting reports.
- Use a clear naming convention ("Tuition – Class 6", "Lab fee – Class 9") if fees vary by class. The accounting reports group by Pay Type name.
- Keep Cash, Cheque and Card as separate Pay Methods, even though the underlying transaction logic is similar — this is how income reports break down by channel.
- Run the PayPal plugin in Sandbox mode while training office staff. The full flow looks identical to live so the training transfers.
- Reconcile monthly, not annually. Each month, run Components → JoomSchool → Accounting → Income Month and compare the total against bank deposits.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Pay Now button doesn't appear on a frontend invoice. | The pay method assigned to it is offline (Cash/Cheque) or the invoice is already Paid. | Check the method on the invoice; manual methods don't show Pay Now. |
| The PayPal redirect goes to a 404 or a generic PayPal page. | The plugin is in sandbox mode but the email is your live business email (or vice versa). | Match the email to the mode. |
| Cancelled invoices still appear on the parent's invoice list. | This is by design — cancelled records are kept for audit. | If a parent shouldn't see the cancellation, archive the record instead. |
| Total Bill is empty after picking pay types. | The payment form does not auto-sum pay types — Total Bill is a free-text field. | Type the total manually. |
| Frontend invoice list shows wrong currency. | The currency settings in Components → JoomSchool → Options → Payment haven't been saved. | Save the Payment options page. |
| The Pay Methods dropdown on the payment form is empty. | All pay methods are unpublished. | Components → JoomSchool → Pay Methods — publish at least one. |
| Income totals in accounting are missing a payment. | The payment's Status is Pending or Cancel — not Paid. | Switch the payment to Paid once funds are received. |
| The PayPal plugin's Pay Now button is greyed out. | The plugin is disabled in System → Manage → Plugins. | Enable the plugin. |