fix/avian #3

Merged
elirtf merged 5 commits from fix/avian into main 2026-06-11 16:02:19 +00:00
Owner
No description provided.
- TimeEntry model with ticket time logging (minutes + description)
- Stripe Checkout payment integration on invoices (Pay Now button)
- QBR report generator via WeasyPrint (PDF with ticket stats, hardware, maintenance)
- Hardware lifecycle dashboard (active/aging/expiring/out-of-warranty/eol buckets)
- Seed data with sample time entries
- Stripe env var and WeasyPrint system deps (font-dejavu)
- Dedicated Contracts page filtering documents by 'contract' category
- Client selector dropdown in portal header for admin users
- All admin queries (tickets, hardware, invoices, licenses, maintenance,
  documents, QBR) scope to selected client via cookie-based filter
- portal_context helper provides base context to all portal templates
- Portal routes for time tracking, Stripe pay, QBR, contracts, hardware lifecycle
- client_filter() helper with selected_client cookie for admin scoping
- portal_context() providing base template context (clients, selected_client, csrf)
- All list/detail routes updated to filter by selected client when cf is set
- QBR PDF generator scoped to selected client with WeasyPrint rendering
- Table data cells: .88rem -> .95rem
- Monospace meta text: .62rem-.65rem -> .72rem-.75rem
- Badges: .62rem -> .7rem
- Card/detail text: .78rem-.82rem -> .85rem-.9rem
- Form labels, buttons, filter tabs: proportionally increased
- Sidebar nav and bottom links remain at original .85rem
elirtf merged commit ad259c4317 into main 2026-06-11 16:02:19 +00:00
elirtf deleted branch fix/avian 2026-06-11 16:02:19 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
elirtf/msp!3
No description provided.