Skip to content

Changes

Started by timer
Started 9 days 9 hr ago
Took 1 min 7 sec on built-in

Summary

  1. Leads list: single-row toolbar + 'Unanswered leads' mailpiler check (details)
  2. Mail recipe: note the unanswered-leads check route and its comparison rule (details)
  3. Leads list: hide the Id and Organization columns (still sorted by id desc, re-enable via the column menu) (details)
  4. Leads list: Name first, then Company; selection checkbox column hidden (Delete button only appears while rows are selected) (details)
  5. Leads list: Created as first column; Name is a link opening the lead's edit page in an in-app tab (details)
  6. Leads list: icon status column after Created (offer / contract: grey not sent, blue sent, green confirmed / signed; tooltip with the dates) replaces the Offer and Contract date columns (details)
  7. Leads list: separate icon-width Offer and Contract columns (icon headers, tinted badges grey/blue/green with check mark when confirmed/signed, dates in the tooltip); ti-file-signature replaced — not in the bundled Tabler font (details)
  8. Leads list: offer / contract badges shrunk to 20 px to fit Balham's 28 px rows; done state uses its own icon (file-check / signature) instead of a clipped check overlay (details)
  9. Leads toolbar + unanswered modal: white text/icons pinned on coloured buttons in both themes (dark mode's --theme-text-inverse is #121212, which made icons black on the purple/orange/green buttons); lighter field icons and 'not sent' badges in dark mode (details)
  10. Locator catalog: bins created per organization on first use (mobile + desktop) (details)
  11. Dashboard SameDay card: 'not fulfillable – missing stock' list limited to orders created within the last 4 days (fulfillable list unchanged) (details)
  12. DHL Transportversicherung: order flag booked at commissioning from GrandTotal, Filiale-only hint label, quick-order opt-in with cost acknowledgement (details)
  13. Commission: optional parcel weight override + box dimensions (L×B×H cm) for Amazon FBA orders — per slot in multi-parcel mode, FBA single-parcel panel otherwise; stored in commission_parcels_json and shown in the Paketinhalt modal, packlist confirm modal and A4 PDF; Paketinhalt now saved for every FBA order (relabel or FBA shipper), single parcel included (details)
  14. Dashboard tickets card: show as many rows as the card height allows (ResizeObserver-derived row count, 30-ticket reserve, chunked last-message overlay) — card height now follows its row siblings with a 10-row minimum, so big screens fill the former blank space with 15+ tickets (details)
  15. Order roadmap on the sales-order edit page: FBA relabel + production/BOM checklist with "send step to mobile device" (details)
Commit 8bf6e253c6d78f1728cdd797a5fb027104968aa3 by info
Leads list: single-row toolbar + 'Unanswered leads' mailpiler check

- /users/leads header restyled into one toolbar row: phone lookup (with its
  picker), quick search, offer / contract filters, reset, shown/total counter
  on the left; blank questionnaire DE|EN, the new 'Unanswered' button, New and
  Delete on the right (replaces HeaderAction + the two extra filter rows;
  labels collapse to icons on narrower screens)
- New button 'Unanswered' opens <MailLeadFollowupModal>: leads created within
  the last N days (default 30, editable, remembered per browser) whose latest
  e-mail in the mailpiler archive came FROM the lead and got no reaction since
  (no outgoing mail to that address, no C_ContactActivity logged after it).
  Result table: lead, latest mail + waiting days (colour-coded), our last
  reaction before it, buttons to open the lead tab or the archive mail history
- GET /api/mail/lead-followups?days= (staff only, archive only, no IMAP):
  bounded lead + activity queries, one archive lookup per address with
  concurrency 5, auto-replies / bounce notices skipped when picking the
  latest inbound mail; searchArchive() got an optional row limit
- translation keys leads_phone_* / lfm_* (en, de, es)
The file was addedserver/api/mail/lead-followups.get.ts
The file was modifiedapp/assets/langs/shared.js (diff)
The file was modifiedapp/pages/users/leads/index.vue (diff)
The file was modifiedserver/utils/mail/mailArchive.ts (diff)
The file was addedapp/components/mail/LeadFollowupModal.vue
Commit 002781ab06b897faf85ea38676a5074a2e73a1d0 by info
Mail recipe: note the unanswered-leads check route and its comparison rule
The file was modified.claude/rules/mail/lead-email-history.md (diff)
Commit 77bcdba5a25839512b0510aac21a69a89186f6a6 by info
Leads list: hide the Id and Organization columns (still sorted by id desc, re-enable via the column menu)
The file was modifiedapp/pages/users/leads/index.vue (diff)
Commit acdea33714d2966600ac66e7e76f5c60d3ff9633 by info
Leads list: Name first, then Company; selection checkbox column hidden (Delete button only appears while rows are selected)
The file was modifiedapp/pages/users/leads/index.vue (diff)
Commit ac7c6254d501fce7a72453e223689f200d8e5512 by info
Leads list: Created as first column; Name is a link opening the lead's edit page in an in-app tab
The file was modifiedapp/pages/users/leads/index.vue (diff)
Commit 1dbf321e34fa687f66cf478013afed71718437b3 by info
Leads list: icon status column after Created (offer / contract: grey not sent, blue sent, green confirmed / signed; tooltip with the dates) replaces the Offer and Contract date columns
The file was modifiedapp/pages/users/leads/index.vue (diff)
The file was modifiedapp/assets/langs/shared.js (diff)
Commit cf67b8574cd059732370169752b60542915beb2b by info
Leads list: separate icon-width Offer and Contract columns (icon headers, tinted badges grey/blue/green with check mark when confirmed/signed, dates in the tooltip); ti-file-signature replaced — not in the bundled Tabler font
The file was modifiedapp/pages/users/leads/index.vue (diff)
Commit 22c6113c6b55bd0003ce134f437083ee4cb00d7d by info
Leads list: offer / contract badges shrunk to 20 px to fit Balham's 28 px rows; done state uses its own icon (file-check / signature) instead of a clipped check overlay
The file was modifiedapp/pages/users/leads/index.vue (diff)
Commit 1abfb16fb0015cd9816abc65976984ab354408a9 by info
Leads toolbar + unanswered modal: white text/icons pinned on coloured buttons in both themes (dark mode's --theme-text-inverse is #121212, which made icons black on the purple/orange/green buttons); lighter field icons and 'not sent' badges in dark mode
The file was modifiedapp/components/mail/LeadFollowupModal.vue (diff)
The file was modifiedapp/pages/users/leads/index.vue (diff)
Commit f68dd3e394dcf0d7eba99b6818726e5c9a7f2858 by info
Locator catalog: bins created per organization on first use (mobile + desktop)

iDempiere needs one warehouse per org and every locator per warehouse; instead of
pre-creating all ~500 bins for every merchant, the master org (LogYou 1000000,
runtimeConfig.locatorMasterOrgId / LOCATOR_MASTER_ORG_ID) is the template catalog
and a merchant gets a bin the moment it is used.

- server/utils/locatorCatalog.ts: listLocatorCatalog() = org bins + master-only
  bins as virtual preview entries (isVirtual, id `new:<code>`); ensureLocator()
  = find in org or create from the master template (Value, X/Y/Z, PriorityNo,
  locator type) in the org's own warehouse; codes unknown to the master stay 404;
  roles 'default' / 'return' copy the master's default / return bin
- new POST /api/mobile/locators (catalog) and /api/mobile/locator-ensure
- locator-lookup, locator-by-xyz create on miss (response `created`),
  default-locator-lookup creates the org default when the org has no bin at
  all, reconditioning/target-locators and product-lookup carry the preview
- app/composables/useLocatorCatalog.ts: fetchLocators / resolveLocator /
  ensureLocator + notifyLocatorCreated toast; LocatorRow `is-virtual` → "neu" tag
- wired: mobile movement, receive, inventory, return, reconditioning and the
  desktop ports movement/receive/inventory/returns under /integrations (pickers
  load the catalog, picking a virtual bin creates it before use; scans create
  server-side); fix-locator-owner (both) covered via locator-by-xyz
- recipe .claude/rules/materials/locator-catalog.md
The file was modifiedapp/pages/mobile/return.vue (diff)
The file was added.claude/rules/materials/locator-catalog.md
The file was modifiedapp/pages/integrations/returns-desktop.vue (diff)
The file was modifiedapp/pages/mobile/inventory.vue (diff)
The file was modifiedapp/pages/mobile/reconditioning.vue (diff)
The file was modifiedserver/api/mobile/locator-lookup.post.ts (diff)
The file was modifiedapp/pages/mobile/movement.vue (diff)
The file was modifiedapp/pages/integrations/receive-desktop.vue (diff)
The file was modifiedapp/components/mobile/LocatorRow.vue (diff)
The file was addedserver/utils/locatorCatalog.ts
The file was modifiedapp/pages/integrations/movement-desktop.vue (diff)
The file was addedserver/api/mobile/locator-ensure.post.ts
The file was addedserver/api/mobile/locators.post.ts
The file was modifiedserver/api/mobile/product-lookup.post.ts (diff)
The file was modifiedapp/pages/integrations/inventory-desktop.vue (diff)
The file was modifiedserver/api/mobile/reconditioning/target-locators.post.ts (diff)
The file was modifiedserver/api/mobile/locator-by-xyz.post.ts (diff)
The file was modifiedapp/pages/mobile/receive.vue (diff)
The file was modifiedserver/api/mobile/default-locator-lookup.post.ts (diff)
The file was addedapp/composables/useLocatorCatalog.ts
The file was modifiednuxt.config.ts (diff)
Commit a345106a35fe2eb8fa5931a669c4ff5521c0f442 by info
Dashboard SameDay card: 'not fulfillable – missing stock' list limited to orders created within the last 4 days (fulfillable list unchanged)
The file was modifiedserver/api/dashboard/prime-due-today.get.ts (diff)
Commit aab207fb4ef22f1336352c8858e07f74bddd9597 by info
DHL Transportversicherung: order flag booked at commissioning from GrandTotal, Filiale-only hint label, quick-order opt-in with cost acknowledgement

- C_Order.IsDHLTransportInsurance (checkbox on OrderForm for DHL-Paket shippers; quick-order modal /
  partners/add with 500 € notice + mandatory extra-cost confirmation, all roles incl. merchants)
- server/utils/dhlInsurance.ts: amount = order GrandTotal incl. tax → services.additionalInsurance;
  skipped for Kleinpaket (V62KP), Packstation/Postfiliale/Paketshop addresses and ≤ 500 €;
  > 2.500 € = tier B (Filiale only), > 25.000 € capped at the DHL maximum with a warning;
  multi-parcel splits the total by parcel item value
- booked amount stored in M_InOut.DHL_InsuranceValue (cleared by the commission reset)
- tier-B parcels get an internal 102×152 mm "NICHT IN DIE DHL-ABHOLUNG / NUR DHL FILIALE" label printed
  right after the DHL label (desktop, modal and mobile commissioning), plus toasts for every outcome
- operator banner on both commission pages before the label, badges on the order status flow and the
  DHL commission list; recipe in .claude/rules/fulfillment/commissioning.md
The file was modifiedapp/assets/langs/shared.js (diff)
The file was modifiedapp/pages/sales/orders/[id]/view.vue (diff)
The file was addedserver/utils/dhlInsurance.ts
The file was modifiedapp/pages/partners/partners/add.vue (diff)
The file was modifiedserver/api/commission/parcels/dhl/index.post.ts (diff)
The file was modified.claude/rules/fulfillment/commissioning.md (diff)
The file was modifiedapp/pages/sales/orders/[id]/edit.vue (diff)
The file was modifiedserver/api/orders/store.post.ts (diff)
The file was modifiedapp/components/partners/PartnerQuickForm.vue (diff)
The file was addedapp/composables/useDhlInsuranceFeedback.ts
The file was modifiedapp/components/OrderQuickAddModal.vue (diff)
The file was modifiedserver/api/partners/partners/quick-add.post.ts (diff)
The file was modifiedapp/pages/integrations/commission.vue (diff)
The file was modifiedapp/pages/sales/orders/create.vue (diff)
The file was modifiedserver/api/commission/parcels/dhl/inouts.get.ts (diff)
The file was modifiedserver/api/inouts/[id]/reset-commission.post.ts (diff)
The file was modifiedapp/components/integrations/CommissionList.vue (diff)
The file was modifiedapp/components/sales/OrderForm.vue (diff)
The file was modifiedapp/pages/mobile/commission.vue (diff)
The file was modifiedserver/api/orders/update.put.ts (diff)
The file was modifiedserver/api/commission/parcels/dhl/multi.post.ts (diff)
Commit fa4edb3dc3eb2dbcfbe4aa427d00691dce5516d6 by info
Commission: optional parcel weight override + box dimensions (L×B×H cm) for Amazon FBA orders — per slot in multi-parcel mode, FBA single-parcel panel otherwise; stored in commission_parcels_json and shown in the Paketinhalt modal, packlist confirm modal and A4 PDF; Paketinhalt now saved for every FBA order (relabel or FBA shipper), single parcel included
The file was modifiedapp/composables/useParcelContentsDoc.ts (diff)
The file was modifiedserver/api/commission/parcels/contents.post.ts (diff)
The file was modified.claude/rules/fulfillment/commissioning.md (diff)
The file was modifiedapp/components/integrations/CommissionPacklistConfirmModal.vue (diff)
The file was modifiedapp/pages/integrations/commission.vue (diff)
The file was modifiedapp/components/sales/ParcelContentsModal.vue (diff)
Commit 0afec150a35b3c26c457d5c0766e497c45086029 by info
Dashboard tickets card: show as many rows as the card height allows (ResizeObserver-derived row count, 30-ticket reserve, chunked last-message overlay) — card height now follows its row siblings with a 10-row minimum, so big screens fill the former blank space with 15+ tickets
The file was modifiedapp/pages/index.vue (diff)
Commit 88121ab248ac7b42471936cc209b2c25fe5a095c by info
Order roadmap on the sales-order edit page: FBA relabel + production/BOM checklist with "send step to mobile device"

- <SalesOrderRoadmap> panel between the status timeline and the form (staff only, shown only when the
  order needs extra steps): per BOM position Produktion angelegt → Produziert → Produktions-Aufgabe,
  for relabel orders Etiketten-Codes → FBA-Etiketten drucken → Umetikettierung (Lager); colour state
  (open / in progress / done / not yet), global numbering, "next step" marker, progress summary,
  collapsible, responsive down to phone width
- GET /api/orders/:id/roadmap aggregates order, lines (BOM flag, printLabelCode), productions and
  order tickets; POST /api/orders/:id/roadmap/push-step reuses the step's open ticket (relabel summary
  prefix / M_Production_ID) or creates one (relabel / production ticket) and pushes it to the worker
- push logic extracted to server/utils/pushTask.ts (shared with requests/[id]/push-task), push modal
  extracted to <RequestsPushTaskModal> (MyTicketDetail switched over)
- mobile pushed-task list carries the production link and shows a production card
- createRelabelTicket returns the ticket id; createProductionTicket works without a production
- i18n en/de/es, recipe .claude/rules/sales/order-roadmap.md
The file was modifiedserver/utils/relabelOrderHelper.ts (diff)
The file was modifiedserver/api/requests/requests/[id]/push-task.post.ts (diff)
The file was modifiedserver/utils/productionTicket.ts (diff)
The file was modifiedapp/composables/usePushedTasks.ts (diff)
The file was modifiedserver/api/orders/[id]/productions.get.ts (diff)
The file was modifiedserver/api/mobile/pushed-tasks.get.ts (diff)
The file was addedapp/components/sales/OrderRoadmap.vue
The file was addedserver/api/orders/[id]/roadmap/push-step.post.ts
The file was modified.claude/rules/requests/tickets.md (diff)
The file was modifiedapp/pages/mobile/tasks.vue (diff)
The file was addedserver/utils/orderRoadmap.ts
The file was addedserver/utils/pushTask.ts
The file was addedapp/components/requests/PushTaskModal.vue
The file was modifiedapp/pages/sales/orders/[id]/edit.vue (diff)
The file was modifiedapp/assets/langs/shared.js (diff)
The file was addedserver/api/orders/[id]/roadmap.get.ts
The file was modifiedapp/components/requests/MyTicketDetail.vue (diff)
The file was addedserver/utils/orderProductions.ts
The file was added.claude/rules/sales/order-roadmap.md