From c455c8adf25f7f31d5e76c4a81a90875c05ff86f Mon Sep 17 00:00:00 2001 From: Konstantinos Arvanitakis Date: Wed, 30 Sep 2026 22:01:25 +0300 Subject: [PATCH] Bump version to 0.30.0 --- CHANGELOG.md | 38 ++++++++++++++++++++++++++++++++++++++ composer.json | 2 +- package.json | 2 +- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 99457ef..7ba813b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,44 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). +## [0.30.0] - 2026-09-30 +### Added +- Manual vouchers (an integrated carrier's voucher typed in by hand) can be + edited and tracked by hand from the order page: "Edit number" (the number + stays required) and "Add tracking update" now show for them, as they do + for manual carriers. An In Transit / Collected update dispatches the + order and sends the "on its way" email; Delivered marks it delivered and + stops tracking polls for it. The carrier's own checkpoints keep coming in + alongside. +- A shipping method's "Tracking URL" can now be set for every driver, not + only `manual`. For an integrated carrier it's copied onto vouchers added + with "Add manual voucher", so they get the "Carrier tracking" link in the + admin and a "Track your parcel" link in the dispatched email. + API-created shipments still send customers to the order page. Vouchers + added before this have no link. +- The customer's delivery instructions are sent to the carrier: ELTA's + remarks (ΠΑΡΑΤΗΡΗΣΕΙΣ, one line, 90 characters) and ACS's + `Delivery_Notes`. ELTA labels print them in the ΠΑΡΑΤΗΡΗΣΕΙΣ box (up to 3 + lines on A4, 2 on A6 and the payment stub). + +### Changed +- Tracking polls run one queued job per shipment: `PollShipmentTrackingJob` + now only finds the shipments to poll and dispatches a + `RefreshShipmentTrackingJob` for each as a batch (`allowFailures`). A + slow or failing carrier call only affects its own job, with its own 45s + timeout; a failed one is retried by the next poll, five minutes later. + Needs the `job_batches` table (Laravel's default jobs migration). +- `PollShipmentTrackingJob` is unique, so a scheduled run is dropped while + the previous one is still pending. `RefreshShipmentTrackingJob` is unique + per shipment, so the same shipment is never refreshed twice at once, + which could record a checkpoint twice and fire its emails twice. + +### Fixed +- "Add manual voucher" and a manual carrier's "Create Shipment" failed + with an SQL error ("missing FROM-clause entry for table lunar_orders") + whenever a voucher number was entered: their unique check on the + shipments table also excluded the current order's id. + ## [0.29.3] - 2026-09-30 ### Fixed - Queued shipping jobs did nothing: `PollShipmentTrackingJob` and diff --git a/composer.json b/composer.json index 321ce60..425292f 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "boboko/core", "description": "Core module — authentication and shared panel behaviour", "type": "library", - "version": "0.29.3", + "version": "0.30.0", "autoload": { "psr-4": { "Modules\\Core\\": "src/" diff --git a/package.json b/package.json index 65830fc..78c8cc7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@boboko/core", - "version": "0.29.3", + "version": "0.30.0", "private": true, "type": "module", "description": "Portable Stimulus controllers and styles for boboko-core's cart + checkout module. Installed as a real npm dependency (file:../boboko-core in dev, a tagged git install in prod) so a consuming app's `npm install` resolves this package's own dependencies (leaflet, @hotwired/stimulus) transitively, the same way `composer update boboko/*` does for PHP. See CONTRIBUTE.md's \"JS/CSS: a real npm package\" section.",