Add HST/tax support and payment reporting with HST aggregation #27

Merged
thatguygriff merged 2 commits from feature/hst-and-reporting into main 2026-06-08 14:38:52 +00:00
Owner

Summary

Adds HST/tax to the payment system and builds the monthly payments report (roadmap #8) with HST aggregation.

HST / tax

  • Studio Settings gains a default HST rate (%) option (us_hst_rate, manage_billing).
  • us_payments gains tax_rate + tax_amount; the rate is frozen onto the payment at booking and tax is computed against the pre-tax subtotal. Payment::total() = subtotal + tax.
  • Overridable per booking on My Lessons while unpaid (recomputes tax_amount via PaymentRepository::updateTax), matching the e-transfer-email override pattern.
  • Comped registrations are never taxed; receipts break out subtotal / HST / total when tax applies.

Payment reporting (#8)

  • PaymentReport — pure aggregator: subtotal, HST collected, grand total, and CSV rendering.
  • PaymentReportController — month + instructor filters; studio admins see all instructors, instructors are scoped to their own rows; CSV via a nonce-protected admin-post.php handler.
  • New Payment Report admin menu, gated on export_payments so instructors (who lack manage_billing) can reach it.
  • PaymentRepository::findPaidBetween — paid-in-month query with optional instructor filter.

Tests & docs

  • New PaymentReportTest; added updateTax/findPaidBetween, HST computation, comp-not-taxed, and HST-receipt cases.
  • Updated payments.md, payment-reporting.md, and the README status table.

All green: 160 tests, PHPCS clean, PHPStan no errors, no debug statements.

🤖 Generated with Claude Code

## Summary Adds HST/tax to the payment system and builds the monthly payments report (roadmap #8) with HST aggregation. ### HST / tax - **Studio Settings** gains a default **HST rate (%)** option (`us_hst_rate`, `manage_billing`). - `us_payments` gains `tax_rate` + `tax_amount`; the rate is **frozen onto the payment at booking** and tax is computed against the pre-tax subtotal. `Payment::total()` = subtotal + tax. - Overridable **per booking** on **My Lessons** while unpaid (recomputes `tax_amount` via `PaymentRepository::updateTax`), matching the e-transfer-email override pattern. - Comped registrations are never taxed; receipts break out subtotal / HST / total when tax applies. ### Payment reporting (#8) - `PaymentReport` — pure aggregator: subtotal, **HST collected**, grand total, and CSV rendering. - `PaymentReportController` — month + instructor filters; studio admins see all instructors, instructors are scoped to their own rows; CSV via a nonce-protected `admin-post.php` handler. - New **Payment Report** admin menu, gated on `export_payments` so instructors (who lack `manage_billing`) can reach it. - `PaymentRepository::findPaidBetween` — paid-in-month query with optional instructor filter. ### Tests & docs - New `PaymentReportTest`; added `updateTax`/`findPaidBetween`, HST computation, comp-not-taxed, and HST-receipt cases. - Updated `payments.md`, `payment-reporting.md`, and the README status table. All green: 160 tests, PHPCS clean, PHPStan no errors, no debug statements. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
thatguygriff added 1 commit 2026-06-08 14:30:30 +00:00
Add HST/tax support and payment reporting with HST aggregation
CI / Tests (PHP 8.1) (pull_request) Successful in 51s
CI / Coding Standards (pull_request) Successful in 1m1s
CI / Tests (PHP 8.2) (pull_request) Successful in 58s
CI / No Debug Code (pull_request) Successful in 4s
CI / PHPStan (pull_request) Successful in 1m16s
CI / Tests (PHP 8.3) (pull_request) Successful in 45s
CI / Build Plugin Zip (pull_request) Has been skipped
553cfafa49
Studio Settings gains a default HST rate; the rate is frozen onto each
payment at booking and computed against the pre-tax subtotal, with the
total billed as subtotal + tax. The rate is overridable per booking on
My Lessons while unpaid (recomputing the tax amount), comped
registrations are never taxed, and receipts break out subtotal/HST/total.

Builds the payments report (roadmap #8) from us_payments: a monthly
per-instructor view with subtotal, HST collected, and grand-total
aggregation, plus a nonce-protected CSV export via admin-post. Studio
admins see all instructors and can filter; instructors are scoped to
their own rows. The Payment Report menu is gated on export_payments so
instructors (who lack manage_billing) can reach it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
thatguygriff added 1 commit 2026-06-08 14:36:20 +00:00
Merge remote-tracking branch 'origin/main' into feature/hst-and-reporting
CI / Build Plugin Zip (pull_request) Has been skipped
CI / Tests (PHP 8.1) (pull_request) Successful in 52s
CI / Tests (PHP 8.2) (pull_request) Successful in 53s
CI / No Debug Code (pull_request) Successful in 4s
CI / Coding Standards (pull_request) Successful in 1m3s
CI / PHPStan (pull_request) Successful in 1m18s
CI / Tests (PHP 8.3) (pull_request) Successful in 51s
2aa0d5ad5d
# Conflicts:
#	src/AdminMenu.php
thatguygriff merged commit 4b34d2464d into main 2026-06-08 14:38:52 +00:00
thatguygriff deleted branch feature/hst-and-reporting 2026-06-08 14:38:53 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Unsupervised/unsupervised-scheduler#27