Skip to content

Новости

This content is not available in your language yet.

2.3.3 — 2026-09-29

heading.anchorLabel

Спрямо 2.3.2.

Внимание при деплой

heading.anchorLabel
  • Зависимости: require в composer.json: добавен brick/phonenumber (*); добавен webcode/module-telephone-validation (^2.0.2).

Комити (3)

heading.anchorLabel
  • a1d4d78 Release 2.3.3
  • 77e3051 composer.json: версията остава 2.3.2
  • 591f842 телефонът към BoxNow е E.164 по държавата на адреса

Бележки

heading.anchorLabel
  • Телефонът към BOX NOW (получател и подател) се подава E.164 чрез libphonenumber по държавата на адреса / магазина, вместо „+359“ + номера без първия знак. Досега 359898875230 отиваше като +35959898875230, 898875230 — +35998875230, а 0898/875 230 — с наклонената вътре (Hub carrier-20). Невалиден номер се подава само изчистен — видим отказ от BOX NOW вместо тихо сменен номер.
  • Комитът „версията остава 2.3.2“ е остатък от MR-а, писан преди 2.3.2 да излезе от друг клон; версията на този релийз е 2.3.3.

При деплой

heading.anchorLabel
  • generated/ се чисти — ShipmentRequestBuilder има нов аргумент в конструктора (TelephoneNormalizer).
  • Нужен е webcode/module-telephone-validation ≥ 2.0.2 (препоръчително 2.1.0 — записва телефона в национален вид).

2.3.2 — 2026-09-29

heading.anchorLabel

Спрямо 2.3.1.

Внимание при деплой

heading.anchorLabel
  • Схема: нова таблица webcode_boxnow_apm_seen — създава се от setup:upgrade.
  • Конструктор: сменена сигнатура на Service\Taxonomy\APM::__construct — при деплоя се чисти generated/.
  • Конфигурация: ново поле Keep a Missing APM Active For (hours) (carriers/boxnow/apm_missing_grace_hours, по подразбиране 48) в Services & Pricing.
  • Първият синк след деплоя не изключва нито един автомат — гратисът на непроследените започва тогава.

Комити (2)

heading.anchorLabel
  • db1fcb2 fix: синкът на автоматите разпознава града и с латинска буква в името (!24)
  • 4ea3725 fix: автомат, изпаднал от фийда, не спира товарителницата и не се гаси веднага (!25)

Бележки

heading.anchorLabel
  • Фийдът destinations изброява само автоматите, достъпни в момента, и те мигат през деня. Синкът вече не гаси всички и не включва наново само видяните. Изключва се само автомат, който липсва по-дълго от гратиса. Автомат във фийда с неразпознат град се брои за видян.
  • Товарителницата ползва записания автомат на BoxNow и когато при нас е изключен — решава BoxNow. Резервата към най-близкия отворен офис за BoxNow не се пуска, за да не пренасочи пратката тихо.
  • Градове с латинска буква-двойник във фийда („Габровo“, „Варнa“) вече се разпознават.
  • Street fallback-ът разпознава и кирилския префикс („Автомат: [8124] …“).

2.3.1 — 2026-09-24

heading.anchorLabel

Спрямо 2.3.0.

Внимание при деплой

heading.anchorLabel
  • Конструктор: сменена сигнатура на __construct — при деплоя се чисти generated/.
  • Setup: data/schema patch — изпълнява се срещу жива база при setup:upgrade.

Комити (1)

heading.anchorLabel
  • a2c67db fix: записът на куриера се възстановява сам (RecurringData), patch-ът е идемпотентен

Бележки

heading.anchorLabel
  • Записът на куриера в webcode_carrier_entity се възстановява сам. Ако таблицата е празна, а отметката на AddBoxNowCarrierEntityPatch е останала в patch_list (модулът е бил изключван и таблицата е създадена наново), куриерът досега оставаше без запис, докато някой не махне отметката на ръка. Сега новият Setup\RecurringData създава липсващия запис при всеки setup:upgrade: неактивен, както и при първа инсталация.
  • AddBoxNowCarrierEntityPatch::apply() е идемпотентен. При махната отметка и съществуващ запис вече не гърми на уникалния code.

При деплой

