Settlements range picker: pin the calendar grid body to table layout (details)
Recipes: activities [Dokumente] convention, quote confirmation portal, PDF image normalisation, invoice PDF url, UCalendar pinning, checkbox scale override (details)
Product 'Located at' tab: show only locators with any on-hand / ordered / reserved qty by default, toggle for all, qty columns; drop tedir imports (details)
Product edit: admin 'Bestand je Lagerplatz' card with per-locator tiles and in-page inventory count / goods receipt / movement modals that refresh quantities live (details)
Receive desktop: replace unstyled USelect/native selects with the SelectBox (Nuxt UI) wrapper, ignore stale org cookie entries (details)
Product stock card: 'Etiketten drucken' action opening print-labels-desktop with the article preloaded (productId + productValue hand-off, SKU/UPC fallback) (details)
Print labels desktop: single full-width column — sticky action bar, scan + search side by side, selected articles as order-style positions (thumb, codes, org, per-row printer, qty); SelectBox for printer pickers (details)
Product stock card: 'Etiketten drucken' opens the page's print-labels modal instead of a new tab (details)
Quote modal: optional PDF attachment when the online confirmation link is sent (default link-only; PDF always attached without link), link-only e-mail texts, persisted in offer conditions (details)
Product labels: size-exact pages per printer, vector CODE128, label size from printer registry with CUPS fallback (details)
Product labels (compact): two name rows, barcode lower, org company name rotated along the right edge (details)
Product labels (compact): wider text/barcode area, company name at the right edge, barcode lower with a clear gap under the text rows (details)
Commissioning open-shipments list: expand C_Order_ID and show only shipments of fulfillment orders (isFulfillmentOrder = Y), mirroring the dashboard open-to-commission rule; scan input unchanged (details)
Request edit form: billing dialog gets a 'Betrag' mode next to 'Zeit' — book a direct (also negative) amount without time, same [Zeitabrechnung] envelope and QtySpent rules as the my-tickets detail (details)
Ticket creation (Create Request + my-tickets wizard) opens the new ticket in the my-tickets split view (?ticket=<id>); split view refetches its list when a deep-linked ticket is not loaded yet (details)
Dashboard Latest Leads: offer and contract badges per lead — greyed when the online link was sent, coloured once the offer is accepted / the contract is signed (details)
Signing store: kind column (contract | quote), kind-aware supersede and status history
signing_requests gets a kind column (migrated in place, default contract) so quote confirmations share the table, the on-disk document store and the lifecycle with contract signing. Superseding is per kind, signing-status returns latest / latestQuote / full history of both kinds with daysLeft and portal document urls, and the /sign routes only accept contract tokens.
Activities: log contract sent and contract signed on the record
New contactActivity helper writes C_ContactActivity rows (type E-Mail) for customer-facing steps, with the documents referenced in a parseable [Dokumente] block in Comments (title | url). Contract send logs the package, recipient and signing link; finalizeSignature logs the signature with the signed contract and annexes. Fail-soft everywhere.
Quotes: online confirmation button in the e-mail + public /confirm/<token> page
Opt-out checkbox in the quote modal (default on). The send creates a kind 'quote' signing request valid as long as the quote, stores the exact PDF and adds a CTA to the mail; the e-mail default text mentions the button. The public page shows the quote, collects company/name/e-mail + declarations and confirms: the offer PDF gets an appended confirmation page (pdf-lib), is attached to the record, written to offer_conditions.quote.confirmation, mailed to the customer and info@logyou.de, and logged as an activity with document buttons. Quote send itself is logged as an activity too.
Lead page: hero header, side panels for links + attachments, activity timeline
Restyled /edit/lead-<id>: hero with initials/status/source chips and quick actions, two-column layout, form sections without Avatar/Tenant, a signing links panel listing every contract/quote link with status, remaining validity and clickable url, an attachments panel, and the activities as a timeline. The activity modal has a single note field (Comments, description derived from the first line); the timeline shows Comments or the legacy Description and renders [Dokumente] references as buttons.
Banking: combinable line filters (status, with suggestion, credit/debit), one Match button per row
The Status segment stays single-select (All / Open / Matched); two new chip groups combine with it: 'Mit Vorschlag' (only lines that have a match suggestion — disabled and cleared while Matched is active, suggestions only exist for open lines) and an exclusive credit (+) / debit (−) toggle. Chip counts respect the other active filters; a reset button clears everything. The three per-row buttons collapse into one 'Zuordnen' — the modal carries the invoice / fee / payment tabs and opens on the tab the best suggestion points to.
Banking: restyled match modal with invoice thumbnails and inline PDF preview
The 'Position zuordnen' modal now uses the banking design system (bk-*): bank-line ticket, segmented tabs, candidate cards with a first-page thumbnail, confidence + signal pills and an eye button that opens the invoice PDF in a preview pane inside the modal (the modal widens, the selection stays). New GET /api/invoices/[id]/pdf streams the invoice as binary application/pdf (short private cache) for thumbnail + iframe. Modal strings are translatable (banking_modal_*).
Settlements: range picker with presets, calendar and 'last N periods'; order source preset by org
Replaces the two native date inputs on the Amazon/eBay settlement pages with one Zeitraum control: a popover with presets (last month, 3/6/12 months, this/last year), 'Letzte N Abrechnungen/Auszahlungen' (period-count mode — looks back far enough and keeps the newest N), a two-month range calendar (Nuxt UI UCalendar, grid pinned by marker CSS) and from/to inputs as typing fallback. Same dateFrom/dateTo contract + range-change emit as before. The order source is preselected with the first source owned by the org the user is logged in with (order-sources routes now return orgId/orgName).
Offer PDFs: normalise customer logo / screenshot / signature images to PNG or JPEG
pdfmake throws 'Unknown image format' for anything but PNG/JPEG. A lead avatar in WebP/GIF/SVG (uploaded as company logo) was labelled image/png by the lead page and killed the whole quote preview. New pdfImages.ts sniffs the real format, converts other formats with sharp and drops unusable data instead of failing; applied to the quote logo + website screenshot and the contract signature image. The lead page now sniffs webp/gif/svg too.
Every checkbox in the quote and contract modals gets the same row style: gap between box and label, padding + hover surface, 18px box, brand accent, and the global transform scale on checkbox inputs is neutralised so the box no longer overlaps its label and neighbouring controls.
Product edit: admin 'Bestand je Lagerplatz' card with per-locator tiles and in-page inventory count / goods receipt / movement modals that refresh quantities live
Quote modal: optional PDF attachment when the online confirmation link is sent (default link-only; PDF always attached without link), link-only e-mail texts, persisted in offer conditions
Product labels: size-exact pages per printer, vector CODE128, label size from printer registry with CUPS fallback
- /api/print/product renders each printer group at the real label size (registry LabelWidthMm/LabelHeightMm → CUPS queue PPD default → legacy format) instead of A8 + fit-to-page, which used only 24 of 35 mm on labelprinter-2 and shrank the barcode - fix off-by-one that drew every label on the page created for the next one (first label of a batch landed on a default-format page) - barcodes as vector bars from bwip-js geometry (crisp on the 203 dpi Zebra grid); compact layout for labels < 40 mm high, adaptive table layout for larger rolls; customSettings (Shopify stock page) keeps the legacy layouts - registry sizes are sent to lp as -o media=Custom.WxHmm; results carry the resolved media - Settings → Printers: label size (mm) with "Aus CUPS übernehmen" detect (/api/printers/cups-media), LabelType reorder reference; wired through form, pages, grid, store/update, /api/printers; relabel modal preselects the registry size - recipe: product labels — page size from registry/CUPS, vector CODE128
Product labels (compact): two name rows, barcode lower, org company name rotated along the right edge
- 35×17 / 54×29 layout: product name wraps to two lines, SKU row, then barcode + cleartext value; the 2-digit org code is gone - ad_org.companyname (fallback Name) printed as one 90°-rotated string on the right edge, vertically centred, shrunk to 4 pt then ellipsised to the label height
Commissioning open-shipments list: expand C_Order_ID and show only shipments of fulfillment orders (isFulfillmentOrder = Y), mirroring the dashboard open-to-commission rule; scan input unchanged
Request edit form: billing dialog gets a 'Betrag' mode next to 'Zeit' — book a direct (also negative) amount without time, same [Zeitabrechnung] envelope and QtySpent rules as the my-tickets detail
Ticket creation (Create Request + my-tickets wizard) opens the new ticket in the my-tickets split view (?ticket=<id>); split view refetches its list when a deep-linked ticket is not loaded yet
Dashboard Latest Leads: offer and contract badges per lead — greyed when the online link was sent, coloured once the offer is accepted / the contract is signed