2.8 (unreleased)
----------------

- Add Invoice admin actions to retry pending TicketBAI sends, regenerate
  missing PDFs from the signed invoice, and resend the ticket email to the
  invoice recipient.  Retrying is idempotent, follows invoice order and stops
  when the certificate is unusable or the authority rejects an invoice.
- Add TicketBAI status and PDF filters/columns to the invoice changelist and
  extend its search fields with email, TicketBAI code and CSV.


2.7 (unreleased)
----------------

- Detect expired and expiring TicketBAI client certificates.  The Django admin
  shows the certificate state, the new ``check_ticketbai_certificate`` command
  can notify operators by email, and ``send_invoice`` refuses to contact the
  authority when the certificate has expired.  Alert emails default to
  Django's ``ADMINS`` setting when no dedicated recipient list is configured.
- Clear ``Invoice.errorxml`` after a successful send so a retry does not keep
  showing an old error.


2.6 (unreleased)
----------------

- Migrate packaging metadata from setup.py to pyproject.toml (PEP 621).
- Drop Django 4.2 support; Django 5.2, 6.0 and 6.1 are tested and supported.


2.5 (unreleased)
----------------

- Require pytbai >= 1.8, which upgrades the signing stack to signxml 5.2,
  cryptography 46.0.6+ and lxml 6.1+, and drops pyOpenSSL.
- Log TicketBAI send errors with the invoice id, persist them in
  ``Invoice.errorxml`` and re-raise request errors so callers can handle them.
- Declare ``requests`` explicitly.
- Bump weasyprint to 70.0.


2.4 (unreleased)
----------------

- Require pytbai >= 1.7.1, which allows pyOpenSSL 24.2.1 and cryptography
  43.0.0.


2.3 (unreleased)
----------------

- Document the ``TICKETBAI_CONF`` setting in the README: its structure, the
  required and optional keys, the ``Config`` model it goes with, and the
  ``DEBUG`` based test/production switch (issue #5).
- Add tests that keep the documented example in sync with ``pytbai``.
- Bump crc8 to 0.2.1 (the CRC values are unchanged).


2.2 (unreleased)
----------------

- Require pytbai >= 1.7.0, which allows signxml 3.2.2, cryptography 42.0.7 and
  pyOpenSSL 24.1.0.
- Bump weasyprint from 59.0 to 63.1: 59.0 is incompatible with pydyf >= 0.11
  and PDF generation failed with
  ``TypeError: PDF.__init__() takes 1 positional argument but 3 were given``.
- Add Python 3.12 support; require Python 3.11 or newer.
- ``get_html_string`` no longer requires ``subject["address"]``.
- Add a test suite (``tests/``) and a CI workflow. The tests cover the PDF
  pipeline, the invoice helpers, the admin registration and the dependency
  constraints that caused the signxml conflict.
