Skip to main content

Changelog

Each release's date and main changes. Newest at the top.

To upgrade: left navigation AboutCheck for Updates → follow the install prompt. The plugin .app is reinstalled by Solution Provider.


v1.6.5 — 2026-05-04

Multiple GRNs per PO + delta-based booking + master/detail grid

One PO can now have multiple GRNs

  • Previously a PO mapped to a single GRN — partial receipts caused data loss.
  • Each RECEIVING / RECEIVED / CLOSED webhook now creates a fresh GRN containing only the delta (cumulative minus already-booked).
  • Retransmits naturally skip (delta = 0) — no double-booking.

Critical bug fixes

  • Unit confusion: PODTL.TransferedQty is stored in EA (smallest qty), not the PO line's UOM. The previous code compared cumulative-in-CT against booked-in-EA — delta math was off. Everything is now compared in EA.
  • PODTL.TransferedQty not advancing: grn.AddDetail() doesn't link the GRN to the PO via FromDocType, so AutoCount didn't update TransferedQty. We now manually UPDATE PODTL.TransferedQty += actual SmallestQty after grn.Save(), so the next webhook computes against an accurate baseline.
  • Qty-rounding drift: AutoCount rounds line Qty to the item-master's decimal places (e.g. 2.5 CT → 3 CT). We read back GRDTL.SmallestQty after save and use the actual value to advance PODTL.TransferedQty — keeps PO ↔ GRN ↔ inventory aligned even when rounding occurs.

More robust receive-quantity sourcing

  • WMS sometimes leaves asnLineItems[].quantity at 0 while the actual receipts live in asnItemReceiveDetails (per-event RV records).
  • The new logic sums receiveQty across both sources and takes the MAX per SKU — works regardless of which field WMS populated.

Plugin UI: PO → ASN Sync master/detail

  • Master row: one per PO + a GRNs count column
  • Click ▶ to expand: every GRN for that PO with GRN # (View button) / WMS Status / GRN Date / Created By / Items / Webhook At

Removed

  • The "DUPLICATE_SKIPPED" guard from v1.6.3 — the delta logic replaces it naturally.

v1.6.4 — 2026-05-03

Plugin stall fix

  • M009 schema migration: auto-creates a filtered index on Z_WmsPickingNoteStatus(WmsSyncEnabled).
    • Previously, PickingNoteWorker's 15-second poll did a full table scan on every cycle. On databases with 50K+ rows, lock contention stalled the plugin UI for tens of seconds.
    • Now the worker hits only the small "currently syncing" subset via the index — milliseconds. Plugin's Picking List loading is no longer slow.
    • Customer-invisible: index is created instantly on API startup (< 1 second), no data impact.

v1.6.3 — 2026-05-02

Sync Log overhaul + duplicate-GRN protection + Retry Failed buttons

Sync Log enhancements

  • View Payload dialog: select a row + click View Payload (or double-click) to open a dialog showing pretty-printed Request + Response JSON, each panel with a Copy button.
  • Ctrl + Alt + 0 cleanup panel: on the Sync Log tab, this hotkey opens a "Cleanup & Retention" dialog supporting date-range + Type-based bulk Clear Payloads (preserves rows) or Delete Rows (hard delete).
  • Auto per-day cleanup: controlled by PayloadRetentionDays setting (default 90 days). Every hour the API NULLs payload columns on rows older than N days, bounding DB growth.
  • All workers now save full payloads: previously only PoTransferController + ItemSync saved payloads; now PickingNoteWorker / AsnCreateWorker / CancellationWorker / AsnCancellationWorker do too.

Duplicate GRN protection

  • WmsCallbackController.HandleAsnStatus: now checks Z_WmsAsnReceiving and PODTL.TransferedQty before creating a new GRN.
  • Previously, every ASN webhook re-fire (network retransmit, partial→complete reception, per-SKU partial deliveries) would create a fresh GRN. Now duplicates are skipped, callback row links to the original GRN.
  • Source labelling: Z_WmsAsnReceiving or PODTL.TransferedQty for clear audit.

New Retry Failed buttons

  • One on each of three tabs:
    • Item Code Sync → "Retry Failed Items" (ticked rows)
    • PO → ASN Sync → "Retry Failed PO Pushes" (Ctrl+Click selected rows)
    • Picking List Sync → "Retry Failed Picking Notes" (ticked rows)
  • All have confirmation dialogs listing what's about to retry. Touches selected rows only — never bulk-retries.

AsnCreateWorker no longer retries forever

  • Failed POs are now parked at WmsStage = 'Failed' and skipped on the next poll.
  • Previously every 15 seconds it retried — for permanently-bad POs, it would keep hammering WMS.
  • Users must check the Sync Log for the cause, fix it, then explicitly use Retry Failed PO Pushes.

