Skip to content

Changes

Started by timer
Started 10 days ago
Took 1 min 4 sec on built-in

Summary

  1. Signing store: kind column (contract | quote), kind-aware supersede and status history (details)
  2. Activities: log contract sent and contract signed on the record (details)
  3. Quotes: online confirmation button in the e-mail + public /confirm/<token> page (details)
  4. Lead page: hero header, side panels for links + attachments, activity timeline (details)
  5. Sign page: on phones only the PDF pans, the page never scrolls horizontally (details)
  6. Banking: combinable line filters (status, with suggestion, credit/debit), one Match button per row (details)
  7. Banking: restyled match modal with invoice thumbnails and inline PDF preview (details)
  8. Settlements: range picker with presets, calendar and 'last N periods'; order source preset by org (details)
  9. Offer PDFs: normalise customer logo / screenshot / signature images to PNG or JPEG (details)
  10. Offer/contract modals: consistent, spaced checkbox rows (details)
  11. Settlements range picker: pin the calendar grid body to table layout (details)
  12. Recipes: activities [Dokumente] convention, quote confirmation portal, PDF image normalisation, invoice PDF url, UCalendar pinning, checkbox scale override (details)
  13. 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)
  14. 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)
  15. Receive desktop: replace unstyled USelect/native selects with the SelectBox (Nuxt UI) wrapper, ignore stale org cookie entries (details)
  16. Product stock card: 'Etiketten drucken' action opening print-labels-desktop with the article preloaded (productId + productValue hand-off, SKU/UPC fallback) (details)
  17. Recipes: product page stock actions card + modal (data source, cloned document chains, live refresh, page hand-off) (details)
  18. 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)
  19. Product stock card: 'Etiketten drucken' opens the page's print-labels modal instead of a new tab (details)
  20. 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)
  21. Product labels: size-exact pages per printer, vector CODE128, label size from printer registry with CUPS fallback (details)
  22. Product labels (compact): two name rows, barcode lower, org company name rotated along the right edge (details)
  23. Product labels (compact): wider text/barcode area, company name at the right edge, barcode lower with a clear gap under the text rows (details)
  24. 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)
  25. 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)
  26. 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)
  27. 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)
