Skip to content

Changes

Started by timer
Started 6 days 18 hr ago
Took 58 sec on built-in

Summary

  1. SIS: persisted marketplace listings with outbox delivery to Amazon (details)
  2. SIS: import creates products/images, delete, BOM stock, reopen closed offers, timezone fix (details)
  3. SIS: Shopify listings adapter, marketplace-aware page/wizard, BOM filter, modal buttons (details)
  4. SIS: Shopware 6 adapter, multi-source list, wizard filters, German dates, coloured marketplace icons (details)
  5. BI: Transactions by Org page + Shipping Performance (cut-off SLA) page (details)
  6. Mobile return: DPD routing-barcode + multi-parcel scan lookup, partner-search overview, profile user line (details)
  7. SIS: real marketplace brand marks (MarketplaceIcon component, Simple Icons on solid brand tiles) (details)
  8. Brand assets: vector LogShip marks + regenerated PWA / Android launcher icons and splash screens (details)
  9. Security keys: show the merchant / organisation each user is assigned to (list, phone cards, enrol picker) (details)
  10. Partners: editable cut-off time (C_BPartner.CutOffTime, Time column 'HH:mm:ssZ'); shorter top-bar labels 'LS generieren' / 'Kommis' (details)
  11. WIP from previous sessions: BOM bundle image (KI-Bild), SelectBox spinner fix, product stock card, mobile tasks, product-lookup, deploy/template/demo-instance scripts, app version bump (details)
  12. Dashboard SameDay card: per-merchant cut-off from C_BPartner.CutOffTime (default 14:00) (details)
  13. Fix build:app hang: listing-outbox timer skipped during prerender + unref'd timers (details)
  14. SIS: eBay adapter (offer id / legacy items), immediate delivery, details toggle, image popup, phone cards (details)
  15. BI shipping performance: exclude stock-blocked orders (status 'No stock') (details)
Commit 95c2ad2c895302268130313dea4eebf6b66b730a by info
SIS: persisted marketplace listings with outbox delivery to Amazon

Replaces the report-per-page-load Amazon pricing page with listings managed
in iDempiere (CUST_MarketplaceListing + CUST_MarketplaceListingChange).

- server/utils/listings: listing store (REST, caller/service token), adapter
  contract (Amazon implemented, eBay/Shopify stubs), outbox (claim → coalesce
  → push → settle, stale-claim recovery, feed polling, 5-min spot-check),
  token-bucket rate limiter, importer (report → product match → upsert)
- amazonSpApi: LWA token cache, PUT/DELETE, merge-patch builders for
  purchasable_offer (price, min/max, sale) + fulfillment_availability,
  offer-only PUT, Feeds API (JSON_LISTINGS_FEED), catalog productType,
  competitiveSummary batch
- Nitro plugin: timer flush every 60 s (debounce 20 s, PM2 instance 0 only)
- routes sales/sis: listings (list/edit/delist/relist/link/create/import),
  flush, changes (+cancel), status, products-defaults; old price-update
  removed, report view moved to listings/remote (amazon-stocks page)
- page rewritten on the table + import wizard, list-products modal, change
  history drawer, link-product modal