Other

  • All Sync Now buttons get confirmation dialogs (Picking / Item Code / Item Type).
  • Item Code Sync Now cap raised from 5 to 20.
  • Sync Log column header z-order bug fixed (was hidden by injected button bar).

v1.6.2 — 2026-05-02

Large-PO support + B2B order type + picking-note SQL timeout fix

  • WmsGatewayClient: replaced FormUrlEncodedContent with manual byte-identical StringContent.
    • FormUrlEncodedContent had an internal ~65520-char URI cap, causing PO pushes with 200+ line items to fail with "Invalid URI: The Uri string is too long".
    • Now 1000+ line items work.
  • PickingNoteWorker: OrderType = B2B, added serviceLevel = LTL.
    • Melodies' warehouse flow needs both, otherwise the Ship button fails downstream.
  • PickingNoteWorker SQL timeout: replaced db.GetDataTable with raw SqlCommand + CommandTimeout = 120.
    • Customer's DB has 50K+ Z_PickingNote rows + millions of detail rows; the 30-second default timed out.

v1.6.1 — 2026-05-02

PO Transfer skips local item check + full payload logging

  • PoTransferController: removed pre-push item-exists check.
    • Customer prefers WMS returning errors directly (more authoritative + real-time).
    • WMS errors (with full request + response) saved to Z_WmsSyncLog for diagnostics.
  • On push failure, the entire request + response payload lands in the sync log.

v1.6.0 — 2026-05-02

Major navigation + UI overhaul

Default menu order changed

  • Operation menu order: Item Code Sync → PO → ASN Sync → Picking List Sync → Cancel Picking Job → Sync Log → About.
  • Item Type Sync and UOM Names Sync are no longer separate menus — they're now buttons in the top-right of Item Code Sync (modal dialogs).

Default behaviour changes

  • Picking List Sync defaults to manual: Auto-sync new is OFF by default; revealed via Ctrl + Alt + 0 dialog (advanced).
  • Cancel Picking Job is read-only by default: rows can't be ticked unless Ctrl + Alt + 0 enables "selectable mode".
  • Default landing page is Item Code Sync (was Picking List).

Search functionality

  • Each tab has a Search textbox + Filter button.
  • Enter key = trigger Filter.
  • Search is "any column match": item code, PN number, PO number, customer name, driver, remark…

Page titles

  • Header dynamically displays the current page ("WMS Sync Hub / Item Code Sync"), no longer just the logo.

Picking List column width

  • Picking Note column shrunk by 70% to free up space.
  • ItemCode column shrunk by 20%.

v1.5.0 — 2026-05-02

UOM push opt-in + per-row trigger + full sync log audit

  • PackageInfoSyncStarted master switch: UOM description push (Phase 2) is OFF by default; explicit opt-in.
  • Push UOM (focused) button: top-right of Item Code Sync, pushes UOM for the currently focused row only. Pre-condition: item must be already synced (LastSyncDate not null).
  • Z_WmsSyncLog audit: UOM_PUSH log entries store the full payload.

v1.4.0 — 2026-05-01

BAS Packaging Description Sync (Phase 2 of Item Sync)

  • New WmsBasService: logs into BAS direct API (gwmsth.best-inc.com) for token + cookie.
  • ItemSyncWorker adds Phase 2: after Phase 1 (GLINK BatchOperateItem pushes the SKU) succeeds, automatically calls BAS API to overwrite WMS packaging descriptions with AutoCount UOM names (UN / CT etc.).
  • 1-5 second random jitter + max 10 items per cycle to avoid hitting BAS API limits.

v1.3.x — 2026-05-01

Item Type Sync via WMS BAS direct API

  • v1.3.0: backend ItemTypeSyncWorker, pushes AutoCount.ItemType to WMS categories via BAS API.
  • v1.3.1: hardening + plugin UI Start Sync button.
  • v1.3.2: navBar inject bug fix + Sync Now retries fail / never-seen rows.

v1.2.x — 2026-05-01 / 2026-04-27

Early feature iterations

  • v1.2.3: Item Sync UX overhaul + worker hardening + switched to AED_LS_01.
  • v1.2.4: AutoCount resolver skips backup folders (_bk20250207 etc.), added appsettings override path.
  • ShipFrom supports StreetLine2 + StreetLine3 (long addresses).
  • DPAPI auto-encrypts SqlPassword + LoginPassword on service start.

Earlier — 2026-04-24 / 25

Foundations

  • API wrapped as Windows Service via Topshelf.
  • About dialog + Check-for-Updates (WmsHubUpdater + S3 release pipeline).
  • Plugin-side ErrorLogger wired into hot paths + footer version indicator.

Stay current

Releases sometimes ship in rapid succession (v1.6.0 to v1.6.4 all on the same day) — these are field-feedback fixes during customer rollout. Keep API auto-update enabled so you don't fall behind.