Monthly payments view per instructor with a downloadable spreadsheet (CSV) export. Studio admin sees all instructors and can filter; instructors see only their own.
Spec:docs/features/payment-reporting.md
Scope
Built on {prefix}us_payments (no new table); group by month + instructor; join student + offering for display
Caps: view_all_payments (admin, all + filter), view_own_payments (instructor, own only), export_payments
Report scoping matches caller's caps; CSV export matches the filtered rows; tests under tests/Unit/Payment/ passing
Monthly payments view per instructor with a downloadable spreadsheet (CSV) export. Studio admin sees all instructors and can filter; instructors see only their own.
**Spec:** `docs/features/payment-reporting.md`
## Scope
- Built on `{prefix}us_payments` (no new table); group by month + instructor; join student + offering for display
- Caps: `view_all_payments` (admin, all + filter), `view_own_payments` (instructor, own only), `export_payments`
- Admin **Payments** page: month picker, instructor filter (admin), monthly total, **Export** button
- REST: `GET /payments` and `GET /payments/export` (returns `text/csv` with attachment header); query `month=YYYY-MM`, `instructor_id`
- `PaymentReportController`, `PaymentExporter`, `PaymentRepository::report()`
## Depends on
Payments
## Acceptance
- Report scoping matches caller's caps; CSV export matches the filtered rows; tests under `tests/Unit/Payment/` passing
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Monthly payments view per instructor with a downloadable spreadsheet (CSV) export. Studio admin sees all instructors and can filter; instructors see only their own.
Spec:
docs/features/payment-reporting.mdScope
{prefix}us_payments(no new table); group by month + instructor; join student + offering for displayview_all_payments(admin, all + filter),view_own_payments(instructor, own only),export_paymentsGET /paymentsandGET /payments/export(returnstext/csvwith attachment header); querymonth=YYYY-MM,instructor_idPaymentReportController,PaymentExporter,PaymentRepository::report()Depends on
Payments
Acceptance
tests/Unit/Payment/passingClosing as complete. Implemented and merged in PR #27 (monthly per-instructor report + CSV export, with HST aggregation).