- template cleanup: both tables in the truncate list; recipe + smoke script
The file was addedserver/api/sales/sis/changes.get.ts
The file was addedapp/components/sales/sis/ListProductsModal.vue
The file was modifiedapp/pages/sales/sis/index.vue (diff)
The file was addedserver/api/sales/sis/listings/[id]/relist.post.ts
The file was addedserver/api/sales/sis/listings/[id]/link-product.put.ts
The file was addedapp/components/sales/sis/ChangeHistoryDrawer.vue
The file was modifiedreference/template-cleanup/01-idempiere-truncate.sql (diff)
The file was addedserver/api/sales/sis/changes/[id]/cancel.post.ts
The file was addedserver/utils/listings/adapters/ebay.ts
The file was addedserver/utils/listings/rateLimiter.ts
The file was addedserver/api/sales/sis/flush.post.ts
The file was removedserver/api/sales/sis/listings.get.ts
The file was addedapp/components/sales/sis/ImportWizard.vue
The file was addedserver/api/sales/sis/products-defaults.get.ts
The file was addedapp/components/sales/sis/LinkProductModal.vue
The file was addedserver/api/sales/sis/listings/index.get.ts
The file was addedserver/utils/listings/adapters/amazon.ts
The file was added.claude/rules/marketplaces/marketplace-listings.md
The file was modifiedapp/pages/fulfillment/amazon-stocks/index.vue (diff)
The file was addedserver/api/sales/sis/listings/import-preview.post.ts
The file was addedserver/api/sales/sis/listings/[id].put.ts
The file was addedserver/api/sales/sis/listings/import.post.ts
The file was addedserver/utils/listings/outbox.ts
The file was addedserver/api/sales/sis/listings/[id]/delist.post.ts
The file was modifiedserver/utils/sisMatching.ts (diff)
The file was addedserver/utils/listings/adapters/shopify.ts
The file was modifiedserver/api/materials/products/search.get.ts (diff)
The file was addedserver/utils/listings/adapters/types.ts
The file was addedserver/api/sales/sis/listings/remote.get.ts
The file was addedserver/utils/listings/routeHelper.ts
The file was addedserver/api/sales/sis/listings/create.post.ts
The file was addedserver/plugins/listing-outbox-flush.ts
The file was addedserver/utils/listings/listingStore.ts
The file was addedserver/api/sales/sis/status.get.ts
The file was addedserver/utils/listings/adapters/index.ts
The file was addedserver/utils/listings/importer.ts
The file was addedreference/test-scripts/listing-outbox-smoke.mts
The file was removedserver/api/sales/sis/price-update.post.ts
The file was modifiedserver/utils/amazonSpApi.ts (diff)
Commit 5b0748aa1fb2f4e53a28e9d6009f4931d7909c8a by info
SIS: import creates products/images, delete, BOM stock, reopen closed offers, timezone fix

- Import wizard: "Create missing products" (minimal M_Product, Value = SKU, asin, Amazon price,
  Strapi record) and "Import images from Amazon" (ASIN MAIN catalog picture, only when the product
  has no picture); result counters, pages of 40 with side effects
- Per-row links to the Amazon offer page and the Seller Central offer editor (marketplace domain
  from the order source), "listed on Amazon" date label
- DELETE listings/[id]: remove the SIS record + change history (409 while sending); row + bulk buttons
- BOM rows: components with stock from pp_product_bom; internal qty = first component's on-hand,
  hover popover with all components
- Relist reopens a "Closed" Amazon offer (purchasable_offer replace without end_at + qty) and is
  allowed for inactive listings; VALID preview results are non-blocking
- Outbox: iDempiere Created/Updated are server-local with a literal Z -> serverLocalToIso()
  (IDEMPIERE_TZ); the debounce held every change for one UTC-offset hour before. Timer first run 10 s
- Page layout: wider product column with fixed-width name, tighter numeric columns, toolbar and
  selection-bar buttons styled, lighter link icons
The file was modifiedserver/utils/listings/importer.ts (diff)
The file was modifiedserver/utils/listings/listingStore.ts (diff)
The file was addedserver/utils/listings/productCreator.ts
The file was modifiedapp/pages/sales/sis/index.vue (diff)
The file was modifiedserver/api/sales/sis/listings/index.get.ts (diff)
The file was modifiedserver/api/sales/sis/listings/[id]/relist.post.ts (diff)
The file was modifiedserver/utils/sisMatching.ts (diff)
The file was modifiedserver/utils/listings/adapters/amazon.ts (diff)
The file was addedserver/api/sales/sis/listings/[id].delete.ts
The file was modifiedapp/components/sales/sis/ImportWizard.vue (diff)
The file was modifiedserver/utils/amazonSpApi.ts (diff)
The file was modifiedserver/api/sales/sis/listings/import.post.ts (diff)
The file was modifiedserver/plugins/listing-outbox-flush.ts (diff)
The file was modified.claude/rules/marketplaces/marketplace-listings.md (diff)
Commit 5e251ffa9442317ebfb0a3d42838497529cb0b06 by info
SIS: Shopify listings adapter, marketplace-aware page/wizard, BOM filter, modal buttons