Commit 6867a990ad10e973d0fcb49b44dd4c5166806fcd by info
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.
The file was modifiedserver/utils/offers/contractSigningDb.ts (diff)
The file was modifiedserver/api/offers/contract/signing-status.get.ts (diff)
The file was modifiedserver/api/public/sign/[token]/index.post.ts (diff)
The file was modifiedserver/api/public/sign/[token]/index.get.ts (diff)
The file was modifiedserver/api/public/sign/[token]/document/[key].get.ts (diff)
Commit a8c47ec14aacc1ac6e45a92468871c6d9b093212 by info
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.
The file was modifiedserver/api/offers/contract/send.post.ts (diff)
The file was modifiedserver/utils/offers/contractSigning.ts (diff)
The file was addedserver/utils/offers/contactActivity.ts
Commit 7c8cbf87e7b8d409534fb242a15ad8a95d7ceecf by info
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.
The file was modifiedserver/api/offers/quote/send.post.ts (diff)
The file was modifiedapp/components/offers/QuoteModal.vue (diff)
The file was addedserver/utils/offers/quoteConfirmation.ts
The file was addedserver/api/public/confirm/[token]/document/[key].get.ts
The file was modifiedapp/assets/langs/shared.js (diff)
The file was modifiedapp/composables/useOfferQuote.ts (diff)
The file was addedserver/api/public/confirm/[token]/index.get.ts
The file was addedserver/api/public/confirm/[token]/index.post.ts
The file was modifiedserver/utils/offers/offerConditions.ts (diff)
The file was addedserver/api/public/confirm/[token]/request-renewal.post.ts
The file was addedapp/pages/confirm/[token].vue
Commit 26daf290da8c94ae87d75e2f78f15a33ad8adb34 by info
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.
The file was modifiedapp/components/admin/LeadDetailRecord.vue (diff)
The file was addedapp/components/offers/SigningLinksPanel.vue
The file was modifiedapp/pages/users/leads/[id]/edit.vue (diff)
The file was modifiedapp/components/admin/LeadDetailRecordActivity.vue (diff)
The file was modifiedapp/components/admin/LeadForm.vue (diff)
Commit 3bcec9625e1768733d5e7136392ece9112854a14 by info
Sign page: on phones only the PDF pans, the page never scrolls horizontally
The file was modifiedapp/pages/sign/[token].vue (diff)
Commit 5e677922cb07d6e92ce254ce5aa134c953f82679 by info
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.
The file was modifiedapp/components/accounting/banking/BankReconcilePanel.vue (diff)
Commit 2d529629dd7087711b7fd0272e86a1fb0333d052 by info
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_*).
The file was modifiedapp/components/accounting/BankLineMatchModal.vue (diff)
The file was addedserver/api/invoices/[id]/pdf.get.ts
The file was modifiedapp/assets/langs/shared.js (diff)
Commit 6d6c5a9505a8622125674e8b4c501793d5c96ba8 by info
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).
The file was modifiedserver/api/accounting/amazon/order-sources.get.ts (diff)
The file was modifiedserver/api/accounting/ebay/order-sources.get.ts (diff)
The file was modifiedapp/pages/accounting/ebay-settlements.vue (diff)
The file was modifiedapp/pages/accounting/amazon-settlements.vue (diff)
Commit 7d9f6b6a5f6c39a4c956cc3c7a69dc0698266977 by info
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.
The file was modifiedserver/utils/offers/quotePdf.ts (diff)
The file was modifiedapp/pages/users/leads/[id]/edit.vue (diff)
The file was addedserver/utils/offers/pdfImages.ts
The file was modifiedserver/utils/offers/contractPdf.ts (diff)
Commit 666a2f22c1bedff589d9903b4eba506068632234 by info
Offer/contract modals: consistent, spaced checkbox rows

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.
The file was modifiedapp/components/offers/ContractModal.vue (diff)
The file was modifiedapp/components/offers/QuoteModal.vue (diff)
Commit e163c30b60d98dd983bffd29c9b4a35ac30a984c by info
Settlements range picker: pin the calendar grid body to table layout
The file was modifiedapp/components/accounting/SettlementSourceFields.vue (diff)
Commit e175e587f486e8aa322305a03243fe19bc47d7fd by info
Recipes: activities [Dokumente] convention, quote confirmation portal, PDF image normalisation, invoice PDF url, UCalendar pinning, checkbox scale override
The file was modifiedreference/recipes.md (diff)
Commit ecadbf8fdba3adfaaf4606a7e1e3f260362ebc28 by info
Product 'Located at' tab: show only locators with any on-hand / ordered / reserved qty by default, toggle for all, qty columns; drop tedir imports
The file was modifiedapp/composables/states.ts (diff)
The file was modifiedapp/components/materials/ProductDetailRecordLocatedAt.vue (diff)
Commit 05ab84b63ee3aba0cfc569b4bb465352ed0ece3e by info
Product edit: admin 'Bestand je Lagerplatz' card with per-locator tiles and in-page inventory count / goods receipt / movement modals that refresh quantities live
The file was addedapp/components/materials/ProductStockActionModal.vue
The file was modifiedapp/pages/materials/products/[id]/edit.vue (diff)
The file was addedapp/components/materials/ProductStockLocatorsCard.vue
Commit 7871bf08102d33741ddd70b99897d88aac182729 by info
Receive desktop: replace unstyled USelect/native selects with the SelectBox (Nuxt UI) wrapper, ignore stale org cookie entries
The file was modifiedapp/pages/integrations/receive-desktop.vue (diff)
Commit 34cafbecb1954b33dde58fc2638abfa8015077d2 by info
Product stock card: 'Etiketten drucken' action opening print-labels-desktop with the article preloaded (productId + productValue hand-off, SKU/UPC fallback)
The file was modifiedapp/components/materials/ProductStockLocatorsCard.vue (diff)
Commit f10c9649cb3920d39f04cd8b0114d98441064633 by info
Recipes: product page stock actions card + modal (data source, cloned document chains, live refresh, page hand-off)
The file was modifiedreference/recipes.md (diff)
Commit 5b97c2d515fcdfe9d8b51bd9b00570a1a9c0a11b by info
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
The file was modifiedapp/pages/integrations/print-labels-desktop.vue (diff)
Commit 17d352cfcb1a5ce5660246960d7a983ec40662d6 by info
Product stock card: 'Etiketten drucken' opens the page's print-labels modal instead of a new tab
The file was modifiedapp/pages/materials/products/[id]/edit.vue (diff)
The file was modifiedapp/components/materials/ProductStockLocatorsCard.vue (diff)
Commit 915e0f4f6e40350029d376104fc3d26e1dbe677b by info
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
The file was modifiedapp/components/offers/QuoteModal.vue (diff)
The file was modifiedserver/api/offers/quote/send.post.ts (diff)
The file was modifiedserver/utils/offers/offerConditions.ts (diff)
The file was modifiedapp/composables/useOfferQuote.ts (diff)
The file was modifiedapp/assets/langs/shared.js (diff)
Commit d81db0b973c0bf582df7f457d2dfb7974b2615ca by info
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
The file was addedserver/utils/cupsMedia.ts
The file was addedserver/utils/labelMedia.ts
The file was modifiedapp/pages/settings/printers/[id]/edit.vue (diff)
The file was modifiedserver/api/print/product.post.ts (diff)
The file was modifiedapp/pages/integrations/print-labels-desktop.vue (diff)
The file was modifiedapp/components/sales/RelabelLabelPrintModal.vue (diff)
The file was modifiedapp/pages/settings/printers/[id]/duplicate.vue (diff)
The file was modifiedserver/api/printers/index.get.ts (diff)
The file was modifiedserver/api/settings/printers/store.post.ts (diff)
The file was modifiedapp/pages/settings/printers/[id]/view.vue (diff)
The file was modifiedreference/recipes.md (diff)
The file was addedserver/api/printers/cups-media.get.ts
The file was modifiedapp/components/settings/PrinterForm.vue (diff)
The file was modifiedapp/pages/settings/printers/create.vue (diff)
The file was modifiedapp/pages/settings/printers/index.vue (diff)
The file was modifiedserver/api/settings/printers/update.put.ts (diff)
The file was addedserver/utils/labelBarcode.ts
Commit fd32d8ff9d2823cb26fa373678f8f6e702029afe by info
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
The file was modifiedserver/api/print/product.post.ts (diff)
Commit 7c416c6207cd20cb749989c9e7438084d2509284 by info
Product labels (compact): wider text/barcode area, company name at the right edge, barcode lower with a clear gap under the text rows
The file was modifiedserver/api/print/product.post.ts (diff)
Commit d57d085a7df0992fea2f94c53a03585617422d88 by info
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
The file was modifiedapp/composables/useOpenShipments.ts (diff)
Commit 9afa79b55166ae0a4de7ff3f6046ff5752dac38a by info
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
The file was modifiedapp/components/requests/RequestForm.vue (diff)
Commit a91a37f8b47890a451b7d1352939b52ff8bc5eb9 by info
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
The file was modifiedapp/pages/requests/my-tickets/index.vue (diff)
The file was modifiedapp/pages/requests/requests/create.vue (diff)
The file was modifiedapp/pages/requests/my-tickets/create.vue (diff)
Commit 25e57e1d2a58ceb6994e6c82bab7533d42935788 by info
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
The file was modifiedapp/pages/index.vue (diff)
The file was modifiedserver/api/admin/users/leads/latest.get.ts (diff)
The file was modifiedapp/assets/langs/shared.js (diff)