Skip to content

Changes

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

Summary

  1. Tune Amazon Bezahlabgleich (details)
  2. add amazon settlement (details)
  3. Amazon settlements: Lexoffice upload/reset + CSV-export marker (details)
  4. Bank reconciliation: auto-complete statement when the last line is matched (details)
  5. Add new contract-offer system with online signing (details)
  6. Contract modal: 0-month notice default, aligned rows, checkbox spacing, opt-in PDF attachments on signing mail (details)
  7. Lexoffice upload: pipeline invoices concurrently, throttle Lexware calls (details)
  8. Amazon settlements: show/filter Lexoffice + CSV status immediately after actions (details)
  9. Lexoffice upload: send invoices in chunks of 20 per request (details)
  10. Recipes: Lexware uploads are async, lexFetch throttle, settlement grid set-filter refresh (details)
  11. Lexoffice upload: guard against double uploads of the same invoice (details)
  12. Marketing flyer LogYou x LogShip: 16:9 PDF, opt-in attachment on quote/contract, dummy-data demo screens (details)
Commit 09cf3a9f16c449a1b1d2a51178b035a7eda02cc6 by info
Tune Amazon Bezahlabgleich
The file was addedreference/banking-lexoffice/eBay Payments_EUR Sammelkonto_CSV_2026-06-09_2026-09-07.csv
The file was addedreference/banking-lexoffice/leitfaden_fuer_die_buchhaltung.pdf
Commit ef7d4221f72b123c18900fe104eb9b44608eb18c by info
add amazon settlement
The file was addedapp/components/accounting/LexofficeHintsPanel.vue
The file was modifiedserver/utils/amazonSpApi.ts (diff)
The file was addedapp/utils/settlementGridFilter.ts
The file was addedapp/components/accounting/SettlementSummaryStrip.vue
The file was modifiedapp/components/MainNavigationMenu.vue (diff)
The file was addedapp/components/accounting/SettlementSourceFields.vue
The file was addedapp/utils/ebayLexoffice.ts
The file was addedapp/utils/amazonLexoffice.ts
The file was modifiedapp/pages/accounting/amazon-settlements.vue (diff)
The file was addedapp/components/accounting/SettlementToolbar.vue
The file was modifiedserver/api/accounting/incoming-invoices/[id]/confirm.post.ts (diff)
The file was addedreference/banking-lexoffice/Amazon_EUR Sammelkonto_CSV_2026-06-09_2026-09-07.csv
The file was addedapp/components/accounting/SettlementGridFilters.vue
The file was addedapp/components/accounting/SettlementPeriodList.vue
The file was addedapp/utils/amazonFeeCodes.ts
The file was modifiedserver/utils/ebayFinancesApi.ts (diff)
The file was modifiedapp/pages/accounting/ebay-settlements.vue (diff)
The file was addedapp/utils/settlementViews.ts
The file was addedapp/components/accounting/SettlementViewSwitch.vue
The file was addedapp/composables/useLexofficeSettlementExport.ts
The file was modifiedapp/composables/menu/admin/accounting.ts (diff)
Commit c2c7b9c16220cd0b336b5d3d7dbef95248c9c69e by info
Amazon settlements: Lexoffice upload/reset + CSV-export marker

Nach Order-ID view of /accounting/amazon-settlements can now upload the
invoices of the selected or all visible (filtered) orders to Lexoffice,
reset their upload status, and shows per order whether an invoice exists,
whether it was uploaded to Lexoffice and whether the order already went out
in a settlement CSV.

- Checkbox row selection (pinned selection column, group selects filtered
  descendants, header selects all filtered rows)
- SettlementLexofficeActions: "Lexoffice Upload" (Auswahl / Alle sichtbaren)
  and "Zurücksetzen" (upload status + CSV marker, both scopes); chunked
  requests with progress, category modal reused from /sales/invoices
- New grid columns "Lexoffice" and "CSV-Export" (AgLexofficeSyncStatus,
  status shown on collapsed group rows, click = single upload/reset)