- adapters/shopify.ts: GraphQL Admin API 2025-10 for `shopify` (token) and `shopify-new`
  (client credentials) sources; one row per variant (variant / product / inventoryItem GIDs),
  import with available qty at the configured or first location, price via
  productVariantsBulkUpdate, qty via inventorySetQuantities (+ inventoryActivate), delist/relist
  as qty, create via productCreate + variant sku/price + publish; synchronous results settle as
  confirmed (PushResult.confirmed) and carry the assigned ids (PushResult.remote)
- order-sources lists every source with a listings adapter (marketplace key + label); listings
  route returns marketplace + shop link data; create route handles Shopify (no ASIN, SKU key)
- importer: index-aligned preview rows, external ids / meta / image URL per row, image import
  from the marketplace picture for non-Amazon sources (importImageFromUrlIfMissing)
- page: order-source picker with marketplace icons, generic "Import listings", labels/columns/
  links per marketplace (Buy Box, FBA, ASIN, min/max = Amazon only), BOM stat tile + filter
- wizard: source picker with icon, BOM tag/filter/count, fixed-width name column, styled buttons;
  list-products modal: Shopify mode without ASIN/min/max, styled buttons
The file was modifiedserver/api/sales/sis/order-sources.get.ts (diff)
The file was modifiedapp/components/sales/sis/ImportWizard.vue (diff)
The file was modifiedserver/utils/listings/productCreator.ts (diff)
The file was modifiedapp/pages/sales/sis/index.vue (diff)
The file was modifiedserver/utils/listings/adapters/index.ts (diff)
The file was modifiedapp/components/sales/sis/ListProductsModal.vue (diff)
The file was modifiedserver/utils/listings/outbox.ts (diff)
The file was modifiedserver/utils/listings/adapters/types.ts (diff)
The file was modified.claude/rules/marketplaces/marketplace-listings.md (diff)
The file was modifiedserver/utils/listings/importer.ts (diff)
The file was modifiedserver/api/sales/sis/listings/create.post.ts (diff)
The file was modifiedserver/api/sales/sis/listings/index.get.ts (diff)
The file was modifiedserver/utils/listings/adapters/shopify.ts (diff)
The file was modifiedserver/utils/listings/listingStore.ts (diff)
Commit 621500391179e3a8a1c9f549d0d647c3b17b3916 by info
SIS: Shopware 6 adapter, multi-source list, wizard filters, German dates, coloured marketplace icons

- adapters/shopware.ts: Admin API (integration client credentials against {marketplace_url}/oauth/token),
  one row per sellable product (variants inherit name/price/cover/tax from the parent), price patch replaces
  only the default-currency entry (net from the product tax rate), qty = stock, create via POST /product with
  storefront visibilities; synchronous confirm; registry maps Marketplace `shopware6`
- GET listings accepts orderSourceId=a,b,c or all=1, enriches per org and returns per-source marketplace /
  link data; page: checkbox picker with "All order sources", Source column, per-row marketplace for labels,
  links, Buy Box cells, Send now across the selection; wizard keeps its own switchable source
- Import wizard: "Only with ERP stock" (+ ERP qty column) and "Only active" filters, fixed-width name column
- German date/time formatting (app/utils/sisDate.ts) on the page, wizard and history drawer
- Brand-coloured MDI marketplace icons (Tabler 2.21 has no Shopify glyph) in picker, rows and wizard
- Thumbnail @error fallback to the placeholder (a broken picture no longer stretches the row)
- Styled modal buttons, aligned BOM tag in the wizard
The file was modifiedapp/pages/sales/sis/index.vue (diff)
The file was modifiedserver/utils/listings/adapters/index.ts (diff)
The file was modifiedserver/api/sales/sis/listings/index.get.ts (diff)
The file was addedserver/utils/listings/adapters/shopware.ts
The file was modified.claude/rules/marketplaces/marketplace-listings.md (diff)
The file was modifiedapp/components/sales/sis/ImportWizard.vue (diff)
The file was addedapp/utils/sisDate.ts
The file was modifiedapp/components/sales/sis/ChangeHistoryDrawer.vue (diff)
Commit 5748e244b3fff29b0345ca95c39db05423196555 by info
BI: Transactions by Org page + Shipping Performance (cut-off SLA) page

