---
title: Release 7.4.0
description: "**Audience:** admin, developer · **Last updated:** 2026-06-16 · [Edit on GitHub](https://github.com/phreesoft/bizuno/edit/main/docs/08-migration-and-upgrade/03-release-notes/7-4-0.md) # Release 7.4.0 > **Note on version numbering.** There is **no 7.3.9 release** — the line went > from 7.3.8 straight to **7.4.0**. The internal changes below were sometimes…"
url: "https://www.bizuno.com/docs/release-4-0/"
updated: "2026-06-18"
category: Release Notes
---

# Release 7.4.0

**Audience:** admin, developer · **Last updated:** 2026-06-16 · [Edit on GitHub](https://github.com/phreesoft/bizuno/edit/main/docs/08-migration-and-upgrade/03-release-notes/7-4-0.md)

# Release 7.4.0

> **Note on version numbering.** There is **no 7.3.9 release** — the line went
>  from 7.3.8 straight to **7.4.0**. The internal changes below were sometimes
>  developed under a "7.3.9" working label and a `< 7.3.9` *database-version*
>  upgrade gate, but they all ship in **7.4.0**. If you see "7.3.9" referenced
>  anywhere, read it as 7.4.0.

The "**PDF engine + period self-heal**" release. Two large internal changes,
 mostly invisible to end users, plus a batch of security and admin improvements.

---

## Highlights

### 1. PDF engine: TCPDF → tFPDF

TCPDF is gone; the sole PDF engine is now **`setasign/tfpdf`** (the canonical
 UTF-8 fork of FPDF, same maintainer as FPDI). Barcodes are generated by
 **`picqer/php-barcode-generator`**. Net result: a substantially smaller install
 and consistent UTF-8 handling. A small in-tree HTML shim (`bizHTMLCell`) renders
 simple `<b>/<i>/<u>/<br>/<font color>` markup in PhreeForm table cells.

If a form or report misbehaves after upgrade, see
 [PDF rendering issues](/docs/pdf-rendering-issues/).

### 2. `journal_main.period` self-heal

A one-time repair re-stamps each transaction's fiscal `period` from its
 `post_date` against `journal_periods`, fixing years of accumulated drift —
 especially on quality tickets, work orders, and future-dated recurring entries
 that had been stamped `period = 0`. Going forward:

- **`calculatePeriod()` auto-extends** the fiscal calendar (`ensureFiscalYearCovers`)
   so future-dated recurs always resolve to a real period instead of 0.
- **Fiscal-year close** ends with a JOIN-based re-stamp pass, so drift can't
   re-accumulate.

Background: [Period drift and recurring entries](/docs/period-drift-and-recurs/)
 and [Fiscal periods vs. calendar dates](/docs/fiscal-periods-vs-calendar-dates/).

---

## Added

- **Clear Business Cache button** — *Settings → Bizuno → Tools* (`bizCacheExpClear`),
   for forcing a registry rebuild without SQL. See [Cache mechanics](/docs/cache-mechanics/).
- **`bizScrubSensitive()`** — redacts `pass`/`pwd`/`token`/`card`/`cvv`-style
   values out of debug/trace output before it's written.
- **CSRF synchronizer-token layer** — default-on, via the `X-Bizuno-Csrf` header;
   set `BIZUNO_CSRF_ENFORCE = true` to reject (vs. warn on) invalid tokens. See
   [REST API surface](/docs/rest-api-surface/).
- **EDI N9/MSG capture** — inbound 850 reference text is recorded as a `$0`
   description line on the Sales Order (`MSG` is a no-op so it no longer traps).

## Changed

- **Role security: parent-from-child menu access** — a parent menu's level is
   derived from the max of its children (`removeOrphanMenus`), so a container like
   `inventory/build/manager` is reachable by granting its children. See
   [Roles and security](/docs/roles-and-security/).
- **Option lists moved to `common_meta`** — `options_*` lists are read via
   `getMetaCommon('options_*')` and re-seeded/mirrored on cache rebuild (the
   `common_meta` repair itself landed in 7.3.8).
- **Cross-module `lang()` fallback** — module-owned keys translate without the
   caller naming the module.

## Fixed

- **Quality tickets manager** — period default restored to *all periods* (it had
   silently filtered to the current period), status/closed filter wiring repaired,
   and a `creation_date` column added.

---

## Dependency / Composer changes

- **Removed:** `tecnickcom/tcpdf`
- **Added:** `setasign/tfpdf ^1.33`, `picqer/php-barcode-generator ^3.0`
- **Moved to `suggest`:** `setasign/fpdi_pdf-parser` (the commercial modern-PDF
   import parser) — see the core [README](https://github.com/phreesoft/bizuno/blob/main/README.md).

## Action required on upgrade

1. **Back up** the database and `BIZUNO_DATA` first.
2. **`composer install` / `composer update`** after pulling, so `tfpdf` and the
    barcode generator are present (a missing library shows as `tFPDF` not found).
3. **The period self-heal runs automatically** on upgrade — no manual step.
4. If you hold a Setasign license and need modern-PDF (FPDI) import, re-add
    `setasign/fpdi_pdf-parser` per the README.

> Sites on the 7.4.x line after this: **7.4.3** cast PDF image width/height to
>  numeric (PHP 8), **7.4.4** completed that for x/y and added strict-MySQL
>  (GoDaddy) compatibility fixes. See the repo `CHANGELOG.md` for the point
>  releases.

---

## Related

- [Fiscal-year management](/docs/fiscal-year-management/)
- [PDF rendering issues](/docs/pdf-rendering-issues/)
- [Period drift and recurring entries](/docs/period-drift-and-recurs/)
