| @@ -1,7 +1,27 @@ | ||
| 1 | 1 | Easy Invoice — complete changelog |
| 2 | 2 | The readme summarises each release; this file keeps every entry. |
| 3 | 3 | |
| 4 | += 2.4.3 - September 29, 2026 = | |
| 5 | +* Fix: **every A4 document spilled a sliver onto a second page.** The "Download as PDF" button captures the page as shown, and the sheet the designs lay out is exactly A4 — but the capture was given only 288mm of each 297mm page, because a 9mm strip was reserved for the page label. The last 9mm of the sheet, blank or not, became page two. One sheet is now one page; the label for a genuinely multi-page file is drawn inside the sheet's own bottom margin. | |
| 6 | +* Fix: the Creative design drew a sheet about 200px taller than the A4 page it sits on, so even a one-line invoice captured as two pages. Its spacing scale is compressed on the card; the design keeps its proportions. | |
| 7 | +* Fix: where a page's capture stopped short of the foot of the sheet — the last page, or one that broke early at a row — the rest of the page was left unpainted, which some readers show as a black band. Every page is painted white first. | |
| 8 | +* Fix: **PDFs broke onto a second page while a third of the first page sat empty.** Six of the nine designs lay themselves out on a rem spacing scale sized for a screen, and that scale reached the PDF untouched: the print stylesheet sits in the document head, while each design declares its own values further down, so the design always won. The print sheet's values now take precedence, and the spacing scale, display type, line spacing, meta rows and the wrappers between sections are all compressed for paper. A six-line invoice that took two pages in eight of the nine designs now fits on one in all nine; long documents still break where they should and the items table repeats its header. | |
| 9 | + | |
| 10 | += 2.4.2 - September 29, 2026 = | |
| 11 | +* Fix: the invoice and quote builders could fatal instead of rendering when the preview ran before a document existed; the preview now shows a placeholder until there is something to draw. | |
| 12 | +* Fix: **a PayPal payment smaller than the invoice total no longer marks the invoice paid.** When PayPal confirmed less than was requested, the pending record was flipped to "completed" before its amount was corrected, so anything reading the payment at that moment still saw the full balance. The settled amount is written first; the invoice lands on Partially paid with the real balance owed. | |
| 13 | +* Fix: the plugin's own sidebar logo rendered as an empty coloured square — `wp_kses_post()` strips `<svg>`. The mark (and any logo the White-Label addon substitutes) now goes through an SVG-aware allow-list. | |
| 14 | +* Change: the WordPress admin menu uses the plugin's own icon instead of a generic dashicon, drawn so WordPress recolours it with the admin colour scheme. | |
| 15 | +* Fix: **offline payments work in the free plugin.** Choosing "Manual Payment" on an invoice showed no instructions, no receipt upload and recorded nothing — the pieces existed but were never wired together. Bank transfer, cheque and cash are now three proper payment methods: each shows your details and instructions, can ask for the client's transaction reference and a receipt (optional or required), and records a pending payment for you to confirm. | |
| 16 | +* New: **add your own offline payment methods** (ACH, wire transfer, mobile money, a second bank account…) under Settings → Payment Methods → "Add an offline payment method". Each gets its own instructions, reference field and receipt setting, appears in the Pay Now panel, and can be removed again; payments already recorded keep it. | |
| 17 | +* New: **confirm or reject** each submitted offline payment from the Payments screen. The client's reference, note and receipt are shown on the payment row and the payment page; the admin email carries them too. Confirming marks that payment completed and moves the invoice to Paid or Partially paid by its real balance (it used to mark the invoice paid whatever the amount); rejecting keeps the record for the audit trail and leaves the balance owed. The client sees "payment noted — awaiting confirmation" on the invoice page meanwhile. | |
| 18 | +* Security: receipts are stored under random names in a folder that refuses direct requests on Apache, and are only ever served to signed-in staff through the plugin (`admin-post.php?action=easy_invoice_payment_proof`). Receipts are deleted with their payment and on a full uninstall. | |
| 19 | +* Fix: the Payments screen's "Total amount" counted submissions still awaiting confirmation and rejected payments as money received; it now sums confirmed payments only. The status filter gained "Awaiting confirmation" and "Rejected". | |
| 20 | +* Fix: the free payment reminder never ran (it looked for a status nothing writes). Settings → Advanced → "Payment reminder (days after due date)" now emails the Reminder template once to each invoice still owed that many days after its due date; leave it empty to switch it off. Easy Invoice Pro's own reminders take over when Pro is active. | |
| 21 | +* Fix: an invoice whose payment methods were limited to "Manual Payment" before this release now offers the three offline methods instead of nothing. | |
| 22 | +* Change: a brand-new install starts with Bank transfer enabled, so an invoice can be paid from day one; a client can have at most three offline submissions awaiting confirmation on one invoice (filter `easy_invoice_offline_pending_limit`). | |
| 23 | + | |
| 4 | 24 | = 2.4.1 - September 15, 2026 = |
| 5 | 25 | * Fix: on phones the public invoice and quote pages clipped the line-item table's Total column and, in the Modern, Creative and Professional designs, the totals box; every design now fits a 360px screen (narrower screens scroll the table sideways). |
| 6 | 26 | * Performance: the payment script (and the jQuery it needs) loaded on every front-end page of the site; it now loads on the public invoice page only. Filter `easy_invoice_load_payment_assets` to add pages. |
| 7 | 27 | * Housekeeping: the changelog in this file now summarises each release; the complete, itemised history lives in changelog.txt inside the plugin folder and on GitHub. |