- /materials/transactions-by-org: all M_Transaction rows of one org/warehouse in a date window,
  shared enrichment helper (transactionEnrichHelper) now also used by the product history route,
  inventory/movement document links, warehouse column, Excel/CSV/PDF export
- /bi/shipping-performance: cut-off SLA per merchant (c_bpartner.CutOffTime, default 14:00,
  override), working days minus CUST_NonWorkingDays, Berlin timezone handling (berlinTime.ts),
  KPIs, month/day/hour/weekday/lateness charts, source table, order grid
- sidebar + BI mega menu entries, en/de/es translations
- recipe: iDempiere REST timestamp semantics (Created = Berlin local with fake Z)
The file was addedapp/pages/materials/transactions-by-org.vue
The file was addedserver/api/materials/transactions-by-org.get.ts
The file was addedserver/api/bi/shipping-performance.get.ts
The file was added.claude/rules/idempiere/timestamps-timezone.md
The file was modifiedapp/components/MainNavigationMenu.vue (diff)
The file was modifiedapp/composables/useTransactionReportPdf.ts (diff)
The file was modifiedapp/assets/langs/shared.js (diff)
The file was addedapp/pages/bi/shipping-performance.vue
The file was addedserver/utils/berlinTime.ts
The file was modifiedserver/api/materials/transactions.get.ts (diff)
The file was modifiedapp/composables/menu/admin/bi.ts (diff)
The file was addedserver/utils/transactionEnrichHelper.ts
Commit fc75bdef0da02ce98b346ca350f375b5b536b6fd by info
Mobile return: DPD routing-barcode + multi-parcel scan lookup, partner-search overview, profile user line

- shipmentScanCandidates/shipmentScanFilter (app/utils/scanCode.ts): a DPD label scan is the
  28-char routing code (% + postcode + 14-digit parcel no + service + country) while M_InOut
  stores only the parcel number; parcels 2..n live in trackingnoarray. Used by the mobile return
  page, the dashboard scan dispatcher and the desktop returns page.
- Return page: external-RMA hit without InOut_ID offers the customer's shipments instead of
  'not found' (standalone RMAs from the Amazon import); selection list shows positions
  (qty, name, SKU); detail shows all product identifiers, 2-line names, back-to-selection
  button; e-mail notification on by default.
- /api/idempiere-auth/user was missing (profile modal showed no user data); cookie-based route
  added; 'Angemeldet als …' shown next to the app-update check.
The file was modifiedapp/pages/mobile/return.vue (diff)
The file was modifiedapp/utils/scanCode.ts (diff)
The file was addedserver/api/idempiere-auth/user.get.ts
The file was modifiedapp/pages/integrations/returns-desktop.vue (diff)
The file was modifiedapp/pages/mobile/index.vue (diff)
Commit cc223c5bf47e0e748adee95b2141f4969b1dfb76 by info
SIS: real marketplace brand marks (MarketplaceIcon component, Simple Icons on solid brand tiles)
The file was modifiedapp/pages/sales/sis/index.vue (diff)
The file was addedapp/components/MarketplaceIcon.vue
The file was modified.claude/rules/nuxt/ui-components.md (diff)
Commit 1166bdce969eebf8235c6f7fca08a6fe6456dbdb by info
Brand assets: vector LogShip marks + regenerated PWA / Android launcher icons and splash screens