- Filter card: new Lexoffice section (Rechnung / Lexoffice-Upload / CSV-Export)
- CSV export marks all matched orders of the exported periods via new
  onExported hook in useLexofficeSettlementExport
- settlement.get.ts returns invoice upload status + order CSV marker;
  C_Order columns isLexofficeCsvExported / lexofficeCsvExportDate are
  optional (fail-soft retry without them until created in iDempiere)
- lexoffice-upload/-reset now return uploadedIds / skippedIds / resetIds
- New route accounting/lexoffice-csv-export (mark / reset orders)
The file was modifiedapp/components/accounting/SettlementGridFilters.vue (diff)
The file was modifiedapp/pages/accounting/amazon-settlements.vue (diff)
The file was addedserver/api/accounting/lexoffice-csv-export.post.ts
The file was addedserver/utils/lexofficeCsvExportMark.ts
The file was modifiedapp/utils/settlementGridFilter.ts (diff)
The file was modifiedserver/api/accounting/amazon/settlement.get.ts (diff)
The file was modifiedapp/components/accounting/SettlementViewSwitch.vue (diff)
The file was modifiedapp/composables/useLexofficeSettlementExport.ts (diff)
The file was modifiedserver/api/invoices/lexoffice-upload.post.ts (diff)
The file was modifiedserver/api/invoices/lexoffice-reset.post.ts (diff)
The file was addedapp/components/accounting/SettlementLexofficeActions.vue
The file was addedapp/components/AgGrid/Accounting/AgLexofficeSyncStatus.vue
Commit 269ecf4f253329ab9533a693ce3103ac4359f80a by info
Bank reconciliation: auto-complete statement when the last line is matched

When a match (invoice, charge or linked payment) resolves the last open
line of a Drafted C_BankStatement, the page now re-reads the lines from
the server and, if all are matched, sends the Complete doc-action
automatically. The statement posts and its payments are marked
reconciled without a separate manual step.

- completion logic extracted into runCompletion(); the manual
  "Auszug abschließen" button keeps its confirm dialog and remains as a
  retry if the automatic completion is rejected by iDempiere
- on failure the alert states that all lines are matched but the
  statement could not be closed automatically, with the backend reason
- after completion the next oldest draft is auto-selected
- progress hint tells the user the statement closes automatically once
  the last position is matched
The file was modifiedapp/pages/accounting/bank-reconciliation/index.vue (diff)
Commit 6b69cc2fe98bb650b6a1459eef13b9bdc8277e0c by info
Add new contract-offer system with online signing
The file was addedserver/api/offers/last-offer.get.ts
The file was addedserver/api/legal-documents/[key]/index.put.ts
The file was modifiedreference/ci/deploy-production.sh (diff)
The file was modifiedCLAUDE.md (diff)
The file was modifiedapp/composables/useOfferContract.ts (diff)
The file was addedserver/utils/offers/offerAttachments.ts
The file was addedserver/utils/legalDocsDb.ts
The file was addedserver/utils/offers/contractSigning.ts
The file was addedserver/utils/offers/contractSigningDb.ts
The file was addedserver/utils/offers/staticAnnexes.ts
The file was modifiedapp/assets/langs/shared.js (diff)
The file was modifiedapp/pages/users/leads/[id]/edit.vue (diff)
The file was addedreference/contracts/KFP_DSVGO_2026.pdf
The file was addedserver/api/public/sign/[token]/index.get.ts
The file was addedserver/utils/offers/agbPdf.ts
The file was modifiedserver/utils/offers/offerConditions.ts (diff)
The file was addedapp/pages/settings/legal-documents/index.vue
The file was addedserver/assets/offers/DSLV-ADSp-2017.pdf
The file was addedserver/api/offers/contract/signing-cancel.post.ts
The file was modifiedserver/utils/offers/contractTexts.ts (diff)
The file was addedapp/components/sign/DocThumb.vue
The file was addedserver/api/offers/contract/sections.get.ts
The file was modifiedserver/utils/offers/contractPdf.ts (diff)
The file was addedserver/utils/offers/contractPackage.ts
The file was modifiedreference/recipes.md (diff)
The file was addedserver/api/public/sign/[token]/document/[key].get.ts
The file was modifiedapp/components/offers/ContractModal.vue (diff)
The file was modifiedapp/components/MainNavigationMenu.vue (diff)
The file was addedreference/ci/README.md
The file was addedserver/api/offers/contract/signing-status.get.ts
The file was addedserver/assets/offers/Logistik-AGB_2019_dt.pdf
The file was modifiedserver/api/offers/contract/send.post.ts (diff)
The file was modifiedapp/components/offers/QuoteModal.vue (diff)
The file was addedapp/pages/sign/[token].vue
The file was addedserver/utils/offers/agbDefault.ts
The file was modified.gitignore (diff)
The file was modifiedapp/composables/menu/admin/settings.ts (diff)
The file was addedserver/api/legal-documents/[key]/index.get.ts
The file was addedserver/api/legal-documents/[key]/pdf.get.ts
The file was addedreference/contracts/DSLV-ADSp-2017.pdf
The file was addedserver/api/legal-documents/[key]/version/[id].get.ts
The file was modifiedreference/README.md (diff)
The file was addedreference/contracts/Logistik-AGB_2019_dt.pdf
The file was addedserver/api/public/sign/[token]/index.post.ts
The file was addedserver/api/public/sign/[token]/request-renewal.post.ts
Commit 12f40ea2a7a75561d477750382f56b35924124ff by info
Contract modal: 0-month notice default, aligned rows, checkbox spacing, opt-in PDF attachments on signing mail

