Warehouse Builder: single head row (selects, tabs, inline stat pills, version/reload/fullscreen) and fullscreen app mode (hides the ERP chrome via html.wb-fullscreen + browser fullscreen, auto-restore on leave); editor height calibrated to the viewport (details)
DHL Nachbelastung attachment per fee invoice: branded per-shipment breakdown PDF (GET /api/invoices/[id]/dhl-surcharge-report, summary/json modes) from the SHIPPINGFEE_NACHBELASTUNG fee lines of the generated order, button on the invoice view/edit pages; fee report gets a proper Nachbelastung section (shipment, DHL invoice + positions, DHL total / billed / surcharge) (details)
DHL Nachbelastung report: file-name fallback resolves the invoice number for both DHL file-name schemes (mirrors create_fulfillment.py) (details)
Fix 500 on hard reload of sales invoice edit (and fulfillment-orders edit, inbound-notification detail): root-level <Teleport to="body"> next to the async <NuxtLayout> hydrated out of order in the prod build (insertBefore … not a child of this node); wrapped in <ClientOnly> like procurements/invoices edit; recipe note in nuxt4-conventions.md (details)
Mobile tasks: browse list defaults to own open tickets (SalesRep_ID + IsComplete=false via browse.get.ts mine/openOnly, Meine offenen/Alle toggle, pinned pushed tasks deduped), separate camera / gallery buttons for ticket photos; fix invisible text on pushed-task buttons (--mob-blue-soft used as background = same blue as text; also timer display, In-Arbeit tag, generate-shipments segment pill + shipper chip); dashboard: compact Offene-Aufträge strip with one scrollable org-chip row, flatter task tiles (14 instead of 4 visible per phone screen); reference/saas concept doc (details)
Mobile tasks browse: 'mine' scope = open tickets of the session organization (AD_Org_ID = logship_organization_id, org 0/* = no org filter) instead of the assignee; chip renamed 'Offene meiner Org' (details)
Mobile tasks: 'Foto aufnehmen' uses a new in-app getUserMedia camera overlay (<MobileCameraCapture>, ported from the receive page) instead of <input capture=environment>, which the Android WebView file chooser routes to the gallery; shots feed the same pending-photo / ticket-image lists, 'Aus Galerie' stays a file input (details)
Mobile tasks browse 'mine' = desktop My-Tickets 'Bei uns' court (IsComplete false and IsMerchantAction not true, org visibility by role) instead of session org; chip 'Bei uns (offen)' (details)
Invoice Jasper logo on black fixed + organization page rebuilt (full AD_Org/AD_OrgInfo CRUD, logo upload, Nuxt UI) (details)
Leads list: clock column opens a close-lead modal (Expired / Recycled with lost reason from the LostReason list, or 'Kunde geworden' = Converted) instead of a blind one-click expire; 'Hide closed' filter now hides E/R/C, converted rows tinted green with user-check icon, one-click reopen for any closed lead (details)
Warehouse Builder: single head row (selects, tabs, inline stat pills, version/reload/fullscreen) and fullscreen app mode (hides the ERP chrome via html.wb-fullscreen + browser fullscreen, auto-restore on leave); editor height calibrated to the viewport
DHL Nachbelastung attachment per fee invoice: branded per-shipment breakdown PDF (GET /api/invoices/[id]/dhl-surcharge-report, summary/json modes) from the SHIPPINGFEE_NACHBELASTUNG fee lines of the generated order, button on the invoice view/edit pages; fee report gets a proper Nachbelastung section (shipment, DHL invoice + positions, DHL total / billed / surcharge)
Fix 500 on hard reload of sales invoice edit (and fulfillment-orders edit, inbound-notification detail): root-level <Teleport to="body"> next to the async <NuxtLayout> hydrated out of order in the prod build (insertBefore … not a child of this node); wrapped in <ClientOnly> like procurements/invoices edit; recipe note in nuxt4-conventions.md
Mobile tasks: browse list defaults to own open tickets (SalesRep_ID + IsComplete=false via browse.get.ts mine/openOnly, Meine offenen/Alle toggle, pinned pushed tasks deduped), separate camera / gallery buttons for ticket photos; fix invisible text on pushed-task buttons (--mob-blue-soft used as background = same blue as text; also timer display, In-Arbeit tag, generate-shipments segment pill + shipper chip); dashboard: compact Offene-Aufträge strip with one scrollable org-chip row, flatter task tiles (14 instead of 4 visible per phone screen); reference/saas concept doc
Mobile tasks browse: 'mine' scope = open tickets of the session organization (AD_Org_ID = logship_organization_id, org 0/* = no org filter) instead of the assignee; chip renamed 'Offene meiner Org'
Mobile tasks: 'Foto aufnehmen' uses a new in-app getUserMedia camera overlay (<MobileCameraCapture>, ported from the receive page) instead of <input capture=environment>, which the Android WebView file chooser routes to the gallery; shots feed the same pending-photo / ticket-image lists, 'Aus Galerie' stays a file input
Mobile tasks browse 'mine' = desktop My-Tickets 'Bei uns' court (IsComplete false and IsMerchantAction not true, org visibility by role) instead of session org; chip 'Bei uns (offen)'
Invoice Jasper logo on black fixed + organization page rebuilt (full AD_Org/AD_OrgInfo CRUD, logo upload, Nuxt UI)
Invoice template (reference/jasper-reports/invoice/, deployed + compiled on the host root reports folder): the logo is embedded from ad_image.binarydata like every other template instead of COLUMN_LOOKUP("image") (AWT image → JPEG re-encode printed the transparent PNG on a black block); orgs without a logo print COALESCE(companyname, name) as text.
Organization pages (/create, /edit/organization-:id, /duplicate): <AdminOrganizationForm> on Nuxt UI (hero with logo tile + upload/remove, tabs Stammdaten / Briefkopf & Belege / Adresse / Logistik & Struktur, info tooltips per field saying where the value is printed), all AD_Org columns (companyname, C_BPartner_ID, …) and AD_OrgInfo columns (Logo_ID via nested AD_Image, LY_Subtitle, ReceiptFooterMsg, TaxID, DUNS, phones, e-mail, C_Location_ID with inline address card, warehouses, org type, parent org, supervisor, calendar, time zone, transfer bank, cash book); changed-field writes, '' clears a reference; store creates the org and PUTs the auto-created AD_OrgInfo; shared payload builder server/utils/orgInfoPayload.ts; list gets a Company Name column + lazy fetch.
Leads list: clock column opens a close-lead modal (Expired / Recycled with lost reason from the LostReason list, or 'Kunde geworden' = Converted) instead of a blind one-click expire; 'Hide closed' filter now hides E/R/C, converted rows tinted green with user-check icon, one-click reopen for any closed lead