public/assets/brand/*.svg cropped from reference/SVG (official artwork); scripts/generate-icons.js
now renders PWA icons (+maskable), apple-touch-icon, favicons, Android mipmaps (legacy, round,
adaptive foreground, background #1E5BFF) and all splash sizes from them.
The file was modifiedandroid/app/src/main/res/values/ic_launcher_background.xml (diff)
The file was modifiedandroid/app/src/main/res/drawable-port-mdpi/splash.png (diff)
The file was modifiedpublic/favicon-32x32.png (diff)
The file was addedreference/SVG/Artboard 7.svg
The file was modifiedpublic/apple-touch-icon.png (diff)
The file was modifiedandroid/app/src/main/res/drawable-port-hdpi/splash.png (diff)
The file was addedpublic/assets/brand/logship-mark-black.svg
The file was modifiedandroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png (diff)
The file was addedreference/SVG/Artboard 5.svg
The file was modifiedandroid/app/src/main/res/drawable-land-hdpi/splash.png (diff)
The file was modifiedandroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png (diff)
The file was modifiedandroid/app/src/main/res/mipmap-mdpi/ic_launcher.png (diff)
The file was modifiedandroid/app/src/main/res/mipmap-hdpi/ic_launcher.png (diff)
The file was addedreference/SVG/Artboard 9.svg
The file was addedreference/SVG/Artboard 4.svg
The file was modifiedandroid/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png (diff)
The file was modifiedpublic/icon-72x72.png (diff)
The file was modifiedpublic/icon.png (diff)
The file was addedreference/SVG/Artboard 10.svg
The file was addedreference/SVG/Artboard 3.svg
The file was modifiedpublic/icon-192x192.png (diff)
The file was modifiedandroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.png (diff)
The file was addedpublic/assets/brand/logship-logo-white.svg
The file was modifiedandroid/app/src/main/res/drawable-land-xxxhdpi/splash.png (diff)
The file was modifiedandroid/app/src/main/res/drawable-land-xxhdpi/splash.png (diff)
The file was modifiedandroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png (diff)
The file was modifiedandroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png (diff)
The file was modifiedandroid/app/src/main/res/drawable-port-xxhdpi/splash.png (diff)
The file was addedpublic/assets/brand/logship-mark-white.svg
The file was addedpublic/assets/brand/logship-mark.svg
The file was modifiedandroid/app/src/main/res/drawable-land-mdpi/splash.png (diff)
The file was modifiedandroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.png (diff)
The file was addedpublic/assets/brand/logship-logo-on-dark.svg
The file was addedreference/SVG/Artboard 1.svg
The file was modifiedpublic/icon-128x128.png (diff)
The file was modifiedscripts/generate-icons.js (diff)
The file was modified.claude/rules/mobile/capacitor-app-build.md (diff)
The file was addedreference/SVG/Artboard 6.svg
The file was addedpublic/assets/brand/logship-logo-white-text.svg
The file was addedreference/SVG/Artboard 2.svg
The file was modifiedpublic/icon-maskable-512x512.png (diff)
The file was addedreference/SVG/Artboard 8.svg
The file was modifiedandroid/app/src/main/res/drawable-port-xhdpi/splash.png (diff)
The file was modifiedandroid/app/src/main/res/drawable-land-xhdpi/splash.png (diff)
The file was modifiedandroid/app/src/main/res/drawable-port-xxxhdpi/splash.png (diff)
The file was addedpublic/assets/brand/logship-logo-black.svg
The file was modifiedandroid/app/src/main/res/mipmap-xhdpi/ic_launcher.png (diff)
The file was modifiedandroid/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png (diff)
The file was modifiedandroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png (diff)
The file was modifiedpublic/icon-152x152.png (diff)
The file was modifiedandroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png (diff)
The file was modifiedpublic/icon-384x384.png (diff)
The file was modifiedandroid/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png (diff)
The file was modifiedpublic/favicon-16x16.png (diff)
The file was modifiedandroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.png (diff)
The file was addedpublic/assets/brand/logship-logo.svg
The file was addedpublic/assets/brand/logship-logo-mark-blue.svg
The file was modifiedpublic/icon-512x512.png (diff)
The file was modifiedpublic/icon-maskable-192x192.png (diff)
The file was modifiedpublic/icon-96x96.png (diff)
The file was modifiedpublic/icon-144x144.png (diff)
The file was modifiedandroid/app/src/main/res/drawable/splash.png (diff)
Commit 340ac5c6da72203f50c359a2edf02ba14012419a by info
Security keys: show the merchant / organisation each user is assigned to (list, phone cards, enrol picker)
The file was modifiedserver/utils/webauthnIndex.ts (diff)
The file was modifiedapp/components/users/SecurityKeyEnrolModal.vue (diff)
The file was modifiedapp/pages/users/security-keys/index.vue (diff)
The file was modifiedserver/api/admin/webauthn/keys.get.ts (diff)
Commit e6ab90c18030fb404309ed33b6908017e1725a27 by info
Partners: editable cut-off time (C_BPartner.CutOffTime, Time column 'HH:mm:ssZ'); shorter top-bar labels 'LS generieren' / 'Kommis'
The file was modifiedapp/assets/langs/shared.js (diff)
The file was modifiedapp/pages/partners/partners/[id]/edit.vue (diff)
The file was modified.claude/rules/partners/partner-edit-form.md (diff)
The file was modifiedapp/components/partners/PartnerForm.vue (diff)
The file was modifiedserver/api/partners/partners/update.put.ts (diff)
Commit b68726395c832b56c7de441025404da6e090d34b by info
WIP from previous sessions: BOM bundle image (KI-Bild), SelectBox spinner fix, product stock card, mobile tasks, product-lookup, deploy/template/demo-instance scripts, app version bump
The file was modifiedandroid/update-files/version.json (diff)
The file was addedserver/utils/products/bundleImageCompose.ts
The file was modified.nvmrc (diff)
The file was modifiedapp/pages/materials/products/[id]/edit.vue (diff)
The file was addedreference/demo-instance/import-merchant-catalog.sh
The file was modifiedreference/template-cleanup/REFRESH-QUICKSTART.md (diff)
The file was addedreference/demo-instance/kazaar/catalog-raw.json
The file was addedreference/demo-instance/seed-demo-data.sh
The file was addedserver/api/materials/products/[id]/bom/bundle-image.post.ts
The file was addedreference/demo-instance/kazaar/catalog.json
The file was addedreference/template-cleanup/05-apply-env-overrides.sh
The file was addedreference/demo-instance/kazaar/consignees-v1.json
The file was modifiedreference/template-cleanup/README.md (diff)
The file was addedreference/demo-instance/make-demo-photo.py
The file was addedserver/utils/products/bundleImage.ts
The file was modifiedreference/demo-instance/hess/masters.json (diff)
The file was addedreference/demo-instance/kazaar/build-catalog.py
The file was modified.claude/rules/nuxt/dependency-upgrades.md (diff)
The file was modifiedapp/components/materials/ProductBomModal.vue (diff)
The file was addedreference/template-cleanup/sync-from-prod.sh
The file was modifiedreference/template-cleanup/TEMPLATE-README.md (diff)
The file was modifiedapp/components/SelectBox.vue (diff)
The file was modifiedreference/template-cleanup/clone-logship-instance.sh (diff)
The file was modified.claude/rules/materials/product-stock-actions.md (diff)
The file was addedreference/ci/jenkins-job-deploy-instance.xml
The file was modifiedreference/edge-proxy/README.md (diff)
The file was modifiedreference/template-cleanup/03-neutralize-env.sh (diff)
The file was modifiedandroid/app/build.gradle (diff)
The file was modifiedapp/components/materials/ProductForm.vue (diff)
The file was addedreference/ci/deploy-instance.sh
The file was addedreference/test-scripts/bundle-image-compose.mts
The file was addedreference/demo-instance/rename-consignees.sh
The file was modifiedreference/ci/deploy-production.sh (diff)
The file was added.claude/rules/materials/bom-bundle-image.md
The file was modifiedapp/pages/mobile/tasks.vue (diff)
The file was modifiedreference/template-cleanup/04-set-instance-identity.sh (diff)
The file was modifiedserver/api/mobile/product-lookup.post.ts (diff)
The file was modifiedapp/components/materials/ProductStockActionModal.vue (diff)
The file was modifiedapp/components/materials/ProductStockLocatorsCard.vue (diff)
The file was addedreference/demo-instance/build-consignees.py
The file was addedreference/demo-instance/seed-orders-returns.sh
The file was addedreference/demo-instance/kazaar/consignees.json
Commit e70cfa443fd9179caca9afadffd10083522d0c8d by info
Dashboard SameDay card: per-merchant cut-off from C_BPartner.CutOffTime (default 14:00)

prime-due-today computes each SameDay merchant's deadline from its own cut-off; the header
counts down to the nearest upcoming deadline, org chips show the cut-off when merchants
differ, tooltip lists all. Texts no longer hard-code 14:03.
The file was modifiedapp/assets/langs/shared.js (diff)
The file was modifiedapp/pages/index.vue (diff)
The file was modifiedserver/api/dashboard/prime-due-today.get.ts (diff)
The file was modified.claude/rules/idempiere/timestamps-timezone.md (diff)
The file was modifiedapp/components/partners/PartnerForm.vue (diff)
Commit f20f4767fb2421e81c1c909f6b3458cdd4a8e20d by info
Fix build:app hang: listing-outbox timer skipped during prerender + unref'd timers

nuxt generate boots Nitro in-process, so the listing-outbox plugin armed its
setTimeout/setInterval inside the build and kept the process alive ("still
running: 2 timers"); it would also have flushed the prod outbox from a dev
machine. Gate on import.meta.prerender, unref the timers, recipe note in
mobile/capacitor-app-build.md. Includes the app version bump 1.0.71 (code 72)
left by the aborted release runs.
The file was modifiedandroid/update-files/version.json (diff)
The file was modified.claude/rules/mobile/capacitor-app-build.md (diff)
The file was modifiedserver/plugins/listing-outbox-flush.ts (diff)
The file was modifiedandroid/app/build.gradle (diff)
Commit 56c5268fa1921d65191c36cc8be77a3fa91f7c5e by info
SIS: eBay adapter (offer id / legacy items), immediate delivery, details toggle, image popup, phone cards

- adapters/ebay.ts: Sell Inventory API (inventory item → offer → listing; ListingKey = offerId,
  ExternalProductId = listingId, SKU as inventory id) + Trading API for listings never migrated to
  the Inventory API (GetMyeBaySelling with variations, ReviseInventoryStatus / EndFixedPriceItem /
  RelistFixedPriceItem); token JSON like the Laravel EbayTokenRepository, refreshed and written back
  to the order source; create via inventory item + offer + publish
- immediate delivery: adapters flagged `immediate` (eBay, Shopify, Shopware) are flushed right after
  queueing from the put / delist / relist / create routes; Amazon keeps the batched outbox
- page: "Details" toggle (internal price, marketplace qty, listed-on date hidden by default), internal
  qty right of the Qty field, copy buttons hidden, thumbnail click → centred medium-size popup,
  card layout ≤ 768 px with the same inputs and actions
- MarketplaceIcon: Amazon from public/assets/brand/amazon-icon.png on a white tile
The file was modifiedserver/api/sales/sis/listings/[id]/relist.post.ts (diff)
The file was addedpublic/assets/brand/amazon-icon.png
The file was modifiedapp/pages/sales/sis/index.vue (diff)
The file was modifiedserver/utils/listings/adapters/index.ts (diff)
The file was modifiedserver/api/sales/sis/listings/create.post.ts (diff)
The file was modifiedserver/utils/listings/adapters/types.ts (diff)
The file was modifiedserver/api/sales/sis/listings/[id].put.ts (diff)
The file was addedserver/utils/listings/immediate.ts
The file was modified.claude/rules/marketplaces/marketplace-listings.md (diff)
The file was modifiedserver/api/sales/sis/listings/[id]/delist.post.ts (diff)
The file was modifiedserver/api/sales/sis/order-sources.get.ts (diff)
The file was modifiedapp/components/MarketplaceIcon.vue (diff)
The file was modifiedserver/utils/listings/adapters/ebay.ts (diff)
Commit 3dbbeedfa45b9ace1df7a02122d5407091b8e992 by info
BI shipping performance: exclude stock-blocked orders (status 'No stock')

Orders that are not on time are checked against the historic stock of their
item lines in the order's warehouse at the end of the deadline day
(m_storage minus later m_transaction movements, direct Postgres,
server/utils/bi/stockAtDeadline.ts). At least one short line -> status
'nostock', excluded from on-time/SLA/lateness/lead-time rates; ?nostock=include
keeps the SLA status and only flags the row. Page: checkbox, grey chart series,
filter button, 'Missing stock' column/CSV, warning tag when PG is unavailable.
Measured on prod: 0.1-0.9 s per request for the stock check.
The file was added.claude/rules/bi/shipping-performance.md
The file was modifiedapp/pages/bi/shipping-performance.vue (diff)
The file was addedserver/utils/bi/stockAtDeadline.ts
The file was modifiedserver/api/bi/shipping-performance.get.ts (diff)