- Kündigungsfrist defaults to 0; termination clause adapts (no notice / 1 month / N months + special right)
- Parameter rows bottom-align inputs; shorter cure-period label
- Spacing for contract-part, annex and signing checkboxes
- New 'attach PDFs to link e-mail' option (default off); link-only mail text; persisted with conditions
- Signing page: VAT hint now says German VAT ID may follow later but is required before shipping into Germany
The file was modifiedapp/composables/useOfferContract.ts (diff)
The file was modifiedapp/pages/sign/[token].vue (diff)
The file was modifiedserver/utils/offers/contractPdf.ts (diff)
The file was modifiedapp/assets/langs/shared.js (diff)
The file was modifiedapp/components/offers/ContractModal.vue (diff)
The file was modifiedserver/api/offers/contract/send.post.ts (diff)
The file was modifiedserver/utils/offers/contractTexts.ts (diff)
The file was modifiedserver/utils/offers/offerConditions.ts (diff)
Commit 2a68c6e0f83f7e930afc900ceef1304612462a26 by info
Lexoffice upload: pipeline invoices concurrently, throttle Lexware calls

The upload processed invoices strictly one after another with two fixed 500 ms
sleeps per invoice (~4.7 s each on prod: 1.0 s sleeps, 1.2 s iDempiere PDF
render, ~2.5 s Lexware calls). Lexware's upload endpoints return 202 before their
asynchronous OCR, so there was never anything to wait for — the time was purely
serial latency.

- lexofficeClient.ts: new `lexFetch` — the single gateway for all Lexware traffic.
  Process-wide pacing (>= 520 ms between call starts), max 2 calls in flight and
  429/503 retry with backoff (honours Retry-After). All client helpers use it.
- lexoffice-upload.post.ts: 3 invoices are worked on concurrently (worker pool),
  so PDF rendering overlaps the Lexware round-trips; the hard-coded sleeps are
  replaced by the throttle. Per-partner contact resolution is memoised for the
  run so concurrent invoices of one partner can't create duplicate contacts.
  Per-invoice logs are prefixed with the invoice id; result id lists keep the
  caller's input order. Response contract unchanged.

