Programs: Beneficiary follow-ups (new)
- Added Beneficiary Follow-Up tracking across the programs module:
- New
BeneficiaryFollowUpmodel with follow-up types: Employment, Education, Self-employment, Income change, Skills applied, General, Other. - Follow-ups are scoped per-organisation, with optional linkage to a Program.
- Added add/edit/delete flows per beneficiary, plus a global follow-up list with search, filter, sort, and row-level edit/delete.
- Added a Follow-ups tab on the Beneficiary detail page.
- New
Programs: Enrollment workflow improvements
- Added Enroll in Batch action on the Beneficiary detail → Enrollments tab:
- Button + modal UI, plus a
beneficiary_enrollPOST endpoint with duplicate/status guards.
- Button + modal UI, plus a
- Added
enrollment_countannotation to the Beneficiary list for clearer at-a-glance tracking.
Programs: program list + live section UX polish
- Improved Programs list to capture and show more information:
- Removed Code column and related sortable fields.
- Added Beneficiaries column showing distinct beneficiary counts across all batches.
- Made Active Batches header sortable.
- Show Program Center city alongside the name in the Program Center column.
- Public website (Programs live section):
- Show Program Center name + city instead of short code.
- Renamed live section heading to “Our Programs”.
- Program Batches:
- Removed
venuefield; location is now determined by the Program Center.
- Removed
Public website / subsite: publishing + editor improvements
- Publishing safety + consistency:
- Require at least one published page before a subsite can be made live (prevents blank public sites).
- Editor UX:
- Separated Base grid layout sections from ManageMyTrust sections in the Add Section flow:
- Blank layouts (1-col, 2-col, etc.) appear only in the Blank Section popup.
- Add Section popup shows only ManageMyTrust sections (intended UX).
- Added a hint on the settings page: Organisation name is used as fallback when Site name is left blank.
- Separated Base grid layout sections from ManageMyTrust sections in the Add Section flow:
- Added Terms & Conditions and Privacy Policy live components to subsites:
- Trust Admins can drag these sections onto any subsite page.
- Content renders at serve time from live org data (not frozen in stored HTML).
- Fixed program description rendering in the Programs live section:
- Strip HTML tags before truncating card previews.
- Render the full description as raw HTML in the modal
- Added rich-text editor for Program descriptions:
- Replaced plain textarea with
rich text editor.
- Replaced plain textarea with
Organisation UI: mobile usability
- Added a mobile dropdown fallback for Organisation detail tabs:
- On small screens, the tab strip is replaced with a
<select>dropdown. - JS keeps the dropdown and Bootstrap tabs synchronized in both directions.
- On small screens, the tab strip is replaced with a
Navigation: information architecture refinements
- Moved Program Centers into Organisation → About as a “Centers” tab:
- Removed the standalone Program Centers sidebar link and list page.
- Embedded management inline with activate/deactivate toggle.
- Updated breadcrumbs, cancel links, redirects, and unit tests.
- Moved Organisation Sectors from Settings sidebar into Organisation → About as a “Sectors” tab:
- Embedded sector table with add/edit/toggle/delete actions inline.
- Redirects now return to the Sectors tab after CRUD actions; updated tests accordingly.
- Sidebar organization update:
- Testimonials and Due Diligence moved from “Project Management” to the “Organisation” group (after File Vault), retaining existing permission guards.
- Due Diligence:
- Improved partner selection UX by showing partner city in the partner select modal.
Donors & Receipts: PAN improvements + production safety
- Donor PAN is now a first-class field:
- Added dedicated
pan_numberfield on Donor, replacingidentity_type='pan'. - PAN validation against Indian PAN format (AAAAA9999A) and uniqueness per organisation.
- Updated receipts, donor list, detail, and form screens to use the new field.
- Added migration to move existing PAN data into the new field.
- Added dedicated