<freeStyleBuild _class='hudson.model.FreeStyleBuild'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.TimerTrigger$TimerTriggerCause'><shortDescription>Started by timer</shortDescription></cause></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesorigindev _class='hudson.plugins.git.util.Build'><buildNumber>730</buildNumber><marked><SHA1>2c1cf04ffecab7dbbadb2f9037e9f71476ccfe2f</SHA1><branch><SHA1>2c1cf04ffecab7dbbadb2f9037e9f71476ccfe2f</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>2c1cf04ffecab7dbbadb2f9037e9f71476ccfe2f</SHA1><branch><SHA1>2c1cf04ffecab7dbbadb2f9037e9f71476ccfe2f</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>2c1cf04ffecab7dbbadb2f9037e9f71476ccfe2f</SHA1><branch><SHA1>2c1cf04ffecab7dbbadb2f9037e9f71476ccfe2f</SHA1><name>refs/remotes/origin/dev</name></branch></lastBuiltRevision><remoteUrl>https://github.com/younex1/erp-nuxt-frontend.git</remoteUrl><scmName></scmName></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'><artifactsUrl>https://jenkins.younex.de/view/all/job/build-logship-frontend/730/artifact</artifactsUrl><changesUrl>https://jenkins.younex.de/view/all/job/build-logship-frontend/changes</changesUrl><displayUrl>https://jenkins.younex.de/view/all/job/build-logship-frontend/730/</displayUrl><testsUrl>https://jenkins.younex.de/view/all/job/build-logship-frontend/730/testReport</testsUrl></action><building>false</building><displayName>#730</displayName><duration>64433</duration><estimatedDuration>71602</estimatedDuration><fullDisplayName>build-logship-frontend #730</fullDisplayName><id>730</id><inProgress>false</inProgress><keepLog>false</keepLog><number>730</number><queueId>5649</queueId><result>SUCCESS</result><timestamp>1788825600272</timestamp><url>https://jenkins.younex.de/view/all/job/build-logship-frontend/730/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/banking-lexoffice/eBay Payments_EUR Sammelkonto_CSV_2026-06-09_2026-09-07.csv</affectedPath><affectedPath>reference/banking-lexoffice/leitfaden_fuer_die_buchhaltung.pdf</affectedPath><commitId>09cf3a9f16c449a1b1d2a51178b035a7eda02cc6</commitId><timestamp>1788783186000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Tune Amazon Bezahlabgleich
</comment><date>2026-09-07 14:13:06 +0200</date><id>09cf3a9f16c449a1b1d2a51178b035a7eda02cc6</id><msg>Tune Amazon Bezahlabgleich</msg><path><editType>add</editType><file>reference/banking-lexoffice/eBay Payments_EUR Sammelkonto_CSV_2026-06-09_2026-09-07.csv</file></path><path><editType>add</editType><file>reference/banking-lexoffice/leitfaden_fuer_die_buchhaltung.pdf</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/utils/amazonLexoffice.ts</affectedPath><affectedPath>server/utils/ebayFinancesApi.ts</affectedPath><affectedPath>app/components/accounting/SettlementGridFilters.vue</affectedPath><affectedPath>reference/banking-lexoffice/Amazon_EUR Sammelkonto_CSV_2026-06-09_2026-09-07.csv</affectedPath><affectedPath>app/components/accounting/SettlementToolbar.vue</affectedPath><affectedPath>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</affectedPath><affectedPath>app/pages/accounting/amazon-settlements.vue</affectedPath><affectedPath>app/composables/useLexofficeSettlementExport.ts</affectedPath><affectedPath>app/utils/amazonFeeCodes.ts</affectedPath><affectedPath>server/utils/amazonSpApi.ts</affectedPath><affectedPath>app/components/accounting/SettlementPeriodList.vue</affectedPath><affectedPath>app/components/accounting/SettlementSummaryStrip.vue</affectedPath><affectedPath>app/utils/settlementViews.ts</affectedPath><affectedPath>app/components/accounting/SettlementViewSwitch.vue</affectedPath><affectedPath>app/utils/settlementGridFilter.ts</affectedPath><affectedPath>app/utils/ebayLexoffice.ts</affectedPath><affectedPath>app/components/accounting/SettlementSourceFields.vue</affectedPath><affectedPath>app/pages/accounting/ebay-settlements.vue</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><affectedPath>app/components/accounting/LexofficeHintsPanel.vue</affectedPath><affectedPath>app/composables/menu/admin/accounting.ts</affectedPath><commitId>ef7d4221f72b123c18900fe104eb9b44608eb18c</commitId><timestamp>1788787440000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add amazon settlement
</comment><date>2026-09-07 15:24:00 +0200</date><id>ef7d4221f72b123c18900fe104eb9b44608eb18c</id><msg>add amazon settlement</msg><path><editType>add</editType><file>app/composables/useLexofficeSettlementExport.ts</file></path><path><editType>add</editType><file>app/components/accounting/SettlementViewSwitch.vue</file></path><path><editType>add</editType><file>app/components/accounting/SettlementToolbar.vue</file></path><path><editType>edit</editType><file>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</file></path><path><editType>edit</editType><file>app/pages/accounting/ebay-settlements.vue</file></path><path><editType>edit</editType><file>server/utils/amazonSpApi.ts</file></path><path><editType>add</editType><file>app/components/accounting/SettlementPeriodList.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/amazon-settlements.vue</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>add</editType><file>app/components/accounting/SettlementSummaryStrip.vue</file></path><path><editType>add</editType><file>app/components/accounting/SettlementSourceFields.vue</file></path><path><editType>edit</editType><file>server/utils/ebayFinancesApi.ts</file></path><path><editType>add</editType><file>app/utils/amazonLexoffice.ts</file></path><path><editType>add</editType><file>app/utils/settlementGridFilter.ts</file></path><path><editType>add</editType><file>reference/banking-lexoffice/Amazon_EUR Sammelkonto_CSV_2026-06-09_2026-09-07.csv</file></path><path><editType>edit</editType><file>app/composables/menu/admin/accounting.ts</file></path><path><editType>add</editType><file>app/utils/settlementViews.ts</file></path><path><editType>add</editType><file>app/components/accounting/SettlementGridFilters.vue</file></path><path><editType>add</editType><file>app/components/accounting/LexofficeHintsPanel.vue</file></path><path><editType>add</editType><file>app/utils/ebayLexoffice.ts</file></path><path><editType>add</editType><file>app/utils/amazonFeeCodes.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/accounting/SettlementViewSwitch.vue</affectedPath><affectedPath>app/utils/settlementGridFilter.ts</affectedPath><affectedPath>app/components/AgGrid/Accounting/AgLexofficeSyncStatus.vue</affectedPath><affectedPath>app/components/accounting/SettlementGridFilters.vue</affectedPath><affectedPath>app/components/accounting/SettlementLexofficeActions.vue</affectedPath><affectedPath>app/pages/accounting/amazon-settlements.vue</affectedPath><affectedPath>server/api/invoices/lexoffice-reset.post.ts</affectedPath><affectedPath>server/api/invoices/lexoffice-upload.post.ts</affectedPath><affectedPath>server/utils/lexofficeCsvExportMark.ts</affectedPath><affectedPath>app/composables/useLexofficeSettlementExport.ts</affectedPath><affectedPath>server/api/accounting/lexoffice-csv-export.post.ts</affectedPath><affectedPath>server/api/accounting/amazon/settlement.get.ts</affectedPath><commitId>c2c7b9c16220cd0b336b5d3d7dbef95248c9c69e</commitId><timestamp>1788790692000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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)
</comment><date>2026-09-07 16:18:12 +0200</date><id>c2c7b9c16220cd0b336b5d3d7dbef95248c9c69e</id><msg>Amazon settlements: Lexoffice upload/reset + CSV-export marker</msg><path><editType>add</editType><file>server/utils/lexofficeCsvExportMark.ts</file></path><path><editType>add</editType><file>server/api/accounting/lexoffice-csv-export.post.ts</file></path><path><editType>edit</editType><file>server/api/invoices/lexoffice-reset.post.ts</file></path><path><editType>edit</editType><file>app/composables/useLexofficeSettlementExport.ts</file></path><path><editType>edit</editType><file>app/components/accounting/SettlementViewSwitch.vue</file></path><path><editType>edit</editType><file>app/utils/settlementGridFilter.ts</file></path><path><editType>add</editType><file>app/components/AgGrid/Accounting/AgLexofficeSyncStatus.vue</file></path><path><editType>edit</editType><file>server/api/accounting/amazon/settlement.get.ts</file></path><path><editType>edit</editType><file>app/pages/accounting/amazon-settlements.vue</file></path><path><editType>edit</editType><file>app/components/accounting/SettlementGridFilters.vue</file></path><path><editType>add</editType><file>app/components/accounting/SettlementLexofficeActions.vue</file></path><path><editType>edit</editType><file>server/api/invoices/lexoffice-upload.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/bank-reconciliation/index.vue</affectedPath><commitId>269ecf4f253329ab9533a693ce3103ac4359f80a</commitId><timestamp>1788791097000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-09-07 16:24:57 +0200</date><id>269ecf4f253329ab9533a693ce3103ac4359f80a</id><msg>Bank reconciliation: auto-complete statement when the last line is matched</msg><path><editType>edit</editType><file>app/pages/accounting/bank-reconciliation/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/contractPackage.ts</affectedPath><affectedPath>server/api/public/sign/[token]/document/[key].get.ts</affectedPath><affectedPath>app/composables/menu/admin/settings.ts</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>server/api/legal-documents/[key]/index.put.ts</affectedPath><affectedPath>CLAUDE.md</affectedPath><affectedPath>server/api/legal-documents/[key]/pdf.get.ts</affectedPath><affectedPath>app/composables/useOfferContract.ts</affectedPath><affectedPath>server/utils/offers/offerAttachments.ts</affectedPath><affectedPath>server/utils/offers/staticAnnexes.ts</affectedPath><affectedPath>reference/contracts/DSLV-ADSp-2017.pdf</affectedPath><affectedPath>server/api/offers/contract/signing-cancel.post.ts</affectedPath><affectedPath>server/utils/offers/offerConditions.ts</affectedPath><affectedPath>server/api/legal-documents/[key]/version/[id].get.ts</affectedPath><affectedPath>server/api/offers/contract/sections.get.ts</affectedPath><affectedPath>server/api/public/sign/[token]/request-renewal.post.ts</affectedPath><affectedPath>reference/contracts/Logistik-AGB_2019_dt.pdf</affectedPath><affectedPath>server/utils/legalDocsDb.ts</affectedPath><affectedPath>server/utils/offers/agbPdf.ts</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>reference/contracts/KFP_DSVGO_2026.pdf</affectedPath><affectedPath>reference/recipes.md</affectedPath><affectedPath>reference/README.md</affectedPath><affectedPath>server/api/public/sign/[token]/index.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>reference/ci/deploy-production.sh</affectedPath><affectedPath>server/api/offers/contract/send.post.ts</affectedPath><affectedPath>server/utils/offers/agbDefault.ts</affectedPath><affectedPath>app/pages/settings/legal-documents/index.vue</affectedPath><affectedPath>server/api/legal-documents/[key]/index.get.ts</affectedPath><affectedPath>reference/ci/README.md</affectedPath><affectedPath>app/pages/sign/[token].vue</affectedPath><affectedPath>server/utils/offers/contractSigning.ts</affectedPath><affectedPath>server/api/offers/last-offer.get.ts</affectedPath><affectedPath>server/api/public/sign/[token]/index.post.ts</affectedPath><affectedPath>server/api/offers/contract/signing-status.get.ts</affectedPath><affectedPath>server/assets/offers/DSLV-ADSp-2017.pdf</affectedPath><affectedPath>server/utils/offers/contractTexts.ts</affectedPath><affectedPath>server/utils/offers/contractPdf.ts</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><affectedPath>app/components/offers/ContractModal.vue</affectedPath><affectedPath>server/assets/offers/Logistik-AGB_2019_dt.pdf</affectedPath><affectedPath>app/components/sign/DocThumb.vue</affectedPath><affectedPath>server/utils/offers/contractSigningDb.ts</affectedPath><commitId>6b69cc2fe98bb650b6a1459eef13b9bdc8277e0c</commitId><timestamp>1788794153000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Add new contract-offer system with online signing
</comment><date>2026-09-07 17:15:53 +0200</date><id>6b69cc2fe98bb650b6a1459eef13b9bdc8277e0c</id><msg>Add new contract-offer system with online signing</msg><path><editType>edit</editType><file>CLAUDE.md</file></path><path><editType>edit</editType><file>app/composables/useOfferContract.ts</file></path><path><editType>add</editType><file>server/utils/offers/offerAttachments.ts</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path><path><editType>edit</editType><file>app/composables/menu/admin/settings.ts</file></path><path><editType>add</editType><file>reference/contracts/DSLV-ADSp-2017.pdf</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>reference/README.md</file></path><path><editType>add</editType><file>server/api/offers/contract/signing-status.get.ts</file></path><path><editType>edit</editType><file>reference/ci/deploy-production.sh</file></path><path><editType>add</editType><file>server/api/offers/contract/sections.get.ts</file></path><path><editType>add</editType><file>server/api/offers/last-offer.get.ts</file></path><path><editType>add</editType><file>server/api/public/sign/[token]/index.post.ts</file></path><path><editType>add</editType><file>reference/ci/README.md</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>add</editType><file>server/api/legal-documents/[key]/index.put.ts</file></path><path><editType>edit</editType><file>server/utils/offers/contractTexts.ts</file></path><path><editType>edit</editType><file>server/utils/offers/offerConditions.ts</file></path><path><editType>add</editType><file>server/utils/offers/agbDefault.ts</file></path><path><editType>edit</editType><file>app/components/offers/ContractModal.vue</file></path><path><editType>add</editType><file>server/utils/offers/contractSigningDb.ts</file></path><path><editType>add</editType><file>server/utils/offers/staticAnnexes.ts</file></path><path><editType>add</editType><file>server/api/legal-documents/[key]/pdf.get.ts</file></path><path><editType>add</editType><file>server/assets/offers/DSLV-ADSp-2017.pdf</file></path><path><editType>edit</editType><file>server/utils/offers/contractPdf.ts</file></path><path><editType>add</editType><file>server/utils/offers/agbPdf.ts</file></path><path><editType>add</editType><file>server/api/public/sign/[token]/request-renewal.post.ts</file></path><path><editType>add</editType><file>reference/contracts/KFP_DSVGO_2026.pdf</file></path><path><editType>add</editType><file>server/utils/offers/contractPackage.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>app/pages/settings/legal-documents/index.vue</file></path><path><editType>add</editType><file>reference/contracts/Logistik-AGB_2019_dt.pdf</file></path><path><editType>add</editType><file>server/api/legal-documents/[key]/index.get.ts</file></path><path><editType>add</editType><file>app/pages/sign/[token].vue</file></path><path><editType>add</editType><file>server/api/public/sign/[token]/index.get.ts</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>add</editType><file>server/api/offers/contract/signing-cancel.post.ts</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>add</editType><file>server/utils/legalDocsDb.ts</file></path><path><editType>add</editType><file>server/api/legal-documents/[key]/version/[id].get.ts</file></path><path><editType>add</editType><file>app/components/sign/DocThumb.vue</file></path><path><editType>add</editType><file>server/api/public/sign/[token]/document/[key].get.ts</file></path><path><editType>add</editType><file>server/assets/offers/Logistik-AGB_2019_dt.pdf</file></path><path><editType>edit</editType><file>server/api/offers/contract/send.post.ts</file></path><path><editType>add</editType><file>server/utils/offers/contractSigning.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/offers/contract/send.post.ts</affectedPath><affectedPath>server/utils/offers/contractTexts.ts</affectedPath><affectedPath>server/utils/offers/contractPdf.ts</affectedPath><affectedPath>app/components/offers/ContractModal.vue</affectedPath><affectedPath>app/composables/useOfferContract.ts</affectedPath><affectedPath>server/utils/offers/offerConditions.ts</affectedPath><affectedPath>app/pages/sign/[token].vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>12f40ea2a7a75561d477750382f56b35924124ff</commitId><timestamp>1788796254000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-09-07 17:50:54 +0200</date><id>12f40ea2a7a75561d477750382f56b35924124ff</id><msg>Contract modal: 0-month notice default, aligned rows, checkbox spacing, opt-in PDF attachments on signing mail</msg><path><editType>edit</editType><file>server/api/offers/contract/send.post.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferContract.ts</file></path><path><editType>edit</editType><file>server/utils/offers/contractTexts.ts</file></path><path><editType>edit</editType><file>server/utils/offers/offerConditions.ts</file></path><path><editType>edit</editType><file>app/components/offers/ContractModal.vue</file></path><path><editType>edit</editType><file>app/pages/sign/[token].vue</file></path><path><editType>edit</editType><file>server/utils/offers/contractPdf.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/invoices/lexoffice-upload.post.ts</affectedPath><affectedPath>server/utils/lexofficeClient.ts</affectedPath><commitId>2a68c6e0f83f7e930afc900ceef1304612462a26</commitId><timestamp>1788796819000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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 (&gt;= 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 -&gt; ~1.5 s per invoice on bulk uploads.
</comment><date>2026-09-07 18:00:19 +0200</date><id>2a68c6e0f83f7e930afc900ceef1304612462a26</id><msg>Lexoffice upload: pipeline invoices concurrently, throttle Lexware calls</msg><path><editType>edit</editType><file>server/api/invoices/lexoffice-upload.post.ts</file></path><path><editType>edit</editType><file>server/utils/lexofficeClient.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-settlements.vue</affectedPath><commitId>f409dbb222ee4bbe9fbf05ab0777df7eb128779a</commitId><timestamp>1788796831000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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 -&gt; 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.
</comment><date>2026-09-07 18:00:31 +0200</date><id>f409dbb222ee4bbe9fbf05ab0777df7eb128779a</id><msg>Amazon settlements: show/filter Lexoffice + CSV status immediately after actions</msg><path><editType>edit</editType><file>app/pages/accounting/amazon-settlements.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-settlements.vue</affectedPath><affectedPath>app/pages/sales/invoices/index.vue</affectedPath><commitId>3dd6009da7e593917e3ea5287f39c505a6b94c09</commitId><timestamp>1788796841000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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.
</comment><date>2026-09-07 18:00:41 +0200</date><id>3dd6009da7e593917e3ea5287f39c505a6b94c09</id><msg>Lexoffice upload: send invoices in chunks of 20 per request</msg><path><editType>edit</editType><file>app/pages/accounting/amazon-settlements.vue</file></path><path><editType>edit</editType><file>app/pages/sales/invoices/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/recipes.md</affectedPath><commitId>5049cd1e61d80ce33abfb9226f9a4fcf225ccd20</commitId><timestamp>1788797057000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Recipes: Lexware uploads are async, lexFetch throttle, settlement grid set-filter refresh
</comment><date>2026-09-07 18:04:17 +0200</date><id>5049cd1e61d80ce33abfb9226f9a4fcf225ccd20</id><msg>Recipes: Lexware uploads are async, lexFetch throttle, settlement grid set-filter refresh</msg><path><editType>edit</editType><file>reference/recipes.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/invoices/lexoffice-upload.post.ts</affectedPath><commitId>e7af7d902afd9c8b492f5aae928dd5fd3ca0b1ff</commitId><timestamp>1788797129000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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.
</comment><date>2026-09-07 18:05:29 +0200</date><id>e7af7d902afd9c8b492f5aae928dd5fd3ca0b1ff</id><msg>Lexoffice upload: guard against double uploads of the same invoice</msg><path><editType>edit</editType><file>server/api/invoices/lexoffice-upload.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/assets/offers/flyer/logos/amazon_icon.png</affectedPath><affectedPath>server/assets/offers/flyer/warehouse_scanning_p.jpg</affectedPath><affectedPath>server/assets/offers/flyer/barcode_scanner_t.jpg</affectedPath><affectedPath>server/api/offers/flyer.get.ts</affectedPath><affectedPath>server/assets/offers/flyer/forklift_aisle_p.jpg</affectedPath><affectedPath>server/assets/offers/flyer/logyou-logo.png</affectedPath><affectedPath>server/assets/offers/flyer/warehouse_scanning.jpg</affectedPath><affectedPath>server/assets/offers/flyer/packing_station_p.jpg</affectedPath><affectedPath>server/assets/offers/flyer/delivery_truck_t.jpg</affectedPath><affectedPath>server/assets/offers/flyer/logos/xentral_logo.png</affectedPath><affectedPath>server/assets/offers/flyer/screen-returns.png</affectedPath><affectedPath>server/assets/offers/flyer/logos/shopify.png</affectedPath><affectedPath>server/assets/offers/flyer/logship-logo-dark.png</affectedPath><affectedPath>server/assets/offers/flyer/delivery_truck_p.jpg</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>server/assets/offers/flyer/delivery_truck.jpg</affectedPath><affectedPath>server/assets/offers/flyer/forklift_aisle.jpg</affectedPath><affectedPath>server/assets/offers/flyer/warehouse_shelves.jpg</affectedPath><affectedPath>server/assets/offers/flyer/logos/dhlexpress.png</affectedPath><affectedPath>server/assets/offers/flyer/logos/temu.png</affectedPath><affectedPath>server/assets/offers/flyer/ecommerce_packages.jpg</affectedPath><affectedPath>server/utils/offers/flyerTexts.ts</affectedPath><affectedPath>server/utils/offers/contractSigning.ts</affectedPath><affectedPath>server/assets/offers/flyer/warehouse_shelves_p.jpg</affectedPath><affectedPath>server/assets/offers/flyer/forklift_aisle_t.jpg</affectedPath><affectedPath>app/pages/flyer-demo/[screen].vue</affectedPath><affectedPath>server/assets/offers/flyer/screen-orders.png</affectedPath><affectedPath>server/assets/offers/flyer/cardboard_boxes_t.jpg</affectedPath><affectedPath>server/assets/offers/flyer/barcode_scanner_p.jpg</affectedPath><affectedPath>server/assets/offers/flyer/barcode_scanner.jpg</affectedPath><affectedPath>reference/contracts/Monkatech x Hive - 20240701 - Angebot.pdf</affectedPath><affectedPath>server/assets/offers/flyer/laptop_analytics_w.jpg</affectedPath><affectedPath>server/assets/offers/flyer/packing_station.jpg</affectedPath><affectedPath>server/utils/offers/flyerPdf.ts</affectedPath><affectedPath>server/utils/offers/contractPackage.ts</affectedPath><affectedPath>server/assets/offers/flyer/logos/dpd_logo_small.png</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>server/assets/offers/flyer/cardboard_boxes.jpg</affectedPath><affectedPath>server/assets/offers/flyer/logos/plentyone_logo.png</affectedPath><affectedPath>app/composables/useOfferContract.ts</affectedPath><affectedPath>server/assets/offers/flyer/logos/gls_logo_small.svg</affectedPath><affectedPath>server/assets/offers/flyer/logos/jtl.png</affectedPath><affectedPath>server/assets/offers/flyer/mobile_warehouse_p.jpg</affectedPath><affectedPath>server/assets/offers/flyer/screen-dashboard.png</affectedPath><affectedPath>reference/recipes.md</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>server/assets/offers/flyer/logyou-logo-dark.png</affectedPath><affectedPath>server/assets/offers/flyer/logos/shopware.png</affectedPath><affectedPath>server/assets/offers/flyer/screen-shipments.png</affectedPath><affectedPath>server/assets/offers/flyer/warehouse_scanning_w.jpg</affectedPath><affectedPath>server/assets/offers/flyer/cardboard_boxes_p.jpg</affectedPath><affectedPath>server/assets/offers/flyer/ecommerce_packages_w.jpg</affectedPath><affectedPath>server/assets/offers/flyer/mobile_warehouse.jpg</affectedPath><affectedPath>server/assets/offers/flyer/laptop_analytics.jpg</affectedPath><affectedPath>server/assets/offers/flyer/screen-stock.png</affectedPath><affectedPath>server/assets/offers/flyer/logship-logo-light.png</affectedPath><affectedPath>server/assets/offers/flyer/logos/dhl_logo_small.png</affectedPath><affectedPath>server/assets/offers/flyer/screen-mobile.png</affectedPath><affectedPath>server/assets/offers/flyer/screen-tracking.png</affectedPath><affectedPath>app/components/offers/ContractModal.vue</affectedPath><affectedPath>server/assets/offers/flyer/logos/ebay.svg</affectedPath><affectedPath>server/assets/offers/flyer/conveyor_packages_p.jpg</affectedPath><affectedPath>server/assets/offers/flyer/conveyor_packages.jpg</affectedPath><affectedPath>server/api/offers/quote/send.post.ts</affectedPath><affectedPath>server/assets/offers/flyer/warehouse_shelves_t.jpg</affectedPath><affectedPath>server/assets/offers/flyer/logship-mark.png</affectedPath><affectedPath>server/assets/offers/flyer/logos/one_logo_small.png</affectedPath><commitId>2c1cf04ffecab7dbbadb2f9037e9f71476ccfe2f</commitId><timestamp>1788798488000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-09-07 18:28:08 +0200</date><id>2c1cf04ffecab7dbbadb2f9037e9f71476ccfe2f</id><msg>Marketing flyer LogYou x LogShip: 16:9 PDF, opt-in attachment on quote/contract, dummy-data demo screens</msg><path><editType>add</editType><file>server/assets/offers/flyer/delivery_truck_t.jpg</file></path><path><editType>add</editType><file>server/utils/offers/flyerPdf.ts</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logyou-logo.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/screen-stock.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/laptop_analytics_w.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/xentral_logo.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/laptop_analytics.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/dpd_logo_small.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/mobile_warehouse_p.jpg</file></path><path><editType>add</editType><file>app/pages/flyer-demo/[screen].vue</file></path><path><editType>add</editType><file>server/assets/offers/flyer/forklift_aisle.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/forklift_aisle_t.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/cardboard_boxes_t.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/packing_station_p.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/warehouse_shelves_t.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/screen-returns.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/screen-orders.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/dhlexpress.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/packing_station.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/shopify.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/warehouse_shelves.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/conveyor_packages_p.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/conveyor_packages.jpg</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>add</editType><file>server/assets/offers/flyer/cardboard_boxes.jpg</file></path><path><editType>edit</editType><file>app/composables/useOfferContract.ts</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/ebay.svg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/warehouse_scanning.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/barcode_scanner_p.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/warehouse_scanning_p.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/ecommerce_packages.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/barcode_scanner.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/ecommerce_packages_w.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/barcode_scanner_t.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/screen-tracking.png</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logship-logo-light.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/mobile_warehouse.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/dhl_logo_small.png</file></path><path><editType>edit</editType><file>server/utils/offers/contractPackage.ts</file></path><path><editType>add</editType><file>server/assets/offers/flyer/screen-dashboard.png</file></path><path><editType>edit</editType><file>server/api/offers/quote/send.post.ts</file></path><path><editType>add</editType><file>server/assets/offers/flyer/forklift_aisle_p.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/plentyone_logo.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logyou-logo-dark.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/jtl.png</file></path><path><editType>edit</editType><file>app/components/offers/ContractModal.vue</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logship-mark.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/screen-mobile.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logship-logo-dark.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/cardboard_boxes_p.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/shopware.png</file></path><path><editType>add</editType><file>reference/contracts/Monkatech x Hive - 20240701 - Angebot.pdf</file></path><path><editType>add</editType><file>server/assets/offers/flyer/screen-shipments.png</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/assets/offers/flyer/delivery_truck_p.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/gls_logo_small.svg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/delivery_truck.jpg</file></path><path><editType>edit</editType><file>server/utils/offers/contractSigning.ts</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/temu.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/warehouse_shelves_p.jpg</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path><path><editType>add</editType><file>server/assets/offers/flyer/warehouse_scanning_w.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/one_logo_small.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/amazon_icon.png</file></path><path><editType>add</editType><file>server/api/offers/flyer.get.ts</file></path><path><editType>add</editType><file>server/utils/offers/flyerTexts.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName><id>info</id></culprit></freeStyleBuild>