v0.12.30: Global invoices view, tabbed settings, and Ansible modules
WarmDesk v0.12.30 adds a global invoices view for admins, reorganises Account Settings into tabs, fixes text selection in dark and black themes, and ships three new Ansible collection modules for billing automation β all exercised by a live Molecule test suite.
Global invoices view
Admins now have a dedicated Invoices entry in the main navigation. The view lists invoices across every customer in one table β no need to visit each customer page to check payment status.
Key capabilities:
Filter by status: All, Draft, Sent, Paid, Overdue, and Cancelled.
Overdue invoices surface at the top and are highlighted so nothing slips through.
Clicking a row navigates directly to that customerβs invoice detail.
Only global admins see the navigation entry and can access the view β other roles are blocked at the API level.
Account Settings tabs
The single-page Account Settings scroll is gone. Settings are now split into four tabs:
| Tab | Contents |
|---|---|
Profile | Display name, email, avatar, locale, date/time format, week start, dashboard default. |
Security | Password change, passkeys, MFA / TOTP, trusted devices. |
Notifications | Per-event email and in-app notification preferences. |
API Keys | Personal API key management (create, revoke, copy). |
Each tab is bookmarkable β the active tab is reflected in the URL hash so deep-linking to e.g. #security works.
Text selection in dark and black themes
Selected text in the dark and pure-black (AMOLED) themes now uses a theme-aware highlight colour. Previously the browser default selection colour was used, which produced near-invisible light-blue-on-dark highlights. All text areas, inputs, and read-only content panels are affected.
Ansible collection β billing automation modules
The ansilabnl.warmdesk Ansible collection gains three modules for managing helpdesk billing resources:
ansilabnl.warmdesk.customer_contact
Create, update, and delete contacts attached to a customer record.
- name: Add primary contact
ansilabnl.warmdesk.customer_contact:
warmdesk_url: https://warmdesk.example.com
warmdesk_api_key: "{{ api_key }}"
customer_name: Acme Corp
name: Jane Smith
email: jane@acme.example
phone: "+31 20 555 0100"
department: Sales
is_primary: true
state: presentansilabnl.warmdesk.invoice
Manage customer invoices β create drafts, set line items, and control status.
- name: Create a draft invoice
ansilabnl.warmdesk.invoice:
warmdesk_url: https://warmdesk.example.com
warmdesk_api_key: "{{ api_key }}"
customer_name: Acme Corp
reference: "INV-2026-007"
currency: "β¬"
vat_rate: 21.0
line_items:
- description: Managed hosting β June 2026
quantity: 1
unit_price: 499.00
state: presentansilabnl.warmdesk.invoice_template
Create and maintain reusable invoice templates in the admin panel.
- name: Ensure monthly hosting template exists
ansilabnl.warmdesk.invoice_template:
warmdesk_url: https://warmdesk.example.com
warmdesk_api_key: "{{ api_key }}"
name: Managed Services Monthly
default_currency: "β¬"
default_vat_rate: 21.0
notes: "Payment due within 30 days."
line_items:
- description: Managed hosting β monthly fee
quantity: 1
unit_price: 499.00
currency: "β¬"
state: presentAll three modules are fully idempotent and support check mode.
Molecule test suite
The collection ships a complete Molecule scenario (extensions/molecule/default/) that:
Builds the WarmDesk Go binary from source and starts a real server on a throwaway port.
Registers an admin user and creates an API key.
Runs the full lifecycle for every module: create β idempotency β update β update-idempotency β absent β absent-idempotency.
Runs a check-mode smoke test to verify no changes are reported against an already-absent resource.
Tears down the server and cleans up on exit.
Run the suite from the ansible/ directory:
make testDocumentation
The API reference (docs/api.md) gains three new sections:
Section 8 β Invoices: all
GET / POST / PUT / DELETEendpoints under/customers/:id/invoices, full request/response schemas, credit-note endpoint.Section 9 β Invoice Templates: admin CRUD endpoints with schema documentation.
Section 10 β Customer Contacts: create/update/delete contacts with
department,phone, andis_primaryfields.
The admin and user guides expand the Invoices chapter (credit notes, payment methods, overdue tracking) and add a dedicated Contacts sub-section under Customer Detail. A new Invoice Templates section covers the admin workflow for creating and applying templates.
Upgrade
Download v0.12.30 from the download page or pull the latest release tag.
No manual database changes are required. New columns are applied automatically via GORM AutoMigrate on first boot.