Expected: ~4.7 s -> ~1.5 s per invoice on bulk uploads.
The file was modifiedserver/api/invoices/lexoffice-upload.post.ts (diff)
The file was modifiedserver/utils/lexofficeClient.ts (diff)
Commit f409dbb222ee4bbe9fbf05ab0777df7eb128779a by info
Amazon settlements: show/filter Lexoffice + CSV status immediately after actions

After uploading invoices or exporting a settlement CSV the row status was patched
in place, but the "Lexoffice" / "CSV-Export" column set filters kept the value
list they built from the initially loaded rows. A period that started with only
"Nein" never offered "Ja", so filtering on the just-uploaded / just-exported rows
only worked after a full page reload.

- refreshLexCells now refreshes both set filters' value lists
  (getColumnFilterInstance -> refreshFilterValues) before re-running the filter,
  and updates the filtered row count + lexStats in the same pass.
- Both columns get `filterParams: { refreshValuesOnOpen: true }` as a safety net.
The file was modifiedapp/pages/accounting/amazon-settlements.vue (diff)
Commit 3dd6009da7e593917e3ea5287f39c505a6b94c09 by info
Lexoffice upload: send invoices in chunks of 20 per request

The sales invoices list sent every selected invoice id in a single request, so a
large selection became one very long HTTP request that could hit the proxy
timeout. It now uploads in chunks of 20 ids sequentially and aggregates
uploaded / skipped / error counts into one toast. The Amazon settlements page
already chunked (10) — raised to 20 to match the faster concurrent server path
while keeping progress visible.
The file was modifiedapp/pages/sales/invoices/index.vue (diff)
The file was modifiedapp/pages/accounting/amazon-settlements.vue (diff)
Commit 5049cd1e61d80ce33abfb9226f9a4fcf225ccd20 by info
Recipes: Lexware uploads are async, lexFetch throttle, settlement grid set-filter refresh
The file was modifiedreference/recipes.md (diff)
Commit e7af7d902afd9c8b492f5aae928dd5fd3ca0b1ff by info
Lexoffice upload: guard against double uploads of the same invoice

- Dedupe the requested ids: with concurrent workers a duplicated id could be
  picked up by two workers at once (serial processing used to mask this).
- Process-local in-progress set: overlapping requests (double-click, two tabs,
  two users) that both pass the isUploadToLexoffice check before either has
  marked the invoice now skip it with "already being uploaded by another
  request" instead of uploading it twice.
The file was modifiedserver/api/invoices/lexoffice-upload.post.ts (diff)
Commit 2c1cf04ffecab7dbbadb2f9037e9f71476ccfe2f by info
Marketing flyer LogYou x LogShip: 16:9 PDF, opt-in attachment on quote/contract, dummy-data demo screens