heading.anchorLabel
  • Уточнение към автоматичните предупреждения: никоя съществуваща сигнатура не е сменена. __construct е на новия клас Setup\RecurringData. В production mode е нужен setup:di:compile заради новия клас.
  • Съществуващият data patch не се пуска наново. RecurringData при всеки setup:upgrade чете записа по code и създава нов само ако липсва. Съществуващ запис, вкл. is_active, не се пипа.

2.3.0 — 2026-09-19

heading.anchorLabel

Спрямо 2.2.2.

Внимание при деплой

heading.anchorLabel
  • Зависимости: require в composer.json: webcode/module-carrier: ^2.0 → ^2.10.

Комити (3)

heading.anchorLabel
  • 6feb8f7 Release 2.3.0
  • d5d27e0 chore(carrier-11): изисквай webcode/module-carrier ^2.10
  • c25898f feat(carrier-11): отказ на товарителница при отказ на поръчка

Бележки

heading.anchorLabel

Модулът вече може да анулира товарителницата при отказ на поръчка.

Нов ShippingLabel::cancel() — POST parcels/<id>:cancel. Анулирането е идемпотентно по документация, но работи само докато статусът на пратката е „New“; иначе куриерът вали с P420 и в поръчката влиза бележка.

Включва се от Магазини → Конфигурация → Webcode Solutions → Delivery Methods → Товарителници. Настройката е обща за всички куриери и е изключена по подразбиране — това издание не променя нищо от само себе си.

Отказ от куриера никога не блокира отказа на поръчката; причината влиза в коментарите на поръчката и в лога.

Внимание при деплой

heading.anchorLabel
  • Изисква webcode/module-carrier ^2.10 — констрейнтът е стегнат в това издание, защото модулът вече ползва LabelCancellationInterface, който идва с carrier 2.10.0. Деплой без него би дал фатал при зареждане на класа.
  • Нужен е cache:flush (заради новия observer и конфигурация в carrier 2.10.0).
  • Няма промени по схема и по static content.

Известен проблем

heading.anchorLabel

Не е минат реален отказ на жива товарителница при куриера (DoD т. 2–3) — покритието е unit. Първият жив отказ да се наблюдава.

2.2.1 — 2026-08-25

heading.anchorLabel

Register carriers/boxnow/api_url as a hidden system.xml field, so the API base URL is manageable per environment via bin/magento config:set / env.php (no merchant UI; default stays in config.xml).

2.1.1 — 2026-08-19

heading.anchorLabel

Поправено

heading.anchorLabel

Проследяването на пратки не работеше.

getTracking() викаше endpoint parcel:track. Като ОТНОСИТЕЛЕН URI първият сегмент не може да съдържа двоеточие — по RFC 3986 парсерът чете parcel: като схема, base URI-то отпада и Guzzle пада с:

The scheme ‘parcel’ is not supported.

Регресия от миграцията към споделения label pipeline (7c4e756): преди нея пътят беше parcels?parcelId=<id> и се резолвваше нормално. Мерено на bilki.bg — шест такива събития само на 19.08.2026.

Фиксът е ./parcel:track; endpoint-ът остава същият.

подаден път резолвира се до
parcel:track parcel:track ← base URI-то се губи
./parcel:track https://api-production.boxnow.bg/api/v1/parcel:track

Нов ShippingLabelTest покрива и трите извиквания и проверява КЪДЕ сочи всяка заявка след резолюцията, не самия низ — така лови и бъдещ endpoint с двоеточие в първия сегмент.

2.1.0 — 2026-07-28

heading.anchorLabel

Delivery Methods config cleanup:

  • API base URL default живее в etc/config.xml (carriers/boxnow/api_url), не като PHP const; override през config:set / env.php / DB.
  • Креденшълите вече не са required за Save на секцията; валидацията е бутонът Login & Configure.

2.0.0 — 2026-07-22

heading.anchorLabel

Major release — moves onto the shared Webcode_Carrier label pipeline.

  • Requires webcode/module-carrier ^2.0.
  • Rate price reconciled with the store Shipping Prices setting via the shared adjuster (module-carrier).

Known / deferred

heading.anchorLabel
  • Multi-box shipments: each box gets its own BoxNow parcel number, but only the first parcel’s label is printed today. Per-parcel labels are marked as a TODO in LabelProvider::createLabel for a follow-up (the packages split and per-parcel tracking are already in place).
  • Proprietary/EULA copyright headers standardized across the module.
  • Uses webcode/module-base for the shared Console command.