July 15th, 2026

Bug Squashing Update!
Fixed the core accounting order for both estimates and invoices (shared engine + backend, all surfaces: editor, PDF, and client view):
Discount is now applied before tax on the pre-tax subtotal (it was being computed on a tax-inflated amount, which over-discounted on CAD documents).
Tax calculates on the discounted net when the studio's Tax calculation basis is set to "After discount" (GST/PST now reconcile correctly on the PDF and client view, which previously ignored the setting).
Deposit is now a % of the grand total (net + tax + freight), not the pre-discount subtotal.
⚠️ Action required: this needs the "After discount" Finance Setting turned on per studio, and existing documents re-saved to pick up the new basis.
A retainer no longer blocks converting an estimate to an invoice (retainers are invoices under the hood and were wrongly counted as "already invoiced").
New Estimate → Purchase Order conversion — you can now go straight from an estimate to POs (grouped by vendor) without creating an invoice first. New "Convert to Purchase Order" action in the estimate list.
Blank products no longer fail to save. A manually-added product with no unit was silently failing the entire save (the schema required a unit). Unit is now optional, and save errors now surface a clear message instead of failing silently.
"Link to…" now works (was a "coming soon" stub) — retainers can be linked to POs / Invoices / Estimates.
In the link picker, Retainers are now a separate tab from Invoices everywhere (estimate/invoice/PO → Link to…), instead of being mixed into the invoice list.
The title and tag now show on the PO list (above the PO#, like invoices/estimates). The list query was stripping both fields in a final projection.
[NEW] Duplicate Product now asks whether to also copy the product's sub-items (only when the product has sub-items) — toggle on to bring them along, off to duplicate just the product.