- server/utils/offers/flyerPdf.ts + flyerTexts.ts (DE/EN), assets under server/assets/offers/flyer
- GET /api/offers/flyer (preview/download), contractPackage 'flyer' key (explicit opt-in), quote send attachment
- Checkboxes (default off) in ContractModal and QuoteModal with preview link
- /flyer-demo/* public dummy-data screens used for the app screenshots
- ci: deploy script preserves new SQLite stores + signing PDFs; ci/README convention; recipes
The file was addedserver/assets/offers/flyer/conveyor_packages_p.jpg
The file was addedserver/assets/offers/flyer/laptop_analytics.jpg
The file was addedserver/assets/offers/flyer/logos/temu.png
The file was addedserver/assets/offers/flyer/logos/ebay.svg
The file was addedserver/assets/offers/flyer/logos/dpd_logo_small.png
The file was addedserver/assets/offers/flyer/logos/dhl_logo_small.png
The file was addedserver/assets/offers/flyer/logos/shopware.png
The file was addedserver/assets/offers/flyer/cardboard_boxes_p.jpg
The file was addedserver/assets/offers/flyer/barcode_scanner_t.jpg
The file was addedserver/assets/offers/flyer/forklift_aisle.jpg
The file was addedserver/utils/offers/flyerTexts.ts
The file was modifiedserver/utils/offers/contractPackage.ts (diff)
The file was modifiedapp/composables/useOfferQuote.ts (diff)
The file was addedserver/utils/offers/flyerPdf.ts
The file was modifiedserver/utils/offers/contractSigning.ts (diff)
The file was addedserver/assets/offers/flyer/screen-dashboard.png
The file was addedserver/assets/offers/flyer/warehouse_shelves.jpg
The file was modifiedreference/recipes.md (diff)
The file was addedserver/assets/offers/flyer/logos/jtl.png
The file was modifiedapp/composables/useOfferContract.ts (diff)
The file was addedserver/assets/offers/flyer/screen-stock.png
The file was addedserver/assets/offers/flyer/delivery_truck_p.jpg
The file was addedserver/assets/offers/flyer/screen-tracking.png
The file was addedreference/contracts/Monkatech x Hive - 20240701 - Angebot.pdf
The file was modifiedapp/components/offers/ContractModal.vue (diff)
The file was addedserver/assets/offers/flyer/logos/gls_logo_small.svg
The file was addedserver/assets/offers/flyer/logos/plentyone_logo.png
The file was addedserver/assets/offers/flyer/warehouse_scanning_w.jpg
The file was addedserver/assets/offers/flyer/screen-orders.png
The file was modifiedserver/api/offers/quote/send.post.ts (diff)
The file was addedserver/assets/offers/flyer/ecommerce_packages.jpg
The file was addedserver/assets/offers/flyer/screen-mobile.png
The file was addedserver/assets/offers/flyer/warehouse_scanning.jpg
The file was addedserver/assets/offers/flyer/barcode_scanner.jpg
The file was addedserver/api/offers/flyer.get.ts
The file was addedserver/assets/offers/flyer/ecommerce_packages_w.jpg
The file was addedserver/assets/offers/flyer/logos/one_logo_small.png
The file was addedserver/assets/offers/flyer/delivery_truck.jpg
The file was addedserver/assets/offers/flyer/logyou-logo-dark.png
The file was addedserver/assets/offers/flyer/packing_station_p.jpg
The file was addedserver/assets/offers/flyer/warehouse_scanning_p.jpg
The file was addedserver/assets/offers/flyer/laptop_analytics_w.jpg
The file was addedserver/assets/offers/flyer/packing_station.jpg
The file was addedserver/assets/offers/flyer/delivery_truck_t.jpg
The file was modifiedapp/assets/langs/shared.js (diff)
The file was addedserver/assets/offers/flyer/warehouse_shelves_p.jpg
The file was addedserver/assets/offers/flyer/forklift_aisle_p.jpg
The file was addedserver/assets/offers/flyer/logos/dhlexpress.png
The file was addedserver/assets/offers/flyer/logship-mark.png
The file was addedserver/assets/offers/flyer/mobile_warehouse.jpg
The file was modifiedapp/components/offers/QuoteModal.vue (diff)
The file was addedserver/assets/offers/flyer/logos/shopify.png
The file was addedserver/assets/offers/flyer/screen-returns.png
The file was addedserver/assets/offers/flyer/warehouse_shelves_t.jpg
The file was addedserver/assets/offers/flyer/forklift_aisle_t.jpg
The file was addedserver/assets/offers/flyer/barcode_scanner_p.jpg
The file was addedserver/assets/offers/flyer/logyou-logo.png
The file was addedapp/pages/flyer-demo/[screen].vue
The file was addedserver/assets/offers/flyer/cardboard_boxes_t.jpg
The file was addedserver/assets/offers/flyer/logship-logo-dark.png
The file was addedserver/assets/offers/flyer/mobile_warehouse_p.jpg
The file was addedserver/assets/offers/flyer/screen-shipments.png
The file was addedserver/assets/offers/flyer/logos/amazon_icon.png
The file was addedserver/assets/offers/flyer/logship-logo-light.png
The file was addedserver/assets/offers/flyer/logos/xentral_logo.png
The file was addedserver/assets/offers/flyer/conveyor_packages.jpg
The file was addedserver/assets/offers/flyer/cardboard_boxes.jpg