Skip to content

2.12.0

Released: 2026-06-27

Highlights

  • Clients can now have one or more default salespersons, and there's a query to list a salesperson's clients.
  • Electronic invoices now report the purchase order number (DGI <dNroPed>) when the invoice came from an order.

Added

  • Client default salespersons — a Client ⇄ User many-to-many, managed through dedicated mutations and queries (kept out of the client input/response). Mutations addClientSalesperson / removeClientSalesperson; queries clientSalespersons(clientId:) and clientsBySalesperson(userId:). See Client Default Salespersons.
  • PAC purchase order number — the PAC invoice payload now includes the global group with purchaseOrder (DGI <dNroPed>), derived from the linked order's number on the create-from-invoice path. See PAC Purchase Order Number.

Changed

  • Nothing behavior-breaking. Both additions are additive to the GraphQL schema and the PAC payload.

Fixed

  • PolarService no longer crashes when POLAR_SERVER is configured as a full URL (e.g. in CI, where it is https://api.polar.com). URL-shaped values are now routed to the SDK's server_url argument instead of server, which only accepts named servers — this unblocks the test suite.

Migrations

No one-off scripts. The PAC purchase order is derived at submission time, so it needs no migration.

Frontend impact

  • Clients: manage a client's default salespersons with the dedicated addClientSalesperson / removeClientSalesperson mutations (both return the client's resulting User[]; add is idempotent) — this is separate from the client create/edit form. Read them with clientSalespersons(clientId:) and build a "my clients" view with clientsBySalesperson(userId:). These are display/pre-fill defaults only and don't change the salesperson stored on any quote/order/invoice.
  • PAC: no frontend work — the purchase order number is server-derived from the existing order ⇄ invoice relationship.

Versioning notes

  • Bumped with uv run python scripts/bump_version.py 2.12.0 --changelog-stub.
  • MINOR: additive GraphQL schema + additive PAC payload; no deploy-order constraints beyond applying the add_client_salespersons migration.