<freeStyleProject _class='hudson.model.FreeStyleProject'><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.JobDisplayAction'><displayUrl>https://jenkins.younex.de/job/build-logship-frontend/</displayUrl></action><action _class='com.cloudbees.plugins.credentials.ViewCredentialsAction'><stores></stores></action><description></description><displayName>build-logship-frontend</displayName><fullDisplayName>build-logship-frontend</fullDisplayName><fullName>build-logship-frontend</fullName><name>build-logship-frontend</name><url>https://jenkins.younex.de/job/build-logship-frontend/</url><buildable>true</buildable><build _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>787</buildNumber><marked><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><branch><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><branch><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><branch><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</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'></action><building>false</building><displayName>#787</displayName><duration>64924</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #787</fullDisplayName><id>787</id><inProgress>false</inProgress><keepLog>false</keepLog><number>787</number><queueId>5963</queueId><result>SUCCESS</result><timestamp>1793667600164</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/787/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/materials/warehouse-builder/index.vue</affectedPath><affectedPath>.claude/rules/materials/warehouse-builder.md</affectedPath><commitId>67fb6d6041a9cdb3636ab85556ba3e41e0ad5242</commitId><timestamp>1793614337000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-11-02 11:12:17 +0100</date><id>67fb6d6041a9cdb3636ab85556ba3e41e0ad5242</id><msg>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</msg><path><editType>edit</editType><file>.claude/rules/materials/warehouse-builder.md</file></path><path><editType>edit</editType><file>app/pages/materials/warehouse-builder/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/invoices/[id]/dhl-surcharge-report.get.ts</affectedPath><affectedPath>server/utils/invoices/dhlSurchargeReportPdf.ts</affectedPath><affectedPath>app/pages/sales/invoices/[id]/view.vue</affectedPath><affectedPath>.claude/rules/fulfillment/fee-invoice-generator.md</affectedPath><affectedPath>server/utils/invoices/dhlSurchargeReportData.ts</affectedPath><affectedPath>server/api/fulfillment/generate-fee-report.post.ts</affectedPath><affectedPath>app/pages/sales/invoices/[id]/edit.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>08b36be0cd4826d8531c7affa9df5a670046fe1c</commitId><timestamp>1793616305000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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)
</comment><date>2026-11-02 11:45:05 +0100</date><id>08b36be0cd4826d8531c7affa9df5a670046fe1c</id><msg>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)</msg><path><editType>edit</editType><file>app/pages/sales/invoices/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/utils/invoices/dhlSurchargeReportData.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/fee-invoice-generator.md</file></path><path><editType>add</editType><file>server/api/invoices/[id]/dhl-surcharge-report.get.ts</file></path><path><editType>add</editType><file>server/utils/invoices/dhlSurchargeReportPdf.ts</file></path><path><editType>edit</editType><file>server/api/fulfillment/generate-fee-report.post.ts</file></path><path><editType>edit</editType><file>app/pages/sales/invoices/[id]/view.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/fulfillment/fee-invoice-generator.md</affectedPath><affectedPath>server/utils/invoices/dhlSurchargeReportData.ts</affectedPath><commitId>a8d99ca4fb8fdf4af8c8329e94976c6fa4cf8b94</commitId><timestamp>1793618803000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>DHL Nachbelastung report: file-name fallback resolves the invoice number for both DHL file-name schemes (mirrors create_fulfillment.py)
</comment><date>2026-11-02 12:26:43 +0100</date><id>a8d99ca4fb8fdf4af8c8329e94976c6fa4cf8b94</id><msg>DHL Nachbelastung report: file-name fallback resolves the invoice number for both DHL file-name schemes (mirrors create_fulfillment.py)</msg><path><editType>edit</editType><file>server/utils/invoices/dhlSurchargeReportData.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/fee-invoice-generator.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/procurements/my-orders/[id].vue</affectedPath><affectedPath>app/pages/sales/invoices/[id]/edit.vue</affectedPath><affectedPath>.claude/rules/nuxt/nuxt4-conventions.md</affectedPath><affectedPath>app/pages/sales/fulfillment-orders/[id]/edit.vue</affectedPath><commitId>c29d7966d9218de3e0d2eaf201c9fcd9e700e7c2</commitId><timestamp>1793620845000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fix 500 on hard reload of sales invoice edit (and fulfillment-orders edit, inbound-notification detail): root-level &lt;Teleport to="body"&gt; next to the async &lt;NuxtLayout&gt; hydrated out of order in the prod build (insertBefore … not a child of this node); wrapped in &lt;ClientOnly&gt; like procurements/invoices edit; recipe note in nuxt4-conventions.md
</comment><date>2026-11-02 13:00:45 +0100</date><id>c29d7966d9218de3e0d2eaf201c9fcd9e700e7c2</id><msg>Fix 500 on hard reload of sales invoice edit (and fulfillment-orders edit, inbound-notification detail): root-level &lt;Teleport to="body"&gt; next to the async &lt;NuxtLayout&gt; hydrated out of order in the prod build (insertBefore … not a child of this node); wrapped in &lt;ClientOnly&gt; like procurements/invoices edit; recipe note in nuxt4-conventions.md</msg><path><editType>edit</editType><file>app/pages/sales/invoices/[id]/edit.vue</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/nuxt4-conventions.md</file></path><path><editType>edit</editType><file>app/pages/sales/fulfillment-orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/procurements/my-orders/[id].vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/saas/logship-cloud-konzept.pdf</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>reference/saas/logship-cloud-konzept.html</affectedPath><affectedPath>app/pages/mobile/generate-shipments.vue</affectedPath><affectedPath>server/api/requests/requests/browse.get.ts</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><commitId>75e2a35d6209b4fd4d203569e9f121aa74b27f03</commitId><timestamp>1793621603000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-11-02 13:13:23 +0100</date><id>75e2a35d6209b4fd4d203569e9f121aa74b27f03</id><msg>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</msg><path><editType>add</editType><file>reference/saas/logship-cloud-konzept.html</file></path><path><editType>add</editType><file>reference/saas/logship-cloud-konzept.pdf</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>edit</editType><file>server/api/requests/requests/browse.get.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/generate-shipments.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>server/api/requests/requests/browse.get.ts</affectedPath><commitId>9950ade8f88bf740a22245b600e996f969b704b4</commitId><timestamp>1793623232000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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'
</comment><date>2026-11-02 13:40:32 +0100</date><id>9950ade8f88bf740a22245b600e996f969b704b4</id><msg>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'</msg><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>server/api/requests/requests/browse.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>app/components/mobile/CameraCapture.vue</affectedPath><commitId>efa639ef0dbff30aa2bada22de90d11d93a114ad</commitId><timestamp>1793623380000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile tasks: 'Foto aufnehmen' uses a new in-app getUserMedia camera overlay (&lt;MobileCameraCapture&gt;, ported from the receive page) instead of &lt;input capture=environment&gt;, 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
</comment><date>2026-11-02 13:43:00 +0100</date><id>efa639ef0dbff30aa2bada22de90d11d93a114ad</id><msg>Mobile tasks: 'Foto aufnehmen' uses a new in-app getUserMedia camera overlay (&lt;MobileCameraCapture&gt;, ported from the receive page) instead of &lt;input capture=environment&gt;, 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</msg><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>add</editType><file>app/components/mobile/CameraCapture.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/update-files/version.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>server/api/requests/requests/browse.get.ts</affectedPath><commitId>c8f25c2067e77798abbfb3d0d7fb7ecf2bead84e</commitId><timestamp>1793623812000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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)'
</comment><date>2026-11-02 13:50:12 +0100</date><id>c8f25c2067e77798abbfb3d0d7fb7ecf2bead84e</id><msg>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)'</msg><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>server/api/requests/requests/browse.get.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/organizations/[id]/edit.vue</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_Lines.jrxml</affectedPath><affectedPath>reference/jasper-reports/invoice/Letterhead_Footer.jrxml</affectedPath><affectedPath>app/pages/users/organizations/create.vue</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_Address.jrxml</affectedPath><affectedPath>server/api/admin/organizations/[id]/organization-info/index.put.ts</affectedPath><affectedPath>.claude/rules/printing/jasper-shipment-report.md</affectedPath><affectedPath>app/components/admin/OrgFormField.vue</affectedPath><affectedPath>server/utils/orgInfoPayload.ts</affectedPath><affectedPath>reference/jasper-reports/README.md</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_Document.jrxml</affectedPath><affectedPath>app/composables/useOrganizationForm.ts</affectedPath><affectedPath>server/api/admin/organizations/store.post.ts</affectedPath><affectedPath>app/pages/users/organizations/index.vue</affectedPath><affectedPath>server/api/admin/organizations/update.put.ts</affectedPath><affectedPath>app/pages/users/organizations/[id]/duplicate.vue</affectedPath><affectedPath>app/components/admin/OrganizationForm.vue</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_OrgInfoblock.jrxml</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_TaxLines.jrxml</affectedPath><commitId>f1e371daca5a2d57ba1497c1d9a55dea31797678</commitId><timestamp>1793630440000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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): &lt;AdminOrganizationForm&gt; on Nuxt UI (hero with logo
tile + upload/remove, tabs Stammdaten / Briefkopf &amp; Belege / Adresse / Logistik &amp; 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.
</comment><date>2026-11-02 15:40:40 +0100</date><id>f1e371daca5a2d57ba1497c1d9a55dea31797678</id><msg>Invoice Jasper logo on black fixed + organization page rebuilt (full AD_Org/AD_OrgInfo CRUD, logo upload, Nuxt UI)</msg><path><editType>edit</editType><file>server/api/admin/organizations/[id]/organization-info/index.put.ts</file></path><path><editType>edit</editType><file>app/pages/users/organizations/create.vue</file></path><path><editType>edit</editType><file>app/pages/users/organizations/index.vue</file></path><path><editType>add</editType><file>app/components/admin/OrgFormField.vue</file></path><path><editType>edit</editType><file>reference/jasper-reports/README.md</file></path><path><editType>edit</editType><file>app/pages/users/organizations/[id]/edit.vue</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_Address.jrxml</file></path><path><editType>add</editType><file>app/composables/useOrganizationForm.ts</file></path><path><editType>add</editType><file>server/utils/orgInfoPayload.ts</file></path><path><editType>edit</editType><file>app/pages/users/organizations/[id]/duplicate.vue</file></path><path><editType>edit</editType><file>server/api/admin/organizations/store.post.ts</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_Lines.jrxml</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_Document.jrxml</file></path><path><editType>edit</editType><file>.claude/rules/printing/jasper-shipment-report.md</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_OrgInfoblock.jrxml</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/Letterhead_Footer.jrxml</file></path><path><editType>edit</editType><file>app/components/admin/OrganizationForm.vue</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_TaxLines.jrxml</file></path><path><editType>edit</editType><file>server/api/admin/organizations/update.put.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/leads/CloseLeadModal.vue</affectedPath><affectedPath>app/components/AgGrid/AgLeadExpireToggle.vue</affectedPath><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>c83fc53be899ebea1a71e35b67602349373e9463</commitId><timestamp>1793631086000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-11-02 15:51:26 +0100</date><id>c83fc53be899ebea1a71e35b67602349373e9463</id><msg>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</msg><path><editType>edit</editType><file>app/components/AgGrid/AgLeadExpireToggle.vue</file></path><path><editType>add</editType><file>app/components/leads/CloseLeadModal.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/leads/crm-qualification.md</affectedPath><commitId>f0ce63aca1642654bcefe3180aa896635c2592c8</commitId><timestamp>1793631093000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Recipe: leads list close-lead modal
</comment><date>2026-11-02 15:51:33 +0100</date><id>f0ce63aca1642654bcefe3180aa896635c2592c8</id><msg>Recipe: leads list close-lead modal</msg><path><editType>edit</editType><file>.claude/rules/leads/crm-qualification.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>package-lock.json</affectedPath><affectedPath>app/composables/states.ts</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core.js</affectedPath><affectedPath>app/components/BarcodeScanner.vue</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Core.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.worker.js</affectedPath><affectedPath>app/pages/mobile/picklist.vue</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd.wasm</affectedPath><affectedPath>app/composables/useBarcodeScanner.js</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>public/scanbot/ScanbotSDK.ui2.min.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.wasm</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.worker.js</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.worker.js</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.wasm</affectedPath><affectedPath>public/scanbot/ScanbotSDK.min.js</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Core-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Core.js</affectedPath><affectedPath>public/scanbot/ScanbotSDK.ui2.min.js.LICENSE.txt</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm.wasm</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm.wasm</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd.wasm</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.js</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.wasm</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm.wasm</affectedPath><affectedPath>package.json</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Core-simd.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd.wasm</affectedPath><commitId>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</commitId><timestamp>1793658994000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Replace mobile barcode scanner with Scanbot SDK
</comment><date>2026-11-02 23:36:34 +0100</date><id>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</id><msg>Replace mobile barcode scanner with Scanbot SDK</msg><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm.wasm</file></path><path><editType>add</editType><file>public/scanbot/ScanbotSDK.ui2.min.js.LICENSE.txt</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.worker.js</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.wasm</file></path><path><editType>edit</editType><file>app/components/BarcodeScanner.vue</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Core.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm.wasm</file></path><path><editType>add</editType><file>public/scanbot/ScanbotSDK.min.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd.js</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core.js</file></path><path><editType>edit</editType><file>app/composables/useBarcodeScanner.js</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.worker.js</file></path><path><editType>edit</editType><file>app/composables/states.ts</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Core-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Core-simd.js</file></path><path><editType>edit</editType><file>package-lock.json</file></path><path><editType>edit</editType><file>package.json</file></path><path><editType>add</editType><file>public/scanbot/ScanbotSDK.ui2.min.js</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/picklist.vue</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.worker.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Core.js</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>786</buildNumber><marked><SHA1>df668409fbd9c6d6e6c5a61351826a7a35221b29</SHA1><branch><SHA1>df668409fbd9c6d6e6c5a61351826a7a35221b29</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>df668409fbd9c6d6e6c5a61351826a7a35221b29</SHA1><branch><SHA1>df668409fbd9c6d6e6c5a61351826a7a35221b29</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>df668409fbd9c6d6e6c5a61351826a7a35221b29</SHA1><branch><SHA1>df668409fbd9c6d6e6c5a61351826a7a35221b29</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'></action><building>false</building><displayName>#786</displayName><duration>53739</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #786</fullDisplayName><id>786</id><inProgress>false</inProgress><keepLog>false</keepLog><number>786</number><queueId>5957</queueId><result>SUCCESS</result><timestamp>1793581200165</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/786/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>785</buildNumber><marked><SHA1>df668409fbd9c6d6e6c5a61351826a7a35221b29</SHA1><branch><SHA1>df668409fbd9c6d6e6c5a61351826a7a35221b29</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>df668409fbd9c6d6e6c5a61351826a7a35221b29</SHA1><branch><SHA1>df668409fbd9c6d6e6c5a61351826a7a35221b29</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>df668409fbd9c6d6e6c5a61351826a7a35221b29</SHA1><branch><SHA1>df668409fbd9c6d6e6c5a61351826a7a35221b29</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'></action><building>false</building><displayName>#785</displayName><duration>66022</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #785</fullDisplayName><id>785</id><inProgress>false</inProgress><keepLog>false</keepLog><number>785</number><queueId>5956</queueId><result>SUCCESS</result><timestamp>1793494800165</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/785/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/printAgentAuth.ts</affectedPath><affectedPath>app/components/settings/PrintAgentsCard.vue</affectedPath><commitId>b759b9724661d951814bb78110b3b95b2379b9ff</commitId><timestamp>1793446628000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Print-Agents: lenient session parsing (client id from cookie digits or JWT claims — 'no client in session' blocked the card in the browser); agent rows expanded by default with queue names in the list
</comment><date>2026-10-31 12:37:08 +0100</date><id>b759b9724661d951814bb78110b3b95b2379b9ff</id><msg>Print-Agents: lenient session parsing (client id from cookie digits or JWT claims — 'no client in session' blocked the card in the browser); agent rows expanded by default with queue names in the list</msg><path><editType>edit</editType><file>app/components/settings/PrintAgentsCard.vue</file></path><path><editType>edit</editType><file>server/utils/printAgentAuth.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/printSpoolDb.ts</affectedPath><affectedPath>server/api/settings/print-agents/[id]/cups/[...path].ts</affectedPath><affectedPath>server/api/settings/print-agents/[id]/commands.get.ts</affectedPath><affectedPath>app/components/settings/PrintAgentsCard.vue</affectedPath><affectedPath>server/plugins/print-spool-maintenance.ts</affectedPath><commitId>41d5cb536c1f0e3045156f101f4f0c7c3ca0d9d0</commitId><timestamp>1793447024000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Print-Agents: CUPS web UI of a remote box inside LogShip — HTTP relay over the agent command channel (/api/settings/print-agents/:id/cups/*, links/cookies rewritten, admin login stays on the box), 'CUPS-Oberfläche' button; relay results purged after 10 min
</comment><date>2026-10-31 12:43:44 +0100</date><id>41d5cb536c1f0e3045156f101f4f0c7c3ca0d9d0</id><msg>Print-Agents: CUPS web UI of a remote box inside LogShip — HTTP relay over the agent command channel (/api/settings/print-agents/:id/cups/*, links/cookies rewritten, admin login stays on the box), 'CUPS-Oberfläche' button; relay results purged after 10 min</msg><path><editType>edit</editType><file>server/utils/printSpoolDb.ts</file></path><path><editType>edit</editType><file>server/plugins/print-spool-maintenance.ts</file></path><path><editType>add</editType><file>server/api/settings/print-agents/[id]/cups/[...path].ts</file></path><path><editType>edit</editType><file>server/api/settings/print-agents/[id]/commands.get.ts</file></path><path><editType>edit</editType><file>app/components/settings/PrintAgentsCard.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/settings/print-agents/[id].put.ts</affectedPath><affectedPath>server/api/settings/print-agents/index.get.ts</affectedPath><affectedPath>server/utils/printSpoolDb.ts</affectedPath><affectedPath>server/api/settings/print-agents/[id]/cups/[...path].ts</affectedPath><affectedPath>server/api/settings/print-agents/[id]/command.post.ts</affectedPath><affectedPath>app/components/settings/PrintAgentsCard.vue</affectedPath><commitId>13228618bb62be06acfa136cb068a4a02b6975d3</commitId><timestamp>1793447159000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Print-Agents: per-box remote-access switches (CUPS web relay / support shell tunnel), on by default, enforced in relay route, command and support endpoints; toggles in the card
</comment><date>2026-10-31 12:45:59 +0100</date><id>13228618bb62be06acfa136cb068a4a02b6975d3</id><msg>Print-Agents: per-box remote-access switches (CUPS web relay / support shell tunnel), on by default, enforced in relay route, command and support endpoints; toggles in the card</msg><path><editType>edit</editType><file>server/api/settings/print-agents/[id].put.ts</file></path><path><editType>edit</editType><file>server/api/settings/print-agents/[id]/command.post.ts</file></path><path><editType>edit</editType><file>server/utils/printSpoolDb.ts</file></path><path><editType>edit</editType><file>app/components/settings/PrintAgentsCard.vue</file></path><path><editType>edit</editType><file>server/api/settings/print-agents/index.get.ts</file></path><path><editType>edit</editType><file>server/api/settings/print-agents/[id]/cups/[...path].ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/settings/PrintAgentsCard.vue</affectedPath><commitId>c59b6b5c9a0077270b7836d84fa62cd016a8627f</commitId><timestamp>1793447593000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Print-Agents: CUPS web UI of the box opens in a modal inside LogShip (iframe on the same-origin relay route), reload + open-in-tab
</comment><date>2026-10-31 12:53:13 +0100</date><id>c59b6b5c9a0077270b7836d84fa62cd016a8627f</id><msg>Print-Agents: CUPS web UI of the box opens in a modal inside LogShip (iframe on the same-origin relay route), reload + open-in-tab</msg><path><editType>edit</editType><file>app/components/settings/PrintAgentsCard.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/settings/PrintAgentsCard.vue</affectedPath><commitId>4a71d87bccdfba06ed316e0a7ab13f18dabae95a</commitId><timestamp>1793447901000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Print-Agents: organisation per box (column, filter, org picker in the enrolment dialog, org prefilled when creating a printer from a discovered queue) — one box per merchant/site
</comment><date>2026-10-31 12:58:21 +0100</date><id>4a71d87bccdfba06ed316e0a7ab13f18dabae95a</id><msg>Print-Agents: organisation per box (column, filter, org picker in the enrolment dialog, org prefilled when creating a printer from a discovered queue) — one box per merchant/site</msg><path><editType>edit</editType><file>app/components/settings/PrintAgentsCard.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/settings/PrintAgentsCard.vue</affectedPath><commitId>1b96b2c25f7d284005254e4d692d15a8f6223f42</commitId><timestamp>1793447916000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Print-Agents card: org lookup without top-level await
</comment><date>2026-10-31 12:58:36 +0100</date><id>1b96b2c25f7d284005254e4d692d15a8f6223f42</id><msg>Print-Agents card: org lookup without top-level await</msg><path><editType>edit</editType><file>app/components/settings/PrintAgentsCard.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/settings/PrintServerEnrolModal.vue</affectedPath><affectedPath>app/composables/usePrintAgents.ts</affectedPath><affectedPath>app/pages/settings/printers/create.vue</affectedPath><affectedPath>app/components/settings/PrintJobsPanel.vue</affectedPath><affectedPath>app/components/settings/PrintServerCupsModal.vue</affectedPath><affectedPath>.claude/rules/printing/print-agent.md</affectedPath><affectedPath>app/components/settings/PrintServerSetupModal.vue</affectedPath><affectedPath>app/components/settings/PrintServerCard.vue</affectedPath><affectedPath>app/components/settings/PrintAgentsCard.vue</affectedPath><affectedPath>app/pages/settings/printers/index.vue</affectedPath><commitId>adbba97c50cd5c2c16692fed852fc4ce716fe349</commitId><timestamp>1793448495000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Settings → Drucker &amp; Druckserver: page restructured on Nuxt UI — hero with stats, tabs Drucker / Druckserver / Druckaufträge, one card per print server (status, KPIs, queues ↔ LogShip printers, remote-access switches, actions), enrol / printer-setup / CUPS / commands as modals, shared usePrintAgents() composable; old all-in-one PrintAgentsCard removed
</comment><date>2026-10-31 13:08:15 +0100</date><id>adbba97c50cd5c2c16692fed852fc4ce716fe349</id><msg>Settings → Drucker &amp; Druckserver: page restructured on Nuxt UI — hero with stats, tabs Drucker / Druckserver / Druckaufträge, one card per print server (status, KPIs, queues ↔ LogShip printers, remote-access switches, actions), enrol / printer-setup / CUPS / commands as modals, shared usePrintAgents() composable; old all-in-one PrintAgentsCard removed</msg><path><editType>add</editType><file>app/components/settings/PrintJobsPanel.vue</file></path><path><editType>edit</editType><file>.claude/rules/printing/print-agent.md</file></path><path><editType>add</editType><file>app/components/settings/PrintServerSetupModal.vue</file></path><path><editType>edit</editType><file>app/pages/settings/printers/index.vue</file></path><path><editType>add</editType><file>app/components/settings/PrintServerCard.vue</file></path><path><editType>edit</editType><file>app/pages/settings/printers/create.vue</file></path><path><editType>delete</editType><file>app/components/settings/PrintAgentsCard.vue</file></path><path><editType>add</editType><file>app/components/settings/PrintServerEnrolModal.vue</file></path><path><editType>add</editType><file>app/composables/usePrintAgents.ts</file></path><path><editType>add</editType><file>app/components/settings/PrintServerCupsModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/printing/print-agent.md</affectedPath><commitId>4a1c60d897bcbb2c0dbe480567faf0eb1507fd83</commitId><timestamp>1793450451000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>recipe: print-agent box setup via install/install.sh
</comment><date>2026-10-31 13:40:51 +0100</date><id>4a1c60d897bcbb2c0dbe480567faf0eb1507fd83</id><msg>recipe: print-agent box setup via install/install.sh</msg><path><editType>edit</editType><file>.claude/rules/printing/print-agent.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/settings/commission-tables/store.post.ts</affectedPath><affectedPath>server/api/materials/warehouse-layouts/meta/capabilities.get.ts</affectedPath><affectedPath>app/components/settings/CommissionTableForm.vue</affectedPath><affectedPath>server/api/materials/warehouse-layouts/[id]/apply.post.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/modals/SyncModal.vue</affectedPath><affectedPath>app/components/NewNavBar.vue</affectedPath><affectedPath>server/api/materials/warehouse-layouts/[id].put.ts</affectedPath><affectedPath>app/utils/warehouseLayout/geometry.ts</affectedPath><affectedPath>app/utils/warehouseLayout/wiring.ts</affectedPath><affectedPath>server/api/materials/warehouse-layouts/[id]/summary.get.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/PrintSheet.vue</affectedPath><affectedPath>server/utils/pLimit.ts</affectedPath><affectedPath>app/pages/materials/locators/index.vue</affectedPath><affectedPath>app/composables/useWarehouseLayout.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/modals/GenerateModal.vue</affectedPath><affectedPath>server/utils/withIdempiere.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/modals/WallsByLengthModal.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/LocatorsGrid.vue</affectedPath><affectedPath>server/api/materials/warehouse-layouts/by-warehouse/[warehouseId]/locators.get.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/modals/LayoutsModal.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/modals/WiringModal.vue</affectedPath><affectedPath>server/api/settings/commission-tables/update.put.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/Inspector.vue</affectedPath><affectedPath>app/pages/settings/commission-tables/[id]/edit.vue</affectedPath><affectedPath>app/composables/menu/admin/materials.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/modals/ApplyModal.vue</affectedPath><affectedPath>reference/test-scripts/warehouse-layout-smoke.mts</affectedPath><affectedPath>app/components/materials/WarehouseVisualization3D.vue</affectedPath><affectedPath>server/api/materials/warehouse-layouts/index.post.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/View3D.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/LayoutSvg.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/Palette.vue</affectedPath><affectedPath>app/utils/warehouseLayout/schema.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/CapabilitiesBanner.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/Stage.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/LocatorDock.vue</affectedPath><affectedPath>server/api/materials/warehouse-layouts/by-warehouse/[warehouseId]/index.get.ts</affectedPath><affectedPath>app/utils/warehouseLayout/pick.ts</affectedPath><affectedPath>server/api/materials/warehouse-layouts/[id].delete.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/MetricsCard.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/modals/ImportWizardModal.vue</affectedPath><affectedPath>server/utils/locatorBulk.ts</affectedPath><affectedPath>server/api/materials/warehouse-layouts/[id].get.ts</affectedPath><affectedPath>server/api/materials/locators/generate.post.ts</affectedPath><affectedPath>.claude/rules/materials/warehouse-builder.md</affectedPath><affectedPath>app/pages/settings/commission-tables/create.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/ObjectGlyph.vue</affectedPath><affectedPath>app/pages/materials/warehouse-builder/index.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/ShelfWiringFields.vue</affectedPath><affectedPath>server/api/materials/locators/bulk-create.post.ts</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><affectedPath>server/utils/warehouseLayout.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/Toolbar.vue</affectedPath><commitId>c3194a48e654a73cff87242658d880e3c24616a0</commitId><timestamp>1793472016000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Warehouse Builder: 2D top-down floor plan editor replaces the Locator Manager

- /materials/warehouse-builder (old /materials/locators redirects): SVG plan per warehouse + floor
  (1 m grid, 0.5 m snap) with walls / room / obstacles, zones, shelves, pallet places, doors,
  commission tables, walkways, labels; undo/redo, marquee, rotate, snap, zoom at cursor,
  space/middle pan, floating view controls, keyboard shortcuts, browser draft, live metrics card,
  "Grundriss nach Maßen" (walls by length), print popup (A3/A4) + PNG export, 3D tab read-only
- Shelf bays × levels wired to M_Locator codes (X-Y-Z) with live statuses; create missing in bulk;
  import wizard from existing locators; Sync + Auto-Generate modals ported to Nuxt UI
- Storage: CUST_WarehouseLayout (LayoutJSON, LayoutVersion optimistic lock, AppliedVersion);
  Apply writes LayoutPosX/Y, LayoutSide, PickSeqNo (serpentine), LayoutZone, LayoutObjectKey,
  CUST_WarehouseLayout_ID onto M_Locator (chunked, diffed, dry-run first)
- Server: warehouse-layouts routes (floors, locators paged + column fallback, capabilities probe,
  CRUD, summary, apply), locators/bulk-create + shared locatorBulk util (generate.post.ts uses it),
  pLimit, withIdempiere wrapper
- Commission tables: optional M_Warehouse_ID (form field, routes, palette filter, assign button)
- 3D view: positions/grid/readonly props fed from the plan
- Recipe .claude/rules/materials/warehouse-builder.md, smoke script reference/test-scripts/warehouse-layout-smoke.mts
</comment><date>2026-10-31 19:40:16 +0100</date><id>c3194a48e654a73cff87242658d880e3c24616a0</id><msg>Warehouse Builder: 2D top-down floor plan editor replaces the Locator Manager</msg><path><editType>add</editType><file>server/api/materials/locators/bulk-create.post.ts</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/CapabilitiesBanner.vue</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/LayoutSvg.vue</file></path><path><editType>add</editType><file>server/utils/withIdempiere.ts</file></path><path><editType>add</editType><file>server/api/materials/warehouse-layouts/[id].put.ts</file></path><path><editType>add</editType><file>server/api/materials/warehouse-layouts/[id]/summary.get.ts</file></path><path><editType>add</editType><file>server/api/materials/warehouse-layouts/[id]/apply.post.ts</file></path><path><editType>add</editType><file>server/api/materials/warehouse-layouts/index.post.ts</file></path><path><editType>add</editType><file>server/api/materials/warehouse-layouts/by-warehouse/[warehouseId]/locators.get.ts</file></path><path><editType>edit</editType><file>app/composables/menu/admin/materials.ts</file></path><path><editType>edit</editType><file>app/components/NewNavBar.vue</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/modals/ApplyModal.vue</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/ShelfWiringFields.vue</file></path><path><editType>add</editType><file>app/composables/useWarehouseLayout.ts</file></path><path><editType>add</editType><file>reference/test-scripts/warehouse-layout-smoke.mts</file></path><path><editType>add</editType><file>server/api/materials/warehouse-layouts/[id].get.ts</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/ObjectGlyph.vue</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/modals/SyncModal.vue</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/MetricsCard.vue</file></path><path><editType>add</editType><file>app/utils/warehouseLayout/geometry.ts</file></path><path><editType>add</editType><file>server/utils/warehouseLayout.ts</file></path><path><editType>add</editType><file>server/utils/locatorBulk.ts</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/Toolbar.vue</file></path><path><editType>edit</editType><file>server/api/settings/commission-tables/update.put.ts</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/LocatorsGrid.vue</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/Stage.vue</file></path><path><editType>add</editType><file>.claude/rules/materials/warehouse-builder.md</file></path><path><editType>edit</editType><file>app/components/materials/WarehouseVisualization3D.vue</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/modals/WiringModal.vue</file></path><path><editType>edit</editType><file>server/api/materials/locators/generate.post.ts</file></path><path><editType>edit</editType><file>app/pages/settings/commission-tables/create.vue</file></path><path><editType>add</editType><file>server/utils/pLimit.ts</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/Palette.vue</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/PrintSheet.vue</file></path><path><editType>edit</editType><file>app/pages/settings/commission-tables/[id]/edit.vue</file></path><path><editType>add</editType><file>app/utils/warehouseLayout/wiring.ts</file></path><path><editType>add</editType><file>server/api/materials/warehouse-layouts/by-warehouse/[warehouseId]/index.get.ts</file></path><path><editType>add</editType><file>server/api/materials/warehouse-layouts/[id].delete.ts</file></path><path><editType>add</editType><file>app/pages/materials/warehouse-builder/index.vue</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/LocatorDock.vue</file></path><path><editType>add</editType><file>server/api/materials/warehouse-layouts/meta/capabilities.get.ts</file></path><path><editType>edit</editType><file>server/api/settings/commission-tables/store.post.ts</file></path><path><editType>add</editType><file>app/utils/warehouseLayout/schema.ts</file></path><path><editType>add</editType><file>app/utils/warehouseLayout/pick.ts</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/modals/ImportWizardModal.vue</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/modals/WallsByLengthModal.vue</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/Inspector.vue</file></path><path><editType>edit</editType><file>app/components/settings/CommissionTableForm.vue</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/modals/GenerateModal.vue</file></path><path><editType>edit</editType><file>app/pages/materials/locators/index.vue</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/modals/LayoutsModal.vue</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/View3D.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/materials/warehouse-builder/index.vue</affectedPath><commitId>8fe356dee13e5a6dc52c3bb821bf5ec61656a1e6</commitId><timestamp>1793472367000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Warehouse Builder: import useWarehouseLayout explicitly (SSR 500 'useWarehouseLayout is not defined' when the auto-import registry is stale)
</comment><date>2026-10-31 19:46:07 +0100</date><id>8fe356dee13e5a6dc52c3bb821bf5ec61656a1e6</id><msg>Warehouse Builder: import useWarehouseLayout explicitly (SSR 500 'useWarehouseLayout is not defined' when the auto-import registry is stale)</msg><path><editType>edit</editType><file>app/pages/materials/warehouse-builder/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/flyerTexts.ts</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><commitId>8ea976720002cb83c62d22a91ebe3299ff7a89af</commitId><timestamp>1793473134000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Offer texts: FIFO → 'FIFO oder FEFO' in quote plan features and flyer (DE/EN)
</comment><date>2026-10-31 19:58:54 +0100</date><id>8ea976720002cb83c62d22a91ebe3299ff7a89af</id><msg>Offer texts: FIFO → 'FIFO oder FEFO' in quote plan features and flyer (DE/EN)</msg><path><editType>edit</editType><file>server/utils/offers/flyerTexts.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/warehouse-builder/LayoutSvg.vue</affectedPath><affectedPath>app/composables/useWarehouseLayout.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/Palette.vue</affectedPath><affectedPath>app/utils/warehouseLayout/schema.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/MetricsCard.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/Stage.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/Toolbar.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/PrintSheet.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/Inspector.vue</affectedPath><commitId>a5c818f6cc1eb569512e0668e7bab4db67959c0d</commitId><timestamp>1793474944000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Warehouse Builder: walkways as drawn lanes (polyline + width), drag-to-size doors and office/machine areas, metre rulers outside the grid, +5/−5 m grid chips, ruler toggle, commission-table warehouse column (form, routes, palette filter, assign button), narrower properties column, floating draft chip, LocatorsGrid blanks for cleared sentinels
</comment><date>2026-10-31 20:29:04 +0100</date><id>a5c818f6cc1eb569512e0668e7bab4db67959c0d</id><msg>Warehouse Builder: walkways as drawn lanes (polyline + width), drag-to-size doors and office/machine areas, metre rulers outside the grid, +5/−5 m grid chips, ruler toggle, commission-table warehouse column (form, routes, palette filter, assign button), narrower properties column, floating draft chip, LocatorsGrid blanks for cleared sentinels</msg><path><editType>edit</editType><file>app/components/materials/warehouse-builder/PrintSheet.vue</file></path><path><editType>edit</editType><file>app/utils/warehouseLayout/schema.ts</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/LayoutSvg.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/MetricsCard.vue</file></path><path><editType>edit</editType><file>app/composables/useWarehouseLayout.ts</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Inspector.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Palette.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Toolbar.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Stage.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/materials/warehouse-builder.md</affectedPath><commitId>1970aa619ff280576121e872df581155ffc1c43d</commitId><timestamp>1793474979000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>recipe: warehouse builder walkway lanes, draw bricks, rulers, grid chips, HMR gotcha
</comment><date>2026-10-31 20:29:39 +0100</date><id>1970aa619ff280576121e872df581155ffc1c43d</id><msg>recipe: warehouse builder walkway lanes, draw bricks, rulers, grid chips, HMR gotcha</msg><path><editType>edit</editType><file>.claude/rules/materials/warehouse-builder.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/warehouse-builder/Render3D.vue</affectedPath><affectedPath>app/pages/materials/warehouse-builder/index.vue</affectedPath><affectedPath>.claude/rules/materials/warehouse-builder.md</affectedPath><commitId>fa33aa39b0d2f2e61fc34789677224c77df1e491</commitId><timestamp>1793475212000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Warehouse Builder: Rendering tab — three.js scene built from the plan (floor, walls, racks with levels and cartons on wired bays, pallets, doors, tables, obstacles, zones, walkways, labels), orbit camera with presets and toggles
</comment><date>2026-10-31 20:33:32 +0100</date><id>fa33aa39b0d2f2e61fc34789677224c77df1e491</id><msg>Warehouse Builder: Rendering tab — three.js scene built from the plan (floor, walls, racks with levels and cartons on wired bays, pallets, doors, tables, obstacles, zones, walkways, labels), orbit camera with presets and toggles</msg><path><editType>edit</editType><file>.claude/rules/materials/warehouse-builder.md</file></path><path><editType>add</editType><file>app/components/materials/warehouse-builder/Render3D.vue</file></path><path><editType>edit</editType><file>app/pages/materials/warehouse-builder/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/materials/warehouse-layouts/meta/img.get.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/Palette.vue</affectedPath><affectedPath>app/composables/useWarehouseLayout.ts</affectedPath><affectedPath>app/utils/warehouseLayout/schema.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/ObjectGlyph.vue</affectedPath><affectedPath>app/pages/materials/warehouse-builder/index.vue</affectedPath><affectedPath>server/api/materials/warehouse-layouts/meta/stock-by-locators.post.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/Render3D.vue</affectedPath><affectedPath>.claude/rules/materials/warehouse-builder.md</affectedPath><affectedPath>app/components/materials/warehouse-builder/Inspector.vue</affectedPath><commitId>454170532af280fcaa37b32c17f6ecd577c9eb57</commitId><timestamp>1793475970000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Warehouse Builder: walk-through mode (first person, WASD + drag/pointer-lock look, collision, doors as passages), article thumbnails in camera range (stock-by-locators route, Strapi image relay, SKU plates as fallback), pedestrian door kind with swing arc, gate orientation switch, collapsible side panels with rails
</comment><date>2026-10-31 20:46:10 +0100</date><id>454170532af280fcaa37b32c17f6ecd577c9eb57</id><msg>Warehouse Builder: walk-through mode (first person, WASD + drag/pointer-lock look, collision, doors as passages), article thumbnails in camera range (stock-by-locators route, Strapi image relay, SKU plates as fallback), pedestrian door kind with swing arc, gate orientation switch, collapsible side panels with rails</msg><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Palette.vue</file></path><path><editType>edit</editType><file>.claude/rules/materials/warehouse-builder.md</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/ObjectGlyph.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Render3D.vue</file></path><path><editType>edit</editType><file>app/pages/materials/warehouse-builder/index.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Inspector.vue</file></path><path><editType>edit</editType><file>app/composables/useWarehouseLayout.ts</file></path><path><editType>edit</editType><file>app/utils/warehouseLayout/schema.ts</file></path><path><editType>add</editType><file>server/api/materials/warehouse-layouts/meta/stock-by-locators.post.ts</file></path><path><editType>add</editType><file>server/api/materials/warehouse-layouts/meta/img.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/useWarehouseLayout.ts</affectedPath><affectedPath>.env</affectedPath><affectedPath>app/components/materials/warehouse-builder/modals/ApplyModal.vue</affectedPath><affectedPath>server/api/materials/warehouse-layouts/[id]/apply.post.ts</affectedPath><affectedPath>.claude/rules/materials/warehouse-builder.md</affectedPath><affectedPath>.env-dev</affectedPath><affectedPath>app/utils/warehouseLayout/schema.ts</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>server/api/materials/warehouse-layouts/meta/stock-by-locators.post.ts</affectedPath><affectedPath>server/utils/warehouseLayout.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/Render3D.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/Inspector.vue</affectedPath><affectedPath>.env-prod</affectedPath><commitId>689e328a6663877641f84814d54d9a39707b78fa</commitId><timestamp>1793476417000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Warehouse Builder: shared-hall scope — WAREHOUSE_LAYOUT_SHARED instance flag + per-plan option; Apply mirrors values to equal locator codes in all warehouses and clears via the layout FK; stock lookups merge all orgs' stock per bin
</comment><date>2026-10-31 20:53:37 +0100</date><id>689e328a6663877641f84814d54d9a39707b78fa</id><msg>Warehouse Builder: shared-hall scope — WAREHOUSE_LAYOUT_SHARED instance flag + per-plan option; Apply mirrors values to equal locator codes in all warehouses and clears via the layout FK; stock lookups merge all orgs' stock per bin</msg><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Inspector.vue</file></path><path><editType>edit</editType><file>.env-dev</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Render3D.vue</file></path><path><editType>edit</editType><file>server/api/materials/warehouse-layouts/[id]/apply.post.ts</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/modals/ApplyModal.vue</file></path><path><editType>edit</editType><file>.claude/rules/materials/warehouse-builder.md</file></path><path><editType>edit</editType><file>.env</file></path><path><editType>edit</editType><file>app/utils/warehouseLayout/schema.ts</file></path><path><editType>edit</editType><file>server/utils/warehouseLayout.ts</file></path><path><editType>edit</editType><file>server/api/materials/warehouse-layouts/meta/stock-by-locators.post.ts</file></path><path><editType>edit</editType><file>app/composables/useWarehouseLayout.ts</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>.env-prod</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/materials/warehouse-builder/index.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/Inspector.vue</affectedPath><commitId>eaa7698c20d437270d9be236c17f25913d2ef487</commitId><timestamp>1793476515000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Warehouse Builder: scope checkbox layout
</comment><date>2026-10-31 20:55:15 +0100</date><id>eaa7698c20d437270d9be236c17f25913d2ef487</id><msg>Warehouse Builder: scope checkbox layout</msg><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Inspector.vue</file></path><path><editType>edit</editType><file>app/pages/materials/warehouse-builder/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/useWarehouseLayout.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/modals/ApplyModal.vue</affectedPath><affectedPath>app/utils/warehouseLayout/schema.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/Render3D.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/Inspector.vue</affectedPath><commitId>d2ddeb4d6698e6472c911e6e019545d205f529fc</commitId><timestamp>1793476656000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Warehouse Builder: plans without an explicit scope follow WAREHOUSE_LAYOUT_SHARED (existing LogYou plan shows all orgs' articles)
</comment><date>2026-10-31 20:57:36 +0100</date><id>d2ddeb4d6698e6472c911e6e019545d205f529fc</id><msg>Warehouse Builder: plans without an explicit scope follow WAREHOUSE_LAYOUT_SHARED (existing LogYou plan shows all orgs' articles)</msg><path><editType>edit</editType><file>app/composables/useWarehouseLayout.ts</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Inspector.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/modals/ApplyModal.vue</file></path><path><editType>edit</editType><file>app/utils/warehouseLayout/schema.ts</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Render3D.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/warehouse-builder/Render3D.vue</affectedPath><affectedPath>server/api/materials/warehouse-layouts/meta/stock-by-locators.post.ts</affectedPath><commitId>2503dfeba6ccbab680f5bae9bedb86f85b82b44d</commitId><timestamp>1793476781000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Warehouse Builder: mirror lookup with original code spelling (case-sensitive Value), reload stock when images are re-enabled or the scope changes
</comment><date>2026-10-31 20:59:41 +0100</date><id>2503dfeba6ccbab680f5bae9bedb86f85b82b44d</id><msg>Warehouse Builder: mirror lookup with original code spelling (case-sensitive Value), reload stock when images are re-enabled or the scope changes</msg><path><editType>edit</editType><file>server/api/materials/warehouse-layouts/meta/stock-by-locators.post.ts</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Render3D.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/warehouse-builder/Render3D.vue</affectedPath><commitId>97d1d5d9454199cce9a9cb4a1c8121a1ba75579a</commitId><timestamp>1793477065000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Warehouse Builder: article plates on both faces of a bay (visible from either aisle)
</comment><date>2026-10-31 21:04:25 +0100</date><id>97d1d5d9454199cce9a9cb4a1c8121a1ba75579a</id><msg>Warehouse Builder: article plates on both faces of a bay (visible from either aisle)</msg><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Render3D.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/warehouse-builder/Palette.vue</affectedPath><affectedPath>app/utils/warehouseLayout/schema.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/Render3D.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/ObjectGlyph.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/ShelfWiringFields.vue</affectedPath><affectedPath>.claude/rules/materials/warehouse-builder.md</affectedPath><commitId>ca533769d113880f840adb1efa054465610b4fa3</commitId><timestamp>1793481773000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Warehouse Builder: pallet rack style (blue RAL 5010 frames with bracing, orange RAL 2004 beams, mesh decks, pallets + cartons per level, 2–n levels with level height), rack bricks 2.7/5.5 × 1.1 m, blue/orange plan glyph, type + level height in the inspector
</comment><date>2026-10-31 22:22:53 +0100</date><id>ca533769d113880f840adb1efa054465610b4fa3</id><msg>Warehouse Builder: pallet rack style (blue RAL 5010 frames with bracing, orange RAL 2004 beams, mesh decks, pallets + cartons per level, 2–n levels with level height), rack bricks 2.7/5.5 × 1.1 m, blue/orange plan glyph, type + level height in the inspector</msg><path><editType>edit</editType><file>.claude/rules/materials/warehouse-builder.md</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Render3D.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/ShelfWiringFields.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/ObjectGlyph.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Palette.vue</file></path><path><editType>edit</editType><file>app/utils/warehouseLayout/schema.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/warehouse-builder/Stage.vue</affectedPath><commitId>ae68a178cc8747e9460a78c431bfeb271ac67486</commitId><timestamp>1793482090000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Warehouse Builder: Esc always returns to the cursor tool (page-wide, clears drafts/ghost/selection)
</comment><date>2026-10-31 22:28:10 +0100</date><id>ae68a178cc8747e9460a78c431bfeb271ac67486</id><msg>Warehouse Builder: Esc always returns to the cursor tool (page-wide, clears drafts/ghost/selection)</msg><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Stage.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/warehouse-builder/PrintSheet.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/Render3D.vue</affectedPath><affectedPath>app/pages/materials/warehouse-builder/index.vue</affectedPath><affectedPath>.claude/rules/materials/warehouse-builder.md</affectedPath><affectedPath>app/components/materials/warehouse-builder/modals/PrintModal.vue</affectedPath><commitId>54db1df441f1656e8558e698be6b1c85c77b24b3</commitId><timestamp>1793482603000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Warehouse Builder: print dialog (paper, title, bay codes, legend, specification page with all metrics + rack list + zone table + note, rendered 3D views from selectable angles via headless Render3D snapshots), metre markers along the hall edges in the rendering
</comment><date>2026-10-31 22:36:43 +0100</date><id>54db1df441f1656e8558e698be6b1c85c77b24b3</id><msg>Warehouse Builder: print dialog (paper, title, bay codes, legend, specification page with all metrics + rack list + zone table + note, rendered 3D views from selectable angles via headless Render3D snapshots), metre markers along the hall edges in the rendering</msg><path><editType>add</editType><file>app/components/materials/warehouse-builder/modals/PrintModal.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Render3D.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/PrintSheet.vue</file></path><path><editType>edit</editType><file>.claude/rules/materials/warehouse-builder.md</file></path><path><editType>edit</editType><file>app/pages/materials/warehouse-builder/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/warehouse-builder/Render3D.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/PrintSheet.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/modals/PrintModal.vue</affectedPath><commitId>053e8e042f423487e6adf00a7ffb69d8b61b131e</commitId><timestamp>1793483868000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Warehouse Builder: print renderings fixed (nuxt-lazy-load rewrote the &lt;img src&gt; in the popup document to data-src), more camera angles (corners NO/NW/SO/SW, steep overview, eye level from south/north) in the Rendering tab and the print dialog with all/none toggle
</comment><date>2026-10-31 22:57:48 +0100</date><id>053e8e042f423487e6adf00a7ffb69d8b61b131e</id><msg>Warehouse Builder: print renderings fixed (nuxt-lazy-load rewrote the &lt;img src&gt; in the popup document to data-src), more camera angles (corners NO/NW/SO/SW, steep overview, eye level from south/north) in the Rendering tab and the print dialog with all/none toggle</msg><path><editType>edit</editType><file>app/components/materials/warehouse-builder/PrintSheet.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Render3D.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/modals/PrintModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/useWarehouseLayout.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/MetricsCard.vue</affectedPath><affectedPath>reference/test-scripts/warehouse-layout-smoke.mts</affectedPath><affectedPath>.claude/rules/materials/warehouse-builder.md</affectedPath><affectedPath>app/components/materials/warehouse-builder/LayoutSvg.vue</affectedPath><affectedPath>app/utils/warehouseLayout/geometry.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/Palette.vue</affectedPath><affectedPath>app/utils/warehouseLayout/schema.ts</affectedPath><affectedPath>app/components/materials/warehouse-builder/ObjectGlyph.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/modals/PrintModal.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/Stage.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/PrintSheet.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/Render3D.vue</affectedPath><affectedPath>app/components/materials/warehouse-builder/Inspector.vue</affectedPath><commitId>df668409fbd9c6d6e6c5a61351826a7a35221b29</commitId><timestamp>1793485420000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Warehouse Builder: magnetic snapping to walls/objects/zones while drawing, moving and resizing (guide lines, Alt disables); doors and gates dock into the nearest wall and cannot stand free; door hinge + opening direction; surveillance cameras with heading/FOV/range, ray-cast view cones (shadowed by walls, racks, obstacles) in plan, rendering and print (coverage page + camera table), coverage metrics; office areas separated from the warehouse area in metrics and print; offices see-through in the rendering
</comment><date>2026-10-31 23:23:40 +0100</date><id>df668409fbd9c6d6e6c5a61351826a7a35221b29</id><msg>Warehouse Builder: magnetic snapping to walls/objects/zones while drawing, moving and resizing (guide lines, Alt disables); doors and gates dock into the nearest wall and cannot stand free; door hinge + opening direction; surveillance cameras with heading/FOV/range, ray-cast view cones (shadowed by walls, racks, obstacles) in plan, rendering and print (coverage page + camera table), coverage metrics; office areas separated from the warehouse area in metrics and print; offices see-through in the rendering</msg><path><editType>edit</editType><file>.claude/rules/materials/warehouse-builder.md</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/LayoutSvg.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/PrintSheet.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/modals/PrintModal.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/MetricsCard.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Inspector.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Stage.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Render3D.vue</file></path><path><editType>edit</editType><file>app/composables/useWarehouseLayout.ts</file></path><path><editType>edit</editType><file>app/utils/warehouseLayout/schema.ts</file></path><path><editType>edit</editType><file>app/utils/warehouseLayout/geometry.ts</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/ObjectGlyph.vue</file></path><path><editType>edit</editType><file>app/components/materials/warehouse-builder/Palette.vue</file></path><path><editType>edit</editType><file>reference/test-scripts/warehouse-layout-smoke.mts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>784</buildNumber><marked><SHA1>8d0302a82681f4f1e8aa9238b31994d338bfd07d</SHA1><branch><SHA1>8d0302a82681f4f1e8aa9238b31994d338bfd07d</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>8d0302a82681f4f1e8aa9238b31994d338bfd07d</SHA1><branch><SHA1>8d0302a82681f4f1e8aa9238b31994d338bfd07d</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>8d0302a82681f4f1e8aa9238b31994d338bfd07d</SHA1><branch><SHA1>8d0302a82681f4f1e8aa9238b31994d338bfd07d</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'></action><building>false</building><displayName>#784</displayName><duration>65207</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #784</fullDisplayName><id>784</id><inProgress>false</inProgress><keepLog>false</keepLog><number>784</number><queueId>5936</queueId><result>SUCCESS</result><timestamp>1793408400166</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/784/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/settings/price-sheet/PriceSheetMatrix.vue</affectedPath><affectedPath>app/pages/settings/price-sheet/index.vue</affectedPath><affectedPath>app/components/settings/price-sheet/PriceSheetOptions.vue</affectedPath><affectedPath>app/components/settings/price-sheet/PriceSheetPreviewModal.vue</affectedPath><affectedPath>server/utils/shipping/priceSheet.ts</affectedPath><affectedPath>server/utils/shipping/carrierRates.ts</affectedPath><affectedPath>.claude/rules/fulfillment/carrier-rates.md</affectedPath><affectedPath>reference/shippingprices/dpd/DPD-DE G300.pdf</affectedPath><affectedPath>reference/shippingprices/dpd/MDB-Gesamt_V05 2026-04.pdf</affectedPath><affectedPath>server/assets/shipping/dpd-pricelist-2026-04.json</affectedPath><affectedPath>reference/test-scripts/dpd-pricelist-parse.mts</affectedPath><affectedPath>server/api/settings/shipping-carriers.get.ts</affectedPath><affectedPath>app/utils/shippingPriceSheet.ts</affectedPath><affectedPath>server/utils/shipping/carrierRateImport.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>fe1a084fad0a11016cbb3d0355ce69e4d7504eb0</commitId><timestamp>1793349206000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Carrier rates: DPD price lists imported (myDPD G300 + MDB 2026-04 → dpd-pricelist-2026-04.json, 1261 rows; Classic/Paketshop Europe per country, Express as zone rows + country→zone map); carrier identity from M_Shipper.M_ShipperCfg_ID (DHL / DPD groups, settings/shipping-carriers endpoint, price-sheet carrier select by config); resolver groups flat weight tiers per country and renders zone rows; markup defaults to 0 % (stored 15 % migrated once); matrix search filter now limits the PDF to the visible rows; price-sheet options panel rebuilt with Nuxt UI components
</comment><date>2026-10-30 09:33:26 +0100</date><id>fe1a084fad0a11016cbb3d0355ce69e4d7504eb0</id><msg>Carrier rates: DPD price lists imported (myDPD G300 + MDB 2026-04 → dpd-pricelist-2026-04.json, 1261 rows; Classic/Paketshop Europe per country, Express as zone rows + country→zone map); carrier identity from M_Shipper.M_ShipperCfg_ID (DHL / DPD groups, settings/shipping-carriers endpoint, price-sheet carrier select by config); resolver groups flat weight tiers per country and renders zone rows; markup defaults to 0 % (stored 15 % migrated once); matrix search filter now limits the PDF to the visible rows; price-sheet options panel rebuilt with Nuxt UI components</msg><path><editType>edit</editType><file>app/components/settings/price-sheet/PriceSheetOptions.vue</file></path><path><editType>add</editType><file>reference/shippingprices/dpd/DPD-DE G300.pdf</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/carrier-rates.md</file></path><path><editType>edit</editType><file>server/utils/shipping/priceSheet.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/api/settings/shipping-carriers.get.ts</file></path><path><editType>add</editType><file>reference/test-scripts/dpd-pricelist-parse.mts</file></path><path><editType>edit</editType><file>server/utils/shipping/carrierRates.ts</file></path><path><editType>edit</editType><file>app/components/settings/price-sheet/PriceSheetMatrix.vue</file></path><path><editType>edit</editType><file>app/utils/shippingPriceSheet.ts</file></path><path><editType>edit</editType><file>app/components/settings/price-sheet/PriceSheetPreviewModal.vue</file></path><path><editType>edit</editType><file>app/pages/settings/price-sheet/index.vue</file></path><path><editType>edit</editType><file>server/utils/shipping/carrierRateImport.ts</file></path><path><editType>add</editType><file>reference/shippingprices/dpd/MDB-Gesamt_V05 2026-04.pdf</file></path><path><editType>add</editType><file>server/assets/shipping/dpd-pricelist-2026-04.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/settings/price-sheet/PriceSheetMatrix.vue</affectedPath><affectedPath>server/utils/shipping/priceSheetPdf.ts</affectedPath><affectedPath>app/pages/settings/price-sheet/index.vue</affectedPath><affectedPath>.claude/rules/nuxt/ui-components.md</affectedPath><affectedPath>app/components/settings/price-sheet/PriceSheetCellEditor.vue</affectedPath><affectedPath>app/composables/useOfferSoftwareQuote.ts</affectedPath><affectedPath>app/components/settings/price-sheet/PriceSheetOptions.vue</affectedPath><affectedPath>app/components/settings/price-sheet/PriceSheetPreviewModal.vue</affectedPath><affectedPath>server/api/offers/quote/preview.post.ts</affectedPath><affectedPath>server/api/settings/price-sheet/resolve.post.ts</affectedPath><affectedPath>server/utils/offers/onboardingPdf.ts</affectedPath><affectedPath>.claude/rules/fulfillment/carrier-rates.md</affectedPath><affectedPath>.claude/rules/offers/software-quote.md</affectedPath><affectedPath>server/utils/offers/softwareQuotePdf.ts</affectedPath><affectedPath>server/api/offers/quote/send.post.ts</affectedPath><affectedPath>app/utils/shippingPriceSheet.ts</affectedPath><affectedPath>app/components/offers/SoftwareQuoteModal.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>e3f2b4de3992d637c6f6bfc61677ee676594a448</commitId><timestamp>1793351404000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Software offer: "Anlage Onboarding-Paket" as a separate PDF attached by default (onboardingPdf.ts: from-price, travel + hotel billed on top, not-included list, phases, editable setup scope: on-site process analysis, bins, article import, channels, carriers, label + document printers, scanners/devices, users, test run); portal document + mail/Strapi attachment + activity line, preview via document:'onboarding', attachments.onboarding persisted in the saved conditions. Price sheet: carrier select = configs only (DHL/DPD with logos, no attached shippers), multi-select carriers (shipperIds → one sheet per carrier merged by mergePriceSheets, carrier badges, PDF carrier prefixes, Tier writes under the row's carrier), row/section/surcharge checkboxes with "Alle abwählen" limiting the PDF export, markup 0 % default enforced (old 15 % pattern dropped on load); options panel rebuilt with Nuxt UI (UFieldGroup, USwitch/UCheckbox/URadio/UInputNumber gap fixes); recipes updated
</comment><date>2026-10-30 10:10:04 +0100</date><id>e3f2b4de3992d637c6f6bfc61677ee676594a448</id><msg>Software offer: "Anlage Onboarding-Paket" as a separate PDF attached by default (onboardingPdf.ts: from-price, travel + hotel billed on top, not-included list, phases, editable setup scope: on-site process analysis, bins, article import, channels, carriers, label + document printers, scanners/devices, users, test run); portal document + mail/Strapi attachment + activity line, preview via document:'onboarding', attachments.onboarding persisted in the saved conditions. Price sheet: carrier select = configs only (DHL/DPD with logos, no attached shippers), multi-select carriers (shipperIds → one sheet per carrier merged by mergePriceSheets, carrier badges, PDF carrier prefixes, Tier writes under the row's carrier), row/section/surcharge checkboxes with "Alle abwählen" limiting the PDF export, markup 0 % default enforced (old 15 % pattern dropped on load); options panel rebuilt with Nuxt UI (UFieldGroup, USwitch/UCheckbox/URadio/UInputNumber gap fixes); recipes updated</msg><path><editType>edit</editType><file>.claude/rules/fulfillment/carrier-rates.md</file></path><path><editType>edit</editType><file>app/composables/useOfferSoftwareQuote.ts</file></path><path><editType>edit</editType><file>app/components/settings/price-sheet/PriceSheetMatrix.vue</file></path><path><editType>edit</editType><file>server/api/offers/quote/preview.post.ts</file></path><path><editType>edit</editType><file>server/utils/shipping/priceSheetPdf.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/settings/price-sheet/index.vue</file></path><path><editType>edit</editType><file>app/utils/shippingPriceSheet.ts</file></path><path><editType>add</editType><file>server/utils/offers/onboardingPdf.ts</file></path><path><editType>edit</editType><file>app/components/settings/price-sheet/PriceSheetOptions.vue</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/ui-components.md</file></path><path><editType>edit</editType><file>server/utils/offers/softwareQuotePdf.ts</file></path><path><editType>edit</editType><file>server/api/settings/price-sheet/resolve.post.ts</file></path><path><editType>edit</editType><file>.claude/rules/offers/software-quote.md</file></path><path><editType>edit</editType><file>app/components/settings/price-sheet/PriceSheetPreviewModal.vue</file></path><path><editType>edit</editType><file>server/api/offers/quote/send.post.ts</file></path><path><editType>edit</editType><file>app/components/settings/price-sheet/PriceSheetCellEditor.vue</file></path><path><editType>edit</editType><file>app/components/offers/SoftwareQuoteModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/partners/PartnerDetailRecord.vue</affectedPath><affectedPath>app/components/partners/PartnerDetailRecordLocation.vue</affectedPath><affectedPath>.claude/rules/nuxt/ui-components.md</affectedPath><affectedPath>app/pages/partners/partners/[id]/edit.vue</affectedPath><affectedPath>app/components/partners/PartnerForm.vue</affectedPath><affectedPath>app/components/partners/PartnerDetailRecordUser.vue</affectedPath><affectedPath>.claude/rules/partners/partner-edit-form.md</affectedPath><commitId>d65908d08308892d51a84856036b01a6723952ed</commitId><timestamp>1793359030000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Partner edit page on Nuxt UI: three-column layout (form | contact cards | KPI panel), grouped toolbar, segmented tabs, compact collapsible sections

- Contacts (AD_User) as cards in their own column (PartnerDetailRecordUser mode="cards": avatar, e-mail + send, phones + click-to-dial, inactive badge, add/edit/delete via the existing modal); detail-record "Kontakt (Benutzer)" tab hidden on the edit page (hide-users), view/duplicate keep the table; sticky columns, equal gutters, long e-mails wrap
- Toolbar (bannercontrol): UFieldGroup save pair + UDropdownMenu groups "Neu" (Kundenauftrag, Anfrage), "Dokumente" (Angebot, Prognose, Vertrag, SEPA, Bericht), "E-Mails" (Verlauf IM/MP, Zugangsdaten), "…" (Anhang, Duplizieren, Änderungsprotokoll via ChangeLogModal); role/processing conditions kept as disabled items
- Tabs: UTabs as a segmented pill bar with icons, active tab highlighted; tab strip inside the edit wrapper so it starts at the form's left edge; first section, contacts card and KPI row aligned on one line
- PartnerForm converted to Nuxt UI: 23 sections as UCard with coloured, larger titles, collapsible and collapsed by default (open state in localStorage logship_partner_sections); UFormField (icon label slot + UTooltip hint), UInput/USelect/UTextarea (size sm), USwitch on toggle cards and flags (toggleFlag/setFlag), URadioGroup for the rent mode, UButton everywhere; SelectBox and DatePicker unchanged; compact spacing (field 8 px, label 2 px, halved column gutters, zero card padding)
- Fixes: freight-rule select crashed on the '' option (Reka SelectItem forbids it → sentinel), USelect trigger zero width + unstyled panel, 9 Tabler icon names missing from the shipped font (blank glyphs) replaced, contacts/locations loaders no longer throw when the API returns nothing
- Recipes: nuxt/ui-components.md (USelect/UTabs/UCard/UFormField gaps), partners/partner-edit-form.md (new form structure + edit page layout)
</comment><date>2026-10-30 12:17:10 +0100</date><id>d65908d08308892d51a84856036b01a6723952ed</id><msg>Partner edit page on Nuxt UI: three-column layout (form | contact cards | KPI panel), grouped toolbar, segmented tabs, compact collapsible sections</msg><path><editType>edit</editType><file>.claude/rules/nuxt/ui-components.md</file></path><path><editType>edit</editType><file>app/components/partners/PartnerDetailRecordUser.vue</file></path><path><editType>edit</editType><file>app/pages/partners/partners/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/components/partners/PartnerForm.vue</file></path><path><editType>edit</editType><file>app/components/partners/PartnerDetailRecordLocation.vue</file></path><path><editType>edit</editType><file>.claude/rules/partners/partner-edit-form.md</file></path><path><editType>edit</editType><file>app/components/partners/PartnerDetailRecord.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/ci/deploy-production.sh</affectedPath><commitId>87bd740025e1476eec9e8228f7162712ea3602d9</commitId><timestamp>1793360043000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Production deploy: no more SQLite writes into the replaced live dir (lost contract-signing row 2026-10-29)

- Native module builds (better-sqlite3 rebuild, sqlite3 from source, OCR/PDF runtime asset copies, load gate) now run in the STAGE dir before the swap; the live-dir swap itself takes seconds
- `pm2 stop` of the app before the rollback copy / rm -rf of the live dir: SQLite connections close and checkpoint, no request can write to deleted inodes (a contract-signing row written during the minutes-long post-swap build window was lost while its PDFs landed in the new dir)
- SQLite backups through the better-sqlite3 online backup API (includes WAL frames); plain cp as fallback
</comment><date>2026-10-30 12:34:03 +0100</date><id>87bd740025e1476eec9e8228f7162712ea3602d9</id><msg>Production deploy: no more SQLite writes into the replaced live dir (lost contract-signing row 2026-10-29)</msg><path><editType>edit</editType><file>reference/ci/deploy-production.sh</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/settings/price-sheet/PriceSheetMatrix.vue</affectedPath><affectedPath>server/utils/shipping/priceSheetPdf.ts</affectedPath><affectedPath>reference/test-scripts/price-sheet-pdf-smoke.mts</affectedPath><affectedPath>app/pages/settings/price-sheet/index.vue</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>.claude/rules/fulfillment/carrier-rates.md</affectedPath><affectedPath>app/components/settings/price-sheet/PriceSheetOptions.vue</affectedPath><affectedPath>app/utils/shippingPriceSheet.ts</affectedPath><affectedPath>server/utils/shipping/carrierLogos.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>03731494971458295d341c3c7a52962a210e58d7</commitId><timestamp>1793360043000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Price sheet: carrier logos + per-carrier grouping (matrix and PDF), PDF rates first / notes last, services check-all, Nuxt UI country multi-select, markup 0 % everywhere

- shippingPriceSheet.ts: CARRIER_LOGO_PATHS / carrierLogoPath() as the single logo map, groupRowsByCarrier() for merged sheets
- Matrix: carrier heading row (logo, name, row count) per section and in the surcharge table, logo inline before each service on merged sheets, "Kosten" header carries the single carrier's logo
- PDF: DHL/DPD PNG logos bundled as Nitro server asset assets:shipper (carrierLogos.ts), cover "[logo] DHL + [logo] DPD", carrier heading rows + logo before the service in every table; page order cover → rate sections → surcharges → service overview → notes; the per-section notes are collected onto the notes page instead of sitting above the tables
- Options panel: "Alle an / Alle aus" for the services list with counter, country selection as USelectMenu multiple (search, flags, ISO codes, taller trigger) replacing the popover, carrier-neutral markup label (shared.js ps_markup), stored markups reset once to 0 % (markupV3) so no section keeps an old percentage
- Smoke script mocks assets:shipper too
</comment><date>2026-10-30 12:34:03 +0100</date><id>03731494971458295d341c3c7a52962a210e58d7</id><msg>Price sheet: carrier logos + per-carrier grouping (matrix and PDF), PDF rates first / notes last, services check-all, Nuxt UI country multi-select, markup 0 % everywhere</msg><path><editType>edit</editType><file>app/pages/settings/price-sheet/index.vue</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/carrier-rates.md</file></path><path><editType>edit</editType><file>app/components/settings/price-sheet/PriceSheetMatrix.vue</file></path><path><editType>edit</editType><file>server/utils/shipping/priceSheetPdf.ts</file></path><path><editType>edit</editType><file>app/components/settings/price-sheet/PriceSheetOptions.vue</file></path><path><editType>edit</editType><file>app/utils/shippingPriceSheet.ts</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/utils/shipping/carrierLogos.ts</file></path><path><editType>edit</editType><file>reference/test-scripts/price-sheet-pdf-smoke.mts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/TopMegaBar.vue</affectedPath><commitId>e6ed749cb9aa1676b35a8f6793b67f1f9134e48c</commitId><timestamp>1793360306000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Top bar: merchant label moved into the left zone as a chip (no longer overlaps the centred Ticket/Order buttons); side zones may shrink (minmax(0,1fr)), search shrinks first, quick-action buttons go icon-only below 1600/1400 px
</comment><date>2026-10-30 12:38:26 +0100</date><id>e6ed749cb9aa1676b35a8f6793b67f1f9134e48c</id><msg>Top bar: merchant label moved into the left zone as a chip (no longer overlaps the centred Ticket/Order buttons); side zones may shrink (minmax(0,1fr)), search shrinks first, quick-action buttons go icon-only below 1600/1400 px</msg><path><editType>edit</editType><file>app/components/TopMegaBar.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/orders/stock-lines.post.ts</affectedPath><affectedPath>app/components/partners/PartnerOrderLineTable.vue</affectedPath><commitId>0d10b13fbabdb1809889fe218b5ac275914a22d6</commitId><timestamp>1793360608000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Order lines: "Alle Artikel mit Bestand" — one position per article of the order's organization that has stock, qty = QtyOnHand

- POST server/api/orders/stock-lines { orgId, priceListId, warehouseId }: active articles of the org with their storage rows (productStorageHelper, no child $expand), QtyOnHand summed over all locators (or the order's warehouse), return-locator stock reported separately, prices from the newest version of the order's price list in chunked m_productprice queries
- PartnerOrderLineTable: button next to "Position hinzufügen" (order modal + every create/edit line table) that appends the lines with qty = on hand and PriceList/PriceStd, skips articles already on the order, info line with added / skipped / without-price counts (price 0 → check)
</comment><date>2026-10-30 12:43:28 +0100</date><id>0d10b13fbabdb1809889fe218b5ac275914a22d6</id><msg>Order lines: "Alle Artikel mit Bestand" — one position per article of the order's organization that has stock, qty = QtyOnHand</msg><path><editType>edit</editType><file>app/components/partners/PartnerOrderLineTable.vue</file></path><path><editType>add</editType><file>server/api/orders/stock-lines.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/OrderForm.vue</affectedPath><affectedPath>app/pages/sales/orders/add.vue</affectedPath><affectedPath>app/router.options.ts</affectedPath><affectedPath>app/pages/sales/orders/create.vue</affectedPath><commitId>40aafbad732e3ef3fef33b6737db0c5ab3fac06b</commitId><timestamp>1793361535000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Create sales order page (/create/sales-order) rebuilt with the quick-order modal's design and features, order form on Nuxt UI

- add.vue: hero header (badge, title, org / customer / positions chips), segmented UTabs for Order / Delivery / Invoicing / Reference / Integration / Status, form card, positions card with the modal's line table (article search, qty / price editing, "Alle Artikel mit Bestand") live BEFORE the first save — the lines travel with the order (orderLines → C_OrderLine), sticky footer with "Fehlt: …" readiness hint, Ctrl+Enter, Weiter, Speichern; keeps the US-state gate, DHL insurance / customs / relabel / marketplace-id fields and the tab-aware navigation after save
- The duplicate create.vue (old /windows/sales-orders-create page) is removed; the window route now loads add.vue too
- sales/OrderForm.vue converted by script: 60 field wrappers → UFormField (label slot), 57 inputs → UInput, 8 checkboxes → USwitch, 4 static selects → USelect, copy / external-link / tracking buttons → UButton; non-scoped overrides for the empty-bodied Nuxt UI utilities (inputs, select trigger + panel, switch track/thumb, buttons); inline address editors, SelectBox and DatePicker unchanged
</comment><date>2026-10-30 12:58:55 +0100</date><id>40aafbad732e3ef3fef33b6737db0c5ab3fac06b</id><msg>Create sales order page (/create/sales-order) rebuilt with the quick-order modal's design and features, order form on Nuxt UI</msg><path><editType>delete</editType><file>app/pages/sales/orders/create.vue</file></path><path><editType>edit</editType><file>app/router.options.ts</file></path><path><editType>edit</editType><file>app/pages/sales/orders/add.vue</file></path><path><editType>edit</editType><file>app/components/sales/OrderForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/settings/price-sheet/PriceSheetMatrix.vue</affectedPath><affectedPath>app/components/settings/price-sheet/PriceSheetOptions.vue</affectedPath><affectedPath>server/utils/shipping/priceSheetPdf.ts</affectedPath><affectedPath>app/pages/settings/price-sheet/index.vue</affectedPath><affectedPath>app/utils/shippingPriceSheet.ts</affectedPath><affectedPath>.claude/rules/fulfillment/carrier-rates.md</affectedPath><commitId>a43f136338a7b5f2149ceabf14a2caf953c3f06f</commitId><timestamp>1793361683000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Price sheet: Germany preselected on load, pinned DE/AT/FR/NL/CH quick picks, one carrier logo per group + gaps between groups (matrix and PDF), narrower wrapping surcharge column

- defaultSheetOptions: countryScope 'list' with ['DE'] (stored options reset once via countryV3); PINNED_COUNTRY_CODES as toggle chips above the country select and sorted first in the list
- Matrix: a carrier group following another one gets a padded top border; surcharge label column 25 % narrower (142 px) with wrapping labels
- PDF: logo only on the carrier heading row (service rows plain), white spacer row between carrier groups, surcharge label column 142 pt
</comment><date>2026-10-30 13:01:23 +0100</date><id>a43f136338a7b5f2149ceabf14a2caf953c3f06f</id><msg>Price sheet: Germany preselected on load, pinned DE/AT/FR/NL/CH quick picks, one carrier logo per group + gaps between groups (matrix and PDF), narrower wrapping surcharge column</msg><path><editType>edit</editType><file>app/components/settings/price-sheet/PriceSheetMatrix.vue</file></path><path><editType>edit</editType><file>app/utils/shippingPriceSheet.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/carrier-rates.md</file></path><path><editType>edit</editType><file>app/pages/settings/price-sheet/index.vue</file></path><path><editType>edit</editType><file>app/components/settings/price-sheet/PriceSheetOptions.vue</file></path><path><editType>edit</editType><file>server/utils/shipping/priceSheetPdf.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><commitId>be9d899a98a72a689c5a23adff03fa5fce3b6dea</commitId><timestamp>1793361728000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Sales order edit: positions table anchored under the form columns (grid: form | side panel, positions in row 2 of column 1) — a long side column (shipments / invoices / contacts / tickets) no longer pushes the positions down
</comment><date>2026-10-30 13:02:08 +0100</date><id>be9d899a98a72a689c5a23adff03fa5fce3b6dea</id><msg>Sales order edit: positions table anchored under the form columns (grid: form | side panel, positions in row 2 of column 1) — a long side column (shipments / invoices / contacts / tickets) no longer pushes the positions down</msg><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/OrderForm.vue</affectedPath><affectedPath>app/utils/randomEmail.ts</affectedPath><affectedPath>app/components/partners/PartnerQuickForm.vue</affectedPath><commitId>178f9bf899be01a5c52db86cf4cf429b4402d99f</commitId><timestamp>1793362713000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Order creation (modal + page): placeholder e-mail generator next to the e-mail field

- utils/randomEmail.ts: randomLogyouEmail() → kunde-&lt;10 random base36&gt;@logyou.de (crypto random)
- PartnerQuickForm (quick-order modal) and sales/OrderForm (create / edit page): wand button beside the e-mail input proposes an address; it is applied only after the user confirms it in an inline row (Übernehmen / Neu würfeln / Abbrechen)
</comment><date>2026-10-30 13:18:33 +0100</date><id>178f9bf899be01a5c52db86cf4cf429b4402d99f</id><msg>Order creation (modal + page): placeholder e-mail generator next to the e-mail field</msg><path><editType>edit</editType><file>app/components/sales/OrderForm.vue</file></path><path><editType>add</editType><file>app/utils/randomEmail.ts</file></path><path><editType>edit</editType><file>app/components/partners/PartnerQuickForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/partners/partners/quick-add.post.ts</affectedPath><commitId>9c1920c94bbf70ba21c11caa4cd92c54367c80e6</commitId><timestamp>1793362890000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quick order: coerce AD_Org_ID / C_Country_ID / C_Region_ID ids to numbers before posting partner + address — a cookie/config string id made iDempiere reject the new customer's C_Location (WrongDataType … should be Integer, prod 2026-10-30)
</comment><date>2026-10-30 13:21:30 +0100</date><id>9c1920c94bbf70ba21c11caa4cd92c54367c80e6</id><msg>Quick order: coerce AD_Org_ID / C_Country_ID / C_Region_ID ids to numbers before posting partner + address — a cookie/config string id made iDempiere reject the new customer's C_Location (WrongDataType … should be Integer, prod 2026-10-30)</msg><path><editType>edit</editType><file>server/api/partners/partners/quick-add.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/jasper-reports/shipment/M_InOut_Address.jrxml</affectedPath><affectedPath>reference/jasper-reports/shipment/M_InOut_Lines.jrxml</affectedPath><affectedPath>.claude/rules/fulfillment/commissioning.md</affectedPath><affectedPath>app/components/settings/CommissionTableForm.vue</affectedPath><affectedPath>app/pages/settings/commission-tables/[id]/edit.vue</affectedPath><affectedPath>.claude/rules/printing/jasper-shipment-report.md</affectedPath><affectedPath>reference/jasper-reports/styles.jrtx</affectedPath><affectedPath>reference/jasper-reports/shipment-a5/M_InOut_Address_A5.jrxml</affectedPath><affectedPath>reference/jasper-reports/README.md</affectedPath><affectedPath>reference/jasper-reports/shipment/M_InOut_Document.jrxml</affectedPath><affectedPath>reference/jasper-reports/shipment-a5/M_InOut_Document_A5.jrxml</affectedPath><affectedPath>reference/jasper-reports/compile.groovy</affectedPath><affectedPath>reference/jasper-reports/shipment/M_InOut_OrgInfoblock.jrxml</affectedPath><affectedPath>reference/jasper-reports/shipment/Letterhead_Footer.jrxml</affectedPath><affectedPath>server/api/settings/commission-tables/update.put.ts</affectedPath><affectedPath>reference/jasper-reports/shipment-a5/M_InOut_Lines_A5.jrxml</affectedPath><affectedPath>reference/README.md</affectedPath><commitId>8cac0a6a0a3ec6c69dd96c99db1da6170afe5cc8</commitId><timestamp>1793365645000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Commission table edit page on Nuxt UI + printer pickers; shipment Jasper slip: pickup vs. delivery + signature box

Commission tables (Settings → Commission Tables):
- CommissionTableForm rebuilt with Nuxt UI (UCard sections, UFormField with icon labels + UTooltip info
  icons, UInput/UTextarea/USelect/USwitch, UFieldGroup actions); edit page gets the partner-page toolbar
  (save group, preview, clone, manage printers, back) and a hero header; create/duplicate keep the in-form actions
- Shipping (label) printer and A4 printer are now pickers over Settings → Printers (/api/printers): label
  printers for shipping_printer, paper printers for a4_printer, each item with CUPS queue + location; the
  stored value stays the CUPS queue name, so the commissioning page pickers / getA4Printer keep working
- A queue saved on a table but missing in Settings → Printers is flagged and can be created in place
  (shared org *); the five queues referenced by Tisch 1–3 (labelprinter-4/-5, commission-a4-1/2/3) were
  created on prod as CUST_Printer rows
- Cameras: USelect over the Synology list (loaded on open) + ID fallback input
- Side card "Geräte am Tisch": table illustration (SVG) with numbered device badges 1 label printer,
  2 A4 printer, 3 camera, 4 camera 2 matching the numbered fields, hover sync, legend with current values;
  Organisation &amp; Status card with org picker, tenant, Active switch
- Org "*" (id 0) was dropped as falsy on load and on update; tenant falls back to AD_Client identifier

Shipment Jasper report (iDempiere host, templates archived under reference/jasper-reports):
- DeliveryViaRule = 'P' (Abholung) replaces "Versand via &lt;carrier&gt;" + logo with "Abholung / Selbstabholung",
  relabels Lieferdatum → Abholdatum and prints a "WARE ERHALTEN (ABHOLUNG)" signature box (Datum /
  Unterschrift) right of the barcode — A4 (M_InOut_Document + M_InOut_OrgInfoblock) and A5 slip
- Deployed + compiled on 192.168.12.72 (Groovy compile one-liner, backups shipment*.bak-20261030);
  recipes: printing/jasper-shipment-report.md, commissioning.md printer note
</comment><date>2026-10-30 14:07:25 +0100</date><id>8cac0a6a0a3ec6c69dd96c99db1da6170afe5cc8</id><msg>Commission table edit page on Nuxt UI + printer pickers; shipment Jasper slip: pickup vs. delivery + signature box</msg><path><editType>add</editType><file>reference/jasper-reports/shipment/M_InOut_Document.jrxml</file></path><path><editType>edit</editType><file>app/components/settings/CommissionTableForm.vue</file></path><path><editType>add</editType><file>reference/jasper-reports/README.md</file></path><path><editType>add</editType><file>reference/jasper-reports/shipment-a5/M_InOut_Lines_A5.jrxml</file></path><path><editType>add</editType><file>reference/jasper-reports/shipment/Letterhead_Footer.jrxml</file></path><path><editType>add</editType><file>.claude/rules/printing/jasper-shipment-report.md</file></path><path><editType>edit</editType><file>app/pages/settings/commission-tables/[id]/edit.vue</file></path><path><editType>add</editType><file>reference/jasper-reports/shipment-a5/M_InOut_Address_A5.jrxml</file></path><path><editType>add</editType><file>reference/jasper-reports/shipment-a5/M_InOut_Document_A5.jrxml</file></path><path><editType>add</editType><file>reference/jasper-reports/styles.jrtx</file></path><path><editType>add</editType><file>reference/jasper-reports/shipment/M_InOut_Lines.jrxml</file></path><path><editType>add</editType><file>reference/jasper-reports/compile.groovy</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/commissioning.md</file></path><path><editType>edit</editType><file>reference/README.md</file></path><path><editType>edit</editType><file>server/api/settings/commission-tables/update.put.ts</file></path><path><editType>add</editType><file>reference/jasper-reports/shipment/M_InOut_Address.jrxml</file></path><path><editType>add</editType><file>reference/jasper-reports/shipment/M_InOut_OrgInfoblock.jrxml</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/settings/commission-tables/[id]/edit.vue</affectedPath><affectedPath>app/components/settings/CommissionTableForm.vue</affectedPath><commitId>d627fa5e4095ea494e9ff03bf2b75b2ec68bcb8f</commitId><timestamp>1793366036000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Commission table form: badge hover no longer flickers (CSS scale was replacing the SVG translate → inner group scales), compact spacing like the partner form (8 px fields, dashed section heads, 2 rem inputs, smaller hero), grid 2/3 form + 1/3 side, rounded card accent bar, camera id 0 shown as empty
</comment><date>2026-10-30 14:13:56 +0100</date><id>d627fa5e4095ea494e9ff03bf2b75b2ec68bcb8f</id><msg>Commission table form: badge hover no longer flickers (CSS scale was replacing the SVG translate → inner group scales), compact spacing like the partner form (8 px fields, dashed section heads, 2 rem inputs, smaller hero), grid 2/3 form + 1/3 side, rounded card accent bar, camera id 0 shown as empty</msg><path><editType>edit</editType><file>app/components/settings/CommissionTableForm.vue</file></path><path><editType>edit</editType><file>app/pages/settings/commission-tables/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/softwareQuotePdf.ts</affectedPath><affectedPath>app/composables/useOfferSoftwareQuote.ts</affectedPath><affectedPath>app/components/offers/SoftwareQuoteModal.vue</affectedPath><affectedPath>.claude/rules/offers/software-quote.md</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>252623b881525125812f6596c0af871d1d9b475c</commitId><timestamp>1793367734000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>LogShip Cloud offer: with the onboarding annex attached the offer prints only a price-less 'Onboarding-Paket – optional' position (details + price in the annex, forecast one-time row dropped); preview step shows all outgoing documents (offer / annex / flyer) as tabs and 'PDFs herunterladen (n)' saves them all (iframe keyed per doc — nuxt-lazy-load one-shot data-src)
</comment><date>2026-10-30 14:42:14 +0100</date><id>252623b881525125812f6596c0af871d1d9b475c</id><msg>LogShip Cloud offer: with the onboarding annex attached the offer prints only a price-less 'Onboarding-Paket – optional' position (details + price in the annex, forecast one-time row dropped); preview step shows all outgoing documents (offer / annex / flyer) as tabs and 'PDFs herunterladen (n)' saves them all (iframe keyed per doc — nuxt-lazy-load one-shot data-src)</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/utils/offers/softwareQuotePdf.ts</file></path><path><editType>edit</editType><file>app/components/offers/SoftwareQuoteModal.vue</file></path><path><editType>edit</editType><file>app/composables/useOfferSoftwareQuote.ts</file></path><path><editType>edit</editType><file>.claude/rules/offers/software-quote.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/print/relabel-labels.post.ts</affectedPath><affectedPath>app/plugins/03.notifications-stream.client.ts</affectedPath><affectedPath>server/api/print/order-attachments.post.ts</affectedPath><affectedPath>server/api/settings/print-agents/enroll-code/[code].delete.ts</affectedPath><affectedPath>server/api/print-agent/backup.post.ts</affectedPath><affectedPath>server/api/print/[id]/product.post.ts</affectedPath><affectedPath>server/api/print-agent/backup.get.ts</affectedPath><affectedPath>server/api/print/labelprint.post.ts</affectedPath><affectedPath>server/api/print/index.get.ts</affectedPath><affectedPath>server/api/print-agent/jobs/ack.post.ts</affectedPath><affectedPath>server/api/settings/print-agents/index.get.ts</affectedPath><affectedPath>server/api/settings/print-agents/jobs/index.get.ts</affectedPath><affectedPath>app/plugins/05.print-jobs.client.ts</affectedPath><affectedPath>app/components/settings/PrinterForm.vue</affectedPath><affectedPath>server/api/print/index.post.ts</affectedPath><affectedPath>server/api/print-agent/jobs/next.get.ts</affectedPath><affectedPath>server/api/print-agent/enroll.post.ts</affectedPath><affectedPath>server/api/settings/print-agents/bindings/[printerId].put.ts</affectedPath><affectedPath>server/api/printers/cups-media.get.ts</affectedPath><affectedPath>server/api/print/attachment-labels.post.ts</affectedPath><affectedPath>server/api/print/[id]/locator.post.ts</affectedPath><affectedPath>server/utils/printAgentAuth.ts</affectedPath><affectedPath>server/api/settings/print-agents/jobs/mine.get.ts</affectedPath><affectedPath>app/pages/settings/printers/[id]/duplicate.vue</affectedPath><affectedPath>server/api/print-agent/jobs/[id]/file.get.ts</affectedPath><affectedPath>server/api/print-agent/commands/[id]/result.post.ts</affectedPath><affectedPath>app/pages/settings/printers/index.vue</affectedPath><affectedPath>server/api/print/product.post.ts</affectedPath><affectedPath>server/api/print/picklist.post.ts</affectedPath><affectedPath>server/api/settings/print-agents/[id]/command.post.ts</affectedPath><affectedPath>app/pages/settings/printers/[id]/edit.vue</affectedPath><affectedPath>app/pages/settings/printers/create.vue</affectedPath><affectedPath>server/api/settings/print-agents/status.get.ts</affectedPath><affectedPath>server/api/print/attachment-smart.post.ts</affectedPath><affectedPath>server/utils/printDispatch.ts</affectedPath><affectedPath>server/api/print/return-label.post.ts</affectedPath><affectedPath>server/utils/printSpoolDb.ts</affectedPath><affectedPath>server/api/print-agent/heartbeat.post.ts</affectedPath><affectedPath>server/api/mobile/reconditioning/print-report.post.ts</affectedPath><affectedPath>server/api/settings/print-agents/[id].delete.ts</affectedPath><affectedPath>server/utils/labelMedia.ts</affectedPath><affectedPath>server/api/settings/print-agents/[id].put.ts</affectedPath><affectedPath>server/api/print/inout-labels.post.ts</affectedPath><affectedPath>server/plugins/print-spool-maintenance.ts</affectedPath><affectedPath>server/api/settings/print-agents/enroll-code.post.ts</affectedPath><affectedPath>server/api/settings/print-agents/[id]/commands.get.ts</affectedPath><affectedPath>server/api/settings/print-agents/jobs/[id]/cancel.post.ts</affectedPath><affectedPath>app/composables/usePrinterBinding.ts</affectedPath><affectedPath>server/api/fulfillment/generate-fee-report.post.ts</affectedPath><affectedPath>server/api/settings/print-agents/jobs/[id]/retry.post.ts</affectedPath><affectedPath>app/components/settings/PrintAgentsCard.vue</affectedPath><commitId>5c409d9126b9ab2e347f950c7422daa6b87d88ea</commitId><timestamp>1793373298000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Printing: per-printer dispatch (local CUPS or LogShip Print Agent in the tenant LAN) — spool, agent protocol, settings UI

The 13 `lp` call sites (server/api/print/*, mobile reconditioning report) now go through
server/utils/printDispatch.ts: printFile()/printFiles() resolve the CUPS queue per printer —
no binding → local `lp` as before (execFile, whitelisted options, no shell string any more);
binding → job spooled for the tenant's Print Agent (status 'queued' + jobId, legacy
message/stdout fields kept). Storage root configurable (PRINT_STORAGE_DIR, default /root/storage);
the dead GET /api/print smoke route is removed.

Instance-local SQLite data/print-spool.db (server/utils/printSpoolDb.ts): agents (token hash,
heartbeat inventory/health), enrolment codes, printer→agent bindings keyed by CUST_Printer_ID
(no iDempiere column), jobs (queued→sent→spooled→completed|failed, batch id) and commands.
Agent protocol under /api/print-agent (enroll, heartbeat, long-poll jobs/next with inline files
≤ 300 KB, jobs/:id/file, jobs/ack, commands/:id/result, cups backup) — Bearer agent token.
Admin routes under /api/settings/print-agents (agents, enrol codes, bindings, jobs, commands,
status). Maintenance plugin re-queues stale 'sent' jobs and purges finished rows after 24 h.

Settings → Printers: Print-Agents card (online state, version, device queues with PPD label
size, queue depth, job stats, update/lpstat/restart-cups/journal/support-tunnel commands,
discovered queues → "Anlegen", job list with retry/cancel); printer form gets the per-printer
agent + device-queue picker; create/edit/duplicate save the binding after the iDempiere write.
labelMedia/cups-media read agent-reported label sizes for bound queues. Print-job feedback:
plugins/05.print-jobs.client.ts shows one toast per single job and one progress toast per
batch (SSE relay from the notifications plugin + cross-worker poll of jobs/mine).
</comment><date>2026-10-30 16:14:58 +0100</date><id>5c409d9126b9ab2e347f950c7422daa6b87d88ea</id><msg>Printing: per-printer dispatch (local CUPS or LogShip Print Agent in the tenant LAN) — spool, agent protocol, settings UI</msg><path><editType>add</editType><file>server/api/print-agent/backup.post.ts</file></path><path><editType>edit</editType><file>server/api/print/index.post.ts</file></path><path><editType>add</editType><file>server/api/settings/print-agents/[id]/commands.get.ts</file></path><path><editType>edit</editType><file>server/api/fulfillment/generate-fee-report.post.ts</file></path><path><editType>add</editType><file>server/api/print-agent/jobs/[id]/file.get.ts</file></path><path><editType>add</editType><file>server/api/settings/print-agents/index.get.ts</file></path><path><editType>add</editType><file>server/api/settings/print-agents/jobs/index.get.ts</file></path><path><editType>edit</editType><file>server/api/print/[id]/locator.post.ts</file></path><path><editType>add</editType><file>server/api/settings/print-agents/status.get.ts</file></path><path><editType>edit</editType><file>server/api/print/labelprint.post.ts</file></path><path><editType>edit</editType><file>app/pages/settings/printers/[id]/duplicate.vue</file></path><path><editType>edit</editType><file>server/api/print/attachment-smart.post.ts</file></path><path><editType>add</editType><file>server/api/settings/print-agents/jobs/mine.get.ts</file></path><path><editType>edit</editType><file>server/api/print/return-label.post.ts</file></path><path><editType>edit</editType><file>server/api/printers/cups-media.get.ts</file></path><path><editType>edit</editType><file>app/pages/settings/printers/create.vue</file></path><path><editType>edit</editType><file>server/api/print/[id]/product.post.ts</file></path><path><editType>edit</editType><file>app/pages/settings/printers/index.vue</file></path><path><editType>add</editType><file>server/api/settings/print-agents/jobs/[id]/retry.post.ts</file></path><path><editType>edit</editType><file>server/api/print/inout-labels.post.ts</file></path><path><editType>edit</editType><file>app/components/settings/PrinterForm.vue</file></path><path><editType>edit</editType><file>server/api/mobile/reconditioning/print-report.post.ts</file></path><path><editType>add</editType><file>app/composables/usePrinterBinding.ts</file></path><path><editType>add</editType><file>server/api/print-agent/commands/[id]/result.post.ts</file></path><path><editType>add</editType><file>server/api/settings/print-agents/bindings/[printerId].put.ts</file></path><path><editType>add</editType><file>server/utils/printSpoolDb.ts</file></path><path><editType>add</editType><file>server/api/settings/print-agents/enroll-code/[code].delete.ts</file></path><path><editType>add</editType><file>server/api/print-agent/backup.get.ts</file></path><path><editType>add</editType><file>server/api/settings/print-agents/[id].put.ts</file></path><path><editType>add</editType><file>app/plugins/05.print-jobs.client.ts</file></path><path><editType>add</editType><file>server/utils/printDispatch.ts</file></path><path><editType>add</editType><file>server/plugins/print-spool-maintenance.ts</file></path><path><editType>edit</editType><file>app/pages/settings/printers/[id]/edit.vue</file></path><path><editType>edit</editType><file>server/api/print/relabel-labels.post.ts</file></path><path><editType>edit</editType><file>app/plugins/03.notifications-stream.client.ts</file></path><path><editType>add</editType><file>server/api/print-agent/jobs/ack.post.ts</file></path><path><editType>edit</editType><file>server/api/print/order-attachments.post.ts</file></path><path><editType>add</editType><file>app/components/settings/PrintAgentsCard.vue</file></path><path><editType>add</editType><file>server/api/print-agent/heartbeat.post.ts</file></path><path><editType>add</editType><file>server/api/print-agent/jobs/next.get.ts</file></path><path><editType>add</editType><file>server/api/settings/print-agents/jobs/[id]/cancel.post.ts</file></path><path><editType>add</editType><file>server/api/settings/print-agents/[id].delete.ts</file></path><path><editType>edit</editType><file>server/utils/labelMedia.ts</file></path><path><editType>edit</editType><file>server/api/print/attachment-labels.post.ts</file></path><path><editType>edit</editType><file>server/api/print/picklist.post.ts</file></path><path><editType>add</editType><file>server/api/settings/print-agents/[id]/command.post.ts</file></path><path><editType>add</editType><file>server/utils/printAgentAuth.ts</file></path><path><editType>add</editType><file>server/api/print-agent/enroll.post.ts</file></path><path><editType>add</editType><file>server/api/settings/print-agents/enroll-code.post.ts</file></path><path><editType>delete</editType><file>server/api/print/index.get.ts</file></path><path><editType>edit</editType><file>server/api/print/product.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/printing/print-agent.md</affectedPath><affectedPath>app/components/settings/PrintAgentsCard.vue</affectedPath><affectedPath>server/utils/printSpoolDb.ts</affectedPath><commitId>defe0d60fe947f5da3b406eda1d06adef4eba43e</commitId><timestamp>1793374751000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Print-Agents: remote printer administration on the device — 'Drucker einrichten' dialog (discover USB/network printers via lpinfo/ippfind, create CUPS queues with driver presets + media, test page, enable/disable/accept, cancel, remove) over the agent command channel; command whitelist extended; recipe .claude/rules/printing/print-agent.md
</comment><date>2026-10-30 16:39:11 +0100</date><id>defe0d60fe947f5da3b406eda1d06adef4eba43e</id><msg>Print-Agents: remote printer administration on the device — 'Drucker einrichten' dialog (discover USB/network printers via lpinfo/ippfind, create CUPS queues with driver presets + media, test page, enable/disable/accept, cancel, remove) over the agent command channel; command whitelist extended; recipe .claude/rules/printing/print-agent.md</msg><path><editType>edit</editType><file>app/components/settings/PrintAgentsCard.vue</file></path><path><editType>add</editType><file>.claude/rules/printing/print-agent.md</file></path><path><editType>edit</editType><file>server/utils/printSpoolDb.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/print-agent/jobs/next.get.ts</affectedPath><affectedPath>server/utils/printSpoolDb.ts</affectedPath><commitId>e8b6411756532146e174ac448b4b67c71ae4511b</commitId><timestamp>1793376318000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Print-Agent: fresh-start poll re-queues the agent's claimed jobs at once (no 3-min wait after an agent restart)
</comment><date>2026-10-30 17:05:18 +0100</date><id>e8b6411756532146e174ac448b4b67c71ae4511b</id><msg>Print-Agent: fresh-start poll re-queues the agent's claimed jobs at once (no 3-min wait after an agent restart)</msg><path><editType>edit</editType><file>server/utils/printSpoolDb.ts</file></path><path><editType>edit</editType><file>server/api/print-agent/jobs/next.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/print-agent/jobs/next.get.ts</affectedPath><affectedPath>server/plugins/print-spool-maintenance.ts</affectedPath><affectedPath>server/utils/printSpoolDb.ts</affectedPath><commitId>8d0302a82681f4f1e8aa9238b31994d338bfd07d</commitId><timestamp>1793377267000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Print-Agent: fresh-start reconcile list of unconfirmed spooled jobs; maintenance closes spooled jobs without completion report after 30 min
</comment><date>2026-10-30 17:21:07 +0100</date><id>8d0302a82681f4f1e8aa9238b31994d338bfd07d</id><msg>Print-Agent: fresh-start reconcile list of unconfirmed spooled jobs; maintenance closes spooled jobs without completion report after 30 min</msg><path><editType>edit</editType><file>server/plugins/print-spool-maintenance.ts</file></path><path><editType>edit</editType><file>server/api/print-agent/jobs/next.get.ts</file></path><path><editType>edit</editType><file>server/utils/printSpoolDb.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>783</buildNumber><marked><SHA1>51fdb62667a84d910b466f0403037523463007bf</SHA1><branch><SHA1>51fdb62667a84d910b466f0403037523463007bf</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>51fdb62667a84d910b466f0403037523463007bf</SHA1><branch><SHA1>51fdb62667a84d910b466f0403037523463007bf</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>51fdb62667a84d910b466f0403037523463007bf</SHA1><branch><SHA1>51fdb62667a84d910b466f0403037523463007bf</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'></action><building>false</building><displayName>#783</displayName><duration>57746</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #783</fullDisplayName><id>783</id><inProgress>false</inProgress><keepLog>false</keepLog><number>783</number><queueId>5925</queueId><result>SUCCESS</result><timestamp>1793322000194</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/783/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/MarketplaceIcon.vue</affectedPath><commitId>27493125b908587febdf05b0860291a322636ddd</commitId><timestamp>1793259184000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>MarketplaceIcon: eBay = coloured wordmark on a white tile (wide letterbox), Shopify = the green bag image of the order detail view on a white tile
</comment><date>2026-10-29 08:33:04 +0100</date><id>27493125b908587febdf05b0860291a322636ddd</id><msg>MarketplaceIcon: eBay = coloured wordmark on a white tile (wide letterbox), Shopify = the green bag image of the order detail view on a white tile</msg><path><editType>edit</editType><file>app/components/MarketplaceIcon.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/orders/[id]/document-action.post.ts</affectedPath><affectedPath>app/components/sales/OrderForm.vue</affectedPath><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><commitId>3aa77515965e8f733dc560e3ce1882e856983030</commitId><timestamp>1793259407000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Sales order: DHL transport insurance + customs (CN23) tax note editable only until a live shipment is commissioned (lock hint); re-activating an order that already has a live customer delivery is limited to client administrators (server re-checks the role via iDempiere, button muted + toast for everyone else) — address, insurance and other fields stay editable on completed orders
</comment><date>2026-10-29 08:36:47 +0100</date><id>3aa77515965e8f733dc560e3ce1882e856983030</id><msg>Sales order: DHL transport insurance + customs (CN23) tax note editable only until a live shipment is commissioned (lock hint); re-activating an order that already has a live customer delivery is limited to client administrators (server re-checks the role via iDempiere, button muted + toast for everyone else) — address, insurance and other fields stay editable on completed orders</msg><path><editType>edit</editType><file>server/api/orders/[id]/document-action.post.ts</file></path><path><editType>edit</editType><file>app/components/sales/OrderForm.vue</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/utils/scanCode.ts</affectedPath><commitId>4ca5e08ae770ed712ce9d37b3723e2a86e75c882</commitId><timestamp>1793261240000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Shipment scan lookup: never put a parenthesised GS1 scan ('(00)3404…') into contains(trackingnoarray,…) — iDempiere's OData parser answers 500 on it, so DHL Kleinpaket label scans found no shipment on the mobile return / reconditioning pages
</comment><date>2026-10-29 09:07:20 +0100</date><id>4ca5e08ae770ed712ce9d37b3723e2a86e75c882</id><msg>Shipment scan lookup: never put a parenthesised GS1 scan ('(00)3404…') into contains(trackingnoarray,…) — iDempiere's OData parser answers 500 on it, so DHL Kleinpaket label scans found no shipment on the mobile return / reconditioning pages</msg><path><editType>edit</editType><file>app/utils/scanCode.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/idempiere/write-casing-and-flags.md</affectedPath><commitId>b00aaaa5e566fab4e6f5cfe144103437ad3806f9</commitId><timestamp>1793261255000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Recipe: OData contains() crashes on parentheses inside the argument
</comment><date>2026-10-29 09:07:35 +0100</date><id>b00aaaa5e566fab4e6f5cfe144103437ad3806f9</id><msg>Recipe: OData contains() crashes on parentheses inside the argument</msg><path><editType>edit</editType><file>.claude/rules/idempiere/write-casing-and-flags.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/update-files/version.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><commitId>b2394decd63f08a4eb1ac2a5a5ea51c4cabf4989</commitId><timestamp>1793261416000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Android app version bump (release script)
</comment><date>2026-10-29 09:10:16 +0100</date><id>b2394decd63f08a4eb1ac2a5a5ea51c4cabf4989</id><msg>Android app version bump (release script)</msg><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>app/components/DialButton.vue</affectedPath><commitId>7e839434a06f136bc17dedc5d432b81c553de6db</commitId><timestamp>1793264290000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Sales order: 'Kontakte' card in the right column (ship-to address first, then every partner contact with e-mail + click-to-dial buttons); dial popover re-measures itself after render and flips / clamps into the viewport instead of running off the page bottom
</comment><date>2026-10-29 09:58:10 +0100</date><id>7e839434a06f136bc17dedc5d432b81c553de6db</id><msg>Sales order: 'Kontakte' card in the right column (ship-to address first, then every partner contact with e-mail + click-to-dial buttons); dial popover re-measures itself after render and flips / clamps into the viewport instead of running off the page bottom</msg><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/components/DialButton.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><commitId>51fdb62667a84d910b466f0403037523463007bf</commitId><timestamp>1793264305000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Android app version bump (release script)
</comment><date>2026-10-29 09:58:25 +0100</date><id>51fdb62667a84d910b466f0403037523463007bf</id><msg>Android app version bump (release script)</msg><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>782</buildNumber><marked><SHA1>fda427288fed8d5a34d1c745e37c23ca041c9a3d</SHA1><branch><SHA1>fda427288fed8d5a34d1c745e37c23ca041c9a3d</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>fda427288fed8d5a34d1c745e37c23ca041c9a3d</SHA1><branch><SHA1>fda427288fed8d5a34d1c745e37c23ca041c9a3d</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>fda427288fed8d5a34d1c745e37c23ca041c9a3d</SHA1><branch><SHA1>fda427288fed8d5a34d1c745e37c23ca041c9a3d</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'></action><building>false</building><displayName>#782</displayName><duration>67059</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #782</fullDisplayName><id>782</id><inProgress>false</inProgress><keepLog>false</keepLog><number>782</number><queueId>5920</queueId><result>SUCCESS</result><timestamp>1793235600194</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/782/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/useShippingPerformancePdf.ts</affectedPath><affectedPath>app/pages/bi/shipping-performance.vue</affectedPath><affectedPath>.claude/rules/bi/shipping-performance.md</affectedPath><commitId>17347f6d0640c6ce40944d6afe25d4a7e94090d4</commitId><timestamp>1793176195000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>BI shipping performance: multi-page PDF export of the current view (live chart snapshots, KPIs, sources, grid rows)
</comment><date>2026-10-28 09:29:55 +0100</date><id>17347f6d0640c6ce40944d6afe25d4a7e94090d4</id><msg>BI shipping performance: multi-page PDF export of the current view (live chart snapshots, KPIs, sources, grid rows)</msg><path><editType>add</editType><file>app/composables/useShippingPerformancePdf.ts</file></path><path><editType>edit</editType><file>app/pages/bi/shipping-performance.vue</file></path><path><editType>edit</editType><file>.claude/rules/bi/shipping-performance.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/admin/users/leads/latest.get.ts</affectedPath><affectedPath>app/pages/users/users/[id]/edit.vue</affectedPath><affectedPath>server/api/admin/users/store.post.ts</affectedPath><affectedPath>.claude/rules/leads/ai-assessment.md</affectedPath><affectedPath>.claude/rules/nuxt/ui-components.md</affectedPath><affectedPath>server/api/admin/users/update.put.ts</affectedPath><affectedPath>app/pages/users/users/create.vue</affectedPath><affectedPath>app/components/admin/UserForm.vue</affectedPath><affectedPath>app/components/leads/ChatConsoleModal.vue</affectedPath><affectedPath>server/utils/trimCookieData.ts</affectedPath><affectedPath>app/components/leads/MailComposeModal.vue</affectedPath><affectedPath>.claude/rules/idempiere/write-casing-and-flags.md</affectedPath><affectedPath>app/pages/users/leads/create.vue</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>server/utils/mail/staffMail.ts</affectedPath><commitId>62585d99e20d86d93cbcc6116a61055f63e7793d</commitId><timestamp>1793177401000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads + users: KI-Konsole readable bubbles and "Als E-Mail senden" hand-off, AD_User.FullName, Nuxt UI user pages, lead fixes

- KI-Konsole: explicit bubble text colours (global `*` colour rule made the user bubble unreadable); new
  "Als E-Mail senden" on assistant turns extracts subject/body and opens the lead mail composer on top,
  pre-filled and editable (composer `draft` prop, templateKey 'ai-chat', signature/footer as usual)
- AD_User.FullName: used for the staff mail signature (fallback Name), carried in the logship_user cookie,
  written by store/update (update only when the key is sent), field on /create/user and /edit/user-:id
- User pages rebuilt on Nuxt UI (hero with avatar/badges, UTabs, card groups, USwitch with track fix);
  edit page now reads/writes IsAddMailTextAutomatically correctly
- Dashboard "Neueste Leads": expired leads (LeadStatus E) no longer listed
- /create/lead: company name, website and AiScore were dropped on the initial save (client + store route)
- Recipes: console hand-off, REST cache reset for new columns, USwitch gap
</comment><date>2026-10-28 09:50:01 +0100</date><id>62585d99e20d86d93cbcc6116a61055f63e7793d</id><msg>Leads + users: KI-Konsole readable bubbles and "Als E-Mail senden" hand-off, AD_User.FullName, Nuxt UI user pages, lead fixes</msg><path><editType>edit</editType><file>app/pages/users/users/create.vue</file></path><path><editType>edit</editType><file>app/pages/users/users/[id]/edit.vue</file></path><path><editType>edit</editType><file>server/api/admin/users/store.post.ts</file></path><path><editType>edit</editType><file>app/components/leads/ChatConsoleModal.vue</file></path><path><editType>edit</editType><file>server/utils/trimCookieData.ts</file></path><path><editType>edit</editType><file>server/utils/mail/staffMail.ts</file></path><path><editType>edit</editType><file>app/components/leads/MailComposeModal.vue</file></path><path><editType>edit</editType><file>.claude/rules/leads/ai-assessment.md</file></path><path><editType>edit</editType><file>.claude/rules/idempiere/write-casing-and-flags.md</file></path><path><editType>edit</editType><file>app/components/admin/UserForm.vue</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/ui-components.md</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/create.vue</file></path><path><editType>edit</editType><file>server/api/admin/users/leads/latest.get.ts</file></path><path><editType>edit</editType><file>server/api/admin/users/update.put.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/admin/UserForm.vue</affectedPath><affectedPath>app/pages/users/users/[id]/edit.vue</affectedPath><affectedPath>public/css/styles.css</affectedPath><affectedPath>app/pages/users/users/create.vue</affectedPath><affectedPath>.claude/rules/nuxt/nuxt4-conventions.md</affectedPath><commitId>bdb551d64cbbacbf95b0663f213ecd7d9ed711ed</commitId><timestamp>1793179770000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Theme: text colour inherits again (drop color on the universal selector), readable hero/dark surfaces system-wide

The universal `* { color: var(--theme-text-primary) }` in public/css/styles.css painted every element
without its own colour dark, so text inside navy hero cards, chat bubbles and dark badges was unreadable.
Colour now cascades from html/body; form controls keep the explicit theme colour, buttons inherit.
User page: ext. badge and card titles get explicit colours (Bulma strong colour on dark cards).
</comment><date>2026-10-28 10:29:30 +0100</date><id>bdb551d64cbbacbf95b0663f213ecd7d9ed711ed</id><msg>Theme: text colour inherits again (drop color on the universal selector), readable hero/dark surfaces system-wide</msg><path><editType>edit</editType><file>public/css/styles.css</file></path><path><editType>edit</editType><file>app/pages/users/users/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/users/users/create.vue</file></path><path><editType>edit</editType><file>app/components/admin/UserForm.vue</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/nuxt4-conventions.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/orders/summaryQuery.ts</affectedPath><affectedPath>.claude/rules/sales/orders-grid.md</affectedPath><affectedPath>server/api/orders/ag-grid/summary.post.ts</affectedPath><affectedPath>app/pages/sales/orders/index.vue</affectedPath><affectedPath>app/components/AgGridServer.vue</affectedPath><affectedPath>reference/sql/backup-view.cjs</affectedPath><affectedPath>server/api/orders/ag-grid/summary-totals.post.ts</affectedPath><affectedPath>server/api/orders/sales/stream.get.ts</affectedPath><affectedPath>reference/sql/backups/v_orders_summary.20261027-210422.sql</affectedPath><affectedPath>reference/sql/restore-view.cjs</affectedPath><affectedPath>reference/sql/_db.cjs</affectedPath><affectedPath>reference/sql/apply-view.cjs</affectedPath><affectedPath>reference/sql/v_orders_summary.rollback.sql</affectedPath><affectedPath>reference/sql/v_orders_summary.sql</affectedPath><affectedPath>reference/README.md</affectedPath><commitId>52e3abbc96b47192b0d0076a03136dc9e4cd2041</commitId><timestamp>1793186468000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Sales orders grid: LATERAL view + two-step paging, totals route, external links for all marketplaces

- v_orders_summary rewritten as LEFT JOIN LATERAL (applied on prod 2026-10-27); DDL now versioned in
  reference/sql with backup/apply/restore scripts (node + pg, .env PG_* keys, PG tunnel on dev)
- summary.post.ts: step 1 ids-only page (cheap deep $skip), step 2 rows by id in step-1 order; shared query
  builder server/utils/orders/summaryQuery.ts; single-flight per identical block, no row cache
- totals moved to orders/ag-grid/summary-totals.post.ts (60 s cache + single-flight), page calls it debounced
  on grid ready / switch / column filter / card reload; blocks never wait for it
- AgGridServer: cacheBlockSize / maxBlocksInCache props + filterChanged emit (orders page uses 100/20)
- SSE stream seeds globalLastOrderId from the newest order on a fresh process (no replay of old orders
  + push notifications after a PM2 restart)
- fix: external reference links for Shopware, Shopify, Amazon and JTL were dead on the list — $select on the
  view only carried plentyone_order_id; all marketplace id columns AgMarketplaceLink.vue uses are selected now
</comment><date>2026-10-28 12:21:08 +0100</date><id>52e3abbc96b47192b0d0076a03136dc9e4cd2041</id><msg>Sales orders grid: LATERAL view + two-step paging, totals route, external links for all marketplaces</msg><path><editType>edit</editType><file>app/components/AgGridServer.vue</file></path><path><editType>add</editType><file>reference/sql/backups/v_orders_summary.20261027-210422.sql</file></path><path><editType>add</editType><file>reference/sql/backup-view.cjs</file></path><path><editType>edit</editType><file>reference/README.md</file></path><path><editType>add</editType><file>reference/sql/restore-view.cjs</file></path><path><editType>add</editType><file>server/api/orders/ag-grid/summary-totals.post.ts</file></path><path><editType>edit</editType><file>app/pages/sales/orders/index.vue</file></path><path><editType>add</editType><file>reference/sql/_db.cjs</file></path><path><editType>add</editType><file>reference/sql/apply-view.cjs</file></path><path><editType>edit</editType><file>.claude/rules/sales/orders-grid.md</file></path><path><editType>add</editType><file>reference/sql/v_orders_summary.rollback.sql</file></path><path><editType>add</editType><file>server/utils/orders/summaryQuery.ts</file></path><path><editType>edit</editType><file>server/api/orders/sales/stream.get.ts</file></path><path><editType>add</editType><file>reference/sql/v_orders_summary.sql</file></path><path><editType>edit</editType><file>server/api/orders/ag-grid/summary.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/OrderForm.vue</affectedPath><affectedPath>server/api/commission/parcels/dhl/multi.post.ts</affectedPath><affectedPath>app/composables/useCustomsTaxNote.ts</affectedPath><affectedPath>app/components/OrderQuickAddModal.vue</affectedPath><affectedPath>server/api/commission/parcels/dhl/index.post.ts</affectedPath><affectedPath>.claude/rules/fulfillment/commissioning.md</affectedPath><affectedPath>app/components/partners/PartnerQuickForm.vue</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>app/components/sales/CustomsTaxNoteFields.vue</affectedPath><affectedPath>server/api/partners/partners/quick-add.post.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>7fb15e7a47701993350ea564bb4661290393654b</commitId><timestamp>1793187043000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Orders: manual customs (CN23) tax note on the order popup and the order edit form

- "Zoll (CN23): Steuer bereits abgeführt (IOSS/OSS)" block (paid via / amount / currency / scheme / code) writes the
  same sentence the eBay import writes as the FIRST line of C_Order.Description —
  "Tax of {amount} {currency} has been paid via {paidVia} ({scheme}) with Code: {code}" — which the DHL customs
  routes forward as CN23 exportDescription; other Description text is kept below it
- composables/useCustomsTaxNote.ts (build/parse/apply, tolerant to codes with spaces and the " | ** Voided" suffix)
  + components/sales/CustomsTaxNoteFields.vue (floating-label layout, preview with 80-char counter)
- shown only for DHL-Paket shippers (isCustomsTaxNoteShipper — single place to extend for DPD); popup strips the
  note when the shipper leaves DHL, edit form hides without touching the Description; editable on completed orders
- quick-add.post.ts now sends description; DHL customs routes collapse whitespace before the 80-char cut
- translations en/de/es/ne, recipe in .claude/rules/fulfillment/commissioning.md
</comment><date>2026-10-28 12:30:43 +0100</date><id>7fb15e7a47701993350ea564bb4661290393654b</id><msg>Orders: manual customs (CN23) tax note on the order popup and the order edit form</msg><path><editType>edit</editType><file>server/api/commission/parcels/dhl/index.post.ts</file></path><path><editType>edit</editType><file>server/api/partners/partners/quick-add.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/sales/OrderForm.vue</file></path><path><editType>edit</editType><file>app/components/partners/PartnerQuickForm.vue</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dhl/multi.post.ts</file></path><path><editType>add</editType><file>app/components/sales/CustomsTaxNoteFields.vue</file></path><path><editType>add</editType><file>app/composables/useCustomsTaxNote.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/commissioning.md</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>edit</editType><file>app/components/OrderQuickAddModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>.claude/rules/offers/pdf-generation.md</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><commitId>c73bfd66b65d8d789541d831ef337c8ee84fbf20</commitId><timestamp>1793187043000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Offers: editable article name + description for the monthly fee line in the quote PDF

- pricing.monthlyFeeLabel (default "Start") and pricing.monthlyFeeNote (default "Der komplette Fulfillment-Kern
  für Ihren Einstieg.") — two text inputs next to the €/M. field in QuoteModal.vue
- quotePdf.ts prints them in the "Monatliche Kosten" row; empty label falls back to "Servicepauschale", legacy
  offers without the keys keep the old "inkl. …" subtext, an explicitly emptied note prints nothing
- applySavedQuoteConditions keeps both strings verbatim (fillNonEmpty would re-apply the default)
- translations en/de/es, recipe note in .claude/rules/offers/pdf-generation.md
</comment><date>2026-10-28 12:30:43 +0100</date><id>c73bfd66b65d8d789541d831ef337c8ee84fbf20</id><msg>Offers: editable article name + description for the monthly fee line in the quote PDF</msg><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>.claude/rules/offers/pdf-generation.md</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/nuxt/nuxt4-conventions.md</affectedPath><affectedPath>nuxt.config.ts</affectedPath><commitId>5e95cb27bf54fe21ea4b340b17ab76d813217af4</commitId><timestamp>1793188905000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Build: bundle tslib into the Nitro server bundle (500 on full reload of /bi/shipping-performance)

Left external, the amcharts "exporting" plugin's bare `import 'tslib'` survived into .output, Nitro's tracer
copied only tslib.js / tslib.es6.mjs, and Node resolved the ESM import to the missing modules/index.js
(package exports "import" → "node"): "Cannot find module …/node_modules/tslib/modules/index.js" on every
SSR render of the page, while client-side navigation worked. nitro.externals.inline: ['tslib'] bundles it;
verified by importing the built chunk in Node. vite.ssr.noExternal has no effect on this builder.
Recipe note incl. the custom-buildDir gotcha (Nitro esbuild "symbol R already declared").
</comment><date>2026-10-28 13:01:45 +0100</date><id>5e95cb27bf54fe21ea4b340b17ab76d813217af4</id><msg>Build: bundle tslib into the Nitro server bundle (500 on full reload of /bi/shipping-performance)</msg><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/nuxt4-conventions.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><commitId>da5f7325bc63f0e5483258ac03f79b29d83a1424</commitId><timestamp>1793191954000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Offers: monthly fee €/M. + article name on one row, description as a larger textarea below
</comment><date>2026-10-28 13:52:34 +0100</date><id>da5f7325bc63f0e5483258ac03f79b29d83a1424</id><msg>Offers: monthly fee €/M. + article name on one row, description as a larger textarea below</msg><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>f6a5ec04ead3d57d656e01ca2e89626a12576f25</commitId><timestamp>1793192061000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads: explicit offer buttons (Fulfillment-Angebot / LogShip Cloud / Vertrag), no remembered offer type

The hero "Angebot" button reopened the last-used offer type (per-lead localStorage) and the second button
flipped its meaning accordingly, so "Angebot" opened the LogShip Cloud offer once that had been used on the
lead. Each button now names its type and always opens exactly that modal; the in-modal type switch stays.
</comment><date>2026-10-28 13:54:21 +0100</date><id>f6a5ec04ead3d57d656e01ca2e89626a12576f25</id><msg>Leads: explicit offer buttons (Fulfillment-Angebot / LogShip Cloud / Vertrag), no remembered offer type</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>server/utils/offers/agbDefault.ts</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>server/utils/offers/contractPdf.ts</affectedPath><affectedPath>server/utils/offers/contractTexts.ts</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>app/components/offers/ContractModal.vue</affectedPath><affectedPath>server/utils/offers/offerAttachments.ts</affectedPath><affectedPath>app/composables/useOfferContract.ts</affectedPath><affectedPath>server/utils/offers/flyerTexts.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>.claude/rules/offers/contract-and-quote-portals.md</affectedPath><commitId>306bcb3fa81860440fb70ee4af5514c8e6b10e7d</commitId><timestamp>1793193280000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Offers: make offer, Rahmenvertrag and AGB consistent (customer contradiction list) + barcode / pick clauses

Contract (contractTexts DE+EN, contractPdf):
- term: contract starts with signature, operational start = first goods receipt, integration/setup free,
  running fees only from the operational start (was: integration could start billing while pricing said
  "no costs until first goods receipt")
- pricing: "Basispreis pro Versandauftrag", shipment counts at status "versendet", explicit pick inclusion
  ({pickInclusion} = quote.pricing.qtyPickfree) and a definition of "Pick" (base unit or packaging unit with
  own barcode), NEW "Wareneingang" item driven by the offer ({inboundPricing} = quote.inbound.mode:
  included / hourly / custom) with the included scope and the on-request count check, returns scope
  defined once (SLA item now refers to it; blocked stock + photos, customer decides refunds),
  carrier tariff pass-through, no packaging costs for pre-packed goods, nominal storage dimensions,
  service fee named like the offer, annex 1 validity note
- NEW clause "Barcodes &amp; Artikelkennzeichnung": scannable code per sales unit, relabelling by time +
  material, no liability / no 13.6 tolerance when the customer waives relabelling
- {noticeAgbNote} whenever noticeMonths differs from the AGB's 3-month fallback
- ContractModal: "Angebot vom (Anlage 1)" mirrors the attached offer's date, select "Wareneingang (lt. Angebot)"
- Annex 1: a newer saved quote wins over a stale sent PDF; regenerated offer keeps cut-off + validity

Offer PDF (quotePdf DE+EN): base price per Versandauftrag with "Picks nicht enthalten / inkl. n Picks",
pick definition footnote, goods receipt = Packstückkontrolle (count per SKU on request), returns scope
subtext, storage nominal dimensions, packaging only by consumption; flyer + modal hint aligned.

AGB seed (agbDefault.ts): Pick / Versandauftrag definitions, B2C limit 31,5 kg + Sperrgut, barcode rule +
pallet 120×80×150 = offer pallet space, shrinkage only in 13.6, returns scope, payment = contract, notice
period follows the contract. Recipe section "Offer ↔ contract ↔ AGB consistency".
</comment><date>2026-10-28 14:14:40 +0100</date><id>306bcb3fa81860440fb70ee4af5514c8e6b10e7d</id><msg>Offers: make offer, Rahmenvertrag and AGB consistent (customer contradiction list) + barcode / pick clauses</msg><path><editType>edit</editType><file>server/utils/offers/offerAttachments.ts</file></path><path><editType>edit</editType><file>server/utils/offers/agbDefault.ts</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><path><editType>edit</editType><file>.claude/rules/offers/contract-and-quote-portals.md</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>server/utils/offers/contractTexts.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferContract.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>app/components/offers/ContractModal.vue</file></path><path><editType>edit</editType><file>server/utils/offers/flyerTexts.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/plugins/ticket-auto-close.ts</affectedPath><affectedPath>app/pages/mobile/digital-picking.vue</affectedPath><affectedPath>server/utils/pushNotifier.ts</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>reference/DPS_15222_04_Hive_Delivery_Prices.pdf</affectedPath><affectedPath>app/pages/mobile/fix-locator-owner.vue</affectedPath><affectedPath>app/pages/mobile/product.vue</affectedPath><affectedPath>app/pages/mobile/return.vue</affectedPath><affectedPath>app/pages/mobile/picklist.vue</affectedPath><affectedPath>server/api/requests/requests/[id]/push-task-status.post.ts</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>app/components/mobile/StepGuide.vue</affectedPath><affectedPath>app/components/fulfillment/DigitalPicklist.vue</affectedPath><affectedPath>app/components/rmas/ReturnLabelPrinterPicker.vue</affectedPath><affectedPath>app/components/mobile/Header.vue</affectedPath><affectedPath>app/pages/mobile/movement.vue</affectedPath><affectedPath>reference/scanner.png</affectedPath><affectedPath>server/api/requests/requests/[id]/action-notification.post.ts</affectedPath><affectedPath>app/pages/mobile/reconditioning.vue</affectedPath><affectedPath>server/api/requests/requests/auto-close.post.ts</affectedPath><affectedPath>.claude/rules/mobile/capacitor-app-build.md</affectedPath><affectedPath>app/pages/mobile/receive.vue</affectedPath><affectedPath>app/pages/mobile/generate-shipments.vue</affectedPath><affectedPath>server/api/notifications/stream.get.ts</affectedPath><affectedPath>app/pages/mobile/commission.vue</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>reference/Monkatech x Hive - 20240701 - Vertrag.pdf</affectedPath><affectedPath>app/pages/mobile/locator-articles.vue</affectedPath><affectedPath>app/pages/mobile/inventory.vue</affectedPath><affectedPath>server/utils/orgRoleAccessCache.ts</affectedPath><affectedPath>.claude/rules/requests/tickets.md</affectedPath><affectedPath>app/assets/css/mobile-theme.css</affectedPath><affectedPath>app/pages/mobile/print-labels.vue</affectedPath><affectedPath>server/utils/ticketAutoClose.ts</affectedPath><affectedPath>app/pages/mobile/locator-labels.vue</affectedPath><affectedPath>server/utils/notificationBus.ts</affectedPath><commitId>72dc026b8156bfcc49bc672a524bd52b114bef9b</commitId><timestamp>1793193798000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile: uniform page skeleton (MobileHeader + StepGuide), app 1.0.72; tickets: auto-close after merchant inactivity; notifications: actor-aware delivery

- app/components/mobile/Header.vue + StepGuide.vue: every /mobile/* page now starts with a sticky Nuxt UI
  header and a Zebra-style pictogram step guide driven by one `stepGuide` computed per page (commission,
  digital-picking, fix-locator-owner, generate-shipments, inventory, locator-articles/-labels, movement,
  picklist, print-labels, product, receive, reconditioning, return, tasks); shared DigitalPicklist overlay
  gets the compact `.dp-guide` variant; mobile-theme.css + ReturnLabelPrinterPicker adjusted
- android: versionCode 73 / 1.0.72 ("Enhance Styling and new Icon Explanation")
- server/utils/ticketAutoClose.ts + plugins/ticket-auto-close.ts + requests/[id]/auto-close.post.ts:
  merchant-action tickets idle for TICKET_AUTOCLOSE_DAYS (10) are completed with an [Auto-Close] note and
  a merchant mail (6 h timer on PM2 instance 0, off on nuxt dev, dry-run endpoint for staff)
- notifications: action-notification / push-task-status pass the acting user; stream.get.ts and
  pushNotifier skip the actor; orgRoleAccessCache fix for roles with org 0; notificationBus tweaks
- recipes: mobile/capacitor-app-build.md (page skeleton), requests/tickets.md (auto-close, who gets
  toast/push/mail); reference: Hive contract PDF (template ancestor), scanner.png
</comment><date>2026-10-28 14:23:18 +0100</date><id>72dc026b8156bfcc49bc672a524bd52b114bef9b</id><msg>Mobile: uniform page skeleton (MobileHeader + StepGuide), app 1.0.72; tickets: auto-close after merchant inactivity; notifications: actor-aware delivery</msg><path><editType>edit</editType><file>app/pages/mobile/locator-articles.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/return.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/reconditioning.vue</file></path><path><editType>add</editType><file>server/api/requests/requests/auto-close.post.ts</file></path><path><editType>edit</editType><file>server/api/notifications/stream.get.ts</file></path><path><editType>add</editType><file>app/components/mobile/StepGuide.vue</file></path><path><editType>edit</editType><file>app/assets/css/mobile-theme.css</file></path><path><editType>edit</editType><file>server/api/requests/requests/[id]/push-task-status.post.ts</file></path><path><editType>add</editType><file>server/plugins/ticket-auto-close.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/movement.vue</file></path><path><editType>edit</editType><file>server/utils/orgRoleAccessCache.ts</file></path><path><editType>edit</editType><file>app/components/rmas/ReturnLabelPrinterPicker.vue</file></path><path><editType>edit</editType><file>.claude/rules/mobile/capacitor-app-build.md</file></path><path><editType>add</editType><file>reference/DPS_15222_04_Hive_Delivery_Prices.pdf</file></path><path><editType>edit</editType><file>server/api/requests/requests/[id]/action-notification.post.ts</file></path><path><editType>edit</editType><file>app/components/fulfillment/DigitalPicklist.vue</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>app/pages/mobile/print-labels.vue</file></path><path><editType>add</editType><file>reference/scanner.png</file></path><path><editType>edit</editType><file>app/pages/mobile/receive.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/commission.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/digital-picking.vue</file></path><path><editType>edit</editType><file>server/utils/notificationBus.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/product.vue</file></path><path><editType>add</editType><file>reference/Monkatech x Hive - 20240701 - Vertrag.pdf</file></path><path><editType>add</editType><file>server/utils/ticketAutoClose.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/fix-locator-owner.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/generate-shipments.vue</file></path><path><editType>edit</editType><file>server/utils/pushNotifier.ts</file></path><path><editType>edit</editType><file>.claude/rules/requests/tickets.md</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>app/pages/mobile/inventory.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/locator-labels.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/picklist.vue</file></path><path><editType>add</editType><file>app/components/mobile/Header.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/ProductForm.vue</affectedPath><affectedPath>app/utils/productDimensions.ts</affectedPath><affectedPath>app/pages/materials/products/index.vue</affectedPath><affectedPath>app/pages/materials/storage-usage.vue</affectedPath><affectedPath>server/api/materials/storage-usage/dimension-check.get.ts</affectedPath><affectedPath>reference/DPS_15222_04_Hive_Delivery_Prices.pdf</affectedPath><affectedPath>reference/shippingprices/DPS_15222_04_Hive_Delivery_Prices.pdf</affectedPath><affectedPath>.claude/rules/materials/product-dimensions-storage-volume.md</affectedPath><commitId>ba7235d029e64c3409f637f0baaea71c239ae7c5</commitId><timestamp>1793199331000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Products: dimensions are mm — unit notice + plausibility check with 'Convert to mm' on the form and the grid; storage-usage BI dimension check card

Storage rent (m³) is billed from L×W×H×stock; cm/m entries were billed 1 000× too little (wonderhome 2026-10).
analyzeDimensions() is the single check used by ProductForm, the products grid (highlighted cells + warning
toast with a convert action after an inline edit) and the new dimension-check route/card on /materials/storage-usage.
</comment><date>2026-10-28 15:55:31 +0100</date><id>ba7235d029e64c3409f637f0baaea71c239ae7c5</id><msg>Products: dimensions are mm — unit notice + plausibility check with 'Convert to mm' on the form and the grid; storage-usage BI dimension check card</msg><path><editType>edit</editType><file>app/pages/materials/storage-usage.vue</file></path><path><editType>add</editType><file>app/utils/productDimensions.ts</file></path><path><editType>edit</editType><file>app/components/materials/ProductForm.vue</file></path><path><editType>edit</editType><file>app/pages/materials/products/index.vue</file></path><path><editType>add</editType><file>reference/shippingprices/DPS_15222_04_Hive_Delivery_Prices.pdf</file></path><path><editType>add</editType><file>.claude/rules/materials/product-dimensions-storage-volume.md</file></path><path><editType>delete</editType><file>reference/DPS_15222_04_Hive_Delivery_Prices.pdf</file></path><path><editType>add</editType><file>server/api/materials/storage-usage/dimension-check.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/materials/products/index.vue</affectedPath><affectedPath>app/components/materials/ProductForm.vue</affectedPath><commitId>5393f1afd6314b3afb837a46594b99cd9c0161a8</commitId><timestamp>1793199359000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Products: label weight fields as kg (same unit policy as the mm dimensions)
</comment><date>2026-10-28 15:55:59 +0100</date><id>5393f1afd6314b3afb837a46594b99cd9c0161a8</id><msg>Products: label weight fields as kg (same unit policy as the mm dimensions)</msg><path><editType>edit</editType><file>app/pages/materials/products/index.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>app/composables/useOfferVisuals.ts</affectedPath><affectedPath>app/composables/useOfferSoftwareQuote.ts</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>app/components/offers/SoftwareQuoteModal.vue</affectedPath><affectedPath>.claude/rules/offers/contract-and-quote-portals.md</affectedPath><affectedPath>server/api/leads/[id]/visuals.put.ts</affectedPath><commitId>94dc5392a4ff32103efafda16511c83bb057a74d</commitId><timestamp>1793199846000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads: logo + website screenshot stored on the lead once (AD_Image / offer_conditions.visuals) and reused by every offer

Lead hero: upload/replace/remove logo, capture the website screenshot; quote modals (fulfillment + LogShip
Cloud) take both from the prefill, persist what they capture/upload on the lead and show 'am Lead gespeichert'.
</comment><date>2026-10-28 16:04:06 +0100</date><id>94dc5392a4ff32103efafda16511c83bb057a74d</id><msg>Leads: logo + website screenshot stored on the lead once (AD_Image / offer_conditions.visuals) and reused by every offer</msg><path><editType>edit</editType><file>.claude/rules/offers/contract-and-quote-portals.md</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>add</editType><file>server/api/leads/[id]/visuals.put.ts</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/components/offers/SoftwareQuoteModal.vue</file></path><path><editType>add</editType><file>app/composables/useOfferVisuals.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferSoftwareQuote.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/settings/CarrierRateImportModal.vue</affectedPath><affectedPath>app/composables/menu/admin/settings.ts</affectedPath><affectedPath>app/utils/shippingCountryMap.ts</affectedPath><affectedPath>reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_VERTRAG.pdf</affectedPath><affectedPath>app/components/settings/ShippingRateFilterBar.vue</affectedPath><affectedPath>server/api/settings/carrier-rates/[id].get.ts</affectedPath><affectedPath>app/components/settings/price-sheet/PriceSheetPreviewModal.vue</affectedPath><affectedPath>app/components/settings/price-sheet/PriceSheetOptions.vue</affectedPath><affectedPath>app/pages/settings/commission-tables/index.vue</affectedPath><affectedPath>reference/shippingprices/2025 Freight Prices - Pallet Delivery.xlsx</affectedPath><affectedPath>server/api/settings/price-sheet/resolve.post.ts</affectedPath><affectedPath>app/composables/useShippingRateFilter.ts</affectedPath><affectedPath>server/api/settings/carrier-rates/fixtures.get.ts</affectedPath><affectedPath>app/pages/settings/carrier-rates/[id]/edit.vue</affectedPath><affectedPath>server/api/settings/price-sheet/pdf.post.ts</affectedPath><affectedPath>reference/template-cleanup/01-idempiere-truncate.sql</affectedPath><affectedPath>app/components/settings/CarrierRateAction.vue</affectedPath><affectedPath>server/assets/shipping/dhl-contract-2025-07.json</affectedPath><affectedPath>.claude/rules/fulfillment/carrier-rates.md</affectedPath><affectedPath>server/api/settings/carrier-rates/update.put.ts</affectedPath><affectedPath>server/api/settings/carrier-rates/import.post.ts</affectedPath><affectedPath>server/api/settings/price-sheet/row-persist.post.ts</affectedPath><affectedPath>server/utils/shipping/priceSheetTexts.ts</affectedPath><affectedPath>app/utils/shippingPriceSheet.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/components/settings/price-sheet/PriceSheetMatrix.vue</affectedPath><affectedPath>reference/test-scripts/price-sheet-pdf-smoke.mts</affectedPath><affectedPath>server/utils/shipping/priceSheetPdf.ts</affectedPath><affectedPath>app/pages/settings/price-sheet/index.vue</affectedPath><affectedPath>server/api/settings/carrier-rates/index.get.ts</affectedPath><affectedPath>server/api/settings/carrier-rates/destroy.delete.ts</affectedPath><affectedPath>app/components/settings/price-sheet/PriceSheetCellEditor.vue</affectedPath><affectedPath>app/components/settings/CarrierRateForm.vue</affectedPath><affectedPath>reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_P01.pdf</affectedPath><affectedPath>app/pages/settings/carrier-rates/index.vue</affectedPath><affectedPath>server/utils/shipping/priceSheet.ts</affectedPath><affectedPath>app/pages/settings/shipping-cost-overrides/index.vue</affectedPath><affectedPath>server/utils/shipping/carrierRates.ts</affectedPath><affectedPath>app/pages/settings/shipping-costs/index.vue</affectedPath><affectedPath>app/pages/settings/carrier-rates/create.vue</affectedPath><affectedPath>server/utils/shipping/withIdempiere.ts</affectedPath><affectedPath>server/api/settings/carrier-rates/store.post.ts</affectedPath><affectedPath>reference/test-scripts/dhl-contract-parse.mts</affectedPath><affectedPath>server/utils/shipping/carrierRateImport.ts</affectedPath><affectedPath>server/api/settings/price-sheet/cell.post.ts</affectedPath><affectedPath>reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_P02.pdf</affectedPath><commitId>bfd587797b626ffcb8189cafc41d8f773094976b</commitId><timestamp>1793201047000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Settings: carrier contract rates (CUST_CarrierRate, DHL import) + shipping price sheet matrix with Tier 1/2 writes and branded PDF; shared ShippingRateFilterBar
</comment><date>2026-10-28 16:24:07 +0100</date><id>bfd587797b626ffcb8189cafc41d8f773094976b</id><msg>Settings: carrier contract rates (CUST_CarrierRate, DHL import) + shipping price sheet matrix with Tier 1/2 writes and branded PDF; shared ShippingRateFilterBar</msg><path><editType>add</editType><file>.claude/rules/fulfillment/carrier-rates.md</file></path><path><editType>add</editType><file>app/pages/settings/carrier-rates/create.vue</file></path><path><editType>add</editType><file>server/assets/shipping/dhl-contract-2025-07.json</file></path><path><editType>add</editType><file>app/composables/useShippingRateFilter.ts</file></path><path><editType>add</editType><file>server/api/settings/price-sheet/pdf.post.ts</file></path><path><editType>edit</editType><file>app/pages/settings/shipping-costs/index.vue</file></path><path><editType>add</editType><file>app/components/settings/ShippingRateFilterBar.vue</file></path><path><editType>add</editType><file>app/utils/shippingPriceSheet.ts</file></path><path><editType>add</editType><file>server/utils/shipping/priceSheet.ts</file></path><path><editType>add</editType><file>app/components/settings/price-sheet/PriceSheetMatrix.vue</file></path><path><editType>add</editType><file>reference/test-scripts/dhl-contract-parse.mts</file></path><path><editType>edit</editType><file>reference/template-cleanup/01-idempiere-truncate.sql</file></path><path><editType>add</editType><file>server/api/settings/price-sheet/resolve.post.ts</file></path><path><editType>edit</editType><file>app/pages/settings/commission-tables/index.vue</file></path><path><editType>add</editType><file>server/utils/shipping/carrierRates.ts</file></path><path><editType>add</editType><file>reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_P02.pdf</file></path><path><editType>add</editType><file>app/components/settings/price-sheet/PriceSheetPreviewModal.vue</file></path><path><editType>add</editType><file>app/utils/shippingCountryMap.ts</file></path><path><editType>add</editType><file>server/api/settings/price-sheet/row-persist.post.ts</file></path><path><editType>add</editType><file>server/utils/shipping/priceSheetTexts.ts</file></path><path><editType>add</editType><file>reference/shippingprices/2025 Freight Prices - Pallet Delivery.xlsx</file></path><path><editType>add</editType><file>app/components/settings/CarrierRateForm.vue</file></path><path><editType>add</editType><file>app/components/settings/CarrierRateImportModal.vue</file></path><path><editType>add</editType><file>server/api/settings/carrier-rates/fixtures.get.ts</file></path><path><editType>add</editType><file>server/utils/shipping/withIdempiere.ts</file></path><path><editType>add</editType><file>app/components/settings/CarrierRateAction.vue</file></path><path><editType>add</editType><file>app/components/settings/price-sheet/PriceSheetOptions.vue</file></path><path><editType>add</editType><file>server/api/settings/carrier-rates/index.get.ts</file></path><path><editType>add</editType><file>server/utils/shipping/carrierRateImport.ts</file></path><path><editType>add</editType><file>app/components/settings/price-sheet/PriceSheetCellEditor.vue</file></path><path><editType>add</editType><file>app/pages/settings/carrier-rates/index.vue</file></path><path><editType>add</editType><file>server/api/settings/carrier-rates/destroy.delete.ts</file></path><path><editType>add</editType><file>server/api/settings/carrier-rates/store.post.ts</file></path><path><editType>add</editType><file>server/api/settings/carrier-rates/[id].get.ts</file></path><path><editType>add</editType><file>server/api/settings/carrier-rates/update.put.ts</file></path><path><editType>add</editType><file>app/pages/settings/price-sheet/index.vue</file></path><path><editType>add</editType><file>server/api/settings/carrier-rates/import.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_P01.pdf</file></path><path><editType>add</editType><file>server/api/settings/price-sheet/cell.post.ts</file></path><path><editType>edit</editType><file>app/composables/menu/admin/settings.ts</file></path><path><editType>add</editType><file>reference/test-scripts/price-sheet-pdf-smoke.mts</file></path><path><editType>add</editType><file>reference/shippingprices/dhl/VERTRAGSUNTERLAGEN_6380721892_VERTRAG.pdf</file></path><path><editType>add</editType><file>server/utils/shipping/priceSheetPdf.ts</file></path><path><editType>add</editType><file>app/pages/settings/carrier-rates/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/settings/shipping-cost-overrides/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/RecentCallsCard.vue</affectedPath><affectedPath>app/pages/mobile/product.vue</affectedPath><affectedPath>server/api/materials/products/[id]/capture-image.post.ts</affectedPath><affectedPath>app/pages/materials/storage-usage.vue</affectedPath><commitId>ee4a8f43944460d843d740f23a266aa194d1c73c</commitId><timestamp>1793201047000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Storage usage: merchant/warehouse/month/invoiced/product filters (SelectBox) + current m³ list per product with €/day and €/month; mobile product: camera photo capture into the Strapi gallery; dashboard calls card: show call time
</comment><date>2026-10-28 16:24:07 +0100</date><id>ee4a8f43944460d843d740f23a266aa194d1c73c</id><msg>Storage usage: merchant/warehouse/month/invoiced/product filters (SelectBox) + current m³ list per product with €/day and €/month; mobile product: camera photo capture into the Strapi gallery; dashboard calls card: show call time</msg><path><editType>edit</editType><file>app/pages/materials/storage-usage.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/product.vue</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/capture-image.post.ts</file></path><path><editType>edit</editType><file>app/components/dashboard/RecentCallsCard.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/update-files/version.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><commitId>88cc51e42c41b52b0ef6a2a50044bf3e47e00da5</commitId><timestamp>1793201845000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Android app 1.0.73 (versionCode 74): photo capture on the product page
</comment><date>2026-10-28 16:37:25 +0100</date><id>88cc51e42c41b52b0ef6a2a50044bf3e47e00da5</id><msg>Android app 1.0.73 (versionCode 74): photo capture on the product page</msg><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/product.vue</affectedPath><commitId>a8cfb56f88eb3c8b9fd35d65bf98708c580e42a8</commitId><timestamp>1793202371000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile product: in-page camera (getUserMedia, back camera) for product photos instead of the file-chooser capture; Capture section with equal EAN / Foto buttons
</comment><date>2026-10-28 16:46:11 +0100</date><id>a8cfb56f88eb3c8b9fd35d65bf98708c580e42a8</id><msg>Mobile product: in-page camera (getUserMedia, back camera) for product photos instead of the file-chooser capture; Capture section with equal EAN / Foto buttons</msg><path><editType>edit</editType><file>app/pages/mobile/product.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/product.vue</affectedPath><commitId>f507276e33a2a2b4e602c4f169152302ee3a632a</commitId><timestamp>1793203151000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile product: capture buttons pause the scanner focus monitor on pointerdown (lost taps); camera start timeout + Systemkamera fallback; EAN overlay closes via one helper
</comment><date>2026-10-28 16:59:11 +0100</date><id>f507276e33a2a2b4e602c4f169152302ee3a632a</id><msg>Mobile product: capture buttons pause the scanner focus monitor on pointerdown (lost taps); camera start timeout + Systemkamera fallback; EAN overlay closes via one helper</msg><path><editType>edit</editType><file>app/pages/mobile/product.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><commitId>516568ccc124baa6cb47f97aa42e11df10f8fc2c</commitId><timestamp>1793203165000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Android app version bump (release script)
</comment><date>2026-10-28 16:59:25 +0100</date><id>516568ccc124baa6cb47f97aa42e11df10f8fc2c</id><msg>Android app version bump (release script)</msg><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><commitId>6114d50ab9e4bbe374d82c3b520e6199a8208f1f</commitId><timestamp>1793204876000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quote PDF: return base-price note shortened to acceptance, customer identification, system entry, putaway (DE/EN)
</comment><date>2026-10-28 17:27:56 +0100</date><id>6114d50ab9e4bbe374d82c3b520e6199a8208f1f</id><msg>Quote PDF: return base-price note shortened to acceptance, customer identification, system entry, putaway (DE/EN)</msg><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/shipping/flagImages.ts</affectedPath><affectedPath>reference/test-scripts/price-sheet-pdf-smoke.mts</affectedPath><affectedPath>server/utils/shipping/priceSheetPdf.ts</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>.claude/rules/fulfillment/carrier-rates.md</affectedPath><commitId>216f0bd0224bbc8f4b06813093be696bebd6e2fc</commitId><timestamp>1793210966000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Price sheet PDF: country flags in the EU / non-EU / Warenpost tables and country surcharge rows

public/flags SVGs bundled as Nitro server asset assets:flags, rasterised once per process with sharp
(flagImages.ts, 36 px PNG, 1 px border, fixed-width flag column so names align); smoke script mocks the
flags storage; recipe note in carrier-rates.md.
</comment><date>2026-10-28 19:09:26 +0100</date><id>216f0bd0224bbc8f4b06813093be696bebd6e2fc</id><msg>Price sheet PDF: country flags in the EU / non-EU / Warenpost tables and country surcharge rows</msg><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>reference/test-scripts/price-sheet-pdf-smoke.mts</file></path><path><editType>add</editType><file>server/utils/shipping/flagImages.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/carrier-rates.md</file></path><path><editType>edit</editType><file>server/utils/shipping/priceSheetPdf.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/AgGrid/SalesOrder/AgCustomOrderSource.vue</affectedPath><affectedPath>app/components/MarketplaceIcon.vue</affectedPath><commitId>15f8fe46047dba042a4911aa0b769540a9be9bcf</commitId><timestamp>1793211292000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Order sources: Adobe Commerce brand tile (Adobe A on red) + OTTO red-on-white in MarketplaceIcon; sales-orders source column draws brand tiles for amazon/ebay/otto/shopify/shopware/etsy/kaufland/zalando/adobe-commerce instead of hardcoded images
</comment><date>2026-10-28 19:14:52 +0100</date><id>15f8fe46047dba042a4911aa0b769540a9be9bcf</id><msg>Order sources: Adobe Commerce brand tile (Adobe A on red) + OTTO red-on-white in MarketplaceIcon; sales-orders source column draws brand tiles for amazon/ebay/otto/shopify/shopware/etsy/kaufland/zalando/adobe-commerce instead of hardcoded images</msg><path><editType>edit</editType><file>app/components/AgGrid/SalesOrder/AgCustomOrderSource.vue</file></path><path><editType>edit</editType><file>app/components/MarketplaceIcon.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/settings/price-sheet/PriceSheetMatrix.vue</affectedPath><affectedPath>server/utils/shipping/priceSheetPdf.ts</affectedPath><affectedPath>server/utils/shipping/priceSheet.ts</affectedPath><affectedPath>.claude/rules/fulfillment/carrier-rates.md</affectedPath><commitId>a5bd7fc3a443fb233b9f7fcadd66769573b13c53</commitId><timestamp>1793217290000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Price sheet: keep disabled services listed (resolve returns all services; unchecked service vanished and stayed hidden via localStorage), sticky country/service search in the matrix (German DHL names, / focuses, Esc clears, per-section counts), internal row notes no longer printed on the merchant PDF
</comment><date>2026-10-28 20:54:50 +0100</date><id>a5bd7fc3a443fb233b9f7fcadd66769573b13c53</id><msg>Price sheet: keep disabled services listed (resolve returns all services; unchecked service vanished and stayed hidden via localStorage), sticky country/service search in the matrix (German DHL names, / focuses, Esc clears, per-section counts), internal row notes no longer printed on the merchant PDF</msg><path><editType>edit</editType><file>app/components/settings/price-sheet/PriceSheetMatrix.vue</file></path><path><editType>edit</editType><file>server/utils/shipping/priceSheetPdf.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/carrier-rates.md</file></path><path><editType>edit</editType><file>server/utils/shipping/priceSheet.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/demo-instance/vonroc/build-catalog.py</affectedPath><affectedPath>reference/demo-instance/seed-orders-returns.sh</affectedPath><affectedPath>reference/demo-instance/vonroc/masters.json</affectedPath><affectedPath>reference/demo-instance/vonroc/zero-open-order-stock.sh</affectedPath><affectedPath>reference/demo-instance/vonroc/topup-stock.sh</affectedPath><affectedPath>reference/demo-instance/vonroc/return-reasons.txt</affectedPath><affectedPath>reference/demo-instance/vonroc/catalog.json</affectedPath><affectedPath>reference/demo-instance/README.md</affectedPath><commitId>e1c8a33447062451463ed92771ea36c16c30cf2c</commitId><timestamp>1793217290000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Demo tooling: VONROC merchant (vonroc.de Magento GraphQL catalog builder, masters by model code, stock top-up / zero-stock scripts, return reasons), seed-orders-returns MIX=shipped with DHL-style tracking numbers, printed-only shipments, REASONS_FILE; README
</comment><date>2026-10-28 20:54:50 +0100</date><id>e1c8a33447062451463ed92771ea36c16c30cf2c</id><msg>Demo tooling: VONROC merchant (vonroc.de Magento GraphQL catalog builder, masters by model code, stock top-up / zero-stock scripts, return reasons), seed-orders-returns MIX=shipped with DHL-style tracking numbers, printed-only shipments, REASONS_FILE; README</msg><path><editType>add</editType><file>reference/demo-instance/vonroc/zero-open-order-stock.sh</file></path><path><editType>add</editType><file>reference/demo-instance/vonroc/catalog.json</file></path><path><editType>add</editType><file>reference/demo-instance/vonroc/topup-stock.sh</file></path><path><editType>add</editType><file>reference/demo-instance/vonroc/build-catalog.py</file></path><path><editType>add</editType><file>reference/demo-instance/vonroc/return-reasons.txt</file></path><path><editType>edit</editType><file>reference/demo-instance/seed-orders-returns.sh</file></path><path><editType>edit</editType><file>reference/demo-instance/README.md</file></path><path><editType>add</editType><file>reference/demo-instance/vonroc/masters.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>server/utils/offers/agbDefault.ts</affectedPath><affectedPath>server/utils/offers/contractTexts.ts</affectedPath><affectedPath>server/utils/offers/contractPdf.ts</affectedPath><affectedPath>.claude/rules/offers/contract-and-quote-portals.md</affectedPath><commitId>e9d5d032dbf89df1468a6065886429bd8bda05b4</commitId><timestamp>1793217648000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Contract/AGB: carrier cases under LogYou's shipping contract (Nachforschungsauftrag, damage/loss claims, address/delivery clarifications, complaints) billed by time at the hourly rate (contract Versandkosten DE/EN + offer footnote); AGB § 13.6 Schwundtoleranz 1 % → 0,5 % p. a. (only place it is defined, contract placeholder default aligned)
</comment><date>2026-10-28 21:00:48 +0100</date><id>e9d5d032dbf89df1468a6065886429bd8bda05b4</id><msg>Contract/AGB: carrier cases under LogYou's shipping contract (Nachforschungsauftrag, damage/loss claims, address/delivery clarifications, complaints) billed by time at the hourly rate (contract Versandkosten DE/EN + offer footnote); AGB § 13.6 Schwundtoleranz 1 % → 0,5 % p. a. (only place it is defined, contract placeholder default aligned)</msg><path><editType>edit</editType><file>server/utils/offers/agbDefault.ts</file></path><path><editType>edit</editType><file>server/utils/offers/contractTexts.ts</file></path><path><editType>edit</editType><file>server/utils/offers/contractPdf.ts</file></path><path><editType>edit</editType><file>.claude/rules/offers/contract-and-quote-portals.md</file></path><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>.claude/rules/offers/pdf-generation.md</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><commitId>36ef84187503ca39d09327215d4b104159004f63</commitId><timestamp>1793218775000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quote: three configurable fulfillment plans (Start / Wachstum / Premium with name, price, description, feature list, per-plan 'im PDF' flag) edited as cards in the modal and printed as brand cards under the monthly costs; selected plan drives the Servicepauschale for forecast/contract; legacy saved fee maps onto Start
</comment><date>2026-10-28 21:19:35 +0100</date><id>36ef84187503ca39d09327215d4b104159004f63</id><msg>Quote: three configurable fulfillment plans (Start / Wachstum / Premium with name, price, description, feature list, per-plan 'im PDF' flag) edited as cards in the modal and printed as brand cards under the monthly costs; selected plan drives the Servicepauschale for forecast/contract; legacy saved fee maps onto Start</msg><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>.claude/rules/offers/pdf-generation.md</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><commitId>0472dd21e8a930038306cbc34c56bd760b9910b9</commitId><timestamp>1793218999000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quote plans editor: taller description (3 rows) and feature (7 rows) textareas so the default texts show without scrolling
</comment><date>2026-10-28 21:23:19 +0100</date><id>0472dd21e8a930038306cbc34c56bd760b9910b9</id><msg>Quote plans editor: taller description (3 rows) and feature (7 rows) textareas so the default texts show without scrolling</msg><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>.claude/rules/offers/pdf-generation.md</affectedPath><commitId>149ef56dcf85a8d99be10f4bd3104da5d9792ebf</commitId><timestamp>1793219270000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quote PDF: plan cards as one equal-height table that replaces the monthly fee row; selected plan marked 'Empfohlen' instead of 'Ihr Plan'
</comment><date>2026-10-28 21:27:50 +0100</date><id>149ef56dcf85a8d99be10f4bd3104da5d9792ebf</id><msg>Quote PDF: plan cards as one equal-height table that replaces the monthly fee row; selected plan marked 'Empfohlen' instead of 'Ihr Plan'</msg><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>.claude/rules/offers/pdf-generation.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>.claude/rules/offers/pdf-generation.md</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><commitId>bd25164b7c24d06932995a04f1fff305d56fa18d</commitId><timestamp>1793219469000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quote plans: no selection — the first plan ticked 'im PDF' supplies the Servicepauschale (chip on its card), PDF shows the plans without any highlight
</comment><date>2026-10-28 21:31:09 +0100</date><id>bd25164b7c24d06932995a04f1fff305d56fa18d</id><msg>Quote plans: no selection — the first plan ticked 'im PDF' supplies the Servicepauschale (chip on its card), PDF shows the plans without any highlight</msg><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>.claude/rules/offers/pdf-generation.md</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/offers/pdf-generation.md</affectedPath><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><commitId>6ab80acd4a821be044b75056685275663a51b831</commitId><timestamp>1793219638000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quote PDF: plan cards with spacing (white gap columns in the equal-height table), orange accent bar, navy header with orange price, feature list below
</comment><date>2026-10-28 21:33:58 +0100</date><id>6ab80acd4a821be044b75056685275663a51b831</id><msg>Quote PDF: plan cards with spacing (white gap columns in the equal-height table), orange accent bar, navy header with orange price, feature list below</msg><path><editType>edit</editType><file>.claude/rules/offers/pdf-generation.md</file></path><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>133b0c683d401045311c049876d4218a418398cf</commitId><timestamp>1793219769000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page: the two offer buttons sit in one labelled 'Angebot' group and are named Fulfillment-Angebot / LogShip-Angebot (toolbar icon titles aligned)
</comment><date>2026-10-28 21:36:09 +0100</date><id>133b0c683d401045311c049876d4218a418398cf</id><msg>Lead page: the two offer buttons sit in one labelled 'Angebot' group and are named Fulfillment-Angebot / LogShip-Angebot (toolbar icon titles aligned)</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>f8511bdf3ea0936dda5be78c565f74da1a31bd1c</commitId><timestamp>1793220247000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page offer group: buttons read Fulfillment / LogShip-Cloud, 'Angebot' caption darker, bolder and slightly larger
</comment><date>2026-10-28 21:44:07 +0100</date><id>f8511bdf3ea0936dda5be78c565f74da1a31bd1c</id><msg>Lead page offer group: buttons read Fulfillment / LogShip-Cloud, 'Angebot' caption darker, bolder and slightly larger</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>72d31977548a17161c0350bef51f8c59487ce9ca</commitId><timestamp>1793220263000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page offer group: narrower buttons (tighter padding, smaller font)
</comment><date>2026-10-28 21:44:23 +0100</date><id>72d31977548a17161c0350bef51f8c59487ce9ca</id><msg>Lead page offer group: narrower buttons (tighter padding, smaller font)</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>5641d417aaf99cd8d9ccc47a2611055544ba49c5</commitId><timestamp>1793220322000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page offer group: compact buttons (4px 7px padding, 0.7rem text, smaller icons)
</comment><date>2026-10-28 21:45:22 +0100</date><id>5641d417aaf99cd8d9ccc47a2611055544ba49c5</id><msg>Lead page offer group: compact buttons (4px 7px padding, 0.7rem text, smaller icons)</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>7554b436e68e1b7a580814ed8efbbf56612eab8c</commitId><timestamp>1793220345000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page offer group: Fulfillment and LogShip-Cloud buttons share the same width
</comment><date>2026-10-28 21:45:45 +0100</date><id>7554b436e68e1b7a580814ed8efbbf56612eab8c</id><msg>Lead page offer group: Fulfillment and LogShip-Cloud buttons share the same width</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>bbdeb3c6c8f128b3c0c9d3f9ce1cd31246fe6a78</commitId><timestamp>1793220385000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page: KI-Analyse / KI-Konsole become a labelled 'KI' group with compact equal-width buttons Analyse / Chat, matching the Angebot group
</comment><date>2026-10-28 21:46:25 +0100</date><id>bbdeb3c6c8f128b3c0c9d3f9ce1cd31246fe6a78</id><msg>Lead page: KI-Analyse / KI-Konsole become a labelled 'KI' group with compact equal-width buttons Analyse / Chat, matching the Angebot group</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>85d1c963b6992c503910a04fee161e1c25070db4</commitId><timestamp>1793220417000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page groups: KI and Angebot buttons back to the standard button size so they match the Vertrag button height
</comment><date>2026-10-28 21:46:57 +0100</date><id>85d1c963b6992c503910a04fee161e1c25070db4</id><msg>Lead page groups: KI and Angebot buttons back to the standard button size so they match the Vertrag button height</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>220e6c3bb9740e9d1f142a9a9654c937fba6a0ca</commitId><timestamp>1793220447000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page groups: drop the frame so the KI / Angebot buttons sit level with the Vertrag button, caption above
</comment><date>2026-10-28 21:47:27 +0100</date><id>220e6c3bb9740e9d1f142a9a9654c937fba6a0ca</id><msg>Lead page groups: drop the frame so the KI / Angebot buttons sit level with the Vertrag button, caption above</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>fcb4ba6d7801d359d7f1993e109d7df3bb05d367</commitId><timestamp>1793220475000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page groups: frame kept; Vertrag / Mehr get the frame's bottom offset so every button shares one baseline
</comment><date>2026-10-28 21:47:55 +0100</date><id>fcb4ba6d7801d359d7f1993e109d7df3bb05d367</id><msg>Lead page groups: frame kept; Vertrag / Mehr get the frame's bottom offset so every button shares one baseline</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/update-files/version.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><commitId>61b2a9fa700dd32b7fe2e145948060e4a6dc335b</commitId><timestamp>1793220508000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Android app 1.0.75 (versionCode 76): release-script version bump
</comment><date>2026-10-28 21:48:28 +0100</date><id>61b2a9fa700dd32b7fe2e145948060e4a6dc335b</id><msg>Android app 1.0.75 (versionCode 76): release-script version bump</msg><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/product.vue</affectedPath><commitId>fda427288fed8d5a34d1c745e37c23ca041c9a3d</commitId><timestamp>1793221515000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile product page: hide the step guide once a scan landed on an article (shown only while searching or picking among duplicates)
</comment><date>2026-10-28 22:05:15 +0100</date><id>fda427288fed8d5a34d1c745e37c23ca041c9a3d</id><msg>Mobile product page: hide the step guide once a scan landed on an article (shown only while searching or picking among duplicates)</msg><path><editType>edit</editType><file>app/pages/mobile/product.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>781</buildNumber><marked><SHA1>3dbbeedfa45b9ace1df7a02122d5407091b8e992</SHA1><branch><SHA1>3dbbeedfa45b9ace1df7a02122d5407091b8e992</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>3dbbeedfa45b9ace1df7a02122d5407091b8e992</SHA1><branch><SHA1>3dbbeedfa45b9ace1df7a02122d5407091b8e992</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>3dbbeedfa45b9ace1df7a02122d5407091b8e992</SHA1><branch><SHA1>3dbbeedfa45b9ace1df7a02122d5407091b8e992</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'></action><building>false</building><displayName>#781</displayName><duration>58892</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #781</fullDisplayName><id>781</id><inProgress>false</inProgress><keepLog>false</keepLog><number>781</number><queueId>5902</queueId><result>SUCCESS</result><timestamp>1793149200194</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/781/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/listings/adapters/amazon.ts</affectedPath><affectedPath>server/utils/listings/adapters/ebay.ts</affectedPath><affectedPath>server/utils/listings/adapters/types.ts</affectedPath><affectedPath>server/api/sales/sis/listings/[id]/link-product.put.ts</affectedPath><affectedPath>server/utils/listings/listingStore.ts</affectedPath><affectedPath>server/api/sales/sis/listings/import.post.ts</affectedPath><affectedPath>server/api/sales/sis/status.get.ts</affectedPath><affectedPath>server/api/sales/sis/listings/remote.get.ts</affectedPath><affectedPath>app/components/sales/sis/LinkProductModal.vue</affectedPath><affectedPath>server/plugins/listing-outbox-flush.ts</affectedPath><affectedPath>server/api/sales/sis/listings/import-preview.post.ts</affectedPath><affectedPath>server/utils/listings/adapters/index.ts</affectedPath><affectedPath>reference/template-cleanup/01-idempiere-truncate.sql</affectedPath><affectedPath>.claude/rules/marketplaces/marketplace-listings.md</affectedPath><affectedPath>server/api/sales/sis/listings/index.get.ts</affectedPath><affectedPath>server/api/sales/sis/listings/[id]/delist.post.ts</affectedPath><affectedPath>app/pages/fulfillment/amazon-stocks/index.vue</affectedPath><affectedPath>server/utils/listings/adapters/shopify.ts</affectedPath><affectedPath>server/api/sales/sis/listings/[id].put.ts</affectedPath><affectedPath>server/utils/listings/importer.ts</affectedPath><affectedPath>server/utils/listings/rateLimiter.ts</affectedPath><affectedPath>server/utils/listings/routeHelper.ts</affectedPath><affectedPath>server/api/materials/products/search.get.ts</affectedPath><affectedPath>app/components/sales/sis/ChangeHistoryDrawer.vue</affectedPath><affectedPath>server/api/sales/sis/changes/[id]/cancel.post.ts</affectedPath><affectedPath>reference/test-scripts/listing-outbox-smoke.mts</affectedPath><affectedPath>server/utils/amazonSpApi.ts</affectedPath><affectedPath>server/api/sales/sis/changes.get.ts</affectedPath><affectedPath>server/api/sales/sis/listings/[id]/relist.post.ts</affectedPath><affectedPath>server/api/sales/sis/price-update.post.ts</affectedPath><affectedPath>app/components/sales/sis/ListProductsModal.vue</affectedPath><affectedPath>server/api/sales/sis/listings.get.ts</affectedPath><affectedPath>server/api/sales/sis/products-defaults.get.ts</affectedPath><affectedPath>server/api/sales/sis/listings/create.post.ts</affectedPath><affectedPath>server/utils/listings/outbox.ts</affectedPath><affectedPath>app/components/sales/sis/ImportWizard.vue</affectedPath><affectedPath>app/pages/sales/sis/index.vue</affectedPath><affectedPath>server/api/sales/sis/flush.post.ts</affectedPath><affectedPath>server/utils/sisMatching.ts</affectedPath><commitId>95c2ad2c895302268130313dea4eebf6b66b730a</commitId><timestamp>1793098595000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>SIS: persisted marketplace listings with outbox delivery to Amazon

Replaces the report-per-page-load Amazon pricing page with listings managed
in iDempiere (CUST_MarketplaceListing + CUST_MarketplaceListingChange).

- server/utils/listings: listing store (REST, caller/service token), adapter
  contract (Amazon implemented, eBay/Shopify stubs), outbox (claim → coalesce
  → push → settle, stale-claim recovery, feed polling, 5-min spot-check),
  token-bucket rate limiter, importer (report → product match → upsert)
- amazonSpApi: LWA token cache, PUT/DELETE, merge-patch builders for
  purchasable_offer (price, min/max, sale) + fulfillment_availability,
  offer-only PUT, Feeds API (JSON_LISTINGS_FEED), catalog productType,
  competitiveSummary batch
- Nitro plugin: timer flush every 60 s (debounce 20 s, PM2 instance 0 only)
- routes sales/sis: listings (list/edit/delist/relist/link/create/import),
  flush, changes (+cancel), status, products-defaults; old price-update
  removed, report view moved to listings/remote (amazon-stocks page)
- page rewritten on the table + import wizard, list-products modal, change
  history drawer, link-product modal
- template cleanup: both tables in the truncate list; recipe + smoke script
</comment><date>2026-10-27 11:56:35 +0100</date><id>95c2ad2c895302268130313dea4eebf6b66b730a</id><msg>SIS: persisted marketplace listings with outbox delivery to Amazon</msg><path><editType>add</editType><file>server/api/sales/sis/listings/import-preview.post.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/index.get.ts</file></path><path><editType>edit</editType><file>server/utils/amazonSpApi.ts</file></path><path><editType>add</editType><file>server/utils/listings/adapters/shopify.ts</file></path><path><editType>add</editType><file>server/utils/listings/listingStore.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/[id]/link-product.put.ts</file></path><path><editType>add</editType><file>app/components/sales/sis/ImportWizard.vue</file></path><path><editType>add</editType><file>server/api/sales/sis/status.get.ts</file></path><path><editType>delete</editType><file>server/api/sales/sis/listings.get.ts</file></path><path><editType>add</editType><file>server/plugins/listing-outbox-flush.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/changes.get.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/changes/[id]/cancel.post.ts</file></path><path><editType>add</editType><file>server/utils/listings/adapters/ebay.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/[id]/delist.post.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/products-defaults.get.ts</file></path><path><editType>add</editType><file>server/utils/listings/importer.ts</file></path><path><editType>add</editType><file>.claude/rules/marketplaces/marketplace-listings.md</file></path><path><editType>add</editType><file>app/components/sales/sis/LinkProductModal.vue</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/[id]/relist.post.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/import.post.ts</file></path><path><editType>edit</editType><file>app/pages/sales/sis/index.vue</file></path><path><editType>add</editType><file>server/utils/listings/adapters/index.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/remote.get.ts</file></path><path><editType>add</editType><file>server/utils/listings/outbox.ts</file></path><path><editType>add</editType><file>app/components/sales/sis/ListProductsModal.vue</file></path><path><editType>add</editType><file>server/api/sales/sis/flush.post.ts</file></path><path><editType>edit</editType><file>server/api/materials/products/search.get.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/[id].put.ts</file></path><path><editType>add</editType><file>app/components/sales/sis/ChangeHistoryDrawer.vue</file></path><path><editType>edit</editType><file>app/pages/fulfillment/amazon-stocks/index.vue</file></path><path><editType>delete</editType><file>server/api/sales/sis/price-update.post.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/create.post.ts</file></path><path><editType>edit</editType><file>reference/template-cleanup/01-idempiere-truncate.sql</file></path><path><editType>add</editType><file>server/utils/listings/routeHelper.ts</file></path><path><editType>add</editType><file>reference/test-scripts/listing-outbox-smoke.mts</file></path><path><editType>add</editType><file>server/utils/listings/adapters/types.ts</file></path><path><editType>edit</editType><file>server/utils/sisMatching.ts</file></path><path><editType>add</editType><file>server/utils/listings/rateLimiter.ts</file></path><path><editType>add</editType><file>server/utils/listings/adapters/amazon.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/listings/productCreator.ts</affectedPath><affectedPath>server/utils/listings/adapters/amazon.ts</affectedPath><affectedPath>server/api/sales/sis/listings/import.post.ts</affectedPath><affectedPath>server/utils/listings/listingStore.ts</affectedPath><affectedPath>server/api/sales/sis/listings/[id].delete.ts</affectedPath><affectedPath>server/utils/amazonSpApi.ts</affectedPath><affectedPath>server/api/sales/sis/listings/[id]/relist.post.ts</affectedPath><affectedPath>server/plugins/listing-outbox-flush.ts</affectedPath><affectedPath>.claude/rules/marketplaces/marketplace-listings.md</affectedPath><affectedPath>server/api/sales/sis/listings/index.get.ts</affectedPath><affectedPath>app/components/sales/sis/ImportWizard.vue</affectedPath><affectedPath>app/pages/sales/sis/index.vue</affectedPath><affectedPath>server/utils/sisMatching.ts</affectedPath><affectedPath>server/utils/listings/importer.ts</affectedPath><commitId>5b0748aa1fb2f4e53a28e9d6009f4931d7909c8a</commitId><timestamp>1793106229000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>SIS: import creates products/images, delete, BOM stock, reopen closed offers, timezone fix

- Import wizard: "Create missing products" (minimal M_Product, Value = SKU, asin, Amazon price,
  Strapi record) and "Import images from Amazon" (ASIN MAIN catalog picture, only when the product
  has no picture); result counters, pages of 40 with side effects
- Per-row links to the Amazon offer page and the Seller Central offer editor (marketplace domain
  from the order source), "listed on Amazon" date label
- DELETE listings/[id]: remove the SIS record + change history (409 while sending); row + bulk buttons
- BOM rows: components with stock from pp_product_bom; internal qty = first component's on-hand,
  hover popover with all components
- Relist reopens a "Closed" Amazon offer (purchasable_offer replace without end_at + qty) and is
  allowed for inactive listings; VALID preview results are non-blocking
- Outbox: iDempiere Created/Updated are server-local with a literal Z -&gt; serverLocalToIso()
  (IDEMPIERE_TZ); the debounce held every change for one UTC-offset hour before. Timer first run 10 s
- Page layout: wider product column with fixed-width name, tighter numeric columns, toolbar and
  selection-bar buttons styled, lighter link icons
</comment><date>2026-10-27 14:03:49 +0100</date><id>5b0748aa1fb2f4e53a28e9d6009f4931d7909c8a</id><msg>SIS: import creates products/images, delete, BOM stock, reopen closed offers, timezone fix</msg><path><editType>edit</editType><file>server/api/sales/sis/listings/[id]/relist.post.ts</file></path><path><editType>edit</editType><file>app/components/sales/sis/ImportWizard.vue</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/import.post.ts</file></path><path><editType>edit</editType><file>server/utils/listings/importer.ts</file></path><path><editType>edit</editType><file>server/utils/amazonSpApi.ts</file></path><path><editType>edit</editType><file>.claude/rules/marketplaces/marketplace-listings.md</file></path><path><editType>edit</editType><file>server/plugins/listing-outbox-flush.ts</file></path><path><editType>edit</editType><file>app/pages/sales/sis/index.vue</file></path><path><editType>add</editType><file>server/api/sales/sis/listings/[id].delete.ts</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/index.get.ts</file></path><path><editType>edit</editType><file>server/utils/sisMatching.ts</file></path><path><editType>add</editType><file>server/utils/listings/productCreator.ts</file></path><path><editType>edit</editType><file>server/utils/listings/adapters/amazon.ts</file></path><path><editType>edit</editType><file>server/utils/listings/listingStore.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/listings/productCreator.ts</affectedPath><affectedPath>server/utils/listings/adapters/types.ts</affectedPath><affectedPath>server/utils/listings/listingStore.ts</affectedPath><affectedPath>server/utils/listings/adapters/index.ts</affectedPath><affectedPath>app/components/sales/sis/ListProductsModal.vue</affectedPath><affectedPath>.claude/rules/marketplaces/marketplace-listings.md</affectedPath><affectedPath>server/api/sales/sis/order-sources.get.ts</affectedPath><affectedPath>server/api/sales/sis/listings/create.post.ts</affectedPath><affectedPath>server/utils/listings/outbox.ts</affectedPath><affectedPath>server/api/sales/sis/listings/index.get.ts</affectedPath><affectedPath>app/pages/sales/sis/index.vue</affectedPath><affectedPath>app/components/sales/sis/ImportWizard.vue</affectedPath><affectedPath>server/utils/listings/adapters/shopify.ts</affectedPath><affectedPath>server/utils/listings/importer.ts</affectedPath><commitId>5e251ffa9442317ebfb0a3d42838497529cb0b06</commitId><timestamp>1793107731000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>SIS: Shopify listings adapter, marketplace-aware page/wizard, BOM filter, modal buttons

- adapters/shopify.ts: GraphQL Admin API 2025-10 for `shopify` (token) and `shopify-new`
  (client credentials) sources; one row per variant (variant / product / inventoryItem GIDs),
  import with available qty at the configured or first location, price via
  productVariantsBulkUpdate, qty via inventorySetQuantities (+ inventoryActivate), delist/relist
  as qty, create via productCreate + variant sku/price + publish; synchronous results settle as
  confirmed (PushResult.confirmed) and carry the assigned ids (PushResult.remote)
- order-sources lists every source with a listings adapter (marketplace key + label); listings
  route returns marketplace + shop link data; create route handles Shopify (no ASIN, SKU key)
- importer: index-aligned preview rows, external ids / meta / image URL per row, image import
  from the marketplace picture for non-Amazon sources (importImageFromUrlIfMissing)
- page: order-source picker with marketplace icons, generic "Import listings", labels/columns/
  links per marketplace (Buy Box, FBA, ASIN, min/max = Amazon only), BOM stat tile + filter
- wizard: source picker with icon, BOM tag/filter/count, fixed-width name column, styled buttons;
  list-products modal: Shopify mode without ASIN/min/max, styled buttons
</comment><date>2026-10-27 14:28:51 +0100</date><id>5e251ffa9442317ebfb0a3d42838497529cb0b06</id><msg>SIS: Shopify listings adapter, marketplace-aware page/wizard, BOM filter, modal buttons</msg><path><editType>edit</editType><file>server/utils/listings/outbox.ts</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/create.post.ts</file></path><path><editType>edit</editType><file>server/utils/listings/listingStore.ts</file></path><path><editType>edit</editType><file>server/utils/listings/adapters/types.ts</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/index.get.ts</file></path><path><editType>edit</editType><file>server/api/sales/sis/order-sources.get.ts</file></path><path><editType>edit</editType><file>app/pages/sales/sis/index.vue</file></path><path><editType>edit</editType><file>server/utils/listings/productCreator.ts</file></path><path><editType>edit</editType><file>server/utils/listings/adapters/index.ts</file></path><path><editType>edit</editType><file>server/utils/listings/importer.ts</file></path><path><editType>edit</editType><file>app/components/sales/sis/ListProductsModal.vue</file></path><path><editType>edit</editType><file>server/utils/listings/adapters/shopify.ts</file></path><path><editType>edit</editType><file>.claude/rules/marketplaces/marketplace-listings.md</file></path><path><editType>edit</editType><file>app/components/sales/sis/ImportWizard.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/listings/adapters/index.ts</affectedPath><affectedPath>app/components/sales/sis/ChangeHistoryDrawer.vue</affectedPath><affectedPath>.claude/rules/marketplaces/marketplace-listings.md</affectedPath><affectedPath>server/utils/listings/adapters/shopware.ts</affectedPath><affectedPath>app/utils/sisDate.ts</affectedPath><affectedPath>server/api/sales/sis/listings/index.get.ts</affectedPath><affectedPath>app/pages/sales/sis/index.vue</affectedPath><affectedPath>app/components/sales/sis/ImportWizard.vue</affectedPath><commitId>621500391179e3a8a1c9f549d0d647c3b17b3916</commitId><timestamp>1793109326000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>SIS: Shopware 6 adapter, multi-source list, wizard filters, German dates, coloured marketplace icons

- adapters/shopware.ts: Admin API (integration client credentials against {marketplace_url}/oauth/token),
  one row per sellable product (variants inherit name/price/cover/tax from the parent), price patch replaces
  only the default-currency entry (net from the product tax rate), qty = stock, create via POST /product with
  storefront visibilities; synchronous confirm; registry maps Marketplace `shopware6`
- GET listings accepts orderSourceId=a,b,c or all=1, enriches per org and returns per-source marketplace /
  link data; page: checkbox picker with "All order sources", Source column, per-row marketplace for labels,
  links, Buy Box cells, Send now across the selection; wizard keeps its own switchable source
- Import wizard: "Only with ERP stock" (+ ERP qty column) and "Only active" filters, fixed-width name column
- German date/time formatting (app/utils/sisDate.ts) on the page, wizard and history drawer
- Brand-coloured MDI marketplace icons (Tabler 2.21 has no Shopify glyph) in picker, rows and wizard
- Thumbnail @error fallback to the placeholder (a broken picture no longer stretches the row)
- Styled modal buttons, aligned BOM tag in the wizard
</comment><date>2026-10-27 14:55:26 +0100</date><id>621500391179e3a8a1c9f549d0d647c3b17b3916</id><msg>SIS: Shopware 6 adapter, multi-source list, wizard filters, German dates, coloured marketplace icons</msg><path><editType>add</editType><file>app/utils/sisDate.ts</file></path><path><editType>edit</editType><file>app/pages/sales/sis/index.vue</file></path><path><editType>edit</editType><file>app/components/sales/sis/ChangeHistoryDrawer.vue</file></path><path><editType>edit</editType><file>app/components/sales/sis/ImportWizard.vue</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/index.get.ts</file></path><path><editType>edit</editType><file>.claude/rules/marketplaces/marketplace-listings.md</file></path><path><editType>add</editType><file>server/utils/listings/adapters/shopware.ts</file></path><path><editType>edit</editType><file>server/utils/listings/adapters/index.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/materials/transactions.get.ts</affectedPath><affectedPath>app/pages/bi/shipping-performance.vue</affectedPath><affectedPath>server/utils/berlinTime.ts</affectedPath><affectedPath>app/pages/materials/transactions-by-org.vue</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><affectedPath>.claude/rules/idempiere/timestamps-timezone.md</affectedPath><affectedPath>app/composables/useTransactionReportPdf.ts</affectedPath><affectedPath>app/composables/menu/admin/bi.ts</affectedPath><affectedPath>server/api/materials/transactions-by-org.get.ts</affectedPath><affectedPath>server/utils/transactionEnrichHelper.ts</affectedPath><affectedPath>server/api/bi/shipping-performance.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>5748e244b3fff29b0345ca95c39db05423196555</commitId><timestamp>1793112953000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>BI: Transactions by Org page + Shipping Performance (cut-off SLA) page

- /materials/transactions-by-org: all M_Transaction rows of one org/warehouse in a date window,
  shared enrichment helper (transactionEnrichHelper) now also used by the product history route,
  inventory/movement document links, warehouse column, Excel/CSV/PDF export
- /bi/shipping-performance: cut-off SLA per merchant (c_bpartner.CutOffTime, default 14:00,
  override), working days minus CUST_NonWorkingDays, Berlin timezone handling (berlinTime.ts),
  KPIs, month/day/hour/weekday/lateness charts, source table, order grid
- sidebar + BI mega menu entries, en/de/es translations
- recipe: iDempiere REST timestamp semantics (Created = Berlin local with fake Z)
</comment><date>2026-10-27 15:55:53 +0100</date><id>5748e244b3fff29b0345ca95c39db05423196555</id><msg>BI: Transactions by Org page + Shipping Performance (cut-off SLA) page</msg><path><editType>add</editType><file>.claude/rules/idempiere/timestamps-timezone.md</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>add</editType><file>server/api/bi/shipping-performance.get.ts</file></path><path><editType>add</editType><file>app/pages/bi/shipping-performance.vue</file></path><path><editType>add</editType><file>app/pages/materials/transactions-by-org.vue</file></path><path><editType>add</editType><file>server/api/materials/transactions-by-org.get.ts</file></path><path><editType>edit</editType><file>server/api/materials/transactions.get.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/composables/menu/admin/bi.ts</file></path><path><editType>add</editType><file>server/utils/transactionEnrichHelper.ts</file></path><path><editType>edit</editType><file>app/composables/useTransactionReportPdf.ts</file></path><path><editType>add</editType><file>server/utils/berlinTime.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/utils/scanCode.ts</affectedPath><affectedPath>server/api/idempiere-auth/user.get.ts</affectedPath><affectedPath>app/pages/mobile/return.vue</affectedPath><affectedPath>app/pages/integrations/returns-desktop.vue</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><commitId>fc75bdef0da02ce98b346ca350f375b5b536b6fd</commitId><timestamp>1793119607000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile return: DPD routing-barcode + multi-parcel scan lookup, partner-search overview, profile user line

- shipmentScanCandidates/shipmentScanFilter (app/utils/scanCode.ts): a DPD label scan is the
  28-char routing code (% + postcode + 14-digit parcel no + service + country) while M_InOut
  stores only the parcel number; parcels 2..n live in trackingnoarray. Used by the mobile return
  page, the dashboard scan dispatcher and the desktop returns page.
- Return page: external-RMA hit without InOut_ID offers the customer's shipments instead of
  'not found' (standalone RMAs from the Amazon import); selection list shows positions
  (qty, name, SKU); detail shows all product identifiers, 2-line names, back-to-selection
  button; e-mail notification on by default.
- /api/idempiere-auth/user was missing (profile modal showed no user data); cookie-based route
  added; 'Angemeldet als …' shown next to the app-update check.
</comment><date>2026-10-27 17:46:47 +0100</date><id>fc75bdef0da02ce98b346ca350f375b5b536b6fd</id><msg>Mobile return: DPD routing-barcode + multi-parcel scan lookup, partner-search overview, profile user line</msg><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/return.vue</file></path><path><editType>add</editType><file>server/api/idempiere-auth/user.get.ts</file></path><path><editType>edit</editType><file>app/pages/integrations/returns-desktop.vue</file></path><path><editType>edit</editType><file>app/utils/scanCode.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/nuxt/ui-components.md</affectedPath><affectedPath>app/pages/sales/sis/index.vue</affectedPath><affectedPath>app/components/MarketplaceIcon.vue</affectedPath><commitId>cc223c5bf47e0e748adee95b2141f4969b1dfb76</commitId><timestamp>1793119607000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>SIS: real marketplace brand marks (MarketplaceIcon component, Simple Icons on solid brand tiles)
</comment><date>2026-10-27 17:46:47 +0100</date><id>cc223c5bf47e0e748adee95b2141f4969b1dfb76</id><msg>SIS: real marketplace brand marks (MarketplaceIcon component, Simple Icons on solid brand tiles)</msg><path><editType>add</editType><file>app/components/MarketplaceIcon.vue</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/ui-components.md</file></path><path><editType>edit</editType><file>app/pages/sales/sis/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/src/main/res/mipmap-xhdpi/ic_launcher.png</affectedPath><affectedPath>reference/SVG/Artboard 7.svg</affectedPath><affectedPath>reference/SVG/Artboard 8.svg</affectedPath><affectedPath>public/assets/brand/logship-mark-white.svg</affectedPath><affectedPath>android/app/src/main/res/drawable-port-hdpi/splash.png</affectedPath><affectedPath>android/app/src/main/res/drawable/splash.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png</affectedPath><affectedPath>reference/SVG/Artboard 6.svg</affectedPath><affectedPath>reference/SVG/Artboard 10.svg</affectedPath><affectedPath>android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png</affectedPath><affectedPath>reference/SVG/Artboard 9.svg</affectedPath><affectedPath>android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png</affectedPath><affectedPath>public/assets/brand/logship-logo-black.svg</affectedPath><affectedPath>reference/SVG/Artboard 5.svg</affectedPath><affectedPath>public/assets/brand/logship-logo.svg</affectedPath><affectedPath>.claude/rules/mobile/capacitor-app-build.md</affectedPath><affectedPath>android/app/src/main/res/drawable-land-hdpi/splash.png</affectedPath><affectedPath>public/assets/brand/logship-mark.svg</affectedPath><affectedPath>public/icon-maskable-512x512.png</affectedPath><affectedPath>public/assets/brand/logship-mark-black.svg</affectedPath><affectedPath>reference/SVG/Artboard 4.svg</affectedPath><affectedPath>android/app/src/main/res/drawable-land-xxhdpi/splash.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png</affectedPath><affectedPath>public/icon-152x152.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png</affectedPath><affectedPath>android/app/src/main/res/drawable-land-xhdpi/splash.png</affectedPath><affectedPath>public/icon.png</affectedPath><affectedPath>android/app/src/main/res/drawable-land-xxxhdpi/splash.png</affectedPath><affectedPath>reference/SVG/Artboard 3.svg</affectedPath><affectedPath>android/app/src/main/res/drawable-port-mdpi/splash.png</affectedPath><affectedPath>public/favicon-32x32.png</affectedPath><affectedPath>public/assets/brand/logship-logo-mark-blue.svg</affectedPath><affectedPath>public/icon-384x384.png</affectedPath><affectedPath>android/app/src/main/res/values/ic_launcher_background.xml</affectedPath><affectedPath>public/assets/brand/logship-logo-white-text.svg</affectedPath><affectedPath>public/favicon-16x16.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png</affectedPath><affectedPath>public/icon-72x72.png</affectedPath><affectedPath>reference/SVG/Artboard 2.svg</affectedPath><affectedPath>public/icon-192x192.png</affectedPath><affectedPath>public/icon-144x144.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png</affectedPath><affectedPath>android/app/src/main/res/drawable-port-xhdpi/splash.png</affectedPath><affectedPath>reference/SVG/Artboard 1.svg</affectedPath><affectedPath>android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png</affectedPath><affectedPath>android/app/src/main/res/drawable-land-mdpi/splash.png</affectedPath><affectedPath>android/app/src/main/res/drawable-port-xxhdpi/splash.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png</affectedPath><affectedPath>public/icon-96x96.png</affectedPath><affectedPath>public/icon-512x512.png</affectedPath><affectedPath>android/app/src/main/res/mipmap-mdpi/ic_launcher.png</affectedPath><affectedPath>public/assets/brand/logship-logo-on-dark.svg</affectedPath><affectedPath>scripts/generate-icons.js</affectedPath><affectedPath>public/apple-touch-icon.png</affectedPath><affectedPath>public/icon-128x128.png</affectedPath><affectedPath>public/assets/brand/logship-logo-white.svg</affectedPath><affectedPath>android/app/src/main/res/mipmap-hdpi/ic_launcher.png</affectedPath><affectedPath>public/icon-maskable-192x192.png</affectedPath><affectedPath>android/app/src/main/res/drawable-port-xxxhdpi/splash.png</affectedPath><commitId>1166bdce969eebf8235c6f7fca08a6fe6456dbdb</commitId><timestamp>1793119607000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Brand assets: vector LogShip marks + regenerated PWA / Android launcher icons and splash screens

public/assets/brand/*.svg cropped from reference/SVG (official artwork); scripts/generate-icons.js
now renders PWA icons (+maskable), apple-touch-icon, favicons, Android mipmaps (legacy, round,
adaptive foreground, background #1E5BFF) and all splash sizes from them.
</comment><date>2026-10-27 17:46:47 +0100</date><id>1166bdce969eebf8235c6f7fca08a6fe6456dbdb</id><msg>Brand assets: vector LogShip marks + regenerated PWA / Android launcher icons and splash screens</msg><path><editType>edit</editType><file>android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png</file></path><path><editType>add</editType><file>public/assets/brand/logship-logo-white-text.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-port-xxxhdpi/splash.png</file></path><path><editType>add</editType><file>reference/SVG/Artboard 10.svg</file></path><path><editType>add</editType><file>public/assets/brand/logship-mark-black.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-land-mdpi/splash.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-mdpi/ic_launcher.png</file></path><path><editType>edit</editType><file>public/icon-192x192.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png</file></path><path><editType>add</editType><file>public/assets/brand/logship-logo-on-dark.svg</file></path><path><editType>add</editType><file>reference/SVG/Artboard 1.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-land-xxhdpi/splash.png</file></path><path><editType>edit</editType><file>public/icon-144x144.png</file></path><path><editType>add</editType><file>reference/SVG/Artboard 4.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-port-xhdpi/splash.png</file></path><path><editType>edit</editType><file>public/icon-72x72.png</file></path><path><editType>add</editType><file>public/assets/brand/logship-logo-mark-blue.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png</file></path><path><editType>edit</editType><file>public/icon-384x384.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-port-hdpi/splash.png</file></path><path><editType>add</editType><file>public/assets/brand/logship-logo-black.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-port-mdpi/splash.png</file></path><path><editType>edit</editType><file>public/favicon-16x16.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png</file></path><path><editType>edit</editType><file>public/icon-128x128.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png</file></path><path><editType>edit</editType><file>public/icon-maskable-512x512.png</file></path><path><editType>edit</editType><file>public/icon-512x512.png</file></path><path><editType>edit</editType><file>public/icon-152x152.png</file></path><path><editType>add</editType><file>public/assets/brand/logship-mark.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-land-xxxhdpi/splash.png</file></path><path><editType>edit</editType><file>public/icon.png</file></path><path><editType>edit</editType><file>.claude/rules/mobile/capacitor-app-build.md</file></path><path><editType>edit</editType><file>public/icon-maskable-192x192.png</file></path><path><editType>add</editType><file>reference/SVG/Artboard 8.svg</file></path><path><editType>edit</editType><file>public/favicon-32x32.png</file></path><path><editType>add</editType><file>reference/SVG/Artboard 3.svg</file></path><path><editType>add</editType><file>reference/SVG/Artboard 5.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-land-hdpi/splash.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-land-xhdpi/splash.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/values/ic_launcher_background.xml</file></path><path><editType>edit</editType><file>scripts/generate-icons.js</file></path><path><editType>edit</editType><file>public/apple-touch-icon.png</file></path><path><editType>add</editType><file>public/assets/brand/logship-mark-white.svg</file></path><path><editType>edit</editType><file>public/icon-96x96.png</file></path><path><editType>add</editType><file>reference/SVG/Artboard 7.svg</file></path><path><editType>add</editType><file>reference/SVG/Artboard 9.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xhdpi/ic_launcher.png</file></path><path><editType>add</editType><file>reference/SVG/Artboard 2.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable/splash.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png</file></path><path><editType>add</editType><file>reference/SVG/Artboard 6.svg</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-hdpi/ic_launcher.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/drawable-port-xxhdpi/splash.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png</file></path><path><editType>edit</editType><file>android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png</file></path><path><editType>add</editType><file>public/assets/brand/logship-logo-white.svg</file></path><path><editType>add</editType><file>public/assets/brand/logship-logo.svg</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/security-keys/index.vue</affectedPath><affectedPath>server/utils/webauthnIndex.ts</affectedPath><affectedPath>app/components/users/SecurityKeyEnrolModal.vue</affectedPath><affectedPath>server/api/admin/webauthn/keys.get.ts</affectedPath><commitId>340ac5c6da72203f50c359a2edf02ba14012419a</commitId><timestamp>1793119607000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Security keys: show the merchant / organisation each user is assigned to (list, phone cards, enrol picker)
</comment><date>2026-10-27 17:46:47 +0100</date><id>340ac5c6da72203f50c359a2edf02ba14012419a</id><msg>Security keys: show the merchant / organisation each user is assigned to (list, phone cards, enrol picker)</msg><path><editType>edit</editType><file>app/pages/users/security-keys/index.vue</file></path><path><editType>edit</editType><file>app/components/users/SecurityKeyEnrolModal.vue</file></path><path><editType>edit</editType><file>server/api/admin/webauthn/keys.get.ts</file></path><path><editType>edit</editType><file>server/utils/webauthnIndex.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/partners/partners/[id]/edit.vue</affectedPath><affectedPath>server/api/partners/partners/update.put.ts</affectedPath><affectedPath>app/components/partners/PartnerForm.vue</affectedPath><affectedPath>.claude/rules/partners/partner-edit-form.md</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>e6ab90c18030fb404309ed33b6908017e1725a27</commitId><timestamp>1793119608000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Partners: editable cut-off time (C_BPartner.CutOffTime, Time column 'HH:mm:ssZ'); shorter top-bar labels 'LS generieren' / 'Kommis'
</comment><date>2026-10-27 17:46:48 +0100</date><id>e6ab90c18030fb404309ed33b6908017e1725a27</id><msg>Partners: editable cut-off time (C_BPartner.CutOffTime, Time column 'HH:mm:ssZ'); shorter top-bar labels 'LS generieren' / 'Kommis'</msg><path><editType>edit</editType><file>app/pages/partners/partners/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/api/partners/partners/update.put.ts</file></path><path><editType>edit</editType><file>.claude/rules/partners/partner-edit-form.md</file></path><path><editType>edit</editType><file>app/components/partners/PartnerForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/ci/jenkins-job-deploy-instance.xml</affectedPath><affectedPath>reference/demo-instance/seed-orders-returns.sh</affectedPath><affectedPath>reference/template-cleanup/TEMPLATE-README.md</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>reference/demo-instance/seed-demo-data.sh</affectedPath><affectedPath>server/utils/products/bundleImage.ts</affectedPath><affectedPath>.claude/rules/materials/bom-bundle-image.md</affectedPath><affectedPath>reference/demo-instance/make-demo-photo.py</affectedPath><affectedPath>app/components/materials/ProductStockLocatorsCard.vue</affectedPath><affectedPath>reference/demo-instance/kazaar/catalog.json</affectedPath><affectedPath>reference/demo-instance/kazaar/consignees.json</affectedPath><affectedPath>app/components/materials/ProductStockActionModal.vue</affectedPath><affectedPath>reference/ci/deploy-instance.sh</affectedPath><affectedPath>app/components/materials/ProductForm.vue</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>reference/demo-instance/kazaar/consignees-v1.json</affectedPath><affectedPath>app/pages/materials/products/[id]/edit.vue</affectedPath><affectedPath>server/utils/products/bundleImageCompose.ts</affectedPath><affectedPath>reference/template-cleanup/03-neutralize-env.sh</affectedPath><affectedPath>.claude/rules/nuxt/dependency-upgrades.md</affectedPath><affectedPath>reference/template-cleanup/05-apply-env-overrides.sh</affectedPath><affectedPath>reference/demo-instance/hess/masters.json</affectedPath><affectedPath>reference/template-cleanup/README.md</affectedPath><affectedPath>reference/ci/deploy-production.sh</affectedPath><affectedPath>reference/test-scripts/bundle-image-compose.mts</affectedPath><affectedPath>reference/demo-instance/rename-consignees.sh</affectedPath><affectedPath>reference/template-cleanup/sync-from-prod.sh</affectedPath><affectedPath>.claude/rules/materials/product-stock-actions.md</affectedPath><affectedPath>reference/demo-instance/kazaar/catalog-raw.json</affectedPath><affectedPath>reference/template-cleanup/04-set-instance-identity.sh</affectedPath><affectedPath>.nvmrc</affectedPath><affectedPath>reference/demo-instance/import-merchant-catalog.sh</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>reference/edge-proxy/README.md</affectedPath><affectedPath>app/components/materials/ProductBomModal.vue</affectedPath><affectedPath>reference/demo-instance/kazaar/build-catalog.py</affectedPath><affectedPath>reference/template-cleanup/clone-logship-instance.sh</affectedPath><affectedPath>app/components/SelectBox.vue</affectedPath><affectedPath>server/api/materials/products/[id]/bom/bundle-image.post.ts</affectedPath><affectedPath>reference/template-cleanup/REFRESH-QUICKSTART.md</affectedPath><affectedPath>server/api/mobile/product-lookup.post.ts</affectedPath><affectedPath>reference/demo-instance/build-consignees.py</affectedPath><commitId>b68726395c832b56c7de441025404da6e090d34b</commitId><timestamp>1793119608000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>WIP from previous sessions: BOM bundle image (KI-Bild), SelectBox spinner fix, product stock card, mobile tasks, product-lookup, deploy/template/demo-instance scripts, app version bump
</comment><date>2026-10-27 17:46:48 +0100</date><id>b68726395c832b56c7de441025404da6e090d34b</id><msg>WIP from previous sessions: BOM bundle image (KI-Bild), SelectBox spinner fix, product stock card, mobile tasks, product-lookup, deploy/template/demo-instance scripts, app version bump</msg><path><editType>add</editType><file>reference/demo-instance/seed-demo-data.sh</file></path><path><editType>edit</editType><file>app/components/SelectBox.vue</file></path><path><editType>edit</editType><file>reference/edge-proxy/README.md</file></path><path><editType>edit</editType><file>app/components/materials/ProductStockLocatorsCard.vue</file></path><path><editType>add</editType><file>reference/demo-instance/kazaar/catalog-raw.json</file></path><path><editType>edit</editType><file>reference/demo-instance/hess/masters.json</file></path><path><editType>edit</editType><file>app/components/materials/ProductStockActionModal.vue</file></path><path><editType>add</editType><file>reference/demo-instance/seed-orders-returns.sh</file></path><path><editType>edit</editType><file>.nvmrc</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>add</editType><file>reference/ci/deploy-instance.sh</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/dependency-upgrades.md</file></path><path><editType>add</editType><file>reference/demo-instance/rename-consignees.sh</file></path><path><editType>add</editType><file>reference/template-cleanup/sync-from-prod.sh</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/bom/bundle-image.post.ts</file></path><path><editType>edit</editType><file>app/components/materials/ProductBomModal.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>add</editType><file>reference/demo-instance/make-demo-photo.py</file></path><path><editType>edit</editType><file>reference/template-cleanup/TEMPLATE-README.md</file></path><path><editType>edit</editType><file>app/components/materials/ProductForm.vue</file></path><path><editType>edit</editType><file>app/pages/materials/products/[id]/edit.vue</file></path><path><editType>add</editType><file>reference/ci/jenkins-job-deploy-instance.xml</file></path><path><editType>add</editType><file>server/utils/products/bundleImage.ts</file></path><path><editType>edit</editType><file>reference/ci/deploy-production.sh</file></path><path><editType>edit</editType><file>reference/template-cleanup/README.md</file></path><path><editType>add</editType><file>reference/template-cleanup/05-apply-env-overrides.sh</file></path><path><editType>add</editType><file>reference/demo-instance/kazaar/consignees-v1.json</file></path><path><editType>edit</editType><file>server/api/mobile/product-lookup.post.ts</file></path><path><editType>edit</editType><file>reference/template-cleanup/04-set-instance-identity.sh</file></path><path><editType>edit</editType><file>reference/template-cleanup/clone-logship-instance.sh</file></path><path><editType>edit</editType><file>reference/template-cleanup/REFRESH-QUICKSTART.md</file></path><path><editType>edit</editType><file>.claude/rules/materials/product-stock-actions.md</file></path><path><editType>add</editType><file>reference/demo-instance/import-merchant-catalog.sh</file></path><path><editType>add</editType><file>reference/demo-instance/build-consignees.py</file></path><path><editType>add</editType><file>server/utils/products/bundleImageCompose.ts</file></path><path><editType>add</editType><file>.claude/rules/materials/bom-bundle-image.md</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>add</editType><file>reference/demo-instance/kazaar/catalog.json</file></path><path><editType>edit</editType><file>reference/template-cleanup/03-neutralize-env.sh</file></path><path><editType>add</editType><file>reference/test-scripts/bundle-image-compose.mts</file></path><path><editType>add</editType><file>reference/demo-instance/kazaar/consignees.json</file></path><path><editType>add</editType><file>reference/demo-instance/kazaar/build-catalog.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/idempiere/timestamps-timezone.md</affectedPath><affectedPath>server/api/dashboard/prime-due-today.get.ts</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/components/partners/PartnerForm.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>e70cfa443fd9179caca9afadffd10083522d0c8d</commitId><timestamp>1793121833000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard SameDay card: per-merchant cut-off from C_BPartner.CutOffTime (default 14:00)

prime-due-today computes each SameDay merchant's deadline from its own cut-off; the header
counts down to the nearest upcoming deadline, org chips show the cut-off when merchants
differ, tooltip lists all. Texts no longer hard-code 14:03.
</comment><date>2026-10-27 18:23:53 +0100</date><id>e70cfa443fd9179caca9afadffd10083522d0c8d</id><msg>Dashboard SameDay card: per-merchant cut-off from C_BPartner.CutOffTime (default 14:00)</msg><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/partners/PartnerForm.vue</file></path><path><editType>edit</editType><file>server/api/dashboard/prime-due-today.get.ts</file></path><path><editType>edit</editType><file>.claude/rules/idempiere/timestamps-timezone.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/plugins/listing-outbox-flush.ts</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>.claude/rules/mobile/capacitor-app-build.md</affectedPath><commitId>f20f4767fb2421e81c1c909f6b3458cdd4a8e20d</commitId><timestamp>1793122251000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fix build:app hang: listing-outbox timer skipped during prerender + unref'd timers

nuxt generate boots Nitro in-process, so the listing-outbox plugin armed its
setTimeout/setInterval inside the build and kept the process alive ("still
running: 2 timers"); it would also have flushed the prod outbox from a dev
machine. Gate on import.meta.prerender, unref the timers, recipe note in
mobile/capacitor-app-build.md. Includes the app version bump 1.0.71 (code 72)
left by the aborted release runs.
</comment><date>2026-10-27 18:30:51 +0100</date><id>f20f4767fb2421e81c1c909f6b3458cdd4a8e20d</id><msg>Fix build:app hang: listing-outbox timer skipped during prerender + unref'd timers</msg><path><editType>edit</editType><file>server/plugins/listing-outbox-flush.ts</file></path><path><editType>edit</editType><file>.claude/rules/mobile/capacitor-app-build.md</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/listings/adapters/ebay.ts</affectedPath><affectedPath>server/utils/listings/adapters/types.ts</affectedPath><affectedPath>server/api/sales/sis/listings/[id]/relist.post.ts</affectedPath><affectedPath>public/assets/brand/amazon-icon.png</affectedPath><affectedPath>server/utils/listings/adapters/index.ts</affectedPath><affectedPath>.claude/rules/marketplaces/marketplace-listings.md</affectedPath><affectedPath>server/api/sales/sis/order-sources.get.ts</affectedPath><affectedPath>server/api/sales/sis/listings/create.post.ts</affectedPath><affectedPath>app/components/MarketplaceIcon.vue</affectedPath><affectedPath>server/api/sales/sis/listings/[id]/delist.post.ts</affectedPath><affectedPath>app/pages/sales/sis/index.vue</affectedPath><affectedPath>server/api/sales/sis/listings/[id].put.ts</affectedPath><affectedPath>server/utils/listings/immediate.ts</affectedPath><commitId>56c5268fa1921d65191c36cc8be77a3fa91f7c5e</commitId><timestamp>1793134754000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>SIS: eBay adapter (offer id / legacy items), immediate delivery, details toggle, image popup, phone cards

- adapters/ebay.ts: Sell Inventory API (inventory item → offer → listing; ListingKey = offerId,
  ExternalProductId = listingId, SKU as inventory id) + Trading API for listings never migrated to
  the Inventory API (GetMyeBaySelling with variations, ReviseInventoryStatus / EndFixedPriceItem /
  RelistFixedPriceItem); token JSON like the Laravel EbayTokenRepository, refreshed and written back
  to the order source; create via inventory item + offer + publish
- immediate delivery: adapters flagged `immediate` (eBay, Shopify, Shopware) are flushed right after
  queueing from the put / delist / relist / create routes; Amazon keeps the batched outbox
- page: "Details" toggle (internal price, marketplace qty, listed-on date hidden by default), internal
  qty right of the Qty field, copy buttons hidden, thumbnail click → centred medium-size popup,
  card layout ≤ 768 px with the same inputs and actions
- MarketplaceIcon: Amazon from public/assets/brand/amazon-icon.png on a white tile
</comment><date>2026-10-27 21:59:14 +0100</date><id>56c5268fa1921d65191c36cc8be77a3fa91f7c5e</id><msg>SIS: eBay adapter (offer id / legacy items), immediate delivery, details toggle, image popup, phone cards</msg><path><editType>edit</editType><file>app/components/MarketplaceIcon.vue</file></path><path><editType>edit</editType><file>server/utils/listings/adapters/ebay.ts</file></path><path><editType>edit</editType><file>.claude/rules/marketplaces/marketplace-listings.md</file></path><path><editType>edit</editType><file>server/api/sales/sis/order-sources.get.ts</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/[id]/relist.post.ts</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/[id]/delist.post.ts</file></path><path><editType>add</editType><file>public/assets/brand/amazon-icon.png</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/[id].put.ts</file></path><path><editType>edit</editType><file>server/api/sales/sis/listings/create.post.ts</file></path><path><editType>add</editType><file>server/utils/listings/immediate.ts</file></path><path><editType>edit</editType><file>app/pages/sales/sis/index.vue</file></path><path><editType>edit</editType><file>server/utils/listings/adapters/types.ts</file></path><path><editType>edit</editType><file>server/utils/listings/adapters/index.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/bi/shipping-performance.vue</affectedPath><affectedPath>.claude/rules/bi/shipping-performance.md</affectedPath><affectedPath>server/utils/bi/stockAtDeadline.ts</affectedPath><affectedPath>server/api/bi/shipping-performance.get.ts</affectedPath><commitId>3dbbeedfa45b9ace1df7a02122d5407091b8e992</commitId><timestamp>1793136801000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>BI shipping performance: exclude stock-blocked orders (status 'No stock')

Orders that are not on time are checked against the historic stock of their
item lines in the order's warehouse at the end of the deadline day
(m_storage minus later m_transaction movements, direct Postgres,
server/utils/bi/stockAtDeadline.ts). At least one short line -&gt; status
'nostock', excluded from on-time/SLA/lateness/lead-time rates; ?nostock=include
keeps the SLA status and only flags the row. Page: checkbox, grey chart series,
filter button, 'Missing stock' column/CSV, warning tag when PG is unavailable.
Measured on prod: 0.1-0.9 s per request for the stock check.
</comment><date>2026-10-27 22:33:21 +0100</date><id>3dbbeedfa45b9ace1df7a02122d5407091b8e992</id><msg>BI shipping performance: exclude stock-blocked orders (status 'No stock')</msg><path><editType>add</editType><file>server/utils/bi/stockAtDeadline.ts</file></path><path><editType>add</editType><file>.claude/rules/bi/shipping-performance.md</file></path><path><editType>edit</editType><file>app/pages/bi/shipping-performance.vue</file></path><path><editType>edit</editType><file>server/api/bi/shipping-performance.get.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>780</buildNumber><marked><SHA1>c03ffecdc39c2fb48e278b6fed453fb530fd8237</SHA1><branch><SHA1>c03ffecdc39c2fb48e278b6fed453fb530fd8237</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>c03ffecdc39c2fb48e278b6fed453fb530fd8237</SHA1><branch><SHA1>c03ffecdc39c2fb48e278b6fed453fb530fd8237</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>c03ffecdc39c2fb48e278b6fed453fb530fd8237</SHA1><branch><SHA1>c03ffecdc39c2fb48e278b6fed453fb530fd8237</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'></action><building>false</building><displayName>#780</displayName><duration>67591</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #780</fullDisplayName><id>780</id><inProgress>false</inProgress><keepLog>false</keepLog><number>780</number><queueId>5892</queueId><result>SUCCESS</result><timestamp>1793062800194</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/780/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/update-files/version.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><commitId>cedd49d1ef03513a99128d8eab938399f83ab8ef</commitId><timestamp>1792996434000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>release app 1.0.68 (code 69): WMS app login only for mobile workers — corrects the unshipped 1.0.69 bump from the interrupted release run
</comment><date>2026-10-26 07:33:54 +0100</date><id>cedd49d1ef03513a99128d8eab938399f83ab8ef</id><msg>release app 1.0.68 (code 69): WMS app login only for mobile workers — corrects the unshipped 1.0.69 bump from the interrupted release run</msg><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/offers/conditions/index.post.ts</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>server/api/settings/software-catalog/lists.get.ts</affectedPath><affectedPath>app/composables/useOfferSoftwareQuote.ts</affectedPath><affectedPath>server/api/offers/quote/preview.post.ts</affectedPath><affectedPath>app/pages/settings/software-catalog/index.vue</affectedPath><affectedPath>reference/template-cleanup/01-idempiere-truncate.sql</affectedPath><affectedPath>app/utils/softwareCatalogDefaults.ts</affectedPath><affectedPath>server/utils/chatAccess.ts</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>server/api/settings/software-catalog/seed.post.ts</affectedPath><affectedPath>reference/template-cleanup/README.md</affectedPath><affectedPath>app/components/offers/SoftwareQuoteModal.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>server/api/settings/software-catalog/save.post.ts</affectedPath><affectedPath>server/api/settings/software-catalog/seed-lists.post.ts</affectedPath><affectedPath>server/api/offers/software-catalog/index.get.ts</affectedPath><affectedPath>app/components/leads/ChatConsoleModal.vue</affectedPath><affectedPath>reference/test-scripts/software-catalog-seed-lists.mts</affectedPath><affectedPath>server/utils/offers/softwareCatalog.ts</affectedPath><affectedPath>.claude/rules/offers/software-quote.md</affectedPath><affectedPath>app/composables/menu/admin/sales.ts</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><affectedPath>server/utils/offers/softwareQuotePdf.ts</affectedPath><affectedPath>server/api/offers/quote/send.post.ts</affectedPath><commitId>7247b7d3b3973109586dfc39741d445d9fa06b91</commitId><timestamp>1793023127000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Software offer type "LogShip Cloud" + maintainable catalog in iDempiere

Second offer type next to the 3PL fulfillment quote on the lead page: a SaaS
offer for the LogShip Cloud product with its own modal (packages, overage
staffel, feature matrix, add-ons, onboarding package with phases/highlights,
positions, requirements, texts) and branded PDF (package card, prices, 4–5
column package comparison, onboarding section, example calculation). Header
switch "Fulfillment | LogShip Cloud" in both modals; offers/quote preview+send
branch on payload.offerType, conditions saved as offer_conditions.softwareQuote.

Catalog persisted in iDempiere (CUST_SoftwarePlan / CUST_SoftwareCatalogItem,
enum columns as AD_Reference lists): server util with 5-min cache and fail-soft
defaults, routes for read / lists / whole-catalog save / seed / seed-lists,
staff gate option requireChat=false. Settings → Software-Katalog is a matrix
editor (packages = columns, features = rows, click cell = minimum package,
mode pill, drag &amp; drop rows/columns, inline rename, details panel, add-ons
list, one save) — linked from Sales in both menus. Offers carry a catalog
snapshot so old PDFs stay reproducible.

Also: backdrop close only on a real backdrop click (both offer modals), feature
rows no longer squeezed by the global select width, dark-mode styling for the
catalog page, the KI console and the offer modals, template clean-up keeps the
two new tables, recipe .claude/rules/offers/software-quote.md.
</comment><date>2026-10-26 14:58:47 +0100</date><id>7247b7d3b3973109586dfc39741d445d9fa06b91</id><msg>Software offer type "LogShip Cloud" + maintainable catalog in iDempiere</msg><path><editType>add</editType><file>server/api/settings/software-catalog/seed.post.ts</file></path><path><editType>add</editType><file>server/api/offers/software-catalog/index.get.ts</file></path><path><editType>add</editType><file>server/api/settings/software-catalog/seed-lists.post.ts</file></path><path><editType>edit</editType><file>app/composables/menu/admin/sales.ts</file></path><path><editType>add</editType><file>app/utils/softwareCatalogDefaults.ts</file></path><path><editType>edit</editType><file>reference/template-cleanup/01-idempiere-truncate.sql</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/utils/offers/softwareCatalog.ts</file></path><path><editType>edit</editType><file>server/api/offers/conditions/index.post.ts</file></path><path><editType>add</editType><file>app/components/offers/SoftwareQuoteModal.vue</file></path><path><editType>add</editType><file>server/api/settings/software-catalog/lists.get.ts</file></path><path><editType>edit</editType><file>app/components/leads/ChatConsoleModal.vue</file></path><path><editType>add</editType><file>server/api/settings/software-catalog/save.post.ts</file></path><path><editType>edit</editType><file>server/api/offers/quote/preview.post.ts</file></path><path><editType>edit</editType><file>server/utils/chatAccess.ts</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>edit</editType><file>server/api/offers/quote/send.post.ts</file></path><path><editType>add</editType><file>app/composables/useOfferSoftwareQuote.ts</file></path><path><editType>add</editType><file>.claude/rules/offers/software-quote.md</file></path><path><editType>add</editType><file>reference/test-scripts/software-catalog-seed-lists.mts</file></path><path><editType>add</editType><file>app/pages/settings/software-catalog/index.vue</file></path><path><editType>edit</editType><file>reference/template-cleanup/README.md</file></path><path><editType>add</editType><file>server/utils/offers/softwareQuotePdf.ts</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/softwareQuotePdf.ts</affectedPath><affectedPath>app/composables/useOfferSoftwareQuote.ts</affectedPath><affectedPath>app/components/offers/SoftwareQuoteModal.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>e41d3f6dc8550eda20b6a57c1a42ccba2ca35f50</commitId><timestamp>1793024418000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>LogShip offer: onboarding package marked optional, "ab" price, travel costs excluded

The onboarding package prints as optional with an "ab 3.250 €" starting price
(final fixed price after the kickoff) and a note that travel and accommodation
costs for on-site appointments are billed as incurred — in the price table, the
onboarding section, the example calculation and the Hinweise. Both aspects are
per-offer switches in the modal (default on) and persist with the conditions.
</comment><date>2026-10-26 15:20:18 +0100</date><id>e41d3f6dc8550eda20b6a57c1a42ccba2ca35f50</id><msg>LogShip offer: onboarding package marked optional, "ab" price, travel costs excluded</msg><path><editType>edit</editType><file>app/composables/useOfferSoftwareQuote.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/utils/offers/softwareQuotePdf.ts</file></path><path><editType>edit</editType><file>app/components/offers/SoftwareQuoteModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/softwareQuotePdf.ts</affectedPath><affectedPath>app/composables/useOfferSoftwareQuote.ts</affectedPath><affectedPath>app/utils/softwareCatalogDefaults.ts</affectedPath><affectedPath>app/components/offers/SoftwareQuoteModal.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>a08361cbd2c664f0b42f95f54c50f2e7272e01ac</commitId><timestamp>1793025148000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>LogShip offer: editable fee-line name and subtext, package taglines

The monthly software-fee row prints "&lt;package&gt; — monatliche Softwaregebühr"
with the package tagline (catalog Description) and the included volumes as
subtext; name and subtext can be overridden per offer (empty = automatic).
The package card shows the tagline too. Default catalog names are now
Start / Wachstum / Premium / Enterprise with taglines (e.g. Start: "Der
komplette Fulfillment-Kern für Ihren Einstieg."); the live rows were updated
to match. Modal gets tagline, fee-name and fee-subtext fields (de/en/es).
</comment><date>2026-10-26 15:32:28 +0100</date><id>a08361cbd2c664f0b42f95f54c50f2e7272e01ac</id><msg>LogShip offer: editable fee-line name and subtext, package taglines</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/composables/useOfferSoftwareQuote.ts</file></path><path><editType>edit</editType><file>app/utils/softwareCatalogDefaults.ts</file></path><path><editType>edit</editType><file>app/components/offers/SoftwareQuoteModal.vue</file></path><path><editType>edit</editType><file>server/utils/offers/softwareQuotePdf.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/inouts/quick-rma.post.ts</affectedPath><affectedPath>app/pages/mobile/return.vue</affectedPath><affectedPath>app/pages/integrations/returns-desktop.vue</affectedPath><affectedPath>app/composables/useReturnedQty.ts</affectedPath><commitId>a332853cd2e7e11a943633fdca396c6ac7a54586</commitId><timestamp>1793031078000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Returns: count only received customer returns as returned qty, link receipt lines to reused marketplace RMA lines

The mobile + desktop return pages summed every completed M_RMA on the
shipment as already returned. Marketplace-imported RMAs (Amazon) are
Completed with the expected qty before the parcel arrives, so unprocessed
returns showed Remaining 0/1 and could not be entered (e.g. shipment
536925 / RMA 30614). Shared useReturnedQty composable now counts only
completed/closed customer-return receipts linked via M_RMA_ID.

quick-rma: when reusing such an RMA, receipt lines are matched to RMA
lines by shipment line id (then product, then line number restricted to
unlinked lines) instead of the bare line number, which the Amazon
importer assigns as a counter. Orphan check also accepts closed receipts.
</comment><date>2026-10-26 17:11:18 +0100</date><id>a332853cd2e7e11a943633fdca396c6ac7a54586</id><msg>Returns: count only received customer returns as returned qty, link receipt lines to reused marketplace RMA lines</msg><path><editType>edit</editType><file>app/pages/mobile/return.vue</file></path><path><editType>add</editType><file>app/composables/useReturnedQty.ts</file></path><path><editType>edit</editType><file>server/api/inouts/quick-rma.post.ts</file></path><path><editType>edit</editType><file>app/pages/integrations/returns-desktop.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/inouts/quick-rma.post.ts</affectedPath><commitId>ba5f7e6b2a5f8f26ee1dd348cc9d7103c25b8c6d</commitId><timestamp>1793031125000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>quick-rma: prefer line-number match over product match for unlinked RMA lines

Keeps the previous behaviour for RMAs created without M_InOutLine_ID
(sales-order return page) when the same product appears on two lines.
</comment><date>2026-10-26 17:12:05 +0100</date><id>ba5f7e6b2a5f8f26ee1dd348cc9d7103c25b8c6d</id><msg>quick-rma: prefer line-number match over product match for unlinked RMA lines</msg><path><editType>edit</editType><file>server/api/inouts/quick-rma.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/demo-instance/hess/catalog.json</affectedPath><affectedPath>app/pages/materials/products/index.vue</affectedPath><affectedPath>reference/demo-instance/hess/build-catalog.py</affectedPath><affectedPath>server/utils/productsGrid.ts</affectedPath><affectedPath>reference/demo-instance/create-master-articles.sh</affectedPath><affectedPath>reference/demo-instance/hess/cattree.json</affectedPath><affectedPath>reference/demo-instance/add-purchase-prices.sh</affectedPath><affectedPath>app/components/materials/ProductVariantsCard.vue</affectedPath><affectedPath>app/pages/materials/products/[id]/edit.vue</affectedPath><affectedPath>server/api/materials/products/[id]/variants.get.ts</affectedPath><affectedPath>reference/demo-instance/hess/masters.json</affectedPath><affectedPath>reference/demo-instance/set-parent-ids.sh</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>bf69e20f22003bbc73714edec19512152cea83bd</commitId><timestamp>1793034452000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Product variants: master (IsSummary) articles + ParentId grouping, Varianten card and list column; Hess/Livipur demo catalog tooling
</comment><date>2026-10-26 18:07:32 +0100</date><id>bf69e20f22003bbc73714edec19512152cea83bd</id><msg>Product variants: master (IsSummary) articles + ParentId grouping, Varianten card and list column; Hess/Livipur demo catalog tooling</msg><path><editType>edit</editType><file>server/utils/productsGrid.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/materials/products/[id]/edit.vue</file></path><path><editType>add</editType><file>reference/demo-instance/create-master-articles.sh</file></path><path><editType>add</editType><file>reference/demo-instance/hess/catalog.json</file></path><path><editType>add</editType><file>reference/demo-instance/hess/cattree.json</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/variants.get.ts</file></path><path><editType>add</editType><file>reference/demo-instance/add-purchase-prices.sh</file></path><path><editType>add</editType><file>reference/demo-instance/hess/build-catalog.py</file></path><path><editType>add</editType><file>reference/demo-instance/hess/masters.json</file></path><path><editType>edit</editType><file>app/pages/materials/products/index.vue</file></path><path><editType>add</editType><file>reference/demo-instance/set-parent-ids.sh</file></path><path><editType>add</editType><file>app/components/materials/ProductVariantsCard.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/materials/product-variants.md</affectedPath><affectedPath>reference/ci/README.md</affectedPath><affectedPath>reference/demo-instance/README.md</affectedPath><commitId>c1fc1c30ccab14645c0baf48a5c72ea6986ce862</commitId><timestamp>1793034546000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Docs: product variant model recipe, Hess demo tooling, Jenkins trigger crumb note
</comment><date>2026-10-26 18:09:06 +0100</date><id>c1fc1c30ccab14645c0baf48a5c72ea6986ce862</id><msg>Docs: product variant model recipe, Hess demo tooling, Jenkins trigger crumb note</msg><path><editType>add</editType><file>reference/demo-instance/README.md</file></path><path><editType>add</editType><file>.claude/rules/materials/product-variants.md</file></path><path><editType>edit</editType><file>reference/ci/README.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/materials/products/[id]/variants.get.ts</affectedPath><affectedPath>server/utils/productsGrid.ts</affectedPath><commitId>106bde8bfced6763eb4dbed5eab19ca36e10b69d</commitId><timestamp>1793035132000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Variants: read ParentId under its REST key (parentId)
</comment><date>2026-10-26 18:18:52 +0100</date><id>106bde8bfced6763eb4dbed5eab19ca36e10b69d</id><msg>Variants: read ParentId under its REST key (parentId)</msg><path><editType>edit</editType><file>server/api/materials/products/[id]/variants.get.ts</file></path><path><editType>edit</editType><file>server/utils/productsGrid.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/demo-instance/hess/catalog.json</affectedPath><affectedPath>reference/demo-instance/hess/build-catalog.py</affectedPath><commitId>dfef60a31ee23e7beb1ffa4d485ca6956e603d06</commitId><timestamp>1793035243000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Hess catalog: distinct variation names (append missing attribute values)
</comment><date>2026-10-26 18:20:43 +0100</date><id>dfef60a31ee23e7beb1ffa4d485ca6956e603d06</id><msg>Hess catalog: distinct variation names (append missing attribute values)</msg><path><editType>edit</editType><file>reference/demo-instance/hess/catalog.json</file></path><path><editType>edit</editType><file>reference/demo-instance/hess/build-catalog.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/nuxt/ui-components.md</affectedPath><affectedPath>app/components/AgGrid/Users/AgSecurityKeyActions.vue</affectedPath><affectedPath>app/components/users/SecurityKeyEnrolModal.vue</affectedPath><affectedPath>app/components/users/SecurityKeyRevokeModal.vue</affectedPath><affectedPath>.claude/rules/auth/webauthn-security-keys.md</affectedPath><affectedPath>app/components/AgGrid/Users/AgSecurityKeyUser.vue</affectedPath><affectedPath>app/composables/useSecurityKeyFormat.ts</affectedPath><affectedPath>app/pages/users/security-keys/index.vue</affectedPath><affectedPath>app/components/AgGrid.vue</affectedPath><affectedPath>app/components/users/SecurityKeys.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/composables/useWebAuthn.ts</affectedPath><commitId>b6f8902e5a86439a36af8f88c9be9e31cf5fff70</commitId><timestamp>1793045605000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Security keys: Nuxt UI enrol wizard + revoke dialog, working grid actions, phone layout

- /users/security-keys: real Vue cell renderers (user + actions) with handlers via
  cellRendererParams — the shared AgGrid cellClick is selection-changed and never fired the
  Revoke/user-link in raw-HTML cells; 44px rows, stats, search, UIcon icons
- Phone (&lt; 900px): grouped employee cards, sticky "Enrol key" button, full-screen wizard with
  NFC/USB hints per device (Android/iOS/Windows/macOS/app)
- Shared UsersSecurityKeyEnrolModal (details → tap → done/error, UForm validation, employee
  picker with key counts, auto "YubiKey &lt;first name&gt;", cancel aborts at every stage) and
  UsersSecurityKeyRevokeModal (key/user/dates, last-key warning, toasts) used by the overview,
  the profile panel and the user-edit panel; UsersSecurityKeys.vue rebuilt on them
- useSecurityKeyFormat (relative dates, transports, initials, WebAuthn error texts),
  useWebAuthn.cancelCeremony/isNativeApp + register({ isCancelled }), AgGrid rowHeight prop
- Translations en/de/es (+ ne fallback); recipes: webauthn UI, icon + Tailwind colour gaps
</comment><date>2026-10-26 21:13:25 +0100</date><id>b6f8902e5a86439a36af8f88c9be9e31cf5fff70</id><msg>Security keys: Nuxt UI enrol wizard + revoke dialog, working grid actions, phone layout</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>app/components/AgGrid/Users/AgSecurityKeyUser.vue</file></path><path><editType>add</editType><file>app/components/users/SecurityKeyRevokeModal.vue</file></path><path><editType>edit</editType><file>app/components/users/SecurityKeys.vue</file></path><path><editType>edit</editType><file>app/composables/useWebAuthn.ts</file></path><path><editType>add</editType><file>app/components/AgGrid/Users/AgSecurityKeyActions.vue</file></path><path><editType>add</editType><file>app/components/users/SecurityKeyEnrolModal.vue</file></path><path><editType>edit</editType><file>app/components/AgGrid.vue</file></path><path><editType>add</editType><file>app/composables/useSecurityKeyFormat.ts</file></path><path><editType>edit</editType><file>.claude/rules/auth/webauthn-security-keys.md</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/ui-components.md</file></path><path><editType>edit</editType><file>app/pages/users/security-keys/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/nuxt/dev-server-troubleshooting.md</affectedPath><commitId>9371c6664d11ca13d1295dc13b1dd8e845ebdbf4</commitId><timestamp>1793045666000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Recipe: duplicate nuxt dev server symptoms (client never mounts, stale style module 404)
</comment><date>2026-10-26 21:14:26 +0100</date><id>9371c6664d11ca13d1295dc13b1dd8e845ebdbf4</id><msg>Recipe: duplicate nuxt dev server symptoms (client never mounts, stale style module 404)</msg><path><editType>edit</editType><file>.claude/rules/nuxt/dev-server-troubleshooting.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/demo-instance/README.md</affectedPath><commitId>c03ffecdc39c2fb48e278b6fed453fb530fd8237</commitId><timestamp>1793046463000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Docs: Hess as second 3PL on the demo instance (restricted admin role, merchant onboarding gotchas)
</comment><date>2026-10-26 21:27:43 +0100</date><id>c03ffecdc39c2fb48e278b6fed453fb530fd8237</id><msg>Docs: Hess as second 3PL on the demo instance (restricted admin role, merchant onboarding gotchas)</msg><path><editType>edit</editType><file>reference/demo-instance/README.md</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>779</buildNumber><marked><SHA1>071be89d82586ae14ddd284cdc19906a4dbdd725</SHA1><branch><SHA1>071be89d82586ae14ddd284cdc19906a4dbdd725</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>071be89d82586ae14ddd284cdc19906a4dbdd725</SHA1><branch><SHA1>071be89d82586ae14ddd284cdc19906a4dbdd725</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>071be89d82586ae14ddd284cdc19906a4dbdd725</SHA1><branch><SHA1>071be89d82586ae14ddd284cdc19906a4dbdd725</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'></action><building>false</building><displayName>#779</displayName><duration>58027</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #779</fullDisplayName><id>779</id><inProgress>false</inProgress><keepLog>false</keepLog><number>779</number><queueId>5878</queueId><result>SUCCESS</result><timestamp>1792976400763</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/779/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/signin.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>721a29f76611db72fcbe81fdaf5b8c63466dc9c6</commitId><timestamp>1792938173000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Sign-in Android card: name the app 'LogShip WMS app' (de/en/es) and describe it as the warehouse app for mobile workers
</comment><date>2026-10-25 15:22:53 +0100</date><id>721a29f76611db72fcbe81fdaf5b8c63466dc9c6</id><msg>Sign-in Android card: name the app 'LogShip WMS app' (de/en/es) and describe it as the warehouse app for mobile workers</msg><path><editType>edit</editType><file>app/pages/signin.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/signin.vue</affectedPath><affectedPath>app/pages/select-role.vue</affectedPath><affectedPath>.claude/rules/mobile/capacitor-app-build.md</affectedPath><affectedPath>server/utils/mobileWorkerHelper.ts</affectedPath><affectedPath>server/api/idempiere-auth/select-role.post.ts</affectedPath><affectedPath>server/api/app-auth/login.post.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>ae21a86abbfd591801860d1d7b1f336b9a833626</commitId><timestamp>1792939279000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>WMS app login only for mobile workers — app-auth/login always runs the mobile-worker gate and refuses accounts without ad_user.IsMobileWorker with { status: 403, code: 'not_mobile_worker' } and no token (password and security-key logins alike, the key login delegates to the same route); select-role applies the same rule to X-Logship-App requests for multi-client logins; sign-in and select-role pages show a translated "No WMS access" message (de/en/es), the app drops its partial session and returns to sign-in; web sign-in unchanged; recipe updated
</comment><date>2026-10-25 15:41:19 +0100</date><id>ae21a86abbfd591801860d1d7b1f336b9a833626</id><msg>WMS app login only for mobile workers — app-auth/login always runs the mobile-worker gate and refuses accounts without ad_user.IsMobileWorker with { status: 403, code: 'not_mobile_worker' } and no token (password and security-key logins alike, the key login delegates to the same route); select-role applies the same rule to X-Logship-App requests for multi-client logins; sign-in and select-role pages show a translated "No WMS access" message (de/en/es), the app drops its partial session and returns to sign-in; web sign-in unchanged; recipe updated</msg><path><editType>edit</editType><file>.claude/rules/mobile/capacitor-app-build.md</file></path><path><editType>edit</editType><file>app/pages/select-role.vue</file></path><path><editType>edit</editType><file>app/pages/signin.vue</file></path><path><editType>edit</editType><file>server/api/idempiere-auth/select-role.post.ts</file></path><path><editType>edit</editType><file>server/utils/mobileWorkerHelper.ts</file></path><path><editType>edit</editType><file>server/api/app-auth/login.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><commitId>071be89d82586ae14ddd284cdc19906a4dbdd725</commitId><timestamp>1792939320000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>release app 1.0.68 (code 69): WMS app login only for mobile workers
</comment><date>2026-10-25 15:42:00 +0100</date><id>071be89d82586ae14ddd284cdc19906a4dbdd725</id><msg>release app 1.0.68 (code 69): WMS app login only for mobile workers</msg><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>778</buildNumber><marked><SHA1>378885a48e4f902910fad004ab676b75d48e3466</SHA1><branch><SHA1>378885a48e4f902910fad004ab676b75d48e3466</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>378885a48e4f902910fad004ab676b75d48e3466</SHA1><branch><SHA1>378885a48e4f902910fad004ab676b75d48e3466</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>378885a48e4f902910fad004ab676b75d48e3466</SHA1><branch><SHA1>378885a48e4f902910fad004ab676b75d48e3466</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'></action><building>false</building><displayName>#778</displayName><duration>56243</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #778</fullDisplayName><id>778</id><inProgress>false</inProgress><keepLog>false</keepLog><number>778</number><queueId>5874</queueId><result>SUCCESS</result><timestamp>1792890000764</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/778/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>777</buildNumber><marked><SHA1>378885a48e4f902910fad004ab676b75d48e3466</SHA1><branch><SHA1>378885a48e4f902910fad004ab676b75d48e3466</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>378885a48e4f902910fad004ab676b75d48e3466</SHA1><branch><SHA1>378885a48e4f902910fad004ab676b75d48e3466</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>378885a48e4f902910fad004ab676b75d48e3466</SHA1><branch><SHA1>378885a48e4f902910fad004ab676b75d48e3466</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'></action><building>false</building><displayName>#777</displayName><duration>62661</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #777</fullDisplayName><id>777</id><inProgress>false</inProgress><keepLog>false</keepLog><number>777</number><queueId>5873</queueId><result>SUCCESS</result><timestamp>1792886460764</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/777/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/AgGridServer.vue</affectedPath><affectedPath>app/pages/materials/products/index.vue</affectedPath><affectedPath>app/pages/materials/products-v2/index.vue</affectedPath><affectedPath>app/components/materials/ProductThumbnail.vue</affectedPath><commitId>a8c0fc5da44e7a162e204825515022eba07c20fa</commitId><timestamp>1792846799000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Products list: larger product thumbnails — ProductThumbnail takes a size via cellRendererParams (default 26 px unchanged elsewhere), picks the first Strapi format ≥ 2× the rendered size for sharp HiDPI output, rounded border + zoom-in cursor + hover enlarge, unscoped styles (AG Grid renderer); AgGridServer gets an optional rowHeight prop; /materials/products and /materials/products-v2 use 48 px thumbnails in a fixed 64 px column with 56 px rows
</comment><date>2026-10-24 14:59:59 +0200</date><id>a8c0fc5da44e7a162e204825515022eba07c20fa</id><msg>Products list: larger product thumbnails — ProductThumbnail takes a size via cellRendererParams (default 26 px unchanged elsewhere), picks the first Strapi format ≥ 2× the rendered size for sharp HiDPI output, rounded border + zoom-in cursor + hover enlarge, unscoped styles (AG Grid renderer); AgGridServer gets an optional rowHeight prop; /materials/products and /materials/products-v2 use 48 px thumbnails in a fixed 64 px column with 56 px rows</msg><path><editType>edit</editType><file>app/pages/materials/products-v2/index.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductThumbnail.vue</file></path><path><editType>edit</editType><file>app/components/AgGridServer.vue</file></path><path><editType>edit</editType><file>app/pages/materials/products/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/AgGrid/SalesOrder/AgCustomAttachment.vue</affectedPath><affectedPath>app/components/AgGrid/SalesOrder/AgCustomTrackingNo.vue</affectedPath><affectedPath>.claude/rules/sales/orders-grid.md</affectedPath><affectedPath>server/api/orders/ag-grid/summary.post.ts</affectedPath><affectedPath>app/pages/sales/orders/index.vue</affectedPath><affectedPath>app/components/AgGridServer.vue</affectedPath><affectedPath>app/components/sales/OrderAction.vue</affectedPath><commitId>1f060bd74c0e4b59ff13eceefb3cbc1a1ed1f1c2</commitId><timestamp>1792849499000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Sales orders grid: faster initial load and scroll blocks — summary endpoint enriches each 50-row block with one batched m_inout lookup (tracking no, shipment id/status, marketplace confirm log) and one batched Strapi attachments lookup (count + documentId), so the TrackingNo, Attachment and OrderAction cell renderers read row data instead of firing 3 requests per rendered row (105 on first paint, ~180 per two scroll steps); grid-ready latest-order-id now a 40 ms c_order top-1 query instead of an unfiltered summary call that summed all ~40k orders (2.5 s / 5 MB) on every page open; fees/revenue totals only on block 0 (AgGridServer sends withAggregates), $select on the view query (257 → 150 KB per block), debug log removed, organization auto-size once instead of every block, 150 ms block-load debounce; attachment files loaded on click only, per-row fallback kept when the Strapi batch is unavailable; voided check in the attachment tag now reads docStatusId; recipe .claude/rules/sales/orders-grid.md
</comment><date>2026-10-24 15:44:59 +0200</date><id>1f060bd74c0e4b59ff13eceefb3cbc1a1ed1f1c2</id><msg>Sales orders grid: faster initial load and scroll blocks — summary endpoint enriches each 50-row block with one batched m_inout lookup (tracking no, shipment id/status, marketplace confirm log) and one batched Strapi attachments lookup (count + documentId), so the TrackingNo, Attachment and OrderAction cell renderers read row data instead of firing 3 requests per rendered row (105 on first paint, ~180 per two scroll steps); grid-ready latest-order-id now a 40 ms c_order top-1 query instead of an unfiltered summary call that summed all ~40k orders (2.5 s / 5 MB) on every page open; fees/revenue totals only on block 0 (AgGridServer sends withAggregates), $select on the view query (257 → 150 KB per block), debug log removed, organization auto-size once instead of every block, 150 ms block-load debounce; attachment files loaded on click only, per-row fallback kept when the Strapi batch is unavailable; voided check in the attachment tag now reads docStatusId; recipe .claude/rules/sales/orders-grid.md</msg><path><editType>edit</editType><file>app/pages/sales/orders/index.vue</file></path><path><editType>edit</editType><file>app/components/AgGridServer.vue</file></path><path><editType>add</editType><file>.claude/rules/sales/orders-grid.md</file></path><path><editType>edit</editType><file>server/api/orders/ag-grid/summary.post.ts</file></path><path><editType>edit</editType><file>app/components/AgGrid/SalesOrder/AgCustomTrackingNo.vue</file></path><path><editType>edit</editType><file>app/components/sales/OrderAction.vue</file></path><path><editType>edit</editType><file>app/components/AgGrid/SalesOrder/AgCustomAttachment.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/orders/ag-grid/so.post.ts</affectedPath><affectedPath>server/api/orders/ag-grid/notfulfilled-5days.post.ts</affectedPath><affectedPath>server/api/orders/ag-grid/notfulfilled-fastlane.post.ts</affectedPath><affectedPath>.claude/rules/sales/orders-grid.md</affectedPath><affectedPath>server/api/orders/ag-grid/notfulfilled.post.ts</affectedPath><commitId>1b0d7dc4c3d37799ace553363f21cc62d6d1fdfb</commitId><timestamp>1792849644000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Remove unused legacy orders ag-grid routes (so, notfulfilled, notfulfilled-5days, notfulfilled-fastlane) — no caller since the 2026-06-02 cleanup (page switched to ag-grid/summary), zero hits in 59 days of prod and dev web logs; they expanded c_orderline + m_inout child tables per block and copied the whole country table into every row
</comment><date>2026-10-24 15:47:24 +0200</date><id>1b0d7dc4c3d37799ace553363f21cc62d6d1fdfb</id><msg>Remove unused legacy orders ag-grid routes (so, notfulfilled, notfulfilled-5days, notfulfilled-fastlane) — no caller since the 2026-06-02 cleanup (page switched to ag-grid/summary), zero hits in 59 days of prod and dev web logs; they expanded c_orderline + m_inout child tables per block and copied the whole country table into every row</msg><path><editType>edit</editType><file>.claude/rules/sales/orders-grid.md</file></path><path><editType>delete</editType><file>server/api/orders/ag-grid/so.post.ts</file></path><path><editType>delete</editType><file>server/api/orders/ag-grid/notfulfilled.post.ts</file></path><path><editType>delete</editType><file>server/api/orders/ag-grid/notfulfilled-5days.post.ts</file></path><path><editType>delete</editType><file>server/api/orders/ag-grid/notfulfilled-fastlane.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/idempiere-auth/webauthn/register-verify.post.ts</affectedPath><affectedPath>server/api/admin/users/[id]/webauthn/index.get.ts</affectedPath><affectedPath>server/api/admin/webauthn/keys.get.ts</affectedPath><affectedPath>server/api/idempiere-auth/webauthn/delete.delete.ts</affectedPath><affectedPath>server/api/idempiere-auth/webauthn/login-verify.post.ts</affectedPath><affectedPath>server/api/idempiere-auth/webauthn/login-options.post.ts</affectedPath><affectedPath>android/variables.gradle</affectedPath><affectedPath>server/utils/webauthnAdmin.ts</affectedPath><affectedPath>app/composables/useWebAuthn.ts</affectedPath><affectedPath>android/app/src/main/java/com/logship/mobile/WebAuthnPlugin.java</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>android/app/src/main/java/com/logship/mobile/MainActivity.java</affectedPath><affectedPath>server/utils/webauthnReplayDb.ts</affectedPath><affectedPath>.claude/rules/auth/webauthn-security-keys.md</affectedPath><affectedPath>app/plugins/00.capacitor-api.client.ts</affectedPath><affectedPath>app/pages/users/security-keys/index.vue</affectedPath><affectedPath>server/utils/webauthnChallengeStore.ts</affectedPath><affectedPath>server/utils/adUserCredentials.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/pages/signin.vue</affectedPath><affectedPath>app/pages/users/users/[id]/edit.vue</affectedPath><affectedPath>server/api/admin/users/[id]/webauthn/destroy.delete.ts</affectedPath><affectedPath>.env</affectedPath><affectedPath>server/utils/webauthnHelper.ts</affectedPath><affectedPath>app/components/users/SecurityKeys.vue</affectedPath><affectedPath>public/.well-known/assetlinks.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>server/utils/webauthnIndex.ts</affectedPath><affectedPath>server/api/admin/users/[id]/webauthn/register-options.post.ts</affectedPath><affectedPath>app/composables/menu/admin/users.ts</affectedPath><affectedPath>server/api/admin/users/[id]/webauthn/register-verify.post.ts</affectedPath><affectedPath>server/api/idempiere-auth/webauthn/list.get.ts</affectedPath><affectedPath>.env-prod</affectedPath><commitId>af490f06fc09c720e7b0d3acf48c0554990aa4b4</commitId><timestamp>1792853248000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Security-key login: PIN-free YubiKey tap on web + native Android app, admin enrolment and central overview — enrolment now creates non-discoverable, cross-platform credentials with userVerification 'discouraged' (a YubiKey only holds discoverable credentials with a PIN set and Chrome/Windows then prompt for it on every login); login-options sends the credential IDs of all enrolled keys (webauthnIndex.ts: service-token ad_user index, 60 s cache, cap WEBAUTHN_GLOBAL_ALLOWLIST_MAX=150, username-first fallback via needsUserName) and login-verify resolves the user by credential ID (userHandle only as legacy fallback), bumps counter + lastUsedAt; challenge token also returned in the body for cookie-less clients with a better-sqlite3 replay ledger (data/webauthn-replay.db); multiple accepted origins via WEBAUTHN_EXTRA_ORIGINS (Android android:apk-key-hash of the debug-keystore cert, assetlinks.json under public/.well-known); native app: WebAuthnPlugin.java on androidx.credentials (Credential Manager → Play services FIDO over NFC/USB), useWebAuthn routes create/get through it, login-verify delegates to app-auth/login for X-Logship-App requests and the app fetch plugin feeds that response into the session store (+ biometric unlock enrolment after a key login); tenant admins enrol/revoke keys for employees on the user edit page (admin/users/[id]/webauthn/*, isAdminRole gate, password capture with the service token) and on the new overview /users/security-keys (admin/webauthn/keys: all keys, last used, enrolled by, revoke, enrol for a picked employee; menu Users → Security Keys); sign-in page: key button first on devices that used a key before, clear cancel / not-enrolled / throttled messages, per-IP throttle on login-options; de/en/es texts reworded from passkey to security key; recipe .claude/rules/auth/webauthn-security-keys.md
</comment><date>2026-10-24 16:47:28 +0200</date><id>af490f06fc09c720e7b0d3acf48c0554990aa4b4</id><msg>Security-key login: PIN-free YubiKey tap on web + native Android app, admin enrolment and central overview — enrolment now creates non-discoverable, cross-platform credentials with userVerification 'discouraged' (a YubiKey only holds discoverable credentials with a PIN set and Chrome/Windows then prompt for it on every login); login-options sends the credential IDs of all enrolled keys (webauthnIndex.ts: service-token ad_user index, 60 s cache, cap WEBAUTHN_GLOBAL_ALLOWLIST_MAX=150, username-first fallback via needsUserName) and login-verify resolves the user by credential ID (userHandle only as legacy fallback), bumps counter + lastUsedAt; challenge token also returned in the body for cookie-less clients with a better-sqlite3 replay ledger (data/webauthn-replay.db); multiple accepted origins via WEBAUTHN_EXTRA_ORIGINS (Android android:apk-key-hash of the debug-keystore cert, assetlinks.json under public/.well-known); native app: WebAuthnPlugin.java on androidx.credentials (Credential Manager → Play services FIDO over NFC/USB), useWebAuthn routes create/get through it, login-verify delegates to app-auth/login for X-Logship-App requests and the app fetch plugin feeds that response into the session store (+ biometric unlock enrolment after a key login); tenant admins enrol/revoke keys for employees on the user edit page (admin/users/[id]/webauthn/*, isAdminRole gate, password capture with the service token) and on the new overview /users/security-keys (admin/webauthn/keys: all keys, last used, enrolled by, revoke, enrol for a picked employee; menu Users → Security Keys); sign-in page: key button first on devices that used a key before, clear cancel / not-enrolled / throttled messages, per-IP throttle on login-options; de/en/es texts reworded from passkey to security key; recipe .claude/rules/auth/webauthn-security-keys.md</msg><path><editType>add</editType><file>.claude/rules/auth/webauthn-security-keys.md</file></path><path><editType>add</editType><file>server/api/admin/users/[id]/webauthn/destroy.delete.ts</file></path><path><editType>edit</editType><file>app/pages/signin.vue</file></path><path><editType>add</editType><file>server/api/admin/webauthn/keys.get.ts</file></path><path><editType>edit</editType><file>.env-prod</file></path><path><editType>edit</editType><file>server/utils/webauthnChallengeStore.ts</file></path><path><editType>edit</editType><file>app/pages/users/users/[id]/edit.vue</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/api/idempiere-auth/webauthn/login-options.post.ts</file></path><path><editType>edit</editType><file>.env</file></path><path><editType>edit</editType><file>android/app/src/main/java/com/logship/mobile/MainActivity.java</file></path><path><editType>edit</editType><file>server/utils/adUserCredentials.ts</file></path><path><editType>add</editType><file>server/utils/webauthnAdmin.ts</file></path><path><editType>edit</editType><file>app/plugins/00.capacitor-api.client.ts</file></path><path><editType>add</editType><file>app/pages/users/security-keys/index.vue</file></path><path><editType>edit</editType><file>app/composables/useWebAuthn.ts</file></path><path><editType>edit</editType><file>server/api/idempiere-auth/webauthn/delete.delete.ts</file></path><path><editType>edit</editType><file>android/variables.gradle</file></path><path><editType>edit</editType><file>server/utils/webauthnHelper.ts</file></path><path><editType>edit</editType><file>app/components/users/SecurityKeys.vue</file></path><path><editType>edit</editType><file>server/api/idempiere-auth/webauthn/register-verify.post.ts</file></path><path><editType>add</editType><file>public/.well-known/assetlinks.json</file></path><path><editType>add</editType><file>server/utils/webauthnReplayDb.ts</file></path><path><editType>edit</editType><file>server/api/idempiere-auth/webauthn/login-verify.post.ts</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>add</editType><file>android/app/src/main/java/com/logship/mobile/WebAuthnPlugin.java</file></path><path><editType>edit</editType><file>server/api/idempiere-auth/webauthn/list.get.ts</file></path><path><editType>edit</editType><file>app/composables/menu/admin/users.ts</file></path><path><editType>add</editType><file>server/utils/webauthnIndex.ts</file></path><path><editType>add</editType><file>server/api/admin/users/[id]/webauthn/register-verify.post.ts</file></path><path><editType>add</editType><file>server/api/admin/users/[id]/webauthn/index.get.ts</file></path><path><editType>add</editType><file>server/api/admin/users/[id]/webauthn/register-options.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/webauthnHelper.ts</affectedPath><commitId>94aa23a270d70300b2a4046f5e9c8c2009220e16</commitId><timestamp>1792854035000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Security-key login: allow-list always advertises usb + nfc for roaming keys — Android Credential Manager only arms NFC when 'nfc' is hinted, and keys enrolled over USB on a desktop recorded ['usb'] only, so a tap on the phone opened the YubiKey's NDEF page instead of the FIDO ceremony
</comment><date>2026-10-24 17:00:35 +0200</date><id>94aa23a270d70300b2a4046f5e9c8c2009220e16</id><msg>Security-key login: allow-list always advertises usb + nfc for roaming keys — Android Credential Manager only arms NFC when 'nfc' is hinted, and keys enrolled over USB on a desktop recorded ['usb'] only, so a tap on the phone opened the YubiKey's NDEF page instead of the FIDO ceremony</msg><path><editType>edit</editType><file>server/utils/webauthnHelper.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/auth/webauthn-security-keys.md</affectedPath><affectedPath>app/pages/signin.vue</affectedPath><commitId>31ec1be9cb1a119633e43662b6c36de51ba55173</commitId><timestamp>1792854221000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Security-key login: show the Credential Manager reason behind 'Key not recognised' in the native app (asset-link / provider failures looked like a missed tap); recipe: ISPConfig nginx denies dot paths — /.well-known/assetlinks.json proxy exception added by hand on the app/dev-app vhosts, verification URL, Play-services cache note
</comment><date>2026-10-24 17:03:41 +0200</date><id>31ec1be9cb1a119633e43662b6c36de51ba55173</id><msg>Security-key login: show the Credential Manager reason behind 'Key not recognised' in the native app (asset-link / provider failures looked like a missed tap); recipe: ISPConfig nginx denies dot paths — /.well-known/assetlinks.json proxy exception added by hand on the app/dev-app vhosts, verification URL, Play-services cache note</msg><path><editType>edit</editType><file>.claude/rules/auth/webauthn-security-keys.md</file></path><path><editType>edit</editType><file>app/pages/signin.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/signin.vue</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/app/src/main/AndroidManifest.xml</affectedPath><affectedPath>.claude/rules/auth/webauthn-security-keys.md</affectedPath><affectedPath>android/variables.gradle</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/composables/useWebAuthn.ts</affectedPath><affectedPath>android/app/src/main/java/com/logship/mobile/WebAuthnPlugin.java</affectedPath><commitId>c3ced8b1687b420a7491420a0c67db0716aa3045</commitId><timestamp>1792859305000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Security-key login in the native app: own in-app YubiKey ceremony instead of the Android Credential Manager sheet — WebAuthnPlugin.java now runs CTAP2 getAssertion/makeCredential itself on YubiKit 3.1.0 (NFC reader mode with skipNdefCheck + USB discovery, own "hold the key to the phone" AlertDialog, raw Ctap2Session so a PIN-protected key is never asked for its PIN, allow-lists longer than maxCredentialCountInList probed in silent up=false chunks, connection loss keeps the dialog open for the next tap); the assertion signs for the web origin (public.apiBase = WEBAUTHN_ORIGIN) so no Play services, no asset links and no apk-key-hash origin are involved any more (mode 'system' keeps the Credential Manager path as fallback); NFC permission + optional nfc/usb-host features in the manifest; useWebAuthn passes origin, localized dialog texts and exposes cancelNative/capabilities, sign-in page cancels an open dialog on unmount; mobile web sign-in (≤768 px, not iOS, not in the app) shows an Android APK download card with the public manifest's version; de/en/es texts; recipe updated
</comment><date>2026-10-24 18:28:25 +0200</date><id>c3ced8b1687b420a7491420a0c67db0716aa3045</id><msg>Security-key login in the native app: own in-app YubiKey ceremony instead of the Android Credential Manager sheet — WebAuthnPlugin.java now runs CTAP2 getAssertion/makeCredential itself on YubiKit 3.1.0 (NFC reader mode with skipNdefCheck + USB discovery, own "hold the key to the phone" AlertDialog, raw Ctap2Session so a PIN-protected key is never asked for its PIN, allow-lists longer than maxCredentialCountInList probed in silent up=false chunks, connection loss keeps the dialog open for the next tap); the assertion signs for the web origin (public.apiBase = WEBAUTHN_ORIGIN) so no Play services, no asset links and no apk-key-hash origin are involved any more (mode 'system' keeps the Credential Manager path as fallback); NFC permission + optional nfc/usb-host features in the manifest; useWebAuthn passes origin, localized dialog texts and exposes cancelNative/capabilities, sign-in page cancels an open dialog on unmount; mobile web sign-in (≤768 px, not iOS, not in the app) shows an Android APK download card with the public manifest's version; de/en/es texts; recipe updated</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/signin.vue</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>app/composables/useWebAuthn.ts</file></path><path><editType>edit</editType><file>android/variables.gradle</file></path><path><editType>edit</editType><file>.claude/rules/auth/webauthn-security-keys.md</file></path><path><editType>edit</editType><file>android/app/src/main/AndroidManifest.xml</file></path><path><editType>edit</editType><file>android/app/src/main/java/com/logship/mobile/WebAuthnPlugin.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/useWebAuthn.ts</affectedPath><affectedPath>android/app/src/main/java/com/logship/mobile/WebAuthnPlugin.java</affectedPath><commitId>8c5b5df7a2a21edbe63c6414c5a30f67e4fc6787</commitId><timestamp>1792861176000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Security-key login (native app): never hide the key button — the YubiKit manager is created lazily (a throwing Plugin.load() makes Capacitor drop the whole plugin and the sign-in page silently lost the button), isAvailable() always resolves and reports nfc/usb/yubikit flags plus the init error text, the composable treats a rejected availability call as "plugin unavailable" and surfaces that reason on tap instead of hiding the button, dialog.show() guarded
</comment><date>2026-10-24 18:59:36 +0200</date><id>8c5b5df7a2a21edbe63c6414c5a30f67e4fc6787</id><msg>Security-key login (native app): never hide the key button — the YubiKit manager is created lazily (a throwing Plugin.load() makes Capacitor drop the whole plugin and the sign-in page silently lost the button), isAvailable() always resolves and reports nfc/usb/yubikit flags plus the init error text, the composable treats a rejected availability call as "plugin unavailable" and surfaces that reason on tap instead of hiding the button, dialog.show() guarded</msg><path><editType>edit</editType><file>app/composables/useWebAuthn.ts</file></path><path><editType>edit</editType><file>android/app/src/main/java/com/logship/mobile/WebAuthnPlugin.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/signin.vue</affectedPath><affectedPath>server/api/mobile/app-download.get.ts</affectedPath><commitId>e63b9d8bf517b17933a3beb7e4eef53d80275198</commitId><timestamp>1792861753000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Sign-in Android download card: point at the CURRENT build in the ERP release channel — new public GET /api/mobile/app-download returns version + a 24 h signed download URL (data/mobile-releases via mobileReleases.ts), legacy www.logyou.de manifest only as fallback; the old public web root still served the September build 1.0.45, so the card would have handed out a stale APK
</comment><date>2026-10-24 19:09:13 +0200</date><id>e63b9d8bf517b17933a3beb7e4eef53d80275198</id><msg>Sign-in Android download card: point at the CURRENT build in the ERP release channel — new public GET /api/mobile/app-download returns version + a 24 h signed download URL (data/mobile-releases via mobileReleases.ts), legacy www.logyou.de manifest only as fallback; the old public web root still served the September build 1.0.45, so the card would have handed out a stale APK</msg><path><editType>add</editType><file>server/api/mobile/app-download.get.ts</file></path><path><editType>edit</editType><file>app/pages/signin.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/update-files/version.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><commitId>378885a48e4f902910fad004ab676b75d48e3466</commitId><timestamp>1792861879000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>release app 1.0.67 (code 68): in-app YubiKey security-key ceremony, Android download card
</comment><date>2026-10-24 19:11:19 +0200</date><id>378885a48e4f902910fad004ab676b75d48e3466</id><msg>release app 1.0.67 (code 68): in-app YubiKey security-key ceremony, Android download card</msg><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>776</buildNumber><marked><SHA1>e5b38904bc10edc92a7c1c05cb20806821c46b1d</SHA1><branch><SHA1>e5b38904bc10edc92a7c1c05cb20806821c46b1d</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>e5b38904bc10edc92a7c1c05cb20806821c46b1d</SHA1><branch><SHA1>e5b38904bc10edc92a7c1c05cb20806821c46b1d</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>e5b38904bc10edc92a7c1c05cb20806821c46b1d</SHA1><branch><SHA1>e5b38904bc10edc92a7c1c05cb20806821c46b1d</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'></action><building>false</building><displayName>#776</displayName><duration>66414</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #776</fullDisplayName><id>776</id><inProgress>false</inProgress><keepLog>false</keepLog><number>776</number><queueId>5864</queueId><result>SUCCESS</result><timestamp>1792800000765</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/776/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/gewinn-verlustrechnung.pdf</affectedPath><affectedPath>app/pages/bi/profit-loss.vue</affectedPath><affectedPath>app/components/BI/BankCashReport.vue</affectedPath><affectedPath>server/api/bi/bank-cash-report.get.ts</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><affectedPath>.claude/rules/bi/bank-cash-reports.md</affectedPath><affectedPath>app/composables/menu/admin/bi.ts</affectedPath><affectedPath>app/components/BI/BankCashMonthlyChart.vue</affectedPath><affectedPath>app/composables/useBankCashReport.ts</affectedPath><affectedPath>app/pages/bi/income-surplus.vue</affectedPath><affectedPath>"reference/einnahmen-\303\274berschuss-rechnung.pdf"</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>73321fb358e4ed9ac4e83ada59e5cb1d68c699ca</commitId><timestamp>1792731285000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>BI: Gewinn- und Verlustrechnung (GuV) + Einnahmenüberschussrechnung (EÜR) on bank basis — every bank statement line of the year (all accounts, DR+CO) split by sign into income/expense per month, year nav + previous-year comparison, per-account rows (GuV) / top-counterpart rows with EÜR line numbers (EÜR), result + cumulative rows, monthly chart (columns up/down + result line), top payers/payees, month &amp; counterpart drill-down modal, CSV export + print; internal transfers between own accounts flagged and excluded by default; BI header dropdown grouped into Lager &amp; Logistik / Vertrieb &amp; Artikel / Finanzen (sidebar list reordered to match); de/en/es keys; recipe .claude/rules/bi/bank-cash-reports.md; example PDFs in reference/
</comment><date>2026-10-23 06:54:45 +0200</date><id>73321fb358e4ed9ac4e83ada59e5cb1d68c699ca</id><msg>BI: Gewinn- und Verlustrechnung (GuV) + Einnahmenüberschussrechnung (EÜR) on bank basis — every bank statement line of the year (all accounts, DR+CO) split by sign into income/expense per month, year nav + previous-year comparison, per-account rows (GuV) / top-counterpart rows with EÜR line numbers (EÜR), result + cumulative rows, monthly chart (columns up/down + result line), top payers/payees, month &amp; counterpart drill-down modal, CSV export + print; internal transfers between own accounts flagged and excluded by default; BI header dropdown grouped into Lager &amp; Logistik / Vertrieb &amp; Artikel / Finanzen (sidebar list reordered to match); de/en/es keys; recipe .claude/rules/bi/bank-cash-reports.md; example PDFs in reference/</msg><path><editType>add</editType><file>app/components/BI/BankCashMonthlyChart.vue</file></path><path><editType>add</editType><file>app/pages/bi/income-surplus.vue</file></path><path><editType>edit</editType><file>app/composables/menu/admin/bi.ts</file></path><path><editType>add</editType><file>app/pages/bi/profit-loss.vue</file></path><path><editType>add</editType><file>app/composables/useBankCashReport.ts</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>add</editType><file>app/components/BI/BankCashReport.vue</file></path><path><editType>add</editType><file>.claude/rules/bi/bank-cash-reports.md</file></path><path><editType>add</editType><file>"reference/einnahmen-\303\274berschuss-rechnung.pdf"</file></path><path><editType>add</editType><file>reference/gewinn-verlustrechnung.pdf</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/api/bi/bank-cash-report.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/accounting/banking/BankFileImportModal.vue</affectedPath><affectedPath>server/api/accounting/bank-file-import/import.post.ts</affectedPath><affectedPath>server/utils/banking/bankFileImport.ts</affectedPath><affectedPath>server/api/accounting/bank-file-import/replan.post.ts</affectedPath><affectedPath>server/api/accounting/bank-file-import/preview.post.ts</affectedPath><affectedPath>.claude/rules/accounting/banking-paypal.md</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>64901d4e2a8c2580fe59d3d68fb480cf98f2b0e3</commitId><timestamp>1792768717000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Banking CAMT.052 import: manual target-account picker when the file IBAN matches no iDempiere bank account (bank merger → new IBAN) — preview returns all active C_BankAccounts, new replan route re-runs the dry run against the picked account, import passes bankAccountId through; the chosen IBAN → account assignment is remembered in data/bank-file-import/account-aliases.json so later uploads resolve automatically (badge in the preview, correctable); de/en/es keys; recipe section in banking-paypal.md
</comment><date>2026-10-23 17:18:37 +0200</date><id>64901d4e2a8c2580fe59d3d68fb480cf98f2b0e3</id><msg>Banking CAMT.052 import: manual target-account picker when the file IBAN matches no iDempiere bank account (bank merger → new IBAN) — preview returns all active C_BankAccounts, new replan route re-runs the dry run against the picked account, import passes bankAccountId through; the chosen IBAN → account assignment is remembered in data/bank-file-import/account-aliases.json so later uploads resolve automatically (badge in the preview, correctable); de/en/es keys; recipe section in banking-paypal.md</msg><path><editType>edit</editType><file>.claude/rules/accounting/banking-paypal.md</file></path><path><editType>edit</editType><file>app/components/accounting/banking/BankFileImportModal.vue</file></path><path><editType>edit</editType><file>server/api/accounting/bank-file-import/import.post.ts</file></path><path><editType>edit</editType><file>server/utils/banking/bankFileImport.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/api/accounting/bank-file-import/replan.post.ts</file></path><path><editType>edit</editType><file>server/api/accounting/bank-file-import/preview.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/useBankCashReportPdf.ts</affectedPath><affectedPath>.claude/rules/bi/bank-cash-reports.md</affectedPath><affectedPath>app/components/BI/BankCashReport.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>e5b38904bc10edc92a7c1c05cb20806821c46b1d</commitId><timestamp>1792768724000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>BI GuV / EÜR: PDF report button (jsPDF, A4 landscape, client-only) — overview page with KPI cards + natively drawn monthly chart (income/expense columns, result line, dashed previous year), report table page (month × position, EÜR line numbers, closing block kept together, notes never alone on a page), counterparts page with share bars; header band with org + scope + logo, footer with timestamp/data basis/page x of y; built from the same aggregated rows the page shows; de/en/es keys; recipe note
</comment><date>2026-10-23 17:18:44 +0200</date><id>e5b38904bc10edc92a7c1c05cb20806821c46b1d</id><msg>BI GuV / EÜR: PDF report button (jsPDF, A4 landscape, client-only) — overview page with KPI cards + natively drawn monthly chart (income/expense columns, result line, dashed previous year), report table page (month × position, EÜR line numbers, closing block kept together, notes never alone on a page), counterparts page with share bars; header band with org + scope + logo, footer with timestamp/data basis/page x of y; built from the same aggregated rows the page shows; de/en/es keys; recipe note</msg><path><editType>edit</editType><file>app/components/BI/BankCashReport.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>.claude/rules/bi/bank-cash-reports.md</file></path><path><editType>add</editType><file>app/composables/useBankCashReportPdf.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>775</buildNumber><marked><SHA1>2146eb6cda626967bfe67e1c156bc25e80917dc9</SHA1><branch><SHA1>2146eb6cda626967bfe67e1c156bc25e80917dc9</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>2146eb6cda626967bfe67e1c156bc25e80917dc9</SHA1><branch><SHA1>2146eb6cda626967bfe67e1c156bc25e80917dc9</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>2146eb6cda626967bfe67e1c156bc25e80917dc9</SHA1><branch><SHA1>2146eb6cda626967bfe67e1c156bc25e80917dc9</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'></action><building>false</building><displayName>#775</displayName><duration>103520</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #775</fullDisplayName><id>775</id><inProgress>false</inProgress><keepLog>false</keepLog><number>775</number><queueId>5861</queueId><result>SUCCESS</result><timestamp>1792713600765</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/775/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>deploy/pm2-root.service.d/override.conf</affectedPath><affectedPath>reference/ci/deploy-production.sh</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>package-lock.json</affectedPath><affectedPath>ecosystem.config.cjs</affectedPath><affectedPath>.claude/rules/nuxt/dependency-upgrades.md</affectedPath><affectedPath>package.json</affectedPath><commitId>c45b03221311f76ad94f5002ccebe107050ee636</commitId><timestamp>1792649418000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dependencies: upgrade pass (npm audit 105 → 17, 0 critical) + prod Node 22.22.3

- Nuxt 4.4.7 → 4.6.2 (Vite 8.3.5, Vue 3.5.44, @nuxt/ui 4.12.0, @sentry/nuxt 10.76.2), amCharts 5.21.3,
  Capacitor 8.5.3 (android CVE fix, needs an APK release), vue-pdf 2.2.1 (pdfjs RCE fix), quagga2,
  firebase-admin, form-data, imapflow, fast-xml-parser, mysql2, pg, sass, dompurify, bwip-js, three 0.186
- Low-risk majors: nodemailer 10 (all transports are localhost:25 with TLS checks off), sharp 0.35
  (libvips CVEs), better-sqlite3 13 (N-API prebuilds), sqlite3 6, @simplewebauthn 14, @elastic/elasticsearch 9
- xlsx: npm 0.18.5 (unfixable advisories) → SheetJS CDN tarball 0.20.3 (same API, write path only)
- Removed unused @nuxt/image (pulled vulnerable ipx) and ndarray-pixels; alga-css pinned exactly to
  1.0.0-beta-51 (npm audit fix would move it to the foreign 1.0.0-wood-* line)
- nuxt.config: vite.build.cssMinify = 'esbuild' — Vite 8's lightningcss rejects an invalid selector in
  bulma-extensions.min.css and fails the build
- Lockfile regenerated from scratch (prod installs with npm ci)
- Prod Node v22.14.0 → v22.22.3 (Nuxt 4.6 engine floor): deploy-production.sh, ecosystem.config.cjs,
  pm2 systemd drop-in; node pre-installed on the host via nvm, deploy script flips the default alias
- Recipe .claude/rules/nuxt/dependency-upgrades.md
- Held back: @sentry/nuxt 11, pdfmake 0.3, @anthropic-ai/sdk 1.x (separate tasks)
</comment><date>2026-10-22 08:10:18 +0200</date><id>c45b03221311f76ad94f5002ccebe107050ee636</id><msg>Dependencies: upgrade pass (npm audit 105 → 17, 0 critical) + prod Node 22.22.3</msg><path><editType>add</editType><file>.claude/rules/nuxt/dependency-upgrades.md</file></path><path><editType>edit</editType><file>reference/ci/deploy-production.sh</file></path><path><editType>edit</editType><file>deploy/pm2-root.service.d/override.conf</file></path><path><editType>edit</editType><file>package-lock.json</file></path><path><editType>edit</editType><file>package.json</file></path><path><editType>edit</editType><file>ecosystem.config.cjs</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/settlement-exports/index.post.ts</affectedPath><affectedPath>app/composables/useSettlementExportLog.ts</affectedPath><affectedPath>app/components/accounting/SettlementGridFilters.vue</affectedPath><affectedPath>app/components/accounting/SettlementLexofficeActions.vue</affectedPath><affectedPath>app/pages/accounting/amazon-settlements.vue</affectedPath><affectedPath>.claude/rules/accounting/lexoffice.md</affectedPath><affectedPath>app/composables/useLexofficeSettlementExport.ts</affectedPath><affectedPath>app/components/accounting/SettlementPeriodList.vue</affectedPath><affectedPath>app/components/AgGrid/Accounting/AgLexofficeSyncStatus.vue</affectedPath><affectedPath>app/utils/settlementGridFilter.ts</affectedPath><affectedPath>server/api/accounting/settlement-exports/reset.post.ts</affectedPath><affectedPath>app/pages/accounting/ebay-settlements.vue</affectedPath><affectedPath>server/api/accounting/settlement-exports/index.get.ts</affectedPath><affectedPath>server/utils/settlementExportLog.ts</affectedPath><affectedPath>app/components/accounting/LexofficeHintsPanel.vue</affectedPath><commitId>0253f6b9d29b056fc6eabf2fdcc0db355ace13dc</commitId><timestamp>1792650145000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Settlements: per-period lexoffice export log (data/settlement-exports.db) — fee/Ads/adjustment/unmatched/payout rows get a CSV status, period list shows offen/teilweise/exportiert, default ticks = not-yet-exported periods, duplicate-export confirm, period-level reset; CSV filter no longer drops rows without an order marker
</comment><date>2026-10-22 08:22:25 +0200</date><id>0253f6b9d29b056fc6eabf2fdcc0db355ace13dc</id><msg>Settlements: per-period lexoffice export log (data/settlement-exports.db) — fee/Ads/adjustment/unmatched/payout rows get a CSV status, period list shows offen/teilweise/exportiert, default ticks = not-yet-exported periods, duplicate-export confirm, period-level reset; CSV filter no longer drops rows without an order marker</msg><path><editType>edit</editType><file>app/components/accounting/SettlementLexofficeActions.vue</file></path><path><editType>edit</editType><file>app/components/accounting/LexofficeHintsPanel.vue</file></path><path><editType>add</editType><file>server/api/accounting/settlement-exports/index.get.ts</file></path><path><editType>add</editType><file>server/api/accounting/settlement-exports/reset.post.ts</file></path><path><editType>edit</editType><file>.claude/rules/accounting/lexoffice.md</file></path><path><editType>edit</editType><file>app/pages/accounting/ebay-settlements.vue</file></path><path><editType>add</editType><file>server/api/accounting/settlement-exports/index.post.ts</file></path><path><editType>edit</editType><file>app/composables/useLexofficeSettlementExport.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>edit</editType><file>app/components/AgGrid/Accounting/AgLexofficeSyncStatus.vue</file></path><path><editType>edit</editType><file>app/components/accounting/SettlementPeriodList.vue</file></path><path><editType>add</editType><file>server/utils/settlementExportLog.ts</file></path><path><editType>edit</editType><file>app/utils/settlementGridFilter.ts</file></path><path><editType>add</editType><file>app/composables/useSettlementExportLog.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/ci/deploy-production.sh</affectedPath><commitId>91eaac695777f3eb9234ef9b642a052d98ad935c</commitId><timestamp>1792650178000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Deploy script: keep data/settlement-exports.db (settlement export log) across deploys
</comment><date>2026-10-22 08:22:58 +0200</date><id>91eaac695777f3eb9234ef9b642a052d98ad935c</id><msg>Deploy script: keep data/settlement-exports.db (settlement export log) across deploys</msg><path><editType>edit</editType><file>reference/ci/deploy-production.sh</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/leads/leadChat.ts</affectedPath><affectedPath>.env</affectedPath><affectedPath>server/utils/leads/leadAssessment.ts</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>.claude/rules/leads/ai-assessment.md</affectedPath><affectedPath>.env-prod</affectedPath><commitId>2898324c5ffdee9b00cd4ff5085aa3c52ea705da</commitId><timestamp>1792668268000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead KI-Konsole: answer limit 8000 → 32000 output tokens (ANTHROPIC_CHAT_MAX_TOKENS, 1000–128000) + auto-continuation (up to 2 rounds) when an answer still hits max_tokens; 10 min client timeout
</comment><date>2026-10-22 13:24:28 +0200</date><id>2898324c5ffdee9b00cd4ff5085aa3c52ea705da</id><msg>Lead KI-Konsole: answer limit 8000 → 32000 output tokens (ANTHROPIC_CHAT_MAX_TOKENS, 1000–128000) + auto-continuation (up to 2 rounds) when an answer still hits max_tokens; 10 min client timeout</msg><path><editType>edit</editType><file>.claude/rules/leads/ai-assessment.md</file></path><path><editType>edit</editType><file>server/utils/leads/leadAssessment.ts</file></path><path><editType>edit</editType><file>server/utils/leads/leadChat.ts</file></path><path><editType>edit</editType><file>.env-prod</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>.env</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>app/components/admin/LeadForm.vue</affectedPath><affectedPath>app/composables/useIsMobile.ts</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>app/components/leads/CardList.vue</affectedPath><affectedPath>.claude/rules/leads/crm-qualification.md</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>2146eb6cda626967bfe67e1c156bc25e80917dc9</commitId><timestamp>1792668268000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads on phones: card list (name, company, status, stars, follow-up, offer/contract, phone + dial, e-mail, URL) replaces the grid ≤ 768 px with search/sort/filter toggle; lead page gets collapsible form + side cards, 2-column CTA grid, fixed back · call · save bar; fix global aside rule hiding the side column on mobile
</comment><date>2026-10-22 13:24:28 +0200</date><id>2146eb6cda626967bfe67e1c156bc25e80917dc9</id><msg>Leads on phones: card list (name, company, status, stars, follow-up, offer/contract, phone + dial, e-mail, URL) replaces the grid ≤ 768 px with search/sort/filter toggle; lead page gets collapsible form + side cards, 2-column CTA grid, fixed back · call · save bar; fix global aside rule hiding the side column on mobile</msg><path><editType>edit</editType><file>app/components/admin/LeadForm.vue</file></path><path><editType>edit</editType><file>.claude/rules/leads/crm-qualification.md</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>add</editType><file>app/components/leads/CardList.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>app/composables/useIsMobile.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>774</buildNumber><marked><SHA1>279100731de579a641a727198fe52dc60054b233</SHA1><branch><SHA1>279100731de579a641a727198fe52dc60054b233</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>279100731de579a641a727198fe52dc60054b233</SHA1><branch><SHA1>279100731de579a641a727198fe52dc60054b233</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>279100731de579a641a727198fe52dc60054b233</SHA1><branch><SHA1>279100731de579a641a727198fe52dc60054b233</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'></action><building>false</building><displayName>#774</displayName><duration>73944</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #774</fullDisplayName><id>774</id><inProgress>false</inProgress><keepLog>false</keepLog><number>774</number><queueId>5858</queueId><result>SUCCESS</result><timestamp>1792627200766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/774/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/accounting/SettlementToolbar.vue</affectedPath><affectedPath>app/pages/accounting/amazon-settlements.vue</affectedPath><affectedPath>app/composables/useLexofficeSettlementExport.ts</affectedPath><commitId>95a60a86c097975e28c7c8232c25ccbe4f4d7d5e</commitId><timestamp>1792553276000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon settlements: Lexoffice CSV export follows the grid – exports exactly the visible (filtered) rows of the ticked periods instead of re-fetching whole periods; partial periods go out without payout/residue row and are reported; toolbar label shows rows · periods; grid height fills the remaining viewport (ResizeObserver + resize)
</comment><date>2026-10-21 05:27:56 +0200</date><id>95a60a86c097975e28c7c8232c25ccbe4f4d7d5e</id><msg>Amazon settlements: Lexoffice CSV export follows the grid – exports exactly the visible (filtered) rows of the ticked periods instead of re-fetching whole periods; partial periods go out without payout/residue row and are reported; toolbar label shows rows · periods; grid height fills the remaining viewport (ResizeObserver + resize)</msg><path><editType>edit</editType><file>app/components/accounting/SettlementToolbar.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/amazon-settlements.vue</file></path><path><editType>edit</editType><file>app/composables/useLexofficeSettlementExport.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/accounting/lexoffice.md</affectedPath><commitId>3099df0306afe1bf42b92714c17485116c69d7f6</commitId><timestamp>1792553287000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Rules: note the visible-rows scope of the Amazon settlement Lexoffice CSV export
</comment><date>2026-10-21 05:28:07 +0200</date><id>3099df0306afe1bf42b92714c17485116c69d7f6</id><msg>Rules: note the visible-rows scope of the Amazon settlement Lexoffice CSV export</msg><path><editType>edit</editType><file>.claude/rules/accounting/lexoffice.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-settlements.vue</affectedPath><affectedPath>.claude/rules/accounting/lexoffice.md</affectedPath><commitId>d9b873bc0d17f9874be8a8a4cf52a64e7a0a6e6d</commitId><timestamp>1792555550000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon settlements: periods with payout status Unknown/Failed are exportable (only Processing is excluded) – negative periods get an 'Amazon Belastung' payout row, failed transfers none; disabled export button explains how many visible rows sit in non-exportable/unticked periods
</comment><date>2026-10-21 06:05:50 +0200</date><id>d9b873bc0d17f9874be8a8a4cf52a64e7a0a6e6d</id><msg>Amazon settlements: periods with payout status Unknown/Failed are exportable (only Processing is excluded) – negative periods get an 'Amazon Belastung' payout row, failed transfers none; disabled export button explains how many visible rows sit in non-exportable/unticked periods</msg><path><editType>edit</editType><file>.claude/rules/accounting/lexoffice.md</file></path><path><editType>edit</editType><file>app/pages/accounting/amazon-settlements.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/mail/LeadFollowupModal.vue</affectedPath><affectedPath>app/components/AgGrid/AgLeadExpireToggle.vue</affectedPath><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>server/api/mail/lead-followups.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>090cc23eef312f4cf2affc3c074d9f88b539fccf</commitId><timestamp>1792555983000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads: Unanswered check skips expired leads by default (opt-in checkbox lists them badged, stat shows how many were skipped); one-click expire/reactivate clock column in the list (flags route, row leaves the list while 'Hide expired' is on, previous status restored on reactivate)
</comment><date>2026-10-21 06:13:03 +0200</date><id>090cc23eef312f4cf2affc3c074d9f88b539fccf</id><msg>Leads: Unanswered check skips expired leads by default (opt-in checkbox lists them badged, stat shows how many were skipped); one-click expire/reactivate clock column in the list (flags route, row leaves the list while 'Hide expired' is on, previous status restored on reactivate)</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/api/mail/lead-followups.get.ts</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path><path><editType>add</editType><file>app/components/AgGrid/AgLeadExpireToggle.vue</file></path><path><editType>edit</editType><file>app/components/mail/LeadFollowupModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/dhlHelper.ts</affectedPath><affectedPath>.claude/rules/fulfillment/shippers.md</affectedPath><commitId>3acdcc2133e82953e85e2c67bbc46bbe48a664cb</commitId><timestamp>1792580585000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>DHL: token errors tell network/DNS failures ('DHL-API nicht erreichbar', credentials not checked) and DHL 5xx outages apart from real login rejections; recipe documents where the main DHL account lives and the Unbound resolver fix
</comment><date>2026-10-21 13:03:05 +0200</date><id>3acdcc2133e82953e85e2c67bbc46bbe48a664cb</id><msg>DHL: token errors tell network/DNS failures ('DHL-API nicht erreichbar', credentials not checked) and DHL 5xx outages apart from real login rejections; recipe documents where the main DHL account lives and the Unbound resolver fix</msg><path><editType>edit</editType><file>.claude/rules/fulfillment/shippers.md</file></path><path><editType>edit</editType><file>server/utils/dhlHelper.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/integrations/CommissionModal.vue</affectedPath><affectedPath>app/composables/usePaketTypes.ts</affectedPath><affectedPath>app/pages/integrations/commission.vue</affectedPath><commitId>f98f9286eab7a7f7d351db6cadfc4b036558eecb</commitId><timestamp>1792581475000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Commission page: sidebar regrouped (carrier header with logo → Shipping Address → Shipping → Tisch &amp; Printing, no dead space); paket type as Nuxt UI SelectBox showing the real product names (Paket S/M/L/XL, Keine Verpackung, Kleinpaket) with CODE badge + hint via shared usePaketTypes catalog (modal select uses it too); shipping service as logo cards; Tisch as SelectBox; next-step banner on light tinted surface with dark text; commission-system pill moved to the bottom activity bar; achievement thresholds doubled (gold 20 / platinum 30 / diamond 40 in 10 min, test codes TEST20/30/40)
</comment><date>2026-10-21 13:17:55 +0200</date><id>f98f9286eab7a7f7d351db6cadfc4b036558eecb</id><msg>Commission page: sidebar regrouped (carrier header with logo → Shipping Address → Shipping → Tisch &amp; Printing, no dead space); paket type as Nuxt UI SelectBox showing the real product names (Paket S/M/L/XL, Keine Verpackung, Kleinpaket) with CODE badge + hint via shared usePaketTypes catalog (modal select uses it too); shipping service as logo cards; Tisch as SelectBox; next-step banner on light tinted surface with dark text; commission-system pill moved to the bottom activity bar; achievement thresholds doubled (gold 20 / platinum 30 / diamond 40 in 10 min, test codes TEST20/30/40)</msg><path><editType>edit</editType><file>app/components/integrations/CommissionModal.vue</file></path><path><editType>add</editType><file>app/composables/usePaketTypes.ts</file></path><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/commission.vue</affectedPath><commitId>d81042d263d7e1e0b634367001da80cdbbea2381</commitId><timestamp>1792581622000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Commission page: paket type picked from a chip grid (all types visible as buttons with name + CODE badge, click again clears, focus returns to the scanner input) instead of a dropdown
</comment><date>2026-10-21 13:20:22 +0200</date><id>d81042d263d7e1e0b634367001da80cdbbea2381</id><msg>Commission page: paket type picked from a chip grid (all types visible as buttons with name + CODE badge, click again clears, focus returns to the scanner input) instead of a dropdown</msg><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/commission.vue</affectedPath><commitId>009da7b7ae0c2a9961ae424a21fd790de45ff2d8</commitId><timestamp>1792581951000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Commission page: paket type chips collapsed behind a select-style row (placeholder or the chosen type with CODE badge + hint); click expands the grid, picking a chip or a CODE scan collapses it
</comment><date>2026-10-21 13:25:51 +0200</date><id>009da7b7ae0c2a9961ae424a21fd790de45ff2d8</id><msg>Commission page: paket type chips collapsed behind a select-style row (placeholder or the chosen type with CODE badge + hint); click expands the grid, picking a chip or a CODE scan collapses it</msg><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/commission.vue</affectedPath><commitId>157878ce95241e60671aa2377ddd240dbfa1ee7b</commitId><timestamp>1792582252000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Commission page: shipping service cards collapsed behind the current choice (logo + name + hint), click expands, pick collapses; sidebar carrier header now follows the SELECTED service (logo + name) with the order's shipper as subline; logo images keyed so they re-render on change
</comment><date>2026-10-21 13:30:52 +0200</date><id>157878ce95241e60671aa2377ddd240dbfa1ee7b</id><msg>Commission page: shipping service cards collapsed behind the current choice (logo + name + hint), click expands, pick collapses; sidebar carrier header now follows the SELECTED service (logo + name) with the order's shipper as subline; logo images keyed so they re-render on change</msg><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/commission.vue</affectedPath><commitId>2acbeaf1a8f6816a4e5adb0809f18a9c3f9865ca</commitId><timestamp>1792582455000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Commission page: multi-parcel block fits the sidebar column (no outer margin, stacked header, full-width compact 'Neues Paket' button, wrapping count row)
</comment><date>2026-10-21 13:34:15 +0200</date><id>2acbeaf1a8f6816a4e5adb0809f18a9c3f9865ca</id><msg>Commission page: multi-parcel block fits the sidebar column (no outer margin, stacked header, full-width compact 'Neues Paket' button, wrapping count row)</msg><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/admin/LeadDetailRecordActivity.vue</affectedPath><affectedPath>server/api/telephony/recordings/index.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>eb3b51da3dd92e9d5d7d49e53dd3a14b1ebb6c27</commitId><timestamp>1792582499000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads: phone-call activities show the matching FreePBX recording inline (matched by time, ≤15 min), with cached whisper transcript preview (expand/copy), play button and a Transkribieren action; recordings route gains withTranscripts=1 to embed cached transcripts
</comment><date>2026-10-21 13:34:59 +0200</date><id>eb3b51da3dd92e9d5d7d49e53dd3a14b1ebb6c27</id><msg>Leads: phone-call activities show the matching FreePBX recording inline (matched by time, ≤15 min), with cached whisper transcript preview (expand/copy), play button and a Transkribieren action; recordings route gains withTranscripts=1 to embed cached transcripts</msg><path><editType>edit</editType><file>app/components/admin/LeadDetailRecordActivity.vue</file></path><path><editType>edit</editType><file>server/api/telephony/recordings/index.get.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/telephony/telephony.md</affectedPath><commitId>15e1bfad620b3d0df5124241e42eea8fe7e37b9a</commitId><timestamp>1792582869000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Rules: telephony — activity-entry transcript matching (by time only) and the local-dev PBX tunnel (CDR/recordings allow-list)
</comment><date>2026-10-21 13:41:09 +0200</date><id>15e1bfad620b3d0df5124241e42eea8fe7e37b9a</id><msg>Rules: telephony — activity-entry transcript matching (by time only) and the local-dev PBX tunnel (CDR/recordings allow-list)</msg><path><editType>edit</editType><file>.claude/rules/telephony/telephony.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/mail/lead-email-history.md</affectedPath><commitId>66d33475431ab2513802915148c451aba804b913</commitId><timestamp>1792583447000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Rules: lead e-mail history — ERP-sent staff mails now relay via Exchange (sender-dependent postfix relay on prod) so mailpiler archives them; IM chip still has no Sent copy
</comment><date>2026-10-21 13:50:47 +0200</date><id>66d33475431ab2513802915148c451aba804b913</id><msg>Rules: lead e-mail history — ERP-sent staff mails now relay via Exchange (sender-dependent postfix relay on prod) so mailpiler archives them; IM chip still has no Sent copy</msg><path><editType>edit</editType><file>.claude/rules/mail/lead-email-history.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/leads/monthlyOrders.ts</affectedPath><affectedPath>app/composables/useOfferContract.ts</affectedPath><affectedPath>server/utils/leads/leadAssessment.ts</affectedPath><affectedPath>server/utils/leads/leadQualification.ts</affectedPath><affectedPath>server/api/webhooks/fulfillment-leads.post.ts</affectedPath><affectedPath>app/components/DateTimeInputLocal.vue</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>.claude/rules/leads/crm-qualification.md</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/components/AgGrid/AgLeadRating.vue</affectedPath><affectedPath>server/api/admin/users/store.post.ts</affectedPath><affectedPath>server/api/offers/contract/send.post.ts</affectedPath><affectedPath>app/components/DateInputDe.vue</affectedPath><affectedPath>server/utils/offers/quoteConfirmation.ts</affectedPath><affectedPath>app/components/admin/LeadDetailRecordActivity.vue</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>server/api/webhooks/landing-leads.post.ts</affectedPath><affectedPath>server/api/admin/users/lead-lists.get.ts</affectedPath><affectedPath>server/utils/offers/contractSigning.ts</affectedPath><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>app/composables/useLeadQualification.ts</affectedPath><affectedPath>app/components/admin/LeadForm.vue</affectedPath><affectedPath>app/pages/users/leads/create.vue</affectedPath><affectedPath>server/api/admin/users/[id]/flags.put.ts</affectedPath><affectedPath>server/api/offers/quote/send.post.ts</affectedPath><affectedPath>app/pages/users/leads/[id]/view.vue</affectedPath><commitId>5756b9cccea6ecc4ffffd23e83c091157067f411</commitId><timestamp>1792587970000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads: CRM qualification fields (17 custom AD_User columns) with full CRUD on the lead page and inline editing in the leads list

- LeadRating (yellow 1–5 stars), FollowUpDate (+ note, quick +1/+3/+7/+14, past days greyed out, overdue/today badges), MonthlyOrders, SkuCount, ShopSystem, BusinessModel + LostReason (reference lists read from the API), ExpectedMonthlyValue, WinProbability (auto per stage: working 25 · quote 50 · accepted 70 · contract 85 · signed 95 · converted 100 · lost 0, never lowered automatically), ExpectedStartDate, AiScore (written by KI-Analyse), AvgParcelWeight, address LeadStreet/LeadZip/LeadCity/LeadCountry (prefills quote &amp; contract, written back on send)
- every control autosaves via PUT /api/admin/users/:id/flags (whitelisted + validated in server/utils/leads/leadQualification.ts); Expired/Recycled asks for the lost reason
- quote/contract send sync sizing assumptions, forecast total and address onto the lead; confirmation / signature bump the probability
- website webhooks parse volume (range → midpoint), integrations and weight into the new columns, retrying without them on error
- leads list: rating/follow-up/orders/€/probability/weighted/AI columns editable inline (explicit cellDataType), follow-up filter, weighted pipeline total; more columns via the column menu
- lead page: Nuxt UI SelectBox for all selects (no tedir left), DateTimeInputLocal for activity start/end, notes = Comments only in the right column, organisation + search key in the header, two aligned cards "Bedarf &amp; Profil" / "Pipeline &amp; Bewertung"
- recipe .claude/rules/leads/crm-qualification.md
</comment><date>2026-10-21 15:06:10 +0200</date><id>5756b9cccea6ecc4ffffd23e83c091157067f411</id><msg>Leads: CRM qualification fields (17 custom AD_User columns) with full CRUD on the lead page and inline editing in the leads list</msg><path><editType>edit</editType><file>server/utils/offers/quoteConfirmation.ts</file></path><path><editType>add</editType><file>app/components/AgGrid/AgLeadRating.vue</file></path><path><editType>edit</editType><file>server/utils/leads/leadAssessment.ts</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path><path><editType>edit</editType><file>app/components/DateInputDe.vue</file></path><path><editType>edit</editType><file>server/api/admin/users/store.post.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferContract.ts</file></path><path><editType>add</editType><file>app/composables/useLeadQualification.ts</file></path><path><editType>edit</editType><file>server/api/admin/users/[id]/flags.put.ts</file></path><path><editType>add</editType><file>server/api/admin/users/lead-lists.get.ts</file></path><path><editType>edit</editType><file>server/api/offers/quote/send.post.ts</file></path><path><editType>add</editType><file>app/components/DateTimeInputLocal.vue</file></path><path><editType>edit</editType><file>app/components/admin/LeadForm.vue</file></path><path><editType>edit</editType><file>server/utils/offers/contractSigning.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/create.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/view.vue</file></path><path><editType>add</editType><file>.claude/rules/leads/crm-qualification.md</file></path><path><editType>edit</editType><file>app/components/admin/LeadDetailRecordActivity.vue</file></path><path><editType>edit</editType><file>server/api/webhooks/landing-leads.post.ts</file></path><path><editType>edit</editType><file>server/api/webhooks/fulfillment-leads.post.ts</file></path><path><editType>add</editType><file>server/utils/leads/leadQualification.ts</file></path><path><editType>add</editType><file>server/utils/leads/monthlyOrders.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>server/api/offers/contract/send.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/index.vue</affectedPath><affectedPath>.claude/rules/leads/crm-qualification.md</affectedPath><affectedPath>server/api/admin/users/leads/followups.get.ts</affectedPath><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>11cf2fc9ca2eae1b0bda49e4f30f914ad821d781</commitId><timestamp>1792588545000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads: list columns reordered and compacted (stars after company, WV with note tooltip, Best./M., €/M., %, Gew. €, KI, shop system; status/description/last-activity/note columns removed); dashboard banner with follow-ups due today or overdue linking to the lead
</comment><date>2026-10-21 15:15:45 +0200</date><id>11cf2fc9ca2eae1b0bda49e4f30f914ad821d781</id><msg>Leads: list columns reordered and compacted (stars after company, WV with note tooltip, Best./M., €/M., %, Gew. €, KI, shop system; status/description/last-activity/note columns removed); dashboard banner with follow-ups due today or overdue linking to the lead</msg><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>edit</editType><file>.claude/rules/leads/crm-qualification.md</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/api/admin/users/leads/followups.get.ts</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>.claude/rules/leads/crm-qualification.md</affectedPath><commitId>d7d4f930268de2ddddabf60ac8f8c31270294339</commitId><timestamp>1792589992000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads list: €/month, win % and weighted € columns hidden by default (column menu)
</comment><date>2026-10-21 15:39:52 +0200</date><id>d7d4f930268de2ddddabf60ac8f8c31270294339</id><msg>Leads list: €/month, win % and weighted € columns hidden by default (column menu)</msg><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path><path><editType>edit</editType><file>.claude/rules/leads/crm-qualification.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>app/components/AgGrid/AgLeadRating.vue</affectedPath><commitId>15a64548a3b578de5337702c21b7a16d506a5901</commitId><timestamp>1792590199000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads list: rating cell no longer truncated with an ellipsis (no overflow clipping, tighter stars)
</comment><date>2026-10-21 15:43:19 +0200</date><id>15a64548a3b578de5337702c21b7a16d506a5901</id><msg>Leads list: rating cell no longer truncated with an ellipsis (no overflow clipping, tighter stars)</msg><path><editType>edit</editType><file>app/components/AgGrid/AgLeadRating.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/index.vue</affectedPath><commitId>c51153ce35bd4ad89511b95a6fc7f9dcd09afbba</commitId><timestamp>1792590209000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads list: follow-up cell not truncated with an ellipsis
</comment><date>2026-10-21 15:43:29 +0200</date><id>c51153ce35bd4ad89511b95a6fc7f9dcd09afbba</id><msg>Leads list: follow-up cell not truncated with an ellipsis</msg><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/leads/crm-qualification.md</affectedPath><affectedPath>app/pages/users/leads/index.vue</affectedPath><commitId>5e73df84fd165b53aebf6a873f72795ccc8679cc</commitId><timestamp>1792590269000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads list: follow-up (WV) column moved to second position after Created
</comment><date>2026-10-21 15:44:29 +0200</date><id>5e73df84fd165b53aebf6a873f72795ccc8679cc</id><msg>Leads list: follow-up (WV) column moved to second position after Created</msg><path><editType>edit</editType><file>.claude/rules/leads/crm-qualification.md</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/leads/[id]/mail/context.get.ts</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>server/utils/mail/staffMail.ts</affectedPath><commitId>609bdc55e01130493f296686f80b3540787b9210</commitId><timestamp>1792596416000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Offer volume matrix: row label shortened to 'Basispreis pro Auftrag' (legacy label mapped on load); lead mail signature prints Phone and Phone2 of the sender
</comment><date>2026-10-21 17:26:56 +0200</date><id>609bdc55e01130493f296686f80b3540787b9210</id><msg>Offer volume matrix: row label shortened to 'Basispreis pro Auftrag' (legacy label mapped on load); lead mail signature prints Phone and Phone2 of the sender</msg><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>server/api/leads/[id]/mail/context.get.ts</file></path><path><editType>edit</editType><file>server/utils/mail/staffMail.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/useOfferContract.ts</affectedPath><affectedPath>server/utils/offers/contractTexts.ts</affectedPath><affectedPath>server/utils/offers/contractPdf.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>app/components/offers/ContractModal.vue</affectedPath><commitId>279100731de579a641a727198fe52dc60054b233</commitId><timestamp>1792597464000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Offers: cut-off time on by default in the quote; contract gets an 'Im Vertrag nennen' switch (seeded from the quote) that removes the cut-off SLA item and uses a time-free express clause when off
</comment><date>2026-10-21 17:44:24 +0200</date><id>279100731de579a641a727198fe52dc60054b233</id><msg>Offers: cut-off time on by default in the quote; contract gets an 'Im Vertrag nennen' switch (seeded from the quote) that removes the cut-off SLA item and uses a time-free express clause when off</msg><path><editType>edit</editType><file>server/utils/offers/contractTexts.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/composables/useOfferContract.ts</file></path><path><editType>edit</editType><file>server/utils/offers/contractPdf.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>app/components/offers/ContractModal.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>773</buildNumber><marked><SHA1>1ac29d4dd7daa22766541e87ae46642d57562f6a</SHA1><branch><SHA1>1ac29d4dd7daa22766541e87ae46642d57562f6a</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>1ac29d4dd7daa22766541e87ae46642d57562f6a</SHA1><branch><SHA1>1ac29d4dd7daa22766541e87ae46642d57562f6a</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>1ac29d4dd7daa22766541e87ae46642d57562f6a</SHA1><branch><SHA1>1ac29d4dd7daa22766541e87ae46642d57562f6a</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'></action><building>false</building><displayName>#773</displayName><duration>69746</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #773</fullDisplayName><id>773</id><inProgress>false</inProgress><keepLog>false</keepLog><number>773</number><queueId>5850</queueId><result>SUCCESS</result><timestamp>1792540800765</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/773/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/leads/[id]/mail/send.post.ts</affectedPath><affectedPath>server/api/leads/[id]/mail/context.get.ts</affectedPath><affectedPath>.claude/rules/leads/ai-assessment.md</affectedPath><affectedPath>server/utils/leads/leadMailTemplates.ts</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/components/leads/MailComposeModal.vue</affectedPath><affectedPath>server/api/leads/[id]/assessment/draft.post.ts</affectedPath><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>app/components/admin/LeadForm.vue</affectedPath><affectedPath>server/api/admin/users/[id]/flags.put.ts</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>server/utils/mail/staffMail.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>5d0e5f88da8bd6a8243d81200f3baae74267bac5</commitId><timestamp>1792491792000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads: autosaving toggles, expired-lead filter, e-mail composer with templates, in-app dashboard tabs

- Lead page: switches, status pipeline and source picker save immediately via
  PUT /api/admin/users/:id/flags (whitelisted keys, rollback on error)
- Leads list: new Status column, expired leads greyed out and hidden by default
  via "Abgelaufene ausblenden" filter (checked by default, count badge)
- Lead page: "E-Mail senden" composer with DE/EN templates for before/after
  quote, contract and general stages (recommended by offer_conditions stage),
  placeholder guard, CC, activity log entry
- Shared staff→customer mail transport + branded signature in
  server/utils/mail/staffMail.ts (AI-draft send now uses it too)
- Dashboard "Letzte Leads" card opens leads as in-app tabs instead of new windows
</comment><date>2026-10-20 12:23:12 +0200</date><id>5d0e5f88da8bd6a8243d81200f3baae74267bac5</id><msg>Leads: autosaving toggles, expired-lead filter, e-mail composer with templates, in-app dashboard tabs</msg><path><editType>add</editType><file>server/api/leads/[id]/mail/send.post.ts</file></path><path><editType>edit</editType><file>.claude/rules/leads/ai-assessment.md</file></path><path><editType>add</editType><file>server/utils/leads/leadMailTemplates.ts</file></path><path><editType>add</editType><file>server/api/leads/[id]/mail/context.get.ts</file></path><path><editType>edit</editType><file>server/api/leads/[id]/assessment/draft.post.ts</file></path><path><editType>add</editType><file>server/api/admin/users/[id]/flags.put.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/admin/LeadForm.vue</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>add</editType><file>server/utils/mail/staffMail.ts</file></path><path><editType>add</editType><file>app/components/leads/MailComposeModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><commitId>3a65c683d5a46fda65e90f92b1a88853a0e677d9</commitId><timestamp>1792491792000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Android app: version 1.0.63 (64) – Dynamic Locators
</comment><date>2026-10-20 12:23:12 +0200</date><id>3a65c683d5a46fda65e90f92b1a88853a0e677d9</id><msg>Android app: version 1.0.63 (64) – Dynamic Locators</msg><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/leads/MailComposeModal.vue</affectedPath><commitId>3854484b70750e865952f8367c2f85b38116dd0c</commitId><timestamp>1792493121000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead mail composer: keep the footer with the send button inside the modal (grid row was sized to the template list, overflowing 92vh); sticky footer when the form scrolls
</comment><date>2026-10-20 12:45:21 +0200</date><id>3854484b70750e865952f8367c2f85b38116dd0c</id><msg>Lead mail composer: keep the footer with the send button inside the modal (grid row was sized to the template list, overflowing 92vh); sticky footer when the form scrolls</msg><path><editType>edit</editType><file>app/components/leads/MailComposeModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/composables/menu/admin/sales.ts</affectedPath><commitId>af4c95164ba24c3bf20bc8d4b0a72acf712768ed</commitId><timestamp>1792493863000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Navigation: Leads entry in the Sales (Vertrieb) header mega menu and the Sales sidebar group
</comment><date>2026-10-20 12:57:43 +0200</date><id>af4c95164ba24c3bf20bc8d4b0a72acf712768ed</id><msg>Navigation: Leads entry in the Sales (Vertrieb) header mega menu and the Sales sidebar group</msg><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/composables/menu/admin/sales.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/index.vue</affectedPath><commitId>5bdfec24f2d8ea56fb281e43cfe4b1a4d6a2f2f0</commitId><timestamp>1792497743000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads list: grid height follows the viewport (max(600px, 100vh - 370px)) instead of the fixed 600px
</comment><date>2026-10-20 14:02:23 +0200</date><id>5bdfec24f2d8ea56fb281e43cfe4b1a4d6a2f2f0</id><msg>Leads list: grid height follows the viewport (max(600px, 100vh - 370px)) instead of the fixed 600px</msg><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/InvoiceListFilters.vue</affectedPath><affectedPath>app/pages/sales/invoices/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>a2f5679d1b92675a282baf03fe1e9565f0aaa09a</commitId><timestamp>1792497870000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Invoices list: period filter (year and month, each optional and independent) in the filter bar, applied to the invoice date with per-year counts
</comment><date>2026-10-20 14:04:30 +0200</date><id>a2f5679d1b92675a282baf03fe1e9565f0aaa09a</id><msg>Invoices list: period filter (year and month, each optional and independent) in the filter bar, applied to the invoice date with per-year counts</msg><path><editType>edit</editType><file>app/components/sales/InvoiceListFilters.vue</file></path><path><editType>edit</editType><file>app/pages/sales/invoices/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/AgGrid/Invoices/AgDateInvoiced.vue</affectedPath><commitId>23c58f76fe6d7a31bae2bdfb6627d2bff01786d2</commitId><timestamp>1792497938000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Invoices: Invoiced column shows the date zero-padded as dd.mm.yyyy (01.07.2026 instead of 1.7.2026)
</comment><date>2026-10-20 14:05:38 +0200</date><id>23c58f76fe6d7a31bae2bdfb6627d2bff01786d2</id><msg>Invoices: Invoiced column shows the date zero-padded as dd.mm.yyyy (01.07.2026 instead of 1.7.2026)</msg><path><editType>edit</editType><file>app/components/AgGrid/Invoices/AgDateInvoiced.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/AgGrid/Invoices/AgInvoiceKind.vue</affectedPath><affectedPath>app/pages/sales/invoices/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>f7a9d3c3f44eec2c5c2b2d3de57543233f79dcc7</commitId><timestamp>1792498144000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Invoices list: drop the Status column in favour of draft (grey) / voided (amber, struck-through number) row tints; Type tags use the accounting short codes of the UI language (de: AR/ER/GS, es: FE/FR/NC); shorter Order / Invoice created headers
</comment><date>2026-10-20 14:09:04 +0200</date><id>f7a9d3c3f44eec2c5c2b2d3de57543233f79dcc7</id><msg>Invoices list: drop the Status column in favour of draft (grey) / voided (amber, struck-through number) row tints; Type tags use the accounting short codes of the UI language (de: AR/ER/GS, es: FE/FR/NC); shorter Order / Invoice created headers</msg><path><editType>edit</editType><file>app/components/AgGrid/Invoices/AgInvoiceKind.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/sales/invoices/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/invoices/index.vue</affectedPath><commitId>8144d9a436d8c46387592ac7793d2d27bb4c9d45</commitId><timestamp>1792498225000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Invoices list: partner column truncates names at 50 characters with an ellipsis (full name in tooltip and filters) and is capped at 340px
</comment><date>2026-10-20 14:10:25 +0200</date><id>8144d9a436d8c46387592ac7793d2d27bb4c9d45</id><msg>Invoices list: partner column truncates names at 50 characters with an ellipsis (full name in tooltip and filters) and is capped at 340px</msg><path><editType>edit</editType><file>app/pages/sales/invoices/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/InvoiceListFilters.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>fae8abdeb539a54a503314e95b15d5d3bf3ea212</commitId><timestamp>1792498335000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Invoices filter bar: Type buttons carry the language-specific short-code chip (AR/AP, AR/ER, FE/FR) with the full term as tooltip; German/Spanish labels aligned with the grid tags (Ausgangs-/Eingangsrechnungen, Facturas emitidas/recibidas)
</comment><date>2026-10-20 14:12:15 +0200</date><id>fae8abdeb539a54a503314e95b15d5d3bf3ea212</id><msg>Invoices filter bar: Type buttons carry the language-specific short-code chip (AR/AP, AR/ER, FE/FR) with the full term as tooltip; German/Spanish labels aligned with the grid tags (Ausgangs-/Eingangsrechnungen, Facturas emitidas/recibidas)</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/sales/InvoiceListFilters.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/invoices/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>0299522b12e9dd79d8bfa5aa71caffce01b85253</commitId><timestamp>1792498438000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Invoices list: translated column headers (grid + detail row) in en/de/es via invc_* keys instead of hardcoded English
</comment><date>2026-10-20 14:13:58 +0200</date><id>0299522b12e9dd79d8bfa5aa71caffce01b85253</id><msg>Invoices list: translated column headers (grid + detail row) in en/de/es via invc_* keys instead of hardcoded English</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/sales/invoices/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/InvoiceAction.vue</affectedPath><affectedPath>app/pages/sales/invoices/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>e75f5d4eb095a6ed5badfec4dabb2362ad47a8fa</commitId><timestamp>1792498707000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Invoices list: action cell without clone, with send-by-e-mail and (overdue only) payment-reminder icons moved in from their own columns, and a banknote+plus icon for adding a payment; Reminder/Email columns removed; translated icon tooltips
</comment><date>2026-10-20 14:18:27 +0200</date><id>e75f5d4eb095a6ed5badfec4dabb2362ad47a8fa</id><msg>Invoices list: action cell without clone, with send-by-e-mail and (overdue only) payment-reminder icons moved in from their own columns, and a banknote+plus icon for adding a payment; Reminder/Email columns removed; translated icon tooltips</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/sales/InvoiceAction.vue</file></path><path><editType>edit</editType><file>app/pages/sales/invoices/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/InvoiceAction.vue</affectedPath><affectedPath>app/components/sales/InvoiceListFilters.vue</affectedPath><commitId>e353e92a82600b0632cee9b71fcbe6efd7e5b3dd</commitId><timestamp>1792498932000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Invoices list: payment icon's plus badge kept inside the cell box (was clipped by the row); filter bar – Payment as a Nuxt UI SelectBox dropdown with status dots instead of five buttons, Type buttons show only the AR/AP short code (full term on hover)
</comment><date>2026-10-20 14:22:12 +0200</date><id>e353e92a82600b0632cee9b71fcbe6efd7e5b3dd</id><msg>Invoices list: payment icon's plus badge kept inside the cell box (was clipped by the row); filter bar – Payment as a Nuxt UI SelectBox dropdown with status dots instead of five buttons, Type buttons show only the AR/AP short code (full term on hover)</msg><path><editType>edit</editType><file>app/components/sales/InvoiceAction.vue</file></path><path><editType>edit</editType><file>app/components/sales/InvoiceListFilters.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/InvoiceListFilters.vue</affectedPath><commitId>79046381ce44bcd9200fd111f858936bf1e7e050</commitId><timestamp>1792499156000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Invoices filter bar: Order type, Year and Month as Nuxt UI SelectBox dropdowns (icons kept in the order-type items; 'all' sentinel for the empty year/month value)
</comment><date>2026-10-20 14:25:56 +0200</date><id>79046381ce44bcd9200fd111f858936bf1e7e050</id><msg>Invoices filter bar: Order type, Year and Month as Nuxt UI SelectBox dropdowns (icons kept in the order-type items; 'all' sentinel for the empty year/month value)</msg><path><editType>edit</editType><file>app/components/sales/InvoiceListFilters.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/InvoiceAction.vue</affectedPath><affectedPath>app/components/sales/InvoiceListFilters.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>039a3ea8f2ba665a3891b22b257a5460a03c7f09</commitId><timestamp>1792499329000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Invoices list: month filter as a popover tag grid (Jan…Dez + all), restored dropdown trigger widths; action cell – Lexoffice upload icon (faded + check when already uploaded), e-mail icon hidden on paid invoices
</comment><date>2026-10-20 14:28:49 +0200</date><id>039a3ea8f2ba665a3891b22b257a5460a03c7f09</id><msg>Invoices list: month filter as a popover tag grid (Jan…Dez + all), restored dropdown trigger widths; action cell – Lexoffice upload icon (faded + check when already uploaded), e-mail icon hidden on paid invoices</msg><path><editType>edit</editType><file>app/components/sales/InvoiceListFilters.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/sales/InvoiceAction.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/InvoiceAction.vue</affectedPath><commitId>7ed94819769925de8d681e630d037613ce057854</commitId><timestamp>1792499528000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Invoices list: action icons in fixed 20px slots so each icon keeps its column when neighbours are not applicable (hidden via visibility, not Bulma's is-hidden)
</comment><date>2026-10-20 14:32:08 +0200</date><id>7ed94819769925de8d681e630d037613ce057854</id><msg>Invoices list: action icons in fixed 20px slots so each icon keeps its column when neighbours are not applicable (hidden via visibility, not Bulma's is-hidden)</msg><path><editType>edit</editType><file>app/components/sales/InvoiceAction.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/invoices/index.vue</affectedPath><commitId>d1aca5fecfefed0a4a1404574e1d3285fcd81e03</commitId><timestamp>1792499627000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Invoices list: Action column fixed at 214px (content + padding) with auto-size suppressed, removing the empty space on the right
</comment><date>2026-10-20 14:33:47 +0200</date><id>d1aca5fecfefed0a4a1404574e1d3285fcd81e03</id><msg>Invoices list: Action column fixed at 214px (content + padding) with auto-size suppressed, removing the empty space on the right</msg><path><editType>edit</editType><file>app/pages/sales/invoices/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/invoices/index.vue</affectedPath><commitId>962029eeab30c7f159cc8ac1b8da874706c708eb</commitId><timestamp>1792499674000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Invoices list: Action column tightened to the icons (196px, 4px cell padding)
</comment><date>2026-10-20 14:34:34 +0200</date><id>962029eeab30c7f159cc8ac1b8da874706c708eb</id><msg>Invoices list: Action column tightened to the icons (196px, 4px cell padding)</msg><path><editType>edit</editType><file>app/pages/sales/invoices/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/InvoiceAction.vue</affectedPath><affectedPath>app/pages/sales/invoices/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>d37d3e013a0eb89e77cbc61a680e6de720d2204a</commitId><timestamp>1792499795000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Invoices list: action cell with seven fixed slots – Amazon upload icon (Amazon order sources only), draft rows show edit/delete in place of send/upload/pay; column 172px
</comment><date>2026-10-20 14:36:35 +0200</date><id>d37d3e013a0eb89e77cbc61a680e6de720d2204a</id><msg>Invoices list: action cell with seven fixed slots – Amazon upload icon (Amazon order sources only), draft rows show edit/delete in place of send/upload/pay; column 172px</msg><path><editType>edit</editType><file>app/components/sales/InvoiceAction.vue</file></path><path><editType>edit</editType><file>app/pages/sales/invoices/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/leads/[id]/chat/index.delete.ts</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>.claude/rules/leads/ai-assessment.md</affectedPath><affectedPath>server/api/leads/[id]/chat/index.get.ts</affectedPath><affectedPath>server/api/leads/[id]/chat/message.post.ts</affectedPath><affectedPath>server/utils/leads/leadChat.ts</affectedPath><affectedPath>server/utils/leads/leadAssessment.ts</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>app/components/leads/ChatConsoleModal.vue</affectedPath><affectedPath>server/api/leads/[id]/chat/context.post.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>1ac29d4dd7daa22766541e87ae46642d57562f6a</commitId><timestamp>1792500315000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads: KI-Konsole – chat with Claude about one lead over the KI-Analyse dossier (mails, calls, offers, activities, last analysis); SSE-streamed answers, persisted history in data/lead-chats, context rebuild on demand; assessment helpers exported for reuse
</comment><date>2026-10-20 14:45:15 +0200</date><id>1ac29d4dd7daa22766541e87ae46642d57562f6a</id><msg>Leads: KI-Konsole – chat with Claude about one lead over the KI-Analyse dossier (mails, calls, offers, activities, last analysis); SSE-streamed answers, persisted history in data/lead-chats, context rebuild on demand; assessment helpers exported for reuse</msg><path><editType>edit</editType><file>.gitignore</file></path><path><editType>add</editType><file>server/api/leads/[id]/chat/index.get.ts</file></path><path><editType>edit</editType><file>server/utils/leads/leadAssessment.ts</file></path><path><editType>add</editType><file>server/api/leads/[id]/chat/context.post.ts</file></path><path><editType>add</editType><file>server/api/leads/[id]/chat/index.delete.ts</file></path><path><editType>edit</editType><file>.claude/rules/leads/ai-assessment.md</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/utils/leads/leadChat.ts</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>add</editType><file>server/api/leads/[id]/chat/message.post.ts</file></path><path><editType>add</editType><file>app/components/leads/ChatConsoleModal.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>772</buildNumber><marked><SHA1>3badc38478a5774aef4ed0277c90140ed9d440dd</SHA1><branch><SHA1>3badc38478a5774aef4ed0277c90140ed9d440dd</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>3badc38478a5774aef4ed0277c90140ed9d440dd</SHA1><branch><SHA1>3badc38478a5774aef4ed0277c90140ed9d440dd</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>3badc38478a5774aef4ed0277c90140ed9d440dd</SHA1><branch><SHA1>3badc38478a5774aef4ed0277c90140ed9d440dd</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'></action><building>false</building><displayName>#772</displayName><duration>70041</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #772</fullDisplayName><id>772</id><inProgress>false</inProgress><keepLog>false</keepLog><number>772</number><queueId>5845</queueId><result>SUCCESS</result><timestamp>1792454400766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/772/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.env-prod</affectedPath><commitId>7eae76b2eb0c791c727151350a321cfa9b1c7570</commitId><timestamp>1792394169000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Click-to-dial: originate agent leg via logship-ctd-agent so desk phone and Sangoma Talk both ring

ASTERISK_ORIGINATE_CHANNEL / NUXT_ASTERISK_CHANNEL_TEMPLATE were only set on the prod box
by hand and got wiped by every deploy (.env is regenerated from .env-prod).
</comment><date>2026-10-19 09:16:09 +0200</date><id>7eae76b2eb0c791c727151350a321cfa9b1c7570</id><msg>Click-to-dial: originate agent leg via logship-ctd-agent so desk phone and Sangoma Talk both ring</msg><path><editType>edit</editType><file>.env-prod</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/materials/price-list-versions/available.get.ts</affectedPath><affectedPath>app/components/HeaderAction.vue</affectedPath><affectedPath>app/pages/materials/products/index.vue</affectedPath><affectedPath>server/api/materials/products/quick-store.post.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/components/materials/ProductQuickAddModal.vue</affectedPath><commitId>e0481abd4cad3d6b8d47df60af38b2524b844514</commitId><timestamp>1792402319000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quick product modal on the products list: name + image + price in one step, defaults Standard/Each/Standard, price into every active price list version with optional per-version override; staff can pick org and category, merchants get the plain form; the toolbar "+" now opens the modal
</comment><date>2026-10-19 11:31:59 +0200</date><id>e0481abd4cad3d6b8d47df60af38b2524b844514</id><msg>Quick product modal on the products list: name + image + price in one step, defaults Standard/Each/Standard, price into every active price list version with optional per-version override; staff can pick org and category, merchants get the plain form; the toolbar "+" now opens the modal</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/materials/products/index.vue</file></path><path><editType>edit</editType><file>app/components/HeaderAction.vue</file></path><path><editType>add</editType><file>server/api/materials/price-list-versions/available.get.ts</file></path><path><editType>add</editType><file>app/components/materials/ProductQuickAddModal.vue</file></path><path><editType>add</editType><file>server/api/materials/products/quick-store.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/ProductForm.vue</affectedPath><affectedPath>server/api/materials/products/[id]/bom/lines.get.ts</affectedPath><affectedPath>app/pages/materials/products/[id]/edit.vue</affectedPath><affectedPath>app/components/materials/ProductBomModal.vue</affectedPath><affectedPath>app/components/materials/ProductBomCard.vue</affectedPath><affectedPath>server/api/materials/products/[id]/flags.put.ts</affectedPath><affectedPath>server/api/materials/products/[id]/bom/lines.put.ts</affectedPath><affectedPath>server/api/materials/products/[id]/bom/ensure.post.ts</affectedPath><affectedPath>server/api/materials/products/[id]/bom/flag.put.ts</affectedPath><commitId>90f2903c36133dfc34afbb6f63c6b119da78d16b</commitId><timestamp>1792402319000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Product BOM editor: IsBOM toggle + components card in the form, modal with order-line product search, qty stepper and drag-and-drop ordering, BOM header auto-created like the WebUI prefill, batch line save; product form: checkbox auto-save, Status/Organization split, status tooltips, tenant name fix, Quantities beside Identifier
</comment><date>2026-10-19 11:31:59 +0200</date><id>90f2903c36133dfc34afbb6f63c6b119da78d16b</id><msg>Product BOM editor: IsBOM toggle + components card in the form, modal with order-line product search, qty stepper and drag-and-drop ordering, BOM header auto-created like the WebUI prefill, batch line save; product form: checkbox auto-save, Status/Organization split, status tooltips, tenant name fix, Quantities beside Identifier</msg><path><editType>add</editType><file>app/components/materials/ProductBomModal.vue</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/bom/ensure.post.ts</file></path><path><editType>edit</editType><file>app/pages/materials/products/[id]/edit.vue</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/bom/lines.put.ts</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/flags.put.ts</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/bom/lines.get.ts</file></path><path><editType>edit</editType><file>app/components/materials/ProductForm.vue</file></path><path><editType>add</editType><file>app/components/materials/ProductBomCard.vue</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/bom/flag.put.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/ProductDetailRecordCost.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordConversion.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordPartner.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordReplenish.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordReservedQtyLog.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordBom.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordOrderedQtyLog.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordTransaction.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordPrice.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordSubstitute.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordAccounting.vue</affectedPath><affectedPath>app/components/materials/ProductForm.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordTranslation.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordPurchasing.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordRelated.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordComponents.vue</affectedPath><commitId>d9b04034730e3fd6cbf9e0e2ca5f891ddfbd186f</commitId><timestamp>1792402487000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Product edit page off tedir: ProductForm + all ProductDetailRecord tabs use the Nuxt UI SelectBox wrapper, DateInputDe replaces tedir-calendar, UFileUpload replaces the tedir-dropzone gallery uploader
</comment><date>2026-10-19 11:34:47 +0200</date><id>d9b04034730e3fd6cbf9e0e2ca5f891ddfbd186f</id><msg>Product edit page off tedir: ProductForm + all ProductDetailRecord tabs use the Nuxt UI SelectBox wrapper, DateInputDe replaces tedir-calendar, UFileUpload replaces the tedir-dropzone gallery uploader</msg><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordTranslation.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordReplenish.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordPartner.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordCost.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordPurchasing.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordTransaction.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordRelated.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordBom.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordSubstitute.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordComponents.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordOrderedQtyLog.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductForm.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordPrice.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordConversion.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordReservedQtyLog.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordAccounting.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/ProductForm.vue</affectedPath><commitId>db89dca3a091af1372d3d6fa32f3057da7922e96</commitId><timestamp>1792402612000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Product form: Fulfillment card 2/3 wide with Weight over Dimensions in the free third; right column keeps Organization &amp; Status and BOM
</comment><date>2026-10-19 11:36:52 +0200</date><id>db89dca3a091af1372d3d6fa32f3057da7922e96</id><msg>Product form: Fulfillment card 2/3 wide with Weight over Dimensions in the free third; right column keeps Organization &amp; Status and BOM</msg><path><editType>edit</editType><file>app/components/materials/ProductForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.gitignore</affectedPath><affectedPath>.claude/rules/leads/ai-assessment.md</affectedPath><affectedPath>package-lock.json</affectedPath><affectedPath>.env</affectedPath><affectedPath>server/utils/leads/leadAssessment.ts</affectedPath><affectedPath>app/components/leads/AssessmentModal.vue</affectedPath><affectedPath>server/api/leads/[id]/assessment/draft.post.ts</affectedPath><affectedPath>.env-dev</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>server/api/leads/[id]/assessment/index.get.ts</affectedPath><affectedPath>package.json</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>server/api/leads/[id]/assessment/index.post.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>.env-prod</affectedPath><commitId>33007b3a142e9ec5dd110fcca59044f522893fc9</commitId><timestamp>1792405722000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page: "KI-Analyse" — Claude assessment of the whole lead history with editable, sendable e-mail draft

New purple CTA + toolbar icon on /edit/lead-&lt;id&gt; opens &lt;LeadsAssessmentModal&gt;: a background job collects
the AD_User record, contact activities, saved offer/contract/forecast/questionnaire conditions, signing
links, attachment names, every mailpiler mail with its body and the FreePBX recordings with their whisper
transcripts (optionally transcribing missing ones first), sends the dossier to Claude (claude-opus-5-5,
server-side fallbacks, cached system prompt) and renders the structured result: closing probability,
stage, summary, prioritised next steps, proposal, positives/risks, needs, pricing, open questions,
timeline, data gaps. DE default with EN switch, copy-as-text, last result reopens instantly.

The proposed e-mail draft is an editable form (subject/body, save) that can be sent to the lead's
server-resolved address via the local MTA, from info@logyou.de with the sender's name, Reply-To the
sender, with a branded table-layout signature (logo colours, LogYou logo, legal footer) and a
C_ContactActivity (EM) entry.

Server: server/utils/leads/leadAssessment.ts (job state in data/lead-assessments, 202 + polling across
PM2 workers), routes server/api/leads/[id]/assessment/{index.get,index.post,draft.post}.ts,
runtimeConfig.anthropic (ANTHROPIC_API_KEY / ANTHROPIC_WORKSPACE_ID / ANTHROPIC_MODEL),
@anthropic-ai/sdk dependency, translations de/en/es, recipe .claude/rules/leads/ai-assessment.md.
</comment><date>2026-10-19 12:28:42 +0200</date><id>33007b3a142e9ec5dd110fcca59044f522893fc9</id><msg>Lead page: "KI-Analyse" — Claude assessment of the whole lead history with editable, sendable e-mail draft</msg><path><editType>edit</editType><file>.env-dev</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>edit</editType><file>.env</file></path><path><editType>add</editType><file>.claude/rules/leads/ai-assessment.md</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>add</editType><file>server/api/leads/[id]/assessment/index.post.ts</file></path><path><editType>add</editType><file>server/utils/leads/leadAssessment.ts</file></path><path><editType>add</editType><file>app/components/leads/AssessmentModal.vue</file></path><path><editType>edit</editType><file>package.json</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>package-lock.json</file></path><path><editType>add</editType><file>server/api/leads/[id]/assessment/index.get.ts</file></path><path><editType>edit</editType><file>.env-prod</file></path><path><editType>add</editType><file>server/api/leads/[id]/assessment/draft.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/useOfferContract.ts</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><commitId>f016197e7fb65ab60a2d1dd84f5cf073fb1e90ba</commitId><timestamp>1792405982000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Offers: new standard defaults — no free pick, goods receipt by time, shelf L 5.50, service fee 99, DHL ≤ 1 kg 3.79, pallet 12.90; quote PDF and contract documents attached to the mail by default

QUOTE_LIST_PRICES (useOfferQuote.ts): qtyPickfree 1 → 0, monthlyFee 89.90 → 99 (also the &lt; 1000 orders
volume-tier recommendations), shelfLargePrice 6.50 → 5.50 (floor lowered alike so the default no longer
warns), palletPrice 9.50 → 12.90, dhlTiers.kg1 3.49 → 3.79; inbound.mode default 'included' → 'hourly'.
confirmation.attachPdf (quote) and signing.attachDocuments (contract) default to true; saved conditions
with an explicit false are still respected on reopen.
</comment><date>2026-10-19 12:33:02 +0200</date><id>f016197e7fb65ab60a2d1dd84f5cf073fb1e90ba</id><msg>Offers: new standard defaults — no free pick, goods receipt by time, shelf L 5.50, service fee 99, DHL ≤ 1 kg 3.79, pallet 12.90; quote PDF and contract documents attached to the mail by default</msg><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferContract.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/fulfillment/generate-orders.post.ts</affectedPath><affectedPath>app/components/fulfillment/FulfillmentGenerateOrdersModal.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>a0ec3adad64debd862d0fc1b26c533f704506e54</commitId><timestamp>1792410833000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fulfillment invoices: separate "Nachbelastung DHL Paket" position for shipping fees DHL invoiced after accounting

logship-scripts now writes shipping fee lines with fulfillmentpricingrule
SHIPPINGFEE_NACHBELASTUNG (surcharges / late DHL invoices for shipments whose
shipping fee was already accounted, dated with the detection date so the current
month's run picks them up). The generator gathers them per product like the
regular shipping fee but as their own order line "Nachbelastung DHL Paket
(Zuschläge lt. DHL-Rechnung): N Sendungen" in order lines, preview, response and
fee report; the preview details list each shipment with the DHL fee breakdown
from the fee line description. Labels in all four languages.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
</comment><date>2026-10-19 13:53:53 +0200</date><id>a0ec3adad64debd862d0fc1b26c533f704506e54</id><msg>Fulfillment invoices: separate "Nachbelastung DHL Paket" position for shipping fees DHL invoiced after accounting</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/api/fulfillment/generate-orders.post.ts</file></path><path><editType>edit</editType><file>app/components/fulfillment/FulfillmentGenerateOrdersModal.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>771</buildNumber><marked><SHA1>88121ab248ac7b42471936cc209b2c25fe5a095c</SHA1><branch><SHA1>88121ab248ac7b42471936cc209b2c25fe5a095c</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>88121ab248ac7b42471936cc209b2c25fe5a095c</SHA1><branch><SHA1>88121ab248ac7b42471936cc209b2c25fe5a095c</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>88121ab248ac7b42471936cc209b2c25fe5a095c</SHA1><branch><SHA1>88121ab248ac7b42471936cc209b2c25fe5a095c</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'></action><building>false</building><displayName>#771</displayName><duration>68094</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #771</fullDisplayName><id>771</id><inProgress>false</inProgress><keepLog>false</keepLog><number>771</number><queueId>5841</queueId><result>SUCCESS</result><timestamp>1792368000768</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/771/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>770</buildNumber><marked><SHA1>88121ab248ac7b42471936cc209b2c25fe5a095c</SHA1><branch><SHA1>88121ab248ac7b42471936cc209b2c25fe5a095c</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>88121ab248ac7b42471936cc209b2c25fe5a095c</SHA1><branch><SHA1>88121ab248ac7b42471936cc209b2c25fe5a095c</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>88121ab248ac7b42471936cc209b2c25fe5a095c</SHA1><branch><SHA1>88121ab248ac7b42471936cc209b2c25fe5a095c</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'></action><building>false</building><displayName>#770</displayName><duration>67824</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #770</fullDisplayName><id>770</id><inProgress>false</inProgress><keepLog>false</keepLog><number>770</number><queueId>5840</queueId><result>SUCCESS</result><timestamp>1792281600765</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/770/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/mail/LeadFollowupModal.vue</affectedPath><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>server/utils/mail/mailArchive.ts</affectedPath><affectedPath>server/api/mail/lead-followups.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>8bf6e253c6d78f1728cdd797a5fb027104968aa3</commitId><timestamp>1792012325000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads list: single-row toolbar + 'Unanswered leads' mailpiler check

- /users/leads header restyled into one toolbar row: phone lookup (with its
  picker), quick search, offer / contract filters, reset, shown/total counter
  on the left; blank questionnaire DE|EN, the new 'Unanswered' button, New and
  Delete on the right (replaces HeaderAction + the two extra filter rows;
  labels collapse to icons on narrower screens)
- New button 'Unanswered' opens &lt;MailLeadFollowupModal&gt;: leads created within
  the last N days (default 30, editable, remembered per browser) whose latest
  e-mail in the mailpiler archive came FROM the lead and got no reaction since
  (no outgoing mail to that address, no C_ContactActivity logged after it).
  Result table: lead, latest mail + waiting days (colour-coded), our last
  reaction before it, buttons to open the lead tab or the archive mail history
- GET /api/mail/lead-followups?days= (staff only, archive only, no IMAP):
  bounded lead + activity queries, one archive lookup per address with
  concurrency 5, auto-replies / bounce notices skipped when picking the
  latest inbound mail; searchArchive() got an optional row limit
- translation keys leads_phone_* / lfm_* (en, de, es)
</comment><date>2026-10-14 23:12:05 +0200</date><id>8bf6e253c6d78f1728cdd797a5fb027104968aa3</id><msg>Leads list: single-row toolbar + 'Unanswered leads' mailpiler check</msg><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>app/components/mail/LeadFollowupModal.vue</file></path><path><editType>add</editType><file>server/api/mail/lead-followups.get.ts</file></path><path><editType>edit</editType><file>server/utils/mail/mailArchive.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/mail/lead-email-history.md</affectedPath><commitId>002781ab06b897faf85ea38676a5074a2e73a1d0</commitId><timestamp>1792012345000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mail recipe: note the unanswered-leads check route and its comparison rule
</comment><date>2026-10-14 23:12:25 +0200</date><id>002781ab06b897faf85ea38676a5074a2e73a1d0</id><msg>Mail recipe: note the unanswered-leads check route and its comparison rule</msg><path><editType>edit</editType><file>.claude/rules/mail/lead-email-history.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/index.vue</affectedPath><commitId>77bcdba5a25839512b0510aac21a69a89186f6a6</commitId><timestamp>1792012368000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads list: hide the Id and Organization columns (still sorted by id desc, re-enable via the column menu)
</comment><date>2026-10-14 23:12:48 +0200</date><id>77bcdba5a25839512b0510aac21a69a89186f6a6</id><msg>Leads list: hide the Id and Organization columns (still sorted by id desc, re-enable via the column menu)</msg><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/index.vue</affectedPath><commitId>acdea33714d2966600ac66e7e76f5c60d3ff9633</commitId><timestamp>1792012414000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads list: Name first, then Company; selection checkbox column hidden (Delete button only appears while rows are selected)
</comment><date>2026-10-14 23:13:34 +0200</date><id>acdea33714d2966600ac66e7e76f5c60d3ff9633</id><msg>Leads list: Name first, then Company; selection checkbox column hidden (Delete button only appears while rows are selected)</msg><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/index.vue</affectedPath><commitId>ac7c6254d501fce7a72453e223689f200d8e5512</commitId><timestamp>1792012503000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads list: Created as first column; Name is a link opening the lead's edit page in an in-app tab
</comment><date>2026-10-14 23:15:03 +0200</date><id>ac7c6254d501fce7a72453e223689f200d8e5512</id><msg>Leads list: Created as first column; Name is a link opening the lead's edit page in an in-app tab</msg><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>1dbf321e34fa687f66cf478013afed71718437b3</commitId><timestamp>1792012677000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads list: icon status column after Created (offer / contract: grey not sent, blue sent, green confirmed / signed; tooltip with the dates) replaces the Offer and Contract date columns
</comment><date>2026-10-14 23:17:57 +0200</date><id>1dbf321e34fa687f66cf478013afed71718437b3</id><msg>Leads list: icon status column after Created (offer / contract: grey not sent, blue sent, green confirmed / signed; tooltip with the dates) replaces the Offer and Contract date columns</msg><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/index.vue</affectedPath><commitId>cf67b8574cd059732370169752b60542915beb2b</commitId><timestamp>1792012872000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads list: separate icon-width Offer and Contract columns (icon headers, tinted badges grey/blue/green with check mark when confirmed/signed, dates in the tooltip); ti-file-signature replaced — not in the bundled Tabler font
</comment><date>2026-10-14 23:21:12 +0200</date><id>cf67b8574cd059732370169752b60542915beb2b</id><msg>Leads list: separate icon-width Offer and Contract columns (icon headers, tinted badges grey/blue/green with check mark when confirmed/signed, dates in the tooltip); ti-file-signature replaced — not in the bundled Tabler font</msg><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/index.vue</affectedPath><commitId>22c6113c6b55bd0003ce134f437083ee4cb00d7d</commitId><timestamp>1792013035000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads list: offer / contract badges shrunk to 20 px to fit Balham's 28 px rows; done state uses its own icon (file-check / signature) instead of a clipped check overlay
</comment><date>2026-10-14 23:23:55 +0200</date><id>22c6113c6b55bd0003ce134f437083ee4cb00d7d</id><msg>Leads list: offer / contract badges shrunk to 20 px to fit Balham's 28 px rows; done state uses its own icon (file-check / signature) instead of a clipped check overlay</msg><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/mail/LeadFollowupModal.vue</affectedPath><affectedPath>app/pages/users/leads/index.vue</affectedPath><commitId>1abfb16fb0015cd9816abc65976984ab354408a9</commitId><timestamp>1792014106000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads toolbar + unanswered modal: white text/icons pinned on coloured buttons in both themes (dark mode's --theme-text-inverse is #121212, which made icons black on the purple/orange/green buttons); lighter field icons and 'not sent' badges in dark mode
</comment><date>2026-10-14 23:41:46 +0200</date><id>1abfb16fb0015cd9816abc65976984ab354408a9</id><msg>Leads toolbar + unanswered modal: white text/icons pinned on coloured buttons in both themes (dark mode's --theme-text-inverse is #121212, which made icons black on the purple/orange/green buttons); lighter field icons and 'not sent' badges in dark mode</msg><path><editType>edit</editType><file>app/components/mail/LeadFollowupModal.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/reconditioning.vue</affectedPath><affectedPath>app/components/mobile/LocatorRow.vue</affectedPath><affectedPath>app/composables/useLocatorCatalog.ts</affectedPath><affectedPath>app/pages/mobile/receive.vue</affectedPath><affectedPath>app/pages/integrations/inventory-desktop.vue</affectedPath><affectedPath>server/api/mobile/locators.post.ts</affectedPath><affectedPath>app/pages/mobile/return.vue</affectedPath><affectedPath>app/pages/integrations/movement-desktop.vue</affectedPath><affectedPath>app/pages/integrations/returns-desktop.vue</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>app/pages/mobile/inventory.vue</affectedPath><affectedPath>app/pages/integrations/receive-desktop.vue</affectedPath><affectedPath>server/utils/locatorCatalog.ts</affectedPath><affectedPath>server/api/mobile/locator-by-xyz.post.ts</affectedPath><affectedPath>server/api/mobile/locator-lookup.post.ts</affectedPath><affectedPath>server/api/mobile/reconditioning/target-locators.post.ts</affectedPath><affectedPath>server/api/mobile/locator-ensure.post.ts</affectedPath><affectedPath>.claude/rules/materials/locator-catalog.md</affectedPath><affectedPath>server/api/mobile/default-locator-lookup.post.ts</affectedPath><affectedPath>app/pages/mobile/movement.vue</affectedPath><affectedPath>server/api/mobile/product-lookup.post.ts</affectedPath><commitId>f68dd3e394dcf0d7eba99b6818726e5c9a7f2858</commitId><timestamp>1792015636000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Locator catalog: bins created per organization on first use (mobile + desktop)

iDempiere needs one warehouse per org and every locator per warehouse; instead of
pre-creating all ~500 bins for every merchant, the master org (LogYou 1000000,
runtimeConfig.locatorMasterOrgId / LOCATOR_MASTER_ORG_ID) is the template catalog
and a merchant gets a bin the moment it is used.

- server/utils/locatorCatalog.ts: listLocatorCatalog() = org bins + master-only
  bins as virtual preview entries (isVirtual, id `new:&lt;code&gt;`); ensureLocator()
  = find in org or create from the master template (Value, X/Y/Z, PriorityNo,
  locator type) in the org's own warehouse; codes unknown to the master stay 404;
  roles 'default' / 'return' copy the master's default / return bin
- new POST /api/mobile/locators (catalog) and /api/mobile/locator-ensure
- locator-lookup, locator-by-xyz create on miss (response `created`),
  default-locator-lookup creates the org default when the org has no bin at
  all, reconditioning/target-locators and product-lookup carry the preview
- app/composables/useLocatorCatalog.ts: fetchLocators / resolveLocator /
  ensureLocator + notifyLocatorCreated toast; LocatorRow `is-virtual` → "neu" tag
- wired: mobile movement, receive, inventory, return, reconditioning and the
  desktop ports movement/receive/inventory/returns under /integrations (pickers
  load the catalog, picking a virtual bin creates it before use; scans create
  server-side); fix-locator-owner (both) covered via locator-by-xyz
- recipe .claude/rules/materials/locator-catalog.md
</comment><date>2026-10-15 00:07:16 +0200</date><id>f68dd3e394dcf0d7eba99b6818726e5c9a7f2858</id><msg>Locator catalog: bins created per organization on first use (mobile + desktop)</msg><path><editType>edit</editType><file>app/components/mobile/LocatorRow.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/receive.vue</file></path><path><editType>add</editType><file>.claude/rules/materials/locator-catalog.md</file></path><path><editType>edit</editType><file>server/api/mobile/default-locator-lookup.post.ts</file></path><path><editType>edit</editType><file>app/pages/integrations/inventory-desktop.vue</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/reconditioning.vue</file></path><path><editType>edit</editType><file>server/api/mobile/locator-by-xyz.post.ts</file></path><path><editType>edit</editType><file>server/api/mobile/locator-lookup.post.ts</file></path><path><editType>add</editType><file>app/composables/useLocatorCatalog.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/return.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/inventory.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/returns-desktop.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/movement.vue</file></path><path><editType>add</editType><file>server/api/mobile/locator-ensure.post.ts</file></path><path><editType>edit</editType><file>server/api/mobile/reconditioning/target-locators.post.ts</file></path><path><editType>add</editType><file>server/api/mobile/locators.post.ts</file></path><path><editType>edit</editType><file>server/api/mobile/product-lookup.post.ts</file></path><path><editType>edit</editType><file>app/pages/integrations/movement-desktop.vue</file></path><path><editType>add</editType><file>server/utils/locatorCatalog.ts</file></path><path><editType>edit</editType><file>app/pages/integrations/receive-desktop.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/dashboard/prime-due-today.get.ts</affectedPath><commitId>a345106a35fe2eb8fa5931a669c4ff5521c0f442</commitId><timestamp>1792184281000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard SameDay card: 'not fulfillable – missing stock' list limited to orders created within the last 4 days (fulfillable list unchanged)
</comment><date>2026-10-16 22:58:01 +0200</date><id>a345106a35fe2eb8fa5931a669c4ff5521c0f442</id><msg>Dashboard SameDay card: 'not fulfillable – missing stock' list limited to orders created within the last 4 days (fulfillable list unchanged)</msg><path><editType>edit</editType><file>server/api/dashboard/prime-due-today.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/commission/parcels/dhl/multi.post.ts</affectedPath><affectedPath>app/components/sales/OrderForm.vue</affectedPath><affectedPath>server/api/inouts/[id]/reset-commission.post.ts</affectedPath><affectedPath>.claude/rules/fulfillment/commissioning.md</affectedPath><affectedPath>app/pages/sales/orders/[id]/view.vue</affectedPath><affectedPath>app/composables/useDhlInsuranceFeedback.ts</affectedPath><affectedPath>server/api/orders/store.post.ts</affectedPath><affectedPath>app/pages/integrations/commission.vue</affectedPath><affectedPath>app/pages/sales/orders/create.vue</affectedPath><affectedPath>server/api/partners/partners/quick-add.post.ts</affectedPath><affectedPath>app/pages/mobile/commission.vue</affectedPath><affectedPath>app/components/OrderQuickAddModal.vue</affectedPath><affectedPath>app/pages/partners/partners/add.vue</affectedPath><affectedPath>server/api/commission/parcels/dhl/index.post.ts</affectedPath><affectedPath>app/components/partners/PartnerQuickForm.vue</affectedPath><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>app/components/integrations/CommissionList.vue</affectedPath><affectedPath>server/api/orders/update.put.ts</affectedPath><affectedPath>server/utils/dhlInsurance.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>server/api/commission/parcels/dhl/inouts.get.ts</affectedPath><commitId>aab207fb4ef22f1336352c8858e07f74bddd9597</commitId><timestamp>1792224796000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>DHL Transportversicherung: order flag booked at commissioning from GrandTotal, Filiale-only hint label, quick-order opt-in with cost acknowledgement

- C_Order.IsDHLTransportInsurance (checkbox on OrderForm for DHL-Paket shippers; quick-order modal /
  partners/add with 500 € notice + mandatory extra-cost confirmation, all roles incl. merchants)
- server/utils/dhlInsurance.ts: amount = order GrandTotal incl. tax → services.additionalInsurance;
  skipped for Kleinpaket (V62KP), Packstation/Postfiliale/Paketshop addresses and ≤ 500 €;
  &gt; 2.500 € = tier B (Filiale only), &gt; 25.000 € capped at the DHL maximum with a warning;
  multi-parcel splits the total by parcel item value
- booked amount stored in M_InOut.DHL_InsuranceValue (cleared by the commission reset)
- tier-B parcels get an internal 102×152 mm "NICHT IN DIE DHL-ABHOLUNG / NUR DHL FILIALE" label printed
  right after the DHL label (desktop, modal and mobile commissioning), plus toasts for every outcome
- operator banner on both commission pages before the label, badges on the order status flow and the
  DHL commission list; recipe in .claude/rules/fulfillment/commissioning.md
</comment><date>2026-10-17 10:13:16 +0200</date><id>aab207fb4ef22f1336352c8858e07f74bddd9597</id><msg>DHL Transportversicherung: order flag booked at commissioning from GrandTotal, Filiale-only hint label, quick-order opt-in with cost acknowledgement</msg><path><editType>edit</editType><file>server/api/orders/update.put.ts</file></path><path><editType>edit</editType><file>app/pages/partners/partners/add.vue</file></path><path><editType>edit</editType><file>app/components/integrations/CommissionList.vue</file></path><path><editType>edit</editType><file>app/pages/sales/orders/create.vue</file></path><path><editType>add</editType><file>server/utils/dhlInsurance.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/commissioning.md</file></path><path><editType>edit</editType><file>app/components/OrderQuickAddModal.vue</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dhl/multi.post.ts</file></path><path><editType>add</editType><file>app/composables/useDhlInsuranceFeedback.ts</file></path><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>server/api/orders/store.post.ts</file></path><path><editType>edit</editType><file>app/components/sales/OrderForm.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/partners/PartnerQuickForm.vue</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/view.vue</file></path><path><editType>edit</editType><file>server/api/partners/partners/quick-add.post.ts</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dhl/index.post.ts</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dhl/inouts.get.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/commission.vue</file></path><path><editType>edit</editType><file>server/api/inouts/[id]/reset-commission.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/useParcelContentsDoc.ts</affectedPath><affectedPath>server/api/commission/parcels/contents.post.ts</affectedPath><affectedPath>.claude/rules/fulfillment/commissioning.md</affectedPath><affectedPath>app/components/integrations/CommissionPacklistConfirmModal.vue</affectedPath><affectedPath>app/pages/integrations/commission.vue</affectedPath><affectedPath>app/components/sales/ParcelContentsModal.vue</affectedPath><commitId>fa4edb3dc3eb2dbcfbe4aa427d00691dce5516d6</commitId><timestamp>1792225978000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Commission: optional parcel weight override + box dimensions (L×B×H cm) for Amazon FBA orders — per slot in multi-parcel mode, FBA single-parcel panel otherwise; stored in commission_parcels_json and shown in the Paketinhalt modal, packlist confirm modal and A4 PDF; Paketinhalt now saved for every FBA order (relabel or FBA shipper), single parcel included
</comment><date>2026-10-17 10:32:58 +0200</date><id>fa4edb3dc3eb2dbcfbe4aa427d00691dce5516d6</id><msg>Commission: optional parcel weight override + box dimensions (L×B×H cm) for Amazon FBA orders — per slot in multi-parcel mode, FBA single-parcel panel otherwise; stored in commission_parcels_json and shown in the Paketinhalt modal, packlist confirm modal and A4 PDF; Paketinhalt now saved for every FBA order (relabel or FBA shipper), single parcel included</msg><path><editType>edit</editType><file>app/components/integrations/CommissionPacklistConfirmModal.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path><path><editType>edit</editType><file>app/components/sales/ParcelContentsModal.vue</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/commissioning.md</file></path><path><editType>edit</editType><file>app/composables/useParcelContentsDoc.ts</file></path><path><editType>edit</editType><file>server/api/commission/parcels/contents.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/index.vue</affectedPath><commitId>0afec150a35b3c26c457d5c0766e497c45086029</commitId><timestamp>1792225978000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard tickets card: show as many rows as the card height allows (ResizeObserver-derived row count, 30-ticket reserve, chunked last-message overlay) — card height now follows its row siblings with a 10-row minimum, so big screens fill the former blank space with 15+ tickets
</comment><date>2026-10-17 10:32:58 +0200</date><id>0afec150a35b3c26c457d5c0766e497c45086029</id><msg>Dashboard tickets card: show as many rows as the card height allows (ResizeObserver-derived row count, 30-ticket reserve, chunked last-message overlay) — card height now follows its row siblings with a 10-row minimum, so big screens fill the former blank space with 15+ tickets</msg><path><editType>edit</editType><file>app/pages/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/orders/[id]/roadmap/push-step.post.ts</affectedPath><affectedPath>server/utils/pushTask.ts</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>server/utils/relabelOrderHelper.ts</affectedPath><affectedPath>server/utils/orderRoadmap.ts</affectedPath><affectedPath>.claude/rules/sales/order-roadmap.md</affectedPath><affectedPath>app/composables/usePushedTasks.ts</affectedPath><affectedPath>app/components/sales/OrderRoadmap.vue</affectedPath><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>server/api/requests/requests/[id]/push-task.post.ts</affectedPath><affectedPath>server/api/mobile/pushed-tasks.get.ts</affectedPath><affectedPath>.claude/rules/requests/tickets.md</affectedPath><affectedPath>server/utils/orderProductions.ts</affectedPath><affectedPath>server/utils/productionTicket.ts</affectedPath><affectedPath>app/components/requests/PushTaskModal.vue</affectedPath><affectedPath>server/api/orders/[id]/roadmap.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>server/api/orders/[id]/productions.get.ts</affectedPath><commitId>88121ab248ac7b42471936cc209b2c25fe5a095c</commitId><timestamp>1792268600000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Order roadmap on the sales-order edit page: FBA relabel + production/BOM checklist with "send step to mobile device"

- &lt;SalesOrderRoadmap&gt; panel between the status timeline and the form (staff only, shown only when the
  order needs extra steps): per BOM position Produktion angelegt → Produziert → Produktions-Aufgabe,
  for relabel orders Etiketten-Codes → FBA-Etiketten drucken → Umetikettierung (Lager); colour state
  (open / in progress / done / not yet), global numbering, "next step" marker, progress summary,
  collapsible, responsive down to phone width
- GET /api/orders/:id/roadmap aggregates order, lines (BOM flag, printLabelCode), productions and
  order tickets; POST /api/orders/:id/roadmap/push-step reuses the step's open ticket (relabel summary
  prefix / M_Production_ID) or creates one (relabel / production ticket) and pushes it to the worker
- push logic extracted to server/utils/pushTask.ts (shared with requests/[id]/push-task), push modal
  extracted to &lt;RequestsPushTaskModal&gt; (MyTicketDetail switched over)
- mobile pushed-task list carries the production link and shows a production card
- createRelabelTicket returns the ticket id; createProductionTicket works without a production
- i18n en/de/es, recipe .claude/rules/sales/order-roadmap.md
</comment><date>2026-10-17 22:23:20 +0200</date><id>88121ab248ac7b42471936cc209b2c25fe5a095c</id><msg>Order roadmap on the sales-order edit page: FBA relabel + production/BOM checklist with "send step to mobile device"</msg><path><editType>add</editType><file>app/components/requests/PushTaskModal.vue</file></path><path><editType>edit</editType><file>app/composables/usePushedTasks.ts</file></path><path><editType>add</editType><file>app/components/sales/OrderRoadmap.vue</file></path><path><editType>add</editType><file>server/api/orders/[id]/roadmap/push-step.post.ts</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/api/orders/[id]/productions.get.ts</file></path><path><editType>add</editType><file>server/utils/orderProductions.ts</file></path><path><editType>edit</editType><file>.claude/rules/requests/tickets.md</file></path><path><editType>add</editType><file>server/api/orders/[id]/roadmap.get.ts</file></path><path><editType>add</editType><file>server/utils/pushTask.ts</file></path><path><editType>edit</editType><file>server/utils/productionTicket.ts</file></path><path><editType>add</editType><file>.claude/rules/sales/order-roadmap.md</file></path><path><editType>edit</editType><file>server/api/mobile/pushed-tasks.get.ts</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>server/api/requests/requests/[id]/push-task.post.ts</file></path><path><editType>add</editType><file>server/utils/orderRoadmap.ts</file></path><path><editType>edit</editType><file>server/utils/relabelOrderHelper.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>769</buildNumber><marked><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</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'></action><building>false</building><displayName>#769</displayName><duration>69639</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #769</fullDisplayName><id>769</id><inProgress>false</inProgress><keepLog>false</keepLog><number>769</number><queueId>5837</queueId><result>SUCCESS</result><timestamp>1792195200765</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/769/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>768</buildNumber><marked><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</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'></action><building>false</building><displayName>#768</displayName><duration>67380</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #768</fullDisplayName><id>768</id><inProgress>false</inProgress><keepLog>false</keepLog><number>768</number><queueId>5836</queueId><result>SUCCESS</result><timestamp>1792108800765</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/768/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>767</buildNumber><marked><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</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'></action><building>false</building><displayName>#767</displayName><duration>68562</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #767</fullDisplayName><id>767</id><inProgress>false</inProgress><keepLog>false</keepLog><number>767</number><queueId>5835</queueId><result>SUCCESS</result><timestamp>1792022400766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/767/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>766</buildNumber><marked><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</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'></action><building>false</building><displayName>#766</displayName><duration>75185</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #766</fullDisplayName><id>766</id><inProgress>false</inProgress><keepLog>false</keepLog><number>766</number><queueId>5834</queueId><result>SUCCESS</result><timestamp>1791936000765</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/766/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>765</buildNumber><marked><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</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'></action><building>false</building><displayName>#765</displayName><duration>69390</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #765</fullDisplayName><id>765</id><inProgress>false</inProgress><keepLog>false</keepLog><number>765</number><queueId>5833</queueId><result>SUCCESS</result><timestamp>1791849600766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/765/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>764</buildNumber><marked><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</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'></action><building>false</building><displayName>#764</displayName><duration>70494</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #764</fullDisplayName><id>764</id><inProgress>false</inProgress><keepLog>false</keepLog><number>764</number><queueId>5832</queueId><result>SUCCESS</result><timestamp>1791763200765</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/764/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>763</buildNumber><marked><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</SHA1><branch><SHA1>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</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'></action><building>false</building><displayName>#763</displayName><duration>69050</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #763</fullDisplayName><id>763</id><inProgress>false</inProgress><keepLog>false</keepLog><number>763</number><queueId>5831</queueId><result>SUCCESS</result><timestamp>1791676800766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/763/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/reconditioning.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>d847c061bb55019564546e4ceaf5c2839428fcf6</commitId><timestamp>1791628313000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile reconditioning: A4 movement report no longer printed by default (opt-in, remembered per device); new 'Neue Produktetiketten drucken' option prints one product label per reconditioned piece via /api/print/product with a labelprinter-1..6 select (default labelprinter-6, remembered per device); disposed pieces get no label
</comment><date>2026-10-10 12:31:53 +0200</date><id>d847c061bb55019564546e4ceaf5c2839428fcf6</id><msg>Mobile reconditioning: A4 movement report no longer printed by default (opt-in, remembered per device); new 'Neue Produktetiketten drucken' option prints one product label per reconditioned piece via /api/print/product with a labelprinter-1..6 select (default labelprinter-6, remembered per device); disposed pieces get no label</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/mobile/reconditioning.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/mobile/reconditioning/lookup.post.ts</affectedPath><commitId>3f6986f26d033e0967222b733bfdbbaddb03ac8f</commitId><timestamp>1791630028000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile reconditioning lookup: fall back to the customer return's own DocumentNo when no RMA matches — return labels reprinted before 2026-09-16 carry the M_InOut number instead of the RMA number and were unscannable (matchedBy 'return'); RMA DocumentNo still matched first, product codes still excluded
</comment><date>2026-10-10 13:00:28 +0200</date><id>3f6986f26d033e0967222b733bfdbbaddb03ac8f</id><msg>Mobile reconditioning lookup: fall back to the customer return's own DocumentNo when no RMA matches — return labels reprinted before 2026-09-16 carry the M_InOut number instead of the RMA number and were unscannable (matchedBy 'return'); RMA DocumentNo still matched first, product codes still excluded</msg><path><editType>edit</editType><file>server/api/mobile/reconditioning/lookup.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/mobile/reconditioning/lookup.post.ts</affectedPath><commitId>59b49d8316832087a13a9091cf5212bc003e6b0a</commitId><timestamp>1791631972000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile reconditioning lookup: third match path via the original shipment's M_InOut DocumentNo (MovementType C-) → M_RMA.InOut_ID → its returns (matchedBy 'shipment'), after RMA number and customer-return number
</comment><date>2026-10-10 13:32:52 +0200</date><id>59b49d8316832087a13a9091cf5212bc003e6b0a</id><msg>Mobile reconditioning lookup: third match path via the original shipment's M_InOut DocumentNo (MovementType C-) → M_RMA.InOut_ID → its returns (matchedBy 'shipment'), after RMA number and customer-return number</msg><path><editType>edit</editType><file>server/api/mobile/reconditioning/lookup.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/reconditioning.vue</affectedPath><affectedPath>server/api/mobile/reconditioning/lookup.post.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</commitId><timestamp>1791634269000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile reconditioning: optional search by customer — person-toggle in the manual search looks up business partners by name / search key (mode 'partner') and lists their latest 15 completed customer returns to pick from; scanned codes stay document lookups (RMA → return no. → shipment no.)
</comment><date>2026-10-10 14:11:09 +0200</date><id>87f57a63b10f5ed46c79b50f06bb45b4c076ee64</id><msg>Mobile reconditioning: optional search by customer — person-toggle in the manual search looks up business partners by name / search key (mode 'partner') and lists their latest 15 completed customer returns to pick from; scanned codes stay document lookups (RMA → return no. → shipment no.)</msg><path><editType>edit</editType><file>app/pages/mobile/reconditioning.vue</file></path><path><editType>edit</editType><file>server/api/mobile/reconditioning/lookup.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>762</buildNumber><marked><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</SHA1><branch><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</SHA1><branch><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</SHA1><branch><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</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'></action><building>false</building><displayName>#762</displayName><duration>68333</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #762</fullDisplayName><id>762</id><inProgress>false</inProgress><keepLog>false</keepLog><number>762</number><queueId>5824</queueId><result>SUCCESS</result><timestamp>1791590400766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/762/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>761</buildNumber><marked><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</SHA1><branch><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</SHA1><branch><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</SHA1><branch><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</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'></action><building>false</building><displayName>#761</displayName><duration>68481</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #761</fullDisplayName><id>761</id><inProgress>false</inProgress><keepLog>false</keepLog><number>761</number><queueId>5823</queueId><result>SUCCESS</result><timestamp>1791504000766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/761/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>760</buildNumber><marked><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</SHA1><branch><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</SHA1><branch><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</SHA1><branch><SHA1>01e9f7e96f1e374b69c72265c109ee22218e123e</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'></action><building>false</building><displayName>#760</displayName><duration>67757</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #760</fullDisplayName><id>760</id><inProgress>false</inProgress><keepLog>false</keepLog><number>760</number><queueId>5818</queueId><result>SUCCESS</result><timestamp>1791417600767</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/760/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/useClickToDial.ts</affectedPath><affectedPath>server/api/telephony/dial.post.ts</affectedPath><affectedPath>.claude/rules/telephony/telephony.md</affectedPath><affectedPath>app/components/DialButton.vue</affectedPath><affectedPath>server/utils/telephony/callTracker.ts</affectedPath><affectedPath>server/utils/telephony/phoneActivity.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>01e9f7e96f1e374b69c72265c109ee22218e123e</commitId><timestamp>1791398465000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Click-to-dial: external callback number — the dial popover gets an 'Extern' tab where any external phone (e.g. the agent's mobile) can be entered; the PBX calls that number first via Local/&lt;number&gt;@from-internal and then connects the target. Activity note and toast say 'Rückrufnummer' instead of extension; choice remembered per browser
</comment><date>2026-10-07 20:41:05 +0200</date><id>01e9f7e96f1e374b69c72265c109ee22218e123e</id><msg>Click-to-dial: external callback number — the dial popover gets an 'Extern' tab where any external phone (e.g. the agent's mobile) can be entered; the PBX calls that number first via Local/&lt;number&gt;@from-internal and then connects the target. Activity note and toast say 'Rückrufnummer' instead of extension; choice remembered per browser</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/utils/telephony/callTracker.ts</file></path><path><editType>edit</editType><file>server/api/telephony/dial.post.ts</file></path><path><editType>edit</editType><file>server/utils/telephony/phoneActivity.ts</file></path><path><editType>edit</editType><file>.claude/rules/telephony/telephony.md</file></path><path><editType>edit</editType><file>app/composables/useClickToDial.ts</file></path><path><editType>edit</editType><file>app/components/DialButton.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>759</buildNumber><marked><SHA1>b49d0ca1f87809444f105d9ebca6a493f1a681a2</SHA1><branch><SHA1>b49d0ca1f87809444f105d9ebca6a493f1a681a2</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>b49d0ca1f87809444f105d9ebca6a493f1a681a2</SHA1><branch><SHA1>b49d0ca1f87809444f105d9ebca6a493f1a681a2</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>b49d0ca1f87809444f105d9ebca6a493f1a681a2</SHA1><branch><SHA1>b49d0ca1f87809444f105d9ebca6a493f1a681a2</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'></action><building>false</building><displayName>#759</displayName><duration>68905</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #759</fullDisplayName><id>759</id><inProgress>false</inProgress><keepLog>false</keepLog><number>759</number><queueId>5816</queueId><result>SUCCESS</result><timestamp>1791331200767</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/759/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>758</buildNumber><marked><SHA1>b49d0ca1f87809444f105d9ebca6a493f1a681a2</SHA1><branch><SHA1>b49d0ca1f87809444f105d9ebca6a493f1a681a2</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>b49d0ca1f87809444f105d9ebca6a493f1a681a2</SHA1><branch><SHA1>b49d0ca1f87809444f105d9ebca6a493f1a681a2</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>b49d0ca1f87809444f105d9ebca6a493f1a681a2</SHA1><branch><SHA1>b49d0ca1f87809444f105d9ebca6a493f1a681a2</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'></action><building>false</building><displayName>#758</displayName><duration>68417</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #758</fullDisplayName><id>758</id><inProgress>false</inProgress><keepLog>false</keepLog><number>758</number><queueId>5815</queueId><result>SUCCESS</result><timestamp>1791244800765</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/758/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/fulfillment/shippers.md</affectedPath><affectedPath>server/api/partners/partners/quick-add.post.ts</affectedPath><commitId>8ae8ffe9424c94672649c7a9996aab8ab5bc84ae</commitId><timestamp>1791191895000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quick-add order: Amazon FBA orders no longer fail with '"ts" is null' — order lines do not send the ship location any more, so iDempiere copies location and order date from the header before the tax lookup
</comment><date>2026-10-05 11:18:15 +0200</date><id>8ae8ffe9424c94672649c7a9996aab8ab5bc84ae</id><msg>Quick-add order: Amazon FBA orders no longer fail with '"ts" is null' — order lines do not send the ship location any more, so iDempiere copies location and order date from the header before the tax lookup</msg><path><editType>edit</editType><file>.claude/rules/fulfillment/shippers.md</file></path><path><editType>edit</editType><file>server/api/partners/partners/quick-add.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/ProductForm.vue</affectedPath><affectedPath>app/components/materials/ProductReturnsModal.vue</affectedPath><affectedPath>app/components/materials/ProductStockLocatorsCard.vue</affectedPath><affectedPath>server/api/materials/products/[id]/returns.get.ts</affectedPath><affectedPath>.claude/rules/materials/product-stock-actions.md</affectedPath><commitId>b49d0ca1f87809444f105d9ebca6a493f1a681a2</commitId><timestamp>1791209904000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Product page: returns modal behind the return stock (admin roles) — click on 'Return Qty on Hand' or the 'Retoure' total in the stock card lists every customer return of the article with booking time, locator it was booked onto, customer, return document, linked RMA and RMA photos
</comment><date>2026-10-05 16:18:24 +0200</date><id>b49d0ca1f87809444f105d9ebca6a493f1a681a2</id><msg>Product page: returns modal behind the return stock (admin roles) — click on 'Return Qty on Hand' or the 'Retoure' total in the stock card lists every customer return of the article with booking time, locator it was booked onto, customer, return document, linked RMA and RMA photos</msg><path><editType>add</editType><file>server/api/materials/products/[id]/returns.get.ts</file></path><path><editType>add</editType><file>app/components/materials/ProductReturnsModal.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductForm.vue</file></path><path><editType>edit</editType><file>.claude/rules/materials/product-stock-actions.md</file></path><path><editType>edit</editType><file>app/components/materials/ProductStockLocatorsCard.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>757</buildNumber><marked><SHA1>91210c8430e9343e2548ee0e04b934c0c6a6153f</SHA1><branch><SHA1>91210c8430e9343e2548ee0e04b934c0c6a6153f</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>91210c8430e9343e2548ee0e04b934c0c6a6153f</SHA1><branch><SHA1>91210c8430e9343e2548ee0e04b934c0c6a6153f</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>91210c8430e9343e2548ee0e04b934c0c6a6153f</SHA1><branch><SHA1>91210c8430e9343e2548ee0e04b934c0c6a6153f</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'></action><building>false</building><displayName>#757</displayName><duration>66185</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #757</fullDisplayName><id>757</id><inProgress>false</inProgress><keepLog>false</keepLog><number>757</number><queueId>5812</queueId><result>SUCCESS</result><timestamp>1791158400766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/757/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>756</buildNumber><marked><SHA1>91210c8430e9343e2548ee0e04b934c0c6a6153f</SHA1><branch><SHA1>91210c8430e9343e2548ee0e04b934c0c6a6153f</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>91210c8430e9343e2548ee0e04b934c0c6a6153f</SHA1><branch><SHA1>91210c8430e9343e2548ee0e04b934c0c6a6153f</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>91210c8430e9343e2548ee0e04b934c0c6a6153f</SHA1><branch><SHA1>91210c8430e9343e2548ee0e04b934c0c6a6153f</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'></action><building>false</building><displayName>#756</displayName><duration>68954</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #756</fullDisplayName><id>756</id><inProgress>false</inProgress><keepLog>false</keepLog><number>756</number><queueId>5811</queueId><result>SUCCESS</result><timestamp>1791072000766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/756/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/telephony/cdr.ts</affectedPath><affectedPath>server/api/telephony/cid-lookup/[number].get.ts</affectedPath><affectedPath>server/utils/telephony/cidDirectory.ts</affectedPath><commitId>e372d503440723a8075c34d94f618b14d30709fb</commitId><timestamp>1791054359000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Telephony CID lookup: matched caller names are prefixed with the first 4 characters of the owning organization's companyname ("LogY: Max Mustermann") instead of the static inbound-route "LogYou: " prefix; call history strips the new prefix
</comment><date>2026-10-03 21:05:59 +0200</date><id>e372d503440723a8075c34d94f618b14d30709fb</id><msg>Telephony CID lookup: matched caller names are prefixed with the first 4 characters of the owning organization's companyname ("LogY: Max Mustermann") instead of the static inbound-route "LogYou: " prefix; call history strips the new prefix</msg><path><editType>edit</editType><file>server/api/telephony/cid-lookup/[number].get.ts</file></path><path><editType>edit</editType><file>server/utils/telephony/cdr.ts</file></path><path><editType>edit</editType><file>server/utils/telephony/cidDirectory.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/GenerateShipmentsPanel.vue</affectedPath><commitId>f588ccdeb30add9ce30c9d419c8ffd50050ea474</commitId><timestamp>1791054493000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Generate shipments: Simple-tab card buttons get a larger animated printer pictogram (violet body, white on the violet card, sheet feeding in and printing out in a loop, blinking LED) instead of the small black printer glyph
</comment><date>2026-10-03 21:08:13 +0200</date><id>f588ccdeb30add9ce30c9d419c8ffd50050ea474</id><msg>Generate shipments: Simple-tab card buttons get a larger animated printer pictogram (violet body, white on the violet card, sheet feeding in and printing out in a loop, blinking LED) instead of the small black printer glyph</msg><path><editType>edit</editType><file>app/components/sales/GenerateShipmentsPanel.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/mail/lead-email-history.md</affectedPath><affectedPath>package-lock.json</affectedPath><affectedPath>reference/mail-archive-api/logship-mail-archive.service</affectedPath><affectedPath>server/api/mail/lead-emails/index.get.ts</affectedPath><affectedPath>.env</affectedPath><affectedPath>server/api/mail/lead-emails/message.get.ts</affectedPath><affectedPath>reference/mail-archive-api/server.mjs</affectedPath><affectedPath>server/utils/mail/mailArchive.ts</affectedPath><affectedPath>server/utils/mail/leadEmailAddress.ts</affectedPath><affectedPath>app/components/mail/LeadEmailsModal.vue</affectedPath><affectedPath>server/utils/mail/leadMailbox.ts</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>app/components/admin/LeadForm.vue</affectedPath><affectedPath>package.json</affectedPath><affectedPath>reference/mail-archive-api/install.sh</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>reference/mail-archive-api/README.md</affectedPath><affectedPath>server/api/mail/lead-emails/attachment.get.ts</affectedPath><affectedPath>reference/mail-archive-api/package.json</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>.env-prod</affectedPath><commitId>3ba851f07e56b4b6dc413029c06b2ba954963893</commitId><timestamp>1791056538000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page: e-mail history modal (timeline of mails sent to / received from the lead's address, content on click, nothing stored) backed by the mailpiler archive via a new read-only service on the piler host (reference/mail-archive-api, limited to piler account 5, attachments downloadable); live IMAP provider kept fully functional but its buttons are commented out; lead form redesigned (status pipeline, contact / company / notes / flags cards, switches, source chips); side column uses its full width
</comment><date>2026-10-03 21:42:18 +0200</date><id>3ba851f07e56b4b6dc413029c06b2ba954963893</id><msg>Lead page: e-mail history modal (timeline of mails sent to / received from the lead's address, content on click, nothing stored) backed by the mailpiler archive via a new read-only service on the piler host (reference/mail-archive-api, limited to piler account 5, attachments downloadable); live IMAP provider kept fully functional but its buttons are commented out; lead form redesigned (status pipeline, contact / company / notes / flags cards, switches, source chips); side column uses its full width</msg><path><editType>add</editType><file>.claude/rules/mail/lead-email-history.md</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>add</editType><file>server/utils/mail/leadEmailAddress.ts</file></path><path><editType>add</editType><file>reference/mail-archive-api/install.sh</file></path><path><editType>add</editType><file>reference/mail-archive-api/logship-mail-archive.service</file></path><path><editType>add</editType><file>server/api/mail/lead-emails/attachment.get.ts</file></path><path><editType>add</editType><file>server/utils/mail/leadMailbox.ts</file></path><path><editType>edit</editType><file>package.json</file></path><path><editType>add</editType><file>server/utils/mail/mailArchive.ts</file></path><path><editType>add</editType><file>server/api/mail/lead-emails/index.get.ts</file></path><path><editType>add</editType><file>reference/mail-archive-api/server.mjs</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>package-lock.json</file></path><path><editType>add</editType><file>reference/mail-archive-api/package.json</file></path><path><editType>edit</editType><file>app/components/admin/LeadForm.vue</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>.env</file></path><path><editType>edit</editType><file>.env-prod</file></path><path><editType>add</editType><file>app/components/mail/LeadEmailsModal.vue</file></path><path><editType>add</editType><file>reference/mail-archive-api/README.md</file></path><path><editType>add</editType><file>server/api/mail/lead-emails/message.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>05c3a0c992ffcb12cce689b2959a444bd7a94d79</commitId><timestamp>1791056843000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page: initials in the avatar tile and the icons on the Angebot / Vertrag buttons are white again (a global theme rule coloured every span / i dark)
</comment><date>2026-10-03 21:47:23 +0200</date><id>05c3a0c992ffcb12cce689b2959a444bd7a94d79</id><msg>Lead page: initials in the avatar tile and the icons on the Angebot / Vertrag buttons are white again (a global theme rule coloured every span / i dark)</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>.claude/rules/mail/lead-email-history.md</affectedPath><commitId>8c15ab93d690adf8e4867bfb1fe7cfd4a58c0a05</commitId><timestamp>1791058140000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page: IMAP e-mail history button is back next to the mailpiler one (chip 'E-Mails IM' + toolbar icon), both providers available side by side
</comment><date>2026-10-03 22:09:00 +0200</date><id>8c15ab93d690adf8e4867bfb1fe7cfd4a58c0a05</id><msg>Lead page: IMAP e-mail history button is back next to the mailpiler one (chip 'E-Mails IM' + toolbar icon), both providers available side by side</msg><path><editType>edit</editType><file>.claude/rules/mail/lead-email-history.md</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/product.vue</affectedPath><affectedPath>server/api/mobile/product-lookup.post.ts</affectedPath><commitId>b7b1f06b92484258b4664384c3c773cad1872906</commitId><timestamp>1791065734000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile product: locator rows with equal-width X / Y / Z columns (X black, Y yellow, Z white), qty on hand outside the wrapper behind an arrow in the header's on-hand green, fixed position on every row; merchant's pick product identifier (C_BPartner.PickProductIdentifier of the org's partner) highlighted with the yellow marker, plain rows when not configured
</comment><date>2026-10-04 00:15:34 +0200</date><id>b7b1f06b92484258b4664384c3c773cad1872906</id><msg>Mobile product: locator rows with equal-width X / Y / Z columns (X black, Y yellow, Z white), qty on hand outside the wrapper behind an arrow in the header's on-hand green, fixed position on every row; merchant's pick product identifier (C_BPartner.PickProductIdentifier of the org's partner) highlighted with the yellow marker, plain rows when not configured</msg><path><editType>edit</editType><file>server/api/mobile/product-lookup.post.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/product.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/product.vue</affectedPath><commitId>cb0e9c8d760e32c9e212c8c5d4dea3dc3ae97f1c</commitId><timestamp>1791065755000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile product: locator count badge next to the Lagerort / Retouren-Lagerort headings
</comment><date>2026-10-04 00:15:55 +0200</date><id>cb0e9c8d760e32c9e212c8c5d4dea3dc3ae97f1c</id><msg>Mobile product: locator count badge next to the Lagerort / Retouren-Lagerort headings</msg><path><editType>edit</editType><file>app/pages/mobile/product.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/mail/LeadEmailsModal.vue</affectedPath><affectedPath>.claude/rules/mail/lead-email-history.md</affectedPath><affectedPath>app/pages/partners/partners/[id]/edit.vue</affectedPath><affectedPath>app/components/partners/PartnerDetailRecordUser.vue</affectedPath><affectedPath>server/api/mail/lead-emails/index.get.ts</affectedPath><affectedPath>server/api/mail/lead-emails/message.get.ts</affectedPath><affectedPath>server/api/mail/lead-emails/attachment.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>server/utils/mail/leadEmailAddress.ts</affectedPath><commitId>90fc2b08bdcd7c9a8c5add94c40082ffdbf3e08e</commitId><timestamp>1791066021000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Partners: E-Mails IM / MP buttons (admin roles only) on the partner edit toolbar — mail history across all the partner's addresses (partner + invoice e-mail, contacts), resolved server-side — and on the Kontakt (Benutzer) modal for the contact's address
</comment><date>2026-10-04 00:20:21 +0200</date><id>90fc2b08bdcd7c9a8c5add94c40082ffdbf3e08e</id><msg>Partners: E-Mails IM / MP buttons (admin roles only) on the partner edit toolbar — mail history across all the partner's addresses (partner + invoice e-mail, contacts), resolved server-side — and on the Kontakt (Benutzer) modal for the contact's address</msg><path><editType>edit</editType><file>.claude/rules/mail/lead-email-history.md</file></path><path><editType>edit</editType><file>app/components/partners/PartnerDetailRecordUser.vue</file></path><path><editType>edit</editType><file>server/api/mail/lead-emails/message.get.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/api/mail/lead-emails/attachment.get.ts</file></path><path><editType>edit</editType><file>app/pages/partners/partners/[id]/edit.vue</file></path><path><editType>edit</editType><file>server/utils/mail/leadEmailAddress.ts</file></path><path><editType>edit</editType><file>server/api/mail/lead-emails/index.get.ts</file></path><path><editType>edit</editType><file>app/components/mail/LeadEmailsModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/requests/tickets.md</affectedPath><affectedPath>app/pages/requests/my-tickets/index.vue</affectedPath><commitId>e01f6dcc9244a97a103abbda87c15e3c23a17cd8</commitId><timestamp>1791066347000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>My-Tickets: ticket list visible on phones again — list and metrics panes are divs instead of asides (the global sidebar rule moved every aside off-canvas below 992px)
</comment><date>2026-10-04 00:25:47 +0200</date><id>e01f6dcc9244a97a103abbda87c15e3c23a17cd8</id><msg>My-Tickets: ticket list visible on phones again — list and metrics panes are divs instead of asides (the global sidebar rule moved every aside off-canvas below 992px)</msg><path><editType>edit</editType><file>app/pages/requests/my-tickets/index.vue</file></path><path><editType>edit</editType><file>.claude/rules/requests/tickets.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><commitId>5a981ede9c59a2200506d6a888481dd20b39c98c</commitId><timestamp>1791066932000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Android app 1.0.57 (58): show locator and identifier better
</comment><date>2026-10-04 00:35:32 +0200</date><id>5a981ede9c59a2200506d6a888481dd20b39c98c</id><msg>Android app 1.0.57 (58): show locator and identifier better</msg><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/requests/requests/[id]/edit.vue</affectedPath><commitId>e88d2d20a776872d2fabb3627f99beabff7ed232</commitId><timestamp>1791066932000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Requests: limited merchant roles can no longer complete or reopen a ticket on the request edit page (support decision)
</comment><date>2026-10-04 00:35:32 +0200</date><id>e88d2d20a776872d2fabb3627f99beabff7ed232</id><msg>Requests: limited merchant roles can no longer complete or reopen a ticket on the request edit page (support decision)</msg><path><editType>edit</editType><file>app/pages/requests/requests/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/edge-proxy/advanced-snippet.conf</affectedPath><affectedPath>reference/template-cleanup/TEMPLATE-README.md</affectedPath><affectedPath>reference/edge-proxy/location-api.conf</affectedPath><affectedPath>reference/template-cleanup/validate-template.sh</affectedPath><affectedPath>reference/DE-AEU-2025-197082.pdf</affectedPath><affectedPath>reference/template-cleanup/run-cleanup.sh</affectedPath><affectedPath>reference/edge-proxy/add-instance.sh</affectedPath><affectedPath>reference/template-cleanup/00-defuse.sh</affectedPath><affectedPath>reference/edge-proxy/selfsigned-wildcard.sh</affectedPath><affectedPath>reference/template-cleanup/RECLONE-RUNBOOK.md</affectedPath><affectedPath>reference/edge-proxy/npm-api.sh</affectedPath><affectedPath>reference/edge-proxy/README.md</affectedPath><affectedPath>reference/template-cleanup/01-idempiere-truncate.sql</affectedPath><affectedPath>reference/template-cleanup/03-neutralize-env.sh</affectedPath><affectedPath>reference/DE-CN-AEU-2026-134720.pdf</affectedPath><affectedPath>reference/template-cleanup/clone-logship-instance.sh</affectedPath><affectedPath>reference/template-cleanup/refresh-template.sh</affectedPath><affectedPath>reference/edge-proxy/install-npm-baremetal.sh</affectedPath><affectedPath>reference/template-cleanup/README.md</affectedPath><affectedPath>reference/edge-proxy/location-webui.conf</affectedPath><affectedPath>reference/template-cleanup/02-strapi-truncate.sql</affectedPath><affectedPath>reference/template-cleanup/REFRESH-QUICKSTART.md</affectedPath><commitId>5c5f39ed751adea281883453a93a38fd5ab3f0c2</commitId><timestamp>1791066932000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Reference: template refresh procedure (refresh / cleanup / validate scripts, truncation engine, quickstart), edge proxy tooling (Nginx Proxy Manager), Amazon Ads sample invoices
</comment><date>2026-10-04 00:35:32 +0200</date><id>5c5f39ed751adea281883453a93a38fd5ab3f0c2</id><msg>Reference: template refresh procedure (refresh / cleanup / validate scripts, truncation engine, quickstart), edge proxy tooling (Nginx Proxy Manager), Amazon Ads sample invoices</msg><path><editType>add</editType><file>reference/edge-proxy/advanced-snippet.conf</file></path><path><editType>edit</editType><file>reference/template-cleanup/00-defuse.sh</file></path><path><editType>add</editType><file>reference/edge-proxy/npm-api.sh</file></path><path><editType>add</editType><file>reference/DE-CN-AEU-2026-134720.pdf</file></path><path><editType>add</editType><file>reference/DE-AEU-2025-197082.pdf</file></path><path><editType>edit</editType><file>reference/template-cleanup/README.md</file></path><path><editType>add</editType><file>reference/edge-proxy/install-npm-baremetal.sh</file></path><path><editType>add</editType><file>reference/edge-proxy/location-webui.conf</file></path><path><editType>add</editType><file>reference/edge-proxy/README.md</file></path><path><editType>add</editType><file>reference/template-cleanup/REFRESH-QUICKSTART.md</file></path><path><editType>edit</editType><file>reference/template-cleanup/02-strapi-truncate.sql</file></path><path><editType>add</editType><file>reference/edge-proxy/selfsigned-wildcard.sh</file></path><path><editType>edit</editType><file>reference/template-cleanup/01-idempiere-truncate.sql</file></path><path><editType>edit</editType><file>reference/template-cleanup/run-cleanup.sh</file></path><path><editType>add</editType><file>reference/template-cleanup/refresh-template.sh</file></path><path><editType>edit</editType><file>reference/template-cleanup/03-neutralize-env.sh</file></path><path><editType>edit</editType><file>reference/template-cleanup/TEMPLATE-README.md</file></path><path><editType>edit</editType><file>reference/template-cleanup/RECLONE-RUNBOOK.md</file></path><path><editType>edit</editType><file>reference/template-cleanup/clone-logship-instance.sh</file></path><path><editType>add</editType><file>reference/template-cleanup/validate-template.sh</file></path><path><editType>add</editType><file>reference/edge-proxy/add-instance.sh</file></path><path><editType>add</editType><file>reference/edge-proxy/location-api.conf</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/reconditioning.vue</affectedPath><affectedPath>app/components/mobile/LocatorRow.vue</affectedPath><affectedPath>app/pages/mobile/inventory.vue</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>app/pages/mobile/receive.vue</affectedPath><affectedPath>app/pages/mobile/fix-locator-owner.vue</affectedPath><affectedPath>app/pages/mobile/product.vue</affectedPath><affectedPath>app/pages/mobile/return.vue</affectedPath><affectedPath>app/pages/mobile/movement.vue</affectedPath><commitId>91210c8430e9343e2548ee0e04b934c0c6a6153f</commitId><timestamp>1791067646000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile: shared &lt;MobileLocatorRow&gt; (X black / Y yellow / Z white boxes, arrow, green qty on hand) used on product, inventory, movement, fix-locator-owner, tasks and the locator pickers of receive / return / reconditioning; product name limited to two lines, tap shows it in full
</comment><date>2026-10-04 00:47:26 +0200</date><id>91210c8430e9343e2548ee0e04b934c0c6a6153f</id><msg>Mobile: shared &lt;MobileLocatorRow&gt; (X black / Y yellow / Z white boxes, arrow, green qty on hand) used on product, inventory, movement, fix-locator-owner, tasks and the locator pickers of receive / return / reconditioning; product name limited to two lines, tap shows it in full</msg><path><editType>add</editType><file>app/components/mobile/LocatorRow.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/return.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/fix-locator-owner.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/product.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/receive.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/reconditioning.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/movement.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/inventory.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>755</buildNumber><marked><SHA1>34267ac4fa153b7bb9dfe78b3cdb31a661f93944</SHA1><branch><SHA1>34267ac4fa153b7bb9dfe78b3cdb31a661f93944</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>34267ac4fa153b7bb9dfe78b3cdb31a661f93944</SHA1><branch><SHA1>34267ac4fa153b7bb9dfe78b3cdb31a661f93944</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>34267ac4fa153b7bb9dfe78b3cdb31a661f93944</SHA1><branch><SHA1>34267ac4fa153b7bb9dfe78b3cdb31a661f93944</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'></action><building>false</building><displayName>#755</displayName><duration>68142</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #755</fullDisplayName><id>755</id><inProgress>false</inProgress><keepLog>false</keepLog><number>755</number><queueId>5799</queueId><result>SUCCESS</result><timestamp>1790985600767</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/755/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/PicklistGenerateModal.vue</affectedPath><affectedPath>app/pages/mobile/digital-picking.vue</affectedPath><affectedPath>server/api/dashboard/prime-due-today.get.ts</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/components/sales/GenerateShipmentsPanel.vue</affectedPath><affectedPath>.claude/rules/fulfillment/digital-picklist.md</affectedPath><affectedPath>app/pages/integrations/commission.vue</affectedPath><affectedPath>app/components/dashboard/SameDayBatchModal.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>f13ae941bb76ad57661dc5f71b2c21d30daf7127</commitId><timestamp>1790934791000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard: merchant scope for the Picking print modal; SameDay batch modal (generate missing shipments, print shipments / picklist, digital picking); Simple generate-shipments tab with two pictogram card buttons; commission multi-parcel controls restyled; mobile digital picking always reloads and starts clean
</comment><date>2026-10-02 11:53:11 +0200</date><id>f13ae941bb76ad57661dc5f71b2c21d30daf7127</id><msg>Dashboard: merchant scope for the Picking print modal; SameDay batch modal (generate missing shipments, print shipments / picklist, digital picking); Simple generate-shipments tab with two pictogram card buttons; commission multi-parcel controls restyled; mobile digital picking always reloads and starts clean</msg><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/digital-picklist.md</file></path><path><editType>add</editType><file>app/components/dashboard/SameDayBatchModal.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/digital-picking.vue</file></path><path><editType>edit</editType><file>app/components/sales/GenerateShipmentsPanel.vue</file></path><path><editType>edit</editType><file>server/api/dashboard/prime-due-today.get.ts</file></path><path><editType>edit</editType><file>app/components/dashboard/PicklistGenerateModal.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/commission/parcels/dhl/multi.post.ts</affectedPath><affectedPath>.claude/rules/fulfillment/commissioning.md</affectedPath><affectedPath>server/api/commission/parcels/dhl/index.post.ts</affectedPath><affectedPath>app/pages/integrations/commission.vue</affectedPath><affectedPath>app/pages/mobile/commission.vue</affectedPath><commitId>0703c2ff103f47cc56db411108ec5d6ae868e1a2</commitId><timestamp>1790942360000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Commission: Kleinpaket (CODE6) scanned for a foreign destination auto-switches to Paket S (CODE1) on desktop, mobile and the DHL label routes
</comment><date>2026-10-02 13:59:20 +0200</date><id>0703c2ff103f47cc56db411108ec5d6ae868e1a2</id><msg>Commission: Kleinpaket (CODE6) scanned for a foreign destination auto-switches to Paket S (CODE1) on desktop, mobile and the DHL label routes</msg><path><editType>edit</editType><file>app/pages/mobile/commission.vue</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/commissioning.md</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dhl/index.post.ts</file></path><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dhl/multi.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/OrderQuickAddModal.vue</affectedPath><affectedPath>app/pages/partners/partners/add.vue</affectedPath><affectedPath>app/components/partners/PartnerQuickForm.vue</affectedPath><affectedPath>.claude/rules/fulfillment/shippers.md</affectedPath><affectedPath>server/utils/fbaPartner.ts</affectedPath><affectedPath>server/api/partners/partners/quick-add.post.ts</affectedPath><affectedPath>server/api/partners/partners/fba-partner.get.ts</affectedPath><commitId>cc0f03e05f477cbbf1fa6395cddd248468025066</commitId><timestamp>1790943710000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quick-add order: Amazon FBA shipper books the order on the shared Amazon partner (1043801) — Amazon panel instead of customer search/address, labels attached afterwards (DIN A5 portrait); server creates only the order
</comment><date>2026-10-02 14:21:50 +0200</date><id>cc0f03e05f477cbbf1fa6395cddd248468025066</id><msg>Quick-add order: Amazon FBA shipper books the order on the shared Amazon partner (1043801) — Amazon panel instead of customer search/address, labels attached afterwards (DIN A5 portrait); server creates only the order</msg><path><editType>add</editType><file>server/utils/fbaPartner.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/shippers.md</file></path><path><editType>edit</editType><file>app/components/partners/PartnerQuickForm.vue</file></path><path><editType>edit</editType><file>app/components/OrderQuickAddModal.vue</file></path><path><editType>edit</editType><file>server/api/partners/partners/quick-add.post.ts</file></path><path><editType>add</editType><file>server/api/partners/partners/fba-partner.get.ts</file></path><path><editType>edit</editType><file>app/pages/partners/partners/add.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/procurements/receipts/add.vue</affectedPath><affectedPath>app/components/procurements/ReceiptForm.vue</affectedPath><affectedPath>app/components/procurements/OrderForm.vue</affectedPath><affectedPath>app/components/procurements/MerchantPickerModal.vue</affectedPath><affectedPath>app/pages/procurements/orders/add.vue</affectedPath><commitId>427a4d99dec1efb605a5489fd654989ce71f5c74</commitId><timestamp>1790953866000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Procurements: merchant card picker modal replaces the organization SelectBox on order + receipt forms; new purchase order presets Purchase Order / Einkauf price list and never defaults to drop shipment; new receipt presets MM Receipt, Medium priority, Delivery, Freight included (also as fallbacks when copying from a PO)
</comment><date>2026-10-02 17:11:06 +0200</date><id>427a4d99dec1efb605a5489fd654989ce71f5c74</id><msg>Procurements: merchant card picker modal replaces the organization SelectBox on order + receipt forms; new purchase order presets Purchase Order / Einkauf price list and never defaults to drop shipment; new receipt presets MM Receipt, Medium priority, Delivery, Freight included (also as fallbacks when copying from a PO)</msg><path><editType>edit</editType><file>app/components/procurements/OrderForm.vue</file></path><path><editType>edit</editType><file>app/components/procurements/ReceiptForm.vue</file></path><path><editType>edit</editType><file>app/pages/procurements/receipts/add.vue</file></path><path><editType>add</editType><file>app/components/procurements/MerchantPickerModal.vue</file></path><path><editType>edit</editType><file>app/pages/procurements/orders/add.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/product.vue</affectedPath><commitId>34267ac4fa153b7bb9dfe78b3cdb31a661f93944</commitId><timestamp>1790955336000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile product: locators shown as large colored X / Y / Z boxes (blue / violet / amber, like the desktop picklist) with a bold qty box; return locators in the amber variant; plain code fallback when a locator has no coordinates
</comment><date>2026-10-02 17:35:36 +0200</date><id>34267ac4fa153b7bb9dfe78b3cdb31a661f93944</id><msg>Mobile product: locators shown as large colored X / Y / Z boxes (blue / violet / amber, like the desktop picklist) with a bold qty box; return locators in the amber variant; plain code fallback when a locator has no coordinates</msg><path><editType>edit</editType><file>app/pages/mobile/product.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>754</buildNumber><marked><SHA1>7b2558969aef23d54663e07b52c912810c4aab32</SHA1><branch><SHA1>7b2558969aef23d54663e07b52c912810c4aab32</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>7b2558969aef23d54663e07b52c912810c4aab32</SHA1><branch><SHA1>7b2558969aef23d54663e07b52c912810c4aab32</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>7b2558969aef23d54663e07b52c912810c4aab32</SHA1><branch><SHA1>7b2558969aef23d54663e07b52c912810c4aab32</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'></action><building>false</building><displayName>#754</displayName><duration>72850</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #754</fullDisplayName><id>754</id><inProgress>false</inProgress><keepLog>false</keepLog><number>754</number><queueId>5793</queueId><result>SUCCESS</result><timestamp>1790899200766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/754/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quoteConfirmation.ts</affectedPath><affectedPath>app/pages/confirm/[token].vue</affectedPath><affectedPath>server/api/public/confirm/[token]/index.post.ts</affectedPath><affectedPath>.claude/rules/offers/contract-and-quote-portals.md</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>7b2558969aef23d54663e07b52c912810c4aab32</commitId><timestamp>1790881598000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quote confirmation portal: one-click 'Angebot annehmen' without checkboxes — statement recorded server-side, binding only with the signed contract
</comment><date>2026-10-01 21:06:38 +0200</date><id>7b2558969aef23d54663e07b52c912810c4aab32</id><msg>Quote confirmation portal: one-click 'Angebot annehmen' without checkboxes — statement recorded server-side, binding only with the signed contract</msg><path><editType>edit</editType><file>server/api/public/confirm/[token]/index.post.ts</file></path><path><editType>edit</editType><file>app/pages/confirm/[token].vue</file></path><path><editType>edit</editType><file>server/utils/offers/quoteConfirmation.ts</file></path><path><editType>edit</editType><file>.claude/rules/offers/contract-and-quote-portals.md</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>753</buildNumber><marked><SHA1>3c2920b0ea19ce06d4c3e81a086c1b44b1c9fca1</SHA1><branch><SHA1>3c2920b0ea19ce06d4c3e81a086c1b44b1c9fca1</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>3c2920b0ea19ce06d4c3e81a086c1b44b1c9fca1</SHA1><branch><SHA1>3c2920b0ea19ce06d4c3e81a086c1b44b1c9fca1</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>3c2920b0ea19ce06d4c3e81a086c1b44b1c9fca1</SHA1><branch><SHA1>3c2920b0ea19ce06d4c3e81a086c1b44b1c9fca1</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'></action><building>false</building><displayName>#753</displayName><duration>72669</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #753</fullDisplayName><id>753</id><inProgress>false</inProgress><keepLog>false</keepLog><number>753</number><queueId>5790</queueId><result>SUCCESS</result><timestamp>1790812800767</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/753/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>752</buildNumber><marked><SHA1>3c2920b0ea19ce06d4c3e81a086c1b44b1c9fca1</SHA1><branch><SHA1>3c2920b0ea19ce06d4c3e81a086c1b44b1c9fca1</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>3c2920b0ea19ce06d4c3e81a086c1b44b1c9fca1</SHA1><branch><SHA1>3c2920b0ea19ce06d4c3e81a086c1b44b1c9fca1</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>3c2920b0ea19ce06d4c3e81a086c1b44b1c9fca1</SHA1><branch><SHA1>3c2920b0ea19ce06d4c3e81a086c1b44b1c9fca1</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'></action><building>false</building><displayName>#752</displayName><duration>66468</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #752</fullDisplayName><id>752</id><inProgress>false</inProgress><keepLog>false</keepLog><number>752</number><queueId>5789</queueId><result>SUCCESS</result><timestamp>1790726400765</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/752/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/materials/products/send-qty-report.post.ts</affectedPath><affectedPath>server/api/materials/products/qty-on-hand-overview.get.ts</affectedPath><affectedPath>app/pages/materials/qty-on-hand.vue</affectedPath><affectedPath>server/api/materials/products/qty-on-hand-pit.get.ts</affectedPath><affectedPath>server/api/materials/products/qty-on-hand-by-locator.get.ts</affectedPath><affectedPath>app/components/materials/StockReportEmailModal.vue</affectedPath><commitId>bd2cda6b5ca386372f04b2d3ac07ccd5f40ea1f8</commitId><timestamp>1790677563000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Qty on hand: 'Exclude returns' checkbox (list, exports, e-mail report) and orange return-locator highlighting

Server routes flag stock on return locators (locator type with all IsAvailableFor*
flags off, via getReturnLocatorIds): overview and point-in-time get returnQtyOnHand
per product, by-locator rows get isReturn. The page filters the rows client-side so the
grid, summary tiles, Excel/CSV/PDF export and the e-mailed report all follow the
checkbox; default stays 'show everything'. By-locator return rows are orange, the
aggregated view gets an orange Return Qty column, and the mailed PDF/CSV/HTML state
when returns were excluded.
</comment><date>2026-09-29 12:26:03 +0200</date><id>bd2cda6b5ca386372f04b2d3ac07ccd5f40ea1f8</id><msg>Qty on hand: 'Exclude returns' checkbox (list, exports, e-mail report) and orange return-locator highlighting</msg><path><editType>edit</editType><file>server/api/materials/products/send-qty-report.post.ts</file></path><path><editType>edit</editType><file>app/components/materials/StockReportEmailModal.vue</file></path><path><editType>edit</editType><file>server/api/materials/products/qty-on-hand-overview.get.ts</file></path><path><editType>edit</editType><file>server/api/materials/products/qty-on-hand-pit.get.ts</file></path><path><editType>edit</editType><file>app/pages/materials/qty-on-hand.vue</file></path><path><editType>edit</editType><file>server/api/materials/products/qty-on-hand-by-locator.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/requests/tickets.md</affectedPath><affectedPath>app/pages/requests/my-tickets/create.vue</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>384ba4ee7ba795f6a254808dcae211292551678d</commitId><timestamp>1790692496000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>My-Tickets relation picker: scope to the ticket's org for every role and search products by name, article no., SKU, UPC and MPN

Staff saw the whole tenant in the product picker (org clause was merchant-only) and the search matched Name only, so article numbers never hit. Every picker filter now carries IsActive + the ticket's org (staff can widen via 'Alle Organisationen'); the wizard's product/order search uses the same builder.
</comment><date>2026-09-29 16:34:56 +0200</date><id>384ba4ee7ba795f6a254808dcae211292551678d</id><msg>My-Tickets relation picker: scope to the ticket's org for every role and search products by name, article no., SKU, UPC and MPN</msg><path><editType>edit</editType><file>.claude/rules/requests/tickets.md</file></path><path><editType>edit</editType><file>app/pages/requests/my-tickets/create.vue</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/fulfillment/amazon-stocks/index.vue</affectedPath><affectedPath>app/composables/menu/admin/fulfillment.ts</affectedPath><affectedPath>server/utils/amazonSpApi.ts</affectedPath><affectedPath>server/api/amazon/stocks/sync.post.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><commitId>12e96fbebb00ba9a650dde33ffa4643017133753</commitId><timestamp>1790696724000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon Stocks: quantity-only stock sync page for Amazon order sources (BOM excluded by default, FBA read-only)
</comment><date>2026-09-29 17:45:24 +0200</date><id>12e96fbebb00ba9a650dde33ffa4643017133753</id><msg>Amazon Stocks: quantity-only stock sync page for Amazon order sources (BOM excluded by default, FBA read-only)</msg><path><editType>edit</editType><file>server/utils/amazonSpApi.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/composables/menu/admin/fulfillment.ts</file></path><path><editType>add</editType><file>server/api/amazon/stocks/sync.post.ts</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>add</editType><file>app/pages/fulfillment/amazon-stocks/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/sis/index.vue</affectedPath><affectedPath>app/pages/fulfillment/amazon-stocks/index.vue</affectedPath><affectedPath>server/api/sales/sis/listings.get.ts</affectedPath><affectedPath>server/utils/amazonSpApi.ts</affectedPath><commitId>3c2920b0ea19ce06d4c3e81a086c1b44b1c9fca1</commitId><timestamp>1790701570000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon listings report: resume the pending report across requests (202 + client polling) instead of failing with TIMEOUT on slow sellers
</comment><date>2026-09-29 19:06:10 +0200</date><id>3c2920b0ea19ce06d4c3e81a086c1b44b1c9fca1</id><msg>Amazon listings report: resume the pending report across requests (202 + client polling) instead of failing with TIMEOUT on slow sellers</msg><path><editType>edit</editType><file>server/api/sales/sis/listings.get.ts</file></path><path><editType>edit</editType><file>app/pages/sales/sis/index.vue</file></path><path><editType>edit</editType><file>server/utils/amazonSpApi.ts</file></path><path><editType>edit</editType><file>app/pages/fulfillment/amazon-stocks/index.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>751</buildNumber><marked><SHA1>99b18c4be0216eb1f6269dcb5942cc45f8604611</SHA1><branch><SHA1>99b18c4be0216eb1f6269dcb5942cc45f8604611</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>99b18c4be0216eb1f6269dcb5942cc45f8604611</SHA1><branch><SHA1>99b18c4be0216eb1f6269dcb5942cc45f8604611</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>99b18c4be0216eb1f6269dcb5942cc45f8604611</SHA1><branch><SHA1>99b18c4be0216eb1f6269dcb5942cc45f8604611</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'></action><building>false</building><displayName>#751</displayName><duration>64774</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #751</fullDisplayName><id>751</id><inProgress>false</inProgress><keepLog>false</keepLog><number>751</number><queueId>5784</queueId><result>SUCCESS</result><timestamp>1790640000767</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/751/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/inouts/[id]/reset-commission.post.ts</affectedPath><affectedPath>.claude/rules/fulfillment/commissioning.md</affectedPath><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>172773d1724306ef4c1a90819b692f41bd24d400</commitId><timestamp>1790580179000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Orders: admin-only commission reset in More actions with DHL/Sendcloud label cancel

Adds POST /api/inouts/{id}/reset-commission (IsClientAdministrator only) that clears tracking,
carrier codes, label PDFs, commissioned flags, shipping date/service, parcel allocation and the
commission-table link so a shipment can be commissioned again. DHL labels are cancelled via the
orders DELETE (custom OrderSource account honoured), Sendcloud parcels via cancel; DPD has no
cancel API and is reported as such. Confirmation dialog + translations (en/de/es/ne).
</comment><date>2026-09-28 09:22:59 +0200</date><id>172773d1724306ef4c1a90819b692f41bd24d400</id><msg>Orders: admin-only commission reset in More actions with DHL/Sendcloud label cancel</msg><path><editType>add</editType><file>server/api/inouts/[id]/reset-commission.post.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/commissioning.md</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/fulfillment/commissioning.md</affectedPath><affectedPath>app/components/integrations/CommissionDHLLabel.vue</affectedPath><affectedPath>app/components/integrations/CommissionDPDLabel.vue</affectedPath><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>server/api/commission/parcels/dhl/index.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>84791046441a4ddfeeb8c461008202a0b780c30f</commitId><timestamp>1790583749000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Label reprint: fetch every parcel of a multi-parcel DHL shipment and always use the current shipment numbers

DHL_Shipment_Code stores all numbers comma-joined; the reprint sent them as a single
shipment param and only read the first item, so multi-parcel reprints lost every
additional label. The GET route now splits the codes (one param each), prefers the
numbers stored on the record via inout_id (the keep-alive'd order edit page could
otherwise reprint the pre-reset label) and honours a custom OrderSource DHL account.
The modal merges the labels for preview/download and prints one job per label; the
edit page refreshes the shipment's label fields before opening the reprint.
</comment><date>2026-09-28 10:22:29 +0200</date><id>84791046441a4ddfeeb8c461008202a0b780c30f</id><msg>Label reprint: fetch every parcel of a multi-parcel DHL shipment and always use the current shipment numbers</msg><path><editType>edit</editType><file>app/components/integrations/CommissionDPDLabel.vue</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dhl/index.get.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/commissioning.md</file></path><path><editType>edit</editType><file>app/components/integrations/CommissionDHLLabel.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>aa0d64df566d0c808cd43c7883146b0eb2f9a415</commitId><timestamp>1790589339000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard SameDay card: shorter title with tooltip and mission-clock countdown

- Card title "SameDay Versand" → "SameDay"; hovering the title explains
  the card (orders that must ship today before the counter runs out).
- The inline "due until 14:03 · 2 h 10 min" label is replaced by a
  NASA-style mission clock (T-HH:MM:SS, ticking every second, T+ in red
  when overdue); the former label is shown as its hover text.
- New translation key dash_prime_title_tip (en/de/es).
</comment><date>2026-09-28 11:55:39 +0200</date><id>aa0d64df566d0c808cd43c7883146b0eb2f9a415</id><msg>Dashboard SameDay card: shorter title with tooltip and mission-clock countdown</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/commission.vue</affectedPath><affectedPath>server/api/commission/pick-identifier/[orgId].get.ts</affectedPath><commitId>abe2149f4eff2142e92943d3123a58e825b4a155</commitId><timestamp>1790589643000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Commissioning: highlight the merchant's pick product identifier on the position cards

- New GET /api/commission/pick-identifier/:orgId returns the org partner's
  C_BPartner.PickProductIdentifier via the cached pickIdentifier util.
- The desktop commission page loads it per shipment (fail-soft) and marks
  the matching code (Value/SKU/EAN/MPN/ASIN) on every open-position card:
  orange framed, bold, listed first, with a scan icon and tooltip. Nothing
  is highlighted when the partner has no setting.
- Product-code scans now also match the ASIN.
</comment><date>2026-09-28 12:00:43 +0200</date><id>abe2149f4eff2142e92943d3123a58e825b4a155</id><msg>Commissioning: highlight the merchant's pick product identifier on the position cards</msg><path><editType>add</editType><file>server/api/commission/pick-identifier/[orgId].get.ts</file></path><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/generate-shipments.vue</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><commitId>99b18c4be0216eb1f6269dcb5942cc45f8604611</commitId><timestamp>1790589643000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile: drop the leads card from the dashboard; Advanced generate-shipments gets the desktop parameters

- /mobile: the 'Neueste Leads' card and its feed are removed again.
- /mobile/generate-shipments Advanced tab now mirrors the desktop panel:
  shipment / promised dates, document action (Complete / Prepare), the
  shipper filter with logo chips (select all / clear, queue-driven with the
  shipperIds parameter), and the process options (unconfirmed shipments,
  one document, subtract in-progress, run as job). Start is blocked while
  the shipper filter is on with no shipper picked; the sequential progress
  line shows the shipper.
</comment><date>2026-09-28 12:00:43 +0200</date><id>99b18c4be0216eb1f6269dcb5942cc45f8604611</id><msg>Mobile: drop the leads card from the dashboard; Advanced generate-shipments gets the desktop parameters</msg><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/generate-shipments.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>750</buildNumber><marked><SHA1>c3cd77201a32db3dbf4707af75df25193e36b7e0</SHA1><branch><SHA1>c3cd77201a32db3dbf4707af75df25193e36b7e0</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>c3cd77201a32db3dbf4707af75df25193e36b7e0</SHA1><branch><SHA1>c3cd77201a32db3dbf4707af75df25193e36b7e0</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>c3cd77201a32db3dbf4707af75df25193e36b7e0</SHA1><branch><SHA1>c3cd77201a32db3dbf4707af75df25193e36b7e0</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'></action><building>false</building><displayName>#750</displayName><duration>63988</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #750</fullDisplayName><id>750</id><inProgress>false</inProgress><keepLog>false</keepLog><number>750</number><queueId>5781</queueId><result>SUCCESS</result><timestamp>1790553600765</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/750/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/requests/my-tickets/create.vue</affectedPath><commitId>b554d04477f3c4b79c9092fc9089725adee2cfe7</commitId><timestamp>1790533400000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Tickets: remove the charge notice confirmation step from ticket creation for all roles
</comment><date>2026-09-27 20:23:20 +0200</date><id>b554d04477f3c4b79c9092fc9089725adee2cfe7</id><msg>Tickets: remove the charge notice confirmation step from ticket creation for all roles</msg><path><editType>edit</editType><file>app/pages/requests/my-tickets/create.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/PicklistGenerateModal.vue</affectedPath><affectedPath>app/utils/picklistItems.ts</affectedPath><affectedPath>app/pages/integrations/picklist-desktop.vue</affectedPath><affectedPath>app/pages/mobile/digital-picking.vue</affectedPath><affectedPath>app/composables/useProductThumbs.ts</affectedPath><affectedPath>app/components/sales/GenerateShipmentsPanel.vue</affectedPath><affectedPath>app/components/fulfillment/DigitalPicklist.vue</affectedPath><affectedPath>app/pages/mobile/generate-shipments.vue</affectedPath><affectedPath>.claude/rules/fulfillment/digital-picklist.md</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><affectedPath>app/pages/mobile/picklist.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>c3cd77201a32db3dbf4707af75df25193e36b7e0</commitId><timestamp>1790535537000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Digital picklist: shared tablet-first overlay with tabs, sorting, scan-to-pick and persisted progress

- New FulfillmentDigitalPicklist component replaces the four cloned digital-picking
  overlays (generate-shipments panel, picklist-desktop, mobile picklist, mobile
  generate-shipments); rows mirror the printed picklist (X/Y/Z locator boxes, big
  merchant pick code from C_BPartner.PickProductIdentifier, name, codes, weight)
- Tabs To pick / Later / Picked / Shipments instead of the 3-column layout; sort by
  locator (direction + start aisle), pick code, value, SKU, MPN, qty, shipper,
  shipment, org; search; scan-to-pick; +1/-1/All/Later/Undo; image lightbox;
  progress persisted in localStorage per shipment set
- Dashboard Picking generator: "Digital picken" over all open shipments (one org or all)
- Mobile dashboard: new "Digital Picking" card and /mobile/digital-picking page
- Shared helpers: utils/picklistItems.ts, composables/useProductThumbs.ts; de/en/es keys
- Recipe: .claude/rules/fulfillment/digital-picklist.md
</comment><date>2026-09-27 20:58:57 +0200</date><id>c3cd77201a32db3dbf4707af75df25193e36b7e0</id><msg>Digital picklist: shared tablet-first overlay with tabs, sorting, scan-to-pick and persisted progress</msg><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>app/utils/picklistItems.ts</file></path><path><editType>add</editType><file>app/composables/useProductThumbs.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/picklist.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/generate-shipments.vue</file></path><path><editType>add</editType><file>app/components/fulfillment/DigitalPicklist.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/picklist-desktop.vue</file></path><path><editType>edit</editType><file>app/components/sales/GenerateShipmentsPanel.vue</file></path><path><editType>add</editType><file>app/pages/mobile/digital-picking.vue</file></path><path><editType>add</editType><file>.claude/rules/fulfillment/digital-picklist.md</file></path><path><editType>edit</editType><file>app/components/dashboard/PicklistGenerateModal.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>749</buildNumber><marked><SHA1>24a1ab9aa14d1095660902f1528703fb82b3b79e</SHA1><branch><SHA1>24a1ab9aa14d1095660902f1528703fb82b3b79e</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>24a1ab9aa14d1095660902f1528703fb82b3b79e</SHA1><branch><SHA1>24a1ab9aa14d1095660902f1528703fb82b3b79e</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>24a1ab9aa14d1095660902f1528703fb82b3b79e</SHA1><branch><SHA1>24a1ab9aa14d1095660902f1528703fb82b3b79e</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'></action><building>false</building><displayName>#749</displayName><duration>64356</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #749</fullDisplayName><id>749</id><inProgress>false</inProgress><keepLog>false</keepLog><number>749</number><queueId>5779</queueId><result>SUCCESS</result><timestamp>1790467200766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/749/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/dashboard/prime-due-today.get.ts</affectedPath><affectedPath>app/components/partners/PartnerForm.vue</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>5b55a953155add406dc9fe415c75bb9579a9aca0</commitId><timestamp>1790347569000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>SameDay Versand: weekend-aware 14:03 cutoff, rename card and partner flag

- Sat/Sun are no business days: on a weekend the cutoff stays at Friday
  14:03, so orders from Friday after 14:03, Saturday and Sunday are due
  Monday 14:03 (endpoint returns cutoffAt; client countdown uses it)
- Dashboard card and partner toggle are now called 'SameDay Versand'
  (column stays C_BPartner.isPrime)
</comment><date>2026-09-25 16:46:09 +0200</date><id>5b55a953155add406dc9fe415c75bb9579a9aca0</id><msg>SameDay Versand: weekend-aware 14:03 cutoff, rename card and partner flag</msg><path><editType>edit</editType><file>server/api/dashboard/prime-due-today.get.ts</file></path><path><editType>edit</editType><file>app/components/partners/PartnerForm.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/dashboard/prime-due-today.get.ts</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/components/dashboard/SameDayOrderModal.vue</affectedPath><affectedPath>server/api/dashboard/sameday-order/[id].get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>24a1ab9aa14d1095660902f1528703fb82b3b79e</commitId><timestamp>1790415696000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>SameDay Versand: order summary popup, missing-stock list, per-order due times

- Click on a row opens an order summary modal (header, address, shipment
  state, positions with thumbnail, qty, on-hand stock and missing qty) with
  a link to /edit/sales-order-&lt;id&gt; in a new tab
  (server/api/dashboard/sameday-order/[id].get.ts)
- Card lists due orders that are not fulfillable (missing on-hand qty)
  in a separate section
- Every order gets its own due time (weekday until 14:03 -&gt; same day,
  otherwise next weekday 14:03); on a weekend the card counts down to
  Monday 14:03 and includes the weekend orders, Friday leftovers stay red
</comment><date>2026-09-26 11:41:36 +0200</date><id>24a1ab9aa14d1095660902f1528703fb82b3b79e</id><msg>SameDay Versand: order summary popup, missing-stock list, per-order due times</msg><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>add</editType><file>app/components/dashboard/SameDayOrderModal.vue</file></path><path><editType>add</editType><file>server/api/dashboard/sameday-order/[id].get.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/api/dashboard/prime-due-today.get.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>748</buildNumber><marked><SHA1>8d1bd0456a8e8cb2ac5377befc54eff68c7080e5</SHA1><branch><SHA1>8d1bd0456a8e8cb2ac5377befc54eff68c7080e5</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>8d1bd0456a8e8cb2ac5377befc54eff68c7080e5</SHA1><branch><SHA1>8d1bd0456a8e8cb2ac5377befc54eff68c7080e5</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>8d1bd0456a8e8cb2ac5377befc54eff68c7080e5</SHA1><branch><SHA1>8d1bd0456a8e8cb2ac5377befc54eff68c7080e5</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'></action><building>false</building><displayName>#748</displayName><duration>65096</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #748</fullDisplayName><id>748</id><inProgress>false</inProgress><keepLog>false</keepLog><number>748</number><queueId>5777</queueId><result>SUCCESS</result><timestamp>1790380800766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/748/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/marketplaces/shipment-confirmation.md</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>.claude/rules/accounting/opos.md</affectedPath><affectedPath>CLAUDE.md</affectedPath><affectedPath>.claude/rules/nuxt/nuxt4-conventions.md</affectedPath><affectedPath>.claude/rules/fulfillment/shippers.md</affectedPath><affectedPath>.claude/rules/accounting/lexoffice.md</affectedPath><affectedPath>.claude/rules/partners/partner-edit-form.md</affectedPath><affectedPath>.claude/rules/printing/labels-and-paper.md</affectedPath><affectedPath>.claude/rules/nuxt/selectbox-wrapper.md</affectedPath><affectedPath>.claude/rules/nuxt/data-fetching.md</affectedPath><affectedPath>.claude/rules/offers/sepa-mandate.md</affectedPath><affectedPath>server/api/telephony/cid-lookup/[number].get.ts</affectedPath><affectedPath>app/components/accounting/LexofficeHintsPanel.vue</affectedPath><affectedPath>.claude/rules/telephony/telephony.md</affectedPath><affectedPath>.claude/rules/marketplaces/shopify-stock-sync.md</affectedPath><affectedPath>.claude/rules/fulfillment/shipment-generation.md</affectedPath><affectedPath>reference/recipes.md</affectedPath><affectedPath>.claude/rules/offers/contract-and-quote-portals.md</affectedPath><affectedPath>.claude/rules/materials/unit-tracking.md</affectedPath><affectedPath>.claude/rules/idempiere/prod-readonly-queries.md</affectedPath><affectedPath>.claude/rules/fulfillment/commissioning.md</affectedPath><affectedPath>.claude/rules/nuxt/ui-components.md</affectedPath><affectedPath>.claude/rules/mobile/capacitor-app-build.md</affectedPath><affectedPath>.claude/rules/materials/product-stock-actions.md</affectedPath><affectedPath>.claude/rules/offers/pdf-generation.md</affectedPath><affectedPath>.claude/rules/marketplaces/amazon-lwa-rotation.md</affectedPath><affectedPath>.claude/rules/accounting/banking-paypal.md</affectedPath><affectedPath>reference/app-spa-deploy.md</affectedPath><affectedPath>.claude/rules/idempiere/write-casing-and-flags.md</affectedPath><affectedPath>.claude/rules/idempiere/rest-load-rules.md</affectedPath><affectedPath>.claude/rules/fulfillment/fee-invoice-generator.md</affectedPath><affectedPath>.claude/rules/requests/tickets.md</affectedPath><affectedPath>.claude/rules/accounting/invoice-pdf.md</affectedPath><affectedPath>.claude/rules/accounting/incoming-invoices.md</affectedPath><affectedPath>.claude/rules/ops/runtimeconfig-env-reload.md</affectedPath><affectedPath>.claude/rules/nuxt/dev-server-troubleshooting.md</affectedPath><affectedPath>.claude/rules/chat/staff-chat.md</affectedPath><commitId>ea2f7ead33bdf9ccad1cb2e9d69101f5be488f2d</commitId><timestamp>1790330701000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Claude instructions: move recipes into path-scoped .claude/rules

CLAUDE.md + the @-imported reference/recipes.md added up to 159k chars,
over Claude Code's 150k instruction limit. The recipes now live as 32
trimmed files under .claude/rules/&lt;domain&gt;/, each with paths: frontmatter
so they load only when matching files are touched. CLAUDE.md is condensed
and carries an index of the rule files instead of the import.

.gitignore un-ignores .claude/rules/; stale recipes.md pointers in code
comments and docs now point at the new files.
</comment><date>2026-09-25 12:05:01 +0200</date><id>ea2f7ead33bdf9ccad1cb2e9d69101f5be488f2d</id><msg>Claude instructions: move recipes into path-scoped .claude/rules</msg><path><editType>add</editType><file>.claude/rules/nuxt/selectbox-wrapper.md</file></path><path><editType>add</editType><file>.claude/rules/printing/labels-and-paper.md</file></path><path><editType>edit</editType><file>reference/app-spa-deploy.md</file></path><path><editType>add</editType><file>.claude/rules/marketplaces/amazon-lwa-rotation.md</file></path><path><editType>add</editType><file>.claude/rules/fulfillment/fee-invoice-generator.md</file></path><path><editType>add</editType><file>.claude/rules/fulfillment/commissioning.md</file></path><path><editType>add</editType><file>.claude/rules/accounting/invoice-pdf.md</file></path><path><editType>add</editType><file>.claude/rules/accounting/opos.md</file></path><path><editType>add</editType><file>.claude/rules/idempiere/prod-readonly-queries.md</file></path><path><editType>add</editType><file>.claude/rules/marketplaces/shipment-confirmation.md</file></path><path><editType>edit</editType><file>app/components/accounting/LexofficeHintsPanel.vue</file></path><path><editType>edit</editType><file>server/api/telephony/cid-lookup/[number].get.ts</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>delete</editType><file>reference/recipes.md</file></path><path><editType>add</editType><file>.claude/rules/offers/contract-and-quote-portals.md</file></path><path><editType>add</editType><file>.claude/rules/accounting/banking-paypal.md</file></path><path><editType>add</editType><file>.claude/rules/nuxt/data-fetching.md</file></path><path><editType>add</editType><file>.claude/rules/offers/pdf-generation.md</file></path><path><editType>add</editType><file>.claude/rules/partners/partner-edit-form.md</file></path><path><editType>add</editType><file>.claude/rules/nuxt/dev-server-troubleshooting.md</file></path><path><editType>add</editType><file>.claude/rules/accounting/lexoffice.md</file></path><path><editType>add</editType><file>.claude/rules/requests/tickets.md</file></path><path><editType>edit</editType><file>CLAUDE.md</file></path><path><editType>add</editType><file>.claude/rules/idempiere/rest-load-rules.md</file></path><path><editType>add</editType><file>.claude/rules/mobile/capacitor-app-build.md</file></path><path><editType>add</editType><file>.claude/rules/offers/sepa-mandate.md</file></path><path><editType>add</editType><file>.claude/rules/chat/staff-chat.md</file></path><path><editType>add</editType><file>.claude/rules/nuxt/ui-components.md</file></path><path><editType>add</editType><file>.claude/rules/materials/unit-tracking.md</file></path><path><editType>add</editType><file>.claude/rules/marketplaces/shopify-stock-sync.md</file></path><path><editType>add</editType><file>.claude/rules/ops/runtimeconfig-env-reload.md</file></path><path><editType>add</editType><file>.claude/rules/materials/product-stock-actions.md</file></path><path><editType>add</editType><file>.claude/rules/nuxt/nuxt4-conventions.md</file></path><path><editType>add</editType><file>.claude/rules/fulfillment/shippers.md</file></path><path><editType>add</editType><file>.claude/rules/fulfillment/shipment-generation.md</file></path><path><editType>add</editType><file>.claude/rules/idempiere/write-casing-and-flags.md</file></path><path><editType>add</editType><file>.claude/rules/accounting/incoming-invoices.md</file></path><path><editType>add</editType><file>.claude/rules/telephony/telephony.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/dashboard/prime-due-today.get.ts</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/pages/partners/partners/[id]/edit.vue</affectedPath><affectedPath>app/components/partners/PartnerForm.vue</affectedPath><affectedPath>server/api/partners/partners/store.post.ts</affectedPath><affectedPath>server/api/partners/partners/update.put.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>8d1bd0456a8e8cb2ac5377befc54eff68c7080e5</commitId><timestamp>1790336493000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard: Prime same-day deadline card, reorder first row, partner isPrime flag

- New card 'Prime – heute raus' (server/api/dashboard/prime-due-today.get.ts):
  open DHL/DPD orders of Prime merchants (C_BPartner.isPrime on the org's
  partner) created until 14:03 Berlin that are not commissioned yet (open
  shipment, or fulfillable without shipment); red + pulse after the cutoff,
  carrier logos, polled every minute
- Open Orders: drop the fillable/unfillable split column, narrower card
- Tickets: no category column (category / request type shown in the hover
  tooltip), moved to the former phone card slot
- Recent calls card moved to the side column below the latest leads
- Partner form: isPrime toggle with tooltip (edit/update/store + en/de/es)
</comment><date>2026-09-25 13:41:33 +0200</date><id>8d1bd0456a8e8cb2ac5377befc54eff68c7080e5</id><msg>Dashboard: Prime same-day deadline card, reorder first row, partner isPrime flag</msg><path><editType>add</editType><file>server/api/dashboard/prime-due-today.get.ts</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>edit</editType><file>server/api/partners/partners/update.put.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/partners/partners/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/components/partners/PartnerForm.vue</file></path><path><editType>edit</editType><file>server/api/partners/partners/store.post.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>747</buildNumber><marked><SHA1>9d56329a3b339ba5496fcdac4a29cea8fff0139b</SHA1><branch><SHA1>9d56329a3b339ba5496fcdac4a29cea8fff0139b</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>9d56329a3b339ba5496fcdac4a29cea8fff0139b</SHA1><branch><SHA1>9d56329a3b339ba5496fcdac4a29cea8fff0139b</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>9d56329a3b339ba5496fcdac4a29cea8fff0139b</SHA1><branch><SHA1>9d56329a3b339ba5496fcdac4a29cea8fff0139b</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'></action><building>false</building><displayName>#747</displayName><duration>64719</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #747</fullDisplayName><id>747</id><inProgress>false</inProgress><keepLog>false</keepLog><number>747</number><queueId>5775</queueId><result>SUCCESS</result><timestamp>1790294400765</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/747/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>server/utils/offers/contractPdf.ts</affectedPath><affectedPath>app/components/offers/ContractModal.vue</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>app/composables/useOfferContract.ts</affectedPath><affectedPath>server/utils/offers/offerConditions.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/composables/useOfferForecast.ts</affectedPath><commitId>5be26ff14e17d3694679c3009902801f42371b5b</commitId><timestamp>1790244239000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quote: shelf S + new shelf prices, optional cut-off time, return rate, sortable requirements

- Storage: new Fachbodenregal S (30×60×40 cm, 3,50 €); M now 4,50 €, L 6,50 €
  (list prices + floors). Saved pre-S quotes still on the old list prices
  (3,50 / 5,50) are lifted to the new ones; negotiated prices stay.
  S quantity in quote + contract modals, forecast and storage summaries.
- Note under the storage table: one SKU per storage location.
- Optional cut-off time (default off / 14:00): meta-card row + Hinweise
  sentence; persisted in offer_conditions.quote.cutoff.
- Annahmen: shows the return rate; "Onboarding &amp; Setupkosten" without "(IT-Support)".
- Customer requirements sortable (drag handle + up/down arrows).
- Quote modal: form area fills the space between header and footer via a
  flex chain instead of a fixed calc() height, so the bottom (Freitexte)
  is no longer clipped.
</comment><date>2026-09-24 12:03:59 +0200</date><id>5be26ff14e17d3694679c3009902801f42371b5b</id><msg>Quote: shelf S + new shelf prices, optional cut-off time, return rate, sortable requirements</msg><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/composables/useOfferContract.ts</file></path><path><editType>edit</editType><file>app/components/offers/ContractModal.vue</file></path><path><editType>edit</editType><file>server/utils/offers/offerConditions.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>server/utils/offers/contractPdf.ts</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>app/composables/useOfferForecast.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/telephony/cdr.ts</affectedPath><commitId>189daa6d5a7ea9528f555367c392ca1a625889c8</commitId><timestamp>1790253947000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Telephony: read PBX cdr.calldate as Europe/Berlin wall time (calls showed 2 h late)

FreePBX/MariaDB (time_zone = SYSTEM = CEST) stores calldate as local wall
time; the mysql2 pool read it with timezone 'Z', shifting every call on the
dashboard "Letzte Anrufe" card and in the call-recordings list by the Berlin
offset. DATETIME/TIMESTAMP columns are now converted via typeCast from
Berlin wall time to the real instant (DST-safe; overridable via
runtimeConfig.pbxCdr.timezone).
</comment><date>2026-09-24 14:45:47 +0200</date><id>189daa6d5a7ea9528f555367c392ca1a625889c8</id><msg>Telephony: read PBX cdr.calldate as Europe/Berlin wall time (calls showed 2 h late)</msg><path><editType>edit</editType><file>server/utils/telephony/cdr.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/payments/[id]/print/[type].get.ts</affectedPath><commitId>2723fcd08c353fc77f0689ed13ac2bce3e20fc31</commitId><timestamp>1790254618000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Payment print: expose the Jasper process export as reportFile for the PDF preview
</comment><date>2026-09-24 14:56:58 +0200</date><id>2723fcd08c353fc77f0689ed13ac2bce3e20fc31</id><msg>Payment print: expose the Jasper process export as reportFile for the PDF preview</msg><path><editType>edit</editType><file>server/api/payments/[id]/print/[type].get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><commitId>9d56329a3b339ba5496fcdac4a29cea8fff0139b</commitId><timestamp>1790259444000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@anthropic.com</authorEmail><comment>Dashboard/tickets: make the leads column and ticket detail usable on mobile

The dashboard's right column (latest leads, non-working-days calendar,
returns, missing products) and the ticket detail's reference column were
&lt;aside&gt; elements. public/css/styles.css styles every bare `aside` as the app
sidebar and, at &lt;=991px, turns it into a fixed off-canvas drawer
(translateX(-100%)), so both columns vanished on phones. They are plain
&lt;div&gt;s now.

Dashboard ticket clicks on screens &lt;=1024px open the full-page ticket route
directly instead of bouncing through the split-view list, and
MyTicketDetail gets a phone layout: stacked toolbar with full-width action
buttons, "Weitere Aktionen" as a bottom sheet, viewport-sized chat bubbles,
16px composer font (no iOS focus zoom) and wrapping composer actions.
</comment><date>2026-09-24 14:17:24 +0000</date><id>9d56329a3b339ba5496fcdac4a29cea8fff0139b</id><msg>Dashboard/tickets: make the leads column and ticket detail usable on mobile</msg><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit><culprit><absoluteUrl>https://jenkins.younex.de/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit></build><build _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>746</buildNumber><marked><SHA1>e67f585bb5cee21944621662aaf324c7a83ea684</SHA1><branch><SHA1>e67f585bb5cee21944621662aaf324c7a83ea684</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>e67f585bb5cee21944621662aaf324c7a83ea684</SHA1><branch><SHA1>e67f585bb5cee21944621662aaf324c7a83ea684</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>e67f585bb5cee21944621662aaf324c7a83ea684</SHA1><branch><SHA1>e67f585bb5cee21944621662aaf324c7a83ea684</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'></action><building>false</building><displayName>#746</displayName><duration>64648</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #746</fullDisplayName><id>746</id><inProgress>false</inProgress><keepLog>false</keepLog><number>746</number><queueId>5770</queueId><result>SUCCESS</result><timestamp>1790208000766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/746/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/TopMegaBar.vue</affectedPath><affectedPath>app/components/sales/GenerateShipmentsPanel.vue</affectedPath><affectedPath>app/pages/mobile/generate-shipments.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>ab503b96024d3112936f6dd7ebc50a5e3a78c703</commitId><timestamp>1790147862000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Generate shipments: picklist in Simple mode, id-less sort dialog, merchant cards as the only scope

Simple runs now also print one locator-sorted picklist server-side after the
shipment PDFs (fail-soft, third progress phase, digital picking defaults to the
same order). The picklist sort dialog used hard-coded input ids with label[for];
with the panel mounted twice (route + kept-alive top-bar modal) label clicks
landed on the other instance, so the radios could not be picked — now wrapping
labels with a per-instance radio name. printPDF resolves through the print
request so failures are catchable; the server-print toast recognises picklists.

The Advanced tab's old warehouse scope (Single/Selected/All, warehouse select,
warehouse cards) is removed on desktop and mobile: the merchant cards are the
single scope in both tabs, runs loop over the picked merchants' warehouses and
the sequential queue is restricted by their warehouse ids. Order-row hand-offs
(useGenerateShipments) preselect the merchant card and open Advanced with the
partner set. Top-bar quick link renamed to "Generate Shipments".
</comment><date>2026-09-23 09:17:42 +0200</date><id>ab503b96024d3112936f6dd7ebc50a5e3a78c703</id><msg>Generate shipments: picklist in Simple mode, id-less sort dialog, merchant cards as the only scope</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/sales/GenerateShipmentsPanel.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/generate-shipments.vue</file></path><path><editType>edit</editType><file>app/components/TopMegaBar.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/GenerateShipmentsPanel.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>e43d2a9bb5270df1b480977e3e6056e139679469</commitId><timestamp>1790150736000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Generate shipments (Simple tab): separate 'Print Shipments &amp; Picklist' and 'Print Picklist' buttons; picklist sort dialog defaults to locator
</comment><date>2026-09-23 10:05:36 +0200</date><id>e43d2a9bb5270df1b480977e3e6056e139679469</id><msg>Generate shipments (Simple tab): separate 'Print Shipments &amp; Picklist' and 'Print Picklist' buttons; picklist sort dialog defaults to locator</msg><path><editType>edit</editType><file>app/components/sales/GenerateShipmentsPanel.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/requests/my-tickets/index.vue</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/components/AttachmentModal.vue</affectedPath><commitId>e67f585bb5cee21944621662aaf324c7a83ea684</commitId><timestamp>1790150736000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>My tickets: paste / drag &amp; drop files into the chat composer uploads them as ticket attachments
</comment><date>2026-09-23 10:05:36 +0200</date><id>e67f585bb5cee21944621662aaf324c7a83ea684</id><msg>My tickets: paste / drag &amp; drop files into the chat composer uploads them as ticket attachments</msg><path><editType>edit</editType><file>app/pages/requests/my-tickets/index.vue</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/components/AttachmentModal.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>745</buildNumber><marked><SHA1>e8c7fd8e4778aacc2e5850afe4f018b87a3b763e</SHA1><branch><SHA1>e8c7fd8e4778aacc2e5850afe4f018b87a3b763e</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>e8c7fd8e4778aacc2e5850afe4f018b87a3b763e</SHA1><branch><SHA1>e8c7fd8e4778aacc2e5850afe4f018b87a3b763e</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>e8c7fd8e4778aacc2e5850afe4f018b87a3b763e</SHA1><branch><SHA1>e8c7fd8e4778aacc2e5850afe4f018b87a3b763e</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'></action><building>false</building><displayName>#745</displayName><duration>63351</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #745</fullDisplayName><id>745</id><inProgress>false</inProgress><keepLog>false</keepLog><number>745</number><queueId>5767</queueId><result>SUCCESS</result><timestamp>1790121600766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/745/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/AgGrid/Products/AgTrackingUnits.vue</affectedPath><affectedPath>app/composables/useReceiptTracking.ts</affectedPath><affectedPath>app/components/receive/TrackingCaptureModal.vue</affectedPath><affectedPath>app/pages/mobile/receive.vue</affectedPath><affectedPath>server/api/materials/products/[id]/tracking.post.ts</affectedPath><affectedPath>app/composables/menu/admin/materials.ts</affectedPath><affectedPath>server/utils/productsGrid.ts</affectedPath><affectedPath>server/utils/attributeTracking.ts</affectedPath><affectedPath>server/api/inouts/store.post.ts</affectedPath><affectedPath>server/api/materials/products/ag-grid/products.post.ts</affectedPath><affectedPath>app/components/materials/ProductUnitsPanel.vue</affectedPath><affectedPath>server/api/materials/products/ag-grid/products-v2.post.ts</affectedPath><affectedPath>app/components/AgGrid/Products/AgTrackingMode.vue</affectedPath><affectedPath>server/api/materials/tracking-overview.get.ts</affectedPath><affectedPath>app/pages/materials/products-v2/index.vue</affectedPath><affectedPath>app/pages/integrations/receive-desktop.vue</affectedPath><affectedPath>server/api/orders/[id]/order-line/index.get.ts</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><affectedPath>app/components/receive/TrackingEnableDialog.vue</affectedPath><affectedPath>reference/recipes.md</affectedPath><affectedPath>server/api/inouts/check-serials.post.ts</affectedPath><affectedPath>server/api/materials/products/[id]/units.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>server/api/mobile/product-lookup.post.ts</affectedPath><commitId>5297eb3c1feed3bb828a0ac35972b89c90c8f744</commitId><timestamp>1790067723000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Unit tracking on goods receipt: serial numbers and charges (lot + MHD) as iDempiere attribute set instances

Port of the blut24 ASI mechanics to the LogShip catalogue. Three attribute sets are created lazily by name
(LogShip Seriennummer / Charge / Seriennummer + Charge, all fields optional, FEFO via
UseGuaranteeDateForMPolicy); a product is tracked when its M_AttributeSet_ID points at one of them.

Server: attributeTracking.ts (set bootstrap + cache, ASI create/lookup, line expansion) hooked into
POST /api/inouts/store — a receive line may carry tracking { attributeSetId, serials[], charges[] } and is
expanded into one qty-1 line per serial, one line per charge (identical set/org/lot/MHD charges reused),
remainder untracked; serials already in stock are rejected with a 400 before anything is written. New
routes products/[id]/tracking (enable/switch/clear), products/[id]/units, materials/tracking-overview,
inouts/check-serials, ag-grid/products-v2 (grid body shared via productsGrid.ts); product-lookup and
orders/[id]/order-line return the tracking flags and C_UOM_ID.

Desktop receive: per-line tracking chip, enable dialog, capture modal with scan/paste input, CSV import
(serial;lot;mhd[;qty], header optional), several lot/MHD groups per position, in-stock serial warnings,
warn + confirm on incomplete capture. Mobile receive: serial scan mode (every scan = one serial until the
qty is reached), one lot/MHD per position via native inputs with the scanner-focus pause, mode picker,
incomplete-capture confirm; fixes the stray "On" before &lt;script setup&gt;. Staff-only products clone
/materials/products-v2 with Tracking + Einheiten columns and a units side panel; menu entries only in the
staff branches. Recipe added to reference/recipes.md.
</comment><date>2026-09-22 11:02:03 +0200</date><id>5297eb3c1feed3bb828a0ac35972b89c90c8f744</id><msg>Unit tracking on goods receipt: serial numbers and charges (lot + MHD) as iDempiere attribute set instances</msg><path><editType>add</editType><file>server/api/inouts/check-serials.post.ts</file></path><path><editType>add</editType><file>app/components/materials/ProductUnitsPanel.vue</file></path><path><editType>add</editType><file>app/components/AgGrid/Products/AgTrackingMode.vue</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/tracking.post.ts</file></path><path><editType>edit</editType><file>app/pages/integrations/receive-desktop.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/composables/menu/admin/materials.ts</file></path><path><editType>add</editType><file>server/api/materials/products/ag-grid/products-v2.post.ts</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>add</editType><file>app/pages/materials/products-v2/index.vue</file></path><path><editType>edit</editType><file>server/api/inouts/store.post.ts</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/units.get.ts</file></path><path><editType>edit</editType><file>server/api/mobile/product-lookup.post.ts</file></path><path><editType>edit</editType><file>server/api/orders/[id]/order-line/index.get.ts</file></path><path><editType>add</editType><file>server/utils/attributeTracking.ts</file></path><path><editType>add</editType><file>server/utils/productsGrid.ts</file></path><path><editType>add</editType><file>app/components/receive/TrackingEnableDialog.vue</file></path><path><editType>add</editType><file>server/api/materials/tracking-overview.get.ts</file></path><path><editType>add</editType><file>app/components/AgGrid/Products/AgTrackingUnits.vue</file></path><path><editType>add</editType><file>app/composables/useReceiptTracking.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/receive.vue</file></path><path><editType>edit</editType><file>server/api/materials/products/ag-grid/products.post.ts</file></path><path><editType>add</editType><file>app/components/receive/TrackingCaptureModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/materials/products/ag-grid/products-v2.post.ts</affectedPath><affectedPath>app/components/AgGrid/Products/AgTrackingMode.vue</affectedPath><affectedPath>app/composables/useReceiptTracking.ts</affectedPath><affectedPath>app/pages/mobile/receive.vue</affectedPath><affectedPath>app/pages/materials/products-v2/index.vue</affectedPath><affectedPath>server/api/materials/products/[id]/tracking.post.ts</affectedPath><affectedPath>app/components/receive/TrackingEnableDialog.vue</affectedPath><affectedPath>server/utils/attributeTracking.ts</affectedPath><affectedPath>reference/recipes.md</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>c466a90e190da1bede631c4e2904d390acfabf05</commitId><timestamp>1790069095000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Unit tracking: MHD-only mode (LogShip MHD attribute set, no lot)

Fourth lazily created set "LogShip MHD" (IsGuaranteeDate + FEFO, no IsLot) and mode 'mhd' across the
server util, tracking route, products-v2 filter, the composable (label, badge "MHD n/qty"), the desktop
enable dialog (mhd can be widened to charge or both), the mobile mode picker and the products-v2 mode
select; translation key tracking_mhd in all four locales. ensureTrackingSets re-resolves a cached map that
lacks a mode and the tracking route refuses to clear a product when the requested mode's set cannot be
resolved.
</comment><date>2026-09-22 11:24:55 +0200</date><id>c466a90e190da1bede631c4e2904d390acfabf05</id><msg>Unit tracking: MHD-only mode (LogShip MHD attribute set, no lot)</msg><path><editType>edit</editType><file>server/api/materials/products/[id]/tracking.post.ts</file></path><path><editType>edit</editType><file>app/components/AgGrid/Products/AgTrackingMode.vue</file></path><path><editType>edit</editType><file>app/composables/useReceiptTracking.ts</file></path><path><editType>edit</editType><file>server/utils/attributeTracking.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/receive/TrackingEnableDialog.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/receive.vue</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path><path><editType>edit</editType><file>app/pages/materials/products-v2/index.vue</file></path><path><editType>edit</editType><file>server/api/materials/products/ag-grid/products-v2.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/orders/openso-generation-queue.get.ts</affectedPath><affectedPath>app/components/sales/GenerateShipmentsPanel.vue</affectedPath><affectedPath>app/pages/mobile/generate-shipments.vue</affectedPath><affectedPath>app/composables/states.ts</affectedPath><affectedPath>app/components/TopMegaBar.vue</affectedPath><affectedPath>app/pages/generate-shipments.vue</affectedPath><affectedPath>server/api/orders/openso-count-by-warehouse.get.ts</affectedPath><affectedPath>app/components/sales/GenerateShipmentsModal.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>afa845908e73499e48e0a4c62dde34934b0c8795</commitId><timestamp>1790070846000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Generate shipments: Simple/Advanced tabs with merchant cards, admin top-bar modal, mobile parity

Simple mode (default) shows one card per merchant (org) with the fulfillable / open
order counts from the dashboard universe (openso-count-by-warehouse now also returns
`fulfillable` per warehouse/org via the same stock rule as unfulfillable-count). All
merchants are in scope by default, cards can be picked to narrow the run; one button
generates for the merchants' warehouses with plain defaults and prints every shipment
right away. Advanced keeps the full parameter form; the merchant cards act as an org
filter for the selected/all warehouse scopes and the sequential queue (new `orgIds`).

The page body moved to components/sales/GenerateShipmentsPanel.vue so the admin
quick link in TopMegaBar can open it in a big modal (GenerateShipmentsModal.vue,
kept alive across closes). Runs set a shared busy flag: the modal asks before
closing, the page guards route leave, both warn on unload; keep-open notices show
on the Advanced tab when a queue-driven filter is on and while any run is going.
Mobile generate-shipments gets the same Simple/Advanced split and merchant cards.
</comment><date>2026-09-22 11:54:06 +0200</date><id>afa845908e73499e48e0a4c62dde34934b0c8795</id><msg>Generate shipments: Simple/Advanced tabs with merchant cards, admin top-bar modal, mobile parity</msg><path><editType>edit</editType><file>app/pages/generate-shipments.vue</file></path><path><editType>edit</editType><file>server/api/orders/openso-count-by-warehouse.get.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/composables/states.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/generate-shipments.vue</file></path><path><editType>add</editType><file>app/components/sales/GenerateShipmentsModal.vue</file></path><path><editType>edit</editType><file>app/components/TopMegaBar.vue</file></path><path><editType>add</editType><file>app/components/sales/GenerateShipmentsPanel.vue</file></path><path><editType>edit</editType><file>server/api/orders/openso-generation-queue.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/TopMegaBar.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>e8c7fd8e4778aacc2e5850afe4f018b87a3b763e</commitId><timestamp>1790073768000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Top bar: admin shortcuts (Shipments modal + Commission page) moved left of the Ticket/Order quick buttons
</comment><date>2026-09-22 12:42:48 +0200</date><id>e8c7fd8e4778aacc2e5850afe4f018b87a3b763e</id><msg>Top bar: admin shortcuts (Shipments modal + Commission page) moved left of the Ticket/Order quick buttons</msg><path><editType>edit</editType><file>app/components/TopMegaBar.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>744</buildNumber><marked><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</SHA1><branch><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</SHA1><branch><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</SHA1><branch><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</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'></action><building>false</building><displayName>#744</displayName><duration>62909</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #744</fullDisplayName><id>744</id><inProgress>false</inProgress><keepLog>false</keepLog><number>744</number><queueId>5761</queueId><result>SUCCESS</result><timestamp>1790035200765</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/744/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>743</buildNumber><marked><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</SHA1><branch><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</SHA1><branch><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</SHA1><branch><SHA1>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</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'></action><building>false</building><displayName>#743</displayName><duration>67622</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #743</fullDisplayName><id>743</id><inProgress>false</inProgress><keepLog>false</keepLog><number>743</number><queueId>5760</queueId><result>SUCCESS</result><timestamp>1789948800765</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/743/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/inbox/inboxDb.ts</affectedPath><affectedPath>app/pages/accounting/incoming-invoices/index.vue</affectedPath><affectedPath>app/components/DateInputDe.vue</affectedPath><affectedPath>server/utils/inbox/processDocument.ts</affectedPath><affectedPath>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</affectedPath><affectedPath>app/components/accounting/inbox/InboxList.vue</affectedPath><affectedPath>server/api/accounting/incoming-invoices/[id]/defaults.get.ts</affectedPath><affectedPath>server/utils/inbox/extractPipeline.ts</affectedPath><affectedPath>app/utils/inboxTaxRate.ts</affectedPath><affectedPath>app/components/accounting/inbox/InvoiceReview.vue</affectedPath><affectedPath>server/utils/inbox/vendorDefaults.ts</affectedPath><affectedPath>server/utils/inbox/layoutFingerprint.ts</affectedPath><affectedPath>server/api/accounting/incoming-invoices/match-vendor.get.ts</affectedPath><affectedPath>server/utils/inbox/vendorProfile.ts</affectedPath><affectedPath>server/utils/bankReconciliationSuggestions.ts</affectedPath><affectedPath>server/utils/inbox/fieldExtractors.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>e5fb5e19ca99490429a576155ff11950f17eb139</commitId><timestamp>1789891865000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Incoming invoices: searchable vendor picker, amount-based tax detection, learning that actually applies

Review screen
- vendor picker is a real searchable selection (remembered -&gt; scored candidates -&gt; all vendors of
  the org + org *); "use existing" is never disabled; same-named partners show VAT id / id
- vendor matching scored in Node (VAT id, fuzzy name, partner name tokens on the letterhead,
  e-mail domain) instead of contains(Name, &lt;letterhead line&gt;); own organization is never suggested;
  non-vendor partners are offered and flagged IsVendor on confirm
- learned defaults are resolved LIVE (new GET .../[id]/defaults): document fingerprint -&gt; VAT id /
  IBAN -&gt; layout tokens -&gt; profiles of the selected partner -&gt; the partner's last AP invoice;
  re-resolved when another partner is picked, manually changed fields are never overwritten.
  Fixes: e-invoices never got their profile, documents uploaded before the first confirmation
  never saw it, vat:/layout: key mismatch
- doc type / currency / tax are never empty (document currency, 381 -&gt; AP credit memo, generic
  fallbacks); new cost type (charge) field, learned per vendor
- tax rate: only an e-invoice breakdown is authoritative, otherwise the amounts decide
  (gross == net -&gt; 0 %); no more invented "19 % detected"; warning only when the rate is certain;
  a contradicting tax amount (misread year) is replaced; learned tax preferred among same-rate taxes
- dates shown and entered as dd.mm.yyyy (new DateInputDe), vendor match no longer blocks the page

Confirm
- gross == net means no VAT (a bogus tax amount no longer yields an 810 % rate); the chosen tax is
  kept when its RATE fits instead of being replaced by the first tax of that rate
- learns the EFFECTIVE doc type / currency, and VAT id / IBAN / partner name also in reuse mode
- new vendor address: country from the e-invoice ISO code, else the default country

Extraction
- no guessed tax rate; rate only next to a tax label or when consistent with the amounts;
  section 19 UStG / reverse charge / intra-community phrases -&gt; 0 %; "Steuernummer"/"Tax ID" are
  no tax amounts
- tier 0 (ZUGFeRD/XRechnung) gets a layout signature too; signature tokens extended by file-name
  pattern and e-invoice XMP markers (fuzzy tokens only - learned layout hashes keep matching)
- sha256 file signature + duplicate-upload badge in list and review

Inbox list
- list view and the "ready to review" filter are the default
- action icons sit in fixed slots, a missing action leaves its slot empty
- period filter uses dd.mm.yyyy
</comment><date>2026-09-20 10:11:05 +0200</date><id>e5fb5e19ca99490429a576155ff11950f17eb139</id><msg>Incoming invoices: searchable vendor picker, amount-based tax detection, learning that actually applies</msg><path><editType>add</editType><file>server/utils/inbox/vendorDefaults.ts</file></path><path><editType>add</editType><file>app/utils/inboxTaxRate.ts</file></path><path><editType>edit</editType><file>server/utils/inbox/inboxDb.ts</file></path><path><editType>edit</editType><file>server/utils/inbox/processDocument.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/utils/bankReconciliationSuggestions.ts</file></path><path><editType>edit</editType><file>app/pages/accounting/incoming-invoices/index.vue</file></path><path><editType>edit</editType><file>server/utils/inbox/extractPipeline.ts</file></path><path><editType>edit</editType><file>server/utils/inbox/fieldExtractors.ts</file></path><path><editType>edit</editType><file>server/utils/inbox/layoutFingerprint.ts</file></path><path><editType>edit</editType><file>server/utils/inbox/vendorProfile.ts</file></path><path><editType>add</editType><file>server/api/accounting/incoming-invoices/[id]/defaults.get.ts</file></path><path><editType>edit</editType><file>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</file></path><path><editType>edit</editType><file>server/api/accounting/incoming-invoices/match-vendor.get.ts</file></path><path><editType>add</editType><file>app/components/DateInputDe.vue</file></path><path><editType>edit</editType><file>app/components/accounting/inbox/InvoiceReview.vue</file></path><path><editType>edit</editType><file>app/components/accounting/inbox/InboxList.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/incoming-invoices/next-review.get.ts</affectedPath><affectedPath>app/composables/useInboxBookedToast.ts</affectedPath><affectedPath>app/pages/accounting/incoming-invoices/index.vue</affectedPath><affectedPath>app/components/accounting/inbox/InboxList.vue</affectedPath><affectedPath>app/composables/states.ts</affectedPath><affectedPath>app/components/SelectBox.vue</affectedPath><affectedPath>app/components/accounting/inbox/InvoiceReview.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>10b0c575f7a675c2b8f21559877718a2f9bc874f</commitId><timestamp>1789893719000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Incoming invoices review: Nuxt UI selects, complete &amp; next / back, review browsing, booked toast + animated counts

- review screen no longer uses tedir-select / ComboBox: doc type, currency, tax, cost type and the
  vendor picker run on the global SelectBox wrapper (USelectMenu); vendor options show VAT id /
  partner id as searchable subtext, cost type is clearable; triggers aligned with the Bulma inputs
- SelectBox wrapper: opt-in filterProps (search more than the label) and virtualize
- two booking buttons: "Complete &amp; Back" (return to the inbox) and "Complete &amp; Next" (rightmost,
  continues with the next document waiting for review; falls back to the inbox when none is left);
  reject is an icon button so the bar stays on one row
- browsing bar on top of the review (inbox / previous / position / next) - pure navigation, nothing
  is saved; new GET next-review returns the open ids in inbox order + the next id
- after booking the inbox shows a success toast (warning toast when completion failed / booked
  net) with an "open invoice" action; shared useInboxBookedToast, hand-off via useInboxJustBooked
- inbox status chips tween their counts and pulse with a floating +1 / -1 on every change
  (upload -&gt; processing -&gt; ready to review -&gt; booked); the kept-alive inbox now refetches on
  re-activation; the just-booked row flashes; prefers-reduced-motion respected
</comment><date>2026-09-20 10:41:59 +0200</date><id>10b0c575f7a675c2b8f21559877718a2f9bc874f</id><msg>Incoming invoices review: Nuxt UI selects, complete &amp; next / back, review browsing, booked toast + animated counts</msg><path><editType>edit</editType><file>app/pages/accounting/incoming-invoices/index.vue</file></path><path><editType>add</editType><file>app/composables/useInboxBookedToast.ts</file></path><path><editType>edit</editType><file>app/components/accounting/inbox/InvoiceReview.vue</file></path><path><editType>edit</editType><file>app/components/SelectBox.vue</file></path><path><editType>edit</editType><file>app/composables/states.ts</file></path><path><editType>edit</editType><file>app/components/accounting/inbox/InboxList.vue</file></path><path><editType>add</editType><file>server/api/accounting/incoming-invoices/next-review.get.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/incoming-invoices/index.vue</affectedPath><affectedPath>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</affectedPath><affectedPath>server/utils/inbox/vendorProfile.ts</affectedPath><affectedPath>app/utils/inboxVendor.ts</affectedPath><affectedPath>app/components/accounting/inbox/InboxList.vue</affectedPath><affectedPath>app/composables/states.ts</affectedPath><affectedPath>server/utils/inbox/extractPipeline.ts</affectedPath><affectedPath>app/utils/inboxTaxRate.ts</affectedPath><affectedPath>app/components/accounting/inbox/InvoiceReview.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>285b6c4dd798b3b06091c9a7012d476762217e0a</commitId><timestamp>1789896144000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Incoming invoices: vendor filter / sort / grouping with review working set, meaningful confidence score, amount reconciliation

Inbox list
- vendor facet filter with counts (same vendor = first segment of the letterhead line, ignoring
  case / punctuation / legal form; a learned profile name wins), sort select (last uploaded,
  invoice date, vendor, amount, recognition %) with direction, group-by-vendor headers
- default = no vendor filter, no grouping, last uploaded on top; sort/group are not remembered
  across visits; rows show the short vendor label
- opening a review from a filtered / re-sorted list stores that result set as the WORKING SET
  (useInboxReviewQueue + sessionStorage): the review's previous / next, the position counter and
  "complete &amp; next" walk exactly that set in that order; a chip shows it and clears it; booked
  documents leave the set, an exhausted set returns to the inbox

Confidence badge
- was a plain average over ALL stored confidences, including internal helper keys with fixed
  heuristic values (currency 0.6, taxBasisTotal 0.5, taxes, isTaxIncluded 0.7) - a perfectly read
  document could not get past ~85-90 %. Now weighted over the fields a reviewer checks (number,
  date, vendor, net / tax / gross); amounts that add up are trusted, amounts that do not pull the
  score down, a missing key field counts as zero

Amounts
- net + tax must equal gross: when a value read from a LEARNED position breaks that (totals block
  floats with the number of line items - easybell: the "Netto" box landed on the VAT line and
  read 3,29 instead of 17,29 with confidence 1.0), the label-based reading is used or the odd one
  out is derived; done in the pipeline for new uploads and in the review for stored documents;
  hint under the totals when the amounts really do not add up
- such a position is forgotten on confirm and not learned again for the vendor (hint.floating);
  re-drawing the box by hand re-enables it
- learned regions yield the VALUE, not label + value: VAT id / IBAN by pattern
  ("USTIDDE249984363" -&gt; DE249984363, "IBAN:DE35..." -&gt; DE35...), money = last amount token
</comment><date>2026-09-20 11:22:24 +0200</date><id>285b6c4dd798b3b06091c9a7012d476762217e0a</id><msg>Incoming invoices: vendor filter / sort / grouping with review working set, meaningful confidence score, amount reconciliation</msg><path><editType>edit</editType><file>app/composables/states.ts</file></path><path><editType>edit</editType><file>app/utils/inboxTaxRate.ts</file></path><path><editType>edit</editType><file>server/utils/inbox/extractPipeline.ts</file></path><path><editType>add</editType><file>app/utils/inboxVendor.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/accounting/inbox/InboxList.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/components/accounting/inbox/InvoiceReview.vue</file></path><path><editType>edit</editType><file>server/utils/inbox/vendorProfile.ts</file></path><path><editType>edit</editType><file>app/pages/accounting/incoming-invoices/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/recipes.md</affectedPath><commitId>33a4d37b433bc59301ed746093ec6b7216ee91d0</commitId><timestamp>1789896422000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Recipes: incoming invoices inbox — live learned defaults, vendor matching, tax/amount rules, review flow, testing without booking
</comment><date>2026-09-20 11:27:02 +0200</date><id>33a4d37b433bc59301ed746093ec6b7216ee91d0</id><msg>Recipes: incoming invoices inbox — live learned defaults, vendor matching, tax/amount rules, review flow, testing without booking</msg><path><editType>edit</editType><file>reference/recipes.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/banking/camt052Parser.ts</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>package-lock.json</affectedPath><affectedPath>app/components/accounting/banking/BankFileImportModal.vue</affectedPath><affectedPath>app/components/accounting/banking/BankImportTab.vue</affectedPath><affectedPath>package.json</affectedPath><affectedPath>server/utils/banking/bankFileImport.ts</affectedPath><affectedPath>server/api/accounting/bank-file-import/import.post.ts</affectedPath><affectedPath>app/pages/accounting/banking/index.vue</affectedPath><affectedPath>server/api/accounting/bank-file-import/preview.post.ts</affectedPath><affectedPath>server/api/accounting/bank-reconciliation/statements.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>ae5839cc12876467da2bc3b4c76a80a5fdda2f70</commitId><timestamp>1789902433000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Banking: manual CAMT.052 file import for periods before EBICS

Adds "Datei importieren (CAMT.052)" to the Import tab of /accounting/banking:
upload the online-banking export (ZIP or XML) -&gt; dry-run preview -&gt; chunked
import with progress. Nuxt-only, no Laravel staging: statements are created
Drafted directly in iDempiere and appear in step 2 (reconcile).

- camt052Parser: fflate + fast-xml-parser, ISO-8859-1 aware, camt.052/053 in
  any .001.xx version; unpacks ZIPs completely (sub-folders, nested ZIPs,
  extension-less XML, macOS resource forks ignored). The Volksbank export is
  ONE report paginated over the whole period, so entries are split into one
  statement per booking day with a derived balance chain (verified against the
  daily closings of the MT940 export of the same period).
- bankFileImport: duplicate detection by the bank reference (AcctSvcrRef &lt;-&gt;
  C_BankStatementLine.EftTrxID, the column the EBICS import fills), fallback
  date+amount+memo multiset; foreign same-day statements are never modified
  (conflict), own Drafted ones are resumed; balance-chain check against existing
  iDempiere statements; plan recomputed live before every write.
- Routes accounting/bank-file-import/{preview,import}; parsed uploads parked in
  data/bank-file-import (git-ignored, 24 h), originals archived on import.
- Reconcile statements list: $top 100 -&gt; 500 (history imports).
- fast-xml-parser declared as a direct dependency (was optional transitive).
- MT940 / CSV / PDF deliberately unsupported (MT940 discontinued by DK 11/2025).
- Translations banking_file_* (en/de/es); sample bank exports git-ignored.
</comment><date>2026-09-20 13:07:13 +0200</date><id>ae5839cc12876467da2bc3b4c76a80a5fdda2f70</id><msg>Banking: manual CAMT.052 file import for periods before EBICS</msg><path><editType>edit</editType><file>app/components/accounting/banking/BankImportTab.vue</file></path><path><editType>edit</editType><file>server/api/accounting/bank-reconciliation/statements.get.ts</file></path><path><editType>edit</editType><file>package.json</file></path><path><editType>edit</editType><file>package-lock.json</file></path><path><editType>add</editType><file>server/api/accounting/bank-file-import/preview.post.ts</file></path><path><editType>add</editType><file>app/components/accounting/banking/BankFileImportModal.vue</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>edit</editType><file>app/pages/accounting/banking/index.vue</file></path><path><editType>add</editType><file>server/utils/banking/bankFileImport.ts</file></path><path><editType>add</editType><file>server/utils/banking/camt052Parser.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/api/accounting/bank-file-import/import.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>1c1bdadaece0a9a3cc7e3814ae7a17e6c915f739</commitId><timestamp>1789903987000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page: keep Angebot + Vertrag visible, move the rest into a "Mehr" menu

The hero CTA row showed six coloured buttons. Only Angebot and Vertrag stay
visible; a "Mehr" dropdown on the right holds Fragebogen, Prognose, SEPA and
Onboarding (in that order, each with its icon/colour). Closes on outside
click, Escape and after picking an entry; full-width under the buttons on
small screens. The compact icon toolbar at the top is unchanged.
</comment><date>2026-09-20 13:33:07 +0200</date><id>1c1bdadaece0a9a3cc7e3814ae7a17e6c915f739</id><msg>Lead page: keep Angebot + Vertrag visible, move the rest into a "Mehr" menu</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/generate-shipments.vue</affectedPath><affectedPath>app/pages/integrations/picklist-desktop.vue</affectedPath><affectedPath>app/utils/picklistPdf.ts</affectedPath><affectedPath>app/pages/mobile/generate-shipments.vue</affectedPath><affectedPath>app/pages/mobile/picklist.vue</affectedPath><affectedPath>app/composables/usePicklistPdf.ts</affectedPath><commitId>2ac713011b72609ee4c067905a6f7bf9bb0f10f9</commitId><timestamp>1789922611000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Picklist report: larger type, ~double row height, bordered X/Y/Z locator chips, bold qty — one shared layout for normal, reprint, desktop and mobile
</comment><date>2026-09-20 18:43:31 +0200</date><id>2ac713011b72609ee4c067905a6f7bf9bb0f10f9</id><msg>Picklist report: larger type, ~double row height, bordered X/Y/Z locator chips, bold qty — one shared layout for normal, reprint, desktop and mobile</msg><path><editType>edit</editType><file>app/pages/generate-shipments.vue</file></path><path><editType>add</editType><file>app/utils/picklistPdf.ts</file></path><path><editType>edit</editType><file>app/pages/integrations/picklist-desktop.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/generate-shipments.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/picklist.vue</file></path><path><editType>edit</editType><file>app/composables/usePicklistPdf.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/assets/css/fonts.css</affectedPath><affectedPath>app/components/NewBreadCrumb.vue</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/components/dashboard/TerminalGreeting.vue</affectedPath><affectedPath>public/fonts/vt323-regular.woff2</affectedPath><commitId>fd3f01982dcc34d670b3373940f185198e8fd139</commitId><timestamp>1789926482000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard: WarGames-style terminal greeting (time-of-day salutation + user name, VT323, type-in + blinking cursor) for admin roles, aligned with the first card
</comment><date>2026-09-20 19:48:02 +0200</date><id>fd3f01982dcc34d670b3373940f185198e8fd139</id><msg>Dashboard: WarGames-style terminal greeting (time-of-day salutation + user name, VT323, type-in + blinking cursor) for admin roles, aligned with the first card</msg><path><editType>edit</editType><file>app/assets/css/fonts.css</file></path><path><editType>edit</editType><file>app/components/NewBreadCrumb.vue</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>add</editType><file>public/fonts/vt323-regular.woff2</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>add</editType><file>app/components/dashboard/TerminalGreeting.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/TerminalGreeting.vue</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>server/api/idempiere-auth/session-key.get.ts</affectedPath><commitId>3cc7c5852471fdc5dab977c1a3168b3311d2a79b</commitId><timestamp>1789926710000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard greeting: for all roles, no background, animation once per login (type-in + 10 s cursor, then static)
</comment><date>2026-09-20 19:51:50 +0200</date><id>3cc7c5852471fdc5dab977c1a3168b3311d2a79b</id><msg>Dashboard greeting: for all roles, no background, animation once per login (type-in + 10 s cursor, then static)</msg><path><editType>edit</editType><file>app/components/dashboard/TerminalGreeting.vue</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>add</editType><file>server/api/idempiere-auth/session-key.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/TerminalGreeting.vue</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>ec04cbef07291cc963ea8a6bf90d032d9ee5a286</commitId><timestamp>1789928205000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard greeting: salutation in the app language (en/de/es/ne), breadcrumb trail hidden on mobile
</comment><date>2026-09-20 20:16:45 +0200</date><id>ec04cbef07291cc963ea8a6bf90d032d9ee5a286</id><msg>Dashboard greeting: salutation in the app language (en/de/es/ne), breadcrumb trail hidden on mobile</msg><path><editType>edit</editType><file>app/components/dashboard/TerminalGreeting.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/partners/partners/create.vue</affectedPath><affectedPath>app/pages/partners/partners/[id]/view.vue</affectedPath><affectedPath>app/pages/partners/partners/[id]/edit.vue</affectedPath><affectedPath>app/components/partners/PartnerForm.vue</affectedPath><affectedPath>app/utils/pickCode.ts</affectedPath><affectedPath>server/api/partners/partners/store.post.ts</affectedPath><affectedPath>server/utils/pickIdentifier.ts</affectedPath><affectedPath>server/api/partners/partners/update.put.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>bf39545a21ccb81dd95647742beae472333d64ed</commitId><timestamp>1789941163000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Business partner: Pick Code identifier (C_BPartner.PickProductIdentifier) — Nuxt UI select on the Fulfillment Customer tab, create/edit/view + store/update routes, shared pick-code resolver
</comment><date>2026-09-20 23:52:43 +0200</date><id>bf39545a21ccb81dd95647742beae472333d64ed</id><msg>Business partner: Pick Code identifier (C_BPartner.PickProductIdentifier) — Nuxt UI select on the Fulfillment Customer tab, create/edit/view + store/update routes, shared pick-code resolver</msg><path><editType>add</editType><file>server/utils/pickIdentifier.ts</file></path><path><editType>edit</editType><file>app/pages/partners/partners/create.vue</file></path><path><editType>edit</editType><file>app/pages/partners/partners/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/partners/partners/[id]/view.vue</file></path><path><editType>edit</editType><file>app/components/partners/PartnerForm.vue</file></path><path><editType>edit</editType><file>server/api/partners/partners/store.post.ts</file></path><path><editType>add</editType><file>app/utils/pickCode.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/api/partners/partners/update.put.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/generate-shipments.vue</affectedPath><affectedPath>app/pages/integrations/picklist-desktop.vue</affectedPath><affectedPath>server/api/processes/inouts/[id]/index.get.ts</affectedPath><affectedPath>app/utils/picklistPdf.ts</affectedPath><affectedPath>app/pages/mobile/picklist.vue</affectedPath><affectedPath>app/pages/mobile/generate-shipments.vue</affectedPath><commitId>248df14cced048bc3f6139214a8684929db8e0aa</commitId><timestamp>1789941163000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Picklists: merchant pick code — lines carry the org partner's identifier; PDF gets Org / Locator / Qty / Pick Code / Name order with a large pick code, whitespace-only org wrapping and smaller reference columns; digital lists highlight the partner code first, product PickListCode as fallback
</comment><date>2026-09-20 23:52:43 +0200</date><id>248df14cced048bc3f6139214a8684929db8e0aa</id><msg>Picklists: merchant pick code — lines carry the org partner's identifier; PDF gets Org / Locator / Qty / Pick Code / Name order with a large pick code, whitespace-only org wrapping and smaller reference columns; digital lists highlight the partner code first, product PickListCode as fallback</msg><path><editType>edit</editType><file>app/pages/generate-shipments.vue</file></path><path><editType>edit</editType><file>server/api/processes/inouts/[id]/index.get.ts</file></path><path><editType>edit</editType><file>app/pages/integrations/picklist-desktop.vue</file></path><path><editType>edit</editType><file>app/utils/picklistPdf.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/picklist.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/generate-shipments.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/AgGrid.vue</affectedPath><affectedPath>server/api/admin/users/leads.get.ts</affectedPath><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</commitId><timestamp>1789941438000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads list: search + column filters, offer/contract filters, created / last activity / offer / contract columns (German dates), URL opens in a new tab; newest-first default kept
</comment><date>2026-09-20 23:57:18 +0200</date><id>07e934be183c1c9f644eaf4b8cb261be0c1f9e73</id><msg>Leads list: search + column filters, offer/contract filters, created / last activity / offer / contract columns (German dates), URL opens in a new tab; newest-first default kept</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/AgGrid.vue</file></path><path><editType>edit</editType><file>server/api/admin/users/leads.get.ts</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>742</buildNumber><marked><SHA1>d0ae4e82b82038412eb73af75cb71746925bfafa</SHA1><branch><SHA1>d0ae4e82b82038412eb73af75cb71746925bfafa</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>d0ae4e82b82038412eb73af75cb71746925bfafa</SHA1><branch><SHA1>d0ae4e82b82038412eb73af75cb71746925bfafa</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>d0ae4e82b82038412eb73af75cb71746925bfafa</SHA1><branch><SHA1>d0ae4e82b82038412eb73af75cb71746925bfafa</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'></action><building>false</building><displayName>#742</displayName><duration>63677</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #742</fullDisplayName><id>742</id><inProgress>false</inProgress><keepLog>false</keepLog><number>742</number><queueId>5749</queueId><result>SUCCESS</result><timestamp>1789862400765</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/742/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-ads-invoices/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>a3275d9757610a69547bda43c1d01fe2882191f5</commitId><timestamp>1789846558000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon invoices: reordered grid with fixed widths, traffic-light document/payment columns, icon-only actions
</comment><date>2026-09-19 21:35:58 +0200</date><id>a3275d9757610a69547bda43c1d01fe2882191f5</id><msg>Amazon invoices: reordered grid with fixed widths, traffic-light document/payment columns, icon-only actions</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/accounting/amazon-ads-invoices/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/admin/users/leads/latest.get.ts</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><commitId>766399814a87faaba42454922c9ae2aafe6db1ab</commitId><timestamp>1789846558000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile dashboard: latest leads card for admins (tap to call, mail, open lead); app 1.0.53
</comment><date>2026-09-19 21:35:58 +0200</date><id>766399814a87faaba42454922c9ae2aafe6db1ab</id><msg>Mobile dashboard: latest leads card for admins (tap to call, mail, open lead); app 1.0.53</msg><path><editType>edit</editType><file>server/api/admin/users/leads/latest.get.ts</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-ads-invoices/index.vue</affectedPath><commitId>d0ae4e82b82038412eb73af75cb71746925bfafa</commitId><timestamp>1789847834000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon invoices: colour-only document/payment/Lexoffice indicators, country flag, date as first column
</comment><date>2026-09-19 21:57:14 +0200</date><id>d0ae4e82b82038412eb73af75cb71746925bfafa</id><msg>Amazon invoices: colour-only document/payment/Lexoffice indicators, country flag, date as first column</msg><path><editType>edit</editType><file>app/pages/accounting/amazon-ads-invoices/index.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>741</buildNumber><marked><SHA1>cc0ff592b5ae3cc181da2058102242fd926336b5</SHA1><branch><SHA1>cc0ff592b5ae3cc181da2058102242fd926336b5</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>cc0ff592b5ae3cc181da2058102242fd926336b5</SHA1><branch><SHA1>cc0ff592b5ae3cc181da2058102242fd926336b5</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>cc0ff592b5ae3cc181da2058102242fd926336b5</SHA1><branch><SHA1>cc0ff592b5ae3cc181da2058102242fd926336b5</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'></action><building>false</building><displayName>#741</displayName><duration>70605</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #741</fullDisplayName><id>741</id><inProgress>false</inProgress><keepLog>false</keepLog><number>741</number><queueId>5746</queueId><result>SUCCESS</result><timestamp>1789776000766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/741/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/amazonAds/importInvoice.ts</affectedPath><affectedPath>server/utils/amazonAds/adsApi.ts</affectedPath><affectedPath>server/utils/amazonAds/parseInvoicePdf.ts</affectedPath><affectedPath>server/api/accounting/amazon-ads/import.post.ts</affectedPath><affectedPath>reference/test-scripts/amazon-fee-parse.mjs</affectedPath><affectedPath>app/pages/accounting/amazon-ads-invoices/index.vue</affectedPath><affectedPath>server/utils/amazonAds/types.ts</affectedPath><affectedPath>server/api/accounting/amazon-ads/invoices.get.ts</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>server/api/accounting/amazon-ads/upload.post.ts</affectedPath><affectedPath>server/api/accounting/amazon-ads/status.get.ts</affectedPath><affectedPath>server/utils/amazonAds/parseSellerFeeInvoicePdf.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>9e5d44b9cb79373965ffd173001cf1268e6d3889</commitId><timestamp>1789723068000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon invoices: book seller fee invoices (Tax Document Library PDFs) next to Ads invoices

Amazon offers no API for the seller fee invoices in Europe (the SP-API Invoices
API is Brazil-only, no report type covers them), so the PDFs downloaded from
Seller Central are dropped on the existing Amazon invoices page.

- parseSellerFeeInvoicePdf.ts: text-layer parser (kind 'fee'), one line per fee
  type with its own VAT rate; runs before the Ads parser in the upload route
- vendor resolved by the issuer's VAT id, created under org * on first import
- own charge (AMAZON_FEE_CHARGE_ID, default 1000009 "Amazon Gebühren"), tax per
  line rate; credit notes are listed but not importable yet
- list route checks bookings across the Ads vendor and all fee vendors
- page: Type / Aussteller / Empfänger columns, second charge selector
</comment><date>2026-09-18 11:17:48 +0200</date><id>9e5d44b9cb79373965ffd173001cf1268e6d3889</id><msg>Amazon invoices: book seller fee invoices (Tax Document Library PDFs) next to Ads invoices</msg><path><editType>edit</editType><file>server/api/accounting/amazon-ads/status.get.ts</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/utils/amazonAds/types.ts</file></path><path><editType>edit</editType><file>server/api/accounting/amazon-ads/invoices.get.ts</file></path><path><editType>edit</editType><file>app/pages/accounting/amazon-ads-invoices/index.vue</file></path><path><editType>edit</editType><file>server/api/accounting/amazon-ads/import.post.ts</file></path><path><editType>edit</editType><file>server/utils/amazonAds/adsApi.ts</file></path><path><editType>add</editType><file>reference/test-scripts/amazon-fee-parse.mjs</file></path><path><editType>edit</editType><file>server/api/accounting/amazon-ads/upload.post.ts</file></path><path><editType>add</editType><file>server/utils/amazonAds/parseSellerFeeInvoicePdf.ts</file></path><path><editType>edit</editType><file>server/utils/amazonAds/importInvoice.ts</file></path><path><editType>edit</editType><file>server/utils/amazonAds/parseInvoicePdf.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/offers/conditions/index.post.ts</affectedPath><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>app/pages/partners/partners/[id]/edit.vue</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>server/utils/offers/quoteConfirmation.ts</affectedPath><affectedPath>app/components/offers/ForecastModal.vue</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>server/utils/offers/forecastPdf.ts</affectedPath><affectedPath>server/api/offers/forecast/preview.post.ts</affectedPath><affectedPath>server/utils/offers/offerConditions.ts</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>server/api/offers/quote/send.post.ts</affectedPath><affectedPath>server/api/offers/forecast/send.post.ts</affectedPath><affectedPath>app/composables/useOfferForecast.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>08ca7d5f074a1d4399860ffe4859350839a41e06</commitId><timestamp>1789726519000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Offers: custom forecast modal (scenarios, editable positions, PDF/send) + editable quote validity

Custom forecast ("Individuelle Prognose"): standalone cost forecast for leads and
partners, opened from a new "Prognose" button on both pages and from the quote
modal's forecast card (seeded from the live quote form). Seeds from the saved
custom forecast, else the saved quote conditions, else list prices. Every
position can be switched off, relabelled and re-priced (per order with factor or
% share, or per month), own positions added, up to 4 volume scenarios side by
side (3+ print landscape), display toggles for calculation column, unit prices,
subtotals, cost per order, yearly total and disclaimer. Save as draft
(offer_conditions.forecast), download, or e-mail with record attachment and
activity. Client computes, server only renders.

Quote validity: "Gültig (Tage)" and "Gültig bis" pair in the quote modal, default
7 days from now. One server resolver (resolveQuoteValidity) drives the PDF, the
e-mail text, the activity, the saved conditions and the confirmation link expiry.
</comment><date>2026-09-18 12:15:19 +0200</date><id>08ca7d5f074a1d4399860ffe4859350839a41e06</id><msg>Offers: custom forecast modal (scenarios, editable positions, PDF/send) + editable quote validity</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>edit</editType><file>server/api/offers/quote/send.post.ts</file></path><path><editType>edit</editType><file>app/pages/partners/partners/[id]/edit.vue</file></path><path><editType>add</editType><file>server/api/offers/forecast/send.post.ts</file></path><path><editType>add</editType><file>app/composables/useOfferForecast.ts</file></path><path><editType>edit</editType><file>server/utils/offers/offerConditions.ts</file></path><path><editType>add</editType><file>app/components/offers/ForecastModal.vue</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>add</editType><file>server/utils/offers/forecastPdf.ts</file></path><path><editType>add</editType><file>server/api/offers/forecast/preview.post.ts</file></path><path><editType>edit</editType><file>server/utils/offers/quoteConfirmation.ts</file></path><path><editType>edit</editType><file>server/api/offers/conditions/index.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/amazon-ads/booking.get.ts</affectedPath><affectedPath>app/pages/accounting/amazon-ads-invoices/index.vue</affectedPath><affectedPath>server/utils/amazonAds/importInvoice.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>server/api/accounting/amazon-ads/invoices.get.ts</affectedPath><commitId>7c40ce743ed6563a2b58c00f358be5d811025e38</commitId><timestamp>1789729923000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon invoices: document details, paid vs created status, Lexoffice reset, pinned actions

- "Beleg in" column (org · vendor) + details dialog per created AP invoice
  (new booking.get.ts: header, payment/Lexoffice state, lines with charge + tax)
- status no longer says "Verbucht" for a merely created document: "Beleg erstellt
  · Zahlung offen" until iDempiere has the invoice allocated to a payment
  (IsPaid) → "Bezahlt"; separate counters
- Lexoffice reset for selected rows and from the details dialog (shared
  /api/invoices/lexoffice-reset), with a confirm that the voucher in Lexoffice
  is not deleted
- actions column pinned right, status/document columns moved left, API notice
  collapsed by default, PDF icon fixed (ti-pdf)
</comment><date>2026-09-18 13:12:03 +0200</date><id>7c40ce743ed6563a2b58c00f358be5d811025e38</id><msg>Amazon invoices: document details, paid vs created status, Lexoffice reset, pinned actions</msg><path><editType>add</editType><file>server/api/accounting/amazon-ads/booking.get.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/utils/amazonAds/importInvoice.ts</file></path><path><editType>edit</editType><file>server/api/accounting/amazon-ads/invoices.get.ts</file></path><path><editType>edit</editType><file>app/pages/accounting/amazon-ads-invoices/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/invoices/so.get.ts</affectedPath><affectedPath>server/utils/amazonAds/importInvoice.ts</affectedPath><affectedPath>server/utils/amazonAds/parseSellerFeeInvoicePdf.ts</affectedPath><affectedPath>server/api/accounting/opos/index.get.ts</affectedPath><affectedPath>app/pages/sales/invoices/index.vue</affectedPath><affectedPath>app/pages/accounting/amazon-ads-invoices/index.vue</affectedPath><affectedPath>server/utils/amazonAds/types.ts</affectedPath><affectedPath>server/api/accounting/amazon-ads/invoices.get.ts</affectedPath><commitId>8aac736389fbef7e2d88535f9f39bc7b296c4eb9</commitId><timestamp>1789731297000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon invoices: recognise fee credit notes and book them as AP CreditMemo

- parser: "STEUERGUTSCHRIFT" template (Gutschriftennummer, Ausstellungsdatum /
  Zeitraum der Gutschrift), amounts with the sign before the currency
  ("-EUR 2.61"), "Ursprüngliche Rechnungsnummer" → originalInvoiceNo
- import: credit notes become a vendor credit memo — doctype DocBaseType APC
  (AP CreditMemo) with positive amounts, reference to the original invoice in
  the description; no longer refused
- OPOS + /sales/invoices: doctype 1000006 counts as customer-side only when the
  partner is flagged IsCustomer, so genuine vendor credit memos stay on the
  payables side (existing customer credit notes unchanged)
</comment><date>2026-09-18 13:34:57 +0200</date><id>8aac736389fbef7e2d88535f9f39bc7b296c4eb9</id><msg>Amazon invoices: recognise fee credit notes and book them as AP CreditMemo</msg><path><editType>edit</editType><file>app/pages/accounting/amazon-ads-invoices/index.vue</file></path><path><editType>edit</editType><file>server/api/invoices/so.get.ts</file></path><path><editType>edit</editType><file>server/api/accounting/amazon-ads/invoices.get.ts</file></path><path><editType>edit</editType><file>server/api/accounting/opos/index.get.ts</file></path><path><editType>edit</editType><file>server/utils/amazonAds/importInvoice.ts</file></path><path><editType>edit</editType><file>server/utils/amazonAds/parseSellerFeeInvoicePdf.ts</file></path><path><editType>edit</editType><file>server/utils/amazonAds/types.ts</file></path><path><editType>edit</editType><file>app/pages/sales/invoices/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/AgGrid/AgCopyEmail.vue</affectedPath><affectedPath>app/components/AgGrid/AgDialPhone.vue</affectedPath><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>9779bba8ea83bac8745a1d1a8386e89c2a9a1135</commitId><timestamp>1789731297000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Leads list: dial icon aligned to the right edge, copy button on the e-mail column

- AgDialPhone: number stays left, only the dial button is pushed to the right
  (shared renderer — also applies to the users / external users lists)
- new AgCopyEmail cell renderer: copy-to-clipboard button with check-mark
  feedback, does not start the inline editor
</comment><date>2026-09-18 13:34:57 +0200</date><id>9779bba8ea83bac8745a1d1a8386e89c2a9a1135</id><msg>Leads list: dial icon aligned to the right edge, copy button on the e-mail column</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path><path><editType>edit</editType><file>app/components/AgGrid/AgDialPhone.vue</file></path><path><editType>add</editType><file>app/components/AgGrid/AgCopyEmail.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/RecentCallsCard.vue</affectedPath><affectedPath>app/components/telephony/BlacklistControl.vue</affectedPath><affectedPath>server/api/telephony/blacklist.post.ts</affectedPath><affectedPath>server/api/telephony/blacklist.get.ts</affectedPath><affectedPath>app/components/DialButton.vue</affectedPath><affectedPath>server/utils/telephony/blacklist.ts</affectedPath><affectedPath>server/api/telephony/blacklist.delete.ts</affectedPath><commitId>c8fb1add4aec93b10d32265652cff746fddd349b</commitId><timestamp>1789732626000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Recent calls card: blacklist control moved into the number popover, with live status and unblock

- no per-row block button any more (it cost a column of width); clicking the
  number opens the popover, which now shows the FreePBX blacklist status and
  either "Nummer sperren" (two-step confirm) or "gesperrt · Entsperren"
- new TelephonyBlacklistControl, used inside the dial popover (DialButton
  show-blacklist) and in the card's own popover for sessions that cannot dial
- server: blacklist status read via AMI DBGet (one session for the ≤ 10 numbers
  of a page), unblock via DBDel; GET + DELETE /api/telephony/blacklist. An
  unexpected AMI error is "status unknown", never a false "not blocked"
- blocked numbers are marked red with a ban icon in the list
</comment><date>2026-09-18 13:57:06 +0200</date><id>c8fb1add4aec93b10d32265652cff746fddd349b</id><msg>Recent calls card: blacklist control moved into the number popover, with live status and unblock</msg><path><editType>add</editType><file>app/components/telephony/BlacklistControl.vue</file></path><path><editType>add</editType><file>server/api/telephony/blacklist.delete.ts</file></path><path><editType>add</editType><file>server/api/telephony/blacklist.get.ts</file></path><path><editType>edit</editType><file>app/components/DialButton.vue</file></path><path><editType>edit</editType><file>app/components/dashboard/RecentCallsCard.vue</file></path><path><editType>edit</editType><file>server/utils/telephony/blacklist.ts</file></path><path><editType>edit</editType><file>server/api/telephony/blacklist.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-ads-invoices/index.vue</affectedPath><affectedPath>server/utils/amazonAds/parseSellerFeeInvoicePdf.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>b2d24d604b14700496f0d0ebc1f53dd8a3358015</commitId><timestamp>1789732626000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon invoices: recognise the 2025 fee-invoice template, label the charge boxes as import settings

- parser: 2025 labels (Rechnungsnr, Name des Anbieters / Verkaeufers, Adresse /
  UStID des Anbieters) plus a label-independent fallback for supplier name and
  VAT id, so the next rename by Amazon does not break recognition
- page: the two charge selectors are grouped as "Import-Einstellung · Kostenart
  für neue Belege (kein Filter)" with an explanatory tooltip
</comment><date>2026-09-18 13:57:06 +0200</date><id>b2d24d604b14700496f0d0ebc1f53dd8a3358015</id><msg>Amazon invoices: recognise the 2025 fee-invoice template, label the charge boxes as import settings</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/accounting/amazon-ads-invoices/index.vue</file></path><path><editType>edit</editType><file>server/utils/amazonAds/parseSellerFeeInvoicePdf.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-ads-invoices/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>server/api/accounting/amazon-ads/invoices.get.ts</affectedPath><commitId>7b3ffcb02f1a492cae8e96636728f270a769594e</commitId><timestamp>1789733700000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon invoices: quick filters, optional date range, collapsed import settings, square upload box

- quick-filter chips with counts: Typ (Ads / Gebühren / Gutschriften), Beleg
  (ohne / erstellt / bezahlt), Lexoffice (noch nicht hochgeladen / hochgeladen);
  totals follow the filter ("1 von 3")
- no date filter by default; the optional invoice-date range sits behind a quiet
  "Zeitraum" button, reloads on change, and an upload widens it so new invoices
  are never hidden. The Ads API call keeps a bounded 12-month window server-side
- the two cost-type selectors are collapsed behind "Import-Einstellungen" with a
  one-line summary and an info box (what they do, why two, not a filter, when to
  change); the panel opens by itself when a cost type is missing
- upload area is a square drop box on the right with drag feedback and keyboard
  support
</comment><date>2026-09-18 14:15:00 +0200</date><id>7b3ffcb02f1a492cae8e96636728f270a769594e</id><msg>Amazon invoices: quick filters, optional date range, collapsed import settings, square upload box</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/api/accounting/amazon-ads/invoices.get.ts</file></path><path><editType>edit</editType><file>app/pages/accounting/amazon-ads-invoices/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-ads-invoices/index.vue</affectedPath><affectedPath>server/api/accounting/amazon-ads/booking.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>server/api/accounting/amazon-ads/invoices.get.ts</affectedPath><commitId>786df63b6cc3a86132f1f9a056fec00574c6943a</commitId><timestamp>1789734174000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon invoices: show voided documents properly, match them by POReference

- a voided invoice row names its Storno document ("Storniert #&lt;id&gt; · erneut
  importierbar"), opens its details (banner + link to iDempiere's reversal
  document, no Lexoffice reset), has its own row tint, a "Storno-Beleg" action,
  a "Storniert" quick-filter chip and a counter; it no longer counts as
  "Ohne Beleg (neu)"
- list route: documents are matched to the Amazon invoice by POReference (full
  number) instead of DocumentNo — the void rename '&lt;no&gt;-VOID-&lt;id&gt;' is truncated
  to the 30-char column ('DE-AEU-2025-2978769' → 'DE-AEU-2025-29787-VOID-…'),
  so a voided document was not recognised; reversal documents are flagged and
  listed after the original
</comment><date>2026-09-18 14:22:54 +0200</date><id>786df63b6cc3a86132f1f9a056fec00574c6943a</id><msg>Amazon invoices: show voided documents properly, match them by POReference</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/accounting/amazon-ads-invoices/index.vue</file></path><path><editType>edit</editType><file>server/api/accounting/amazon-ads/booking.get.ts</file></path><path><editType>edit</editType><file>server/api/accounting/amazon-ads/invoices.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/amazon-ads/document.get.ts</affectedPath><affectedPath>reference/ci/deploy-production.sh</affectedPath><affectedPath>app/pages/accounting/amazon-ads-invoices/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>server/api/accounting/amazon-ads/invoices.get.ts</affectedPath><commitId>bcd4de9387b784591e675d94d2d83cd354b63cb6</commitId><timestamp>1789737288000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon invoices: iDempiere is the source of truth for booked invoices, PDFs from the document attachment

The page's list lived only in data/amazon-ads.db, which was missing from the
deploy script's preserve list — every deploy wiped it, so booked invoices
vanished from the page (the documents themselves were never affected).

- list route: every Amazon invoice that HAS a document is rebuilt from iDempiere
  (AP documents of the Amazon vendors, found by vendor flag + name; key =
  POReference; kind from the vendor, credit note from the doctype, period from
  the description). The local store only adds uploads that are not imported yet
  plus parsed details / PDF cache
- document route: without a local copy the ORIGINAL PDF attached to the
  iDempiere document is served (&amp;cInvoiceId=); the page passes the document id
- rows rebuilt from iDempiere are labelled (Quelle "iDempiere", PDF "Anhang");
  a voided one asks for the PDF to be uploaded again before re-import
- deploy script: amazon-ads.db + data/amazon-ads/ added to the preserve lists
  (must be pasted into the Jenkins job to take effect)
</comment><date>2026-09-18 15:14:48 +0200</date><id>bcd4de9387b784591e675d94d2d83cd354b63cb6</id><msg>Amazon invoices: iDempiere is the source of truth for booked invoices, PDFs from the document attachment</msg><path><editType>edit</editType><file>reference/ci/deploy-production.sh</file></path><path><editType>edit</editType><file>server/api/accounting/amazon-ads/document.get.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/api/accounting/amazon-ads/invoices.get.ts</file></path><path><editType>edit</editType><file>app/pages/accounting/amazon-ads-invoices/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/amazon-ads/upload.post.ts</affectedPath><affectedPath>server/utils/amazonAds/invoiceStore.ts</affectedPath><affectedPath>server/api/accounting/amazon-ads/status.get.ts</affectedPath><affectedPath>server/api/accounting/amazon-ads/document.get.ts</affectedPath><affectedPath>server/api/accounting/amazon-ads/import.post.ts</affectedPath><affectedPath>server/api/accounting/amazon-ads/void.post.ts</affectedPath><affectedPath>server/api/accounting/amazon-ads/invoices.get.ts</affectedPath><commitId>bcd159169e2557be05d88bbad7d54b88e7c038cf</commitId><timestamp>1789741744000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon invoices: store uploads in the iDempiere table CUST_AmazonInvoiceInbox (PDF in Strapi)

- new invoiceStore.ts: one async storage API with two backends — the iDempiere
  table (row via REST, PDF attached in Strapi) and, only as a fallback when the
  table is not reachable, the old SQLite file
- upload / list / import / void / document routes use it; the upload route reads
  the multipart body once and retries with a refreshed token
- rows still in the SQLite file are moved over when the page loads (bounded,
  idempotent, fail-soft; imported rows keep their PDF on the c_invoice document,
  pending rows get their PDF uploaded to Strapi). A run where nothing can be
  written pauses for 10 minutes instead of retrying on every load, and rows that
  are not in the table yet stay visible and importable from the local file
- status/list responses report the active backend
</comment><date>2026-09-18 16:29:04 +0200</date><id>bcd159169e2557be05d88bbad7d54b88e7c038cf</id><msg>Amazon invoices: store uploads in the iDempiere table CUST_AmazonInvoiceInbox (PDF in Strapi)</msg><path><editType>edit</editType><file>server/api/accounting/amazon-ads/import.post.ts</file></path><path><editType>edit</editType><file>server/api/accounting/amazon-ads/upload.post.ts</file></path><path><editType>add</editType><file>server/utils/amazonAds/invoiceStore.ts</file></path><path><editType>edit</editType><file>server/api/accounting/amazon-ads/void.post.ts</file></path><path><editType>edit</editType><file>server/api/accounting/amazon-ads/invoices.get.ts</file></path><path><editType>edit</editType><file>server/api/accounting/amazon-ads/status.get.ts</file></path><path><editType>edit</editType><file>server/api/accounting/amazon-ads/document.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/amazon-ads/invoices.get.ts</affectedPath><commitId>f5a4b95955cba38382c3ac8c7cc1ffae1e2654e7</commitId><timestamp>1789742168000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon invoices: keep inbox rows consistent with iDempiere's documents (self-heal)

On each list load an inbox row whose document exists but is not linked (imported
on another host / before the table existed) gets status 'imported' + the link;
a row that still points to a voided or missing document is released. Bounded,
fail-soft, idempotent — the page itself reads the documents and never depends on it.
</comment><date>2026-09-18 16:36:08 +0200</date><id>f5a4b95955cba38382c3ac8c7cc1ffae1e2654e7</id><msg>Amazon invoices: keep inbox rows consistent with iDempiere's documents (self-heal)</msg><path><editType>edit</editType><file>server/api/accounting/amazon-ads/invoices.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/accounting/BankLineMatchModal.vue</affectedPath><affectedPath>app/components/accounting/banking/BankReconcilePanel.vue</affectedPath><affectedPath>server/utils/bankReconciliationSuggestions.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>d6003a7b7ccaba8faa27e1d466fff5d221e8dd67</commitId><timestamp>1789742659000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Bank reconciliation: suggestions need at least 2 matching criteria, fuzzy names, date signal, score ranking

- a candidate is only suggested when at least 2 of 4 criteria match: document
  number, amount, partner (IBAN or name count as one) and date. On the current
  33 open statements all 47 old invoice suggestions rested on a single signal
- new date signal: statement line date −5 … +60 days around the invoice date
- fuzzy partner names: umlauts spelled out, accents stripped, legal forms and
  filler words ignored, prefix matches, brand word, brand inside run-together
  text or the remittance text ("AMAZON PAYMENTS EUROPE S.C.A." matches "Amazon EU
  S.à r.l., Niederlassung Deutschland"; "Deutsche Bank" does not match
  "Deutsche Post")
- ranking by score, best first (doc no. 50 · amount 30 · IBAN 25 / name 10–25 ·
  date closeness 0–15); up to 8 candidates per line
- match dialog: top 3 + "weitere anzeigen", date chip, n/4 criteria, best-match
  marker, top candidate preselected; list pill shows "+n" and a criteria tooltip
</comment><date>2026-09-18 16:44:19 +0200</date><id>d6003a7b7ccaba8faa27e1d466fff5d221e8dd67</id><msg>Bank reconciliation: suggestions need at least 2 matching criteria, fuzzy names, date signal, score ranking</msg><path><editType>edit</editType><file>app/components/accounting/banking/BankReconcilePanel.vue</file></path><path><editType>edit</editType><file>app/components/accounting/BankLineMatchModal.vue</file></path><path><editType>edit</editType><file>server/utils/bankReconciliationSuggestions.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-ads-invoices/index.vue</affectedPath><affectedPath>server/api/accounting/amazon-ads/invoices.get.ts</affectedPath><commitId>6e71fb22714beae7d74a7a44353b11faad234015</commitId><timestamp>1789743036000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon invoices: report the PDF as available when it sits on the iDempiere document

Rows migrated from the local file (and rows rebuilt from documents) carry no file
of their own — their original PDF is the document's attachment. The list flagged
them as "no PDF" although the link works; they now show "Anhang".
</comment><date>2026-09-18 16:50:36 +0200</date><id>6e71fb22714beae7d74a7a44353b11faad234015</id><msg>Amazon invoices: report the PDF as available when it sits on the iDempiere document</msg><path><editType>edit</editType><file>server/api/accounting/amazon-ads/invoices.get.ts</file></path><path><editType>edit</editType><file>app/pages/accounting/amazon-ads-invoices/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-ads-invoices/index.vue</affectedPath><affectedPath>server/api/accounting/amazon-ads/import.post.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>87678796cc3032e2763f178f8e4731c10c6ed9b2</commitId><timestamp>1789744764000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon invoices: confirm every import with the cost type shown, no remembered cost types

12 fee invoices were booked to "Werbekosten": the page remembered the last
selection of each cost-type box in the browser and a stale value silently
overrode the correct default.

- cost types are no longer stored in the browser (old keys are removed); every
  page load starts from the server defaults (Ads → Werbekosten, fees/credit notes
  → Amazon Gebühren); a deviation is flagged (amber summary, reset to default)
- every import goes through a confirmation dialog that groups the invoices by
  type, shows the cost type each group will be booked to (changeable there, the
  default is marked, a deviation is highlighted) and lists already booked ones as
  skipped. It opens on "Ausgewählte importieren" and right after an upload
  ("jetzt importieren" / "Später")
- the import result names the cost type that was used per invoice
</comment><date>2026-09-18 17:19:24 +0200</date><id>87678796cc3032e2763f178f8e4731c10c6ed9b2</id><msg>Amazon invoices: confirm every import with the cost type shown, no remembered cost types</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/accounting/amazon-ads-invoices/index.vue</file></path><path><editType>edit</editType><file>server/api/accounting/amazon-ads/import.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/amazon-ads/invoices.get.ts</affectedPath><commitId>267e7becbfac41d14dbd209d510b958cf7628124</commitId><timestamp>1789745316000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon invoices: match documents by the full number in the description (POReference is 20 chars)

The first credit-memo import showed that POReference cannot carry the key: the
column is 20 chars, so 'DE-CN-AEU-2026-134720' (21) is stored as
'DE-CN-AEU-2026-13472' — the new AP CreditMemo was not recognised as the credit
note's document and the self-heal released its inbox row ('voided').

The importer's description starts with the FULL Amazon number on every document
(active, voided rename, iDempiere's reversal), so that is the primary match key
now; DocumentNo / POReference remain the fallback for documents not created by
the importer. No double booking was possible — the importer's duplicate guard
checks the full DocumentNo.
</comment><date>2026-09-18 17:28:36 +0200</date><id>267e7becbfac41d14dbd209d510b958cf7628124</id><msg>Amazon invoices: match documents by the full number in the description (POReference is 20 chars)</msg><path><editType>edit</editType><file>server/api/accounting/amazon-ads/invoices.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/amazonAds/importInvoice.ts</affectedPath><commitId>cc0ff592b5ae3cc181da2058102242fd926336b5</commitId><timestamp>1789745741000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon invoices: book the exact VAT from the PDF when a line-level purchase tax exists

Amazon rounds the VAT down (74,66 × 19 % → 14,18), iDempiere half-up (14,19); with
the document-level "19% Mwst." the VAT is recomputed at completion, so 3 of 15
documents ended up one cent above the Amazon total.

iDempiere keeps a manually entered line TaxAmt on purchase documents whose tax
rate is NOT document level. The importer now prefers such a rate (purchase,
IsDocumentLevel = N) and writes the VAT from the PDF on each line (per-line VAT
for fee invoices, proportional for Ads campaigns, remainder on the largest line).
Without such a rate nothing changes — except that a difference between the booked
total and the Amazon document is now reported as a warning instead of going unnoticed.
</comment><date>2026-09-18 17:35:41 +0200</date><id>cc0ff592b5ae3cc181da2058102242fd926336b5</id><msg>Amazon invoices: book the exact VAT from the PDF when a line-level purchase tax exists</msg><path><editType>edit</editType><file>server/utils/amazonAds/importInvoice.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>740</buildNumber><marked><SHA1>9fce9f60003dd71f91f23cfe3b1792f33fc33d7f</SHA1><branch><SHA1>9fce9f60003dd71f91f23cfe3b1792f33fc33d7f</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>9fce9f60003dd71f91f23cfe3b1792f33fc33d7f</SHA1><branch><SHA1>9fce9f60003dd71f91f23cfe3b1792f33fc33d7f</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>9fce9f60003dd71f91f23cfe3b1792f33fc33d7f</SHA1><branch><SHA1>9fce9f60003dd71f91f23cfe3b1792f33fc33d7f</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'></action><building>false</building><displayName>#740</displayName><duration>72313</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #740</fullDisplayName><id>740</id><inProgress>false</inProgress><keepLog>false</keepLog><number>740</number><queueId>5729</queueId><result>SUCCESS</result><timestamp>1789689600766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/740/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/print/order-attachments.post.ts</affectedPath><affectedPath>server/api/print/picklist.post.ts</affectedPath><affectedPath>reference/recipes.md</affectedPath><affectedPath>server/utils/pdfPageMedia.ts</affectedPath><affectedPath>server/api/print/index.post.ts</affectedPath><affectedPath>server/api/print/attachment-smart.post.ts</affectedPath><commitId>9fce9f60003dd71f91f23cfe3b1792f33fc33d7f</commitId><timestamp>1789650385000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Print routes: route A5/A4 PDFs to the paper queue with explicit -o media

The Jasper Shipment A5 (420x595 pt) fell under the 500 pt label threshold and
was sent to the Zebra label printer. New server/utils/pdfPageMedia.ts detects
the page size once (pdfinfo, gs fallback) and classifies it: label / a5 / a4 /
other. attachment-smart, order-attachments, picklist and index now send A5 and
A4 pages to the paper queue with -o media=A5|A4 (caller-supplied media wins).

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
</comment><date>2026-09-17 15:06:25 +0200</date><id>9fce9f60003dd71f91f23cfe3b1792f33fc33d7f</id><msg>Print routes: route A5/A4 PDFs to the paper queue with explicit -o media</msg><path><editType>edit</editType><file>server/api/print/order-attachments.post.ts</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path><path><editType>add</editType><file>server/utils/pdfPageMedia.ts</file></path><path><editType>edit</editType><file>server/api/print/picklist.post.ts</file></path><path><editType>edit</editType><file>server/api/print/attachment-smart.post.ts</file></path><path><editType>edit</editType><file>server/api/print/index.post.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>739</buildNumber><marked><SHA1>1e77ee19cf43852966794881cd3f1642880f624d</SHA1><branch><SHA1>1e77ee19cf43852966794881cd3f1642880f624d</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>1e77ee19cf43852966794881cd3f1642880f624d</SHA1><branch><SHA1>1e77ee19cf43852966794881cd3f1642880f624d</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>1e77ee19cf43852966794881cd3f1642880f624d</SHA1><branch><SHA1>1e77ee19cf43852966794881cd3f1642880f624d</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'></action><building>false</building><displayName>#739</displayName><duration>71887</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #739</fullDisplayName><id>739</id><inProgress>false</inProgress><keepLog>false</keepLog><number>739</number><queueId>5727</queueId><result>SUCCESS</result><timestamp>1789603200766</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/739/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/print/return-label.post.ts</affectedPath><commitId>1901094c902d6779b7ae601e4ea8109aea054959</commitId><timestamp>1789543405000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Return label: tighten header band, put doc number next to title

Shrinks the top black header-band height and moves the document number
onto the same row as the RETOURE/KUNDENRÜCKSENDUNG title (top-aligned,
right of it) instead of stacking them, freeing vertical space for more
article rows before a continuation label is needed. Title is now bold
and slightly larger; company/date text in the band keeps its prior size.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_013G7aDXCyYUwGgTG81QTP8E
</comment><date>2026-09-16 09:23:25 +0200</date><id>1901094c902d6779b7ae601e4ea8109aea054959</id><msg>Return label: tighten header band, put doc number next to title</msg><path><editType>edit</editType><file>server/api/print/return-label.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/print/return-label.post.ts</affectedPath><commitId>7944e52f1d3f243da24bcdbd08afc40629fccd44</commitId><timestamp>1789545906000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Return label: shrink header band further, lift doc number 1mm

Continues the earlier band/title tightening: band height reduced
again (10/7mm -&gt; 9/6mm) and the document number nudged 1mm above the
title's baseline for a slightly better visual balance on the row.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_013G7aDXCyYUwGgTG81QTP8E
</comment><date>2026-09-16 10:05:06 +0200</date><id>7944e52f1d3f243da24bcdbd08afc40629fccd44</id><msg>Return label: shrink header band further, lift doc number 1mm</msg><path><editType>edit</editType><file>server/api/print/return-label.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/return.vue</affectedPath><commitId>0ded69844c268c0bbcfe1ac463f1f1fa7a7bb3e1</commitId><timestamp>1789545914000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile return: fix qty locked at 0 when scanning an Amazon-imported RMA

Scanning a return parcel's external RMA number (M_RMA.externalRmaNumber)
finds the matching pre-imported Amazon RMA and loads its linked shipment,
but that RMA is already DocStatus=CO with the expected qty on its line —
getReturnedQtyMap counted it as "already returned" against its own
shipment, zeroing maxQty and locking the qty stepper at 0 for every line.
Confirmed against a live prod record (RMA 1000688 / externalRmaNumber
"DydTw8rHRRMA": CO, one M_RMALine Qty=1 on the exact line whose remaining
qty then computed to 0).

Fix: exclude the matched RMA's own id from the already-returned tally —
it's the incoming authorization being fulfilled right now, not a separate
prior return. Searching by bpartner and selecting the shipment manually
was unaffected since it doesn't go through this RMA-number match at all.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_013G7aDXCyYUwGgTG81QTP8E
</comment><date>2026-09-16 10:05:14 +0200</date><id>0ded69844c268c0bbcfe1ac463f1f1fa7a7bb3e1</id><msg>Mobile return: fix qty locked at 0 when scanning an Amazon-imported RMA</msg><path><editType>edit</editType><file>app/pages/mobile/return.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/returns/index.vue</affectedPath><affectedPath>app/pages/sales/returns/[id]/view.vue</affectedPath><affectedPath>app/components/AgGrid/Shipments/AgCustomLink.vue</affectedPath><commitId>130a2dfe89a8ab37acd85c775b105a96667f9bca</commitId><timestamp>1789546745000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Customer Returns: link doc number to detail view, add label reprint button

The list grid's Doc Number column was plain text — no way to open a
return's detail view from it. Add AgCustomLink (mirrors the
MaterialReceipt/Shippers pattern) linking to /sales/returns/[id]/view.

On that detail view, add a "Etikett erneut drucken" button that re-fetches
the return's lines (GET /api/inouts/[id]/return-detail) and reprints the
return label via POST /api/print/return-label (kind: 'customer-return',
using the printer queue from useReturnLabelPrinter) — for when the label
didn't come out at intake for any reason.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_013G7aDXCyYUwGgTG81QTP8E
</comment><date>2026-09-16 10:19:05 +0200</date><id>130a2dfe89a8ab37acd85c775b105a96667f9bca</id><msg>Customer Returns: link doc number to detail view, add label reprint button</msg><path><editType>edit</editType><file>app/pages/sales/returns/index.vue</file></path><path><editType>edit</editType><file>app/pages/sales/returns/[id]/view.vue</file></path><path><editType>add</editType><file>app/components/AgGrid/Shipments/AgCustomLink.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>nuxt.config.ts</affectedPath><commitId>954812a8077115a4364b65372e92980e3ea4685b</commitId><timestamp>1789547570000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dev: pre-bundle AG Grid + vue-pdf deps to fix grid never rendering

Every AG Grid page (any of them — confirmed on both Customer Returns and
Shippers) rendered a completely empty &lt;div class="ag-theme-balham"&gt;: no
rows, no "No Rows" overlay, no console error. Root cause was the same
class of issue the surrounding optimizeDeps.include comment already
documents for other packages, just not yet applied to these: ag-grid-community,
ag-grid-enterprise, ag-grid-vue3, and @tato30/vue-pdf were never in the
list, so Vite only discovered them when the first page using &lt;AgGrid&gt;/
&lt;PrintViewer&gt; actually rendered — triggering a disruptive re-optimize +
forced reload mid-render. That reload left AgGridVue's internal grid
creation desynced from AgGrid.vue's provideGlobalGridOptions({theme:
"legacy"}) call, surfacing as AG Grid's own "error #239" (Theming API vs
CSS File Theme conflict) — and, on the very first hit of a session, as a
totally blank grid with no error at all.

Also adds @capacitor/preferences (pulled in by plugins/00.capacitor-api.client.ts
for the dual web/Capacitor build, which stays in the dev module graph even
though it early-returns on web) — same failure mode, same fix.

Confirmed fixed: clean nuxt dev restart + rm -rf .nuxt node_modules/.cache,
Customer Returns list and detail view both rendered fully on first load,
no "Vite discovered new dependencies at runtime" warning, no AG Grid error.
Dev-only change (vite.optimizeDeps has no effect on the production build).

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_013G7aDXCyYUwGgTG81QTP8E
</comment><date>2026-09-16 10:32:50 +0200</date><id>954812a8077115a4364b65372e92980e3ea4685b</id><msg>Dev: pre-bundle AG Grid + vue-pdf deps to fix grid never rendering</msg><path><editType>edit</editType><file>nuxt.config.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/requests/requests/update.put.ts</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>server/api/requests/requests/[id]/push-task.post.ts</affectedPath><affectedPath>server/api/mobile/pushed-tasks.get.ts</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><affectedPath>app/composables/states.ts</affectedPath><affectedPath>app/layouts/mobile.vue</affectedPath><affectedPath>server/utils/fcmNotifier.ts</affectedPath><affectedPath>app/composables/usePushedTasks.ts</affectedPath><affectedPath>app/plugins/20.native-push.client.ts</affectedPath><commitId>39a918fde9d11a993c8aa2aad04a6d94d3171136</commitId><timestamp>1789553513000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Requests: push tickets to mobile workers as priority tasks

Lets dispatchers push a ticket to a specific mobile worker's device (native
FCM + web push) so it pops up and stays pinned as a priority-task banner on
the mobile dashboard until the worker starts the timer on it. Opening it
reuses the existing ticket instructions/chat/timer flow in tasks.vue; a new
global running-timer banner keeps the timer visible while navigating other
mobile pages.

Needs two new custom columns on R_Request in iDempiere (IsPushedTask Yes-No,
PushedTaskAt Date+Time) — stays inert until those exist.
</comment><date>2026-09-16 12:11:53 +0200</date><id>39a918fde9d11a993c8aa2aad04a6d94d3171136</id><msg>Requests: push tickets to mobile workers as priority tasks</msg><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/plugins/20.native-push.client.ts</file></path><path><editType>add</editType><file>server/api/requests/requests/[id]/push-task.post.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>edit</editType><file>app/layouts/mobile.vue</file></path><path><editType>edit</editType><file>server/api/requests/requests/update.put.ts</file></path><path><editType>edit</editType><file>server/utils/fcmNotifier.ts</file></path><path><editType>add</editType><file>app/composables/usePushedTasks.ts</file></path><path><editType>add</editType><file>server/api/mobile/pushed-tasks.get.ts</file></path><path><editType>edit</editType><file>app/composables/states.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/returns/[id]/view.vue</affectedPath><commitId>f2540ba61045ce40c991525ed3931844b57bc0ef</commitId><timestamp>1789554804000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fix return-label reprint printing wrong DocumentNo

The "Etikett erneut drucken" button on the return detail page always
printed the customer-return's own DocumentNo, but /mobile/reconditioning
only scans the linked RMA's DocumentNo (571/572 live returns have one).
Now prints the RMA's number when present, matching what intake already
prints, and falls back to the return's own number only when there's no
linked RMA.
</comment><date>2026-09-16 12:33:24 +0200</date><id>f2540ba61045ce40c991525ed3931844b57bc0ef</id><msg>Fix return-label reprint printing wrong DocumentNo</msg><path><editType>edit</editType><file>app/pages/sales/returns/[id]/view.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/plugins/warm-cid-lookup.ts</affectedPath><affectedPath>server/api/telephony/cid-lookup/[number].get.ts</affectedPath><affectedPath>reference/recipes.md</affectedPath><affectedPath>server/utils/telephony/cidDirectory.ts</affectedPath><commitId>3534d36393ce6175fe9b2f1c21ed9741129048c8</commitId><timestamp>1789554829000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Reverse caller-ID lookup: replace Elasticsearch with a direct iDempiere-backed in-memory directory — server/utils/telephony/cidDirectory.ts fetches the small active ad_user set with phone/phone2 (SERVICE token, same pattern as phoneActivity.ts/extensions.ts) into a 60s TTL stale-while-revalidate cache so cid-lookup/[number].get.ts has zero network calls on the hot path (was querying a Postgres-trigger-fed ES index that could lag/stall behind iDempiere edits); server/plugins/warm-cid-lookup.ts pre-warms the cache at server boot so the first call after a deploy/restart is instant too; recipe note in reference/recipes.md
</comment><date>2026-09-16 12:33:49 +0200</date><id>3534d36393ce6175fe9b2f1c21ed9741129048c8</id><msg>Reverse caller-ID lookup: replace Elasticsearch with a direct iDempiere-backed in-memory directory — server/utils/telephony/cidDirectory.ts fetches the small active ad_user set with phone/phone2 (SERVICE token, same pattern as phoneActivity.ts/extensions.ts) into a 60s TTL stale-while-revalidate cache so cid-lookup/[number].get.ts has zero network calls on the hot path (was querying a Postgres-trigger-fed ES index that could lag/stall behind iDempiere edits); server/plugins/warm-cid-lookup.ts pre-warms the cache at server boot so the first call after a deploy/restart is instant too; recipe note in reference/recipes.md</msg><path><editType>add</editType><file>server/plugins/warm-cid-lookup.ts</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path><path><editType>add</editType><file>server/utils/telephony/cidDirectory.ts</file></path><path><editType>edit</editType><file>server/api/telephony/cid-lookup/[number].get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/attachments/[table]/[id]/index.get.ts</affectedPath><commitId>4fc7a95b074a29eacb5e9ff0da45ea06db028255</commitId><timestamp>1789558991000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fix attachment-lookup N+1: skip the live ad_table query for known table names

server/api/attachments/[table]/[id]/index.get.ts hit iDempiere's ad_table
model on every call to resolve a table name to its numeric id, even though
the very same route already had a complete hardcoded fallback map for the
common tables. Every AgGrid row with an attachment cell (AgCustomAttachment.vue)
fires this once, so a large order/shipment grid render turned into hundreds
of redundant REST calls, each going through the synchronized
DefaultQueryConverter singleton (see the "iDempiere REST load rules" recipe /
2026-09-10 incident) — a live capture on prod showed 287 of these in one
grid render. Now the static map is checked first and iDempiere is only
queried for a genuinely unmapped table name. Behavior-preserving: also drops
a dead duplicate M_Product branch that was unreachable (208 always won).
</comment><date>2026-09-16 13:43:11 +0200</date><id>4fc7a95b074a29eacb5e9ff0da45ea06db028255</id><msg>Fix attachment-lookup N+1: skip the live ad_table query for known table names</msg><path><editType>edit</editType><file>server/api/attachments/[table]/[id]/index.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/requests/requests/latest-updates.get.ts</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>server/api/requests/requests/[id]/request-history/index.get.ts</affectedPath><affectedPath>server/api/requests/requests/[id]/request-update/index.get.ts</affectedPath><affectedPath>server/utils/ticketViewer.ts</affectedPath><affectedPath>server/api/requests/requests/[id]/request-update/index.post.ts</affectedPath><affectedPath>server/api/requests/requests/[id]/author-orgs.get.ts</affectedPath><commitId>26a325c9da0087ee13a1ed7a95bba6080578f643</commitId><timestamp>1789559285000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Tickets: show staff replies to limited merchant roles (service-token reads)

Staff replies on merchant tickets were stamped with the staff member's
active org (LogYou) instead of the ticket's org, so iDempiere's org
row-level security hid them from the merchant's limited role — customers
saw only their own messages (85 such rows across 5 merchants on prod,
e.g. Wonderhome ticket 1000439 with both LogYou replies missing).
AD_Org_ID is not updateable on R_Request/R_RequestUpdate/R_RequestAction,
so the rows cannot be re-stamped.

- server/utils/ticketViewer.ts: role FrontendMenu resolved server-side
  (service token, cached), caller-token ticket access check, server-side
  twin of the client's internal-entry filter ('I' / [Zeitabrechnung]).
- request-update / request-history GET: a proven-limited viewer reads the
  ticket's rows with the service token AFTER the caller-token access check;
  internal entries are dropped server-side. Both lists now ordered + capped.
- request-update POST: AD_Org_ID derived from the ticket server-side
  (body.organizationId ignored) so every caller stamps the right org;
  limited roles can never post an 'I' entry. Write stays on the caller's
  token so CreatedBy is correct.
- author-orgs: collect update/action authors with the service token for
  limited viewers so the newly visible staff rows get their LogYou label.
- latest-updates: limited viewers get updates of their visible tickets via
  chunked `R_Request_ID in (...)` with the service token, filtered.
</comment><date>2026-09-16 13:48:05 +0200</date><id>26a325c9da0087ee13a1ed7a95bba6080578f643</id><msg>Tickets: show staff replies to limited merchant roles (service-token reads)</msg><path><editType>edit</editType><file>server/api/requests/requests/[id]/author-orgs.get.ts</file></path><path><editType>edit</editType><file>server/api/requests/requests/latest-updates.get.ts</file></path><path><editType>edit</editType><file>server/api/requests/requests/[id]/request-update/index.get.ts</file></path><path><editType>add</editType><file>server/utils/ticketViewer.ts</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>server/api/requests/requests/[id]/request-history/index.get.ts</file></path><path><editType>edit</editType><file>server/api/requests/requests/[id]/request-update/index.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><commitId>4e94b7513ae63f4e85e54ccfdc83f8ceaaa7169b</commitId><timestamp>1789559459000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Ticket detail: wrap toolbar instead of overlapping in the split view

The ticket header bar was a single non-wrapping row with hidden horizontal
scroll; in the my-tickets split view (and small windows) the action group
painted over the metadata chips (ticket no., date, type, category,
assignee). The bar now wraps into a metadata row and an action row when
space runs out, chips wrap inside each group, and in narrow bars the
secondary actions (push to mobile, accounting flag) collapse to icon
buttons with tooltips via a container query.
</comment><date>2026-09-16 13:50:59 +0200</date><id>4e94b7513ae63f4e85e54ccfdc83f8ceaaa7169b</id><msg>Ticket detail: wrap toolbar instead of overlapping in the split view</msg><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/useOpenShipments.ts</affectedPath><affectedPath>server/api/inouts/open-to-commission-list.get.ts</affectedPath><commitId>40b7c61af8d06bd8bc95b02f3393b1f37fd504c5</commitId><timestamp>1789559494000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fix unbounded open-shipments query: replace child-table $expand with direct-Postgres list + batched line fetch

useOpenShipments.ts (backing components/integrations/OpenShipments.vue, polled every
2 minutes per open tab on the commissioning page) queried m_inout with a 5-way $expand
including the CHILD table m_inoutline($expand=m_product_id) and no $top — same shape as
the 2026-09-10 incident's m_product $expand=M_Storage, hitting the synchronized
DefaultQueryConverter singleton once per shipment per line. A live capture returned 2MB
in one response; only 67 rows today but it only gets heavier as open-shipment volume grows.

Fix, following the same pattern already used for products+storage (productStorageHelper.ts):
- Shipment list now comes from the existing direct-Postgres endpoint
  server/api/inouts/open-to-commission-list.get.ts (already used by the dashboard "Offene
  Aufträge" card and the commissioning modal), extended with the fields the widget needs
  (location/shipper name, PO reference, line-qty sum) so it's purely additive for its
  existing consumers.
- Line items (needed for the barcode-scan-to-shipment search in commission.vue) are fetched
  in one bounded REST call: m_inoutline top-level list with $filter=M_InOut_ID in (...)
  and $expand=M_Product_ID as a to-one FK expand, not a child expand under m_inout, so it
  takes the cheap code path per the "iDempiere REST load rules" recipe. Verified directly
  against prod (SQL query + REST filter) before committing.
</comment><date>2026-09-16 13:51:34 +0200</date><id>40b7c61af8d06bd8bc95b02f3393b1f37fd504c5</id><msg>Fix unbounded open-shipments query: replace child-table $expand with direct-Postgres list + batched line fetch</msg><path><editType>edit</editType><file>app/composables/useOpenShipments.ts</file></path><path><editType>edit</editType><file>server/api/inouts/open-to-commission-list.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><commitId>9ab77d566a46409c11846c82a81629cb020bfd70</commitId><timestamp>1789559554000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile app: bump version to 1.0.49 (versionCode 50)
</comment><date>2026-09-16 13:52:34 +0200</date><id>9ab77d566a46409c11846c82a81629cb020bfd70</id><msg>Mobile app: bump version to 1.0.49 (versionCode 50)</msg><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/ChangeLogButton.vue</affectedPath><affectedPath>app/pages/materials/products/[id]/edit.vue</affectedPath><affectedPath>app/pages/partners/partners/[id]/edit.vue</affectedPath><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>server/utils/changeLogHelper.ts</affectedPath><affectedPath>app/components/ChangeLogModal.vue</affectedPath><affectedPath>server/api/changelog/detail/[table]/[recid].get.ts</affectedPath><affectedPath>app/pages/sales/shipments/[id]/edit.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>6ef4fadbda7e9d755b39ea38b02904770c07e887</commitId><timestamp>1789560600000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Change log modal (admin only) for orders, shipments, products and partners

Adds an iDempiere AD_ChangeLog viewer like the ZK 'Change Log' / 'Time Line' tab:
- server/utils/changeLogHelper.ts + GET /api/changelog/detail/{table}/{id}:
  paged changelog read with column metadata, list values resolved via
  AD_Ref_List, foreign keys resolved to record labels (bounded, cached),
  child lines included (order/shipment lines, partner locations + contacts),
  record creation event; role must be IsClientAdministrator (checked server-side)
- components/ChangeLogModal.vue: timeline (grouped per transaction, day
  separators) + table view, search, line/technical-field toggles, DE/EN/ES
- components/ChangeLogButton.vue: admin-gated toolbar button, wired into the
  order, shipment, product and business-partner edit pages
</comment><date>2026-09-16 14:10:00 +0200</date><id>6ef4fadbda7e9d755b39ea38b02904770c07e887</id><msg>Change log modal (admin only) for orders, shipments, products and partners</msg><path><editType>edit</editType><file>app/pages/materials/products/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path><path><editType>add</editType><file>server/api/changelog/detail/[table]/[recid].get.ts</file></path><path><editType>edit</editType><file>app/pages/partners/partners/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/sales/shipments/[id]/edit.vue</file></path><path><editType>add</editType><file>app/components/ChangeLogModal.vue</file></path><path><editType>add</editType><file>server/utils/changeLogHelper.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>app/components/ChangeLogButton.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/shipments/index.vue</affectedPath><affectedPath>app/components/AgGrid/Shipments/AgShipmentEditLink.vue</affectedPath><commitId>4068470597d78282ca601129755254f00bd0a7c5</commitId><timestamp>1789560600000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Shipments list: link document numbers directly to the shipment edit page
</comment><date>2026-09-16 14:10:00 +0200</date><id>4068470597d78282ca601129755254f00bd0a7c5</id><msg>Shipments list: link document numbers directly to the shipment edit page</msg><path><editType>edit</editType><file>app/pages/sales/shipments/index.vue</file></path><path><editType>add</editType><file>app/components/AgGrid/Shipments/AgShipmentEditLink.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>app/pages/sales/orders/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>679f81dc67cf8b18be03cdd88c38f3e00bf257c1</commitId><timestamp>1789560984000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Order edit: restructure the action toolbar, rename reactivation to 'Auftrag wiederöffnen'

The order edit bar had grown to ~20 coloured icon-only buttons. It is now a
neutral, text-labelled toolbar: Save, Files (with badge), Complete / Reopen
order, Create shipment, Create invoice, Void, and a grouped 'More actions'
dropdown (print / labels / duplicate / video / reminders / compare / change
log). All visibility rules live in one data-driven action list; on phones
(&lt;= 768px) only Save, Files and the status action stay outside the dropdown.
Right side: Abort, share, Back, Ticket as labelled buttons.

- 'Reaktivieren' is now 'Auftrag wiederöffnen' (Reopen order); the orders list
  batch action 'Auf Entwurf' uses the same wording
- new translation keys (en/de/es): reopen_order, more_actions,
  create_shipment_action, create_invoice_action, shipment_created,
  invoice_created, void_not_possible_shipped, force_void_short,
  manual_commission_short, reprint_label, order_reminders, show_video
</comment><date>2026-09-16 14:16:24 +0200</date><id>679f81dc67cf8b18be03cdd88c38f3e00bf257c1</id><msg>Order edit: restructure the action toolbar, rename reactivation to 'Auftrag wiederöffnen'</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/sales/orders/index.vue</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/OrderForm.vue</affectedPath><affectedPath>app/components/ChangeLogModal.vue</affectedPath><commitId>f158c2abbbf73217d0b95096455df4882b77d43d</commitId><timestamp>1789561286000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Order tab: fix column overlap (30% / auto / 22%); change log table: truncate line labels, hide technical fields by default

- OrderForm: explicit flex bases + min-width:0 on the three order-tab columns
  (numbers/refs wider, shipping address flexible, 'General' column narrower) so
  the row can no longer overflow under the side cards; long e-mails wrap
- ChangeLogModal: fixed table layout with column widths, line badges truncated
  with full text as tooltip, 'Hide technical fields' on by default
</comment><date>2026-09-16 14:21:26 +0200</date><id>f158c2abbbf73217d0b95096455df4882b77d43d</id><msg>Order tab: fix column overlap (30% / auto / 22%); change log table: truncate line labels, hide technical fields by default</msg><path><editType>edit</editType><file>app/components/sales/OrderForm.vue</file></path><path><editType>edit</editType><file>app/components/ChangeLogModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/OrderForm.vue</affectedPath><commitId>7eb042353e2b5a3fbc37ccee28f6b5b2ace61a6c</commitId><timestamp>1789561790000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Order tab: make the 'General' column really 22% wide, stack its paired fields

The earlier width rule lost to Bulma's .column.is-one-third (higher specificity),
so the column was still a third of the row. The selector now outranks it and
the Date Ordered/Promised and Organization/Tenant pairs stack vertically so
nothing truncates in the narrow column.
</comment><date>2026-09-16 14:29:50 +0200</date><id>7eb042353e2b5a3fbc37ccee28f6b5b2ace61a6c</id><msg>Order tab: make the 'General' column really 22% wide, stack its paired fields</msg><path><editType>edit</editType><file>app/components/sales/OrderForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/OrderForm.vue</affectedPath><commitId>6e5caf40f53fed39d1a293b80f62304060008fb8</commitId><timestamp>1789561862000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Order tab: move the partner link into the shipping-address header as a right-aligned 'Kunde' link

The partner row above the recipient name is replaced by a compact 'Kunde' link
(with open-link icon) on the right of the 'Lieferanschrift' header; the partner
name is shown as tooltip only. Limited roles get a static label.
</comment><date>2026-09-16 14:31:02 +0200</date><id>6e5caf40f53fed39d1a293b80f62304060008fb8</id><msg>Order tab: move the partner link into the shipping-address header as a right-aligned 'Kunde' link</msg><path><editType>edit</editType><file>app/components/sales/OrderForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/OrderForm.vue</affectedPath><commitId>cce23cadaf525474a569212d8c883efbd265512a</commitId><timestamp>1789561969000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Order tab 'General' column: Organization first, compact German-formatted date row, Tenant as tooltip

- Organization is the first field; Tenant is no longer a field, it shows as a
  tooltip on hover over Organization
- Date Ordered / Date Promised sit side by side in one compact row (smaller
  label + input, short labels 'Ordered' / 'Promised' with full title); on
  completed/voided orders the read-only values display as dd.mm.yyyy
</comment><date>2026-09-16 14:32:49 +0200</date><id>cce23cadaf525474a569212d8c883efbd265512a</id><msg>Order tab 'General' column: Organization first, compact German-formatted date row, Tenant as tooltip</msg><path><editType>edit</editType><file>app/components/sales/OrderForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><commitId>67b55a0e93a3b98c8d50c634e6c42f29d52c436d</commitId><timestamp>1789562001000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Order edit toolbar: ticket button in the app-wide yellow (same as .button.is-ticket)
</comment><date>2026-09-16 14:33:21 +0200</date><id>67b55a0e93a3b98c8d50c634e6c42f29d52c436d</id><msg>Order edit toolbar: ticket button in the app-wide yellow (same as .button.is-ticket)</msg><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/OrderQuickAddModal.vue</affectedPath><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><commitId>b23e90b7728a7cee87ddf690a385dde8403b453d</commitId><timestamp>1789562270000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Order edit: no stale 'Abort' button when opening an order

- loadOrderData() resets the global useActiveSave flag before loading — a
  fresh record has nothing unsaved; the flag is shared by every edit page and
  modal, so a leftover true (e.g. from a dismissed quick-add) showed 'Abort'
  and blocked navigation on the next order opened from the grid
- the Abort button additionally requires the form to be really dirty
  (activeSave &amp;&amp; !noEdit)
- OrderQuickAddModal clears the flag when it is closed without saving
</comment><date>2026-09-16 14:37:50 +0200</date><id>b23e90b7728a7cee87ddf690a385dde8403b453d</id><msg>Order edit: no stale 'Abort' button when opening an order</msg><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/components/OrderQuickAddModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/requests/requests/[id]/push-task-status.post.ts</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>server/api/requests/requests/[id]/push-task.post.ts</affectedPath><affectedPath>server/api/mobile/pushed-tasks.get.ts</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><affectedPath>app/composables/usePushedTasks.ts</affectedPath><commitId>f81ead42e45699211b185cc66502b6580111e91b</commitId><timestamp>1789565593000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Pushed tasks: instruction note, worker actions, take-back and deep-link fix

Rounds out the push-to-mobile-worker flow into one coherent workflow:

- Desktop push modal: the note becomes an instruction for the worker (up to
  1000 chars) and is stored as an INTERNAL chat note "[Anweisung] …" — never
  visible to the merchant and no merchant notification. The modal shows which
  order/product is linked (rendered on the device with the instruction).
- Desktop ticket: a prominent banner while the ticket lives on a device
  ("An Mobilgerät gepusht · wartet" / "In Arbeit auf dem Mobilgerät · X"),
  a state pill in the toolbar and a "Zurückholen" button (optional take-back).
- New route [id]/push-task-status.post.ts: start → TaskStatus 20 %, return →
  IsPushedTask cleared (+ internal note, staff toast when from mobile),
  complete → IsComplete + TaskStatus 100 % + IsPushedTask cleared. push-task
  sets TaskStatus 0 %; the pending list now includes started tasks
  (TaskStatus ≠ 0 → "In Arbeit") plus linked order/product.
- Mobile ticket modal for a pushed task: instruction card, order/product
  cards, "Timer starten" (keeps the task in the list as "In Arbeit"),
  "Arbeit abschließen" (stops the timer, books the time, completes and hands
  the ticket back to the desktop) and "Zurück an Desktop" (optional reason).
  Full history collapsed behind "Verlauf anzeigen".
- Dashboard banner separates new vs. "in Arbeit" pushed tasks.
- Fix: opening a pushed task from the dashboard again after leaving the
  keep-alive'd tasks page re-showed the state it was left in (wizard step,
  open list). Deep links are now handled on every activation/query change
  and reset the page first (a running timer is never discarded).
</comment><date>2026-09-16 15:33:13 +0200</date><id>f81ead42e45699211b185cc66502b6580111e91b</id><msg>Pushed tasks: instruction note, worker actions, take-back and deep-link fix</msg><path><editType>edit</editType><file>server/api/mobile/pushed-tasks.get.ts</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path><path><editType>edit</editType><file>app/composables/usePushedTasks.ts</file></path><path><editType>add</editType><file>server/api/requests/requests/[id]/push-task-status.post.ts</file></path><path><editType>edit</editType><file>server/api/requests/requests/[id]/push-task.post.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><commitId>a05516e158e1274739e9bf16292acf5114274e7f</commitId><timestamp>1789565721000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Ticket detail toolbar: chips + two workflow buttons + 'Weitere Aktionen' dropdown

Same pattern as the order edit toolbar: state chips (open/completed, owner,
pushed, accounted) on the left of the action group, the two workflow actions
(hand over / take back, close / reopen) as text buttons, and everything else
(push to mobile, take back from mobile, accounting flag, PDF report, open
full page) grouped in a data-driven "Weitere Aktionen" dropdown — so the bar
fits one row in the split view instead of a wall of buttons.
</comment><date>2026-09-16 15:35:21 +0200</date><id>a05516e158e1274739e9bf16292acf5114274e7f</id><msg>Ticket detail toolbar: chips + two workflow buttons + 'Weitere Aktionen' dropdown</msg><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/offers/LeadQuestionnaireModal.vue</affectedPath><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>server/utils/offers/questionnairePdf.ts</affectedPath><affectedPath>app/utils/leadQuestionnaire.ts</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>server/api/offers/questionnaire/pdf.post.ts</affectedPath><affectedPath>server/utils/offers/offerConditions.ts</affectedPath><affectedPath>server/api/offers/questionnaire/save.post.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>6556f77238142892a52f9c9b0e26663c42a909e6</commitId><timestamp>1789568496000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead questionnaire: initial-call form (DE/EN) with blank print, draft and PDF attachment

New "Fragebogen" on the lead page (hero CTA + toolbar icon): a catalog-driven
questionnaire staff fill in while talking to a prospect — current situation,
order volume, articles (barcode, MHD, serials), additional services
(customisation, kitting, Amazon Prime/FBA/Pre-FBA), inbound &amp; storage,
organisational. German by default, EN toggle switches labels and PDF.

- Question catalog in app/utils/leadQuestionnaire.ts, shared by the modal and
  the server renderer; adding a question is one entry.
- server/utils/offers/questionnairePdf.ts (pdf-lib): blank mode = fillable
  AcroForm (text fields + check boxes) for hand-written answers, filled mode =
  drawn values; the free-notes box grows to the rest of its page.
- Routes: offers/questionnaire/pdf (render) and offers/questionnaire/save
  (answers on offer_conditions.questionnaire; with attach: filled PDF attached
  to Lead_User via Strapi + C_ContactActivity with the answer summary).
- Draft save / reopen prefilled, progress chip, conversation meta (date,
  channel, interviewer).
- Leads list: "Leerer Fragebogen" (+ EN) prints the blank form without any
  lead prefill.
- offerConditions section type widened to string (new 'questionnaire' section).
</comment><date>2026-09-16 16:21:36 +0200</date><id>6556f77238142892a52f9c9b0e26663c42a909e6</id><msg>Lead questionnaire: initial-call form (DE/EN) with blank print, draft and PDF attachment</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/utils/offers/offerConditions.ts</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path><path><editType>add</editType><file>server/api/offers/questionnaire/pdf.post.ts</file></path><path><editType>add</editType><file>app/components/offers/LeadQuestionnaireModal.vue</file></path><path><editType>add</editType><file>app/utils/leadQuestionnaire.ts</file></path><path><editType>add</editType><file>server/api/offers/questionnaire/save.post.ts</file></path><path><editType>add</editType><file>server/utils/offers/questionnairePdf.ts</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><commitId>84f6e38b0d2d238419af49bc604a98c97074e6f0</commitId><timestamp>1789568496000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Android app 1.0.50 (versionCode 51): Mobile Push Tasks release
</comment><date>2026-09-16 16:21:36 +0200</date><id>84f6e38b0d2d238419af49bc604a98c97074e6f0</id><msg>Android app 1.0.50 (versionCode 51): Mobile Push Tasks release</msg><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/plugins/20.native-push.client.ts</affectedPath><commitId>ed5155594b06a3de2a0b937148dc0a67bc965024</commitId><timestamp>1789574610000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Pushed tasks: refresh the mobile dashboard live on a foreground push

Android hands a foreground FCM message to the app without a tray
notification, so a worker sitting on the dashboard saw nothing until they
left and came back. The native plugin now refetches the pushed-task list on
a 'pushed_task' receipt, plays the warning feedback and shows a toast.
</comment><date>2026-09-16 18:03:30 +0200</date><id>ed5155594b06a3de2a0b937148dc0a67bc965024</id><msg>Pushed tasks: refresh the mobile dashboard live on a foreground push</msg><path><editType>edit</editType><file>app/plugins/20.native-push.client.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><commitId>4931f7663993c142be7e4ed09071c1b04489782c</commitId><timestamp>1789574610000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Pushed tasks: neutral dashboard banner with urgency tags, native refresh poll

The banner stays sticky at the top but drops the red block: rows are neutral
and only priority 1 (Dringend) / 3 (Hoch) carry a tag. The native app adds a
60 s refetch while the dashboard is visible as a safety net for missed pushes.
The desktop "Gepusht · wartet" pill uses the blue working-state colours.
</comment><date>2026-09-16 18:03:30 +0200</date><id>4931f7663993c142be7e4ed09071c1b04489782c</id><msg>Pushed tasks: neutral dashboard banner with urgency tags, native refresh poll</msg><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>app/composables/usePushedTasks.ts</affectedPath><affectedPath>server/api/mobile/pushed-tasks.get.ts</affectedPath><commitId>82990a75948958eacd02ef68561ba8961b52ef9d</commitId><timestamp>1789574610000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Pushed tasks: task modal — back to dashboard, return fix, linked record cards

- Closing a task opened from the dashboard/notification deep link returns to
  the dashboard (history entry replaced) instead of the new-task wizard.
- "Zurück an Desktop" confirmation replaces the action row in place (it used
  to render below the fold), books a running timer instead of refusing, and
  hands back to the dashboard afterwards.
- Linked product (thumbnail, codes, stock per locator, open shortcut), order
  (customer, ship-to, lines, shipments) and shipment (status, tracking, lines)
  are rendered as cards; the pushed-task list now carries M_InOut_ID.
- Pinned list uses neutral colours with Dringend/Hoch tags.
</comment><date>2026-09-16 18:03:30 +0200</date><id>82990a75948958eacd02ef68561ba8961b52ef9d</id><msg>Pushed tasks: task modal — back to dashboard, return fix, linked record cards</msg><path><editType>edit</editType><file>app/composables/usePushedTasks.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>edit</editType><file>server/api/mobile/pushed-tasks.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><commitId>1e77ee19cf43852966794881cd3f1642880f624d</commitId><timestamp>1789575694000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Pushed tasks: colour rows by priority tier (high red, default orange, low blue)

Dashboard banner rows and the pinned list now carry the ticket's priority
tier on border/background plus a solid tag: 1/3 (Urgent/High) red, 5 (the
default) orange, 7/9 (Low/Minor) light blue. Theme tokens only, so dark mode
follows automatically.
</comment><date>2026-09-16 18:21:34 +0200</date><id>1e77ee19cf43852966794881cd3f1642880f624d</id><msg>Pushed tasks: colour rows by priority tier (high red, default orange, low blue)</msg><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>738</buildNumber><marked><SHA1>c11453c0e75288e9d497bff9644e55c9541eafea</SHA1><branch><SHA1>c11453c0e75288e9d497bff9644e55c9541eafea</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>c11453c0e75288e9d497bff9644e55c9541eafea</SHA1><branch><SHA1>c11453c0e75288e9d497bff9644e55c9541eafea</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>c11453c0e75288e9d497bff9644e55c9541eafea</SHA1><branch><SHA1>c11453c0e75288e9d497bff9644e55c9541eafea</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'></action><building>false</building><displayName>#738</displayName><duration>68685</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #738</fullDisplayName><id>738</id><inProgress>false</inProgress><keepLog>false</keepLog><number>738</number><queueId>5705</queueId><result>SUCCESS</result><timestamp>1789516800273</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/738/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/RecentCallsCard.vue</affectedPath><affectedPath>server/api/telephony/blacklist.post.ts</affectedPath><affectedPath>server/utils/telephony/blacklist.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>31601308527d637a24ce1dbb928085488affb6c8</commitId><timestamp>1789459780000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard: add call-blacklist button to Recent Calls card

Admin-only "Sperren" action per row, writes to FreePBX's astdb-based
Blacklist via AMI DBPut (no MySQL table involved) so future calls from
that number are rejected immediately.
</comment><date>2026-09-15 10:09:40 +0200</date><id>31601308527d637a24ce1dbb928085488affb6c8</id><msg>Dashboard: add call-blacklist button to Recent Calls card</msg><path><editType>add</editType><file>server/api/telephony/blacklist.post.ts</file></path><path><editType>add</editType><file>server/utils/telephony/blacklist.ts</file></path><path><editType>edit</editType><file>app/components/dashboard/RecentCallsCard.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/telephony/cdr.ts</affectedPath><affectedPath>app/components/dashboard/RecentCallsCard.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>d8620a46b42efac1131bfce361e06bb2beec307b</commitId><timestamp>1789460110000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard: always show Queue-routed calls on Recent Calls card

Previously the card only showed missed inbound + answered outbound,
so support-line calls that came in via the Queue and got answered
(possibly after a missed ring on another agent) never appeared.
Queue-routed inbound calls now always show regardless of outcome;
direct-dial inbound calls keep the missed-only behavior.
</comment><date>2026-09-15 10:15:10 +0200</date><id>d8620a46b42efac1131bfce361e06bb2beec307b</id><msg>Dashboard: always show Queue-routed calls on Recent Calls card</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/utils/telephony/cdr.ts</file></path><path><editType>edit</editType><file>app/components/dashboard/RecentCallsCard.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/sis/index.vue</affectedPath><affectedPath>server/api/sales/sis/listings.get.ts</affectedPath><affectedPath>server/utils/sisMatching.ts</affectedPath><affectedPath>server/utils/amazonSpApi.ts</affectedPath><affectedPath>server/api/sales/sis/price-update.post.ts</affectedPath><commitId>89a23e942f5ea0be7a9453c79ffef0b394b352f6</commitId><timestamp>1789462887000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>SIS: fix intermittent load hang, safen Amazon price pushes, in-flight glow

Amazon-side errors (report timeout, 429, ...) were silently triggering a
full refresh-and-retry of the whole route (report poll + matching, or a
full price push run twice) because event.context.lastIdempiereError is
only ever set by iDempiere calls — tag Amazon-origin errors and skip the
retry for them. Also: timeouts + retry-after-aware backoff on every raw
SP-API/LWA call (none had any before), parallelize the previously serial
SKU/ASIN/price chunk lookups in sisMatching.ts, a real loading
spinner/elapsed-time + client-side fetch timeout instead of a static
"Loading listings..." line, and a per-order-source push queue so rapid
per-field price pushes never burst past Amazon's ~1 req/sec limit.

Also adds the requested "knight rider" glowing border animation on a
price field while its push is in flight, handing off to the existing
success/error flash once it resolves.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_013G7aDXCyYUwGgTG81QTP8E
</comment><date>2026-09-15 11:01:27 +0200</date><id>89a23e942f5ea0be7a9453c79ffef0b394b352f6</id><msg>SIS: fix intermittent load hang, safen Amazon price pushes, in-flight glow</msg><path><editType>edit</editType><file>server/api/sales/sis/listings.get.ts</file></path><path><editType>edit</editType><file>server/utils/sisMatching.ts</file></path><path><editType>edit</editType><file>server/api/sales/sis/price-update.post.ts</file></path><path><editType>edit</editType><file>app/pages/sales/sis/index.vue</file></path><path><editType>edit</editType><file>server/utils/amazonSpApi.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/telephony/recordings/audio.get.ts</affectedPath><affectedPath>server/utils/telephony/recordings.ts</affectedPath><commitId>11e64f412c360e3e27d2d2f1e62aceee6f5f3e2f</commitId><timestamp>1789462899000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Telephony: fix call recording playback for .gsm files

Recordings served as .gsm played inconsistently in the dashboard phone
card and the contact-page recordings modal ("play does nothing" for
most, "player shows up" only for .wav/.mp3) — no browser ships a native
GSM 06.10 decoder, so the &lt;audio&gt; element just sits at
readyState=HAVE_NOTHING forever with no error event. ffmpeg (already
used to decode these same .gsm files for whisper transcription)
transcodes .gsm to mp3 server-side before streaming; .wav/.mp3 pass
through unchanged.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_013G7aDXCyYUwGgTG81QTP8E
</comment><date>2026-09-15 11:01:39 +0200</date><id>11e64f412c360e3e27d2d2f1e62aceee6f5f3e2f</id><msg>Telephony: fix call recording playback for .gsm files</msg><path><editType>edit</editType><file>server/utils/telephony/recordings.ts</file></path><path><editType>edit</editType><file>server/api/telephony/recordings/audio.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/returns/index.vue</affectedPath><commitId>e7e99c24f3437370b725c5cd1ff3b75eb198bf86</commitId><timestamp>1789463284000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Returns: add searchable Products column (line items + qty)

/sales/returns now fetches ?withLines=1 (the M_InOutLine + nested
M_Product_ID expand already used by the dashboard "Letzte Retouren"
card) and shows the returned products with their quantities inline in
a new grid column, with its own text filter — no master-detail.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_013G7aDXCyYUwGgTG81QTP8E
</comment><date>2026-09-15 11:08:04 +0200</date><id>e7e99c24f3437370b725c5cd1ff3b75eb198bf86</id><msg>Returns: add searchable Products column (line items + qty)</msg><path><editType>edit</editType><file>app/pages/sales/returns/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/inventory-desktop.vue</affectedPath><commitId>376abf176801739a3c3d427a56263898d657861c</commitId><timestamp>1789470038000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Inventory Desktop: BOM tags + exclude-BOM filter on article search

Ports the same excludeBom checkbox + BOM/JTL-BOM tags mobile/inventory.vue
already has on its article text search (server already supports both via
/api/materials/products/search?excludeBom=), but defaults the checkbox to
checked here — a physical stock count is about individually-located
articles, not kit/BOM headers, unlike the mobile default (unchecked).

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_013G7aDXCyYUwGgTG81QTP8E
</comment><date>2026-09-15 13:00:38 +0200</date><id>376abf176801739a3c3d427a56263898d657861c</id><msg>Inventory Desktop: BOM tags + exclude-BOM filter on article search</msg><path><editType>edit</editType><file>app/pages/integrations/inventory-desktop.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/print/return-label.post.ts</affectedPath><commitId>006f06ebd1f54f49f2fef962ffa4a48861c1a862</commitId><timestamp>1789482747000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Return label: enlarge header-band text for readability

Company name and date/time in the dark top band were too small against
the fill, especially on the common 74x52/56x75/102x152 label sizes.
Bumps bar height and font sizes on both sides and raises the minimum
shrink-to-fit floor for long company names.
</comment><date>2026-09-15 16:32:27 +0200</date><id>006f06ebd1f54f49f2fef962ffa4a48861c1a862</id><msg>Return label: enlarge header-band text for readability</msg><path><editType>edit</editType><file>server/api/print/return-label.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/useReturnLabelPrinter.ts</affectedPath><affectedPath>server/api/print/return-label.post.ts</affectedPath><affectedPath>app/components/NavBar.vue</affectedPath><affectedPath>app/composables/states.ts</affectedPath><affectedPath>app/components/rmas/ReturnLabelPrinterPicker.vue</affectedPath><affectedPath>app/pages/mobile/return.vue</affectedPath><affectedPath>app/pages/integrations/returns-desktop.vue</affectedPath><commitId>8e1a9966727348cffb3a45f49e81b2eebed592d5</commitId><timestamp>1789482760000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Return-label printer: org default + per-session override

Return labels no longer print per-article, so the legacy per-product
printer field (m_product.labelprinter_rma) no longer fits how they're
used. Replaces it with a printer picker in the top navbar (desktop) /
returns page header (mobile), admin-only (IsClientAdministrator), that
staff switch per working place — remembered per device via localStorage
so it survives reloads. Falls back to the org's CUST_Printer marked
"Default printer (for its type)" (printerType=lab), else the lab
printer with the smallest id.

Also fixes a bug in /api/print/return-label where an explicit body.queue
override was never actually consulted (labelPrinterId always defaulted
to a truthy 'b', winning the || before queue was checked), and
consolidates return-label printing to one request per return instead of
grouping lines by printer — a return is one label listing every article,
so the old per-product grouping could silently split one return across
multiple partial-article labels.
</comment><date>2026-09-15 16:32:40 +0200</date><id>8e1a9966727348cffb3a45f49e81b2eebed592d5</id><msg>Return-label printer: org default + per-session override</msg><path><editType>edit</editType><file>app/pages/integrations/returns-desktop.vue</file></path><path><editType>edit</editType><file>app/composables/states.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/return.vue</file></path><path><editType>edit</editType><file>server/api/print/return-label.post.ts</file></path><path><editType>edit</editType><file>app/components/NavBar.vue</file></path><path><editType>add</editType><file>app/composables/useReturnLabelPrinter.ts</file></path><path><editType>add</editType><file>app/components/rmas/ReturnLabelPrinterPicker.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/OrderForm.vue</affectedPath><commitId>70d978c5f75ce97343d7740bbd8478a2c3d7b01d</commitId><timestamp>1789482764000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Sales order edit: emphasize ship-to name over partner

On the completed-order shipping summary, the partner name was bold and
the actual ship-to location (Name/Name2) was plain text, making it easy
to misread which one the order ships to. Indents the partner row and
drops its bold, and bolds the Name/Name2 values instead.
</comment><date>2026-09-15 16:32:44 +0200</date><id>70d978c5f75ce97343d7740bbd8478a2c3d7b01d</id><msg>Sales order edit: emphasize ship-to name over partner</msg><path><editType>edit</editType><file>app/components/sales/OrderForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><commitId>c11453c0e75288e9d497bff9644e55c9541eafea</commitId><timestamp>1789483734000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>My-Tickets: fix staff replies stamped with wrong org, hiding them from limited-role customers

sendMessage() stamped new r_requestupdate rows with the replying staff
member's currently active org (logship_organization_id cookie) instead
of the ticket's own org. A limited-role customer's access is scoped to
only their own org (IsAccessAllOrgs=false), so any reply written while
staff had a different org active became invisible to them via
iDempiere's row-level security — even though the ticket itself and
their own messages stayed visible. Every other send path in this file
(accounting-flag note, assign-to-merchant, status actions) already
preferred the ticket's own org with this exact fallback; only the main
composer's sendMessage() was missing it.

Confirmed against production data: customer "stoyan" (Wonderhome) was
missing 4 of 9 staff replies on ticket 1000426, all sent while support
had a different org active.
</comment><date>2026-09-15 16:48:54 +0200</date><id>c11453c0e75288e9d497bff9644e55c9541eafea</id><msg>My-Tickets: fix staff replies stamped with wrong org, hiding them from limited-role customers</msg><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>737</buildNumber><marked><SHA1>7ccda3abf09f752e54f2ad7299b242330511d169</SHA1><branch><SHA1>7ccda3abf09f752e54f2ad7299b242330511d169</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>7ccda3abf09f752e54f2ad7299b242330511d169</SHA1><branch><SHA1>7ccda3abf09f752e54f2ad7299b242330511d169</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>7ccda3abf09f752e54f2ad7299b242330511d169</SHA1><branch><SHA1>7ccda3abf09f752e54f2ad7299b242330511d169</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'></action><building>false</building><displayName>#737</displayName><duration>71493</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #737</fullDisplayName><id>737</id><inProgress>false</inProgress><keepLog>false</keepLog><number>737</number><queueId>5701</queueId><result>SUCCESS</result><timestamp>1789430400272</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/737/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/telephony/extensions.ts</affectedPath><affectedPath>app/composables/useClickToDial.ts</affectedPath><affectedPath>app/components/DialButton.vue</affectedPath><commitId>630fc88a6a26eba7608728a395bb5fc80a4964ef</commitId><timestamp>1789370185000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dial popover: show the PBX extension name instead of the state text — server/utils/telephony/extensions.ts reads each extension's FreePBX display name from the astdb (AMI DBGet AMPUSER/&lt;ext&gt;/cidname, covered by the reporting class already granted to the logship manager user; cached 10 min per extension, fetched on the same socket as DeviceStateList, ERP user name stays the fallback), DialButton rows now read '401 Younes' with the state carried by the coloured dot + hover tooltip only, DirectoryExtension type gains pbxName
</comment><date>2026-09-14 09:16:25 +0200</date><id>630fc88a6a26eba7608728a395bb5fc80a4964ef</id><msg>Dial popover: show the PBX extension name instead of the state text — server/utils/telephony/extensions.ts reads each extension's FreePBX display name from the astdb (AMI DBGet AMPUSER/&lt;ext&gt;/cidname, covered by the reporting class already granted to the logship manager user; cached 10 min per extension, fetched on the same socket as DeviceStateList, ERP user name stays the fallback), DialButton rows now read '401 Younes' with the state carried by the coloured dot + hover tooltip only, DirectoryExtension type gains pbxName</msg><path><editType>edit</editType><file>app/composables/useClickToDial.ts</file></path><path><editType>edit</editType><file>server/utils/telephony/extensions.ts</file></path><path><editType>edit</editType><file>app/components/DialButton.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/accounting/banking/BankBackfillPanel.vue</affectedPath><affectedPath>server/api/accounting/bank-transactions/coverage.get.ts</affectedPath><affectedPath>app/assets/css/banking.css</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><affectedPath>app/pages/accounting/banking/index.vue</affectedPath><affectedPath>app/composables/menu/admin/accounting.ts</affectedPath><affectedPath>app/pages/accounting/bank-transactions/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>53342fb748940c080a9c541b0d4c1a87499d5339</commitId><timestamp>1789372209000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Bank fetch page: /accounting/bank-transactions becomes the dedicated "Bankabruf" page (fetch from the bank), replacing the duplicate staged-statements/import tables — coverage table per connection (data from/to, counts, last fetch, 12-month strip green = staged / red = never fetched, click = preselect), backfill runner for past periods (months from a coverage-aware grid with "Select missing", everything since a date, free range, single day; chunks of max 31 days so PayPal's 30-day window and the proxy timeout are respected; sequential per connection + chunk, progress bar, per-chunk log, abort, retry failed, details via the fetch-result modal, dry-run toggle, hand-off to Banking → import), connection cards kept in a collapsible section; new proxy route bank-transactions/coverage.get.ts (Laravel banking/statements/coverage, fail-soft notice when not deployed); shared bk-* styles moved from the Banking page into app/assets/css/banking.css (loaded by both pages); Banking fetch modal links to the backfill page; menu labels "Bankabruf"/"Bank Fetch"; bankfetch_* translations en/de/es
</comment><date>2026-09-14 09:50:09 +0200</date><id>53342fb748940c080a9c541b0d4c1a87499d5339</id><msg>Bank fetch page: /accounting/bank-transactions becomes the dedicated "Bankabruf" page (fetch from the bank), replacing the duplicate staged-statements/import tables — coverage table per connection (data from/to, counts, last fetch, 12-month strip green = staged / red = never fetched, click = preselect), backfill runner for past periods (months from a coverage-aware grid with "Select missing", everything since a date, free range, single day; chunks of max 31 days so PayPal's 30-day window and the proxy timeout are respected; sequential per connection + chunk, progress bar, per-chunk log, abort, retry failed, details via the fetch-result modal, dry-run toggle, hand-off to Banking → import), connection cards kept in a collapsible section; new proxy route bank-transactions/coverage.get.ts (Laravel banking/statements/coverage, fail-soft notice when not deployed); shared bk-* styles moved from the Banking page into app/assets/css/banking.css (loaded by both pages); Banking fetch modal links to the backfill page; menu labels "Bankabruf"/"Bank Fetch"; bankfetch_* translations en/de/es</msg><path><editType>add</editType><file>app/components/accounting/banking/BankBackfillPanel.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/banking/index.vue</file></path><path><editType>add</editType><file>server/api/accounting/bank-transactions/coverage.get.ts</file></path><path><editType>add</editType><file>app/assets/css/banking.css</file></path><path><editType>edit</editType><file>app/composables/menu/admin/accounting.ts</file></path><path><editType>edit</editType><file>app/pages/accounting/bank-transactions/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/RecentCallsCard.vue</affectedPath><affectedPath>app/components/dashboard/QuickContactModal.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>f810d698d77298b9a9a8e0a18b8ea93623b496bc</commitId><timestamp>1789372736000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard calls card: '+' on unmatched numbers → quick-create contact modal — new components/dashboard/QuickContactModal.vue (teleported; name required + autofocused, phone preset from the call row incl. PBX caller-id name, optional e-mail and 'als Lead anlegen' flag; creates a plain ad_user via /api/admin/users/store, not a system user, current org); RecentCallsCard remembers checked-but-unmatched numbers (null entries) so the '+' only shows after the ES match finished, and stores the created user as the number's contact locally so the row flips to the contact menu without waiting for the ad_user index sync; rcc_add_contact/qcm_* translations en/de/es
</comment><date>2026-09-14 09:58:56 +0200</date><id>f810d698d77298b9a9a8e0a18b8ea93623b496bc</id><msg>Dashboard calls card: '+' on unmatched numbers → quick-create contact modal — new components/dashboard/QuickContactModal.vue (teleported; name required + autofocused, phone preset from the call row incl. PBX caller-id name, optional e-mail and 'als Lead anlegen' flag; creates a plain ad_user via /api/admin/users/store, not a system user, current org); RecentCallsCard remembers checked-but-unmatched numbers (null entries) so the '+' only shows after the ES match finished, and stores the created user as the number's contact locally so the row flips to the contact menu without waiting for the ad_user index sync; rcc_add_contact/qcm_* translations en/de/es</msg><path><editType>edit</editType><file>app/components/dashboard/RecentCallsCard.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>app/components/dashboard/QuickContactModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/commission/parcels/dhl/multi.post.ts</affectedPath><affectedPath>server/api/commission/parcels/dhl/index.post.ts</affectedPath><affectedPath>server/api/commission/parcels/dpd/multi.post.ts</affectedPath><affectedPath>server/api/commission/parcels/dpd/index.post.ts</affectedPath><commitId>e644ded9fd4885ca7e5be18f1d3c638d0b687e12</commitId><timestamp>1789373944000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>DPD labels: carry address2 (Adresszusatz) like DHL — dpd/index + dpd/multi now map body.address2 into the recipient: name2 when no company/c/o is set, otherwise the company keeps name2 and address2 goes to contact (the only other printed DPD line, 35 chars), plus a data-only comment mirror (70); &lt;contact&gt; emitted after &lt;city&gt; and &lt;comment&gt; after &lt;email&gt; per the DPD XSD order. DHL index/multi cap consignee name2/name3 at 50 chars so over-long values are truncated instead of rejected. Frontend unchanged (commission.vue already sends both fields to both carriers).
</comment><date>2026-09-14 10:19:04 +0200</date><id>e644ded9fd4885ca7e5be18f1d3c638d0b687e12</id><msg>DPD labels: carry address2 (Adresszusatz) like DHL — dpd/index + dpd/multi now map body.address2 into the recipient: name2 when no company/c/o is set, otherwise the company keeps name2 and address2 goes to contact (the only other printed DPD line, 35 chars), plus a data-only comment mirror (70); &lt;contact&gt; emitted after &lt;city&gt; and &lt;comment&gt; after &lt;email&gt; per the DPD XSD order. DHL index/multi cap consignee name2/name3 at 50 chars so over-long values are truncated instead of rejected. Frontend unchanged (commission.vue already sends both fields to both carriers).</msg><path><editType>edit</editType><file>server/api/commission/parcels/dpd/index.post.ts</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dhl/multi.post.ts</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dhl/index.post.ts</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dpd/multi.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/telephony/transcriptionResponse.ts</affectedPath><affectedPath>server/api/telephony/recordings/transcribe-status.get.ts</affectedPath><affectedPath>server/api/telephony/recordings/transcribe.post.ts</affectedPath><affectedPath>app/components/telephony/CallRecordingsModal.vue</affectedPath><affectedPath>server/utils/telephony/recordings.ts</affectedPath><commitId>72610850d43102cc0e14ac7cf6ef1b5db716ace6</commitId><timestamp>1789375913000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Call recordings: async whisper transcription — transcribe.post.ts starts the job, waits max 20 s and answers 202 pending for anything longer (the edge nginx cuts requests at 60 s, long calls used to 504 while whisper kept running); new transcribe-status.get.ts polls the disk state (pending marker &lt;file&gt;.pending.json shared across PM2 instances, cache file = done, marker error = failed); shared statusResponse() in transcriptionResponse.ts; CallRecordingsModal polls every 3 s up to 25 min and shows the elapsed time
</comment><date>2026-09-14 10:51:53 +0200</date><id>72610850d43102cc0e14ac7cf6ef1b5db716ace6</id><msg>Call recordings: async whisper transcription — transcribe.post.ts starts the job, waits max 20 s and answers 202 pending for anything longer (the edge nginx cuts requests at 60 s, long calls used to 504 while whisper kept running); new transcribe-status.get.ts polls the disk state (pending marker &lt;file&gt;.pending.json shared across PM2 instances, cache file = done, marker error = failed); shared statusResponse() in transcriptionResponse.ts; CallRecordingsModal polls every 3 s up to 25 min and shows the elapsed time</msg><path><editType>add</editType><file>server/api/telephony/recordings/transcribe-status.get.ts</file></path><path><editType>edit</editType><file>server/api/telephony/recordings/transcribe.post.ts</file></path><path><editType>add</editType><file>server/utils/telephony/transcriptionResponse.ts</file></path><path><editType>edit</editType><file>app/components/telephony/CallRecordingsModal.vue</file></path><path><editType>edit</editType><file>server/utils/telephony/recordings.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/~$roadsurfer_Fulfillment_Anfrage_Preisblatt_LogYou.xlsx</affectedPath><affectedPath>reference/roadsurfer_Fulfillment_Anfrage_Preisblatt_LogYou.xlsx</affectedPath><commitId>14d0e08b8c0a28cd535aeb98b9273a2ce1dfb557</commitId><timestamp>1789375913000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Roadsurfer price sheet: update workbook, drop stray Excel lock file
</comment><date>2026-09-14 10:51:53 +0200</date><id>14d0e08b8c0a28cd535aeb98b9273a2ce1dfb557</id><msg>Roadsurfer price sheet: update workbook, drop stray Excel lock file</msg><path><editType>delete</editType><file>reference/~$roadsurfer_Fulfillment_Anfrage_Preisblatt_LogYou.xlsx</file></path><path><editType>edit</editType><file>reference/roadsurfer_Fulfillment_Anfrage_Preisblatt_LogYou.xlsx</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/amazon-ads/connect.get.ts</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>server/api/accounting/amazon-ads/document.get.ts</affectedPath><affectedPath>server/api/accounting/amazon-ads/import.post.ts</affectedPath><affectedPath>server/api/accounting/amazon-ads/disconnect.post.ts</affectedPath><affectedPath>server/utils/amazonAds/types.ts</affectedPath><affectedPath>.env-dev</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>server/api/invoices/lexoffice-upload.post.ts</affectedPath><affectedPath>server/api/accounting/amazon-ads/status.get.ts</affectedPath><affectedPath>server/api/oauth/amazon-ads/callback.get.ts</affectedPath><affectedPath>app/components/AgGrid.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>server/utils/amazonAds/routeShared.ts</affectedPath><affectedPath>server/utils/amazonAds/importInvoice.ts</affectedPath><affectedPath>server/utils/amazonAds/adsApi.ts</affectedPath><affectedPath>server/utils/amazonAds/parseInvoicePdf.ts</affectedPath><affectedPath>server/api/accounting/amazon-ads/profile.put.ts</affectedPath><affectedPath>.env</affectedPath><affectedPath>reference/INVOICE-503111M5PA26.pdf</affectedPath><affectedPath>app/pages/accounting/amazon-ads-invoices/index.vue</affectedPath><affectedPath>server/utils/invoiceOriginalPdf.ts</affectedPath><affectedPath>server/api/accounting/amazon-ads/invoices.get.ts</affectedPath><affectedPath>reference/test-scripts/amazon-ads-parse.mjs</affectedPath><affectedPath>server/api/accounting/amazon-ads/upload.post.ts</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><affectedPath>server/api/accounting/amazon-ads/profiles.get.ts</affectedPath><affectedPath>server/utils/amazonAds/adsStore.ts</affectedPath><affectedPath>app/composables/menu/admin/accounting.ts</affectedPath><affectedPath>server/api/accounting/amazon-ads/void.post.ts</affectedPath><affectedPath>.env-prod</affectedPath><commitId>0f630bc593490f322597f096f15bc84851b5a3c0</commitId><timestamp>1789375913000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon Ads invoices → Eingangsrechnungen: new page /accounting/amazon-ads-invoices lists Sponsored-Ads invoices (Amazon Ads API when connected — LWA consent flow, profile picker, GET /invoices + /invoices/{id} + /billing/documents PDF — or console PDFs dropped on the page and parsed server-side), lets the user tick which ones to import and books each as a completed AP invoice on the fixed vendor 1043801 (org *): one charge line per campaign (default charge Werbekosten), tax by rate so GrandTotal = Amazon gross, DocumentNo/POReference = Amazon invoice no., duplicate guard, original Amazon PDF attached under PO_Invoice; Storno action voids + renames the number (&lt;no&gt;-VOID-&lt;id&gt;) so the same invoice can be re-imported; booked/Lexoffice status comes from iDempiere (vendor AP invoices matched by number). Lexoffice upload: purchase invoices now upload the attached vendor original instead of the Jasper print (no ZUGFeRD on foreign documents) and requireOriginal:true skips invoices without one (used by the Ads page). Store data/amazon-ads.db + PDF cache data/amazon-ads/ (git-ignored); AMAZON_ADS_* env keys (empty = PDF-upload mode until the Ads API approval exists); AgGrid wrapper registers RowGroupingPanelModule (error #200 on every grid page); menu + en/de/es labels; parser dev script reference/test-scripts/amazon-ads-parse.mjs + sample invoice
</comment><date>2026-09-14 10:51:53 +0200</date><id>0f630bc593490f322597f096f15bc84851b5a3c0</id><msg>Amazon Ads invoices → Eingangsrechnungen: new page /accounting/amazon-ads-invoices lists Sponsored-Ads invoices (Amazon Ads API when connected — LWA consent flow, profile picker, GET /invoices + /invoices/{id} + /billing/documents PDF — or console PDFs dropped on the page and parsed server-side), lets the user tick which ones to import and books each as a completed AP invoice on the fixed vendor 1043801 (org *): one charge line per campaign (default charge Werbekosten), tax by rate so GrandTotal = Amazon gross, DocumentNo/POReference = Amazon invoice no., duplicate guard, original Amazon PDF attached under PO_Invoice; Storno action voids + renames the number (&lt;no&gt;-VOID-&lt;id&gt;) so the same invoice can be re-imported; booked/Lexoffice status comes from iDempiere (vendor AP invoices matched by number). Lexoffice upload: purchase invoices now upload the attached vendor original instead of the Jasper print (no ZUGFeRD on foreign documents) and requireOriginal:true skips invoices without one (used by the Ads page). Store data/amazon-ads.db + PDF cache data/amazon-ads/ (git-ignored); AMAZON_ADS_* env keys (empty = PDF-upload mode until the Ads API approval exists); AgGrid wrapper registers RowGroupingPanelModule (error #200 on every grid page); menu + en/de/es labels; parser dev script reference/test-scripts/amazon-ads-parse.mjs + sample invoice</msg><path><editType>add</editType><file>server/api/accounting/amazon-ads/void.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/api/accounting/amazon-ads/upload.post.ts</file></path><path><editType>add</editType><file>server/utils/amazonAds/adsApi.ts</file></path><path><editType>edit</editType><file>.env-prod</file></path><path><editType>edit</editType><file>server/api/invoices/lexoffice-upload.post.ts</file></path><path><editType>add</editType><file>server/utils/amazonAds/importInvoice.ts</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>add</editType><file>server/api/accounting/amazon-ads/connect.get.ts</file></path><path><editType>add</editType><file>server/api/accounting/amazon-ads/status.get.ts</file></path><path><editType>edit</editType><file>app/components/AgGrid.vue</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>add</editType><file>server/api/accounting/amazon-ads/invoices.get.ts</file></path><path><editType>add</editType><file>server/api/accounting/amazon-ads/profiles.get.ts</file></path><path><editType>add</editType><file>app/pages/accounting/amazon-ads-invoices/index.vue</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>add</editType><file>server/api/accounting/amazon-ads/import.post.ts</file></path><path><editType>add</editType><file>server/api/accounting/amazon-ads/document.get.ts</file></path><path><editType>add</editType><file>reference/INVOICE-503111M5PA26.pdf</file></path><path><editType>add</editType><file>server/api/accounting/amazon-ads/disconnect.post.ts</file></path><path><editType>add</editType><file>reference/test-scripts/amazon-ads-parse.mjs</file></path><path><editType>add</editType><file>server/api/oauth/amazon-ads/callback.get.ts</file></path><path><editType>add</editType><file>server/utils/amazonAds/types.ts</file></path><path><editType>add</editType><file>server/utils/amazonAds/routeShared.ts</file></path><path><editType>edit</editType><file>app/composables/menu/admin/accounting.ts</file></path><path><editType>add</editType><file>server/utils/amazonAds/adsStore.ts</file></path><path><editType>add</editType><file>server/api/accounting/amazon-ads/profile.put.ts</file></path><path><editType>add</editType><file>server/utils/invoiceOriginalPdf.ts</file></path><path><editType>edit</editType><file>.env</file></path><path><editType>edit</editType><file>.env-dev</file></path><path><editType>add</editType><file>server/utils/amazonAds/parseInvoicePdf.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/RecentCallsCard.vue</affectedPath><affectedPath>server/api/admin/users/search.get.ts</affectedPath><affectedPath>app/components/dashboard/QuickContactModal.vue</affectedPath><affectedPath>app/pages/sales/orders/[id]/view.vue</affectedPath><affectedPath>server/utils/telephony/cdr.ts</affectedPath><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>server/api/telephony/recent-calls.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>b99b7ac21f59acb46845cd37905cf64ad2f389e4</commitId><timestamp>1789378079000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Sales order ship-to name + dashboard calls card improvements

Sales orders: edit.vue only fetched order data in onMounted, so switching
between order tabs via the in-app tab bar (router.push into the same
keep-alive'd component, only :id changes) kept showing the previously loaded
order's data — including its business partner — until a hard reload. Added a
route.params.id watcher (loadOrderData()) mirroring the existing fix on
sales/invoices and sales/customer-rma edit pages. Also added the ship-to
recipient name (C_BPartner_Location_ID.Name — the same field the orders grid
shows as "Name", which can legitimately differ from the business partner's
own Name) to the read-only order view.vue page, which was missing it
entirely; edit.vue's OrderForm.vue already displayed it correctly.

Dashboard "Letzte Anrufe" card: the extension badge and duration/missed
label were side-by-side in a fixed-width column that could overflow into
neighboring text. Stacked them vertically instead and gave rows a bit more
height. Added server-side search (number/name) and pagination — cdr.ts's
recentCalls() now takes offset/search/direction and returns total +
missedTotal (so the missed-count badge stays accurate regardless of the
active direction tab or page).

Quick-contact modal (dashboard "+" on unmatched calls): added a "search
existing contact" panel above the create-new form, so a call can be linked
to an existing ad_user/lead instead of always creating a duplicate. Scoped
to the caller's own organization by default ("search all organizations" to
widen), with a type filter (All/Lead/External/Internal) mirroring the
site's existing Users/Leads/External Users split. New
GET /api/admin/users/search endpoint backs it; picking a result only PUTs
the call's phone number onto the existing contact when it isn't already on
file, to avoid clobbering an existing different number.
</comment><date>2026-09-14 11:27:59 +0200</date><id>b99b7ac21f59acb46845cd37905cf64ad2f389e4</id><msg>Sales order ship-to name + dashboard calls card improvements</msg><path><editType>edit</editType><file>app/pages/sales/orders/[id]/view.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>server/api/telephony/recent-calls.get.ts</file></path><path><editType>add</editType><file>server/api/admin/users/search.get.ts</file></path><path><editType>edit</editType><file>app/components/dashboard/QuickContactModal.vue</file></path><path><editType>edit</editType><file>app/components/dashboard/RecentCallsCard.vue</file></path><path><editType>edit</editType><file>server/utils/telephony/cdr.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/invoices/index.vue</affectedPath><affectedPath>app/components/sales/InvoiceListFilters.vue</affectedPath><affectedPath>app/components/sales/InvoiceAction.vue</affectedPath><affectedPath>app/components/AgGrid/Invoices/AgInvoiceKind.vue</affectedPath><affectedPath>server/api/invoices/so.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>852e5a139e7dc3c8d4e43fa24f46d603c71b710d</commitId><timestamp>1789379089000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Sales invoices: merge in purchase (AP) invoices, incl. Amazon Ads imports

server/api/invoices/so.get.ts dropped its IsSOTrx-only filter (kept the
existing DocStatus CO/CL/DR restriction) so /sales/invoices now returns both
sales and purchase invoices — including the Amazon Ads AP invoices booked via
/accounting/amazon-ads-invoices, which land in c_invoice like any other
vendor invoice. Route name/URL kept as-is to avoid touching every caller.

New "Type" grid column (AgInvoiceKind.vue) tags each row AR/AR-CM/AP/AP-CM
from C_Invoice.DocBaseType (the same field lexoffice-upload.post.ts already
keys its AR/AP branching on), right after the document-number column.

InvoiceListFilters.vue gained two segmented filters: Receivables/Payables
(side, derived from IsSOTrx / the C_DocTypeTarget_ID 1000006 "AP CreditMemo
used as a customer credit note" exception — same convention as
accounting/opos) and Lexoffice upload status (uploaded/not uploaded), both
applied client-side alongside the existing fulfillment/payment/amount
filters so the grand-total row and counts stay consistent.

The existing bulk Lexoffice upload button needed no changes — the shared
lexoffice-upload.post.ts route already branches on DocBaseType per invoice
(original vendor PDF for AP, Jasper print for AR) and processes mixed AR/AP
id batches correctly; it just never had AP rows to select from before.

Fixed InvoiceAction.vue's row-menu edit/duplicate handlers, which always
navigated to the sales-invoice pages — now they branch on isSOTrx to
/procurements/invoices/{id}/{edit,duplicate} for AP rows, matching the
branching AgLink.vue's document-number link already had.

Note: this route has no $top cap (pre-existing), so removing the AR-only
restriction roughly doubles the worst-case row count for orgs with a long
purchase-invoice history — worth watching if the page gets sluggish.
</comment><date>2026-09-14 11:44:49 +0200</date><id>852e5a139e7dc3c8d4e43fa24f46d603c71b710d</id><msg>Sales invoices: merge in purchase (AP) invoices, incl. Amazon Ads imports</msg><path><editType>edit</editType><file>app/pages/sales/invoices/index.vue</file></path><path><editType>edit</editType><file>app/components/sales/InvoiceAction.vue</file></path><path><editType>edit</editType><file>server/api/invoices/so.get.ts</file></path><path><editType>edit</editType><file>app/components/sales/InvoiceListFilters.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>app/components/AgGrid/Invoices/AgInvoiceKind.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><commitId>9b08ac127dfe1f98967ced8227f64c07868a1db3</commitId><timestamp>1789379322000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page: move Aufnahmen button out of the offer/contract CTA group

The "Aufnahmen" (call recordings) button sat in the top-right CTA cluster
alongside Angebot/Vertrag/SEPA/Onboarding, but it isn't part of that
offer/contract workflow — it's phone-call history. Moved it next to the
phone number / DialButton in the contact-chips row instead, gated on the
lead having a phone number (nothing to match recordings against otherwise).
The compact top-toolbar icon button (MobileActionsMenu) already had its own
"Aufnahmen" entry and is unchanged.
</comment><date>2026-09-14 11:48:42 +0200</date><id>9b08ac127dfe1f98967ced8227f64c07868a1db3</id><msg>Lead page: move Aufnahmen button out of the offer/contract CTA group</msg><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/RecentCallsCard.vue</affectedPath><affectedPath>app/components/DialButton.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>39f1dfd5739eef2e6173ff543b20fba47bca5fa3</commitId><timestamp>1789379675000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>DialButton: opt-in Recordings toggle (play-only) in the dial popover

Adds a showRecordings prop that puts a headset icon in the popover header
next to Close. Toggling it switches the popover body to a compact list of
FreePBX recordings matched to `number` (GET /api/telephony/recordings, same
endpoint CallRecordingsModal.vue uses on contact pages, called here with
just `numbers` — no source/recordId, so it works for numbers with no known
contact too) — date, direction, duration and a play button only, no
transcription/download clutter. Off by default everywhere; enabled on both
DialButton usages in the dashboard's "Letzte Anrufe" card, so clicking a
call's number now offers a quick way to listen to past recordings for that
number right from the dial popover.
</comment><date>2026-09-14 11:54:35 +0200</date><id>39f1dfd5739eef2e6173ff543b20fba47bca5fa3</id><msg>DialButton: opt-in Recordings toggle (play-only) in the dial popover</msg><path><editType>edit</editType><file>app/components/dashboard/RecentCallsCard.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/DialButton.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/RecentCallsCard.vue</affectedPath><commitId>3a2aa7e776b1ecd670ff8e1f0abb8a4de7311b04</commitId><timestamp>1789379818000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Recent calls card: stack date above number, give the name its own full line

The date used to be its own fixed 62px grid column, squeezing how much
width the number/name column got. Moved it to sit above the number instead
(inside the same column), so the name — which can run considerably longer
than the number — gets the full row width on its own line rather than
sharing it with a separate date column.
</comment><date>2026-09-14 11:56:58 +0200</date><id>3a2aa7e776b1ecd670ff8e1f0abb8a4de7311b04</id><msg>Recent calls card: stack date above number, give the name its own full line</msg><path><editType>edit</editType><file>app/components/dashboard/RecentCallsCard.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/materials/locators/priority-recommendations.get.ts</affectedPath><commitId>d9627b7266e6432d9febb322babb26fcc4f62970</commitId><timestamp>1789380713000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Locator priorities: exclude locators not allowed for shipping

M_LocatorType.IsAvailableForShipping=false locators (return bins,
quarantine, reconditioning input, ...) are dropped before building
pick-order conflicts/proposals, since shipment generation never picks
from them anyway.
</comment><date>2026-09-14 12:11:53 +0200</date><id>d9627b7266e6432d9febb322babb26fcc4f62970</id><msg>Locator priorities: exclude locators not allowed for shipping</msg><path><editType>edit</editType><file>server/api/materials/locators/priority-recommendations.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/DialButton.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>c1fb76e4b48ea72b198182db778fce1fb2a4892b</commitId><timestamp>1789383931000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>DialButton: fix recordings that appeared to play but stayed silent

Chrome's &lt;audio&gt; element does not behave like a normal failed request when
the recordings route errors out (e.g. the PBX recordings service returns a
JSON error body instead of audio): no 'error' event ever fires and
.play()'s promise never settles either — it just sits at
networkState=LOADING/readyState=HAVE_NOTHING with paused=false forever.
Since the row's play/stop icon was driven only by a manually-toggled ref,
a failed load looked exactly like "still playing" with no sound and no
way to tell it failed. Add a stall-timeout guard (6s) that aborts the
hung request, resets the button and shows an inline error message when
playable data never arrives; canplay/playing clear the timer on success.
</comment><date>2026-09-14 13:05:31 +0200</date><id>c1fb76e4b48ea72b198182db778fce1fb2a4892b</id><msg>DialButton: fix recordings that appeared to play but stayed silent</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/DialButton.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/AgGrid/Invoices/AgInvoiceKind.vue</affectedPath><commitId>182290a4e2c2f6c96174f4a55e9d7c30acf5855c</commitId><timestamp>1789383938000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>AgInvoiceKind: fix AP/AR tags never actually getting their colors

The tag colors never rendered: this component is used as an AG Grid
cellRenderer, and its &lt;style scoped&gt; block never reached the rendered
elements (they carried no data-v-* attribute at all), so every tag
silently fell back to Bulma's plain grey .tag look regardless of AR/AP/
credit-memo type — the same gap already documented for AG Grid image
cell renderers. Move the styling to a non-scoped block keyed off a
dedicated .ag-ikind-tag marker class (so it can't leak onto the many
other Bulma .tag elements elsewhere in the app), and switch from thin
outlined tags to solid-filled ones so AP vs AR reads at a glance while
scanning a long invoice grid.
</comment><date>2026-09-14 13:05:38 +0200</date><id>182290a4e2c2f6c96174f4a55e9d7c30acf5855c</id><msg>AgInvoiceKind: fix AP/AR tags never actually getting their colors</msg><path><editType>edit</editType><file>app/components/AgGrid/Invoices/AgInvoiceKind.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/invoices/lexoffice-upload.post.ts</affectedPath><affectedPath>app/components/sales/LexofficeCategoryModal.vue</affectedPath><commitId>3648fbba0e22b85d8209ea8ec5b961f204aff7e9</commitId><timestamp>1789383946000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lexoffice upload: default AP invoices into Ausgaben, not the general inbox

Without an explicit category, uploads went through Lexoffice's plain
Files-drop, which auto-creates its own uncategorized draft voucher — it
never lands as a filed Einnahmen/Ausgaben entry, just a general/pending
item in Lexoffice's own inbox. AR invoices only looked correctly filed
under Einnahmen because someone picked a category for them every time,
which goes through the Vouchers API instead.

Add a third modal option, "Mit Standardkategorie hochladen": books a
real voucher via the same Vouchers API as an explicit category, using a
generic catch-all per direction (Einnahmen for AR/AR-CM, Sonstige
Ausgaben for AP/AP-CM) resolved per invoice so a mixed bulk upload still
files each one correctly. The true "Ohne Kategorie hochladen" (plain,
uncategorized Files-drop) option is unchanged and still available.

Also fixes APC (AP credit memo) incorrectly booking as voucher type
purchaseinvoice instead of purchasecreditnote.
</comment><date>2026-09-14 13:05:46 +0200</date><id>3648fbba0e22b85d8209ea8ec5b961f204aff7e9</id><msg>Lexoffice upload: default AP invoices into Ausgaben, not the general inbox</msg><path><editType>edit</editType><file>app/components/sales/LexofficeCategoryModal.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/assets/langs/shared.js</affectedPath><affectedPath>app/pages/accounting/bank-transactions/index.vue</affectedPath><commitId>d7464e740863297d158a64b96ec8573d0e755371</commitId><timestamp>1789391406000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Bank fetch coverage: show import progress per month, not just staged

Coverage cells only reflected whether any statement was staged for a
month; add the imported/open counts the coverage endpoint already
returns so a month reads green only once fully imported, amber while
partially imported, with the count shown. Also surface the imported
count as a pill on the connection row, next to the existing pending one.
</comment><date>2026-09-14 15:10:06 +0200</date><id>d7464e740863297d158a64b96ec8573d0e755371</id><msg>Bank fetch coverage: show import progress per month, not just staged</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/accounting/bank-transactions/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.env-dev</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>server/api/telephony/cid-lookup/[number].get.ts</affectedPath><affectedPath>server/utils/elasticHelper.ts</affectedPath><affectedPath>.env</affectedPath><affectedPath>.env-prod</affectedPath><commitId>3c67c7ed036f479cad2a91044c687bb5dbfbe6a4</commitId><timestamp>1789399518000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Add asterisk lookup endpoint

Squashed to drop an accidentally committed 134MB HAR capture file
that was blocking the push (GitHub's 100MB file size limit); also
gitignore *.har so this can't recur.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_013G7aDXCyYUwGgTG81QTP8E
</comment><date>2026-09-14 17:25:18 +0200</date><id>3c67c7ed036f479cad2a91044c687bb5dbfbe6a4</id><msg>Add asterisk lookup endpoint</msg><path><editType>edit</editType><file>.env-prod</file></path><path><editType>edit</editType><file>.env-dev</file></path><path><editType>edit</editType><file>.env</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>add</editType><file>server/api/telephony/cid-lookup/[number].get.ts</file></path><path><editType>edit</editType><file>server/utils/elasticHelper.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/offers/conditions/index.post.ts</affectedPath><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>0d5c36c95d22b6066ed5d0718459bb0e6e13c578</commitId><timestamp>1789403035000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quote: configurable grading pricing (time/fixed + description) and save-draft button

Grading is now priced by time/effort or a fixed price with a freetext
description printed as a subtext, instead of a flat by-effort checkbox.
Also adds a Save button on the quote modal to persist offer_conditions
without sending the quote.
</comment><date>2026-09-14 18:23:55 +0200</date><id>0d5c36c95d22b6066ed5d0718459bb0e6e13c578</id><msg>Quote: configurable grading pricing (time/fixed + description) and save-draft button</msg><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/api/offers/conditions/index.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>server/utils/offers/offerConditions.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><commitId>26efb3a1498df891c0853f9e44aae23876a7713c</commitId><timestamp>1789403770000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quote: customer-requirements checklist; dashboard: leads card quick actions

Add a "Kundenanforderungen" section to the quote modal — freetext bullet
points each answered possible/not possible (green check / red X) or with
a freetext answer, printed as a checklist in the PDF.

Also add "create lead" and "open all leads" icon buttons to the dashboard's
latest-leads card header.
</comment><date>2026-09-14 18:36:10 +0200</date><id>26efb3a1498df891c0853f9e44aae23876a7713c</id><msg>Quote: customer-requirements checklist; dashboard: leads card quick actions</msg><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>server/utils/offers/offerConditions.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/oauth/amazon/test-connection.post.ts</affectedPath><affectedPath>app/components/settings/OrderSourceForm.vue</affectedPath><affectedPath>.env-prod</affectedPath><commitId>82e20b0c80024eabe37fea705ff9d11134cfbf58</commitId><timestamp>1789417063000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon: switch central OAuth app to Published, fix test-connection + credential UI

Order source 1000026 stopped importing because the previous central Amazon app
("logship", Draft) hit its mandatory 180-day LWA Client Secret rotation deadline
(2026-09-12) — LWA still authenticated fine, but every SP-API call was denied.
Reconnecting the seller's own authorization doesn't rotate the app's secret, so
that never fixed it. Standardized the central app on "LogShip App" (Published)
instead, matching what order source 1000000 already used successfully.

Also:
- test-connection.post.ts: report failure (with Amazon's real error text) when
  every SP-API endpoint is denied, instead of always defaulting to a misleading
  "missing Tax Invoicing role" message.
- OrderSourceForm.vue: hide the raw Client ID / Client Secret / Refresh Token
  fields for Amazon by default (Connect/Reconnect manages them automatically);
  only reveal them behind an explicit "uses its own separate Amazon Developer
  app" toggle.
</comment><date>2026-09-14 22:17:43 +0200</date><id>82e20b0c80024eabe37fea705ff9d11134cfbf58</id><msg>Amazon: switch central OAuth app to Published, fix test-connection + credential UI</msg><path><editType>edit</editType><file>server/api/oauth/amazon/test-connection.post.ts</file></path><path><editType>edit</editType><file>.env-prod</file></path><path><editType>edit</editType><file>app/components/settings/OrderSourceForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/sales/sis/order-sources.get.ts</affectedPath><affectedPath>server/api/sales/sis/listings.get.ts</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><affectedPath>app/composables/menu/admin/sales.ts</affectedPath><affectedPath>server/api/sales/sis/offers.post.ts</affectedPath><affectedPath>app/pages/sales/sis/index.vue</affectedPath><affectedPath>server/utils/sisMatching.ts</affectedPath><affectedPath>server/utils/amazonSpApi.ts</affectedPath><affectedPath>server/api/sales/sis/price-update.post.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>7ccda3abf09f752e54f2ad7299b242330511d169</commitId><timestamp>1789424614000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>SIS: new Amazon pricing control page — compare internal vs Amazon price/qty, Buy Box, fees, push corrected prices

Admin-only page under Sales comparing internal price/stock against what's
live on Amazon for each Amazon order source, with a one-click price push
back to Amazon. New Amazon SP-API surface in amazonSpApi.ts: bulk merchant
listings report (Reports API, the source of truth for "what's on Amazon"),
Listings Items API read/patch, Product Pricing API (Buy Box), Fees Estimate
API. Product matching is SKU-first (Value/SKU) with ASIN as fallback, via
sisMatching.ts. Verified end-to-end against live production data, including
a real price push (Amazon's Listings Items PATCH turned out to be async
despite returning immediately, so pushes poll briefly then trust the
accepted submission, with a short-lived overlay so a subsequent bulk report
refresh can't revert a just-pushed price before Amazon's own report catches
up).
</comment><date>2026-09-15 00:23:34 +0200</date><id>7ccda3abf09f752e54f2ad7299b242330511d169</id><msg>SIS: new Amazon pricing control page — compare internal vs Amazon price/qty, Buy Box, fees, push corrected prices</msg><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>add</editType><file>server/api/sales/sis/order-sources.get.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/offers.post.ts</file></path><path><editType>add</editType><file>server/utils/sisMatching.ts</file></path><path><editType>add</editType><file>app/pages/sales/sis/index.vue</file></path><path><editType>add</editType><file>server/api/sales/sis/listings.get.ts</file></path><path><editType>add</editType><file>server/api/sales/sis/price-update.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/composables/menu/admin/sales.ts</file></path><path><editType>edit</editType><file>server/utils/amazonSpApi.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>736</buildNumber><marked><SHA1>d626e2ef330acc638feb470c8d8c8d79fe8c6845</SHA1><branch><SHA1>d626e2ef330acc638feb470c8d8c8d79fe8c6845</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>d626e2ef330acc638feb470c8d8c8d79fe8c6845</SHA1><branch><SHA1>d626e2ef330acc638feb470c8d8c8d79fe8c6845</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>d626e2ef330acc638feb470c8d8c8d79fe8c6845</SHA1><branch><SHA1>d626e2ef330acc638feb470c8d8c8d79fe8c6845</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'></action><building>false</building><displayName>#736</displayName><duration>69251</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #736</fullDisplayName><id>736</id><inProgress>false</inProgress><keepLog>false</keepLog><number>736</number><queueId>5690</queueId><result>SUCCESS</result><timestamp>1789344000276</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/736/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>735</buildNumber><marked><SHA1>d626e2ef330acc638feb470c8d8c8d79fe8c6845</SHA1><branch><SHA1>d626e2ef330acc638feb470c8d8c8d79fe8c6845</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>d626e2ef330acc638feb470c8d8c8d79fe8c6845</SHA1><branch><SHA1>d626e2ef330acc638feb470c8d8c8d79fe8c6845</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>d626e2ef330acc638feb470c8d8c8d79fe8c6845</SHA1><branch><SHA1>d626e2ef330acc638feb470c8d8c8d79fe8c6845</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'></action><building>false</building><displayName>#735</displayName><duration>68175</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #735</fullDisplayName><id>735</id><inProgress>false</inProgress><keepLog>false</keepLog><number>735</number><queueId>5689</queueId><result>SUCCESS</result><timestamp>1789257600272</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/735/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/generate-shipments.vue</affectedPath><affectedPath>app/composables/useShipperLogo.ts</affectedPath><affectedPath>server/api/orders/openso-generation-queue.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>f263d5555ef9086194f5d605f8dd33374754d72b</commitId><timestamp>1789232580000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Generate shipments: shipper filter (queue-driven, same semantics as the qty-1 option) — openso-generation-queue accepts shipperIds + returns shipperId/shipperName; new 'Only selected shippers' option card with a logo multi-select (useShipperLogo composable centralises the carrier→logo mapping, fallback badge for unknown carriers), select all/clear + counter, submit gated until a shipper is picked, shipper shown in progress + result labels; options block restyled into 'Order filters' / 'Process options' groups with subtitle + ⓘ hover tooltip per option, previously hardcoded English options translated (en/de/es/ne)
</comment><date>2026-09-12 19:03:00 +0200</date><id>f263d5555ef9086194f5d605f8dd33374754d72b</id><msg>Generate shipments: shipper filter (queue-driven, same semantics as the qty-1 option) — openso-generation-queue accepts shipperIds + returns shipperId/shipperName; new 'Only selected shippers' option card with a logo multi-select (useShipperLogo composable centralises the carrier→logo mapping, fallback badge for unknown carriers), select all/clear + counter, submit gated until a shipper is picked, shipper shown in progress + result labels; options block restyled into 'Order filters' / 'Process options' groups with subtitle + ⓘ hover tooltip per option, previously hardcoded English options translated (en/de/es/ne)</msg><path><editType>add</editType><file>app/composables/useShipperLogo.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/api/orders/openso-generation-queue.get.ts</file></path><path><editType>edit</editType><file>app/pages/generate-shipments.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/users/index.vue</affectedPath><affectedPath>server/api/admin/users/update.put.ts</affectedPath><affectedPath>app/components/partners/PartnerDetailRecordUser.vue</affectedPath><affectedPath>app/pages/users/users/create.vue</affectedPath><affectedPath>server/api/telephony/me.get.ts</affectedPath><affectedPath>app/components/DialButton.vue</affectedPath><affectedPath>server/utils/telephony/extensions.ts</affectedPath><affectedPath>app/pages/users/external-users/create.vue</affectedPath><affectedPath>app/pages/users/external-users/[id]/duplicate.vue</affectedPath><affectedPath>server/utils/telephony/dialAccess.ts</affectedPath><affectedPath>app/composables/useClickToDial.ts</affectedPath><affectedPath>.env-dev</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>server/api/telephony/extensions.get.ts</affectedPath><affectedPath>server/api/telephony/dial.post.ts</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>app/pages/users/external-users/[id]/edit.vue</affectedPath><affectedPath>server/utils/telephony/phoneActivity.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/components/sales/OrderForm.vue</affectedPath><affectedPath>app/pages/users/users/[id]/edit.vue</affectedPath><affectedPath>server/api/admin/users/store.post.ts</affectedPath><affectedPath>app/components/partners/PartnerDetailRecordLocation.vue</affectedPath><affectedPath>server/utils/telephony/amiClient.ts</affectedPath><affectedPath>app/components/admin/UserForm.vue</affectedPath><affectedPath>.env</affectedPath><affectedPath>app/components/AgGrid/AgDialPhone.vue</affectedPath><affectedPath>app/pages/users/users/[id]/view.vue</affectedPath><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>app/pages/users/external-users/index.vue</affectedPath><affectedPath>app/components/SearchModal.vue</affectedPath><affectedPath>app/components/admin/LeadForm.vue</affectedPath><affectedPath>app/pages/users/users/[id]/duplicate.vue</affectedPath><affectedPath>app/pages/users/external-users/[id]/view.vue</affectedPath><affectedPath>server/utils/telephony/callTracker.ts</affectedPath><affectedPath>app/components/integrations/CommissionModal.vue</affectedPath><affectedPath>.env-prod</affectedPath><affectedPath>app/pages/users/leads/[id]/view.vue</affectedPath><commitId>bd0aee220aeaa8e0f4543e7a844a66569e7a0f32</commitId><timestamp>1789236101000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Click-to-dial via FreePBX/Asterisk AMI + AD_User.SIP_Extension CRUD — new &lt;DialButton&gt; next to every phone field (user/lead/contact forms + views, partner contacts/locations, order ship-to phone, commission modal, search results, phone columns of the user/lead lists via AgDialPhone), visible only for system users with a SIP_Extension (server-authoritative gate via JWT + models/ad_user, 10-min cache); click opens a popover with the PBX extension chooser (DeviceStateList with live state joined with ERP user names, own extension preselected, free entry, remembered per browser) and dials: POST /api/telephony/dial originates PJSIP/&lt;ext&gt; (Local/&lt;ext&gt;@from-internal for dialplan-routed extensions) with the target as caller-id, returns right after the originate is accepted (1.5 s fast-fail window for an unreachable phone); a detached per-call AMI tracker follows OriginateResponse/DialBegin/DialEnd/Hangup via the inherited __LOGSHIP_CALL_ID channel var and writes a C_ContactActivity (type PC, reached/not reached + duration, German cause texts) on the called AD_User (or the partner's contact user) with the service token — fail-soft, unref'd timers, 3 h cap, per-process; new runtimeConfig.asterisk + CLICK_TO_DIAL_ENABLED/ASTERISK_* env keys; user pages: admin-only SIP extension field (internal tab, system users only, greyed for non-admins), retrieve/save wiring, view row, 'SIP Ext.' grid column, update/store routes gate the key on isAdminVerified; FreePBX: [logship] manager user (manager_custom.conf, LAN ACL, originate/call/reporting) + channelvars=LOGSHIP_CALL_ID in manager.conf
</comment><date>2026-09-12 20:01:41 +0200</date><id>bd0aee220aeaa8e0f4543e7a844a66569e7a0f32</id><msg>Click-to-dial via FreePBX/Asterisk AMI + AD_User.SIP_Extension CRUD — new &lt;DialButton&gt; next to every phone field (user/lead/contact forms + views, partner contacts/locations, order ship-to phone, commission modal, search results, phone columns of the user/lead lists via AgDialPhone), visible only for system users with a SIP_Extension (server-authoritative gate via JWT + models/ad_user, 10-min cache); click opens a popover with the PBX extension chooser (DeviceStateList with live state joined with ERP user names, own extension preselected, free entry, remembered per browser) and dials: POST /api/telephony/dial originates PJSIP/&lt;ext&gt; (Local/&lt;ext&gt;@from-internal for dialplan-routed extensions) with the target as caller-id, returns right after the originate is accepted (1.5 s fast-fail window for an unreachable phone); a detached per-call AMI tracker follows OriginateResponse/DialBegin/DialEnd/Hangup via the inherited __LOGSHIP_CALL_ID channel var and writes a C_ContactActivity (type PC, reached/not reached + duration, German cause texts) on the called AD_User (or the partner's contact user) with the service token — fail-soft, unref'd timers, 3 h cap, per-process; new runtimeConfig.asterisk + CLICK_TO_DIAL_ENABLED/ASTERISK_* env keys; user pages: admin-only SIP extension field (internal tab, system users only, greyed for non-admins), retrieve/save wiring, view row, 'SIP Ext.' grid column, update/store routes gate the key on isAdminVerified; FreePBX: [logship] manager user (manager_custom.conf, LAN ACL, originate/call/reporting) + channelvars=LOGSHIP_CALL_ID in manager.conf</msg><path><editType>edit</editType><file>app/pages/users/external-users/[id]/duplicate.vue</file></path><path><editType>edit</editType><file>app/pages/users/external-users/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/users/users/create.vue</file></path><path><editType>edit</editType><file>server/api/admin/users/store.post.ts</file></path><path><editType>edit</editType><file>.env-dev</file></path><path><editType>add</editType><file>server/utils/telephony/callTracker.ts</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path><path><editType>edit</editType><file>app/components/sales/OrderForm.vue</file></path><path><editType>edit</editType><file>app/pages/users/external-users/[id]/view.vue</file></path><path><editType>edit</editType><file>app/pages/users/users/[id]/view.vue</file></path><path><editType>add</editType><file>app/components/AgGrid/AgDialPhone.vue</file></path><path><editType>edit</editType><file>app/pages/users/users/index.vue</file></path><path><editType>add</editType><file>app/composables/useClickToDial.ts</file></path><path><editType>edit</editType><file>app/pages/users/external-users/index.vue</file></path><path><editType>add</editType><file>server/utils/telephony/extensions.ts</file></path><path><editType>edit</editType><file>app/components/admin/UserForm.vue</file></path><path><editType>edit</editType><file>app/pages/users/users/[id]/edit.vue</file></path><path><editType>add</editType><file>server/api/telephony/dial.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>add</editType><file>server/api/telephony/me.get.ts</file></path><path><editType>edit</editType><file>app/components/partners/PartnerDetailRecordLocation.vue</file></path><path><editType>edit</editType><file>server/api/admin/users/update.put.ts</file></path><path><editType>add</editType><file>server/utils/telephony/amiClient.ts</file></path><path><editType>edit</editType><file>app/components/partners/PartnerDetailRecordUser.vue</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>app/components/SearchModal.vue</file></path><path><editType>edit</editType><file>.env</file></path><path><editType>add</editType><file>app/components/DialButton.vue</file></path><path><editType>add</editType><file>server/utils/telephony/dialAccess.ts</file></path><path><editType>edit</editType><file>app/pages/users/users/[id]/duplicate.vue</file></path><path><editType>edit</editType><file>.env-prod</file></path><path><editType>add</editType><file>server/utils/telephony/phoneActivity.ts</file></path><path><editType>edit</editType><file>app/pages/users/external-users/create.vue</file></path><path><editType>edit</editType><file>app/components/admin/LeadForm.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/view.vue</file></path><path><editType>edit</editType><file>app/components/integrations/CommissionModal.vue</file></path><path><editType>add</editType><file>server/api/telephony/extensions.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/admin/LeadDetailRecordActivity.vue</affectedPath><affectedPath>app/utils/activityFormat.ts</affectedPath><commitId>9a43b22bbf9db5090902c079f1d6bcf0c76fca38</commitId><timestamp>1789236490000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead activities: rich rendering of activity notes — new app/utils/activityFormat.ts (escape → linkify → decorate; safe for v-html) renders line-initial / '·'-separated 'Label:' as bold, 'Label (…): https://…' lines as a labelled link chip (e.g. the online confirmation / signing link) instead of the raw token URL, URLs and e-mail addresses as links, file names (.pdf/.docx/…) as badges, **bold**/_italic_ markers, blank lines as paragraph gaps; notes written as simple HTML (&lt;b&gt;, &lt;i&gt;, &lt;u&gt;, &lt;a&gt;, lists, &lt;br&gt;) are sanitised to a tag whitelist with http(s)/mailto hrefs only; LeadDetailRecordActivity.vue binds the formatter, adds a formatting hint + live preview in the note modal and the :deep styles
</comment><date>2026-09-12 20:08:10 +0200</date><id>9a43b22bbf9db5090902c079f1d6bcf0c76fca38</id><msg>Lead activities: rich rendering of activity notes — new app/utils/activityFormat.ts (escape → linkify → decorate; safe for v-html) renders line-initial / '·'-separated 'Label:' as bold, 'Label (…): https://…' lines as a labelled link chip (e.g. the online confirmation / signing link) instead of the raw token URL, URLs and e-mail addresses as links, file names (.pdf/.docx/…) as badges, **bold**/_italic_ markers, blank lines as paragraph gaps; notes written as simple HTML (&lt;b&gt;, &lt;i&gt;, &lt;u&gt;, &lt;a&gt;, lists, &lt;br&gt;) are sanitised to a tag whitelist with http(s)/mailto hrefs only; LeadDetailRecordActivity.vue binds the formatter, adds a formatting hint + live preview in the note modal and the :deep styles</msg><path><editType>edit</editType><file>app/components/admin/LeadDetailRecordActivity.vue</file></path><path><editType>add</editType><file>app/utils/activityFormat.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/contractPackage.ts</affectedPath><affectedPath>app/components/offers/SigningLinksPanel.vue</affectedPath><affectedPath>app/pages/sepa/[token].vue</affectedPath><affectedPath>app/components/offers/SepaMandateModal.vue</affectedPath><affectedPath>app/pages/partners/partners/[id]/edit.vue</affectedPath><affectedPath>app/composables/useOfferContract.ts</affectedPath><affectedPath>server/api/public/sepa/[token]/document/[key].get.ts</affectedPath><affectedPath>app/utils/iban.ts</affectedPath><affectedPath>server/utils/offers/sepaTexts.ts</affectedPath><affectedPath>.env-dev</affectedPath><affectedPath>server/utils/offers/sepaMandate.ts</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>server/api/offers/sepa/preview.post.ts</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>server/utils/offers/sepaPdf.ts</affectedPath><affectedPath>server/api/public/sign/[token]/index.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>server/api/offers/contract/send.post.ts</affectedPath><affectedPath>.env</affectedPath><affectedPath>app/pages/sign/[token].vue</affectedPath><affectedPath>server/utils/offers/contractSigning.ts</affectedPath><affectedPath>server/api/public/sign/[token]/index.post.ts</affectedPath><affectedPath>server/api/offers/contract/signing-status.get.ts</affectedPath><affectedPath>server/api/public/sepa/[token]/index.get.ts</affectedPath><affectedPath>server/api/public/sepa/[token]/request-renewal.post.ts</affectedPath><affectedPath>server/api/public/sepa/[token]/index.post.ts</affectedPath><affectedPath>app/components/offers/ContractModal.vue</affectedPath><affectedPath>server/api/offers/sepa/send.post.ts</affectedPath><affectedPath>server/utils/offers/contractSigningDb.ts</affectedPath><affectedPath>.env-prod</affectedPath><commitId>0a58e7b9aa9f7f3a6ab93112d2d85788ab0b62e4</commitId><timestamp>1789237810000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>SEPA-Lastschriftmandat: opt-in contract annex + standalone send/fill/sign flow — new pdf-lib mandate (server/utils/offers/sepaPdf.ts: A4, branded, native fillable AcroForm fields for company/account holder/address/IBAN/BIC/bank/place-date, signed variant sets values, draws the signature, adds a protocol line and flattens), DE/EN mandate wording per DK/EPC (sepaTexts.ts: CORE with 8-week refund notice / B2B without, pre-notification line, 36-month lapse), IBAN validation in app/utils/iban.ts (ISO 13616 per-country lengths, MOD 97-10, SEPA country set, BIC check) used live in the portals and re-checked server-side; (1) contract package: 'Anlage 4 — SEPA-Lastschriftmandat' checkbox in ContractModal (default off, scheme B2B/CORE + payment type + pre-notification days), assembled by contractPackage.ts, mandate stored on the signing row, /sign portal gets step 1b (account holder, IBAN, BIC, bank) + two mandate declarations, finalizeSignature renders the filled+signed mandate, attaches it to the record and patches offer_conditions.sepa (masked IBAN); (2) standalone: SepaMandateModal ('SEPA' button on the partner and lead pages, DE default/EN, prefill from partner contacts + location, preview) → POST /api/offers/sepa/send (signing kind 'sepa', mail with /sepa/&lt;token&gt;, blank mandate attached to the record, activity) → public /sepa/&lt;token&gt; portal + routes (fill, validate, sign) → finalizeSepaMandate attaches the signed PDF to the sending C_BPartner / lead user, logs an activity, mails customer + info@; signing-status + SigningLinksPanel know kind 'sepa' (panel now also on the partner page); runtimeConfig.sepa + SEPA_CREDITOR_ID/SEPA_PRENOTIFICATION_DAYS env keys (creditor id still to be filled in)
</comment><date>2026-09-12 20:30:10 +0200</date><id>0a58e7b9aa9f7f3a6ab93112d2d85788ab0b62e4</id><msg>SEPA-Lastschriftmandat: opt-in contract annex + standalone send/fill/sign flow — new pdf-lib mandate (server/utils/offers/sepaPdf.ts: A4, branded, native fillable AcroForm fields for company/account holder/address/IBAN/BIC/bank/place-date, signed variant sets values, draws the signature, adds a protocol line and flattens), DE/EN mandate wording per DK/EPC (sepaTexts.ts: CORE with 8-week refund notice / B2B without, pre-notification line, 36-month lapse), IBAN validation in app/utils/iban.ts (ISO 13616 per-country lengths, MOD 97-10, SEPA country set, BIC check) used live in the portals and re-checked server-side; (1) contract package: 'Anlage 4 — SEPA-Lastschriftmandat' checkbox in ContractModal (default off, scheme B2B/CORE + payment type + pre-notification days), assembled by contractPackage.ts, mandate stored on the signing row, /sign portal gets step 1b (account holder, IBAN, BIC, bank) + two mandate declarations, finalizeSignature renders the filled+signed mandate, attaches it to the record and patches offer_conditions.sepa (masked IBAN); (2) standalone: SepaMandateModal ('SEPA' button on the partner and lead pages, DE default/EN, prefill from partner contacts + location, preview) → POST /api/offers/sepa/send (signing kind 'sepa', mail with /sepa/&lt;token&gt;, blank mandate attached to the record, activity) → public /sepa/&lt;token&gt; portal + routes (fill, validate, sign) → finalizeSepaMandate attaches the signed PDF to the sending C_BPartner / lead user, logs an activity, mails customer + info@; signing-status + SigningLinksPanel know kind 'sepa' (panel now also on the partner page); runtimeConfig.sepa + SEPA_CREDITOR_ID/SEPA_PRENOTIFICATION_DAYS env keys (creditor id still to be filled in)</msg><path><editType>edit</editType><file>app/components/offers/ContractModal.vue</file></path><path><editType>edit</editType><file>app/composables/useOfferContract.ts</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>add</editType><file>app/utils/iban.ts</file></path><path><editType>add</editType><file>server/api/public/sepa/[token]/document/[key].get.ts</file></path><path><editType>add</editType><file>server/api/public/sepa/[token]/index.get.ts</file></path><path><editType>add</editType><file>server/api/public/sepa/[token]/request-renewal.post.ts</file></path><path><editType>edit</editType><file>.env</file></path><path><editType>edit</editType><file>server/utils/offers/contractSigning.ts</file></path><path><editType>add</editType><file>server/utils/offers/sepaMandate.ts</file></path><path><editType>add</editType><file>server/utils/offers/sepaTexts.ts</file></path><path><editType>add</editType><file>server/api/offers/sepa/preview.post.ts</file></path><path><editType>edit</editType><file>server/utils/offers/contractSigningDb.ts</file></path><path><editType>add</editType><file>server/api/public/sepa/[token]/index.post.ts</file></path><path><editType>edit</editType><file>server/api/public/sign/[token]/index.post.ts</file></path><path><editType>add</editType><file>app/components/offers/SepaMandateModal.vue</file></path><path><editType>edit</editType><file>server/api/offers/contract/send.post.ts</file></path><path><editType>add</editType><file>server/utils/offers/sepaPdf.ts</file></path><path><editType>edit</editType><file>.env-dev</file></path><path><editType>edit</editType><file>server/api/public/sign/[token]/index.get.ts</file></path><path><editType>edit</editType><file>server/utils/offers/contractPackage.ts</file></path><path><editType>edit</editType><file>app/components/offers/SigningLinksPanel.vue</file></path><path><editType>edit</editType><file>server/api/offers/contract/signing-status.get.ts</file></path><path><editType>edit</editType><file>.env-prod</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>app/pages/sepa/[token].vue</file></path><path><editType>add</editType><file>server/api/offers/sepa/send.post.ts</file></path><path><editType>edit</editType><file>app/pages/sign/[token].vue</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>app/pages/partners/partners/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/recipes.md</affectedPath><commitId>1cb4bf0a8ddba51fba801514f9cb3269bbca259c</commitId><timestamp>1789238308000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Recipes: click-to-dial (FreePBX AMI, &lt;DialButton&gt;, PBX gotchas) and SEPA mandate (contract annex + standalone portal, IBAN check, creditor id)
</comment><date>2026-09-12 20:38:28 +0200</date><id>1cb4bf0a8ddba51fba801514f9cb3269bbca259c</id><msg>Recipes: click-to-dial (FreePBX AMI, &lt;DialButton&gt;, PBX gotchas) and SEPA mandate (contract annex + standalone portal, IBAN check, creditor id)</msg><path><editType>edit</editType><file>reference/recipes.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/admin/users/update.put.ts</affectedPath><affectedPath>app/components/dashboard/ProfileForm.vue</affectedPath><affectedPath>app/pages/users/profile/index.vue</affectedPath><commitId>a419d4d00e539ecd68e844a02e2fcbf3944828b9</commitId><timestamp>1789239065000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Profile: system users can set their own SIP extension (click-to-dial) on /users/profile → Contact tab — field shown only for IsSystemUser records, saved via the profile's existing PUT; update.put.ts accepts sipExtension for the caller's own record (JWT AD_User_ID = body.id) in addition to verified admins
</comment><date>2026-09-12 20:51:05 +0200</date><id>a419d4d00e539ecd68e844a02e2fcbf3944828b9</id><msg>Profile: system users can set their own SIP extension (click-to-dial) on /users/profile → Contact tab — field shown only for IsSystemUser records, saved via the profile's existing PUT; update.put.ts accepts sipExtension for the caller's own record (JWT AD_User_ID = body.id) in addition to verified admins</msg><path><editType>edit</editType><file>server/api/admin/users/update.put.ts</file></path><path><editType>edit</editType><file>app/components/dashboard/ProfileForm.vue</file></path><path><editType>edit</editType><file>app/pages/users/profile/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/NewNavBar.vue</affectedPath><affectedPath>app/components/QuickDial.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>9e9dac38e431a6bed27c32b76c6319179633d87d</commitId><timestamp>1789239210000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Top bar quick dial (admins with a SIP extension): number input left of the user menu — Enter dials with the own extension, the dial button opens the extension chooser; hidden for non-admins and users who cannot dial; error-boundaried like the chat badge
</comment><date>2026-09-12 20:53:30 +0200</date><id>9e9dac38e431a6bed27c32b76c6319179633d87d</id><msg>Top bar quick dial (admins with a SIP extension): number input left of the user menu — Enter dials with the own extension, the dial button opens the extension chooser; hidden for non-admins and users who cannot dial; error-boundaried like the chat badge</msg><path><editType>add</editType><file>app/components/QuickDial.vue</file></path><path><editType>edit</editType><file>app/components/NewNavBar.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/RecentCallsCard.vue</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>package-lock.json</affectedPath><affectedPath>app/components/TopMegaBar.vue</affectedPath><affectedPath>.env</affectedPath><affectedPath>server/api/telephony/recent-calls.get.ts</affectedPath><affectedPath>.env-dev</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>server/utils/telephony/cdr.ts</affectedPath><affectedPath>package.json</affectedPath><affectedPath>reference/recipes.md</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>.env-prod</affectedPath><commitId>591fe6109509809117dc5b97cb1136ef33ba8472</commitId><timestamp>1789240092000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard 'Letzte Anrufe' card (admin roles) + quick dial placed in the top bar — new GET /api/telephony/recent-calls reads the FreePBX CDR via a read-only MariaDB user (mysql2, PBX_CDR_* env) and reduces the many per-leg cdr rows to ONE entry per call (grouped by linkedid; inbound/outbound by trunk channel, answered = ANSWERED Dial leg with billsec&gt;0 to a device), showing the last 20 missed inbound + successful outbound calls (all/in/out filter, missed badge, extension + duration, auto-refresh 60 s, 30 s server cache); numbers are clickable (click-to-dial with the own extension) plus a chooser button per row; QuickDial moved into the TopMegaBar user-menu container (the app layout uses TopMegaBar, not NewNavBar) so it renders left of the user menu; caller-id names stripped of the PBX 'LogYou:' / 'Anruf:' prefixes; recipe note
</comment><date>2026-09-12 21:08:12 +0200</date><id>591fe6109509809117dc5b97cb1136ef33ba8472</id><msg>Dashboard 'Letzte Anrufe' card (admin roles) + quick dial placed in the top bar — new GET /api/telephony/recent-calls reads the FreePBX CDR via a read-only MariaDB user (mysql2, PBX_CDR_* env) and reduces the many per-leg cdr rows to ONE entry per call (grouped by linkedid; inbound/outbound by trunk channel, answered = ANSWERED Dial leg with billsec&gt;0 to a device), showing the last 20 missed inbound + successful outbound calls (all/in/out filter, missed badge, extension + duration, auto-refresh 60 s, 30 s server cache); numbers are clickable (click-to-dial with the own extension) plus a chooser button per row; QuickDial moved into the TopMegaBar user-menu container (the app layout uses TopMegaBar, not NewNavBar) so it renders left of the user menu; caller-id names stripped of the PBX 'LogYou:' / 'Anruf:' prefixes; recipe note</msg><path><editType>add</editType><file>server/api/telephony/recent-calls.get.ts</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/TopMegaBar.vue</file></path><path><editType>edit</editType><file>.env-prod</file></path><path><editType>edit</editType><file>.env-dev</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>add</editType><file>server/utils/telephony/cdr.ts</file></path><path><editType>edit</editType><file>.env</file></path><path><editType>add</editType><file>app/components/dashboard/RecentCallsCard.vue</file></path><path><editType>edit</editType><file>package.json</file></path><path><editType>edit</editType><file>package-lock.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/RecentCallsCard.vue</affectedPath><affectedPath>app/components/DialButton.vue</affectedPath><affectedPath>server/api/telephony/match-contacts.post.ts</affectedPath><affectedPath>app/pages/index.vue</affectedPath><commitId>2f23a38d108cdab644854df9215c2bc74095ea38</commitId><timestamp>1789250857000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard: first row now Open Orders (0.9fr, ≈−10 %) · tickets (0.6fr, ≈−40 %) · recent-calls card (0.7fr) side by side; tickets fullscreen button commented out for now; recent-calls card limited to the last 10 calls, clicking a number opens the dial popover (own extension from the profile preselected, call starts only after 'Anrufen') instead of dialing immediately, and phone numbers are matched to ERP contacts asynchronously after render via new POST /api/telephony/match-contacts (Elasticsearch ad_user index, regexp on the keyword phone/phone2 fields, fail-soft) — matched names shown with a contact icon and passed as the activity target; DialButton gains a default slot to use custom trigger content (the number text)
</comment><date>2026-09-13 00:07:37 +0200</date><id>2f23a38d108cdab644854df9215c2bc74095ea38</id><msg>Dashboard: first row now Open Orders (0.9fr, ≈−10 %) · tickets (0.6fr, ≈−40 %) · recent-calls card (0.7fr) side by side; tickets fullscreen button commented out for now; recent-calls card limited to the last 10 calls, clicking a number opens the dial popover (own extension from the profile preselected, call starts only after 'Anrufen') instead of dialing immediately, and phone numbers are matched to ERP contacts asynchronously after render via new POST /api/telephony/match-contacts (Elasticsearch ad_user index, regexp on the keyword phone/phone2 fields, fail-soft) — matched names shown with a contact icon and passed as the activity target; DialButton gains a default slot to use custom trigger content (the number text)</msg><path><editType>edit</editType><file>app/components/dashboard/RecentCallsCard.vue</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>edit</editType><file>app/components/DialButton.vue</file></path><path><editType>add</editType><file>server/api/telephony/match-contacts.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/demo/index.vue</affectedPath><affectedPath>app/pages/demo/set-builder.vue</affectedPath><commitId>57d1db967c449a684860b40699282d50920ca919</commitId><timestamp>1789252825000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Demo screens for the Stücklisten/Set feature (app/pages/demo)

/demo hub lists real IsBOM articles; /demo/set-builder is a Set-Builder template in quick-order positions style with real product search, component quantities and stock, set image proposals from component photos, and an order-import preview. Public route, no backend writes. Used for logyou.de/leistungen/stuecklisten-bom.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01CdyiVTWYfCkMzH8rJyc5Pq
</comment><date>2026-09-13 00:40:25 +0200</date><id>57d1db967c449a684860b40699282d50920ca919</id><msg>Demo screens for the Stücklisten/Set feature (app/pages/demo)</msg><path><editType>add</editType><file>app/pages/demo/index.vue</file></path><path><editType>add</editType><file>app/pages/demo/set-builder.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/RecentCallsCard.vue</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>server/api/telephony/match-contacts.post.ts</affectedPath><commitId>75a8a5218182d36766c28dd6046e1320a158e6f1</commitId><timestamp>1789253014000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Dashboard call card + first row: uniform column starts (the slot-trigger DialButton was stretched/centered by the flex column → left-aligned, fixed 96px meta column with right-aligned duration/missed), slim low headers on the whole first row (title only, icon 30px; the subtitles move into a header tooltip — calls card tooltip = title / blank line / subtitle / missed count), tickets card header now just 'Tickets', call date shown as Heute / Gestern / dd.MM.yy without time (full weekday + date + time as hover tooltip), matched contact name is now a button opening a teleported menu 'Als Lead öffnen / Als Benutzer öffnen' (+ 'Partner bearbeiten / ansehen' when a C_BPartner is linked) — match-contacts enriches the ES hit with IsSalesLead/IsVendorLead + C_BPartner_ID name from iDempiere (fail-soft) so the known record kind is listed first
</comment><date>2026-09-13 00:43:34 +0200</date><id>75a8a5218182d36766c28dd6046e1320a158e6f1</id><msg>Dashboard call card + first row: uniform column starts (the slot-trigger DialButton was stretched/centered by the flex column → left-aligned, fixed 96px meta column with right-aligned duration/missed), slim low headers on the whole first row (title only, icon 30px; the subtitles move into a header tooltip — calls card tooltip = title / blank line / subtitle / missed count), tickets card header now just 'Tickets', call date shown as Heute / Gestern / dd.MM.yy without time (full weekday + date + time as hover tooltip), matched contact name is now a button opening a teleported menu 'Als Lead öffnen / Als Benutzer öffnen' (+ 'Partner bearbeiten / ansehen' when a C_BPartner is linked) — match-contacts enriches the ES hit with IsSalesLead/IsVendorLead + C_BPartner_ID name from iDempiere (fail-soft) so the known record kind is listed first</msg><path><editType>edit</editType><file>server/api/telephony/match-contacts.post.ts</file></path><path><editType>edit</editType><file>app/components/dashboard/RecentCallsCard.vue</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.gitignore</affectedPath><affectedPath>server/api/telephony/recordings/transcribe.post.ts</affectedPath><affectedPath>server/api/telephony/recordings/index.get.ts</affectedPath><affectedPath>.env</affectedPath><affectedPath>server/api/telephony/recordings/audio.get.ts</affectedPath><affectedPath>server/utils/telephony/recordings.ts</affectedPath><affectedPath>.env-dev</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>server/utils/telephony/cdr.ts</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>server/utils/chatTranscribe.ts</affectedPath><affectedPath>reference/recipes.md</affectedPath><affectedPath>app/components/telephony/CallRecordingsModal.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>.env-prod</affectedPath><commitId>d626e2ef330acc638feb470c8d8c8d79fe8c6845</commitId><timestamp>1789253031000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page 'Aufnahmen': call recordings + whisper transcription — new components/telephony/CallRecordingsModal.vue (button + CTA on /edit/lead-&lt;id&gt;): step 1 lists every FreePBX recording matched by the lead's phone numbers (all pre-selected, single rows can be unticked, in-app audio player + download per row, language select DE/EN/ES/auto), 'Transkribieren' runs the selected ones one after the other through the server whisper.cpp pipeline with real progress, step 2 shows the transcripts to read (optional timestamps), copy and download (single / all as one .txt). Server: server/utils/telephony/recordings.ts (CDR lookup recordingfile&lt;&gt;'' + src/dst suffix match, one row per file, stat on the PBX drops missing/44-byte never-answered files, transcript cache data/call-transcripts/&lt;file&gt;.json, serial whisper queue, timeout 3× audio length), routes telephony/recordings/{index.get,transcribe.post,audio.get} gated by gateFromEvent (staff), chatTranscribe.ts gains transcribeAudioDetailed() (text + timestamped segments, timeout/extra-args options; transcribeAudio() is the wrapper) and no longer converts a .wav onto itself (ffmpeg refused in-place edits); PBX side: /opt/logship-ivr/recordings.js on 192.168.12.73 (systemd logship-recordings, port 8096, LAN allow-list + X-IVR-Secret = IVR_SHARED_SECRET, POST /recordings/stat because Node 8 caps headers at 8 KB, GET /recordings/file/&lt;name&gt;, read-only); runtimeConfig.pbxRecordings + PBX_RECORDINGS_URL env; lead page now defines t (useTranslation) which the SEPA title already referenced; rec_* translations en/de; recipe
</comment><date>2026-09-13 00:43:51 +0200</date><id>d626e2ef330acc638feb470c8d8c8d79fe8c6845</id><msg>Lead page 'Aufnahmen': call recordings + whisper transcription — new components/telephony/CallRecordingsModal.vue (button + CTA on /edit/lead-&lt;id&gt;): step 1 lists every FreePBX recording matched by the lead's phone numbers (all pre-selected, single rows can be unticked, in-app audio player + download per row, language select DE/EN/ES/auto), 'Transkribieren' runs the selected ones one after the other through the server whisper.cpp pipeline with real progress, step 2 shows the transcripts to read (optional timestamps), copy and download (single / all as one .txt). Server: server/utils/telephony/recordings.ts (CDR lookup recordingfile&lt;&gt;'' + src/dst suffix match, one row per file, stat on the PBX drops missing/44-byte never-answered files, transcript cache data/call-transcripts/&lt;file&gt;.json, serial whisper queue, timeout 3× audio length), routes telephony/recordings/{index.get,transcribe.post,audio.get} gated by gateFromEvent (staff), chatTranscribe.ts gains transcribeAudioDetailed() (text + timestamped segments, timeout/extra-args options; transcribeAudio() is the wrapper) and no longer converts a .wav onto itself (ffmpeg refused in-place edits); PBX side: /opt/logship-ivr/recordings.js on 192.168.12.73 (systemd logship-recordings, port 8096, LAN allow-list + X-IVR-Secret = IVR_SHARED_SECRET, POST /recordings/stat because Node 8 caps headers at 8 KB, GET /recordings/file/&lt;name&gt;, read-only); runtimeConfig.pbxRecordings + PBX_RECORDINGS_URL env; lead page now defines t (useTranslation) which the SEPA title already referenced; rec_* translations en/de; recipe</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/api/telephony/recordings/transcribe.post.ts</file></path><path><editType>edit</editType><file>.env-prod</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>edit</editType><file>server/utils/chatTranscribe.ts</file></path><path><editType>edit</editType><file>.env</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path><path><editType>add</editType><file>server/api/telephony/recordings/index.get.ts</file></path><path><editType>edit</editType><file>.env-dev</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>add</editType><file>app/components/telephony/CallRecordingsModal.vue</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>server/utils/telephony/cdr.ts</file></path><path><editType>add</editType><file>server/utils/telephony/recordings.ts</file></path><path><editType>add</editType><file>server/api/telephony/recordings/audio.get.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>734</buildNumber><marked><SHA1>d51b8503f5d725aa822727839ef7a849d00983b5</SHA1><branch><SHA1>d51b8503f5d725aa822727839ef7a849d00983b5</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>d51b8503f5d725aa822727839ef7a849d00983b5</SHA1><branch><SHA1>d51b8503f5d725aa822727839ef7a849d00983b5</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>d51b8503f5d725aa822727839ef7a849d00983b5</SHA1><branch><SHA1>d51b8503f5d725aa822727839ef7a849d00983b5</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'></action><building>false</building><displayName>#734</displayName><duration>66708</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #734</fullDisplayName><id>734</id><inProgress>false</inProgress><keepLog>false</keepLog><number>734</number><queueId>5682</queueId><result>SUCCESS</result><timestamp>1789171200273</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/734/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>cca171e8faf50256c8031565eb616abd60ba9ea1</commitId><timestamp>1789121111000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Sales order edit: client admins can void a completed + commissioned/shipped order — new admin-only red truck-off button replaces the disabled lock when the shipment carries a tracking no., opens a dedicated warning modal (lists order + shipments with tracking, explains that shipment/invoice are reversed and stock booked back although the parcel left = goods treated as lost, marketplace not notified, label stays active) with a mandatory acknowledgement checkbox before the VO document action runs (skips the plain browser confirm); non-admins keep the disabled button; en/de/es/ne force_void_* keys
</comment><date>2026-09-11 12:05:11 +0200</date><id>cca171e8faf50256c8031565eb616abd60ba9ea1</id><msg>Sales order edit: client admins can void a completed + commissioned/shipped order — new admin-only red truck-off button replaces the disabled lock when the shipment carries a tracking no., opens a dedicated warning modal (lists order + shipments with tracking, explains that shipment/invoice are reversed and stock booked back although the parcel left = goods treated as lost, marketplace not notified, label stays active) with a mandatory acknowledgement checkbox before the VO document action runs (skips the plain browser confirm); non-admins keep the disabled button; en/de/es/ne force_void_* keys</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>d51b8503f5d725aa822727839ef7a849d00983b5</commitId><timestamp>1789122556000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Sales order force-void (admin): reword warning — 'lost' means the ORDER is lost and cannot be reactivated after voiding (not the goods); modal text, acknowledgement checkbox and button title in en/de/es/ne
</comment><date>2026-09-11 12:29:16 +0200</date><id>d51b8503f5d725aa822727839ef7a849d00983b5</id><msg>Sales order force-void (admin): reword warning — 'lost' means the ORDER is lost and cannot be reactivated after voiding (not the goods); modal text, acknowledgement checkbox and button title in en/de/es/ne</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>733</buildNumber><marked><SHA1>b0144617e997073012c0381e848fff6798b301d7</SHA1><branch><SHA1>b0144617e997073012c0381e848fff6798b301d7</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>b0144617e997073012c0381e848fff6798b301d7</SHA1><branch><SHA1>b0144617e997073012c0381e848fff6798b301d7</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>b0144617e997073012c0381e848fff6798b301d7</SHA1><branch><SHA1>b0144617e997073012c0381e848fff6798b301d7</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'></action><building>false</building><displayName>#733</displayName><duration>74361</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #733</fullDisplayName><id>733</id><inProgress>false</inProgress><keepLog>false</keepLog><number>733</number><queueId>5679</queueId><result>SUCCESS</result><timestamp>1789084800272</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/733/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/offers/contract/send.post.ts</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>server/utils/offers/quoteConfirmation.ts</affectedPath><affectedPath>app/pages/confirm/[token].vue</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>app/composables/useOfferContract.ts</affectedPath><affectedPath>server/api/offers/quote/send.post.ts</affectedPath><affectedPath>app/pages/sign/[token].vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>server/utils/offers/contractSigning.ts</affectedPath><commitId>a7aa7ae42b222bbcc0ef3667b6bf58dc4e2892f3</commitId><timestamp>1789024134000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Offer/contract e-mails: button is 'Angebot öffnen' / 'Dokumente öffnen' (view only, non-binding) — accepting or signing is described as a separate, optional step on the page; default message texts, info boxes and modal label reworded accordingly
</comment><date>2026-09-10 09:08:54 +0200</date><id>a7aa7ae42b222bbcc0ef3667b6bf58dc4e2892f3</id><msg>Offer/contract e-mails: button is 'Angebot öffnen' / 'Dokumente öffnen' (view only, non-binding) — accepting or signing is described as a separate, optional step on the page; default message texts, info boxes and modal label reworded accordingly</msg><path><editType>edit</editType><file>app/pages/sign/[token].vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>server/utils/offers/quoteConfirmation.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferContract.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>server/api/offers/contract/send.post.ts</file></path><path><editType>edit</editType><file>server/utils/offers/contractSigning.ts</file></path><path><editType>edit</editType><file>app/pages/confirm/[token].vue</file></path><path><editType>edit</editType><file>server/api/offers/quote/send.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/mobile/transcribe-text.post.ts</affectedPath><affectedPath>app/pages/mobile/movement.vue</affectedPath><commitId>fc1d48ab4d2e46c5f22309169e84c1c8a839300d</commitId><timestamp>1789026457000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile movement: opt-in billable ticket after completion — post-completion screen with selectable moved articles/qty, time or direct amount ([Zeitabrechnung]), typed or voice-transcribed note (new sync /api/mobile/transcribe-text), ticket for the partner linked to the source locator's org, audio attached to the ticket
</comment><date>2026-09-10 09:47:37 +0200</date><id>fc1d48ab4d2e46c5f22309169e84c1c8a839300d</id><msg>Mobile movement: opt-in billable ticket after completion — post-completion screen with selectable moved articles/qty, time or direct amount ([Zeitabrechnung]), typed or voice-transcribed note (new sync /api/mobile/transcribe-text), ticket for the partner linked to the source locator's org, audio attached to the ticket</msg><path><editType>add</editType><file>server/api/mobile/transcribe-text.post.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/movement.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>scripts/upload-mobile-update.sh</affectedPath><affectedPath>scripts/release-app.sh</affectedPath><affectedPath>scripts/stage-mobile-update.sh</affectedPath><commitId>1d1b2d4e81e0dda86dad7771d4f6e9b54d1a265d</commitId><timestamp>1789026991000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile app release channel moved into the logyou.de website repo: new scripts/stage-mobile-update.sh copies APK + version.json into ../logship/logyou-landing/public/logship (archives the replaced APK into history/, merges history.json, keeps last 10); release-app.sh hands off to it (MOBILE_PUBLISH=sftp keeps the SFTP uploader for Blut24, --push also deploys the site); release app 1.0.40 (code 41)
</comment><date>2026-09-10 09:56:31 +0200</date><id>1d1b2d4e81e0dda86dad7771d4f6e9b54d1a265d</id><msg>Mobile app release channel moved into the logyou.de website repo: new scripts/stage-mobile-update.sh copies APK + version.json into ../logship/logyou-landing/public/logship (archives the replaced APK into history/, merges history.json, keeps last 10); release-app.sh hands off to it (MOBILE_PUBLISH=sftp keeps the SFTP uploader for Blut24, --push also deploys the site); release app 1.0.40 (code 41)</msg><path><editType>add</editType><file>scripts/stage-mobile-update.sh</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>scripts/upload-mobile-update.sh</file></path><path><editType>edit</editType><file>scripts/release-app.sh</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/settings/mobile-app/index.vue</affectedPath><affectedPath>scripts/release-app.sh</affectedPath><affectedPath>reference/ci/deploy-production.sh</affectedPath><affectedPath>scripts/stage-mobile-update.sh</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>app/composables/menu/admin/settings.ts</affectedPath><affectedPath>server/api/mobile/app-versions.get.ts</affectedPath><affectedPath>.env</affectedPath><affectedPath>server/api/mobile/app-download-link.get.ts</affectedPath><affectedPath>server/api/settings/mobile-app/publish.post.ts</affectedPath><affectedPath>scripts/upload-mobile-update.sh</affectedPath><affectedPath>server/api/mobile/app-version.get.ts</affectedPath><affectedPath>.env-dev</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>server/utils/mobileReleases.ts</affectedPath><affectedPath>server/api/public/mobile/[token]/[...path].ts</affectedPath><affectedPath>scripts/publish-mobile-update.sh</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>.env-prod</affectedPath><commitId>2ccbd5088aaa0422989f669a9d2e67bf1827d8d7</commitId><timestamp>1789028835000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile app release channel inside the ERP: APK + manifests live server-side in data/mobile-releases (never in the bundle or git), served via expiring HMAC-signed public download URLs (/api/public/mobile/&lt;token&gt;/…, Range support); app-version/app-versions read the local channel for authenticated checks and keep proxying www.logyou.de/logship for old builds (MOBILE_APP_LEGACY_FALLBACK); new Settings → Mobile App page with QR install code, download link and admin upload form; publish endpoint (admin verified via ad_role or service token) + scripts/publish-mobile-update.sh; release-app.sh publishes to erp,landing; deploy script preserves data/mobile-releases
</comment><date>2026-09-10 10:27:15 +0200</date><id>2ccbd5088aaa0422989f669a9d2e67bf1827d8d7</id><msg>Mobile app release channel inside the ERP: APK + manifests live server-side in data/mobile-releases (never in the bundle or git), served via expiring HMAC-signed public download URLs (/api/public/mobile/&lt;token&gt;/…, Range support); app-version/app-versions read the local channel for authenticated checks and keep proxying www.logyou.de/logship for old builds (MOBILE_APP_LEGACY_FALLBACK); new Settings → Mobile App page with QR install code, download link and admin upload form; publish endpoint (admin verified via ad_role or service token) + scripts/publish-mobile-update.sh; release-app.sh publishes to erp,landing; deploy script preserves data/mobile-releases</msg><path><editType>add</editType><file>server/api/mobile/app-download-link.get.ts</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>.env-dev</file></path><path><editType>edit</editType><file>scripts/upload-mobile-update.sh</file></path><path><editType>add</editType><file>server/api/settings/mobile-app/publish.post.ts</file></path><path><editType>add</editType><file>server/api/public/mobile/[token]/[...path].ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>reference/ci/deploy-production.sh</file></path><path><editType>edit</editType><file>scripts/release-app.sh</file></path><path><editType>add</editType><file>server/utils/mobileReleases.ts</file></path><path><editType>edit</editType><file>.env</file></path><path><editType>add</editType><file>app/pages/settings/mobile-app/index.vue</file></path><path><editType>edit</editType><file>scripts/stage-mobile-update.sh</file></path><path><editType>edit</editType><file>server/api/mobile/app-version.get.ts</file></path><path><editType>edit</editType><file>server/api/mobile/app-versions.get.ts</file></path><path><editType>edit</editType><file>.env-prod</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>edit</editType><file>app/composables/menu/admin/settings.ts</file></path><path><editType>add</editType><file>scripts/publish-mobile-update.sh</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/materials/products/search.get.ts</affectedPath><affectedPath>app/pages/mobile/inventory.vue</affectedPath><affectedPath>app/pages/mobile/receive.vue</affectedPath><affectedPath>reference/~$roadsurfer_Fulfillment_Anfrage_Preisblatt_LogYou.xlsx</affectedPath><affectedPath>app/pages/mobile/print-labels.vue</affectedPath><affectedPath>reference/roadsurfer_Fulfillment_Anfrage_Preisblatt (3).xlsx</affectedPath><affectedPath>app/pages/mobile/fix-locator-owner.vue</affectedPath><affectedPath>app/pages/mobile/product.vue</affectedPath><affectedPath>server/api/mobile/product-search.post.ts</affectedPath><affectedPath>reference/roadsurfer_Fulfillment_Anfrage_Preisblatt_LogYou.xlsx</affectedPath><affectedPath>app/pages/mobile/return.vue</affectedPath><affectedPath>app/pages/mobile/movement.vue</affectedPath><commitId>6ec8b08642bd83c7778bedbbc43d14bd77423300</commitId><timestamp>1789030903000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>show bom on mobile search
</comment><date>2026-09-10 11:01:43 +0200</date><id>6ec8b08642bd83c7778bedbbc43d14bd77423300</id><msg>show bom on mobile search</msg><path><editType>edit</editType><file>app/pages/mobile/receive.vue</file></path><path><editType>edit</editType><file>server/api/materials/products/search.get.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/movement.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/print-labels.vue</file></path><path><editType>add</editType><file>reference/~$roadsurfer_Fulfillment_Anfrage_Preisblatt_LogYou.xlsx</file></path><path><editType>edit</editType><file>app/pages/mobile/return.vue</file></path><path><editType>add</editType><file>reference/roadsurfer_Fulfillment_Anfrage_Preisblatt (3).xlsx</file></path><path><editType>edit</editType><file>app/pages/mobile/product.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/fix-locator-owner.vue</file></path><path><editType>edit</editType><file>server/api/mobile/product-search.post.ts</file></path><path><editType>add</editType><file>reference/roadsurfer_Fulfillment_Anfrage_Preisblatt_LogYou.xlsx</file></path><path><editType>edit</editType><file>app/pages/mobile/inventory.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><commitId>7dfb2c9d7a1f68be35d33c900a9558fbb28e0b31</commitId><timestamp>1789031079000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>release app 1.0.41 (code 42): movement ticket + BOM in mobile search
</comment><date>2026-09-10 11:04:39 +0200</date><id>7dfb2c9d7a1f68be35d33c900a9558fbb28e0b31</id><msg>release app 1.0.41 (code 42): movement ticket + BOM in mobile search</msg><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>scripts/release-app.sh</affectedPath><commitId>80eb9f223b2040bdd659ad95c627f20ddd818207</commitId><timestamp>1789031406000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>release-app.sh: interactive release — asks for versionName (Enter = auto bump), release notes, publish target (default: ERP channel only; landing/sftp optional, website push asked separately) and a final confirmation with summary; --yes runs non-interactively with the defaults
</comment><date>2026-09-10 11:10:06 +0200</date><id>80eb9f223b2040bdd659ad95c627f20ddd818207</id><msg>release-app.sh: interactive release — asks for versionName (Enter = auto bump), release notes, publish target (default: ERP channel only; landing/sftp optional, website push asked separately) and a final confirmation with summary; --yes runs non-interactively with the defaults</msg><path><editType>edit</editType><file>scripts/release-app.sh</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/mobile/ProductThumb.vue</affectedPath><affectedPath>server/api/materials/products/search.get.ts</affectedPath><affectedPath>app/pages/mobile/inventory.vue</affectedPath><affectedPath>app/pages/mobile/receive.vue</affectedPath><affectedPath>server/api/mobile/product-thumb/[id].get.ts</affectedPath><affectedPath>app/pages/mobile/fix-locator-owner.vue</affectedPath><affectedPath>app/pages/mobile/print-labels.vue</affectedPath><affectedPath>app/pages/mobile/product.vue</affectedPath><affectedPath>server/api/mobile/product-search.post.ts</affectedPath><affectedPath>app/pages/mobile/return.vue</affectedPath><affectedPath>app/pages/mobile/movement.vue</affectedPath><commitId>a9d04682477bb7e454899e41ffba3b62510f6ce7</commitId><timestamp>1789032523000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile article search: BOM / JTL-BOM tags on results, "Stücklisten (BOM) ausblenden" filter checkbox (default off, on all 7 pages incl. receive), article names clamped to 3 lines, viewport-lazy product thumbnails (MobileProductThumb + GET /api/mobile/product-thumb/{id}, per-product client + 10-min server cache) — search endpoints return isBOM/isJtlBom/imageUrl
</comment><date>2026-09-10 11:28:43 +0200</date><id>a9d04682477bb7e454899e41ffba3b62510f6ce7</id><msg>Mobile article search: BOM / JTL-BOM tags on results, "Stücklisten (BOM) ausblenden" filter checkbox (default off, on all 7 pages incl. receive), article names clamped to 3 lines, viewport-lazy product thumbnails (MobileProductThumb + GET /api/mobile/product-thumb/{id}, per-product client + 10-min server cache) — search endpoints return isBOM/isJtlBom/imageUrl</msg><path><editType>edit</editType><file>app/pages/mobile/return.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/fix-locator-owner.vue</file></path><path><editType>add</editType><file>server/api/mobile/product-thumb/[id].get.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/product.vue</file></path><path><editType>edit</editType><file>server/api/materials/products/search.get.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/receive.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/inventory.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/movement.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/print-labels.vue</file></path><path><editType>edit</editType><file>server/api/mobile/product-search.post.ts</file></path><path><editType>add</editType><file>app/components/mobile/ProductThumb.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/plugins/00.capacitor-api.client.ts</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>app/composables/useAppUpdate.ts</affectedPath><commitId>de1f81e0ec815245ce32ccd881ddcfb7784b93ea</commitId><timestamp>1789034450000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile app update check now authenticated: useAppUpdate uses relative /api/mobile/app-version(s) so the Capacitor fetch wrapper injects the Bearer token (absolute URLs bypassed it and only ever saw the legacy www.logyou.de manifest); the raw-fetch wrapper also handles absolute apiBase/api URLs; release app 1.0.44 (code 45)
</comment><date>2026-09-10 12:00:50 +0200</date><id>de1f81e0ec815245ce32ccd881ddcfb7784b93ea</id><msg>Mobile app update check now authenticated: useAppUpdate uses relative /api/mobile/app-version(s) so the Capacitor fetch wrapper injects the Bearer token (absolute URLs bypassed it and only ever saw the legacy www.logyou.de manifest); the raw-fetch wrapper also handles absolute apiBase/api URLs; release app 1.0.44 (code 45)</msg><path><editType>edit</editType><file>app/plugins/00.capacitor-api.client.ts</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>app/composables/useAppUpdate.ts</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><commitId>9579d52a373e994fba20c9069e0c34d64f5d48df</commitId><timestamp>1789034519000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>release app 1.0.45 (code 46): authenticated update check
</comment><date>2026-09-10 12:01:59 +0200</date><id>9579d52a373e994fba20c9069e0c34d64f5d48df</id><msg>release app 1.0.45 (code 46): authenticated update check</msg><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/settings.json</affectedPath><affectedPath>.gitignore</affectedPath><commitId>2d2b2fb44183b2f0fc103fe7b58bb02ef2bf0fae</commitId><timestamp>1789034920000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Track .claude/settings.json so cloud sessions default to bypass permissions
</comment><date>2026-09-10 12:08:40 +0200</date><id>2d2b2fb44183b2f0fc103fe7b58bb02ef2bf0fae</id><msg>Track .claude/settings.json so cloud sessions default to bypass permissions</msg><path><editType>edit</editType><file>.gitignore</file></path><path><editType>add</editType><file>.claude/settings.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/ProductDetailRecordLocatedAt.vue</affectedPath><commitId>811b119c435d102b227b8ba1f4cd92edda76c8a1</commitId><timestamp>1789044442000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Product Located-at tab: quantity pills aligned with their column headers, Active column removed, Date Material Policy shown as dd.mm.yyyy
</comment><date>2026-09-10 14:47:22 +0200</date><id>811b119c435d102b227b8ba1f4cd92edda76c8a1</id><msg>Product Located-at tab: quantity pills aligned with their column headers, Active column removed, Date Material Policy shown as dd.mm.yyyy</msg><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordLocatedAt.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/ProductForm.vue</affectedPath><commitId>6c46f67746d277eea733bd682852131879b9ee28</commitId><timestamp>1789044442000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Product form: hide Summary Level checkbox (commented out, not needed for now; isSummary stays in the model)
</comment><date>2026-09-10 14:47:22 +0200</date><id>6c46f67746d277eea733bd682852131879b9ee28</id><msg>Product form: hide Summary Level checkbox (commented out, not needed for now; isSummary stays in the model)</msg><path><editType>edit</editType><file>app/components/materials/ProductForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/useTransactionReportPdf.ts</affectedPath><affectedPath>server/api/materials/products/search.get.ts</affectedPath><affectedPath>app/pages/materials/transactions.vue</affectedPath><commitId>8ffa636208f0c71cfa4ff4d8c47b2bc8649ba9fc</commitId><timestamp>1789044442000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Transactions page: product search on the Nuxt UI SelectBox wrapper (tedir-select dropped) with rich results (thumbnail, article no., SKU/MPN/category, BOM + org + inactive tags), selected-product card with product link, ?productId= deep link that preloads the product and its history; PDF report extracted into useTransactionReportPdf; product search returns org/category/active
</comment><date>2026-09-10 14:47:22 +0200</date><id>8ffa636208f0c71cfa4ff4d8c47b2bc8649ba9fc</id><msg>Transactions page: product search on the Nuxt UI SelectBox wrapper (tedir-select dropped) with rich results (thumbnail, article no., SKU/MPN/category, BOM + org + inactive tags), selected-product card with product link, ?productId= deep link that preloads the product and its history; PDF report extracted into useTransactionReportPdf; product search returns org/category/active</msg><path><editType>edit</editType><file>server/api/materials/products/search.get.ts</file></path><path><editType>edit</editType><file>app/pages/materials/transactions.vue</file></path><path><editType>add</editType><file>app/composables/useTransactionReportPdf.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/materials/products/[id]/transaction/index.get.ts</affectedPath><affectedPath>app/components/materials/ProductDetailRecordTransaction.vue</affectedPath><commitId>937074b2db7cebfe41e77f58b283eb186d9fe1da</commitId><timestamp>1789044442000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Product Transactions tab: order + shipment links (server resolves M_InOutLine → M_InOut → C_Order with a batched lookup; sales vs purchase routes), dates as dd.mm.yyyy with muted booking time, coloured movement-type icons and signed quantity pills, Active column removed, Report button (PDF preview modal + download) and link to the prefilled transactions page
</comment><date>2026-09-10 14:47:22 +0200</date><id>937074b2db7cebfe41e77f58b283eb186d9fe1da</id><msg>Product Transactions tab: order + shipment links (server resolves M_InOutLine → M_InOut → C_Order with a batched lookup; sales vs purchase routes), dates as dd.mm.yyyy with muted booking time, coloured movement-type icons and signed quantity pills, Active column removed, Report button (PDF preview modal + download) and link to the prefilled transactions page</msg><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordTransaction.vue</file></path><path><editType>edit</editType><file>server/api/materials/products/[id]/transaction/index.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/fetchHelper.ts</affectedPath><affectedPath>server/utils/refreshTokenHelper.ts</affectedPath><affectedPath>server/middleware/fetch.ts</affectedPath><commitId>11ac029738ce4ae6caf08464d24d7972fb8c9352</commitId><timestamp>1789048717000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>iDempiere fetch layer: no ofetch auto-retry, 90 s timeout, and no token-refresh retry after backend errors

fetchHelper and event.context.fetch now send retry: 0 (ofetch retried every GET once on 500/502/503/504) plus a timeout (IDEMPIERE_FETCH_TIMEOUT_MS, default 90 s) and record the last iDempiere error on event.context. refreshTokenHelper throws instead of refreshing when that error is not 401/403, so the standard catch → refresh → retry route pattern no longer re-runs a query that just timed out on a stalled backend (2026-09-10 retry storm: 6 → 79 calls/min of one heavy query, 178 of 200 Jetty threads blocked).
</comment><date>2026-09-10 15:58:37 +0200</date><id>11ac029738ce4ae6caf08464d24d7972fb8c9352</id><msg>iDempiere fetch layer: no ofetch auto-retry, 90 s timeout, and no token-refresh retry after backend errors</msg><path><editType>edit</editType><file>server/middleware/fetch.ts</file></path><path><editType>edit</editType><file>server/utils/fetchHelper.ts</file></path><path><editType>edit</editType><file>server/utils/refreshTokenHelper.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/materials/products/qty-on-hand-overview.get.ts</affectedPath><affectedPath>server/utils/productStorageHelper.ts</affectedPath><affectedPath>server/api/materials/products/index.get.ts</affectedPath><affectedPath>server/api/materials/products/qty-on-hand-pit.get.ts</affectedPath><affectedPath>server/api/materials/locators/priority-recommendations.get.ts</affectedPath><affectedPath>server/api/materials/products/qty-on-hand-by-locator.get.ts</affectedPath><affectedPath>server/api/materials/products/ag-grid/products.post.ts</affectedPath><commitId>df9ce51c1905ff2e546a2f03d259fc6d6ae689d0</commitId><timestamp>1789048717000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Products with stock: drop $expand=M_Storage (global-lock hazard in idempiere-rest) for a paged m_storage join

New server/utils/productStorageHelper.ts fetches products plainly and joins m_storage rows in Node (by-id chunks for a page, all rows with a 30 s single-flight cache for full lists), keeping the M_Storage array shape. A detail expand runs DefaultQueryConverter.convertStatement (synchronized singleton) once per parent record — 3.3k products = ~6.6k serialized queries under one lock that every other $filter request waits on. Switched: materials/products (also gains ?top=&amp;skip= and a 60 s per client/role/org response cache with single-flight), ag-grid products, qty-on-hand overview/by-locator/pit, locator priority recommendations.
</comment><date>2026-09-10 15:58:37 +0200</date><id>df9ce51c1905ff2e546a2f03d259fc6d6ae689d0</id><msg>Products with stock: drop $expand=M_Storage (global-lock hazard in idempiere-rest) for a paged m_storage join</msg><path><editType>edit</editType><file>server/api/materials/products/qty-on-hand-by-locator.get.ts</file></path><path><editType>edit</editType><file>server/api/materials/products/index.get.ts</file></path><path><editType>edit</editType><file>server/api/materials/products/qty-on-hand-pit.get.ts</file></path><path><editType>edit</editType><file>server/api/materials/products/qty-on-hand-overview.get.ts</file></path><path><editType>edit</editType><file>server/api/materials/locators/priority-recommendations.get.ts</file></path><path><editType>edit</editType><file>server/api/materials/products/ag-grid/products.post.ts</file></path><path><editType>add</editType><file>server/utils/productStorageHelper.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/synologyHelper.ts</affectedPath><commitId>029c404ada50027cefc2e31638d4ca37741234f4</commitId><timestamp>1789048717000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Synology helper: timeouts on every NAS call, shared session, re-login on session errors

Every Surveillance Station request carries an AbortSignal timeout (15 s API, 5 min download) so a hung NAS cannot pin a request. One login is reused for 30 min across requests instead of login+logout per call; error codes 105/106/107/119 trigger exactly one re-login + retry with the session updated in place. synologyLogout is a no-op unless force=true, so the route handlers are unchanged.
</comment><date>2026-09-10 15:58:37 +0200</date><id>029c404ada50027cefc2e31638d4ca37741234f4</id><msg>Synology helper: timeouts on every NAS call, shared session, re-login on session errors</msg><path><editType>edit</editType><file>server/utils/synologyHelper.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/recipes.md</affectedPath><commitId>8c172c0be5713df8d7222328e4d66d38cf2b47a8</commitId><timestamp>1789048717000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Recipes: iDempiere REST load rules (no child $expand over big lists, no blind retries, $top everywhere) and the Synology session/timeout conventions
</comment><date>2026-09-10 15:58:37 +0200</date><id>8c172c0be5713df8d7222328e4d66d38cf2b47a8</id><msg>Recipes: iDempiere REST load rules (no child $expand over big lists, no blind retries, $top everywhere) and the Synology session/timeout conventions</msg><path><editType>edit</editType><file>reference/recipes.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/reconditioning.vue</affectedPath><affectedPath>server/utils/returnLocatorHelper.ts</affectedPath><affectedPath>server/api/mobile/reconditioning/lookup.post.ts</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><affectedPath>server/api/mobile/reconditioning/target-locators.post.ts</affectedPath><affectedPath>server/api/materials/stock-transfers/store.post.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>06b01d4c15174f621d93d5f66812bee129e41177</commitId><timestamp>1789051910000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile Reconditioning page (/mobile/reconditioning): scan return label (RMA no. / customer-return doc no. / product code) → customer return with lines on non-shippable locators only, select articles + qty (capped by on-hand and already-reconditioned qty), target locator with org default preselected, books an M_Movement linked via M_Movement.M_Customer_Return_ID (fail-soft if column missing), then optional billable 'Reconditioning' ticket (time/amount, articles as message, no note/voice); endpoints /api/mobile/reconditioning/{lookup,target-locators}; dashboard tile + en/de/es/ne translations
</comment><date>2026-09-10 16:51:50 +0200</date><id>06b01d4c15174f621d93d5f66812bee129e41177</id><msg>Mobile Reconditioning page (/mobile/reconditioning): scan return label (RMA no. / customer-return doc no. / product code) → customer return with lines on non-shippable locators only, select articles + qty (capped by on-hand and already-reconditioned qty), target locator with org default preselected, books an M_Movement linked via M_Movement.M_Customer_Return_ID (fail-soft if column missing), then optional billable 'Reconditioning' ticket (time/amount, articles as message, no note/voice); endpoints /api/mobile/reconditioning/{lookup,target-locators}; dashboard tile + en/de/es/ne translations</msg><path><editType>add</editType><file>server/api/mobile/reconditioning/lookup.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/utils/returnLocatorHelper.ts</file></path><path><editType>add</editType><file>app/pages/mobile/reconditioning.vue</file></path><path><editType>edit</editType><file>server/api/materials/stock-transfers/store.post.ts</file></path><path><editType>add</editType><file>server/api/mobile/reconditioning/target-locators.post.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><commitId>59962537dce5a8b573a7c0895f02e00770863f7c</commitId><timestamp>1789052001000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>release app 1.0.46 (code 47): mobile Reconditioning page
</comment><date>2026-09-10 16:53:21 +0200</date><id>59962537dce5a8b573a7c0895f02e00770863f7c</id><msg>release app 1.0.46 (code 47): mobile Reconditioning page</msg><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/bi/product-performance.get.ts</affectedPath><affectedPath>app/composables/menu/admin/bi.ts</affectedPath><affectedPath>app/pages/bi/product-performance.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><commitId>63146b1cd06c93d864c5f8c03573b917757d37ba</commitId><timestamp>1789052728000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>BI Product Performance (/bi/product-performance, admins only): per-merchant product sales analytics — rolling window (3d…12m) with previous-period deltas or 12/6/24-month matrix (heat cells, sparklines, 3M-vs-3M trend); sold/returned/return-rate/net revenue/on-hand/coverage per product; scope = top N sellers or manual pick list (persisted per org, pin from table); KPI cards, daily and monthly charts, category share, worst return rates, CSV export; direct-Postgres route server/api/bi/product-performance.get.ts; sidebar + top-menu entries, en/de/es translations
</comment><date>2026-09-10 17:05:28 +0200</date><id>63146b1cd06c93d864c5f8c03573b917757d37ba</id><msg>BI Product Performance (/bi/product-performance, admins only): per-merchant product sales analytics — rolling window (3d…12m) with previous-period deltas or 12/6/24-month matrix (heat cells, sparklines, 3M-vs-3M trend); sold/returned/return-rate/net revenue/on-hand/coverage per product; scope = top N sellers or manual pick list (persisted per org, pin from table); KPI cards, daily and monthly charts, category share, worst return rates, CSV export; direct-Postgres route server/api/bi/product-performance.get.ts; sidebar + top-menu entries, en/de/es translations</msg><path><editType>add</editType><file>app/pages/bi/product-performance.vue</file></path><path><editType>add</editType><file>server/api/bi/product-performance.get.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>edit</editType><file>app/composables/menu/admin/bi.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/bi/product-performance.vue</affectedPath><commitId>77517cfa18d11aab027e793d79f92f3ab9cf573f</commitId><timestamp>1789053260000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>BI Product Performance: hide charts/table until a report is loaded (no stale chart data when switching org or with an empty manual selection), subtle row action buttons
</comment><date>2026-09-10 17:14:20 +0200</date><id>77517cfa18d11aab027e793d79f92f3ab9cf573f</id><msg>BI Product Performance: hide charts/table until a report is loaded (no stale chart data when switching org or with an empty manual selection), subtle row action buttons</msg><path><editType>edit</editType><file>app/pages/bi/product-performance.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/reconditioning.vue</affectedPath><affectedPath>server/api/mobile/reconditioning/lookup.post.ts</affectedPath><affectedPath>app/pages/mobile/return.vue</affectedPath><affectedPath>app/pages/integrations/returns-desktop.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>6fd692b75c4074aaff411735e54a2ca8301c8de9</commitId><timestamp>1789060461000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile Reconditioning: lookup by RMA number only (no return-doc-no / product-code fallback), return label barcode now encodes the RMA number (was product SKU, so scanning never hit the RMA path), keep-alive focus lifecycle for the hidden scanner input, en/de/es hint texts
</comment><date>2026-09-10 19:14:21 +0200</date><id>6fd692b75c4074aaff411735e54a2ca8301c8de9</id><msg>Mobile Reconditioning: lookup by RMA number only (no return-doc-no / product-code fallback), return label barcode now encodes the RMA number (was product SKU, so scanning never hit the RMA path), keep-alive focus lifecycle for the hidden scanner input, en/de/es hint texts</msg><path><editType>edit</editType><file>app/pages/mobile/return.vue</file></path><path><editType>edit</editType><file>server/api/mobile/reconditioning/lookup.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/mobile/reconditioning.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/returns-desktop.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/reconditioning.vue</affectedPath><affectedPath>server/api/mobile/reconditioning/print-report.post.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>5b77679c090a7efc6f52a11c276005f81798ebcf</commitId><timestamp>1789060807000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile Reconditioning: A4 movement report (Umlagerungsbericht) printed after booking — server-rendered pdfmake sheet grouped by target locator (article, qty, from → to, checkboxes, disposed lines, signature line) sent via lp to the remembered paper printer (CUST_Printer 'pap', default-on toggle + printer select persisted per device); per-line 'Entsorgen' option books non-reconditionable articles OUT via physical inventory (MMIPI, qtyCount = on-hand − disposed, description documents the disposal) instead of moving them, target locator only required when something is moved; ticket + report cover both; en/de/es keys
</comment><date>2026-09-10 19:20:07 +0200</date><id>5b77679c090a7efc6f52a11c276005f81798ebcf</id><msg>Mobile Reconditioning: A4 movement report (Umlagerungsbericht) printed after booking — server-rendered pdfmake sheet grouped by target locator (article, qty, from → to, checkboxes, disposed lines, signature line) sent via lp to the remembered paper printer (CUST_Printer 'pap', default-on toggle + printer select persisted per device); per-line 'Entsorgen' option books non-reconditionable articles OUT via physical inventory (MMIPI, qtyCount = on-hand − disposed, description documents the disposal) instead of moving them, target locator only required when something is moved; ticket + report cover both; en/de/es keys</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/mobile/reconditioning.vue</file></path><path><editType>add</editType><file>server/api/mobile/reconditioning/print-report.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/update-files/version.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><commitId>affedcf372684fb431685c61bb299efef3542419</commitId><timestamp>1789060902000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>release app 1.0.47 (code 48): Reconditioning RMA-only scan, A4 movement report, disposal option
</comment><date>2026-09-10 19:21:42 +0200</date><id>affedcf372684fb431685c61bb299efef3542419</id><msg>release app 1.0.47 (code 48): Reconditioning RMA-only scan, A4 movement report, disposal option</msg><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/return.vue</affectedPath><affectedPath>server/api/print/return-label.post.ts</affectedPath><affectedPath>app/pages/integrations/returns-desktop.vue</affectedPath><commitId>3720a71faf263fcf49588812d303e43e52fd2baa</commitId><timestamp>1789062247000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Return label rebuilt: ONE label per return (was one per article and qty) rendered server-side by POST /api/print/return-label at the printer's real label size (registry → CUPS → legacy fallback, same as product labels) with size-driven layouts (tiny 35×17 / compact 54×29 / standard 74×52, 56×75, 102×152 with continuation pages), vector CODE128 of the RMA or customer-return document number, ad_org.companyname header band, partner · reason · locator line and an article table with quantities; mobile return page + desktop returns page now call the route instead of building jsPDF labels client-side
</comment><date>2026-09-10 19:44:07 +0200</date><id>3720a71faf263fcf49588812d303e43e52fd2baa</id><msg>Return label rebuilt: ONE label per return (was one per article and qty) rendered server-side by POST /api/print/return-label at the printer's real label size (registry → CUPS → legacy fallback, same as product labels) with size-driven layouts (tiny 35×17 / compact 54×29 / standard 74×52, 56×75, 102×152 with continuation pages), vector CODE128 of the RMA or customer-return document number, ad_org.companyname header band, partner · reason · locator line and an article table with quantities; mobile return page + desktop returns page now call the route instead of building jsPDF labels client-side</msg><path><editType>add</editType><file>server/api/print/return-label.post.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/return.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/returns-desktop.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><commitId>a7077f906fa454a31e9d28a5415ce57f617140ed</commitId><timestamp>1789062317000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>release app 1.0.48 (code 49): new return label (one per return, server-rendered)
</comment><date>2026-09-10 19:45:17 +0200</date><id>a7077f906fa454a31e9d28a5415ce57f617140ed</id><msg>release app 1.0.48 (code 49): new return label (one per return, server-rendered)</msg><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/settings/OrderSourceForm.vue</affectedPath><affectedPath>app/pages/settings/order-sources/[id]/edit.vue</affectedPath><affectedPath>app/pages/settings/order-sources/create.vue</affectedPath><affectedPath>server/api/settings/order-sources/update.put.ts</affectedPath><affectedPath>server/api/settings/order-sources/store.post.ts</affectedPath><affectedPath>app/pages/settings/order-sources/[id]/view.vue</affectedPath><commitId>b0144617e997073012c0381e848fff6798b301d7</commitId><timestamp>1789065370000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Order sources: Amazon returns import flag (isImportReturns) + lookback days (importReturnsDaysFilter) wired through create/edit/view + store/update routes — toggle in the Marketplace-Specific tab's Amazon SP-API block gates the middleware's daily MFN returns → RMA import
</comment><date>2026-09-10 20:36:10 +0200</date><id>b0144617e997073012c0381e848fff6798b301d7</id><msg>Order sources: Amazon returns import flag (isImportReturns) + lookback days (importReturnsDaysFilter) wired through create/edit/view + store/update routes — toggle in the Marketplace-Specific tab's Amazon SP-API block gates the middleware's daily MFN returns → RMA import</msg><path><editType>edit</editType><file>app/pages/settings/order-sources/create.vue</file></path><path><editType>edit</editType><file>server/api/settings/order-sources/update.put.ts</file></path><path><editType>edit</editType><file>app/pages/settings/order-sources/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/settings/order-sources/[id]/view.vue</file></path><path><editType>edit</editType><file>server/api/settings/order-sources/store.post.ts</file></path><path><editType>edit</editType><file>app/components/settings/OrderSourceForm.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>732</buildNumber><marked><SHA1>665054863af2bb33ea7671f10f6fdea82e9a12b2</SHA1><branch><SHA1>665054863af2bb33ea7671f10f6fdea82e9a12b2</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>665054863af2bb33ea7671f10f6fdea82e9a12b2</SHA1><branch><SHA1>665054863af2bb33ea7671f10f6fdea82e9a12b2</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>665054863af2bb33ea7671f10f6fdea82e9a12b2</SHA1><branch><SHA1>665054863af2bb33ea7671f10f6fdea82e9a12b2</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'></action><building>false</building><displayName>#732</displayName><duration>69768</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #732</fullDisplayName><id>732</id><inProgress>false</inProgress><keepLog>false</keepLog><number>732</number><queueId>5663</queueId><result>SUCCESS</result><timestamp>1788998400285</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/732/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/AgGrid/Invoices/AgPayJoeStatus.vue</affectedPath><affectedPath>app/components/AgGrid/Invoices/AgLexofficeStatus.vue</affectedPath><affectedPath>app/components/AgGrid/Invoices/AgAmazonStatus.vue</affectedPath><affectedPath>app/components/sales/InvoiceListFilters.vue</affectedPath><affectedPath>server/api/invoices/so.get.ts</affectedPath><affectedPath>app/components/AgGrid/Invoices/AgCurrency.vue</affectedPath><affectedPath>app/components/AgGrid/Invoices/AgDateInvoiced.vue</affectedPath><affectedPath>app/pages/sales/invoices/index.vue</affectedPath><affectedPath>app/components/sales/InvoiceActionsMenu.vue</affectedPath><affectedPath>app/components/AgGrid/Invoices/AgLink.vue</affectedPath><affectedPath>app/components/AgGrid/Invoices/AgDocStatus.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>665054863af2bb33ea7671f10f6fdea82e9a12b2</commitId><timestamp>1788948521000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Invoices list: filter bar (order source, fulfillment/non-fulfillment, payment state, amount range) and Documents / Accounting dropdown menus replacing the ten icon buttons

- SalesInvoiceListFilters: order-source select with counts, order-type and payment segmented controls, dual-thumb amount slider; filters the row data so the grand-total row and the shown counts match
- SalesInvoiceActionsMenu: Nuxt UI dropdowns with per-entry descriptions and progress labels; one busy key replaces the per-action booleans, upload/reset handlers share helpers
- so.get.ts expands C_Order.IsFulfillmentOrder; rows carry paymentStatus/overdueDays using the same rules as the cell badges
- Invoice cell renderers guard params.data (the grand-total row has none) — previously every row re-render threw and left the renderer columns blank
- invl_* translation keys (en/de/es)
</comment><date>2026-09-09 12:08:41 +0200</date><id>665054863af2bb33ea7671f10f6fdea82e9a12b2</id><msg>Invoices list: filter bar (order source, fulfillment/non-fulfillment, payment state, amount range) and Documents / Accounting dropdown menus replacing the ten icon buttons</msg><path><editType>edit</editType><file>app/components/AgGrid/Invoices/AgDateInvoiced.vue</file></path><path><editType>edit</editType><file>app/components/AgGrid/Invoices/AgLexofficeStatus.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/AgGrid/Invoices/AgDocStatus.vue</file></path><path><editType>add</editType><file>app/components/sales/InvoiceActionsMenu.vue</file></path><path><editType>edit</editType><file>server/api/invoices/so.get.ts</file></path><path><editType>edit</editType><file>app/components/AgGrid/Invoices/AgLink.vue</file></path><path><editType>edit</editType><file>app/components/AgGrid/Invoices/AgPayJoeStatus.vue</file></path><path><editType>edit</editType><file>app/components/AgGrid/Invoices/AgAmazonStatus.vue</file></path><path><editType>edit</editType><file>app/pages/sales/invoices/index.vue</file></path><path><editType>add</editType><file>app/components/sales/InvoiceListFilters.vue</file></path><path><editType>edit</editType><file>app/components/AgGrid/Invoices/AgCurrency.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>731</buildNumber><marked><SHA1>25e57e1d2a58ceb6994e6c82bab7533d42935788</SHA1><branch><SHA1>25e57e1d2a58ceb6994e6c82bab7533d42935788</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>25e57e1d2a58ceb6994e6c82bab7533d42935788</SHA1><branch><SHA1>25e57e1d2a58ceb6994e6c82bab7533d42935788</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>25e57e1d2a58ceb6994e6c82bab7533d42935788</SHA1><branch><SHA1>25e57e1d2a58ceb6994e6c82bab7533d42935788</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'></action><building>false</building><displayName>#731</displayName><duration>64695</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #731</fullDisplayName><id>731</id><inProgress>false</inProgress><keepLog>false</keepLog><number>731</number><queueId>5661</queueId><result>SUCCESS</result><timestamp>1788912000272</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/731/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/public/sign/[token]/index.post.ts</affectedPath><affectedPath>server/api/offers/contract/signing-status.get.ts</affectedPath><affectedPath>server/api/public/sign/[token]/document/[key].get.ts</affectedPath><affectedPath>server/api/public/sign/[token]/index.get.ts</affectedPath><affectedPath>server/utils/offers/contractSigningDb.ts</affectedPath><commitId>6867a990ad10e973d0fcb49b44dd4c5166806fcd</commitId><timestamp>1788846822000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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.
</comment><date>2026-09-08 07:53:42 +0200</date><id>6867a990ad10e973d0fcb49b44dd4c5166806fcd</id><msg>Signing store: kind column (contract | quote), kind-aware supersede and status history</msg><path><editType>edit</editType><file>server/api/offers/contract/signing-status.get.ts</file></path><path><editType>edit</editType><file>server/api/public/sign/[token]/index.get.ts</file></path><path><editType>edit</editType><file>server/api/public/sign/[token]/document/[key].get.ts</file></path><path><editType>edit</editType><file>server/utils/offers/contractSigningDb.ts</file></path><path><editType>edit</editType><file>server/api/public/sign/[token]/index.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/contactActivity.ts</affectedPath><affectedPath>server/utils/offers/contractSigning.ts</affectedPath><affectedPath>server/api/offers/contract/send.post.ts</affectedPath><commitId>a8c47ec14aacc1ac6e45a92468871c6d9b093212</commitId><timestamp>1788846822000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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.
</comment><date>2026-09-08 07:53:42 +0200</date><id>a8c47ec14aacc1ac6e45a92468871c6d9b093212</id><msg>Activities: log contract sent and contract signed on the record</msg><path><editType>edit</editType><file>server/utils/offers/contractSigning.ts</file></path><path><editType>edit</editType><file>server/api/offers/contract/send.post.ts</file></path><path><editType>add</editType><file>server/utils/offers/contactActivity.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>server/utils/offers/quoteConfirmation.ts</affectedPath><affectedPath>app/pages/confirm/[token].vue</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>server/api/public/confirm/[token]/index.post.ts</affectedPath><affectedPath>server/api/public/confirm/[token]/request-renewal.post.ts</affectedPath><affectedPath>server/api/offers/quote/send.post.ts</affectedPath><affectedPath>server/api/public/confirm/[token]/index.get.ts</affectedPath><affectedPath>server/api/public/confirm/[token]/document/[key].get.ts</affectedPath><affectedPath>server/utils/offers/offerConditions.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>7c8cbf87e7b8d409534fb242a15ad8a95d7ceecf</commitId><timestamp>1788846822000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Quotes: online confirmation button in the e-mail + public /confirm/&lt;token&gt; 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.
</comment><date>2026-09-08 07:53:42 +0200</date><id>7c8cbf87e7b8d409534fb242a15ad8a95d7ceecf</id><msg>Quotes: online confirmation button in the e-mail + public /confirm/&lt;token&gt; page</msg><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>add</editType><file>server/api/public/confirm/[token]/request-renewal.post.ts</file></path><path><editType>add</editType><file>server/utils/offers/quoteConfirmation.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>add</editType><file>server/api/public/confirm/[token]/index.get.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/api/offers/quote/send.post.ts</file></path><path><editType>add</editType><file>server/api/public/confirm/[token]/document/[key].get.ts</file></path><path><editType>edit</editType><file>server/utils/offers/offerConditions.ts</file></path><path><editType>add</editType><file>app/pages/confirm/[token].vue</file></path><path><editType>add</editType><file>server/api/public/confirm/[token]/index.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>app/components/offers/SigningLinksPanel.vue</affectedPath><affectedPath>app/components/admin/LeadForm.vue</affectedPath><affectedPath>app/components/admin/LeadDetailRecordActivity.vue</affectedPath><affectedPath>app/components/admin/LeadDetailRecord.vue</affectedPath><commitId>26daf290da8c94ae87d75e2f78f15a33ad8adb34</commitId><timestamp>1788846822000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Lead page: hero header, side panels for links + attachments, activity timeline

Restyled /edit/lead-&lt;id&gt;: 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.
</comment><date>2026-09-08 07:53:42 +0200</date><id>26daf290da8c94ae87d75e2f78f15a33ad8adb34</id><msg>Lead page: hero header, side panels for links + attachments, activity timeline</msg><path><editType>edit</editType><file>app/components/admin/LeadDetailRecord.vue</file></path><path><editType>edit</editType><file>app/components/admin/LeadForm.vue</file></path><path><editType>edit</editType><file>app/components/admin/LeadDetailRecordActivity.vue</file></path><path><editType>add</editType><file>app/components/offers/SigningLinksPanel.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sign/[token].vue</affectedPath><commitId>3bcec9625e1768733d5e7136392ece9112854a14</commitId><timestamp>1788846822000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Sign page: on phones only the PDF pans, the page never scrolls horizontally
</comment><date>2026-09-08 07:53:42 +0200</date><id>3bcec9625e1768733d5e7136392ece9112854a14</id><msg>Sign page: on phones only the PDF pans, the page never scrolls horizontally</msg><path><editType>edit</editType><file>app/pages/sign/[token].vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/accounting/banking/BankReconcilePanel.vue</affectedPath><commitId>5e677922cb07d6e92ce254ce5aa134c953f82679</commitId><timestamp>1788847457000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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.
</comment><date>2026-09-08 08:04:17 +0200</date><id>5e677922cb07d6e92ce254ce5aa134c953f82679</id><msg>Banking: combinable line filters (status, with suggestion, credit/debit), one Match button per row</msg><path><editType>edit</editType><file>app/components/accounting/banking/BankReconcilePanel.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/accounting/BankLineMatchModal.vue</affectedPath><affectedPath>server/api/invoices/[id]/pdf.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>2d529629dd7087711b7fd0272e86a1fb0333d052</commitId><timestamp>1788847457000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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_*).
</comment><date>2026-09-08 08:04:17 +0200</date><id>2d529629dd7087711b7fd0272e86a1fb0333d052</id><msg>Banking: restyled match modal with invoice thumbnails and inline PDF preview</msg><path><editType>add</editType><file>server/api/invoices/[id]/pdf.get.ts</file></path><path><editType>edit</editType><file>app/components/accounting/BankLineMatchModal.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/amazon/order-sources.get.ts</affectedPath><affectedPath>app/pages/accounting/amazon-settlements.vue</affectedPath><affectedPath>app/pages/accounting/ebay-settlements.vue</affectedPath><affectedPath>server/api/accounting/ebay/order-sources.get.ts</affectedPath><commitId>6d6c5a9505a8622125674e8b4c501793d5c96ba8</commitId><timestamp>1788847924000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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).
</comment><date>2026-09-08 08:12:04 +0200</date><id>6d6c5a9505a8622125674e8b4c501793d5c96ba8</id><msg>Settlements: range picker with presets, calendar and 'last N periods'; order source preset by org</msg><path><editType>edit</editType><file>app/pages/accounting/amazon-settlements.vue</file></path><path><editType>edit</editType><file>server/api/accounting/ebay/order-sources.get.ts</file></path><path><editType>edit</editType><file>app/pages/accounting/ebay-settlements.vue</file></path><path><editType>edit</editType><file>server/api/accounting/amazon/order-sources.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>server/utils/offers/pdfImages.ts</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>server/utils/offers/contractPdf.ts</affectedPath><commitId>7d9f6b6a5f6c39a4c956cc3c7a69dc0698266977</commitId><timestamp>1788848444000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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.
</comment><date>2026-09-08 08:20:44 +0200</date><id>7d9f6b6a5f6c39a4c956cc3c7a69dc0698266977</id><msg>Offer PDFs: normalise customer logo / screenshot / signature images to PNG or JPEG</msg><path><editType>add</editType><file>server/utils/offers/pdfImages.ts</file></path><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>server/utils/offers/contractPdf.ts</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>app/components/offers/ContractModal.vue</affectedPath><commitId>666a2f22c1bedff589d9903b4eba506068632234</commitId><timestamp>1788848444000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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.
</comment><date>2026-09-08 08:20:44 +0200</date><id>666a2f22c1bedff589d9903b4eba506068632234</id><msg>Offer/contract modals: consistent, spaced checkbox rows</msg><path><editType>edit</editType><file>app/components/offers/ContractModal.vue</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/accounting/SettlementSourceFields.vue</affectedPath><commitId>e163c30b60d98dd983bffd29c9b4a35ac30a984c</commitId><timestamp>1788848478000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Settlements range picker: pin the calendar grid body to table layout
</comment><date>2026-09-08 08:21:18 +0200</date><id>e163c30b60d98dd983bffd29c9b4a35ac30a984c</id><msg>Settlements range picker: pin the calendar grid body to table layout</msg><path><editType>edit</editType><file>app/components/accounting/SettlementSourceFields.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/recipes.md</affectedPath><commitId>e175e587f486e8aa322305a03243fe19bc47d7fd</commitId><timestamp>1788848643000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Recipes: activities [Dokumente] convention, quote confirmation portal, PDF image normalisation, invoice PDF url, UCalendar pinning, checkbox scale override
</comment><date>2026-09-08 08:24:03 +0200</date><id>e175e587f486e8aa322305a03243fe19bc47d7fd</id><msg>Recipes: activities [Dokumente] convention, quote confirmation portal, PDF image normalisation, invoice PDF url, UCalendar pinning, checkbox scale override</msg><path><editType>edit</editType><file>reference/recipes.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/ProductDetailRecordLocatedAt.vue</affectedPath><affectedPath>app/composables/states.ts</affectedPath><commitId>ecadbf8fdba3adfaaf4606a7e1e3f260362ebc28</commitId><timestamp>1788856346000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Product 'Located at' tab: show only locators with any on-hand / ordered / reserved qty by default, toggle for all, qty columns; drop tedir imports
</comment><date>2026-09-08 10:32:26 +0200</date><id>ecadbf8fdba3adfaaf4606a7e1e3f260362ebc28</id><msg>Product 'Located at' tab: show only locators with any on-hand / ordered / reserved qty by default, toggle for all, qty columns; drop tedir imports</msg><path><editType>edit</editType><file>app/composables/states.ts</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordLocatedAt.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/ProductStockLocatorsCard.vue</affectedPath><affectedPath>app/components/materials/ProductStockActionModal.vue</affectedPath><affectedPath>app/pages/materials/products/[id]/edit.vue</affectedPath><commitId>05ab84b63ee3aba0cfc569b4bb465352ed0ece3e</commitId><timestamp>1788856346000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Product edit: admin 'Bestand je Lagerplatz' card with per-locator tiles and in-page inventory count / goods receipt / movement modals that refresh quantities live
</comment><date>2026-09-08 10:32:26 +0200</date><id>05ab84b63ee3aba0cfc569b4bb465352ed0ece3e</id><msg>Product edit: admin 'Bestand je Lagerplatz' card with per-locator tiles and in-page inventory count / goods receipt / movement modals that refresh quantities live</msg><path><editType>edit</editType><file>app/pages/materials/products/[id]/edit.vue</file></path><path><editType>add</editType><file>app/components/materials/ProductStockLocatorsCard.vue</file></path><path><editType>add</editType><file>app/components/materials/ProductStockActionModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/receive-desktop.vue</affectedPath><commitId>7871bf08102d33741ddd70b99897d88aac182729</commitId><timestamp>1788856346000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Receive desktop: replace unstyled USelect/native selects with the SelectBox (Nuxt UI) wrapper, ignore stale org cookie entries
</comment><date>2026-09-08 10:32:26 +0200</date><id>7871bf08102d33741ddd70b99897d88aac182729</id><msg>Receive desktop: replace unstyled USelect/native selects with the SelectBox (Nuxt UI) wrapper, ignore stale org cookie entries</msg><path><editType>edit</editType><file>app/pages/integrations/receive-desktop.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/ProductStockLocatorsCard.vue</affectedPath><commitId>34cafbecb1954b33dde58fc2638abfa8015077d2</commitId><timestamp>1788857650000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Product stock card: 'Etiketten drucken' action opening print-labels-desktop with the article preloaded (productId + productValue hand-off, SKU/UPC fallback)
</comment><date>2026-09-08 10:54:10 +0200</date><id>34cafbecb1954b33dde58fc2638abfa8015077d2</id><msg>Product stock card: 'Etiketten drucken' action opening print-labels-desktop with the article preloaded (productId + productValue hand-off, SKU/UPC fallback)</msg><path><editType>edit</editType><file>app/components/materials/ProductStockLocatorsCard.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/recipes.md</affectedPath><commitId>f10c9649cb3920d39f04cd8b0114d98441064633</commitId><timestamp>1788857650000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Recipes: product page stock actions card + modal (data source, cloned document chains, live refresh, page hand-off)
</comment><date>2026-09-08 10:54:10 +0200</date><id>f10c9649cb3920d39f04cd8b0114d98441064633</id><msg>Recipes: product page stock actions card + modal (data source, cloned document chains, live refresh, page hand-off)</msg><path><editType>edit</editType><file>reference/recipes.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/print-labels-desktop.vue</affectedPath><commitId>5b97c2d515fcdfe9d8b51bd9b00570a1a9c0a11b</commitId><timestamp>1788859286000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-09-08 11:21:26 +0200</date><id>5b97c2d515fcdfe9d8b51bd9b00570a1a9c0a11b</id><msg>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</msg><path><editType>edit</editType><file>app/pages/integrations/print-labels-desktop.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/ProductStockLocatorsCard.vue</affectedPath><affectedPath>app/pages/materials/products/[id]/edit.vue</affectedPath><commitId>17d352cfcb1a5ce5660246960d7a983ec40662d6</commitId><timestamp>1788859286000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Product stock card: 'Etiketten drucken' opens the page's print-labels modal instead of a new tab
</comment><date>2026-09-08 11:21:26 +0200</date><id>17d352cfcb1a5ce5660246960d7a983ec40662d6</id><msg>Product stock card: 'Etiketten drucken' opens the page's print-labels modal instead of a new tab</msg><path><editType>edit</editType><file>app/pages/materials/products/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductStockLocatorsCard.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/offers/quote/send.post.ts</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>server/utils/offers/offerConditions.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><commitId>915e0f4f6e40350029d376104fc3d26e1dbe677b</commitId><timestamp>1788859992000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-09-08 11:33:12 +0200</date><id>915e0f4f6e40350029d376104fc3d26e1dbe677b</id><msg>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</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/api/offers/quote/send.post.ts</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>server/utils/offers/offerConditions.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/print/product.post.ts</affectedPath><affectedPath>app/pages/integrations/print-labels-desktop.vue</affectedPath><affectedPath>app/components/settings/PrinterForm.vue</affectedPath><affectedPath>app/pages/settings/printers/[id]/edit.vue</affectedPath><affectedPath>app/pages/settings/printers/create.vue</affectedPath><affectedPath>server/api/printers/cups-media.get.ts</affectedPath><affectedPath>app/pages/settings/printers/[id]/view.vue</affectedPath><affectedPath>server/api/settings/printers/store.post.ts</affectedPath><affectedPath>server/api/settings/printers/update.put.ts</affectedPath><affectedPath>app/components/sales/RelabelLabelPrintModal.vue</affectedPath><affectedPath>server/api/printers/index.get.ts</affectedPath><affectedPath>server/utils/labelMedia.ts</affectedPath><affectedPath>app/pages/settings/printers/[id]/duplicate.vue</affectedPath><affectedPath>reference/recipes.md</affectedPath><affectedPath>server/utils/cupsMedia.ts</affectedPath><affectedPath>app/pages/settings/printers/index.vue</affectedPath><affectedPath>server/utils/labelBarcode.ts</affectedPath><commitId>d81db0b973c0bf582df7f457d2dfb7974b2615ca</commitId><timestamp>1788864168000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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 &lt; 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
</comment><date>2026-09-08 12:42:48 +0200</date><id>d81db0b973c0bf582df7f457d2dfb7974b2615ca</id><msg>Product labels: size-exact pages per printer, vector CODE128, label size from printer registry with CUPS fallback</msg><path><editType>edit</editType><file>app/pages/settings/printers/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/print-labels-desktop.vue</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path><path><editType>edit</editType><file>server/api/printers/index.get.ts</file></path><path><editType>edit</editType><file>app/pages/settings/printers/[id]/view.vue</file></path><path><editType>add</editType><file>server/utils/labelMedia.ts</file></path><path><editType>edit</editType><file>server/api/settings/printers/update.put.ts</file></path><path><editType>add</editType><file>server/utils/cupsMedia.ts</file></path><path><editType>edit</editType><file>app/components/settings/PrinterForm.vue</file></path><path><editType>add</editType><file>server/api/printers/cups-media.get.ts</file></path><path><editType>edit</editType><file>app/pages/settings/printers/index.vue</file></path><path><editType>edit</editType><file>server/api/settings/printers/store.post.ts</file></path><path><editType>edit</editType><file>app/components/sales/RelabelLabelPrintModal.vue</file></path><path><editType>edit</editType><file>app/pages/settings/printers/create.vue</file></path><path><editType>edit</editType><file>app/pages/settings/printers/[id]/duplicate.vue</file></path><path><editType>edit</editType><file>server/api/print/product.post.ts</file></path><path><editType>add</editType><file>server/utils/labelBarcode.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/print/product.post.ts</affectedPath><commitId>fd32d8ff9d2823cb26fa373678f8f6e702029afe</commitId><timestamp>1788865575000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-09-08 13:06:15 +0200</date><id>fd32d8ff9d2823cb26fa373678f8f6e702029afe</id><msg>Product labels (compact): two name rows, barcode lower, org company name rotated along the right edge</msg><path><editType>edit</editType><file>server/api/print/product.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/print/product.post.ts</affectedPath><commitId>7c416c6207cd20cb749989c9e7438084d2509284</commitId><timestamp>1788867149000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Product labels (compact): wider text/barcode area, company name at the right edge, barcode lower with a clear gap under the text rows
</comment><date>2026-09-08 13:32:29 +0200</date><id>7c416c6207cd20cb749989c9e7438084d2509284</id><msg>Product labels (compact): wider text/barcode area, company name at the right edge, barcode lower with a clear gap under the text rows</msg><path><editType>edit</editType><file>server/api/print/product.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/useOpenShipments.ts</affectedPath><commitId>d57d085a7df0992fea2f94c53a03585617422d88</commitId><timestamp>1788872894000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-09-08 15:08:14 +0200</date><id>d57d085a7df0992fea2f94c53a03585617422d88</id><msg>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</msg><path><editType>edit</editType><file>app/composables/useOpenShipments.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/requests/RequestForm.vue</affectedPath><commitId>9afa79b55166ae0a4de7ff3f6046ff5752dac38a</commitId><timestamp>1788882961000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-09-08 17:56:01 +0200</date><id>9afa79b55166ae0a4de7ff3f6046ff5752dac38a</id><msg>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</msg><path><editType>edit</editType><file>app/components/requests/RequestForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/requests/requests/create.vue</affectedPath><affectedPath>app/pages/requests/my-tickets/create.vue</affectedPath><affectedPath>app/pages/requests/my-tickets/index.vue</affectedPath><commitId>a91a37f8b47890a451b7d1352939b52ff8bc5eb9</commitId><timestamp>1788882961000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Ticket creation (Create Request + my-tickets wizard) opens the new ticket in the my-tickets split view (?ticket=&lt;id&gt;); split view refetches its list when a deep-linked ticket is not loaded yet
</comment><date>2026-09-08 17:56:01 +0200</date><id>a91a37f8b47890a451b7d1352939b52ff8bc5eb9</id><msg>Ticket creation (Create Request + my-tickets wizard) opens the new ticket in the my-tickets split view (?ticket=&lt;id&gt;); split view refetches its list when a deep-linked ticket is not loaded yet</msg><path><editType>edit</editType><file>app/pages/requests/requests/create.vue</file></path><path><editType>edit</editType><file>app/pages/requests/my-tickets/create.vue</file></path><path><editType>edit</editType><file>app/pages/requests/my-tickets/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/index.vue</affectedPath><affectedPath>server/api/admin/users/leads/latest.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>25e57e1d2a58ceb6994e6c82bab7533d42935788</commitId><timestamp>1788882961000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-09-08 17:56:01 +0200</date><id>25e57e1d2a58ceb6994e6c82bab7533d42935788</id><msg>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</msg><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/api/admin/users/leads/latest.get.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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'></action><building>false</building><displayName>#730</displayName><duration>64433</duration><estimatedDuration>61562</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/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/leitfaden_fuer_die_buchhaltung.pdf</file></path><path><editType>add</editType><file>reference/banking-lexoffice/eBay Payments_EUR Sammelkonto_CSV_2026-06-09_2026-09-07.csv</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/ebayLexoffice.ts</affectedPath><affectedPath>app/utils/settlementGridFilter.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>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>edit</editType><file>app/composables/menu/admin/accounting.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>add</editType><file>app/utils/ebayLexoffice.ts</file></path><path><editType>edit</editType><file>server/utils/amazonSpApi.ts</file></path><path><editType>add</editType><file>app/components/accounting/SettlementSummaryStrip.vue</file></path><path><editType>add</editType><file>app/components/accounting/LexofficeHintsPanel.vue</file></path><path><editType>edit</editType><file>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</file></path><path><editType>edit</editType><file>server/utils/ebayFinancesApi.ts</file></path><path><editType>add</editType><file>app/components/accounting/SettlementViewSwitch.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/amazon-settlements.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/ebay-settlements.vue</file></path><path><editType>add</editType><file>app/utils/amazonLexoffice.ts</file></path><path><editType>add</editType><file>app/components/accounting/SettlementSourceFields.vue</file></path><path><editType>add</editType><file>app/components/accounting/SettlementToolbar.vue</file></path><path><editType>add</editType><file>app/utils/settlementGridFilter.ts</file></path><path><editType>add</editType><file>app/components/accounting/SettlementGridFilters.vue</file></path><path><editType>add</editType><file>app/composables/useLexofficeSettlementExport.ts</file></path><path><editType>add</editType><file>app/utils/settlementViews.ts</file></path><path><editType>add</editType><file>app/components/accounting/SettlementPeriodList.vue</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/components/AgGrid/Accounting/AgLexofficeSyncStatus.vue</affectedPath><affectedPath>app/components/accounting/SettlementGridFilters.vue</affectedPath><affectedPath>app/utils/settlementGridFilter.ts</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>app/composables/useLexofficeSettlementExport.ts</affectedPath><affectedPath>server/utils/lexofficeCsvExportMark.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>app/components/AgGrid/Accounting/AgLexofficeSyncStatus.vue</file></path><path><editType>add</editType><file>server/api/accounting/lexoffice-csv-export.post.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>edit</editType><file>app/composables/useLexofficeSettlementExport.ts</file></path><path><editType>edit</editType><file>server/api/invoices/lexoffice-reset.post.ts</file></path><path><editType>add</editType><file>server/utils/lexofficeCsvExportMark.ts</file></path><path><editType>edit</editType><file>app/utils/settlementGridFilter.ts</file></path><path><editType>edit</editType><file>server/api/invoices/lexoffice-upload.post.ts</file></path><path><editType>edit</editType><file>server/api/accounting/amazon/settlement.get.ts</file></path><path><editType>add</editType><file>app/components/accounting/SettlementLexofficeActions.vue</file></path><path><editType>edit</editType><file>app/components/accounting/SettlementViewSwitch.vue</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/api/public/sign/[token]/document/[key].get.ts</affectedPath><affectedPath>server/utils/offers/contractPackage.ts</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>app/composables/menu/admin/settings.ts</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>server/api/legal-documents/[key]/index.put.ts</affectedPath><affectedPath>server/api/legal-documents/[key]/pdf.get.ts</affectedPath><affectedPath>CLAUDE.md</affectedPath><affectedPath>server/utils/offers/staticAnnexes.ts</affectedPath><affectedPath>app/composables/useOfferContract.ts</affectedPath><affectedPath>server/utils/offers/offerAttachments.ts</affectedPath><affectedPath>server/api/offers/contract/signing-cancel.post.ts</affectedPath><affectedPath>reference/contracts/DSLV-ADSp-2017.pdf</affectedPath><affectedPath>server/api/legal-documents/[key]/version/[id].get.ts</affectedPath><affectedPath>server/utils/offers/offerConditions.ts</affectedPath><affectedPath>server/api/offers/contract/sections.get.ts</affectedPath><affectedPath>server/api/public/sign/[token]/request-renewal.post.ts</affectedPath><affectedPath>server/utils/legalDocsDb.ts</affectedPath><affectedPath>reference/contracts/Logistik-AGB_2019_dt.pdf</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>server/api/public/sign/[token]/index.get.ts</affectedPath><affectedPath>reference/README.md</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>server/api/offers/contract/send.post.ts</affectedPath><affectedPath>reference/ci/deploy-production.sh</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/contractPdf.ts</affectedPath><affectedPath>server/utils/offers/contractTexts.ts</affectedPath><affectedPath>app/components/offers/ContractModal.vue</affectedPath><affectedPath>server/assets/offers/Logistik-AGB_2019_dt.pdf</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</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>add</editType><file>server/api/public/sign/[token]/document/[key].get.ts</file></path><path><editType>add</editType><file>server/assets/offers/DSLV-ADSp-2017.pdf</file></path><path><editType>add</editType><file>server/api/offers/contract/signing-cancel.post.ts</file></path><path><editType>add</editType><file>server/utils/offers/agbDefault.ts</file></path><path><editType>add</editType><file>server/utils/offers/agbPdf.ts</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>edit</editType><file>server/api/offers/contract/send.post.ts</file></path><path><editType>add</editType><file>server/api/offers/contract/signing-status.get.ts</file></path><path><editType>add</editType><file>server/utils/legalDocsDb.ts</file></path><path><editType>add</editType><file>server/utils/offers/staticAnnexes.ts</file></path><path><editType>add</editType><file>app/pages/sign/[token].vue</file></path><path><editType>add</editType><file>server/api/legal-documents/[key]/version/[id].get.ts</file></path><path><editType>add</editType><file>reference/ci/README.md</file></path><path><editType>add</editType><file>server/utils/offers/contractSigning.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]/request-renewal.post.ts</file></path><path><editType>add</editType><file>server/api/legal-documents/[key]/index.get.ts</file></path><path><editType>add</editType><file>server/api/public/sign/[token]/index.get.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferContract.ts</file></path><path><editType>add</editType><file>server/api/legal-documents/[key]/pdf.get.ts</file></path><path><editType>add</editType><file>server/utils/offers/contractPackage.ts</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>app/components/offers/ContractModal.vue</file></path><path><editType>edit</editType><file>reference/ci/deploy-production.sh</file></path><path><editType>add</editType><file>server/assets/offers/Logistik-AGB_2019_dt.pdf</file></path><path><editType>edit</editType><file>server/utils/offers/contractPdf.ts</file></path><path><editType>edit</editType><file>reference/README.md</file></path><path><editType>add</editType><file>server/utils/offers/offerAttachments.ts</file></path><path><editType>edit</editType><file>CLAUDE.md</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>add</editType><file>server/api/offers/contract/sections.get.ts</file></path><path><editType>add</editType><file>reference/contracts/Logistik-AGB_2019_dt.pdf</file></path><path><editType>add</editType><file>app/pages/settings/legal-documents/index.vue</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path><path><editType>edit</editType><file>server/utils/offers/contractTexts.ts</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>add</editType><file>reference/contracts/DSLV-ADSp-2017.pdf</file></path><path><editType>add</editType><file>server/utils/offers/contractSigningDb.ts</file></path><path><editType>edit</editType><file>server/utils/offers/offerConditions.ts</file></path><path><editType>edit</editType><file>app/composables/menu/admin/settings.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/api/public/sign/[token]/index.post.ts</file></path><path><editType>add</editType><file>app/components/sign/DocThumb.vue</file></path><path><editType>add</editType><file>server/api/legal-documents/[key]/index.put.ts</file></path><path><editType>add</editType><file>reference/contracts/KFP_DSVGO_2026.pdf</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>app/pages/sign/[token].vue</file></path><path><editType>edit</editType><file>app/composables/useOfferContract.ts</file></path><path><editType>edit</editType><file>app/components/offers/ContractModal.vue</file></path><path><editType>edit</editType><file>server/utils/offers/contractTexts.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/utils/offers/contractPdf.ts</file></path><path><editType>edit</editType><file>server/utils/offers/offerConditions.ts</file></path><path><editType>edit</editType><file>server/api/offers/contract/send.post.ts</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/utils/lexofficeClient.ts</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/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>server/assets/offers/flyer/delivery_truck.jpg</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>server/assets/offers/flyer/warehouse_shelves.jpg</affectedPath><affectedPath>server/assets/offers/flyer/forklift_aisle.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/barcode_scanner_p.jpg</affectedPath><affectedPath>server/assets/offers/flyer/cardboard_boxes_t.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/screen-shipments.png</affectedPath><affectedPath>server/assets/offers/flyer/logos/shopware.png</affectedPath><affectedPath>server/assets/offers/flyer/logyou-logo-dark.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/api/offers/quote/send.post.ts</affectedPath><affectedPath>server/assets/offers/flyer/conveyor_packages.jpg</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>edit</editType><file>server/utils/offers/contractPackage.ts</file></path><path><editType>add</editType><file>server/assets/offers/flyer/laptop_analytics_w.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/logship-logo-dark.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/cardboard_boxes_p.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/ecommerce_packages.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/warehouse_shelves_p.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/jtl.png</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-dashboard.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/cardboard_boxes.jpg</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/warehouse_shelves.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/screen-shipments.png</file></path><path><editType>add</editType><file>app/pages/flyer-demo/[screen].vue</file></path><path><editType>add</editType><file>server/api/offers/flyer.get.ts</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/shopware.png</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/mobile_warehouse_p.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/conveyor_packages.jpg</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/warehouse_scanning_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/packing_station_p.jpg</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/forklift_aisle.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/screen-tracking.png</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/logos/dhlexpress.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/screen-stock.png</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>add</editType><file>server/assets/offers/flyer/delivery_truck.jpg</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/barcode_scanner.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/barcode_scanner_p.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/amazon_icon.png</file></path><path><editType>add</editType><file>server/assets/offers/flyer/laptop_analytics.jpg</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/logos/plentyone_logo.png</file></path><path><editType>edit</editType><file>app/components/offers/ContractModal.vue</file></path><path><editType>edit</editType><file>reference/recipes.md</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/logos/gls_logo_small.svg</file></path><path><editType>add</editType><file>server/utils/offers/flyerTexts.ts</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/dhl_logo_small.png</file></path><path><editType>add</editType><file>server/utils/offers/flyerPdf.ts</file></path><path><editType>add</editType><file>server/assets/offers/flyer/forklift_aisle_p.jpg</file></path><path><editType>edit</editType><file>server/utils/offers/contractSigning.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</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/screen-mobile.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/temu.png</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</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/delivery_truck_t.jpg</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/xentral_logo.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/logship-logo-light.png</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/conveyor_packages_p.jpg</file></path><path><editType>add</editType><file>server/assets/offers/flyer/logos/shopify.png</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>729</buildNumber><marked><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</SHA1><branch><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</SHA1><branch><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</SHA1><branch><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</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'></action><building>false</building><displayName>#729</displayName><duration>60704</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #729</fullDisplayName><id>729</id><inProgress>false</inProgress><keepLog>false</keepLog><number>729</number><queueId>5642</queueId><result>SUCCESS</result><timestamp>1788739200273</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/729/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>728</buildNumber><marked><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</SHA1><branch><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</SHA1><branch><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</SHA1><branch><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</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'></action><building>false</building><displayName>#728</displayName><duration>60096</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #728</fullDisplayName><id>728</id><inProgress>false</inProgress><keepLog>false</keepLog><number>728</number><queueId>5641</queueId><result>SUCCESS</result><timestamp>1788652800272</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/728/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>727</buildNumber><marked><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</SHA1><branch><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</SHA1><branch><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</SHA1><branch><SHA1>f644a224b3c6af1b3a8bcb2316e3d0015013282d</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'></action><building>false</building><displayName>#727</displayName><duration>66181</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #727</fullDisplayName><id>727</id><inProgress>false</inProgress><keepLog>false</keepLog><number>727</number><queueId>5640</queueId><result>SUCCESS</result><timestamp>1788566400273</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/727/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>server/api/inouts/[id]/mark-commissioned.post.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>bdd390fe51cbbe2e8f622100f7cf3e61fa3e96c2</commitId><timestamp>1788513716000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Add Button to order detail view to confirm commission without marketplace interaction to skip orders which was not meant to be for fulfillment
</comment><date>2026-09-04 11:21:56 +0200</date><id>bdd390fe51cbbe2e8f622100f7cf3e61fa3e96c2</id><msg>Add Button to order detail view to confirm commission without marketplace interaction to skip orders which was not meant to be for fulfillment</msg><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path><path><editType>add</editType><file>server/api/inouts/[id]/mark-commissioned.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/generate-invoices-from-orders.vue</affectedPath><affectedPath>server/utils/langBundle.ts</affectedPath><affectedPath>app/pages/generate-invoices.vue</affectedPath><affectedPath>server/api/fulfillment/generate-orders.post.ts</affectedPath><affectedPath>server/utils/invoicePeriodOfPerformance.ts</affectedPath><affectedPath>server/api/processes/c_invoice_generate.post.ts</affectedPath><commitId>799896e456248138bff40e5aa109a9774e2b48f0</commitId><timestamp>1788517999000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix ffn sales orders translations and add leistungszeitraum
</comment><date>2026-09-04 12:33:19 +0200</date><id>799896e456248138bff40e5aa109a9774e2b48f0</id><msg>fix ffn sales orders translations and add leistungszeitraum</msg><path><editType>edit</editType><file>server/api/processes/c_invoice_generate.post.ts</file></path><path><editType>add</editType><file>server/utils/invoicePeriodOfPerformance.ts</file></path><path><editType>edit</editType><file>app/pages/generate-invoices.vue</file></path><path><editType>edit</editType><file>server/api/fulfillment/generate-orders.post.ts</file></path><path><editType>edit</editType><file>app/pages/generate-invoices-from-orders.vue</file></path><path><editType>add</editType><file>server/utils/langBundle.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>5834ade52d9ec06412392db9b5866852458de9bc</commitId><timestamp>1788524390000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add button to confirm it was invoice already
</comment><date>2026-09-04 14:19:50 +0200</date><id>5834ade52d9ec06412392db9b5866852458de9bc</id><msg>add button to confirm it was invoice already</msg><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/processes/c_invoice_generate.post.ts</affectedPath><affectedPath>server/api/fulfillment/generate-orders.post.ts</affectedPath><affectedPath>server/utils/invoicePeriodOfPerformance.ts</affectedPath><commitId>f644a224b3c6af1b3a8bcb2316e3d0015013282d</commitId><timestamp>1788529297000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>exclude orders with isfulfillmentorder yes on dashboard
</comment><date>2026-09-04 15:41:37 +0200</date><id>f644a224b3c6af1b3a8bcb2316e3d0015013282d</id><msg>exclude orders with isfulfillmentorder yes on dashboard</msg><path><editType>edit</editType><file>server/api/processes/c_invoice_generate.post.ts</file></path><path><editType>edit</editType><file>server/api/fulfillment/generate-orders.post.ts</file></path><path><editType>edit</editType><file>server/utils/invoicePeriodOfPerformance.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>726</buildNumber><marked><SHA1>58b17603f170fd526c73b345e46a874083a1427c</SHA1><branch><SHA1>58b17603f170fd526c73b345e46a874083a1427c</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>58b17603f170fd526c73b345e46a874083a1427c</SHA1><branch><SHA1>58b17603f170fd526c73b345e46a874083a1427c</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>58b17603f170fd526c73b345e46a874083a1427c</SHA1><branch><SHA1>58b17603f170fd526c73b345e46a874083a1427c</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'></action><building>false</building><displayName>#726</displayName><duration>471785</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #726</fullDisplayName><id>726</id><inProgress>false</inProgress><keepLog>false</keepLog><number>726</number><queueId>5637</queueId><result>SUCCESS</result><timestamp>1788480000273</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/726/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-settlements.vue</affectedPath><affectedPath>app/pages/accounting/ebay-settlements.vue</affectedPath><commitId>ceab8d5e9dcd161ee18ca3380adc75ea1796418e</commitId><timestamp>1788418001000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Changes to selecting multiple settlements
</comment><date>2026-09-03 08:46:41 +0200</date><id>ceab8d5e9dcd161ee18ca3380adc75ea1796418e</id><msg>Changes to selecting multiple settlements</msg><path><editType>edit</editType><file>app/pages/accounting/amazon-settlements.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/ebay-settlements.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/invoices/lexoffice-categories.get.ts</affectedPath><affectedPath>app/components/AgGrid/Invoices/AgLexofficeStatus.vue</affectedPath><affectedPath>app/components/sales/LexofficeCategoryModal.vue</affectedPath><affectedPath>app/composables/states.ts</affectedPath><affectedPath>server/api/invoices/lexoffice-upload.post.ts</affectedPath><affectedPath>app/pages/sales/invoices/index.vue</affectedPath><affectedPath>server/utils/zugferd/maybeZugferdPdf.ts</affectedPath><affectedPath>server/utils/lexofficeClient.ts</affectedPath><affectedPath>app/composables/useLexofficeCategoryPrompt.ts</affectedPath><commitId>e1d74a4d026b0ddb339b62cf2922b65cfed6d989</commitId><timestamp>1788421656000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Tweak lexoffice
</comment><date>2026-09-03 09:47:36 +0200</date><id>e1d74a4d026b0ddb339b62cf2922b65cfed6d989</id><msg>Tweak lexoffice</msg><path><editType>edit</editType><file>server/api/invoices/lexoffice-upload.post.ts</file></path><path><editType>edit</editType><file>app/components/AgGrid/Invoices/AgLexofficeStatus.vue</file></path><path><editType>add</editType><file>app/components/sales/LexofficeCategoryModal.vue</file></path><path><editType>edit</editType><file>app/composables/states.ts</file></path><path><editType>edit</editType><file>app/pages/sales/invoices/index.vue</file></path><path><editType>edit</editType><file>server/utils/zugferd/maybeZugferdPdf.ts</file></path><path><editType>add</editType><file>server/api/invoices/lexoffice-categories.get.ts</file></path><path><editType>add</editType><file>app/composables/useLexofficeCategoryPrompt.ts</file></path><path><editType>add</editType><file>server/utils/lexofficeClient.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/partners/PartnerExtraOrderLinesEditor.vue</affectedPath><affectedPath>server/api/partners/fulfillment-order-lines/index.get.ts</affectedPath><affectedPath>server/api/partners/fulfillment-order-lines/destroy.delete.ts</affectedPath><affectedPath>app/components/partners/PartnerForm.vue</affectedPath><affectedPath>server/api/fulfillment/generate-orders.post.ts</affectedPath><affectedPath>server/api/partners/fulfillment-order-lines/update.put.ts</affectedPath><affectedPath>server/api/partners/fulfillment-order-lines/store.post.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>48a99bb443d228ff91a94bd8a38e8fca95d007c5</commitId><timestamp>1788424103000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Add admin-only extra order lines per fulfillment customer

Lets admins configure standing product+qty+price lines per c_bpartner
(CUST_BPartner_ExtraOrderLine) that get automatically appended to every
order generated for that customer via Fulfillment Customers &gt; Generate
Orders, so recurring per-customer invoice requirements no longer need
manual ad-hoc entry each period.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01U6KtDeLYZGDTg5SWKCiSjL
</comment><date>2026-09-03 10:28:23 +0200</date><id>48a99bb443d228ff91a94bd8a38e8fca95d007c5</id><msg>Add admin-only extra order lines per fulfillment customer</msg><path><editType>add</editType><file>server/api/partners/fulfillment-order-lines/index.get.ts</file></path><path><editType>add</editType><file>app/components/partners/PartnerExtraOrderLinesEditor.vue</file></path><path><editType>edit</editType><file>app/components/partners/PartnerForm.vue</file></path><path><editType>add</editType><file>server/api/partners/fulfillment-order-lines/update.put.ts</file></path><path><editType>edit</editType><file>server/api/fulfillment/generate-orders.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/api/partners/fulfillment-order-lines/destroy.delete.ts</file></path><path><editType>add</editType><file>server/api/partners/fulfillment-order-lines/store.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/partners/PartnerExtraOrderLinesEditor.vue</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>app/components/SelectBox.vue</affectedPath><affectedPath>reference/recipes.md</affectedPath><affectedPath>app/components/sales/LexofficeCategoryModal.vue</affectedPath><commitId>4af90b5e5626e410142b8fc9dab921a90c249970</commitId><timestamp>1788433705000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix bpartner product ffn order
</comment><date>2026-09-03 13:08:25 +0200</date><id>4af90b5e5626e410142b8fc9dab921a90c249970</id><msg>fix bpartner product ffn order</msg><path><editType>edit</editType><file>app/components/sales/LexofficeCategoryModal.vue</file></path><path><editType>edit</editType><file>app/components/partners/PartnerExtraOrderLinesEditor.vue</file></path><path><editType>add</editType><file>app/components/SelectBox.vue</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/commission/parcels/dhl/multi.post.ts</affectedPath><affectedPath>server/api/commission/parcels/dpd/multi.post.ts</affectedPath><affectedPath>server/api/commission/parcels/dpd/index.post.ts</affectedPath><commitId>f0b6ac6ffb3f0021f36262f31bc3731ad5290ce1</commitId><timestamp>1788434722000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>decouple dpd and dhl multi form marketplace interaction
</comment><date>2026-09-03 13:25:22 +0200</date><id>f0b6ac6ffb3f0021f36262f31bc3731ad5290ce1</id><msg>decouple dpd and dhl multi form marketplace interaction</msg><path><editType>edit</editType><file>server/api/commission/parcels/dpd/index.post.ts</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dpd/multi.post.ts</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dhl/multi.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/fulfillment/generate-orders.post.ts</affectedPath><affectedPath>app/components/partners/PartnerExtraOrderLinesEditor.vue</affectedPath><affectedPath>app/components/partners/PartnerForm.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>6e8e5a76207f64a774d6fc1d89d4f6c6983df23f</commitId><timestamp>1788435150000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fix extra order line UX per feedback: append order, plain product name, description text

- New rows append to the bottom of the list instead of the top, matching
  the order lines will appear in on the generated invoice
- Show the plain product name (not the SKU-prefixed picker label) in the
  editor and when reloading saved rows
- Stop overwriting the product name with the custom description on the
  generated order/preview/report line — the product name always comes
  from M_Product_ID; description is now only sent as supplementary line
  text when the admin actually entered one
- Correct the section subtitle to reference the fulfillment order-generation
  flow instead of "invoice"

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01U6KtDeLYZGDTg5SWKCiSjL
</comment><date>2026-09-03 13:32:30 +0200</date><id>6e8e5a76207f64a774d6fc1d89d4f6c6983df23f</id><msg>Fix extra order line UX per feedback: append order, plain product name, description text</msg><path><editType>edit</editType><file>server/api/fulfillment/generate-orders.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/partners/PartnerForm.vue</file></path><path><editType>edit</editType><file>app/components/partners/PartnerExtraOrderLinesEditor.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/partners/PartnerForm.vue</affectedPath><affectedPath>app/components/partners/PartnerExtraOrderLinesEditor.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>3a0f08c909ae6092fdd5ba889f44a037db3bd42c</commitId><timestamp>1788435378000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fix remaining invoice wording on extra order lines section

Section title and description placeholder still referred to "invoice",
inconsistent with the earlier fix that stopped the description from
overwriting the product name. Now consistently frames it as sales order
terminology and clarifies the description rides along as the order line's
description text without replacing the product name.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01U6KtDeLYZGDTg5SWKCiSjL
</comment><date>2026-09-03 13:36:18 +0200</date><id>3a0f08c909ae6092fdd5ba889f44a037db3bd42c</id><msg>Fix remaining invoice wording on extra order lines section</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/partners/PartnerExtraOrderLinesEditor.vue</file></path><path><editType>edit</editType><file>app/components/partners/PartnerForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/partners/PartnerExtraOrderLinesEditor.vue</affectedPath><commitId>32f5d093c53c79474bc946ca7f6bee300a961d6a</commitId><timestamp>1788435466000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Make extra order line product search case-insensitive

Wraps the Name filter in tolower(...) and lowercases the search term
client-side, matching the tolower() pattern already used for every other
product search in this app. Also escapes single quotes in the search term
to keep the OData filter valid for product names containing an apostrophe.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01U6KtDeLYZGDTg5SWKCiSjL
</comment><date>2026-09-03 13:37:46 +0200</date><id>32f5d093c53c79474bc946ca7f6bee300a961d6a</id><msg>Make extra order line product search case-insensitive</msg><path><editType>edit</editType><file>app/components/partners/PartnerExtraOrderLinesEditor.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/partners/PartnerExtraOrderLinesEditor.vue</affectedPath><commitId>a349de2fe0f001392e296a55a4e6b17e34d23d27</commitId><timestamp>1788435701000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Richer product picker results: BOM badge, bold name, small SKU

Custom item slot on the extra-order-lines product picker (SelectBox's
default slot renders per dropdown row only, not the closed trigger):
bold product name, a small muted SKU/Value, and an orange "BOM" badge
when the product is a BOM/JTL-BOM article — same isBomOf() combined-flag
check and badge styling already used in ProductSearchSelect.vue. Styles
live in a non-scoped &lt;style&gt; block since the dropdown is teleported to
&lt;body&gt; (same reasoning as SelectBox.vue's own item/trigger styles).

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01U6KtDeLYZGDTg5SWKCiSjL
</comment><date>2026-09-03 13:41:41 +0200</date><id>a349de2fe0f001392e296a55a4e6b17e34d23d27</id><msg>Richer product picker results: BOM badge, bold name, small SKU</msg><path><editType>edit</editType><file>app/components/partners/PartnerExtraOrderLinesEditor.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>server/utils/offers/offerConditions.ts</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><commitId>0f85aed82ebfa1404d1c6b40ac154ebf12220c0d</commitId><timestamp>1788440280000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Enhance Quote offer
</comment><date>2026-09-03 14:58:00 +0200</date><id>0f85aed82ebfa1404d1c6b40ac154ebf12220c0d</id><msg>Enhance Quote offer</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/utils/offers/offerConditions.ts</file></path><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/datev-opos-liste-research.md</affectedPath><affectedPath>app/pages/accounting/opos/index.vue</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><affectedPath>server/api/accounting/opos/index.get.ts</affectedPath><affectedPath>reference/recipes.md</affectedPath><affectedPath>app/composables/menu/admin/accounting.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>6c8bfb9f5eb915c8c0d9adc7d78957653dd4ab35</commitId><timestamp>1788443797000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Add Opos List to Accounting
</comment><date>2026-09-03 15:56:37 +0200</date><id>6c8bfb9f5eb915c8c0d9adc7d78957653dd4ab35</id><msg>Add Opos List to Accounting</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>reference/datev-opos-liste-research.md</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path><path><editType>add</editType><file>server/api/accounting/opos/index.get.ts</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>add</editType><file>app/pages/accounting/opos/index.vue</file></path><path><editType>edit</editType><file>app/composables/menu/admin/accounting.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/fulfillment/generate-orders.post.ts</affectedPath><affectedPath>server/utils/accountingRequestType.ts</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/composables/useRequestReportPdf.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>201be99b0b8acbc647d506b15142b5af5f5092e7</commitId><timestamp>1788444766000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add amount option to ticket for accounting
</comment><date>2026-09-03 16:12:46 +0200</date><id>201be99b0b8acbc647d506b15142b5af5f5092e7</id><msg>add amount option to ticket for accounting</msg><path><editType>edit</editType><file>server/api/fulfillment/generate-orders.post.ts</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>server/utils/accountingRequestType.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/composables/useRequestReportPdf.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/orders/[id]/rmas.get.ts</affectedPath><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>58b17603f170fd526c73b345e46a874083a1427c</commitId><timestamp>1788451276000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Show return on sales order2
</comment><date>2026-09-03 18:01:16 +0200</date><id>58b17603f170fd526c73b345e46a874083a1427c</id><msg>Show return on sales order2</msg><path><editType>add</editType><file>server/api/orders/[id]/rmas.get.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>725</buildNumber><marked><SHA1>7c7324b08cb2fc903ea604eb4c40a3d3d8d76ae2</SHA1><branch><SHA1>7c7324b08cb2fc903ea604eb4c40a3d3d8d76ae2</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>7c7324b08cb2fc903ea604eb4c40a3d3d8d76ae2</SHA1><branch><SHA1>7c7324b08cb2fc903ea604eb4c40a3d3d8d76ae2</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>7c7324b08cb2fc903ea604eb4c40a3d3d8d76ae2</SHA1><branch><SHA1>7c7324b08cb2fc903ea604eb4c40a3d3d8d76ae2</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'></action><building>false</building><displayName>#725</displayName><duration>67419</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #725</fullDisplayName><id>725</id><inProgress>false</inProgress><keepLog>false</keepLog><number>725</number><queueId>5631</queueId><result>SUCCESS</result><timestamp>1788393600273</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/725/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/commission/parcels/dpd/multi.post.ts</affectedPath><affectedPath>server/api/commission/parcels/dpd/index.post.ts</affectedPath><affectedPath>server/utils/dpdHelper.ts</affectedPath><commitId>624bd016f0ccfd0f02438b9a08baf06e515a15d9</commitId><timestamp>1788338275000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add dpd logging
</comment><date>2026-09-02 10:37:55 +0200</date><id>624bd016f0ccfd0f02438b9a08baf06e515a15d9</id><msg>add dpd logging</msg><path><editType>edit</editType><file>server/utils/dpdHelper.ts</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dpd/multi.post.ts</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dpd/index.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/amazon/settlements.get.ts</affectedPath><affectedPath>app/pages/accounting/amazon-settlements.vue</affectedPath><affectedPath>server/utils/amazonSpApi.ts</affectedPath><affectedPath>server/api/accounting/amazon/settlement.get.ts</affectedPath><commitId>1020af763ee0fcb60ce954a9eabebe2e65516add</commitId><timestamp>1788343251000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add new financial amzaon implementation
</comment><date>2026-09-02 12:00:51 +0200</date><id>1020af763ee0fcb60ce954a9eabebe2e65516add</id><msg>add new financial amzaon implementation</msg><path><editType>edit</editType><file>app/pages/accounting/amazon-settlements.vue</file></path><path><editType>edit</editType><file>server/api/accounting/amazon/settlement.get.ts</file></path><path><editType>edit</editType><file>server/api/accounting/amazon/settlements.get.ts</file></path><path><editType>edit</editType><file>server/utils/amazonSpApi.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/commission/parcels/dpd/multi.post.ts</affectedPath><affectedPath>server/api/commission/parcels/dpd/index.post.ts</affectedPath><commitId>611c8cf67be7a9a09e14c965cd070387671fbdfb</commitId><timestamp>1788344447000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>enhance logs
</comment><date>2026-09-02 12:20:47 +0200</date><id>611c8cf67be7a9a09e14c965cd070387671fbdfb</id><msg>enhance logs</msg><path><editType>edit</editType><file>server/api/commission/parcels/dpd/multi.post.ts</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dpd/index.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/banking-lexoffice/PayPal-Vorlage.csv</affectedPath><affectedPath>reference/banking-lexoffice/Bankimport-Vorlage.csv</affectedPath><affectedPath>app/utils/lexofficeExport.ts</affectedPath><affectedPath>app/pages/accounting/ebay-settlements.vue</affectedPath><affectedPath>app/pages/accounting/amazon-settlements.vue</affectedPath><commitId>0054135765f441d45a13fbaedb457465be12d0f0</commitId><timestamp>1788362461000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Add lexoffice bank export for amazon and ebay
</comment><date>2026-09-02 17:21:01 +0200</date><id>0054135765f441d45a13fbaedb457465be12d0f0</id><msg>Add lexoffice bank export for amazon and ebay</msg><path><editType>add</editType><file>reference/banking-lexoffice/PayPal-Vorlage.csv</file></path><path><editType>add</editType><file>app/utils/lexofficeExport.ts</file></path><path><editType>add</editType><file>reference/banking-lexoffice/Bankimport-Vorlage.csv</file></path><path><editType>edit</editType><file>app/pages/accounting/ebay-settlements.vue</file></path><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/accounting/ebay-settlements.vue</affectedPath><commitId>2d05a2447bf1bcf3e1e47bc87cc9c8f0e98f49cc</commitId><timestamp>1788375759000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Add CSV Export for Orders LexOffice
</comment><date>2026-09-02 21:02:39 +0200</date><id>2d05a2447bf1bcf3e1e47bc87cc9c8f0e98f49cc</id><msg>Add CSV Export for Orders LexOffice</msg><path><editType>edit</editType><file>app/pages/accounting/amazon-settlements.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/ebay-settlements.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-settlements.vue</affectedPath><commitId>6a93254b0423cb59025209b476d2b4fa14a92725</commitId><timestamp>1788376476000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>limit settlement to only paid amount by amazon
</comment><date>2026-09-02 21:14:36 +0200</date><id>6a93254b0423cb59025209b476d2b4fa14a92725</id><msg>limit settlement to only paid amount by amazon</msg><path><editType>edit</editType><file>app/pages/accounting/amazon-settlements.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/amazon/settlements.get.ts</affectedPath><affectedPath>app/pages/accounting/amazon-settlements.vue</affectedPath><affectedPath>app/pages/accounting/ebay-settlements.vue</affectedPath><affectedPath>server/utils/amazonSpApi.ts</affectedPath><commitId>d6ed398fed7f37abf7ba5b00025c6ecdc8f52a20</commitId><timestamp>1788378793000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Add enhanced range selection and switch on amazon and ebay settlement csv export for lexoffice
</comment><date>2026-09-02 21:53:13 +0200</date><id>d6ed398fed7f37abf7ba5b00025c6ecdc8f52a20</id><msg>Add enhanced range selection and switch on amazon and ebay settlement csv export for lexoffice</msg><path><editType>edit</editType><file>app/pages/accounting/amazon-settlements.vue</file></path><path><editType>edit</editType><file>server/api/accounting/amazon/settlements.get.ts</file></path><path><editType>edit</editType><file>server/utils/amazonSpApi.ts</file></path><path><editType>edit</editType><file>app/pages/accounting/ebay-settlements.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-settlements.vue</affectedPath><affectedPath>app/pages/accounting/ebay-settlements.vue</affectedPath><commitId>7c7324b08cb2fc903ea604eb4c40a3d3d8d76ae2</commitId><timestamp>1788383651000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>tune amazon and ebay csv export for lexoffice and buttons
</comment><date>2026-09-02 23:14:11 +0200</date><id>7c7324b08cb2fc903ea604eb4c40a3d3d8d76ae2</id><msg>tune amazon and ebay csv export for lexoffice and buttons</msg><path><editType>edit</editType><file>app/pages/accounting/amazon-settlements.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/ebay-settlements.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>724</buildNumber><marked><SHA1>718962b615ea9c5fe54c114e74aa1d8eff256b3f</SHA1><branch><SHA1>718962b615ea9c5fe54c114e74aa1d8eff256b3f</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>718962b615ea9c5fe54c114e74aa1d8eff256b3f</SHA1><branch><SHA1>718962b615ea9c5fe54c114e74aa1d8eff256b3f</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>718962b615ea9c5fe54c114e74aa1d8eff256b3f</SHA1><branch><SHA1>718962b615ea9c5fe54c114e74aa1d8eff256b3f</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'></action><building>false</building><displayName>#724</displayName><duration>61773</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #724</fullDisplayName><id>724</id><inProgress>false</inProgress><keepLog>false</keepLog><number>724</number><queueId>5623</queueId><result>SUCCESS</result><timestamp>1788307200273</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/724/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/amazon/orders-check.get.ts</affectedPath><affectedPath>server/api/accounting/ebay/orders-check.get.ts</affectedPath><commitId>0eb5b88f6d5e3d007b193bffd483875433779862</commitId><timestamp>1788244104000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>orders-check (Amazon + eBay): don't count a voided linked order as matched

matchOrders() already captured the linked c_order's DocStatus but never
checked it - a manually voided/canceled order still counted as a resolved
match, so the reconciliation page silently showed it as handled instead
of flagging it for reimport (importSingleOrder already treats a voided
link as not-really-imported for the exact same reason; this brings the
comparison page's own matching in line with that rule).

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QTy674ErXSPZ8spJ6HMhE6
</comment><date>2026-09-01 08:28:24 +0200</date><id>0eb5b88f6d5e3d007b193bffd483875433779862</id><msg>orders-check (Amazon + eBay): don't count a voided linked order as matched</msg><path><editType>edit</editType><file>server/api/accounting/ebay/orders-check.get.ts</file></path><path><editType>edit</editType><file>server/api/accounting/amazon/orders-check.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-orders-check.vue</affectedPath><affectedPath>app/components/AgGrid/Accounting/AgDocPreviewLink.vue</affectedPath><affectedPath>app/pages/accounting/ebay-orders-check.vue</affectedPath><commitId>e72265bd4727f144c2355df0676ccf32a933ee67</commitId><timestamp>1788251427000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon/eBay orders-check: add batch/single order cancellation (VO)

Sometimes a matched order was imported with a mistake (wrong amount etc.)
and needs to be voided so it can be reimported clean. Adds a "Stornieren"
toolbar action (batch, from the checkbox selection) and a per-row cancel
button on "Interner Auftrag" (mirrors the existing import "+" button),
both calling the standard order document-action endpoint with VO.

Eligible rows: matched, linked to a real order, no invoice yet, not
already voided/closed. After a successful void the row is patched
in-place to matched:false so it immediately shows as "FEHLT" again and
can be reimported from the same page.

AgDocPreviewLink gains an opt-in onCancelOrder/canCancelOrder param pair,
symmetric with the existing onImportOrder/canImportOrder.
</comment><date>2026-09-01 10:30:27 +0200</date><id>e72265bd4727f144c2355df0676ccf32a933ee67</id><msg>Amazon/eBay orders-check: add batch/single order cancellation (VO)</msg><path><editType>edit</editType><file>app/pages/accounting/ebay-orders-check.vue</file></path><path><editType>edit</editType><file>app/components/AgGrid/Accounting/AgDocPreviewLink.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/amazon-orders-check.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/invoices/lexoffice-upload.post.ts</affectedPath><affectedPath>server/utils/zugferd/maybeZugferdPdf.ts</affectedPath><commitId>718962b615ea9c5fe54c114e74aa1d8eff256b3f</commitId><timestamp>1788255012000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>upload to lexoffice only zugpferd
</comment><date>2026-09-01 11:30:12 +0200</date><id>718962b615ea9c5fe54c114e74aa1d8eff256b3f</id><msg>upload to lexoffice only zugpferd</msg><path><editType>edit</editType><file>server/utils/zugferd/maybeZugferdPdf.ts</file></path><path><editType>edit</editType><file>server/api/invoices/lexoffice-upload.post.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>723</buildNumber><marked><SHA1>b29d6c633206895521e31689ae3ce9c7a1b69a8c</SHA1><branch><SHA1>b29d6c633206895521e31689ae3ce9c7a1b69a8c</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>b29d6c633206895521e31689ae3ce9c7a1b69a8c</SHA1><branch><SHA1>b29d6c633206895521e31689ae3ce9c7a1b69a8c</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>b29d6c633206895521e31689ae3ce9c7a1b69a8c</SHA1><branch><SHA1>b29d6c633206895521e31689ae3ce9c7a1b69a8c</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'></action><building>false</building><displayName>#723</displayName><duration>59826</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #723</fullDisplayName><id>723</id><inProgress>false</inProgress><keepLog>false</keepLog><number>723</number><queueId>5619</queueId><result>SUCCESS</result><timestamp>1788220800273</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/723/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/requests/my-tickets/index.vue</affectedPath><commitId>90425d1d1ade5b97ec4353688c7a7f25ca6a6682</commitId><timestamp>1788162074000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>show last completed tickets first
</comment><date>2026-08-31 09:41:14 +0200</date><id>90425d1d1ade5b97ec4353688c7a7f25ca6a6682</id><msg>show last completed tickets first</msg><path><editType>edit</editType><file>app/pages/requests/my-tickets/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>server/utils/offers/offerConditions.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><commitId>0c599707f16dc5150c191a77008f3edabc370318</commitId><timestamp>1788184884000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>tune lead offer
</comment><date>2026-08-31 16:01:24 +0200</date><id>0c599707f16dc5150c191a77008f3edabc370318</id><msg>tune lead offer</msg><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>server/utils/offers/offerConditions.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/BaseSideBar.vue</affectedPath><affectedPath>server/api/accounting/ebay/import-order.post.ts</affectedPath><affectedPath>server/api/accounting/amazon/import-order.post.ts</affectedPath><affectedPath>server/api/accounting/ebay/orders-check.get.ts</affectedPath><affectedPath>app/components/settings/BankConnectionForm.vue</affectedPath><affectedPath>app/pages/accounting/amazon-orders-check.vue</affectedPath><affectedPath>server/api/accounting/amazon/orders-check.get.ts</affectedPath><affectedPath>app/pages/accounting/ebay-orders-check.vue</affectedPath><affectedPath>app/components/AgGrid/Accounting/AgDocPreviewLink.vue</affectedPath><commitId>ecd0ed23199ce87c71079ae3a91df01da157b3a8</commitId><timestamp>1788202676000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add ebay and amazon bestellabgleich tuning
</comment><date>2026-08-31 20:57:56 +0200</date><id>ecd0ed23199ce87c71079ae3a91df01da157b3a8</id><msg>add ebay and amazon bestellabgleich tuning</msg><path><editType>edit</editType><file>app/components/BaseSideBar.vue</file></path><path><editType>edit</editType><file>app/components/AgGrid/Accounting/AgDocPreviewLink.vue</file></path><path><editType>add</editType><file>server/api/accounting/ebay/import-order.post.ts</file></path><path><editType>edit</editType><file>app/components/settings/BankConnectionForm.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/ebay-orders-check.vue</file></path><path><editType>edit</editType><file>server/api/accounting/ebay/orders-check.get.ts</file></path><path><editType>edit</editType><file>app/pages/accounting/amazon-orders-check.vue</file></path><path><editType>add</editType><file>server/api/accounting/amazon/import-order.post.ts</file></path><path><editType>edit</editType><file>server/api/accounting/amazon/orders-check.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-orders-check.vue</affectedPath><affectedPath>app/pages/accounting/ebay-orders-check.vue</affectedPath><commitId>decd5a60993767a7cf1342e8220a9d9dc049e5cd</commitId><timestamp>1788203045000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix build
</comment><date>2026-08-31 21:04:05 +0200</date><id>decd5a60993767a7cf1342e8220a9d9dc049e5cd</id><msg>fix build</msg><path><editType>edit</editType><file>app/pages/accounting/amazon-orders-check.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/ebay-orders-check.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-orders-check.vue</affectedPath><affectedPath>server/api/accounting/amazon/import-order.post.ts</affectedPath><commitId>f66dfdcda4644e8b94fca5e03f39972af554ac15</commitId><timestamp>1788208465000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon reconciliation: confirm-once "add missing product to price list" flow

The manual import endpoint now returns errorType=product_not_on_pricelist
with the resolved productId and a suggested price when Amazon's own line
item is unambiguous (single-line orders) - this wires that into the import
modal:

- Upfront checkbox: auto-add using Amazon's line price and retry
  immediately, no per-order interruption, for the common case of a
  currently-valid price list just missing one product.
- Per-row fallback (checkbox off, or price ambiguous/missing): an inline
  price field + "add to price list &amp; reimport" button on the failed row,
  confirmed once per distinct failure rather than needing to redo the
  whole batch.

The proxy previously discarded every field but message/status on failure -
now passes errorType/productId/suggestedPrice/etc. through so the page can
act on them, and forwards the new priceListAdditions option through to
Laravel.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QTy674ErXSPZ8spJ6HMhE6
</comment><date>2026-08-31 22:34:25 +0200</date><id>f66dfdcda4644e8b94fca5e03f39972af554ac15</id><msg>Amazon reconciliation: confirm-once "add missing product to price list" flow</msg><path><editType>edit</editType><file>app/pages/accounting/amazon-orders-check.vue</file></path><path><editType>edit</editType><file>server/api/accounting/amazon/import-order.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-orders-check.vue</affectedPath><commitId>c4646d3320dcb64ed134fe6fe856ff511084e83b</commitId><timestamp>1788210623000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Amazon import modal: price list override + IsDefault pre-selection

Adds a fourth "Preisliste" selector (filtered to IsSOPriceList) alongside
doc type/delivery rule/invoice rule, wired to the new priceListId option -
lets staff choose which price list an import (and any "add missing
product" action) actually targets, instead of always the order source's
own.

Also pre-selects the first IsDefault=true record for doc type targets and
price lists when their options load (or immediately on reopen if already
cached), rather than always starting on "— Standard —".

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QTy674ErXSPZ8spJ6HMhE6
</comment><date>2026-08-31 23:10:23 +0200</date><id>c4646d3320dcb64ed134fe6fe856ff511084e83b</id><msg>Amazon import modal: price list override + IsDefault pre-selection</msg><path><editType>edit</editType><file>app/pages/accounting/amazon-orders-check.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/amazon-orders-check.vue</affectedPath><commitId>b29d6c633206895521e31689ae3ce9c7a1b69a8c</commitId><timestamp>1788215967000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix: TDZ crash in amazon-orders-check - production 500 on page load

importDefaultFieldFor was an object literal reading importDocTypeTargetId/
importPriceListId at definition time, but declared above those refs in the
file - eager evaluation hit them before their own `const` initializers ran
("can't access lexical declaration before initialization", confirmed via
Sentry). Moved the field lookup inside applyImportDefault's function body,
which only runs when called (well after all top-level consts exist),
regardless of declaration order in the file.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01QTy674ErXSPZ8spJ6HMhE6
</comment><date>2026-09-01 00:39:27 +0200</date><id>b29d6c633206895521e31689ae3ce9c7a1b69a8c</id><msg>fix: TDZ crash in amazon-orders-check - production 500 on page load</msg><path><editType>edit</editType><file>app/pages/accounting/amazon-orders-check.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>722</buildNumber><marked><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</SHA1><branch><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</SHA1><branch><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</SHA1><branch><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</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'></action><building>false</building><displayName>#722</displayName><duration>65233</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #722</fullDisplayName><id>722</id><inProgress>false</inProgress><keepLog>false</keepLog><number>722</number><queueId>5611</queueId><result>SUCCESS</result><timestamp>1788134400274</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/722/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>721</buildNumber><marked><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</SHA1><branch><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</SHA1><branch><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</SHA1><branch><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</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'></action><building>false</building><displayName>#721</displayName><duration>66923</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #721</fullDisplayName><id>721</id><inProgress>false</inProgress><keepLog>false</keepLog><number>721</number><queueId>5610</queueId><result>SUCCESS</result><timestamp>1788048000277</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/721/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>720</buildNumber><marked><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</SHA1><branch><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</SHA1><branch><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</SHA1><branch><SHA1>26dd9926c92c1e147099abdea4fdcff6138dcb60</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'></action><building>false</building><displayName>#720</displayName><duration>57347</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #720</fullDisplayName><id>720</id><inProgress>false</inProgress><keepLog>false</keepLog><number>720</number><queueId>5608</queueId><result>SUCCESS</result><timestamp>1787961600272</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/720/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/dhlCustomHelper.ts</affectedPath><affectedPath>server/utils/dhlHelper.ts</affectedPath><affectedPath>server/utils/dpdHelper.ts</affectedPath><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>app/components/integrations/CommissionDPDLabel.vue</affectedPath><commitId>ec0b62069ccc1cebcadbbdeceea2afd2a196e44e</commitId><timestamp>1787902933000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fix DPD to refresh and show DHL human readable error on credential error
</comment><date>2026-08-28 09:42:13 +0200</date><id>ec0b62069ccc1cebcadbbdeceea2afd2a196e44e</id><msg>Fix DPD to refresh and show DHL human readable error on credential error</msg><path><editType>edit</editType><file>server/utils/dpdHelper.ts</file></path><path><editType>edit</editType><file>server/utils/dhlHelper.ts</file></path><path><editType>edit</editType><file>server/utils/dhlCustomHelper.ts</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path><path><editType>add</editType><file>app/components/integrations/CommissionDPDLabel.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/ProductFulfillmentPricingCard.vue</affectedPath><affectedPath>app/pages/materials/products/[id]/edit.vue</affectedPath><affectedPath>server/api/materials/products/[id]/fulfillment-pricing.get.ts</affectedPath><affectedPath>app/components/materials/RulePricingEditModal.vue</affectedPath><affectedPath>app/components/materials/ProductOverridePriceModal.vue</affectedPath><commitId>26dd9926c92c1e147099abdea4fdcff6138dcb60</commitId><timestamp>1787936650000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add product page pricing
</comment><date>2026-08-28 19:04:10 +0200</date><id>26dd9926c92c1e147099abdea4fdcff6138dcb60</id><msg>add product page pricing</msg><path><editType>edit</editType><file>app/pages/materials/products/[id]/edit.vue</file></path><path><editType>add</editType><file>server/api/materials/products/[id]/fulfillment-pricing.get.ts</file></path><path><editType>add</editType><file>app/components/materials/ProductFulfillmentPricingCard.vue</file></path><path><editType>add</editType><file>app/components/materials/ProductOverridePriceModal.vue</file></path><path><editType>add</editType><file>app/components/materials/RulePricingEditModal.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>719</buildNumber><marked><SHA1>1cd1184f81df70c8df195b18069e99303514b0c2</SHA1><branch><SHA1>1cd1184f81df70c8df195b18069e99303514b0c2</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>1cd1184f81df70c8df195b18069e99303514b0c2</SHA1><branch><SHA1>1cd1184f81df70c8df195b18069e99303514b0c2</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>1cd1184f81df70c8df195b18069e99303514b0c2</SHA1><branch><SHA1>1cd1184f81df70c8df195b18069e99303514b0c2</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'></action><building>false</building><displayName>#719</displayName><duration>55874</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #719</fullDisplayName><id>719</id><inProgress>false</inProgress><keepLog>false</keepLog><number>719</number><queueId>5604</queueId><result>SUCCESS</result><timestamp>1787875200274</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/719/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/commission/parcels/dpd/index.get.ts</affectedPath><affectedPath>server/utils/dpdHelper.ts</affectedPath><commitId>2f5fcb00bd7d73c4b3fef01295eaf76028e902ce</commitId><timestamp>1787813974000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Revert DPD label PDF transform — fit at print time via CUPS instead

The pdf-lib rescale added ~6s per label in practice (likely the re-serialized
PDF slowing the CUPS filter chain). Label PDFs now pass through untouched;
the width fit moves to lp options on the DPD print calls.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-08-27 08:59:34 +0200</date><id>2f5fcb00bd7d73c4b3fef01295eaf76028e902ce</id><msg>Revert DPD label PDF transform — fit at print time via CUPS instead</msg><path><editType>edit</editType><file>server/api/commission/parcels/dpd/index.get.ts</file></path><path><editType>edit</editType><file>server/utils/dpdHelper.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/commission.vue</affectedPath><affectedPath>app/pages/integrations/manual-label.vue</affectedPath><commitId>da65b5f57439ab11749411ab097fc532555c4c67</commitId><timestamp>1787814023000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fit DPD labels via CUPS options on print (-o fit-to-page + explicit media)

DPD A6 labels (105mm) exceed the Zebra queues' 101.6mm printable width and
got clipped ~7mm on the left. The DPD print calls now pass lp options so
CUPS scales at print time; DHL prints send no options and stay unchanged.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-08-27 09:00:23 +0200</date><id>da65b5f57439ab11749411ab097fc532555c4c67</id><msg>Fit DPD labels via CUPS options on print (-o fit-to-page + explicit media)</msg><path><editType>edit</editType><file>app/pages/integrations/manual-label.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/commission/parcels/dhl/multi.post.ts</affectedPath><affectedPath>app/pages/materials/shippers/[id]/edit.vue</affectedPath><affectedPath>app/pages/materials/shippers/create.vue</affectedPath><affectedPath>server/api/materials/shippers/update.put.ts</affectedPath><affectedPath>app/components/materials/ShipperForm.vue</affectedPath><affectedPath>server/utils/dhlMainCredential.ts</affectedPath><affectedPath>server/utils/dhlBaseHelper.ts</affectedPath><affectedPath>server/api/materials/shippers/store.post.ts</affectedPath><affectedPath>app/pages/materials/shippers/[id]/duplicate.vue</affectedPath><affectedPath>server/api/commission/parcels/dhl/index.post.ts</affectedPath><affectedPath>server/api/tracking/[number].get.ts</affectedPath><affectedPath>app/pages/materials/shippers/[id]/view.vue</affectedPath><affectedPath>server/utils/dhlHelper.ts</affectedPath><affectedPath>server/api/commission/trackings/tracking.get.ts</affectedPath><affectedPath>server/api/commission/parcels/dhl/manual.post.ts</affectedPath><commitId>84e71663ef3f280de373e71328bbc7ff65a5ae10</commitId><timestamp>1787820560000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add dhl to m shipper and wire
</comment><date>2026-08-27 10:49:20 +0200</date><id>84e71663ef3f280de373e71328bbc7ff65a5ae10</id><msg>add dhl to m shipper and wire</msg><path><editType>edit</editType><file>server/api/commission/trackings/tracking.get.ts</file></path><path><editType>edit</editType><file>app/pages/materials/shippers/[id]/view.vue</file></path><path><editType>edit</editType><file>server/api/materials/shippers/update.put.ts</file></path><path><editType>edit</editType><file>server/api/tracking/[number].get.ts</file></path><path><editType>edit</editType><file>app/components/materials/ShipperForm.vue</file></path><path><editType>delete</editType><file>server/utils/dhlBaseHelper.ts</file></path><path><editType>edit</editType><file>app/pages/materials/shippers/[id]/edit.vue</file></path><path><editType>edit</editType><file>server/utils/dhlHelper.ts</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dhl/manual.post.ts</file></path><path><editType>add</editType><file>server/utils/dhlMainCredential.ts</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dhl/index.post.ts</file></path><path><editType>edit</editType><file>server/api/commission/parcels/dhl/multi.post.ts</file></path><path><editType>edit</editType><file>server/api/materials/shippers/store.post.ts</file></path><path><editType>edit</editType><file>app/pages/materials/shippers/create.vue</file></path><path><editType>edit</editType><file>app/pages/materials/shippers/[id]/duplicate.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/materials/shippers/store.post.ts</affectedPath><affectedPath>server/utils/dhlMainCredential.ts</affectedPath><affectedPath>server/api/materials/shippers/update.put.ts</affectedPath><commitId>852e06f2ad3ab6384ec5d6a026886f09aad0b812</commitId><timestamp>1787820886000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>cache dhl 24 hours credentials
</comment><date>2026-08-27 10:54:46 +0200</date><id>852e06f2ad3ab6384ec5d6a026886f09aad0b812</id><msg>cache dhl 24 hours credentials</msg><path><editType>edit</editType><file>server/utils/dhlMainCredential.ts</file></path><path><editType>edit</editType><file>server/api/materials/shippers/store.post.ts</file></path><path><editType>edit</editType><file>server/api/materials/shippers/update.put.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/commission.vue</affectedPath><affectedPath>app/pages/integrations/manual-label.vue</affectedPath><commitId>95becf7869027b1adfe6f884ee74154734285842</commitId><timestamp>1787822516000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Revert "Fit DPD labels via CUPS options on print (-o fit-to-page + explicit media)"

This reverts commit da65b5f57439ab11749411ab097fc532555c4c67.
</comment><date>2026-08-27 11:21:56 +0200</date><id>95becf7869027b1adfe6f884ee74154734285842</id><msg>Revert "Fit DPD labels via CUPS options on print (-o fit-to-page + explicit media)"</msg><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/manual-label.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/orders/ag-grid/summary.post.ts</affectedPath><commitId>a11f5e9603d68d9442b61ede72adf99033292fb2</commitId><timestamp>1787822551000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>revert pdf dpd modifications
</comment><date>2026-08-27 11:22:31 +0200</date><id>a11f5e9603d68d9442b61ede72adf99033292fb2</id><msg>revert pdf dpd modifications</msg><path><editType>edit</editType><file>server/api/orders/ag-grid/summary.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/materials/shippers/update.put.ts</affectedPath><commitId>1cd1184f81df70c8df195b18069e99303514b0c2</commitId><timestamp>1787823328000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>wire dhl kleinpaket national
</comment><date>2026-08-27 11:35:28 +0200</date><id>1cd1184f81df70c8df195b18069e99303514b0c2</id><msg>wire dhl kleinpaket national</msg><path><editType>edit</editType><file>server/api/materials/shippers/update.put.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>718</buildNumber><marked><SHA1>8147bb32844f79efe3ab88360bd1c18cb7537bbf</SHA1><branch><SHA1>8147bb32844f79efe3ab88360bd1c18cb7537bbf</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>8147bb32844f79efe3ab88360bd1c18cb7537bbf</SHA1><branch><SHA1>8147bb32844f79efe3ab88360bd1c18cb7537bbf</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>8147bb32844f79efe3ab88360bd1c18cb7537bbf</SHA1><branch><SHA1>8147bb32844f79efe3ab88360bd1c18cb7537bbf</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'></action><building>false</building><displayName>#718</displayName><duration>56608</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #718</fullDisplayName><id>718</id><inProgress>false</inProgress><keepLog>false</keepLog><number>718</number><queueId>5600</queueId><result>SUCCESS</result><timestamp>1787788800273</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/718/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.env-prod</affectedPath><commitId>c7fa94962052c443eefc90632f509821b43d56c9</commitId><timestamp>1787739395000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Change DHL pass
</comment><date>2026-08-26 12:16:35 +0200</date><id>c7fa94962052c443eefc90632f509821b43d56c9</id><msg>Change DHL pass</msg><path><editType>edit</editType><file>.env-prod</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.env-prod</affectedPath><commitId>8147bb32844f79efe3ab88360bd1c18cb7537bbf</commitId><timestamp>1787741272000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix pw
</comment><date>2026-08-26 12:47:52 +0200</date><id>8147bb32844f79efe3ab88360bd1c18cb7537bbf</id><msg>fix pw</msg><path><editType>edit</editType><file>.env-prod</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>717</buildNumber><marked><SHA1>1bd0bb99035dd4456264337b047d087646961099</SHA1><branch><SHA1>1bd0bb99035dd4456264337b047d087646961099</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>1bd0bb99035dd4456264337b047d087646961099</SHA1><branch><SHA1>1bd0bb99035dd4456264337b047d087646961099</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>1bd0bb99035dd4456264337b047d087646961099</SHA1><branch><SHA1>1bd0bb99035dd4456264337b047d087646961099</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'></action><building>false</building><displayName>#717</displayName><duration>55838</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #717</fullDisplayName><id>717</id><inProgress>false</inProgress><keepLog>false</keepLog><number>717</number><queueId>5597</queueId><result>SUCCESS</result><timestamp>1787702400272</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/717/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/bi/fulfillment-earnings.vue</affectedPath><affectedPath>server/api/bi/fulfillment-earnings.get.ts</affectedPath><affectedPath>server/api/bi/send-earnings-report.post.ts</affectedPath><commitId>e9381c4b8b5adb51d94c112947f5da44511bfa70</commitId><timestamp>1787640096000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>tune erlöse page
</comment><date>2026-08-25 08:41:36 +0200</date><id>e9381c4b8b5adb51d94c112947f5da44511bfa70</id><msg>tune erlöse page</msg><path><editType>add</editType><file>server/api/bi/send-earnings-report.post.ts</file></path><path><editType>edit</editType><file>app/pages/bi/fulfillment-earnings.vue</file></path><path><editType>edit</editType><file>server/api/bi/fulfillment-earnings.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/incoming-invoices/index.vue</affectedPath><affectedPath>server/utils/inbox/inboxDb.ts</affectedPath><affectedPath>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</affectedPath><affectedPath>server/api/accounting/incoming-invoices/[id]/unlink.post.ts</affectedPath><affectedPath>app/components/accounting/inbox/InboxList.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>793a82d4cbd64989cb56f00fe958405346e679a6</commitId><timestamp>1787641115000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix accounting unlinking
</comment><date>2026-08-25 08:58:35 +0200</date><id>793a82d4cbd64989cb56f00fe958405346e679a6</id><msg>fix accounting unlinking</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/accounting/inbox/InboxList.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/incoming-invoices/index.vue</file></path><path><editType>edit</editType><file>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</file></path><path><editType>add</editType><file>server/api/accounting/incoming-invoices/[id]/unlink.post.ts</file></path><path><editType>edit</editType><file>server/utils/inbox/inboxDb.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>2f450190619f89a1ca50943b1979065fa0287642</commitId><timestamp>1787641822000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add ticket pdf report function
</comment><date>2026-08-25 09:10:22 +0200</date><id>2f450190619f89a1ca50943b1979065fa0287642</id><msg>add ticket pdf report function</msg><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</affectedPath><affectedPath>server/api/accounting/incoming-invoices/[id]/unlink.post.ts</affectedPath><affectedPath>server/utils/inbox/freeInvoiceNo.ts</affectedPath><commitId>67b08d0b7afa8c054b21580edc6fe1ac2fd6ed9e</commitId><timestamp>1787644426000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix unlinking invoices
</comment><date>2026-08-25 09:53:46 +0200</date><id>67b08d0b7afa8c054b21580edc6fe1ac2fd6ed9e</id><msg>fix unlinking invoices</msg><path><editType>edit</editType><file>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</file></path><path><editType>add</editType><file>server/utils/inbox/freeInvoiceNo.ts</file></path><path><editType>edit</editType><file>server/api/accounting/incoming-invoices/[id]/unlink.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/OrderForm.vue</affectedPath><affectedPath>server/api/commission/state-lookup.get.ts</affectedPath><affectedPath>app/pages/sales/orders/add.vue</affectedPath><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>app/composables/useUsAddress.ts</affectedPath><affectedPath>app/pages/integrations/commission.vue</affectedPath><affectedPath>app/pages/sales/orders/create.vue</affectedPath><affectedPath>app/composables/useAddressFixer.ts</affectedPath><commitId>4004704729336f2b835f45cbf660979d8a4941e4</commitId><timestamp>1787649101000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add usa state check
</comment><date>2026-08-25 11:11:41 +0200</date><id>4004704729336f2b835f45cbf660979d8a4941e4</id><msg>add usa state check</msg><path><editType>edit</editType><file>app/pages/sales/orders/create.vue</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/composables/useAddressFixer.ts</file></path><path><editType>edit</editType><file>app/pages/sales/orders/add.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path><path><editType>add</editType><file>app/composables/useUsAddress.ts</file></path><path><editType>edit</editType><file>app/components/sales/OrderForm.vue</file></path><path><editType>add</editType><file>server/api/commission/state-lookup.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/settings/bank-connections/[id]/edit.vue</affectedPath><affectedPath>server/api/accounting/ebay/orders-check.get.ts</affectedPath><affectedPath>app/components/accounting/banking/BankConnectionCard.vue</affectedPath><affectedPath>app/pages/settings/bank-connections/create.vue</affectedPath><affectedPath>app/components/settings/BankConnectionForm.vue</affectedPath><affectedPath>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</affectedPath><affectedPath>app/components/accounting/banking/BankFetchResultModal.vue</affectedPath><affectedPath>app/components/accounting/inbox/InvoiceReview.vue</affectedPath><affectedPath>app/components/AgGrid/Accounting/AgDocPreviewLink.vue</affectedPath><affectedPath>app/components/accounting/BankLineMatchModal.vue</affectedPath><affectedPath>app/pages/accounting/amazon-orders-check.vue</affectedPath><affectedPath>app/pages/accounting/banking/index.vue</affectedPath><affectedPath>reference/recipes.md</affectedPath><affectedPath>app/components/accounting/banking/BankReconcileTab.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/components/accounting/banking/BankImportPreviewModal.vue</affectedPath><affectedPath>app/composables/useInvoiceGenerate.ts</affectedPath><affectedPath>server/api/accounting/amazon/orders-check.get.ts</affectedPath><affectedPath>server/api/accounting/bank-reconciliation/lines/[lineId]/match-invoice.post.ts</affectedPath><affectedPath>app/components/accounting/banking/BankImportTab.vue</affectedPath><affectedPath>server/utils/bankReconciliation.ts</affectedPath><affectedPath>server/api/accounting/bank-reconciliation/unreconciled-payments.get.ts</affectedPath><affectedPath>app/pages/settings/bank-connections/index.vue</affectedPath><affectedPath>app/pages/accounting/ebay-orders-check.vue</affectedPath><affectedPath>app/composables/useBankingFormat.ts</affectedPath><affectedPath>server/api/accounting/bank-reconciliation/statements.get.ts</affectedPath><commitId>1bd0bb99035dd4456264337b047d087646961099</commitId><timestamp>1787657167000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Add Invoice creation on amazon and ebay reconilation pages
</comment><date>2026-08-25 13:26:07 +0200</date><id>1bd0bb99035dd4456264337b047d087646961099</id><msg>Add Invoice creation on amazon and ebay reconilation pages</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/accounting/banking/BankConnectionCard.vue</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path><path><editType>edit</editType><file>server/api/accounting/amazon/orders-check.get.ts</file></path><path><editType>edit</editType><file>app/pages/settings/bank-connections/index.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/ebay-orders-check.vue</file></path><path><editType>edit</editType><file>app/components/accounting/banking/BankImportTab.vue</file></path><path><editType>edit</editType><file>server/api/accounting/ebay/orders-check.get.ts</file></path><path><editType>edit</editType><file>app/composables/useBankingFormat.ts</file></path><path><editType>edit</editType><file>app/pages/settings/bank-connections/create.vue</file></path><path><editType>edit</editType><file>app/components/accounting/banking/BankImportPreviewModal.vue</file></path><path><editType>edit</editType><file>app/pages/settings/bank-connections/[id]/edit.vue</file></path><path><editType>edit</editType><file>server/utils/bankReconciliation.ts</file></path><path><editType>edit</editType><file>app/components/accounting/BankLineMatchModal.vue</file></path><path><editType>edit</editType><file>server/api/accounting/bank-reconciliation/statements.get.ts</file></path><path><editType>edit</editType><file>app/components/accounting/inbox/InvoiceReview.vue</file></path><path><editType>add</editType><file>app/composables/useInvoiceGenerate.ts</file></path><path><editType>edit</editType><file>app/pages/accounting/banking/index.vue</file></path><path><editType>edit</editType><file>server/api/accounting/bank-reconciliation/unreconciled-payments.get.ts</file></path><path><editType>edit</editType><file>server/api/accounting/bank-reconciliation/lines/[lineId]/match-invoice.post.ts</file></path><path><editType>edit</editType><file>app/components/AgGrid/Accounting/AgDocPreviewLink.vue</file></path><path><editType>edit</editType><file>app/components/accounting/banking/BankFetchResultModal.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/amazon-orders-check.vue</file></path><path><editType>edit</editType><file>app/components/accounting/banking/BankReconcileTab.vue</file></path><path><editType>edit</editType><file>app/components/settings/BankConnectionForm.vue</file></path><path><editType>edit</editType><file>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>716</buildNumber><marked><SHA1>c41fc2c30e6bb6d7fd020e8848db3402ddf3cd54</SHA1><branch><SHA1>c41fc2c30e6bb6d7fd020e8848db3402ddf3cd54</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>c41fc2c30e6bb6d7fd020e8848db3402ddf3cd54</SHA1><branch><SHA1>c41fc2c30e6bb6d7fd020e8848db3402ddf3cd54</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>c41fc2c30e6bb6d7fd020e8848db3402ddf3cd54</SHA1><branch><SHA1>c41fc2c30e6bb6d7fd020e8848db3402ddf3cd54</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'></action><building>false</building><displayName>#716</displayName><duration>58364</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #716</fullDisplayName><id>716</id><inProgress>false</inProgress><keepLog>false</keepLog><number>716</number><queueId>5592</queueId><result>SUCCESS</result><timestamp>1787616000274</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/716/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>feac130192b05be84e747088aae7fdcbd85c180b</commitId><timestamp>1787555130000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>tune ticket
</comment><date>2026-08-24 09:05:30 +0200</date><id>feac130192b05be84e747088aae7fdcbd85c180b</id><msg>tune ticket</msg><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><commitId>9f086a736614cc0ead4e6d3810cdfeffdc70d5d2</commitId><timestamp>1787561527000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>changes for ticket
</comment><date>2026-08-24 10:52:07 +0200</date><id>9f086a736614cc0ead4e6d3810cdfeffdc70d5d2</id><msg>changes for ticket</msg><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/settings/OrderSourceForm.vue</affectedPath><affectedPath>server/api/settings/order-sources/update.put.ts</affectedPath><affectedPath>app/pages/settings/order-sources/[id]/edit.vue</affectedPath><commitId>4c21f6e046a122001cc12b4e31741097dd32d374</commitId><timestamp>1787564710000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Add new shipping profile for DPD - Plenty on ordersource
</comment><date>2026-08-24 11:45:10 +0200</date><id>4c21f6e046a122001cc12b4e31741097dd32d374</id><msg>Add new shipping profile for DPD - Plenty on ordersource</msg><path><editType>edit</editType><file>app/components/settings/OrderSourceForm.vue</file></path><path><editType>edit</editType><file>app/pages/settings/order-sources/[id]/edit.vue</file></path><path><editType>edit</editType><file>server/api/settings/order-sources/update.put.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/index.vue</affectedPath><affectedPath>server/api/orders/unfulfillable-products.get.ts</affectedPath><commitId>2c6a3560035cceaafca03a1f4f63b346a9912237</commitId><timestamp>1787565243000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>filter missing articles by org
</comment><date>2026-08-24 11:54:03 +0200</date><id>2c6a3560035cceaafca03a1f4f63b346a9912237</id><msg>filter missing articles by org</msg><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>edit</editType><file>server/api/orders/unfulfillable-products.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</affectedPath><affectedPath>app/components/accounting/inbox/InvoiceReview.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>296b83b373fddc81fc96ba578a7b50652c263312</commitId><timestamp>1787569443000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add AR payment accolation on banking page
</comment><date>2026-08-24 13:04:03 +0200</date><id>296b83b373fddc81fc96ba578a7b50652c263312</id><msg>add AR payment accolation on banking page</msg><path><editType>edit</editType><file>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/accounting/inbox/InvoiceReview.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>server/utils/pushNotifier.ts</affectedPath><affectedPath>app/components/requests/RequestForm.vue</affectedPath><affectedPath>app/components/dashboard/TicketQuickModal.vue</affectedPath><affectedPath>server/api/requests/requests/[id]/action-notification.post.ts</affectedPath><commitId>86a16f9082ce09fa64e56527c4992e92e38751d7</commitId><timestamp>1787570722000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>tune ticket notification
</comment><date>2026-08-24 13:25:22 +0200</date><id>86a16f9082ce09fa64e56527c4992e92e38751d7</id><msg>tune ticket notification</msg><path><editType>edit</editType><file>app/components/dashboard/TicketQuickModal.vue</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>server/utils/pushNotifier.ts</file></path><path><editType>edit</editType><file>server/api/requests/requests/[id]/action-notification.post.ts</file></path><path><editType>edit</editType><file>app/components/requests/RequestForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</affectedPath><affectedPath>app/components/accounting/banking/BankReconcilePanel.vue</affectedPath><affectedPath>app/components/accounting/banking/BankImportTab.vue</affectedPath><affectedPath>app/pages/accounting/banking/index.vue</affectedPath><affectedPath>app/components/accounting/inbox/InvoiceReview.vue</affectedPath><affectedPath>app/composables/useBankingMarks.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>232aeb401da22d996403ff0796a5d219c39dad2b</commitId><timestamp>1787571916000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix banking invoice amounts
</comment><date>2026-08-24 13:45:16 +0200</date><id>232aeb401da22d996403ff0796a5d219c39dad2b</id><msg>fix banking invoice amounts</msg><path><editType>edit</editType><file>app/composables/useBankingMarks.ts</file></path><path><editType>edit</editType><file>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</file></path><path><editType>edit</editType><file>app/components/accounting/banking/BankReconcilePanel.vue</file></path><path><editType>edit</editType><file>app/components/accounting/inbox/InvoiceReview.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/banking/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/accounting/banking/BankImportTab.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>app/pages/partners/partners/[id]/edit.vue</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>server/api/offers/website-screenshot.post.ts</affectedPath><affectedPath>app/components/offers/ContractModal.vue</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>4f3ad36e95938f4bd4c60e3ea40c1d632f005a7f</commitId><timestamp>1787573953000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>tweak leads offer with website screenshot or logo
</comment><date>2026-08-24 14:19:13 +0200</date><id>4f3ad36e95938f4bd4c60e3ea40c1d632f005a7f</id><msg>tweak leads offer with website screenshot or logo</msg><path><editType>edit</editType><file>app/components/offers/ContractModal.vue</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>add</editType><file>server/api/offers/website-screenshot.post.ts</file></path><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/partners/partners/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/accounting/incoming-invoices/index.vue</affectedPath><affectedPath>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</affectedPath><affectedPath>app/components/accounting/inbox/InvoiceReview.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>22713e86704032f1809d570ef3ff9571fedadbbd</commitId><timestamp>1787575634000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix invoices
</comment><date>2026-08-24 14:47:14 +0200</date><id>22713e86704032f1809d570ef3ff9571fedadbbd</id><msg>fix invoices</msg><path><editType>edit</editType><file>app/pages/accounting/incoming-invoices/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/accounting/inbox/InvoiceReview.vue</file></path><path><editType>edit</editType><file>server/api/accounting/incoming-invoices/[id]/confirm.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/commission/parcels/dpd/index.get.ts</affectedPath><affectedPath>server/utils/dpdHelper.ts</affectedPath><commitId>3578f0468c34f72394d4c59f1d49550ca66e4c19</commitId><timestamp>1787579057000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix to show the label a6
</comment><date>2026-08-24 15:44:17 +0200</date><id>3578f0468c34f72394d4c59f1d49550ca66e4c19</id><msg>fix to show the label a6</msg><path><editType>edit</editType><file>server/api/commission/parcels/dpd/index.get.ts</file></path><path><editType>edit</editType><file>server/utils/dpdHelper.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/dpdHelper.ts</affectedPath><commitId>b58d9ba724cb7fe8f19d2c0e6e80bb39d3eb42ad</commitId><timestamp>1787583223000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>reduce dpd commission pdf time
</comment><date>2026-08-24 16:53:43 +0200</date><id>b58d9ba724cb7fe8f19d2c0e6e80bb39d3eb42ad</id><msg>reduce dpd commission pdf time</msg><path><editType>edit</editType><file>server/utils/dpdHelper.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/bi/fulfillment-earnings.vue</affectedPath><affectedPath>server/api/bi/fulfillment-earnings.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><commitId>388382cd995bd887df683cbe40660c82e47264ab</commitId><timestamp>1787588780000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>show maring calculation per date range
</comment><date>2026-08-24 18:26:20 +0200</date><id>388382cd995bd887df683cbe40660c82e47264ab</id><msg>show maring calculation per date range</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/api/bi/fulfillment-earnings.get.ts</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>add</editType><file>app/pages/bi/fulfillment-earnings.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/commission.vue</affectedPath><commitId>c41fc2c30e6bb6d7fd020e8848db3402ddf3cd54</commitId><timestamp>1787589343000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix
</comment><date>2026-08-24 18:35:43 +0200</date><id>c41fc2c30e6bb6d7fd020e8848db3402ddf3cd54</id><msg>fix</msg><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>715</buildNumber><marked><SHA1>dd0fe5ffef247f4643b120ed36867ea125bb0516</SHA1><branch><SHA1>dd0fe5ffef247f4643b120ed36867ea125bb0516</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>dd0fe5ffef247f4643b120ed36867ea125bb0516</SHA1><branch><SHA1>dd0fe5ffef247f4643b120ed36867ea125bb0516</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>dd0fe5ffef247f4643b120ed36867ea125bb0516</SHA1><branch><SHA1>dd0fe5ffef247f4643b120ed36867ea125bb0516</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'></action><building>false</building><displayName>#715</displayName><duration>56367</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #715</fullDisplayName><id>715</id><inProgress>false</inProgress><keepLog>false</keepLog><number>715</number><queueId>5583</queueId><result>SUCCESS</result><timestamp>1787529600274</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/715/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/OrderQuickAddModal.vue</affectedPath><affectedPath>app/pages/partners/partners/add.vue</affectedPath><affectedPath>app/components/partners/PartnerQuickForm.vue</affectedPath><affectedPath>server/api/partners/partners/quick-add.post.ts</affectedPath><commitId>246ffe948973e5edfb0ecc575f7f76d271c2e008</commitId><timestamp>1787508390000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>tweak dhl packstation manual order creation
</comment><date>2026-08-23 20:06:30 +0200</date><id>246ffe948973e5edfb0ecc575f7f76d271c2e008</id><msg>tweak dhl packstation manual order creation</msg><path><editType>edit</editType><file>app/components/OrderQuickAddModal.vue</file></path><path><editType>edit</editType><file>app/pages/partners/partners/add.vue</file></path><path><editType>edit</editType><file>app/components/partners/PartnerQuickForm.vue</file></path><path><editType>edit</editType><file>server/api/partners/partners/quick-add.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/bank-reconciliation/[id]/lines.get.ts</affectedPath><affectedPath>app/components/accounting/banking/BankReconcilePanel.vue</affectedPath><affectedPath>app/components/accounting/banking/BankFetchResultModal.vue</affectedPath><affectedPath>app/components/accounting/banking/BankImportTab.vue</affectedPath><affectedPath>app/pages/accounting/banking/index.vue</affectedPath><affectedPath>app/composables/useBankingFormat.ts</affectedPath><affectedPath>server/api/accounting/bank-reconciliation/statements.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/components/accounting/banking/BankImportPreviewModal.vue</affectedPath><affectedPath>app/composables/useBankingMarks.ts</affectedPath><commitId>a63a3f6d96d2699a1dc0740cf3f9fd05429ffba0</commitId><timestamp>1787509433000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>change ordering of bank transactions latest top
</comment><date>2026-08-23 20:23:53 +0200</date><id>a63a3f6d96d2699a1dc0740cf3f9fd05429ffba0</id><msg>change ordering of bank transactions latest top</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/accounting/banking/BankImportPreviewModal.vue</file></path><path><editType>edit</editType><file>server/api/accounting/bank-reconciliation/statements.get.ts</file></path><path><editType>edit</editType><file>app/pages/accounting/banking/index.vue</file></path><path><editType>edit</editType><file>app/components/accounting/banking/BankFetchResultModal.vue</file></path><path><editType>edit</editType><file>app/components/accounting/banking/BankImportTab.vue</file></path><path><editType>edit</editType><file>app/components/accounting/banking/BankReconcilePanel.vue</file></path><path><editType>add</editType><file>app/composables/useBankingMarks.ts</file></path><path><editType>edit</editType><file>app/composables/useBankingFormat.ts</file></path><path><editType>edit</editType><file>server/api/accounting/bank-reconciliation/[id]/lines.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/commission.vue</affectedPath><affectedPath>app/composables/useAddressFixer.ts</affectedPath><commitId>dd0fe5ffef247f4643b120ed36867ea125bb0516</commitId><timestamp>1787515546000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Tune the address edit on commission to not close directly when moving out of edit area and introduce and address recommondation wizard inside the same modal
</comment><date>2026-08-23 22:05:46 +0200</date><id>dd0fe5ffef247f4643b120ed36867ea125bb0516</id><msg>Tune the address edit on commission to not close directly when moving out of edit area and introduce and address recommondation wizard inside the same modal</msg><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path><path><editType>add</editType><file>app/composables/useAddressFixer.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>714</buildNumber><marked><SHA1>74fbf9b3aae02a663436db434a580ac01a928c1c</SHA1><branch><SHA1>74fbf9b3aae02a663436db434a580ac01a928c1c</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>74fbf9b3aae02a663436db434a580ac01a928c1c</SHA1><branch><SHA1>74fbf9b3aae02a663436db434a580ac01a928c1c</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>74fbf9b3aae02a663436db434a580ac01a928c1c</SHA1><branch><SHA1>74fbf9b3aae02a663436db434a580ac01a928c1c</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'></action><building>false</building><displayName>#714</displayName><duration>57217</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #714</fullDisplayName><id>714</id><inProgress>false</inProgress><keepLog>false</keepLog><number>714</number><queueId>5579</queueId><result>SUCCESS</result><timestamp>1787443200273</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/714/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/OrderQuickAddModal.vue</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/composables/useDhlShipper.ts</affectedPath><affectedPath>app/pages/partners/partners/add.vue</affectedPath><affectedPath>app/components/partners/PartnerQuickForm.vue</affectedPath><affectedPath>app/pages/materials/products/index.vue</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>reference/dhlpackstation.png</affectedPath><affectedPath>app/components/AgGrid/Products/AgOriginCountry.vue</affectedPath><affectedPath>public/assets/shipper/dhl_packstation_small.png</affectedPath><affectedPath>server/api/partners/partners/quick-add.post.ts</affectedPath><commitId>39422f98beefc5d30da965cd9941c3ca60d4172e</commitId><timestamp>1787418170000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fixes merchant portal
</comment><date>2026-08-22 19:02:50 +0200</date><id>39422f98beefc5d30da965cd9941c3ca60d4172e</id><msg>fixes merchant portal</msg><path><editType>add</editType><file>reference/dhlpackstation.png</file></path><path><editType>edit</editType><file>app/components/OrderQuickAddModal.vue</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/pages/materials/products/index.vue</file></path><path><editType>add</editType><file>app/composables/useDhlShipper.ts</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>edit</editType><file>server/api/partners/partners/quick-add.post.ts</file></path><path><editType>edit</editType><file>app/pages/partners/partners/add.vue</file></path><path><editType>add</editType><file>public/assets/shipper/dhl_packstation_small.png</file></path><path><editType>edit</editType><file>app/components/AgGrid/Products/AgOriginCountry.vue</file></path><path><editType>edit</editType><file>app/components/partners/PartnerQuickForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/OrderQuickAddModal.vue</affectedPath><affectedPath>app/components/materials/ProductForm.vue</affectedPath><affectedPath>app/pages/partners/partners/add.vue</affectedPath><affectedPath>app/components/partners/PartnerQuickForm.vue</affectedPath><affectedPath>app/pages/materials/products/index.vue</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/components/sales/CountryPickerModal.vue</affectedPath><affectedPath>app/components/AgGrid/Products/AgOriginCountry.vue</affectedPath><affectedPath>server/api/partners/partners/quick-add.post.ts</affectedPath><commitId>74fbf9b3aae02a663436db434a580ac01a928c1c</commitId><timestamp>1787419783000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fixes merchant portal
</comment><date>2026-08-22 19:29:43 +0200</date><id>74fbf9b3aae02a663436db434a580ac01a928c1c</id><msg>fixes merchant portal</msg><path><editType>edit</editType><file>app/components/partners/PartnerQuickForm.vue</file></path><path><editType>edit</editType><file>server/api/partners/partners/quick-add.post.ts</file></path><path><editType>edit</editType><file>app/components/OrderQuickAddModal.vue</file></path><path><editType>edit</editType><file>app/components/sales/CountryPickerModal.vue</file></path><path><editType>edit</editType><file>app/components/materials/ProductForm.vue</file></path><path><editType>edit</editType><file>app/pages/partners/partners/add.vue</file></path><path><editType>edit</editType><file>app/components/AgGrid/Products/AgOriginCountry.vue</file></path><path><editType>edit</editType><file>app/pages/materials/products/index.vue</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>713</buildNumber><marked><SHA1>a1dc93ca0866540d9e47109b3cc15758cef248c0</SHA1><branch><SHA1>a1dc93ca0866540d9e47109b3cc15758cef248c0</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>a1dc93ca0866540d9e47109b3cc15758cef248c0</SHA1><branch><SHA1>a1dc93ca0866540d9e47109b3cc15758cef248c0</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>a1dc93ca0866540d9e47109b3cc15758cef248c0</SHA1><branch><SHA1>a1dc93ca0866540d9e47109b3cc15758cef248c0</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'></action><building>false</building><displayName>#713</displayName><duration>56083</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #713</fullDisplayName><id>713</id><inProgress>false</inProgress><keepLog>false</keepLog><number>713</number><queueId>5576</queueId><result>SUCCESS</result><timestamp>1787356800273</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/713/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/bankReconciliation.ts</affectedPath><affectedPath>server/api/accounting/bank-reconciliation/[id]/suggestions.get.ts</affectedPath><affectedPath>server/api/accounting/bank-reconciliation/lines/index.get.ts</affectedPath><affectedPath>app/components/accounting/banking/BankReconcilePanel.vue</affectedPath><affectedPath>server/utils/bankReconciliationSuggestions.ts</affectedPath><affectedPath>app/components/accounting/banking/BankImportTab.vue</affectedPath><affectedPath>app/pages/accounting/banking/index.vue</affectedPath><affectedPath>server/api/accounting/bank-reconciliation/suggestions.get.ts</affectedPath><affectedPath>app/components/accounting/banking/BankReconcileTab.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>3b4fd40cfbad3d47beb1efbebd80f5b24e6c74fa</commitId><timestamp>1787306128000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>optmize banking
</comment><date>2026-08-21 11:55:28 +0200</date><id>3b4fd40cfbad3d47beb1efbebd80f5b24e6c74fa</id><msg>optmize banking</msg><path><editType>edit</editType><file>app/components/accounting/banking/BankReconcilePanel.vue</file></path><path><editType>edit</editType><file>server/api/accounting/bank-reconciliation/[id]/suggestions.get.ts</file></path><path><editType>add</editType><file>server/api/accounting/bank-reconciliation/lines/index.get.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/accounting/banking/BankReconcileTab.vue</file></path><path><editType>edit</editType><file>server/utils/bankReconciliation.ts</file></path><path><editType>edit</editType><file>app/components/accounting/banking/BankImportTab.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/banking/index.vue</file></path><path><editType>add</editType><file>server/utils/bankReconciliationSuggestions.ts</file></path><path><editType>add</editType><file>server/api/accounting/bank-reconciliation/suggestions.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>server/api/requests/requests/latest-updates.get.ts</affectedPath><affectedPath>app/pages/requests/my-tickets/index.vue</affectedPath><affectedPath>server/api/requests/requests/[id]/author-orgs.get.ts</affectedPath><affectedPath>app/utils/chatFormat.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>b2de5a56c5a60b556a08dad8a34b2bdd191f8ee5</commitId><timestamp>1787309765000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>tune ticket window
</comment><date>2026-08-21 12:56:05 +0200</date><id>b2de5a56c5a60b556a08dad8a34b2bdd191f8ee5</id><msg>tune ticket window</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/api/requests/requests/[id]/author-orgs.get.ts</file></path><path><editType>add</editType><file>app/utils/chatFormat.ts</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>server/api/requests/requests/latest-updates.get.ts</file></path><path><editType>edit</editType><file>app/pages/requests/my-tickets/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/accounting/banking/BankImportTab.vue</affectedPath><affectedPath>app/pages/accounting/banking/index.vue</affectedPath><affectedPath>app/components/accounting/banking/BankReconcilePanel.vue</affectedPath><affectedPath>app/components/accounting/banking/BankReconcileTab.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>b63d695c5ed351cc48e81c3376bacb3669c65445</commitId><timestamp>1787311617000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>tune banking page
</comment><date>2026-08-21 13:26:57 +0200</date><id>b63d695c5ed351cc48e81c3376bacb3669c65445</id><msg>tune banking page</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/accounting/banking/BankImportTab.vue</file></path><path><editType>edit</editType><file>app/components/accounting/banking/BankReconcilePanel.vue</file></path><path><editType>edit</editType><file>app/components/accounting/banking/BankReconcileTab.vue</file></path><path><editType>edit</editType><file>app/pages/accounting/banking/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/useRequestAttachmentActions.ts</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/components/AttachmentModal.vue</affectedPath><affectedPath>app/components/requests/RequestForm.vue</affectedPath><affectedPath>app/components/requests/RequestAttachmentsCard.vue</affectedPath><commitId>b14cb4a6e688776f1eb638a664e7d9eb2d84e093</commitId><timestamp>1787315135000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>show back the attachments
</comment><date>2026-08-21 14:25:35 +0200</date><id>b14cb4a6e688776f1eb638a664e7d9eb2d84e093</id><msg>show back the attachments</msg><path><editType>add</editType><file>app/composables/useRequestAttachmentActions.ts</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/components/AttachmentModal.vue</file></path><path><editType>edit</editType><file>app/components/requests/RequestForm.vue</file></path><path><editType>add</editType><file>app/components/requests/RequestAttachmentsCard.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><commitId>21cd639c35986aeab6d36281bea2fd453789d466</commitId><timestamp>1787316204000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>tune ticket
</comment><date>2026-08-21 14:43:24 +0200</date><id>21cd639c35986aeab6d36281bea2fd453789d466</id><msg>tune ticket</msg><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>d3dab29790723a6ed5c7d78e22bc1e04f5b6058d</commitId><timestamp>1787316531000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>tune ticket
</comment><date>2026-08-21 14:48:51 +0200</date><id>d3dab29790723a6ed5c7d78e22bc1e04f5b6058d</id><msg>tune ticket</msg><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/requests/requests/update.put.ts</affectedPath><affectedPath>server/utils/accountingRequestType.ts</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/pages/requests/my-tickets/index.vue</affectedPath><affectedPath>server/api/requests/requests/store.post.ts</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>server/api/orders/[id]/requests.get.ts</affectedPath><affectedPath>app/components/requests/RequestForm.vue</affectedPath><affectedPath>app/components/sales/OrderPositionsTable.vue</affectedPath><affectedPath>server/api/orders/[id]/productions.get.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>44906da043dcf94aa5677c5af63a26820df89382</commitId><timestamp>1787318315000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>tune ticket
</comment><date>2026-08-21 15:18:35 +0200</date><id>44906da043dcf94aa5677c5af63a26820df89382</id><msg>tune ticket</msg><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>add</editType><file>server/api/orders/[id]/productions.get.ts</file></path><path><editType>edit</editType><file>app/components/requests/RequestForm.vue</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>server/api/orders/[id]/requests.get.ts</file></path><path><editType>edit</editType><file>app/components/sales/OrderPositionsTable.vue</file></path><path><editType>edit</editType><file>app/pages/requests/my-tickets/index.vue</file></path><path><editType>edit</editType><file>server/api/requests/requests/store.post.ts</file></path><path><editType>add</editType><file>server/utils/accountingRequestType.ts</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/api/requests/requests/update.put.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/OrderForm.vue</affectedPath><affectedPath>server/api/requests/requests/update.put.ts</affectedPath><affectedPath>app/components/AttachmentViewer.vue</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/pages/requests/my-tickets/index.vue</affectedPath><affectedPath>server/api/requests/requests/store.post.ts</affectedPath><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>app/components/requests/RequestForm.vue</affectedPath><affectedPath>server/utils/productionTicket.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>a1dc93ca0866540d9e47109b3cc15758cef248c0</commitId><timestamp>1787319748000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>tune ticket
</comment><date>2026-08-21 15:42:28 +0200</date><id>a1dc93ca0866540d9e47109b3cc15758cef248c0</id><msg>tune ticket</msg><path><editType>edit</editType><file>app/components/sales/OrderForm.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>server/utils/productionTicket.ts</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/components/AttachmentViewer.vue</file></path><path><editType>edit</editType><file>app/components/requests/RequestForm.vue</file></path><path><editType>edit</editType><file>app/pages/requests/my-tickets/index.vue</file></path><path><editType>edit</editType><file>server/api/requests/requests/store.post.ts</file></path><path><editType>edit</editType><file>server/api/requests/requests/update.put.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>712</buildNumber><marked><SHA1>afe7eeb2c13652f8e4b6eaf31364ffacd92d33ab</SHA1><branch><SHA1>afe7eeb2c13652f8e4b6eaf31364ffacd92d33ab</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>afe7eeb2c13652f8e4b6eaf31364ffacd92d33ab</SHA1><branch><SHA1>afe7eeb2c13652f8e4b6eaf31364ffacd92d33ab</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>afe7eeb2c13652f8e4b6eaf31364ffacd92d33ab</SHA1><branch><SHA1>afe7eeb2c13652f8e4b6eaf31364ffacd92d33ab</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'></action><building>false</building><displayName>#712</displayName><duration>59573</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #712</fullDisplayName><id>712</id><inProgress>false</inProgress><keepLog>false</keepLog><number>712</number><queueId>5570</queueId><result>SUCCESS</result><timestamp>1787270400273</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/712/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/accounting/banking/BankConnectionCard.vue</affectedPath><affectedPath>app/components/accounting/banking/BankReconcilePanel.vue</affectedPath><affectedPath>app/components/accounting/banking/BankFetchResultModal.vue</affectedPath><affectedPath>app/components/accounting/banking/BankImportTab.vue</affectedPath><affectedPath>app/composables/useNavigateTab.ts</affectedPath><affectedPath>app/composables/useIdempiereDate.ts</affectedPath><affectedPath>app/components/accounting/BankLineMatchModal.vue</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><affectedPath>app/pages/accounting/banking/index.vue</affectedPath><affectedPath>app/composables/useBankingFormat.ts</affectedPath><affectedPath>app/composables/menu/admin/accounting.ts</affectedPath><affectedPath>app/components/accounting/banking/BankReconcileTab.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><affectedPath>app/components/accounting/banking/BankImportPreviewModal.vue</affectedPath><commitId>4eb32d69f5dbd3a99f432659d0968392d52b9834</commitId><timestamp>1787223300000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>create unified accounting page
</comment><date>2026-08-20 12:55:00 +0200</date><id>4eb32d69f5dbd3a99f432659d0968392d52b9834</id><msg>create unified accounting page</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>app/components/accounting/banking/BankImportTab.vue</file></path><path><editType>add</editType><file>app/components/accounting/banking/BankConnectionCard.vue</file></path><path><editType>add</editType><file>app/components/accounting/banking/BankFetchResultModal.vue</file></path><path><editType>add</editType><file>app/composables/useNavigateTab.ts</file></path><path><editType>add</editType><file>app/components/accounting/banking/BankImportPreviewModal.vue</file></path><path><editType>add</editType><file>app/composables/useBankingFormat.ts</file></path><path><editType>add</editType><file>app/pages/accounting/banking/index.vue</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>add</editType><file>app/components/accounting/banking/BankReconcilePanel.vue</file></path><path><editType>edit</editType><file>app/composables/useIdempiereDate.ts</file></path><path><editType>edit</editType><file>app/composables/menu/admin/accounting.ts</file></path><path><editType>edit</editType><file>app/components/accounting/BankLineMatchModal.vue</file></path><path><editType>add</editType><file>app/components/accounting/banking/BankReconcileTab.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/requests/requests/create.vue</affectedPath><affectedPath>app/pages/bi/locator-usage.vue</affectedPath><affectedPath>server/api/bi/locator-usage.get.ts</affectedPath><commitId>bf7c95b98e8f73748208230d6096ad5495a3813e</commitId><timestamp>1787228593000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add unique locators
</comment><date>2026-08-20 14:23:13 +0200</date><id>bf7c95b98e8f73748208230d6096ad5495a3813e</id><msg>add unique locators</msg><path><editType>edit</editType><file>app/pages/requests/requests/create.vue</file></path><path><editType>edit</editType><file>app/pages/bi/locator-usage.vue</file></path><path><editType>edit</editType><file>server/api/bi/locator-usage.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/commission/open-tickets.get.ts</affectedPath><commitId>b7147bc395fb1e0d0bed2dcbea1fb58fb7751ed6</commitId><timestamp>1787228760000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>show only open tickets
</comment><date>2026-08-20 14:26:00 +0200</date><id>b7147bc395fb1e0d0bed2dcbea1fb58fb7751ed6</id><msg>show only open tickets</msg><path><editType>edit</editType><file>server/api/commission/open-tickets.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.env</affectedPath><affectedPath>app/utils/purchaseOrderReport.ts</affectedPath><affectedPath>app/pages/procurements/orders/[id]/edit.vue</affectedPath><affectedPath>app/components/procurements/OrderDetailRecordLine.vue</affectedPath><commitId>5dad62bd5a1d80f4466f4f9e56b5738a77b9110a</commitId><timestamp>1787239988000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix wareneingang report
</comment><date>2026-08-20 17:33:08 +0200</date><id>5dad62bd5a1d80f4466f4f9e56b5738a77b9110a</id><msg>fix wareneingang report</msg><path><editType>edit</editType><file>app/components/procurements/OrderDetailRecordLine.vue</file></path><path><editType>add</editType><file>app/utils/purchaseOrderReport.ts</file></path><path><editType>edit</editType><file>app/pages/procurements/orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>.env</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/receive.vue</affectedPath><commitId>afe7eeb2c13652f8e4b6eaf31364ffacd92d33ab</commitId><timestamp>1787242363000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add mobile po full complete option
</comment><date>2026-08-20 18:12:43 +0200</date><id>afe7eeb2c13652f8e4b6eaf31364ffacd92d33ab</id><msg>add mobile po full complete option</msg><path><editType>edit</editType><file>app/pages/mobile/receive.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>711</buildNumber><marked><SHA1>07ea2164c855d3ec0a4a2c0184b0f3c615ed70a1</SHA1><branch><SHA1>07ea2164c855d3ec0a4a2c0184b0f3c615ed70a1</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>07ea2164c855d3ec0a4a2c0184b0f3c615ed70a1</SHA1><branch><SHA1>07ea2164c855d3ec0a4a2c0184b0f3c615ed70a1</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>07ea2164c855d3ec0a4a2c0184b0f3c615ed70a1</SHA1><branch><SHA1>07ea2164c855d3ec0a4a2c0184b0f3c615ed70a1</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'></action><building>false</building><displayName>#711</displayName><duration>58283</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #711</fullDisplayName><id>711</id><inProgress>false</inProgress><keepLog>false</keepLog><number>711</number><queueId>5567</queueId><result>SUCCESS</result><timestamp>1787184000272</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/711/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/components/requests/RequestForm.vue</affectedPath><commitId>2e2edec62005a6dc899215a9fac95282a81df5f8</commitId><timestamp>1787127988000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix ticket view
</comment><date>2026-08-19 10:26:28 +0200</date><id>2e2edec62005a6dc899215a9fac95282a81df5f8</id><msg>fix ticket view</msg><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/components/requests/RequestForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/ProductSearchSelect.vue</affectedPath><affectedPath>app/components/ProductChooser.vue</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/components/sales/OrderPositionsTable.vue</affectedPath><commitId>1bc63f3aab0851cc31980f23714b4eb104c02b6c</commitId><timestamp>1787133624000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fixes bom
</comment><date>2026-08-19 12:00:24 +0200</date><id>1bc63f3aab0851cc31980f23714b4eb104c02b6c</id><msg>fixes bom</msg><path><editType>edit</editType><file>app/components/ProductChooser.vue</file></path><path><editType>edit</editType><file>app/components/sales/OrderPositionsTable.vue</file></path><path><editType>edit</editType><file>app/components/ProductSearchSelect.vue</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/manufacturings/bom-productions/index.get.ts</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/pages/manufacturings/bom-productions/index.vue</affectedPath><affectedPath>app/components/dashboard/TicketQuickModal.vue</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>app/components/sales/RelabelLabelPrintModal.vue</affectedPath><affectedPath>app/pages/integrations/tasks-desktop.vue</affectedPath><affectedPath>app/pages/requests/requests/create.vue</affectedPath><affectedPath>server/api/manufacturings/bom-productions/[id].get.ts</affectedPath><affectedPath>app/pages/requests/my-tickets/create.vue</affectedPath><affectedPath>app/components/requests/RequestForm.vue</affectedPath><commitId>6ec0a3fde9db67c5ff96bed26ec694319d56ca62</commitId><timestamp>1787139266000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix
</comment><date>2026-08-19 13:34:26 +0200</date><id>6ec0a3fde9db67c5ff96bed26ec694319d56ca62</id><msg>fix</msg><path><editType>edit</editType><file>app/components/requests/RequestForm.vue</file></path><path><editType>edit</editType><file>app/components/dashboard/TicketQuickModal.vue</file></path><path><editType>edit</editType><file>app/pages/manufacturings/bom-productions/index.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>edit</editType><file>server/api/manufacturings/bom-productions/index.get.ts</file></path><path><editType>edit</editType><file>app/pages/requests/my-tickets/create.vue</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/components/sales/RelabelLabelPrintModal.vue</file></path><path><editType>edit</editType><file>app/pages/requests/requests/create.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/tasks-desktop.vue</file></path><path><editType>edit</editType><file>server/api/manufacturings/bom-productions/[id].get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/requests/requests/[id]/edit.vue</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/components/requests/RequestForm.vue</affectedPath><affectedPath>app/composables/useRequestReportPdf.ts</affectedPath><commitId>029ec16f0abddb4459384bacf6d5a04ed4c95960</commitId><timestamp>1787142843000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix merchant tickets
</comment><date>2026-08-19 14:34:03 +0200</date><id>029ec16f0abddb4459384bacf6d5a04ed4c95960</id><msg>fix merchant tickets</msg><path><editType>edit</editType><file>app/components/requests/RequestForm.vue</file></path><path><editType>edit</editType><file>app/composables/useRequestReportPdf.ts</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/pages/requests/requests/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/pages/requests/my-tickets/create.vue</affectedPath><affectedPath>app/components/requests/RequestForm.vue</affectedPath><affectedPath>server/api/admin/users/[id]/org-companyname.get.ts</affectedPath><commitId>e5577cbe0af950979db99aae28bd71caa378eef0</commitId><timestamp>1787151085000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix tickets
</comment><date>2026-08-19 16:51:25 +0200</date><id>e5577cbe0af950979db99aae28bd71caa378eef0</id><msg>fix tickets</msg><path><editType>edit</editType><file>server/api/admin/users/[id]/org-companyname.get.ts</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/components/requests/RequestForm.vue</file></path><path><editType>edit</editType><file>app/pages/requests/my-tickets/create.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>app/components/sales/OrderPositionsTable.vue</affectedPath><commitId>59730441ee342da2186898632bafdac94968e401</commitId><timestamp>1787152480000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix description saving
</comment><date>2026-08-19 17:14:40 +0200</date><id>59730441ee342da2186898632bafdac94968e401</id><msg>fix description saving</msg><path><editType>edit</editType><file>app/components/sales/OrderPositionsTable.vue</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/pages/requests/my-tickets/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>d56e125754e006469fe5ab3f59a4e9b4c1696d7c</commitId><timestamp>1787155355000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix ticket
</comment><date>2026-08-19 18:02:35 +0200</date><id>d56e125754e006469fe5ab3f59a4e9b4c1696d7c</id><msg>fix ticket</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/pages/requests/my-tickets/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><commitId>9cf0f8d2d2325e6adf5625e851ce45292af473ff</commitId><timestamp>1787156806000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix ticket
</comment><date>2026-08-19 18:26:46 +0200</date><id>9cf0f8d2d2325e6adf5625e851ce45292af473ff</id><msg>fix ticket</msg><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>server/api/admin/users/[id]/org-companyname.get.ts</affectedPath><commitId>209ba4ed51422baa02a84f41d7a48dae19326ac4</commitId><timestamp>1787160813000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix ticketname
</comment><date>2026-08-19 19:33:33 +0200</date><id>209ba4ed51422baa02a84f41d7a48dae19326ac4</id><msg>fix ticketname</msg><path><editType>edit</editType><file>server/api/admin/users/[id]/org-companyname.get.ts</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/requests/my-tickets/index.vue</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><commitId>d62d9899a9a9e7563cd9390a068afc5b1fd83626</commitId><timestamp>1787171815000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix ticket
</comment><date>2026-08-19 22:36:55 +0200</date><id>d62d9899a9a9e7563cd9390a068afc5b1fd83626</id><msg>fix ticket</msg><path><editType>edit</editType><file>app/pages/requests/my-tickets/index.vue</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/requests/my-tickets/index.vue</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>server/api/admin/users/[id]/org-companyname.get.ts</affectedPath><commitId>c0a82558e260101f138a1e906bc13fe85a96d951</commitId><timestamp>1787173149000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix ticket
</comment><date>2026-08-19 22:59:09 +0200</date><id>c0a82558e260101f138a1e906bc13fe85a96d951</id><msg>fix ticket</msg><path><editType>edit</editType><file>app/pages/requests/my-tickets/index.vue</file></path><path><editType>edit</editType><file>server/api/admin/users/[id]/org-companyname.get.ts</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><commitId>07ea2164c855d3ec0a4a2c0184b0f3c615ed70a1</commitId><timestamp>1787174431000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix ticket
</comment><date>2026-08-19 23:20:31 +0200</date><id>07ea2164c855d3ec0a4a2c0184b0f3c615ed70a1</id><msg>fix ticket</msg><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>710</buildNumber><marked><SHA1>90921cce1b648dd8fa45944a4331f046f62c88a9</SHA1><branch><SHA1>90921cce1b648dd8fa45944a4331f046f62c88a9</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>90921cce1b648dd8fa45944a4331f046f62c88a9</SHA1><branch><SHA1>90921cce1b648dd8fa45944a4331f046f62c88a9</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>90921cce1b648dd8fa45944a4331f046f62c88a9</SHA1><branch><SHA1>90921cce1b648dd8fa45944a4331f046f62c88a9</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'></action><building>false</building><displayName>#710</displayName><duration>56714</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #710</fullDisplayName><id>710</id><inProgress>false</inProgress><keepLog>false</keepLog><number>710</number><queueId>5554</queueId><result>SUCCESS</result><timestamp>1787097600272</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/710/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/requests/requests/update.put.ts</affectedPath><affectedPath>app/pages/requests/my-tickets/index.vue</affectedPath><affectedPath>server/api/requests/requests/store.post.ts</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/components/dashboard/TicketQuickModal.vue</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><affectedPath>app/pages/requests/requests/create.vue</affectedPath><affectedPath>app/pages/requests/my-tickets/create.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>e6d829a765e5dfd564863ff1f92af9c8a377cdba</commitId><timestamp>1787042132000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>style ticket
</comment><date>2026-08-18 10:35:32 +0200</date><id>e6d829a765e5dfd564863ff1f92af9c8a377cdba</id><msg>style ticket</msg><path><editType>edit</editType><file>app/pages/requests/my-tickets/create.vue</file></path><path><editType>edit</editType><file>app/pages/requests/my-tickets/index.vue</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>edit</editType><file>app/components/dashboard/TicketQuickModal.vue</file></path><path><editType>edit</editType><file>server/api/requests/requests/store.post.ts</file></path><path><editType>edit</editType><file>app/pages/requests/requests/create.vue</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>edit</editType><file>server/api/requests/requests/update.put.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/requests/requests/[id]/edit.vue</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><commitId>83710de5bf9f526c46b2af98bccf2c13236cb731</commitId><timestamp>1787043965000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>style buttons
</comment><date>2026-08-18 11:06:05 +0200</date><id>83710de5bf9f526c46b2af98bccf2c13236cb731</id><msg>style buttons</msg><path><editType>edit</editType><file>app/pages/requests/requests/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><commitId>1805a139fe3fa1d00399887735d4af7155f7a1de</commitId><timestamp>1787051611000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix ticket
</comment><date>2026-08-18 13:13:31 +0200</date><id>1805a139fe3fa1d00399887735d4af7155f7a1de</id><msg>fix ticket</msg><path><editType>edit</editType><file>app/components/requests/MyTicketDetail.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/admin/users/leads/latest.get.ts</affectedPath><affectedPath>server/api/commission/parcels/contents.post.ts</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/components/materials/ProductDetailRecordBom.vue</affectedPath><affectedPath>server/api/materials/products/[id]/bom-components/index.get.ts</affectedPath><affectedPath>app/components/materials/ProductDetailRecordComponents.vue</affectedPath><affectedPath>app/pages/integrations/commission.vue</affectedPath><affectedPath>app/components/sales/OrderPositionsTable.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>2e7392f74ab805862a4390c275d7c8efae7acc42</commitId><timestamp>1787060146000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>leads to dashboard and show deliverd qty on position
</comment><date>2026-08-18 15:35:46 +0200</date><id>2e7392f74ab805862a4390c275d7c8efae7acc42</id><msg>leads to dashboard and show deliverd qty on position</msg><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordComponents.vue</file></path><path><editType>edit</editType><file>app/components/sales/OrderPositionsTable.vue</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path><path><editType>edit</editType><file>server/api/materials/products/[id]/bom-components/index.get.ts</file></path><path><editType>edit</editType><file>server/api/commission/parcels/contents.post.ts</file></path><path><editType>edit</editType><file>app/components/materials/ProductDetailRecordBom.vue</file></path><path><editType>add</editType><file>server/api/admin/users/leads/latest.get.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/index.vue</affectedPath><commitId>90921cce1b648dd8fa45944a4331f046f62c88a9</commitId><timestamp>1787061013000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>change lead path
</comment><date>2026-08-18 15:50:13 +0200</date><id>90921cce1b648dd8fa45944a4331f046f62c88a9</id><msg>change lead path</msg><path><editType>edit</editType><file>app/pages/index.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>709</buildNumber><marked><SHA1>21e1c2ba55dcd6338429fbd667624a0ed84e6cdf</SHA1><branch><SHA1>21e1c2ba55dcd6338429fbd667624a0ed84e6cdf</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>21e1c2ba55dcd6338429fbd667624a0ed84e6cdf</SHA1><branch><SHA1>21e1c2ba55dcd6338429fbd667624a0ed84e6cdf</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>21e1c2ba55dcd6338429fbd667624a0ed84e6cdf</SHA1><branch><SHA1>21e1c2ba55dcd6338429fbd667624a0ed84e6cdf</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'></action><building>false</building><displayName>#709</displayName><duration>59482</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #709</fullDisplayName><id>709</id><inProgress>false</inProgress><keepLog>false</keepLog><number>709</number><queueId>5549</queueId><result>SUCCESS</result><timestamp>1787011200274</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/709/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/requests/my-tickets/[id].vue</affectedPath><affectedPath>app/components/requests/MyTicketDetail.vue</affectedPath><affectedPath>app/pages/requests/my-tickets/index.vue</affectedPath><affectedPath>reference/recipes.md</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>789bc780cbcb9962bc231495a51ecfe80babaf5d</commitId><timestamp>1786956142000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add a new method how to work with tickets mast detail view2
</comment><date>2026-08-17 10:42:22 +0200</date><id>789bc780cbcb9962bc231495a51ecfe80babaf5d</id><msg>add a new method how to work with tickets mast detail view2</msg><path><editType>edit</editType><file>app/pages/requests/my-tickets/[id].vue</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>app/components/requests/MyTicketDetail.vue</file></path><path><editType>edit</editType><file>app/pages/requests/my-tickets/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/requests/my-tickets/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>8fe081f30345e4977d62face45d977d601d8c7a2</commitId><timestamp>1786957969000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>change ticket overview
</comment><date>2026-08-17 11:12:49 +0200</date><id>8fe081f30345e4977d62face45d977d601d8c7a2</id><msg>change ticket overview</msg><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/requests/my-tickets/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounts/company-profile.get.ts</affectedPath><affectedPath>server/utils/emailVerification.ts</affectedPath><affectedPath>server/utils/merchantPartner.ts</affectedPath><affectedPath>app/components/dashboard/ProfileForm.vue</affectedPath><affectedPath>server/api/email-verification/confirm.post.ts</affectedPath><affectedPath>app/components/dashboard/ProfileBilling.vue</affectedPath><affectedPath>server/api/accounts/company-profile.put.ts</affectedPath><affectedPath>server/api/accounts/company-profile/cancel-pending.post.ts</affectedPath><affectedPath>app/pages/verify-email.vue</affectedPath><affectedPath>app/pages/users/profile/index.vue</affectedPath><affectedPath>server/utils/emailVerifyDb.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>ac5a1dfc66d0e94ed723dc8205660bd172698217</commitId><timestamp>1786964027000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>give user option to modify emails in account
</comment><date>2026-08-17 12:53:47 +0200</date><id>ac5a1dfc66d0e94ed723dc8205660bd172698217</id><msg>give user option to modify emails in account</msg><path><editType>edit</editType><file>server/api/accounts/company-profile.put.ts</file></path><path><editType>add</editType><file>server/api/accounts/company-profile/cancel-pending.post.ts</file></path><path><editType>edit</editType><file>app/components/dashboard/ProfileForm.vue</file></path><path><editType>add</editType><file>server/utils/emailVerifyDb.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/api/email-verification/confirm.post.ts</file></path><path><editType>edit</editType><file>app/components/dashboard/ProfileBilling.vue</file></path><path><editType>edit</editType><file>app/pages/users/profile/index.vue</file></path><path><editType>edit</editType><file>server/utils/merchantPartner.ts</file></path><path><editType>add</editType><file>server/utils/emailVerification.ts</file></path><path><editType>add</editType><file>app/pages/verify-email.vue</file></path><path><editType>edit</editType><file>server/api/accounts/company-profile.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.env-dev</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>server/api/webhooks/landing-leads.options.ts</affectedPath><affectedPath>server/api/webhooks/landing-leads.post.ts</affectedPath><affectedPath>server/utils/landingLeadCors.ts</affectedPath><affectedPath>.env</affectedPath><affectedPath>.env-prod</affectedPath><commitId>d9bd5ab26d83d263841798ee658178f99c386124</commitId><timestamp>1786975201000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add receiver for submission from new page
</comment><date>2026-08-17 16:00:01 +0200</date><id>d9bd5ab26d83d263841798ee658178f99c386124</id><msg>add receiver for submission from new page</msg><path><editType>add</editType><file>server/api/webhooks/landing-leads.options.ts</file></path><path><editType>edit</editType><file>.env-dev</file></path><path><editType>add</editType><file>server/api/webhooks/landing-leads.post.ts</file></path><path><editType>add</editType><file>server/utils/landingLeadCors.ts</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>.env-prod</file></path><path><editType>edit</editType><file>.env</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/landingLeadCors.ts</affectedPath><commitId>f596ccf6eb91a4272ee55baf7452d8f6cd3a5d90</commitId><timestamp>1786981208000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>landing-leads CORS: allow any *.younex.de origin (PaaS system domains)

deploy.younex.de (dotnews-paas) gives every project a system domain shaped
like &lt;app&gt;-&lt;8 hex&gt;.younex.de, always live even before a custom domain is
attached — pre-launch/staging deploys of the landing page live there and
need the lead-intake CORS check to pass too. Wildcard regex added alongside
the exact-match production allowlist (logyou.de/www.logyou.de untouched).

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-08-17 17:40:08 +0200</date><id>f596ccf6eb91a4272ee55baf7452d8f6cd3a5d90</id><msg>landing-leads CORS: allow any *.younex.de origin (PaaS system domains)</msg><path><editType>edit</editType><file>server/utils/landingLeadCors.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.env</affectedPath><affectedPath>.env-prod</affectedPath><commitId>9c7bd39385b13d2d16cad444805eb22f3736c4a7</commitId><timestamp>1786982419000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Set real LANDING_LEAD_TOKEN in .env and .env-prod (was empty placeholder)

Matches the value now deployed as NUXT_LANDING_LEAD_TOKEN on the
logyou-landing side (server/api/lead.post.ts), which forwards lead
submissions here server-to-server instead of the browser calling this
endpoint directly — removes the CORS-allowlist dependency for that path.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-08-17 18:00:19 +0200</date><id>9c7bd39385b13d2d16cad444805eb22f3736c4a7</id><msg>Set real LANDING_LEAD_TOKEN in .env and .env-prod (was empty placeholder)</msg><path><editType>edit</editType><file>.env</file></path><path><editType>edit</editType><file>.env-prod</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/webhooks/landing-leads.post.ts</affectedPath><commitId>21e1c2ba55dcd6338429fbd667624a0ed84e6cdf</commitId><timestamp>1786982544000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>push landing leads for new logyou page
</comment><date>2026-08-17 18:02:24 +0200</date><id>21e1c2ba55dcd6338429fbd667624a0ed84e6cdf</id><msg>push landing leads for new logyou page</msg><path><editType>edit</editType><file>server/api/webhooks/landing-leads.post.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>708</buildNumber><marked><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</SHA1><branch><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</SHA1><branch><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</SHA1><branch><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</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'></action><building>false</building><displayName>#708</displayName><duration>59350</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #708</fullDisplayName><id>708</id><inProgress>false</inProgress><keepLog>false</keepLog><number>708</number><queueId>5543</queueId><result>SUCCESS</result><timestamp>1786924800273</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/708/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>707</buildNumber><marked><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</SHA1><branch><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</SHA1><branch><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</SHA1><branch><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</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'></action><building>false</building><displayName>#707</displayName><duration>57465</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #707</fullDisplayName><id>707</id><inProgress>false</inProgress><keepLog>false</keepLog><number>707</number><queueId>5542</queueId><result>SUCCESS</result><timestamp>1786838400271</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/707/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>706</buildNumber><marked><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</SHA1><branch><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</SHA1><branch><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</SHA1><branch><SHA1>5ae41a30734984355135aadf9f8c33d693b2d153</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'></action><building>false</building><displayName>#706</displayName><duration>57633</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #706</fullDisplayName><id>706</id><inProgress>false</inProgress><keepLog>false</keepLog><number>706</number><queueId>5541</queueId><result>SUCCESS</result><timestamp>1786752000273</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/706/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/shopify/products.get.ts</affectedPath><affectedPath>server/api/shopify-new/products.get.ts</affectedPath><affectedPath>app/pages/fulfillment/plentyone-stocks/index.vue</affectedPath><affectedPath>server/api/plentyone/products.get.ts</affectedPath><commitId>5ae41a30734984355135aadf9f8c33d693b2d153</commitId><timestamp>1786714665000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix plenty sync
</comment><date>2026-08-14 15:37:45 +0200</date><id>5ae41a30734984355135aadf9f8c33d693b2d153</id><msg>fix plenty sync</msg><path><editType>edit</editType><file>server/api/shopify/products.get.ts</file></path><path><editType>edit</editType><file>app/pages/fulfillment/plentyone-stocks/index.vue</file></path><path><editType>edit</editType><file>server/api/shopify-new/products.get.ts</file></path><path><editType>edit</editType><file>server/api/plentyone/products.get.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>705</buildNumber><marked><SHA1>b66a1ec6667a7e9876e49c182126b737f4d7dfb9</SHA1><branch><SHA1>b66a1ec6667a7e9876e49c182126b737f4d7dfb9</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>b66a1ec6667a7e9876e49c182126b737f4d7dfb9</SHA1><branch><SHA1>b66a1ec6667a7e9876e49c182126b737f4d7dfb9</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>b66a1ec6667a7e9876e49c182126b737f4d7dfb9</SHA1><branch><SHA1>b66a1ec6667a7e9876e49c182126b737f4d7dfb9</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'></action><building>false</building><displayName>#705</displayName><duration>63370</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #705</fullDisplayName><id>705</id><inProgress>false</inProgress><keepLog>false</keepLog><number>705</number><queueId>5539</queueId><result>SUCCESS</result><timestamp>1786665600272</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/705/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.env.backup-20260813</affectedPath><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>app/pages/requests/requests/index.vue</affectedPath><affectedPath>server/api/attachments/[table]/[id]/files.get.ts</affectedPath><affectedPath>.env</affectedPath><affectedPath>server/api/attachments/[table]/[id]/processed.put.ts</affectedPath><affectedPath>app/components/requests/RequestForm.vue</affectedPath><commitId>42a9a5603a092ea96cec9120f02799429675b25a</commitId><timestamp>1786606462000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>show coloring of tickets completed
</comment><date>2026-08-13 09:34:22 +0200</date><id>42a9a5603a092ea96cec9120f02799429675b25a</id><msg>show coloring of tickets completed</msg><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>.env</file></path><path><editType>add</editType><file>.env.backup-20260813</file></path><path><editType>edit</editType><file>app/components/requests/RequestForm.vue</file></path><path><editType>edit</editType><file>server/api/attachments/[table]/[id]/files.get.ts</file></path><path><editType>add</editType><file>server/api/attachments/[table]/[id]/processed.put.ts</file></path><path><editType>edit</editType><file>app/pages/requests/requests/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/print/attachment-labels.post.ts</affectedPath><affectedPath>app/components/requests/RequestForm.vue</affectedPath><commitId>e938c37626994cd354a7169b296d979a9b0094be</commitId><timestamp>1786622324000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add label printer selection
</comment><date>2026-08-13 13:58:44 +0200</date><id>e938c37626994cd354a7169b296d979a9b0094be</id><msg>add label printer selection</msg><path><editType>edit</editType><file>server/api/print/attachment-labels.post.ts</file></path><path><editType>edit</editType><file>app/components/requests/RequestForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/commission.vue</affectedPath><affectedPath>server/api/commission/open-tickets.get.ts</affectedPath><commitId>d55793c11a1f58b043220779ddfce30b985d2fcc</commitId><timestamp>1786633956000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Add ticket popup on commission if exists
</comment><date>2026-08-13 17:12:36 +0200</date><id>d55793c11a1f58b043220779ddfce30b985d2fcc</id><msg>Add ticket popup on commission if exists</msg><path><editType>add</editType><file>server/api/commission/open-tickets.get.ts</file></path><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>dbd8515d9a72c5a8f83fce8f639e435b8f80cc27</commitId><timestamp>1786634657000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add more configs for offer
</comment><date>2026-08-13 17:24:17 +0200</date><id>dbd8515d9a72c5a8f83fce8f639e435b8f80cc27</id><msg>add more configs for offer</msg><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/procurements/OrderDetailRecordLine.vue</affectedPath><commitId>f3b1dad761558573d465f51248c09c80b5920820</commitId><timestamp>1786636476000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add report for warenanmeldung
</comment><date>2026-08-13 17:54:36 +0200</date><id>f3b1dad761558573d465f51248c09c80b5920820</id><msg>add report for warenanmeldung</msg><path><editType>edit</editType><file>app/components/procurements/OrderDetailRecordLine.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/offers/quotePdf.ts</affectedPath><affectedPath>server/api/offers/contract/send.post.ts</affectedPath><affectedPath>app/pages/fulfillment/merchant-onboarding/index.vue</affectedPath><affectedPath>app/components/offers/QuoteModal.vue</affectedPath><affectedPath>app/composables/useOfferQuote.ts</affectedPath><affectedPath>server/api/admin/merchant-onboarding/process.post.ts</affectedPath><affectedPath>server/api/offers/conditions/index.get.ts</affectedPath><affectedPath>app/composables/useOfferContract.ts</affectedPath><affectedPath>server/utils/offers/offerConditions.ts</affectedPath><affectedPath>app/components/offers/ContractModal.vue</affectedPath><affectedPath>app/pages/users/leads/[id]/edit.vue</affectedPath><affectedPath>server/api/offers/quote/send.post.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>b66a1ec6667a7e9876e49c182126b737f4d7dfb9</commitId><timestamp>1786655768000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>optimize quote system for leads
</comment><date>2026-08-13 23:16:08 +0200</date><id>b66a1ec6667a7e9876e49c182126b737f4d7dfb9</id><msg>optimize quote system for leads</msg><path><editType>edit</editType><file>app/components/offers/ContractModal.vue</file></path><path><editType>add</editType><file>server/api/offers/conditions/index.get.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferContract.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferQuote.ts</file></path><path><editType>edit</editType><file>app/pages/fulfillment/merchant-onboarding/index.vue</file></path><path><editType>edit</editType><file>server/api/offers/contract/send.post.ts</file></path><path><editType>add</editType><file>server/utils/offers/offerConditions.ts</file></path><path><editType>edit</editType><file>server/api/offers/quote/send.post.ts</file></path><path><editType>edit</editType><file>app/components/offers/QuoteModal.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/[id]/edit.vue</file></path><path><editType>edit</editType><file>server/api/admin/merchant-onboarding/process.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>server/utils/offers/quotePdf.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>704</buildNumber><marked><SHA1>0b4ddbbefcecd9e0e24af31c4bd86265bb5ade92</SHA1><branch><SHA1>0b4ddbbefcecd9e0e24af31c4bd86265bb5ade92</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>0b4ddbbefcecd9e0e24af31c4bd86265bb5ade92</SHA1><branch><SHA1>0b4ddbbefcecd9e0e24af31c4bd86265bb5ade92</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>0b4ddbbefcecd9e0e24af31c4bd86265bb5ade92</SHA1><branch><SHA1>0b4ddbbefcecd9e0e24af31c4bd86265bb5ade92</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'></action><building>false</building><displayName>#704</displayName><duration>65223</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #704</fullDisplayName><id>704</id><inProgress>false</inProgress><keepLog>false</keepLog><number>704</number><queueId>5533</queueId><result>SUCCESS</result><timestamp>1786579200272</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/704/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/settings/OrderSourceForm.vue</affectedPath><affectedPath>app/pages/settings/order-sources/[id]/edit.vue</affectedPath><affectedPath>app/pages/settings/order-sources/create.vue</affectedPath><affectedPath>server/api/settings/order-sources/update.put.ts</affectedPath><affectedPath>server/api/settings/order-sources/store.post.ts</affectedPath><affectedPath>app/pages/settings/order-sources/[id]/view.vue</affectedPath><commitId>1c751ce9cb7d2d101ae800dc52a91dcbe24c7d5c</commitId><timestamp>1786533742000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add shopify mail notification control to ordersource
</comment><date>2026-08-12 13:22:22 +0200</date><id>1c751ce9cb7d2d101ae800dc52a91dcbe24c7d5c</id><msg>add shopify mail notification control to ordersource</msg><path><editType>edit</editType><file>server/api/settings/order-sources/store.post.ts</file></path><path><editType>edit</editType><file>app/pages/settings/order-sources/[id]/view.vue</file></path><path><editType>edit</editType><file>app/components/settings/OrderSourceForm.vue</file></path><path><editType>edit</editType><file>server/api/settings/order-sources/update.put.ts</file></path><path><editType>edit</editType><file>app/pages/settings/order-sources/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/settings/order-sources/create.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/print/relabel-labels.post.ts</affectedPath><affectedPath>app/components/sales/RelabelLabelPrintModal.vue</affectedPath><affectedPath>reference/recipes.md</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>4798f5c28a981260e4b812c2cd6550c2bda27709</commitId><timestamp>1786538466000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add blank on fba relable printing
</comment><date>2026-08-12 14:41:06 +0200</date><id>4798f5c28a981260e4b812c2cd6550c2bda27709</id><msg>add blank on fba relable printing</msg><path><editType>edit</editType><file>server/api/print/relabel-labels.post.ts</file></path><path><editType>edit</editType><file>app/components/sales/RelabelLabelPrintModal.vue</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/composables/useRelabelDocs.ts</affectedPath><commitId>da432e35e6b96d7a07979bf4c8173be9bce7e83c</commitId><timestamp>1786540520000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix relabel fba sequence to take it from shipment
</comment><date>2026-08-12 15:15:20 +0200</date><id>da432e35e6b96d7a07979bf4c8173be9bce7e83c</id><msg>fix relabel fba sequence to take it from shipment</msg><path><editType>edit</editType><file>app/composables/useRelabelDocs.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/orders/[id]/requests.get.ts</affectedPath><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><commitId>775e4157cb07378396fe2f972e3a8c6b76f380b3</commitId><timestamp>1786563263000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add tickets to order if exists
</comment><date>2026-08-12 21:34:23 +0200</date><id>775e4157cb07378396fe2f972e3a8c6b76f380b3</id><msg>add tickets to order if exists</msg><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path><path><editType>add</editType><file>server/api/orders/[id]/requests.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/FBA15M4V5Y67-1786525009322_Paket 22.pdf</affectedPath><affectedPath>app/utils/labelPdfTools.ts</affectedPath><affectedPath>app/components/requests/RequestForm.vue</affectedPath><commitId>cb52e42894ccf9cb3e3da6157dfb900c70da851d</commitId><timestamp>1786564430000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add printing of labels splitting fba
</comment><date>2026-08-12 21:53:50 +0200</date><id>cb52e42894ccf9cb3e3da6157dfb900c70da851d</id><msg>add printing of labels splitting fba</msg><path><editType>edit</editType><file>app/components/requests/RequestForm.vue</file></path><path><editType>add</editType><file>reference/FBA15M4V5Y67-1786525009322_Paket 22.pdf</file></path><path><editType>add</editType><file>app/utils/labelPdfTools.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/commission.vue</affectedPath><affectedPath>app/composables/useRelabelDocs.ts</affectedPath><affectedPath>app/components/integrations/CommissionPacklistConfirmModal.vue</affectedPath><commitId>aaf8bab76dec99bd73269bca8aa3888fadf8f66d</commitId><timestamp>1786565483000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add adaption to commission for fba relabel with custom enter of weight and paket number
</comment><date>2026-08-12 22:11:23 +0200</date><id>aaf8bab76dec99bd73269bca8aa3888fadf8f66d</id><msg>add adaption to commission for fba relabel with custom enter of weight and paket number</msg><path><editType>edit</editType><file>app/composables/useRelabelDocs.ts</file></path><path><editType>add</editType><file>app/components/integrations/CommissionPacklistConfirmModal.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/commission.vue</affectedPath><affectedPath>app/composables/useRelabelDocs.ts</affectedPath><affectedPath>app/components/requests/RequestForm.vue</affectedPath><commitId>625b92737f681cff020e7fbe474f9e41d0313077</commitId><timestamp>1786569529000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix fba relable report
</comment><date>2026-08-12 23:18:49 +0200</date><id>625b92737f681cff020e7fbe474f9e41d0313077</id><msg>fix fba relable report</msg><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path><path><editType>edit</editType><file>app/composables/useRelabelDocs.ts</file></path><path><editType>edit</editType><file>app/components/requests/RequestForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>package-lock.json</affectedPath><affectedPath>package.json</affectedPath><commitId>42b0960ab58fa742fdbb595ede2c9ed52a9cf536</commitId><timestamp>1786570244000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix ffmpeg build issue
</comment><date>2026-08-12 23:30:44 +0200</date><id>42b0960ab58fa742fdbb595ede2c9ed52a9cf536</id><msg>fix ffmpeg build issue</msg><path><editType>edit</editType><file>package-lock.json</file></path><path><editType>edit</editType><file>package.json</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/commission.vue</affectedPath><commitId>ef100e774446f6531470dc9b4cdfb87ee7a574ce</commitId><timestamp>1786571370000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>make scrollable the commission window
</comment><date>2026-08-12 23:49:30 +0200</date><id>ef100e774446f6531470dc9b4cdfb87ee7a574ce</id><msg>make scrollable the commission window</msg><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/commission.vue</affectedPath><commitId>c2c44d2beacfe84b94401fb593aca9c252812649</commitId><timestamp>1786572332000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>make scrollable the commission window
</comment><date>2026-08-13 00:05:32 +0200</date><id>c2c44d2beacfe84b94401fb593aca9c252812649</id><msg>make scrollable the commission window</msg><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/settings/JtlBomSyncModal.vue</affectedPath><affectedPath>app/components/settings/JtlSelectiveUpdateModal.vue</affectedPath><affectedPath>app/components/requests/RequestForm.vue</affectedPath><commitId>0b4ddbbefcecd9e0e24af31c4bd86265bb5ade92</commitId><timestamp>1786575764000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add jtl optinal bom sync
</comment><date>2026-08-13 01:02:44 +0200</date><id>0b4ddbbefcecd9e0e24af31c4bd86265bb5ade92</id><msg>add jtl optinal bom sync</msg><path><editType>edit</editType><file>app/components/requests/RequestForm.vue</file></path><path><editType>edit</editType><file>app/components/settings/JtlBomSyncModal.vue</file></path><path><editType>edit</editType><file>app/components/settings/JtlSelectiveUpdateModal.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>703</buildNumber><marked><SHA1>880fbdfba25763573a4aa2fdfdadb1cf98c2e269</SHA1><branch><SHA1>880fbdfba25763573a4aa2fdfdadb1cf98c2e269</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>880fbdfba25763573a4aa2fdfdadb1cf98c2e269</SHA1><branch><SHA1>880fbdfba25763573a4aa2fdfdadb1cf98c2e269</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>880fbdfba25763573a4aa2fdfdadb1cf98c2e269</SHA1><branch><SHA1>880fbdfba25763573a4aa2fdfdadb1cf98c2e269</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'></action><building>false</building><displayName>#703</displayName><duration>66069</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #703</fullDisplayName><id>703</id><inProgress>false</inProgress><keepLog>false</keepLog><number>703</number><queueId>5523</queueId><result>SUCCESS</result><timestamp>1786492800140</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/703/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/accounting/bank-reconciliation/[id]/document-action.post.ts</affectedPath><affectedPath>app/components/accounting/BankLineMatchModal.vue</affectedPath><affectedPath>server/utils/bankReconciliation.ts</affectedPath><affectedPath>server/api/accounting/bank-reconciliation/[id]/suggestions.get.ts</affectedPath><affectedPath>server/api/accounting/bank-reconciliation/[id]/lines.get.ts</affectedPath><affectedPath>server/api/accounting/bank-reconciliation/lines/[lineId]/match-invoice.post.ts</affectedPath><affectedPath>server/api/accounting/bank-reconciliation/unreconciled-payments.get.ts</affectedPath><affectedPath>server/api/accounting/bank-reconciliation/lines/[lineId]/index.put.ts</affectedPath><affectedPath>app/pages/accounting/bank-reconciliation/index.vue</affectedPath><affectedPath>server/api/accounting/bank-reconciliation/statements.get.ts</affectedPath><affectedPath>app/composables/menu/admin/accounting.ts</affectedPath><affectedPath>app/pages/accounting/bank-transactions/index.vue</affectedPath><commitId>d940ac2f31e7c224029cb9786d89651a80a07f1b</commitId><timestamp>1786445911000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add import for ebic
</comment><date>2026-08-11 12:58:31 +0200</date><id>d940ac2f31e7c224029cb9786d89651a80a07f1b</id><msg>add import for ebic</msg><path><editType>edit</editType><file>app/pages/accounting/bank-transactions/index.vue</file></path><path><editType>add</editType><file>server/api/accounting/bank-reconciliation/statements.get.ts</file></path><path><editType>add</editType><file>server/api/accounting/bank-reconciliation/lines/[lineId]/index.put.ts</file></path><path><editType>add</editType><file>server/utils/bankReconciliation.ts</file></path><path><editType>edit</editType><file>app/composables/menu/admin/accounting.ts</file></path><path><editType>add</editType><file>server/api/accounting/bank-reconciliation/[id]/document-action.post.ts</file></path><path><editType>add</editType><file>server/api/accounting/bank-reconciliation/[id]/suggestions.get.ts</file></path><path><editType>add</editType><file>server/api/accounting/bank-reconciliation/[id]/lines.get.ts</file></path><path><editType>add</editType><file>server/api/accounting/bank-reconciliation/unreconciled-payments.get.ts</file></path><path><editType>add</editType><file>app/pages/accounting/bank-reconciliation/index.vue</file></path><path><editType>add</editType><file>server/api/accounting/bank-reconciliation/lines/[lineId]/match-invoice.post.ts</file></path><path><editType>add</editType><file>app/components/accounting/BankLineMatchModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>package.json</affectedPath><affectedPath>server/api/attachments/[table]/[id]/download-all.get.ts</affectedPath><affectedPath>app/components/requests/RequestForm.vue</affectedPath><affectedPath>package-lock.json</affectedPath><commitId>e48c78163015e941243402566ff07b3e6053ddf2</commitId><timestamp>1786453182000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add amazon fba
</comment><date>2026-08-11 14:59:42 +0200</date><id>e48c78163015e941243402566ff07b3e6053ddf2</id><msg>add amazon fba</msg><path><editType>add</editType><file>server/api/attachments/[table]/[id]/download-all.get.ts</file></path><path><editType>edit</editType><file>package-lock.json</file></path><path><editType>edit</editType><file>package.json</file></path><path><editType>edit</editType><file>app/components/requests/RequestForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/requests/requests/[id]/edit.vue</affectedPath><affectedPath>app/pages/bi/locator-usage.vue</affectedPath><affectedPath>app/composables/useRequestReportPdf.ts</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><commitId>880fbdfba25763573a4aa2fdfdadb1cf98c2e269</commitId><timestamp>1786455974000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add reports
</comment><date>2026-08-11 15:46:14 +0200</date><id>880fbdfba25763573a4aa2fdfdadb1cf98c2e269</id><msg>add reports</msg><path><editType>edit</editType><file>app/pages/requests/requests/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>edit</editType><file>app/pages/bi/locator-usage.vue</file></path><path><editType>add</editType><file>app/composables/useRequestReportPdf.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>702</buildNumber><marked><SHA1>68d5aaa7a06b9cd2626e30b3348881bb9f784e03</SHA1><branch><SHA1>68d5aaa7a06b9cd2626e30b3348881bb9f784e03</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>68d5aaa7a06b9cd2626e30b3348881bb9f784e03</SHA1><branch><SHA1>68d5aaa7a06b9cd2626e30b3348881bb9f784e03</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>68d5aaa7a06b9cd2626e30b3348881bb9f784e03</SHA1><branch><SHA1>68d5aaa7a06b9cd2626e30b3348881bb9f784e03</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'></action><building>false</building><displayName>#702</displayName><duration>63953</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #702</fullDisplayName><id>702</id><inProgress>false</inProgress><keepLog>false</keepLog><number>702</number><queueId>5519</queueId><result>SUCCESS</result><timestamp>1786406400140</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/702/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/receive.vue</affectedPath><affectedPath>app/pages/settings/bank-connections/[id]/edit.vue</affectedPath><affectedPath>server/api/mobile/po-open.get.ts</affectedPath><commitId>94da1c3a6e333619dcb30dfc7aef26d188c8205d</commitId><timestamp>1786356900000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fix Receive PO View
</comment><date>2026-08-10 12:15:00 +0200</date><id>94da1c3a6e333619dcb30dfc7aef26d188c8205d</id><msg>Fix Receive PO View</msg><path><editType>edit</editType><file>app/pages/mobile/receive.vue</file></path><path><editType>edit</editType><file>app/pages/settings/bank-connections/[id]/edit.vue</file></path><path><editType>edit</editType><file>server/api/mobile/po-open.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>server/api/shopify/locations.get.ts</affectedPath><affectedPath>server/api/shopify/products.get.ts</affectedPath><affectedPath>server/api/shopify-new/locations.get.ts</affectedPath><affectedPath>server/api/settings/order-sources/[id]/shopify-location.put.ts</affectedPath><affectedPath>server/api/shopify/stocks/sync.post.ts</affectedPath><affectedPath>app/pages/fulfillment/shopify-stocks/index.vue</affectedPath><affectedPath>android/update-files/history.json</affectedPath><affectedPath>server/api/shopify-new/stocks/sync.post.ts</affectedPath><affectedPath>reference/recipes.md</affectedPath><affectedPath>server/api/shopify-new/products.get.ts</affectedPath><commitId>9fbf14a6944e89f718bd8a505f22b0d62c802020</commitId><timestamp>1786358543000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fix shopify sync
</comment><date>2026-08-10 12:42:23 +0200</date><id>9fbf14a6944e89f718bd8a505f22b0d62c802020</id><msg>Fix shopify sync</msg><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>server/api/shopify-new/products.get.ts</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>add</editType><file>server/api/settings/order-sources/[id]/shopify-location.put.ts</file></path><path><editType>edit</editType><file>server/api/shopify/products.get.ts</file></path><path><editType>edit</editType><file>server/api/shopify/stocks/sync.post.ts</file></path><path><editType>edit</editType><file>server/api/shopify-new/stocks/sync.post.ts</file></path><path><editType>edit</editType><file>app/pages/fulfillment/shopify-stocks/index.vue</file></path><path><editType>add</editType><file>server/api/shopify-new/locations.get.ts</file></path><path><editType>edit</editType><file>android/update-files/history.json</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path><path><editType>add</editType><file>server/api/shopify/locations.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/manufacturings/BomProductionWorkflow.vue</affectedPath><affectedPath>app/components/AgGrid.vue</affectedPath><affectedPath>app/pages/manufacturings/product-bom/index.vue</affectedPath><affectedPath>app/pages/manufacturings/bom-productions/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>eec4b06ddf7d601952715d89f5bc27121f3ccbac</commitId><timestamp>1786363602000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>tune bom production
</comment><date>2026-08-10 14:06:42 +0200</date><id>eec4b06ddf7d601952715d89f5bc27121f3ccbac</id><msg>tune bom production</msg><path><editType>add</editType><file>app/components/manufacturings/BomProductionWorkflow.vue</file></path><path><editType>edit</editType><file>app/pages/manufacturings/product-bom/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/manufacturings/bom-productions/index.vue</file></path><path><editType>edit</editType><file>app/components/AgGrid.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/orders/index.vue</affectedPath><affectedPath>app/components/AgGridServer.vue</affectedPath><commitId>c0a3542dd31b44e532d36816a9f196138ca9c7ff</commitId><timestamp>1786365189000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Sales Order Grid keep state and open orders in new tab
</comment><date>2026-08-10 14:33:09 +0200</date><id>c0a3542dd31b44e532d36816a9f196138ca9c7ff</id><msg>Sales Order Grid keep state and open orders in new tab</msg><path><editType>edit</editType><file>app/components/AgGridServer.vue</file></path><path><editType>edit</editType><file>app/pages/sales/orders/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/orders/index.vue</affectedPath><affectedPath>app/components/AgGridServer.vue</affectedPath><commitId>771a801439b5c8a7bb2a3ad78ce6b798638763ae</commitId><timestamp>1786365454000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix state of sales order grid
</comment><date>2026-08-10 14:37:34 +0200</date><id>771a801439b5c8a7bb2a3ad78ce6b798638763ae</id><msg>fix state of sales order grid</msg><path><editType>edit</editType><file>app/pages/sales/orders/index.vue</file></path><path><editType>edit</editType><file>app/components/AgGridServer.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/print-labels-desktop.vue</affectedPath><affectedPath>app/pages/integrations/picklist-desktop.vue</affectedPath><affectedPath>app/pages/integrations/product-desktop.vue</affectedPath><affectedPath>app/pages/integrations/inventory-desktop.vue</affectedPath><affectedPath>app/app.vue</affectedPath><affectedPath>app/pages/integrations/fix-locator-owner-desktop.vue</affectedPath><affectedPath>app/pages/integrations/tasks-desktop.vue</affectedPath><affectedPath>app/pages/integrations/locator-articles-desktop.vue</affectedPath><affectedPath>app/pages/integrations/index.vue</affectedPath><affectedPath>app/pages/integrations/movement-desktop.vue</affectedPath><affectedPath>app/composables/useDesktopScanner.ts</affectedPath><affectedPath>app/pages/integrations/receive-desktop.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>f2f18062d6be35dfa5f6d47209dc2a6822fbcc27</commitId><timestamp>1786368470000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Clone and adapt all mobile pages as desktop integration apps
</comment><date>2026-08-10 15:27:50 +0200</date><id>f2f18062d6be35dfa5f6d47209dc2a6822fbcc27</id><msg>Clone and adapt all mobile pages as desktop integration apps</msg><path><editType>add</editType><file>app/pages/integrations/fix-locator-owner-desktop.vue</file></path><path><editType>add</editType><file>app/pages/integrations/print-labels-desktop.vue</file></path><path><editType>add</editType><file>app/pages/integrations/receive-desktop.vue</file></path><path><editType>add</editType><file>app/pages/integrations/locator-articles-desktop.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/index.vue</file></path><path><editType>add</editType><file>app/pages/integrations/inventory-desktop.vue</file></path><path><editType>add</editType><file>app/pages/integrations/tasks-desktop.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>app/pages/integrations/movement-desktop.vue</file></path><path><editType>add</editType><file>app/pages/integrations/picklist-desktop.vue</file></path><path><editType>add</editType><file>app/pages/integrations/product-desktop.vue</file></path><path><editType>edit</editType><file>app/app.vue</file></path><path><editType>add</editType><file>app/composables/useDesktopScanner.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/manufacturings/productions/create.vue</affectedPath><affectedPath>server/api/requests/requests/update.put.ts</affectedPath><affectedPath>app/components/manufacturings/ProductionForm.vue</affectedPath><affectedPath>server/api/requests/requests/store.post.ts</affectedPath><affectedPath>app/pages/manufacturings/bom-productions/index.vue</affectedPath><affectedPath>server/api/manufacturings/productions/store.post.ts</affectedPath><affectedPath>server/api/manufacturings/bom-productions/store.post.ts</affectedPath><affectedPath>app/pages/requests/requests/[id]/edit.vue</affectedPath><affectedPath>app/components/requests/RequestForm.vue</affectedPath><affectedPath>server/utils/productionTicket.ts</affectedPath><commitId>2f1422619268399368deeab0ac2a1467b4fefff9</commitId><timestamp>1786369192000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Add Production Ticket Integration
</comment><date>2026-08-10 15:39:52 +0200</date><id>2f1422619268399368deeab0ac2a1467b4fefff9</id><msg>Add Production Ticket Integration</msg><path><editType>edit</editType><file>app/pages/manufacturings/productions/create.vue</file></path><path><editType>add</editType><file>server/utils/productionTicket.ts</file></path><path><editType>edit</editType><file>app/pages/manufacturings/bom-productions/index.vue</file></path><path><editType>edit</editType><file>server/api/manufacturings/productions/store.post.ts</file></path><path><editType>edit</editType><file>app/components/requests/RequestForm.vue</file></path><path><editType>edit</editType><file>server/api/manufacturings/bom-productions/store.post.ts</file></path><path><editType>edit</editType><file>app/components/manufacturings/ProductionForm.vue</file></path><path><editType>edit</editType><file>server/api/requests/requests/update.put.ts</file></path><path><editType>edit</editType><file>app/pages/requests/requests/[id]/edit.vue</file></path><path><editType>edit</editType><file>server/api/requests/requests/store.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/print-labels-desktop.vue</affectedPath><affectedPath>app/pages/integrations/product-desktop.vue</affectedPath><affectedPath>app/pages/integrations/picklist-desktop.vue</affectedPath><affectedPath>app/components/AgGrid/SalesOrder/AgCustomLink.vue</affectedPath><affectedPath>app/pages/integrations/inventory-desktop.vue</affectedPath><affectedPath>app/pages/integrations/tasks-desktop.vue</affectedPath><affectedPath>app/pages/procurements/my-receipts/[id].vue</affectedPath><affectedPath>app/pages/integrations/fix-locator-owner-desktop.vue</affectedPath><affectedPath>app/pages/integrations/index.vue</affectedPath><affectedPath>app/pages/integrations/locator-articles-desktop.vue</affectedPath><affectedPath>app/pages/integrations/movement-desktop.vue</affectedPath><affectedPath>app/pages/integrations/receive-desktop.vue</affectedPath><affectedPath>server/api/mobile/product-search.post.ts</affectedPath><affectedPath>reference/recipes.md</affectedPath><commitId>68d5aaa7a06b9cd2626e30b3348881bb9f784e03</commitId><timestamp>1786374223000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>optimize desktop integration pages
</comment><date>2026-08-10 17:03:43 +0200</date><id>68d5aaa7a06b9cd2626e30b3348881bb9f784e03</id><msg>optimize desktop integration pages</msg><path><editType>edit</editType><file>app/pages/integrations/inventory-desktop.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/index.vue</file></path><path><editType>edit</editType><file>server/api/mobile/product-search.post.ts</file></path><path><editType>edit</editType><file>app/pages/integrations/product-desktop.vue</file></path><path><editType>edit</editType><file>app/components/AgGrid/SalesOrder/AgCustomLink.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/tasks-desktop.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/locator-articles-desktop.vue</file></path><path><editType>edit</editType><file>app/pages/procurements/my-receipts/[id].vue</file></path><path><editType>edit</editType><file>app/pages/integrations/fix-locator-owner-desktop.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/picklist-desktop.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/print-labels-desktop.vue</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path><path><editType>edit</editType><file>app/pages/integrations/receive-desktop.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/movement-desktop.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>701</buildNumber><marked><SHA1>c94c506f12f555ecc6fbccf84213013f4f0b11e0</SHA1><branch><SHA1>c94c506f12f555ecc6fbccf84213013f4f0b11e0</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>c94c506f12f555ecc6fbccf84213013f4f0b11e0</SHA1><branch><SHA1>c94c506f12f555ecc6fbccf84213013f4f0b11e0</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>c94c506f12f555ecc6fbccf84213013f4f0b11e0</SHA1><branch><SHA1>c94c506f12f555ecc6fbccf84213013f4f0b11e0</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'></action><building>false</building><displayName>#701</displayName><duration>69252</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #701</fullDisplayName><id>701</id><inProgress>false</inProgress><keepLog>false</keepLog><number>701</number><queueId>5516</queueId><result>SUCCESS</result><timestamp>1786320000143</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/701/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/settings/bank-connections/[id]/edit.vue</affectedPath><affectedPath>app/components/settings/BankConnectionForm.vue</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>app/pages/settings/bank-connections/create.vue</affectedPath><affectedPath>app/composables/menu/admin/settings.ts</affectedPath><affectedPath>app/components/settings/BankConnectionAction.vue</affectedPath><affectedPath>server/api/settings/bank-connections/update.put.ts</affectedPath><affectedPath>app/pages/accounting/bank-transactions/index.vue</affectedPath><affectedPath>.env-dev</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>server/api/accounting/bank-transactions/statements.get.ts</affectedPath><affectedPath>server/utils/laravelHelper.ts</affectedPath><affectedPath>server/api/settings/bank-connections/[id]/action.post.ts</affectedPath><affectedPath>.env</affectedPath><affectedPath>server/api/settings/bank-connections/store.post.ts</affectedPath><affectedPath>server/api/accounting/bank-transactions/preview-import.post.ts</affectedPath><affectedPath>server/api/accounting/bank-transactions/import.post.ts</affectedPath><affectedPath>server/api/settings/bank-connections/[id]/index.get.ts</affectedPath><affectedPath>server/api/settings/bank-connections/[id]/ini-letter.get.ts</affectedPath><affectedPath>app/pages/settings/bank-connections/index.vue</affectedPath><affectedPath>server/api/settings/bank-connections/index.get.ts</affectedPath><affectedPath>app/composables/menu/admin/accounting.ts</affectedPath><affectedPath>server/api/accounting/bank-transactions/index.get.ts</affectedPath><affectedPath>server/api/settings/bank-connections/destroy.delete.ts</affectedPath><affectedPath>.env-prod</affectedPath><commitId>c94c506f12f555ecc6fbccf84213013f4f0b11e0</commitId><timestamp>1786281398000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add ebic bank integration
</comment><date>2026-08-09 15:16:38 +0200</date><id>c94c506f12f555ecc6fbccf84213013f4f0b11e0</id><msg>add ebic bank integration</msg><path><editType>add</editType><file>server/api/settings/bank-connections/[id]/index.get.ts</file></path><path><editType>edit</editType><file>server/utils/laravelHelper.ts</file></path><path><editType>add</editType><file>server/api/settings/bank-connections/destroy.delete.ts</file></path><path><editType>edit</editType><file>.env-dev</file></path><path><editType>add</editType><file>app/components/settings/BankConnectionAction.vue</file></path><path><editType>add</editType><file>server/api/accounting/bank-transactions/import.post.ts</file></path><path><editType>add</editType><file>app/pages/settings/bank-connections/[id]/edit.vue</file></path><path><editType>add</editType><file>app/components/settings/BankConnectionForm.vue</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>add</editType><file>server/api/settings/bank-connections/[id]/action.post.ts</file></path><path><editType>add</editType><file>server/api/accounting/bank-transactions/index.get.ts</file></path><path><editType>edit</editType><file>.env-prod</file></path><path><editType>edit</editType><file>.env</file></path><path><editType>edit</editType><file>app/composables/menu/admin/accounting.ts</file></path><path><editType>add</editType><file>app/pages/settings/bank-connections/create.vue</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>add</editType><file>server/api/accounting/bank-transactions/statements.get.ts</file></path><path><editType>add</editType><file>server/api/settings/bank-connections/store.post.ts</file></path><path><editType>add</editType><file>server/api/accounting/bank-transactions/preview-import.post.ts</file></path><path><editType>add</editType><file>app/pages/accounting/bank-transactions/index.vue</file></path><path><editType>add</editType><file>server/api/settings/bank-connections/[id]/ini-letter.get.ts</file></path><path><editType>add</editType><file>app/pages/settings/bank-connections/index.vue</file></path><path><editType>edit</editType><file>app/composables/menu/admin/settings.ts</file></path><path><editType>add</editType><file>server/api/settings/bank-connections/update.put.ts</file></path><path><editType>add</editType><file>server/api/settings/bank-connections/index.get.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>700</buildNumber><marked><SHA1>e585f3fe52424c83d0e2bfe3d98d2aae46fb6c90</SHA1><branch><SHA1>e585f3fe52424c83d0e2bfe3d98d2aae46fb6c90</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>e585f3fe52424c83d0e2bfe3d98d2aae46fb6c90</SHA1><branch><SHA1>e585f3fe52424c83d0e2bfe3d98d2aae46fb6c90</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>e585f3fe52424c83d0e2bfe3d98d2aae46fb6c90</SHA1><branch><SHA1>e585f3fe52424c83d0e2bfe3d98d2aae46fb6c90</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'></action><building>false</building><displayName>#700</displayName><duration>64784</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #700</fullDisplayName><id>700</id><inProgress>false</inProgress><keepLog>false</keepLog><number>700</number><queueId>5514</queueId><result>SUCCESS</result><timestamp>1786233600141</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/700/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>699</buildNumber><marked><SHA1>e585f3fe52424c83d0e2bfe3d98d2aae46fb6c90</SHA1><branch><SHA1>e585f3fe52424c83d0e2bfe3d98d2aae46fb6c90</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>e585f3fe52424c83d0e2bfe3d98d2aae46fb6c90</SHA1><branch><SHA1>e585f3fe52424c83d0e2bfe3d98d2aae46fb6c90</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>e585f3fe52424c83d0e2bfe3d98d2aae46fb6c90</SHA1><branch><SHA1>e585f3fe52424c83d0e2bfe3d98d2aae46fb6c90</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'></action><building>false</building><displayName>#699</displayName><duration>63063</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #699</fullDisplayName><id>699</id><inProgress>false</inProgress><keepLog>false</keepLog><number>699</number><queueId>5512</queueId><result>SUCCESS</result><timestamp>1786147200141</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/699/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/materials/PriceListVersionAction.vue</affectedPath><affectedPath>app/pages/materials/price-list-versions/[id]/edit.vue</affectedPath><affectedPath>server/api/materials/price-list-versions/[id]/generate.post.ts</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>e585f3fe52424c83d0e2bfe3d98d2aae46fb6c90</commitId><timestamp>1786110258000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add priceliste generation button
</comment><date>2026-08-07 15:44:18 +0200</date><id>e585f3fe52424c83d0e2bfe3d98d2aae46fb6c90</id><msg>add priceliste generation button</msg><path><editType>edit</editType><file>app/pages/materials/price-list-versions/[id]/edit.vue</file></path><path><editType>add</editType><file>server/api/materials/price-list-versions/[id]/generate.post.ts</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/components/materials/PriceListVersionAction.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>698</buildNumber><marked><SHA1>ea5a47f62e23489f8bcd705df4688dcf7a1b3e36</SHA1><branch><SHA1>ea5a47f62e23489f8bcd705df4688dcf7a1b3e36</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>ea5a47f62e23489f8bcd705df4688dcf7a1b3e36</SHA1><branch><SHA1>ea5a47f62e23489f8bcd705df4688dcf7a1b3e36</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>ea5a47f62e23489f8bcd705df4688dcf7a1b3e36</SHA1><branch><SHA1>ea5a47f62e23489f8bcd705df4688dcf7a1b3e36</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'></action><building>false</building><displayName>#698</displayName><duration>64954</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #698</fullDisplayName><id>698</id><inProgress>false</inProgress><keepLog>false</keepLog><number>698</number><queueId>5510</queueId><result>SUCCESS</result><timestamp>1786060800140</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/698/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/OrderForm.vue</affectedPath><commitId>e971042c3add74d0fd0de28fe2f84b4f5843facb</commitId><timestamp>1786004086000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Add edit option to sales order inline as long it is not commissioned
</comment><date>2026-08-06 10:14:46 +0200</date><id>e971042c3add74d0fd0de28fe2f84b4f5843facb</id><msg>Add edit option to sales order inline as long it is not commissioned</msg><path><editType>edit</editType><file>app/components/sales/OrderForm.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/customer-rma/index.vue</affectedPath><affectedPath>server/api/rma/so.get.ts</affectedPath><affectedPath>app/components/MainNavigationMenu.vue</affectedPath><commitId>48a34697b46c30955581a34dedc673b7f795966b</commitId><timestamp>1786004778000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>change top menu links
</comment><date>2026-08-06 10:26:18 +0200</date><id>48a34697b46c30955581a34dedc673b7f795966b</id><msg>change top menu links</msg><path><editType>edit</editType><file>app/components/MainNavigationMenu.vue</file></path><path><editType>edit</editType><file>app/pages/sales/customer-rma/index.vue</file></path><path><editType>edit</editType><file>server/api/rma/so.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/AgGrid.vue</affectedPath><affectedPath>app/pages/sales/invoices/index.vue</affectedPath><affectedPath>app/pages/requests/my-tickets/index.vue</affectedPath><affectedPath>app/pages/procurements/my-orders/[id].vue</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>8350ec78e44cd9e87a339ada0a5fdf58f2e6ca6e</commitId><timestamp>1786007339000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>tune ticketsystem
</comment><date>2026-08-06 11:08:59 +0200</date><id>8350ec78e44cd9e87a339ada0a5fdf58f2e6ca6e</id><msg>tune ticketsystem</msg><path><editType>edit</editType><file>app/components/AgGrid.vue</file></path><path><editType>edit</editType><file>app/pages/procurements/my-orders/[id].vue</file></path><path><editType>edit</editType><file>app/pages/sales/invoices/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>edit</editType><file>app/pages/requests/my-tickets/index.vue</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/settings/locations/ag-grid.put.ts</affectedPath><affectedPath>app/components/sales/OrderForm.vue</affectedPath><affectedPath>app/components/sales/RegionPickerModal.vue</affectedPath><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>server/api/settings/partner-locations/ag-grid.put.ts</affectedPath><commitId>3447cb2c08c2d9838054a0d15be4bd28f42a8fb6</commitId><timestamp>1786008832000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add state and phone to bpartner and resturcture order page
</comment><date>2026-08-06 11:33:52 +0200</date><id>3447cb2c08c2d9838054a0d15be4bd28f42a8fb6</id><msg>add state and phone to bpartner and resturcture order page</msg><path><editType>edit</editType><file>server/api/settings/locations/ag-grid.put.ts</file></path><path><editType>add</editType><file>app/components/sales/RegionPickerModal.vue</file></path><path><editType>edit</editType><file>server/api/settings/partner-locations/ag-grid.put.ts</file></path><path><editType>edit</editType><file>app/components/sales/OrderForm.vue</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/OrderForm.vue</affectedPath><affectedPath>app/pages/requests/my-tickets/index.vue</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>app/pages/sales/orders/create.vue</affectedPath><commitId>bdb329a1e7454a1902f117f32780b77339703b27</commitId><timestamp>1786010833000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>change ticketpage
</comment><date>2026-08-06 12:07:13 +0200</date><id>bdb329a1e7454a1902f117f32780b77339703b27</id><msg>change ticketpage</msg><path><editType>edit</editType><file>app/pages/index.vue</file></path><path><editType>edit</editType><file>app/pages/sales/orders/create.vue</file></path><path><editType>edit</editType><file>app/components/sales/OrderForm.vue</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/requests/my-tickets/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/index.vue</affectedPath><affectedPath>server/api/orders/po-upcoming.get.ts</affectedPath><affectedPath>app/components/dashboard/NonWorkingDaysCalendar.vue</affectedPath><commitId>20b4e4934b7d463d3efb79033c73dcc3d6db3ca5</commitId><timestamp>1786023557000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>tune tickets
</comment><date>2026-08-06 15:39:17 +0200</date><id>20b4e4934b7d463d3efb79033c73dcc3d6db3ca5</id><msg>tune tickets</msg><path><editType>edit</editType><file>server/api/orders/po-upcoming.get.ts</file></path><path><editType>edit</editType><file>app/components/dashboard/NonWorkingDaysCalendar.vue</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/dashboard/TicketQuickModal.vue</affectedPath><affectedPath>app/pages/index.vue</affectedPath><affectedPath>app/composables/states.ts</affectedPath><commitId>b0142fcbe0888d34dee4bdd495e72c3830699a11</commitId><timestamp>1786024304000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>include PO into dashboard calendar
</comment><date>2026-08-06 15:51:44 +0200</date><id>b0142fcbe0888d34dee4bdd495e72c3830699a11</id><msg>include PO into dashboard calendar</msg><path><editType>add</editType><file>app/components/dashboard/TicketQuickModal.vue</file></path><path><editType>edit</editType><file>app/composables/states.ts</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/procurements/orders/[id]/edit.vue</affectedPath><affectedPath>app/components/procurements/OrderForm.vue</affectedPath><affectedPath>server/api/orders/[id]/promised-date.put.ts</affectedPath><commitId>5335fb384cb5050cc3de733581f176ab0580d2b5</commitId><timestamp>1786036738000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix dashsboard
</comment><date>2026-08-06 19:18:58 +0200</date><id>5335fb384cb5050cc3de733581f176ab0580d2b5</id><msg>fix dashsboard</msg><path><editType>edit</editType><file>app/pages/procurements/orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/components/procurements/OrderForm.vue</file></path><path><editType>add</editType><file>server/api/orders/[id]/promised-date.put.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/manufacturings/bom-productions/index.vue</affectedPath><affectedPath>server/api/manufacturings/bom-productions/open-lines.get.ts</affectedPath><commitId>eb6ce471bda22c230df9109d45ff14fe5aac99f9</commitId><timestamp>1786041560000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add bom product printing
</comment><date>2026-08-06 20:39:20 +0200</date><id>eb6ce471bda22c230df9109d45ff14fe5aac99f9</id><msg>add bom product printing</msg><path><editType>edit</editType><file>app/pages/manufacturings/bom-productions/index.vue</file></path><path><editType>edit</editType><file>server/api/manufacturings/bom-productions/open-lines.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/manufacturings/bom-productions/index.get.ts</affectedPath><affectedPath>server/api/manufacturings/bom-productions/open-lines.get.ts</affectedPath><affectedPath>app/pages/manufacturings/bom-productions/index.vue</affectedPath><affectedPath>app/pages/index.vue</affectedPath><commitId>7e8ffaf765d78c1cc8eeed15c5e4ca5a64a15d76</commitId><timestamp>1786042248000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>enhance dashboard order
</comment><date>2026-08-06 20:50:48 +0200</date><id>7e8ffaf765d78c1cc8eeed15c5e4ca5a64a15d76</id><msg>enhance dashboard order</msg><path><editType>edit</editType><file>server/api/manufacturings/bom-productions/open-lines.get.ts</file></path><path><editType>edit</editType><file>app/pages/manufacturings/bom-productions/index.vue</file></path><path><editType>edit</editType><file>server/api/manufacturings/bom-productions/index.get.ts</file></path><path><editType>edit</editType><file>app/pages/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/manufacturings/bom-productions/index.vue</affectedPath><commitId>ea5a47f62e23489f8bcd705df4688dcf7a1b3e36</commitId><timestamp>1786043451000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add fba label printing
</comment><date>2026-08-06 21:10:51 +0200</date><id>ea5a47f62e23489f8bcd705df4688dcf7a1b3e36</id><msg>add fba label printing</msg><path><editType>edit</editType><file>app/pages/manufacturings/bom-productions/index.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>697</buildNumber><marked><SHA1>f8bf5c6c9814dda28d855cfb8a740b204e0c55b4</SHA1><branch><SHA1>f8bf5c6c9814dda28d855cfb8a740b204e0c55b4</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>f8bf5c6c9814dda28d855cfb8a740b204e0c55b4</SHA1><branch><SHA1>f8bf5c6c9814dda28d855cfb8a740b204e0c55b4</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>f8bf5c6c9814dda28d855cfb8a740b204e0c55b4</SHA1><branch><SHA1>f8bf5c6c9814dda28d855cfb8a740b204e0c55b4</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'></action><building>false</building><displayName>#697</displayName><duration>70915</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #697</fullDisplayName><id>697</id><inProgress>false</inProgress><keepLog>false</keepLog><number>697</number><queueId>5501</queueId><result>SUCCESS</result><timestamp>1785974400146</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/697/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/OrderPositionsTable.vue</affectedPath><commitId>a7868f7a772b5ed1f5391ee586d12fd9082fbe09</commitId><timestamp>1785915170000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>change sales order lines display
</comment><date>2026-08-05 09:32:50 +0200</date><id>a7868f7a772b5ed1f5391ee586d12fd9082fbe09</id><msg>change sales order lines display</msg><path><editType>edit</editType><file>app/components/sales/OrderPositionsTable.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/partners/partnerReportPdf.ts</affectedPath><affectedPath>app/components/partners/PartnerReportModal.vue</affectedPath><affectedPath>app/pages/partners/partners/[id]/edit.vue</affectedPath><affectedPath>server/api/partners/partners/[id]/report.get.ts</affectedPath><commitId>f8bf5c6c9814dda28d855cfb8a740b204e0c55b4</commitId><timestamp>1785922112000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>bpartner report
</comment><date>2026-08-05 11:28:32 +0200</date><id>f8bf5c6c9814dda28d855cfb8a740b204e0c55b4</id><msg>bpartner report</msg><path><editType>add</editType><file>server/api/partners/partners/[id]/report.get.ts</file></path><path><editType>add</editType><file>server/utils/partners/partnerReportPdf.ts</file></path><path><editType>add</editType><file>app/components/partners/PartnerReportModal.vue</file></path><path><editType>edit</editType><file>app/pages/partners/partners/[id]/edit.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>696</buildNumber><marked><SHA1>351188a0f13d13882499b2e2fdb72ee67ae936c5</SHA1><branch><SHA1>351188a0f13d13882499b2e2fdb72ee67ae936c5</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>351188a0f13d13882499b2e2fdb72ee67ae936c5</SHA1><branch><SHA1>351188a0f13d13882499b2e2fdb72ee67ae936c5</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>351188a0f13d13882499b2e2fdb72ee67ae936c5</SHA1><branch><SHA1>351188a0f13d13882499b2e2fdb72ee67ae936c5</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'></action><building>false</building><displayName>#696</displayName><duration>67087</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #696</fullDisplayName><id>696</id><inProgress>false</inProgress><keepLog>false</keepLog><number>696</number><queueId>5498</queueId><result>SUCCESS</result><timestamp>1785888000140</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/696/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/mobile/product-lookup.post.ts</affectedPath><commitId>028318104b7633ccee0a47daa376cfca9354c347</commitId><timestamp>1785839075000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix
</comment><date>2026-08-04 12:24:35 +0200</date><id>028318104b7633ccee0a47daa376cfca9354c347</id><msg>fix</msg><path><editType>edit</editType><file>server/api/mobile/product-lookup.post.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/update-files/version.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>.gitignore</affectedPath><affectedPath>android/.gitignore</affectedPath><affectedPath>reference/template-cleanup/03-neutralize-env.sh</affectedPath><affectedPath>reference/template-cleanup/clone-logship-instance.sh</affectedPath><affectedPath>android/update-files/history.json</affectedPath><commitId>351188a0f13d13882499b2e2fdb72ee67ae936c5</commitId><timestamp>1785839973000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>remove blut24 traces
</comment><date>2026-08-04 12:39:33 +0200</date><id>351188a0f13d13882499b2e2fdb72ee67ae936c5</id><msg>remove blut24 traces</msg><path><editType>edit</editType><file>reference/template-cleanup/clone-logship-instance.sh</file></path><path><editType>edit</editType><file>.gitignore</file></path><path><editType>edit</editType><file>android/.gitignore</file></path><path><editType>edit</editType><file>android/update-files/history.json</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>reference/template-cleanup/03-neutralize-env.sh</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>695</buildNumber><marked><SHA1>5bb8230dd8cac61f5ec5416d63550b78c540596b</SHA1><branch><SHA1>5bb8230dd8cac61f5ec5416d63550b78c540596b</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>5bb8230dd8cac61f5ec5416d63550b78c540596b</SHA1><branch><SHA1>5bb8230dd8cac61f5ec5416d63550b78c540596b</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>5bb8230dd8cac61f5ec5416d63550b78c540596b</SHA1><branch><SHA1>5bb8230dd8cac61f5ec5416d63550b78c540596b</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'></action><building>false</building><displayName>#695</displayName><duration>67825</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #695</fullDisplayName><id>695</id><inProgress>false</inProgress><keepLog>false</keepLog><number>695</number><queueId>5496</queueId><result>SUCCESS</result><timestamp>1785801600142</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/695/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/index.vue</affectedPath><commitId>5bb8230dd8cac61f5ec5416d63550b78c540596b</commitId><timestamp>1785775306000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>change purchase order dashboard links
</comment><date>2026-08-03 18:41:46 +0200</date><id>5bb8230dd8cac61f5ec5416d63550b78c540596b</id><msg>change purchase order dashboard links</msg><path><editType>edit</editType><file>app/pages/index.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><build _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>694</buildNumber><marked><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</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'></action><building>false</building><displayName>#694</displayName><duration>65924</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #694</fullDisplayName><id>694</id><inProgress>false</inProgress><keepLog>false</keepLog><number>694</number><queueId>5493</queueId><result>SUCCESS</result><timestamp>1785715200141</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/694/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>693</buildNumber><marked><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</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'></action><building>false</building><displayName>#693</displayName><duration>64895</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #693</fullDisplayName><id>693</id><inProgress>false</inProgress><keepLog>false</keepLog><number>693</number><queueId>5492</queueId><result>SUCCESS</result><timestamp>1785628800152</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/693/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>692</buildNumber><marked><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</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'></action><building>false</building><displayName>#692</displayName><duration>66141</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #692</fullDisplayName><id>692</id><inProgress>false</inProgress><keepLog>false</keepLog><number>692</number><queueId>5490</queueId><result>SUCCESS</result><timestamp>1785542400140</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/692/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>691</buildNumber><marked><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</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'></action><building>false</building><displayName>#691</displayName><duration>65414</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #691</fullDisplayName><id>691</id><inProgress>false</inProgress><keepLog>false</keepLog><number>691</number><queueId>5488</queueId><result>SUCCESS</result><timestamp>1785456000141</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/691/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>690</buildNumber><marked><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</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'></action><building>false</building><displayName>#690</displayName><duration>63540</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #690</fullDisplayName><id>690</id><inProgress>false</inProgress><keepLog>false</keepLog><number>690</number><queueId>5482</queueId><result>SUCCESS</result><timestamp>1785369600140</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/690/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>689</buildNumber><marked><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</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'></action><building>false</building><displayName>#689</displayName><duration>62962</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #689</fullDisplayName><id>689</id><inProgress>false</inProgress><keepLog>false</keepLog><number>689</number><queueId>5478</queueId><result>SUCCESS</result><timestamp>1785283200140</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/689/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></build><build _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>688</buildNumber><marked><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</SHA1><branch><SHA1>41546cf99afef826cf65d6ba3ca3ee0547636984</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'></action><building>false</building><displayName>#688</displayName><duration>60523</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #688</fullDisplayName><id>688</id><inProgress>false</inProgress><keepLog>false</keepLog><number>688</number><queueId>5441</queueId><result>SUCCESS</result><timestamp>1785196800700</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/688/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/template-cleanup/01-idempiere-truncate.sql</affectedPath><affectedPath>reference/template-cleanup/03-neutralize-env.sh</affectedPath><affectedPath>reference/template-cleanup/diagnose-survivors.sql</affectedPath><affectedPath>reference/template-cleanup/run-cleanup.sh</affectedPath><affectedPath>reference/template-cleanup/02-strapi-truncate.sql</affectedPath><affectedPath>reference/template-cleanup/00-defuse.sh</affectedPath><affectedPath>reference/template-cleanup/README.md</affectedPath><commitId>888220a76c01f7344c71da83aabff85fc07023ce</commitId><timestamp>1785053492000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Add template-cleanup scripts: reset a production clone to a clean golden VM

Defuse (crontab/postfix/push/ES-bind), .env neutralization, and an
FK-retry truncation engine for the iDempiere DB (transactional wipe,
bare master data, org purge with reversal/cycle unlinking, trigger
handling for the ES sync, deferrable-constraint handling), plus Strapi
truncation and orchestration. Used to build VM 113 logship-template-2.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-07-26 10:11:32 +0200</date><id>888220a76c01f7344c71da83aabff85fc07023ce</id><msg>Add template-cleanup scripts: reset a production clone to a clean golden VM</msg><path><editType>add</editType><file>reference/template-cleanup/03-neutralize-env.sh</file></path><path><editType>add</editType><file>reference/template-cleanup/run-cleanup.sh</file></path><path><editType>add</editType><file>reference/template-cleanup/02-strapi-truncate.sql</file></path><path><editType>add</editType><file>reference/template-cleanup/diagnose-survivors.sql</file></path><path><editType>add</editType><file>reference/template-cleanup/00-defuse.sh</file></path><path><editType>add</editType><file>reference/template-cleanup/01-idempiere-truncate.sql</file></path><path><editType>add</editType><file>reference/template-cleanup/README.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/template-cleanup/RECLONE-RUNBOOK.md</affectedPath><affectedPath>reference/template-cleanup/TEMPLATE-README.md</affectedPath><commitId>10ead8aa2b638df47d5d0aa96c183d6c2db82080</commitId><timestamp>1785053661000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Add template VM README and full re-clone runbook

TEMPLATE-README.md mirrors /root/TEMPLATE-README.md on VM 113 (what the
golden VM contains, clone-to-instance checklist). RECLONE-RUNBOOK.md is
the tested end-to-end procedure (PBS restore, quarantined defuse via
guest agent, truncation, validation, finalize) with all gotchas.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-07-26 10:14:21 +0200</date><id>10ead8aa2b638df47d5d0aa96c183d6c2db82080</id><msg>Add template VM README and full re-clone runbook</msg><path><editType>add</editType><file>reference/template-cleanup/RECLONE-RUNBOOK.md</file></path><path><editType>add</editType><file>reference/template-cleanup/TEMPLATE-README.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/template-cleanup/RECLONE-RUNBOOK.md</affectedPath><affectedPath>reference/template-cleanup/04-set-instance-identity.sh</affectedPath><affectedPath>reference/template-cleanup/TEMPLATE-README.md</affectedPath><commitId>7fe847d4563cd2264f4b63043caca1195115fa4c</commitId><timestamp>1785054093000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Add 04-set-instance-identity.sh: rebrand tenant on instance clones

Renames client/org 1000000, the org-linked partner, main warehouse and
roles, sets .env COMPANYNAME, restarts iDempiere+frontend, and reports
remaining old-brand occurrences. --dry-run mode (verified on VM 113).
Docs updated with the new clone-to-instance step.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-07-26 10:21:33 +0200</date><id>7fe847d4563cd2264f4b63043caca1195115fa4c</id><msg>Add 04-set-instance-identity.sh: rebrand tenant on instance clones</msg><path><editType>add</editType><file>reference/template-cleanup/04-set-instance-identity.sh</file></path><path><editType>edit</editType><file>reference/template-cleanup/TEMPLATE-README.md</file></path><path><editType>edit</editType><file>reference/template-cleanup/RECLONE-RUNBOOK.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/template-cleanup/TEMPLATE-README.md</affectedPath><affectedPath>reference/template-cleanup/clone-logship-instance.sh</affectedPath><commitId>571c9b78d3ba798cb4ec7434d4b061229f3957df</commitId><timestamp>1785054224000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Add clone-logship-instance.sh: one-command instance provisioning on prox2

Wraps qm clone of template VM 113 + IP/name/resources + boot + guest-agent
wait + in-guest tenant rebrand (04-set-instance-identity.sh), with VMID/IP
preflight checks and a next-steps checklist. Staged at
prox2:/root/clone-logship-instance.sh.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-07-26 10:23:44 +0200</date><id>571c9b78d3ba798cb4ec7434d4b061229f3957df</id><msg>Add clone-logship-instance.sh: one-command instance provisioning on prox2</msg><path><editType>edit</editType><file>reference/template-cleanup/TEMPLATE-README.md</file></path><path><editType>add</editType><file>reference/template-cleanup/clone-logship-instance.sh</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/template-cleanup/03-neutralize-env.sh</affectedPath><affectedPath>reference/template-cleanup/clone-logship-instance.sh</affectedPath><commitId>a830efa993126a05a7e292d94fa2022d7f97045c</commitId><timestamp>1785054943000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>clone-instance: add --domain (https public URLs); 03-neutralize-env accepts domain or IP

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-07-26 10:35:43 +0200</date><id>a830efa993126a05a7e292d94fa2022d7f97045c</id><msg>clone-instance: add --domain (https public URLs); 03-neutralize-env accepts domain or IP</msg><path><editType>edit</editType><file>reference/template-cleanup/clone-logship-instance.sh</file></path><path><editType>edit</editType><file>reference/template-cleanup/03-neutralize-env.sh</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/template-cleanup/01-idempiere-truncate.sql</affectedPath><commitId>6618fda9517ab1135be6fd461d834ce44490129c</commitId><timestamp>1785055429000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>template-cleanup: restore AD_Session for the long-lived IDEMPIERETOKEN

The truncation wiped ad_session incl. the row the SuperUser JWT points
at; the REST servlet 500s on such tokens. Recreate session 1000081 so
clones work out of the box (already applied to template VM 113).

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-07-26 10:43:49 +0200</date><id>6618fda9517ab1135be6fd461d834ce44490129c</id><msg>template-cleanup: restore AD_Session for the long-lived IDEMPIERETOKEN</msg><path><editType>edit</editType><file>reference/template-cleanup/01-idempiere-truncate.sql</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/commission.vue</affectedPath><commitId>5292f94d94a2065a9e3ccc525e3865e1d4cfb956</commitId><timestamp>1785137223000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>enable multi parcel for fba dhl orders
</comment><date>2026-07-27 09:27:03 +0200</date><id>5292f94d94a2065a9e3ccc525e3865e1d4cfb956</id><msg>enable multi parcel for fba dhl orders</msg><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/commission.vue</affectedPath><affectedPath>app/composables/useRelabelDocs.ts</affectedPath><affectedPath>app/pages/mobile/commission.vue</affectedPath><commitId>a516b90ece0ec20fe6d5202079120901e3a20401</commitId><timestamp>1785151435000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>fix fba commission with relabel scan
</comment><date>2026-07-27 13:23:55 +0200</date><id>a516b90ece0ec20fe6d5202079120901e3a20401</id><msg>fix fba commission with relabel scan</msg><path><editType>edit</editType><file>app/pages/mobile/commission.vue</file></path><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path><path><editType>edit</editType><file>app/composables/useRelabelDocs.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/sales/RelabelLabelPrintModal.vue</affectedPath><commitId>8dd3d84930eec3dfef5e1dac3caa131865cba16c</commitId><timestamp>1785152414000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add selection print labels fba relabel print
</comment><date>2026-07-27 13:40:14 +0200</date><id>8dd3d84930eec3dfef5e1dac3caa131865cba16c</id><msg>add selection print labels fba relabel print</msg><path><editType>edit</editType><file>app/components/sales/RelabelLabelPrintModal.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.env</affectedPath><affectedPath>.gitignore</affectedPath><commitId>35f4ff9fd8e5fa67022a80c5a0c2cbee4f4dde14</commitId><timestamp>1785153579000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>track .env per branch (dev = LogShip local config)

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-07-27 13:59:39 +0200</date><id>35f4ff9fd8e5fa67022a80c5a0c2cbee4f4dde14</id><msg>track .env per branch (dev = LogShip local config)</msg><path><editType>add</editType><file>.env</file></path><path><editType>edit</editType><file>.gitignore</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.env</affectedPath><commitId>93e0965d0bb599b252f2fc71f8a1509068f5c09f</commitId><timestamp>1785154663000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add .env
</comment><date>2026-07-27 14:17:43 +0200</date><id>93e0965d0bb599b252f2fc71f8a1509068f5c09f</id><msg>add .env</msg><path><editType>edit</editType><file>.env</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.env</affectedPath><commitId>f6eae180dad8e6c7c8886f3bd1694899ff0f924b</commitId><timestamp>1785154830000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>dev .env: use LAN IP 192.168.12.72 for API/media URLs

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-07-27 14:20:30 +0200</date><id>f6eae180dad8e6c7c8886f3bd1694899ff0f924b</id><msg>dev .env: use LAN IP 192.168.12.72 for API/media URLs</msg><path><editType>edit</editType><file>.env</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/utils/scanCode.ts</affectedPath><commitId>64bfd3d1dd3599930cfadb626dcf088a4bcf9633</commitId><timestamp>1785155948000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fix fba relable encoding issue
</comment><date>2026-07-27 14:39:08 +0200</date><id>64bfd3d1dd3599930cfadb626dcf088a4bcf9633</id><msg>Fix fba relable encoding issue</msg><path><editType>edit</editType><file>app/utils/scanCode.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/sales/orders/[id]/edit.vue</affectedPath><affectedPath>app/components/sales/OrderPositionsTable.vue</affectedPath><commitId>26ce8d1fff124248c20f8d2bde03e94ab6f2face</commitId><timestamp>1785156718000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add position add from quick order to default order page
</comment><date>2026-07-27 14:51:58 +0200</date><id>26ce8d1fff124248c20f8d2bde03e94ab6f2face</id><msg>add position add from quick order to default order page</msg><path><editType>add</editType><file>app/components/sales/OrderPositionsTable.vue</file></path><path><editType>edit</editType><file>app/pages/sales/orders/[id]/edit.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/integrations/commission.vue</affectedPath><commitId>fe5183cba030a0474b6feab8b713284c5799efd2</commitId><timestamp>1785162778000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>show current scanned position on top
</comment><date>2026-07-27 16:32:58 +0200</date><id>fe5183cba030a0474b6feab8b713284c5799efd2</id><msg>show current scanned position on top</msg><path><editType>edit</editType><file>app/pages/integrations/commission.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/materials/shippers/create.vue</affectedPath><affectedPath>app/components/AgGrid/Shippers/AgCustomLink.vue</affectedPath><affectedPath>app/pages/materials/shippers/[id]/edit.vue</affectedPath><affectedPath>app/pages/materials/shippers/index.vue</affectedPath><affectedPath>server/api/materials/shippers/update.put.ts</affectedPath><affectedPath>app/components/materials/ShipperForm.vue</affectedPath><affectedPath>app/pages/materials/shippers/[id]/view.vue</affectedPath><affectedPath>server/api/materials/shippers/store.post.ts</affectedPath><affectedPath>app/pages/materials/shippers/[id]/duplicate.vue</affectedPath><affectedPath>reference/recipes.md</affectedPath><commitId>41546cf99afef826cf65d6ba3ca3ee0547636984</commitId><timestamp>1785164169000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>add shipper table and edit
</comment><date>2026-07-27 16:56:09 +0200</date><id>41546cf99afef826cf65d6ba3ca3ee0547636984</id><msg>add shipper table and edit</msg><path><editType>edit</editType><file>app/pages/materials/shippers/create.vue</file></path><path><editType>edit</editType><file>server/api/materials/shippers/update.put.ts</file></path><path><editType>edit</editType><file>reference/recipes.md</file></path><path><editType>add</editType><file>app/components/AgGrid/Shippers/AgCustomLink.vue</file></path><path><editType>edit</editType><file>app/pages/materials/shippers/[id]/view.vue</file></path><path><editType>edit</editType><file>app/components/materials/ShipperForm.vue</file></path><path><editType>edit</editType><file>server/api/materials/shippers/store.post.ts</file></path><path><editType>edit</editType><file>app/pages/materials/shippers/index.vue</file></path><path><editType>edit</editType><file>app/pages/materials/shippers/[id]/duplicate.vue</file></path><path><editType>edit</editType><file>app/pages/materials/shippers/[id]/edit.vue</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></build><color>blue</color><firstBuild _class='hudson.model.FreeStyleBuild'><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UserIdCause'><shortDescription>Started by user Younes</shortDescription><userId>younex</userId><userName>Younes</userName></cause></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesorigindev _class='hudson.plugins.git.util.Build'><buildNumber>1</buildNumber><marked><SHA1>6414a02df5e1f9176b93e17ce04863b8790f768c</SHA1><branch><SHA1>6414a02df5e1f9176b93e17ce04863b8790f768c</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>6414a02df5e1f9176b93e17ce04863b8790f768c</SHA1><branch><SHA1>6414a02df5e1f9176b93e17ce04863b8790f768c</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>6414a02df5e1f9176b93e17ce04863b8790f768c</SHA1><branch><SHA1>6414a02df5e1f9176b93e17ce04863b8790f768c</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'></action><building>false</building><displayName>#1</displayName><duration>2109</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #1</fullDisplayName><id>1</id><inProgress>false</inProgress><keepLog>false</keepLog><number>1</number><queueId>318</queueId><result>FAILURE</result><timestamp>1735826497687</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/1/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><kind>git</kind></changeSet></firstBuild><healthReport><description>Build stability: No recent builds failed.</description><iconClassName>icon-health-80plus</iconClassName><iconUrl>health-80plus.png</iconUrl><score>100</score></healthReport><inQueue>false</inQueue><keepDependencies>false</keepDependencies><lastBuild _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>787</buildNumber><marked><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><branch><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><branch><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><branch><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</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'></action><building>false</building><displayName>#787</displayName><duration>64924</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #787</fullDisplayName><id>787</id><inProgress>false</inProgress><keepLog>false</keepLog><number>787</number><queueId>5963</queueId><result>SUCCESS</result><timestamp>1793667600164</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/787/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/materials/warehouse-builder/index.vue</affectedPath><affectedPath>.claude/rules/materials/warehouse-builder.md</affectedPath><commitId>67fb6d6041a9cdb3636ab85556ba3e41e0ad5242</commitId><timestamp>1793614337000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-11-02 11:12:17 +0100</date><id>67fb6d6041a9cdb3636ab85556ba3e41e0ad5242</id><msg>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</msg><path><editType>edit</editType><file>.claude/rules/materials/warehouse-builder.md</file></path><path><editType>edit</editType><file>app/pages/materials/warehouse-builder/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/invoices/[id]/dhl-surcharge-report.get.ts</affectedPath><affectedPath>server/utils/invoices/dhlSurchargeReportPdf.ts</affectedPath><affectedPath>app/pages/sales/invoices/[id]/view.vue</affectedPath><affectedPath>.claude/rules/fulfillment/fee-invoice-generator.md</affectedPath><affectedPath>server/utils/invoices/dhlSurchargeReportData.ts</affectedPath><affectedPath>server/api/fulfillment/generate-fee-report.post.ts</affectedPath><affectedPath>app/pages/sales/invoices/[id]/edit.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>08b36be0cd4826d8531c7affa9df5a670046fe1c</commitId><timestamp>1793616305000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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)
</comment><date>2026-11-02 11:45:05 +0100</date><id>08b36be0cd4826d8531c7affa9df5a670046fe1c</id><msg>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)</msg><path><editType>edit</editType><file>app/pages/sales/invoices/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/utils/invoices/dhlSurchargeReportData.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/fee-invoice-generator.md</file></path><path><editType>add</editType><file>server/api/invoices/[id]/dhl-surcharge-report.get.ts</file></path><path><editType>add</editType><file>server/utils/invoices/dhlSurchargeReportPdf.ts</file></path><path><editType>edit</editType><file>server/api/fulfillment/generate-fee-report.post.ts</file></path><path><editType>edit</editType><file>app/pages/sales/invoices/[id]/view.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/fulfillment/fee-invoice-generator.md</affectedPath><affectedPath>server/utils/invoices/dhlSurchargeReportData.ts</affectedPath><commitId>a8d99ca4fb8fdf4af8c8329e94976c6fa4cf8b94</commitId><timestamp>1793618803000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>DHL Nachbelastung report: file-name fallback resolves the invoice number for both DHL file-name schemes (mirrors create_fulfillment.py)
</comment><date>2026-11-02 12:26:43 +0100</date><id>a8d99ca4fb8fdf4af8c8329e94976c6fa4cf8b94</id><msg>DHL Nachbelastung report: file-name fallback resolves the invoice number for both DHL file-name schemes (mirrors create_fulfillment.py)</msg><path><editType>edit</editType><file>server/utils/invoices/dhlSurchargeReportData.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/fee-invoice-generator.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/procurements/my-orders/[id].vue</affectedPath><affectedPath>app/pages/sales/invoices/[id]/edit.vue</affectedPath><affectedPath>.claude/rules/nuxt/nuxt4-conventions.md</affectedPath><affectedPath>app/pages/sales/fulfillment-orders/[id]/edit.vue</affectedPath><commitId>c29d7966d9218de3e0d2eaf201c9fcd9e700e7c2</commitId><timestamp>1793620845000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fix 500 on hard reload of sales invoice edit (and fulfillment-orders edit, inbound-notification detail): root-level &lt;Teleport to="body"&gt; next to the async &lt;NuxtLayout&gt; hydrated out of order in the prod build (insertBefore … not a child of this node); wrapped in &lt;ClientOnly&gt; like procurements/invoices edit; recipe note in nuxt4-conventions.md
</comment><date>2026-11-02 13:00:45 +0100</date><id>c29d7966d9218de3e0d2eaf201c9fcd9e700e7c2</id><msg>Fix 500 on hard reload of sales invoice edit (and fulfillment-orders edit, inbound-notification detail): root-level &lt;Teleport to="body"&gt; next to the async &lt;NuxtLayout&gt; hydrated out of order in the prod build (insertBefore … not a child of this node); wrapped in &lt;ClientOnly&gt; like procurements/invoices edit; recipe note in nuxt4-conventions.md</msg><path><editType>edit</editType><file>app/pages/sales/invoices/[id]/edit.vue</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/nuxt4-conventions.md</file></path><path><editType>edit</editType><file>app/pages/sales/fulfillment-orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/procurements/my-orders/[id].vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/saas/logship-cloud-konzept.pdf</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>reference/saas/logship-cloud-konzept.html</affectedPath><affectedPath>app/pages/mobile/generate-shipments.vue</affectedPath><affectedPath>server/api/requests/requests/browse.get.ts</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><commitId>75e2a35d6209b4fd4d203569e9f121aa74b27f03</commitId><timestamp>1793621603000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-11-02 13:13:23 +0100</date><id>75e2a35d6209b4fd4d203569e9f121aa74b27f03</id><msg>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</msg><path><editType>add</editType><file>reference/saas/logship-cloud-konzept.html</file></path><path><editType>add</editType><file>reference/saas/logship-cloud-konzept.pdf</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>edit</editType><file>server/api/requests/requests/browse.get.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/generate-shipments.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>server/api/requests/requests/browse.get.ts</affectedPath><commitId>9950ade8f88bf740a22245b600e996f969b704b4</commitId><timestamp>1793623232000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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'
</comment><date>2026-11-02 13:40:32 +0100</date><id>9950ade8f88bf740a22245b600e996f969b704b4</id><msg>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'</msg><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>server/api/requests/requests/browse.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>app/components/mobile/CameraCapture.vue</affectedPath><commitId>efa639ef0dbff30aa2bada22de90d11d93a114ad</commitId><timestamp>1793623380000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile tasks: 'Foto aufnehmen' uses a new in-app getUserMedia camera overlay (&lt;MobileCameraCapture&gt;, ported from the receive page) instead of &lt;input capture=environment&gt;, 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
</comment><date>2026-11-02 13:43:00 +0100</date><id>efa639ef0dbff30aa2bada22de90d11d93a114ad</id><msg>Mobile tasks: 'Foto aufnehmen' uses a new in-app getUserMedia camera overlay (&lt;MobileCameraCapture&gt;, ported from the receive page) instead of &lt;input capture=environment&gt;, 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</msg><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>add</editType><file>app/components/mobile/CameraCapture.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/update-files/version.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>server/api/requests/requests/browse.get.ts</affectedPath><commitId>c8f25c2067e77798abbfb3d0d7fb7ecf2bead84e</commitId><timestamp>1793623812000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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)'
</comment><date>2026-11-02 13:50:12 +0100</date><id>c8f25c2067e77798abbfb3d0d7fb7ecf2bead84e</id><msg>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)'</msg><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>server/api/requests/requests/browse.get.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/organizations/[id]/edit.vue</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_Lines.jrxml</affectedPath><affectedPath>reference/jasper-reports/invoice/Letterhead_Footer.jrxml</affectedPath><affectedPath>app/pages/users/organizations/create.vue</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_Address.jrxml</affectedPath><affectedPath>server/api/admin/organizations/[id]/organization-info/index.put.ts</affectedPath><affectedPath>.claude/rules/printing/jasper-shipment-report.md</affectedPath><affectedPath>app/components/admin/OrgFormField.vue</affectedPath><affectedPath>server/utils/orgInfoPayload.ts</affectedPath><affectedPath>reference/jasper-reports/README.md</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_Document.jrxml</affectedPath><affectedPath>app/composables/useOrganizationForm.ts</affectedPath><affectedPath>server/api/admin/organizations/store.post.ts</affectedPath><affectedPath>app/pages/users/organizations/index.vue</affectedPath><affectedPath>server/api/admin/organizations/update.put.ts</affectedPath><affectedPath>app/pages/users/organizations/[id]/duplicate.vue</affectedPath><affectedPath>app/components/admin/OrganizationForm.vue</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_OrgInfoblock.jrxml</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_TaxLines.jrxml</affectedPath><commitId>f1e371daca5a2d57ba1497c1d9a55dea31797678</commitId><timestamp>1793630440000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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): &lt;AdminOrganizationForm&gt; on Nuxt UI (hero with logo
tile + upload/remove, tabs Stammdaten / Briefkopf &amp; Belege / Adresse / Logistik &amp; 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.
</comment><date>2026-11-02 15:40:40 +0100</date><id>f1e371daca5a2d57ba1497c1d9a55dea31797678</id><msg>Invoice Jasper logo on black fixed + organization page rebuilt (full AD_Org/AD_OrgInfo CRUD, logo upload, Nuxt UI)</msg><path><editType>edit</editType><file>server/api/admin/organizations/[id]/organization-info/index.put.ts</file></path><path><editType>edit</editType><file>app/pages/users/organizations/create.vue</file></path><path><editType>edit</editType><file>app/pages/users/organizations/index.vue</file></path><path><editType>add</editType><file>app/components/admin/OrgFormField.vue</file></path><path><editType>edit</editType><file>reference/jasper-reports/README.md</file></path><path><editType>edit</editType><file>app/pages/users/organizations/[id]/edit.vue</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_Address.jrxml</file></path><path><editType>add</editType><file>app/composables/useOrganizationForm.ts</file></path><path><editType>add</editType><file>server/utils/orgInfoPayload.ts</file></path><path><editType>edit</editType><file>app/pages/users/organizations/[id]/duplicate.vue</file></path><path><editType>edit</editType><file>server/api/admin/organizations/store.post.ts</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_Lines.jrxml</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_Document.jrxml</file></path><path><editType>edit</editType><file>.claude/rules/printing/jasper-shipment-report.md</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_OrgInfoblock.jrxml</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/Letterhead_Footer.jrxml</file></path><path><editType>edit</editType><file>app/components/admin/OrganizationForm.vue</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_TaxLines.jrxml</file></path><path><editType>edit</editType><file>server/api/admin/organizations/update.put.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/leads/CloseLeadModal.vue</affectedPath><affectedPath>app/components/AgGrid/AgLeadExpireToggle.vue</affectedPath><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>c83fc53be899ebea1a71e35b67602349373e9463</commitId><timestamp>1793631086000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-11-02 15:51:26 +0100</date><id>c83fc53be899ebea1a71e35b67602349373e9463</id><msg>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</msg><path><editType>edit</editType><file>app/components/AgGrid/AgLeadExpireToggle.vue</file></path><path><editType>add</editType><file>app/components/leads/CloseLeadModal.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/leads/crm-qualification.md</affectedPath><commitId>f0ce63aca1642654bcefe3180aa896635c2592c8</commitId><timestamp>1793631093000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Recipe: leads list close-lead modal
</comment><date>2026-11-02 15:51:33 +0100</date><id>f0ce63aca1642654bcefe3180aa896635c2592c8</id><msg>Recipe: leads list close-lead modal</msg><path><editType>edit</editType><file>.claude/rules/leads/crm-qualification.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>package-lock.json</affectedPath><affectedPath>app/composables/states.ts</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core.js</affectedPath><affectedPath>app/components/BarcodeScanner.vue</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Core.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.worker.js</affectedPath><affectedPath>app/pages/mobile/picklist.vue</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd.wasm</affectedPath><affectedPath>app/composables/useBarcodeScanner.js</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>public/scanbot/ScanbotSDK.ui2.min.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.wasm</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.worker.js</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.worker.js</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.wasm</affectedPath><affectedPath>public/scanbot/ScanbotSDK.min.js</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Core-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Core.js</affectedPath><affectedPath>public/scanbot/ScanbotSDK.ui2.min.js.LICENSE.txt</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm.wasm</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm.wasm</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd.wasm</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.js</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.wasm</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm.wasm</affectedPath><affectedPath>package.json</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Core-simd.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd.wasm</affectedPath><commitId>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</commitId><timestamp>1793658994000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Replace mobile barcode scanner with Scanbot SDK
</comment><date>2026-11-02 23:36:34 +0100</date><id>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</id><msg>Replace mobile barcode scanner with Scanbot SDK</msg><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm.wasm</file></path><path><editType>add</editType><file>public/scanbot/ScanbotSDK.ui2.min.js.LICENSE.txt</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.worker.js</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.wasm</file></path><path><editType>edit</editType><file>app/components/BarcodeScanner.vue</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Core.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm.wasm</file></path><path><editType>add</editType><file>public/scanbot/ScanbotSDK.min.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd.js</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core.js</file></path><path><editType>edit</editType><file>app/composables/useBarcodeScanner.js</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.worker.js</file></path><path><editType>edit</editType><file>app/composables/states.ts</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Core-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Core-simd.js</file></path><path><editType>edit</editType><file>package-lock.json</file></path><path><editType>edit</editType><file>package.json</file></path><path><editType>add</editType><file>public/scanbot/ScanbotSDK.ui2.min.js</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/picklist.vue</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.worker.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Core.js</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></lastBuild><lastCompletedBuild _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>787</buildNumber><marked><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><branch><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><branch><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><branch><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</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'></action><building>false</building><displayName>#787</displayName><duration>64924</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #787</fullDisplayName><id>787</id><inProgress>false</inProgress><keepLog>false</keepLog><number>787</number><queueId>5963</queueId><result>SUCCESS</result><timestamp>1793667600164</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/787/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/materials/warehouse-builder/index.vue</affectedPath><affectedPath>.claude/rules/materials/warehouse-builder.md</affectedPath><commitId>67fb6d6041a9cdb3636ab85556ba3e41e0ad5242</commitId><timestamp>1793614337000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-11-02 11:12:17 +0100</date><id>67fb6d6041a9cdb3636ab85556ba3e41e0ad5242</id><msg>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</msg><path><editType>edit</editType><file>.claude/rules/materials/warehouse-builder.md</file></path><path><editType>edit</editType><file>app/pages/materials/warehouse-builder/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/invoices/[id]/dhl-surcharge-report.get.ts</affectedPath><affectedPath>server/utils/invoices/dhlSurchargeReportPdf.ts</affectedPath><affectedPath>app/pages/sales/invoices/[id]/view.vue</affectedPath><affectedPath>.claude/rules/fulfillment/fee-invoice-generator.md</affectedPath><affectedPath>server/utils/invoices/dhlSurchargeReportData.ts</affectedPath><affectedPath>server/api/fulfillment/generate-fee-report.post.ts</affectedPath><affectedPath>app/pages/sales/invoices/[id]/edit.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>08b36be0cd4826d8531c7affa9df5a670046fe1c</commitId><timestamp>1793616305000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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)
</comment><date>2026-11-02 11:45:05 +0100</date><id>08b36be0cd4826d8531c7affa9df5a670046fe1c</id><msg>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)</msg><path><editType>edit</editType><file>app/pages/sales/invoices/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/utils/invoices/dhlSurchargeReportData.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/fee-invoice-generator.md</file></path><path><editType>add</editType><file>server/api/invoices/[id]/dhl-surcharge-report.get.ts</file></path><path><editType>add</editType><file>server/utils/invoices/dhlSurchargeReportPdf.ts</file></path><path><editType>edit</editType><file>server/api/fulfillment/generate-fee-report.post.ts</file></path><path><editType>edit</editType><file>app/pages/sales/invoices/[id]/view.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/fulfillment/fee-invoice-generator.md</affectedPath><affectedPath>server/utils/invoices/dhlSurchargeReportData.ts</affectedPath><commitId>a8d99ca4fb8fdf4af8c8329e94976c6fa4cf8b94</commitId><timestamp>1793618803000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>DHL Nachbelastung report: file-name fallback resolves the invoice number for both DHL file-name schemes (mirrors create_fulfillment.py)
</comment><date>2026-11-02 12:26:43 +0100</date><id>a8d99ca4fb8fdf4af8c8329e94976c6fa4cf8b94</id><msg>DHL Nachbelastung report: file-name fallback resolves the invoice number for both DHL file-name schemes (mirrors create_fulfillment.py)</msg><path><editType>edit</editType><file>server/utils/invoices/dhlSurchargeReportData.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/fee-invoice-generator.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/procurements/my-orders/[id].vue</affectedPath><affectedPath>app/pages/sales/invoices/[id]/edit.vue</affectedPath><affectedPath>.claude/rules/nuxt/nuxt4-conventions.md</affectedPath><affectedPath>app/pages/sales/fulfillment-orders/[id]/edit.vue</affectedPath><commitId>c29d7966d9218de3e0d2eaf201c9fcd9e700e7c2</commitId><timestamp>1793620845000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fix 500 on hard reload of sales invoice edit (and fulfillment-orders edit, inbound-notification detail): root-level &lt;Teleport to="body"&gt; next to the async &lt;NuxtLayout&gt; hydrated out of order in the prod build (insertBefore … not a child of this node); wrapped in &lt;ClientOnly&gt; like procurements/invoices edit; recipe note in nuxt4-conventions.md
</comment><date>2026-11-02 13:00:45 +0100</date><id>c29d7966d9218de3e0d2eaf201c9fcd9e700e7c2</id><msg>Fix 500 on hard reload of sales invoice edit (and fulfillment-orders edit, inbound-notification detail): root-level &lt;Teleport to="body"&gt; next to the async &lt;NuxtLayout&gt; hydrated out of order in the prod build (insertBefore … not a child of this node); wrapped in &lt;ClientOnly&gt; like procurements/invoices edit; recipe note in nuxt4-conventions.md</msg><path><editType>edit</editType><file>app/pages/sales/invoices/[id]/edit.vue</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/nuxt4-conventions.md</file></path><path><editType>edit</editType><file>app/pages/sales/fulfillment-orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/procurements/my-orders/[id].vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/saas/logship-cloud-konzept.pdf</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>reference/saas/logship-cloud-konzept.html</affectedPath><affectedPath>app/pages/mobile/generate-shipments.vue</affectedPath><affectedPath>server/api/requests/requests/browse.get.ts</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><commitId>75e2a35d6209b4fd4d203569e9f121aa74b27f03</commitId><timestamp>1793621603000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-11-02 13:13:23 +0100</date><id>75e2a35d6209b4fd4d203569e9f121aa74b27f03</id><msg>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</msg><path><editType>add</editType><file>reference/saas/logship-cloud-konzept.html</file></path><path><editType>add</editType><file>reference/saas/logship-cloud-konzept.pdf</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>edit</editType><file>server/api/requests/requests/browse.get.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/generate-shipments.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>server/api/requests/requests/browse.get.ts</affectedPath><commitId>9950ade8f88bf740a22245b600e996f969b704b4</commitId><timestamp>1793623232000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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'
</comment><date>2026-11-02 13:40:32 +0100</date><id>9950ade8f88bf740a22245b600e996f969b704b4</id><msg>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'</msg><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>server/api/requests/requests/browse.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>app/components/mobile/CameraCapture.vue</affectedPath><commitId>efa639ef0dbff30aa2bada22de90d11d93a114ad</commitId><timestamp>1793623380000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile tasks: 'Foto aufnehmen' uses a new in-app getUserMedia camera overlay (&lt;MobileCameraCapture&gt;, ported from the receive page) instead of &lt;input capture=environment&gt;, 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
</comment><date>2026-11-02 13:43:00 +0100</date><id>efa639ef0dbff30aa2bada22de90d11d93a114ad</id><msg>Mobile tasks: 'Foto aufnehmen' uses a new in-app getUserMedia camera overlay (&lt;MobileCameraCapture&gt;, ported from the receive page) instead of &lt;input capture=environment&gt;, 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</msg><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>add</editType><file>app/components/mobile/CameraCapture.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/update-files/version.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>server/api/requests/requests/browse.get.ts</affectedPath><commitId>c8f25c2067e77798abbfb3d0d7fb7ecf2bead84e</commitId><timestamp>1793623812000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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)'
</comment><date>2026-11-02 13:50:12 +0100</date><id>c8f25c2067e77798abbfb3d0d7fb7ecf2bead84e</id><msg>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)'</msg><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>server/api/requests/requests/browse.get.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/organizations/[id]/edit.vue</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_Lines.jrxml</affectedPath><affectedPath>reference/jasper-reports/invoice/Letterhead_Footer.jrxml</affectedPath><affectedPath>app/pages/users/organizations/create.vue</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_Address.jrxml</affectedPath><affectedPath>server/api/admin/organizations/[id]/organization-info/index.put.ts</affectedPath><affectedPath>.claude/rules/printing/jasper-shipment-report.md</affectedPath><affectedPath>app/components/admin/OrgFormField.vue</affectedPath><affectedPath>server/utils/orgInfoPayload.ts</affectedPath><affectedPath>reference/jasper-reports/README.md</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_Document.jrxml</affectedPath><affectedPath>app/composables/useOrganizationForm.ts</affectedPath><affectedPath>server/api/admin/organizations/store.post.ts</affectedPath><affectedPath>app/pages/users/organizations/index.vue</affectedPath><affectedPath>server/api/admin/organizations/update.put.ts</affectedPath><affectedPath>app/pages/users/organizations/[id]/duplicate.vue</affectedPath><affectedPath>app/components/admin/OrganizationForm.vue</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_OrgInfoblock.jrxml</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_TaxLines.jrxml</affectedPath><commitId>f1e371daca5a2d57ba1497c1d9a55dea31797678</commitId><timestamp>1793630440000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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): &lt;AdminOrganizationForm&gt; on Nuxt UI (hero with logo
tile + upload/remove, tabs Stammdaten / Briefkopf &amp; Belege / Adresse / Logistik &amp; 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.
</comment><date>2026-11-02 15:40:40 +0100</date><id>f1e371daca5a2d57ba1497c1d9a55dea31797678</id><msg>Invoice Jasper logo on black fixed + organization page rebuilt (full AD_Org/AD_OrgInfo CRUD, logo upload, Nuxt UI)</msg><path><editType>edit</editType><file>server/api/admin/organizations/[id]/organization-info/index.put.ts</file></path><path><editType>edit</editType><file>app/pages/users/organizations/create.vue</file></path><path><editType>edit</editType><file>app/pages/users/organizations/index.vue</file></path><path><editType>add</editType><file>app/components/admin/OrgFormField.vue</file></path><path><editType>edit</editType><file>reference/jasper-reports/README.md</file></path><path><editType>edit</editType><file>app/pages/users/organizations/[id]/edit.vue</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_Address.jrxml</file></path><path><editType>add</editType><file>app/composables/useOrganizationForm.ts</file></path><path><editType>add</editType><file>server/utils/orgInfoPayload.ts</file></path><path><editType>edit</editType><file>app/pages/users/organizations/[id]/duplicate.vue</file></path><path><editType>edit</editType><file>server/api/admin/organizations/store.post.ts</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_Lines.jrxml</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_Document.jrxml</file></path><path><editType>edit</editType><file>.claude/rules/printing/jasper-shipment-report.md</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_OrgInfoblock.jrxml</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/Letterhead_Footer.jrxml</file></path><path><editType>edit</editType><file>app/components/admin/OrganizationForm.vue</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_TaxLines.jrxml</file></path><path><editType>edit</editType><file>server/api/admin/organizations/update.put.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/leads/CloseLeadModal.vue</affectedPath><affectedPath>app/components/AgGrid/AgLeadExpireToggle.vue</affectedPath><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>c83fc53be899ebea1a71e35b67602349373e9463</commitId><timestamp>1793631086000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-11-02 15:51:26 +0100</date><id>c83fc53be899ebea1a71e35b67602349373e9463</id><msg>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</msg><path><editType>edit</editType><file>app/components/AgGrid/AgLeadExpireToggle.vue</file></path><path><editType>add</editType><file>app/components/leads/CloseLeadModal.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/leads/crm-qualification.md</affectedPath><commitId>f0ce63aca1642654bcefe3180aa896635c2592c8</commitId><timestamp>1793631093000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Recipe: leads list close-lead modal
</comment><date>2026-11-02 15:51:33 +0100</date><id>f0ce63aca1642654bcefe3180aa896635c2592c8</id><msg>Recipe: leads list close-lead modal</msg><path><editType>edit</editType><file>.claude/rules/leads/crm-qualification.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>package-lock.json</affectedPath><affectedPath>app/composables/states.ts</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core.js</affectedPath><affectedPath>app/components/BarcodeScanner.vue</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Core.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.worker.js</affectedPath><affectedPath>app/pages/mobile/picklist.vue</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd.wasm</affectedPath><affectedPath>app/composables/useBarcodeScanner.js</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>public/scanbot/ScanbotSDK.ui2.min.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.wasm</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.worker.js</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.worker.js</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.wasm</affectedPath><affectedPath>public/scanbot/ScanbotSDK.min.js</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Core-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Core.js</affectedPath><affectedPath>public/scanbot/ScanbotSDK.ui2.min.js.LICENSE.txt</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm.wasm</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm.wasm</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd.wasm</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.js</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.wasm</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm.wasm</affectedPath><affectedPath>package.json</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Core-simd.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd.wasm</affectedPath><commitId>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</commitId><timestamp>1793658994000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Replace mobile barcode scanner with Scanbot SDK
</comment><date>2026-11-02 23:36:34 +0100</date><id>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</id><msg>Replace mobile barcode scanner with Scanbot SDK</msg><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm.wasm</file></path><path><editType>add</editType><file>public/scanbot/ScanbotSDK.ui2.min.js.LICENSE.txt</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.worker.js</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.wasm</file></path><path><editType>edit</editType><file>app/components/BarcodeScanner.vue</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Core.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm.wasm</file></path><path><editType>add</editType><file>public/scanbot/ScanbotSDK.min.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd.js</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core.js</file></path><path><editType>edit</editType><file>app/composables/useBarcodeScanner.js</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.worker.js</file></path><path><editType>edit</editType><file>app/composables/states.ts</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Core-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Core-simd.js</file></path><path><editType>edit</editType><file>package-lock.json</file></path><path><editType>edit</editType><file>package.json</file></path><path><editType>add</editType><file>public/scanbot/ScanbotSDK.ui2.min.js</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/picklist.vue</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.worker.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Core.js</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></lastCompletedBuild><lastFailedBuild _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></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><building>false</building><displayName>#611</displayName><duration>200</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #611</fullDisplayName><id>611</id><inProgress>false</inProgress><keepLog>false</keepLog><number>611</number><queueId>5105</queueId><result>FAILURE</result><timestamp>1778544000931</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/611/</url><builtOn></builtOn><changeSet _class='hudson.scm.EmptyChangeLogSet'></changeSet></lastFailedBuild><lastStableBuild _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>787</buildNumber><marked><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><branch><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><branch><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><branch><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</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'></action><building>false</building><displayName>#787</displayName><duration>64924</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #787</fullDisplayName><id>787</id><inProgress>false</inProgress><keepLog>false</keepLog><number>787</number><queueId>5963</queueId><result>SUCCESS</result><timestamp>1793667600164</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/787/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/materials/warehouse-builder/index.vue</affectedPath><affectedPath>.claude/rules/materials/warehouse-builder.md</affectedPath><commitId>67fb6d6041a9cdb3636ab85556ba3e41e0ad5242</commitId><timestamp>1793614337000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-11-02 11:12:17 +0100</date><id>67fb6d6041a9cdb3636ab85556ba3e41e0ad5242</id><msg>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</msg><path><editType>edit</editType><file>.claude/rules/materials/warehouse-builder.md</file></path><path><editType>edit</editType><file>app/pages/materials/warehouse-builder/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/invoices/[id]/dhl-surcharge-report.get.ts</affectedPath><affectedPath>server/utils/invoices/dhlSurchargeReportPdf.ts</affectedPath><affectedPath>app/pages/sales/invoices/[id]/view.vue</affectedPath><affectedPath>.claude/rules/fulfillment/fee-invoice-generator.md</affectedPath><affectedPath>server/utils/invoices/dhlSurchargeReportData.ts</affectedPath><affectedPath>server/api/fulfillment/generate-fee-report.post.ts</affectedPath><affectedPath>app/pages/sales/invoices/[id]/edit.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>08b36be0cd4826d8531c7affa9df5a670046fe1c</commitId><timestamp>1793616305000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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)
</comment><date>2026-11-02 11:45:05 +0100</date><id>08b36be0cd4826d8531c7affa9df5a670046fe1c</id><msg>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)</msg><path><editType>edit</editType><file>app/pages/sales/invoices/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/utils/invoices/dhlSurchargeReportData.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/fee-invoice-generator.md</file></path><path><editType>add</editType><file>server/api/invoices/[id]/dhl-surcharge-report.get.ts</file></path><path><editType>add</editType><file>server/utils/invoices/dhlSurchargeReportPdf.ts</file></path><path><editType>edit</editType><file>server/api/fulfillment/generate-fee-report.post.ts</file></path><path><editType>edit</editType><file>app/pages/sales/invoices/[id]/view.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/fulfillment/fee-invoice-generator.md</affectedPath><affectedPath>server/utils/invoices/dhlSurchargeReportData.ts</affectedPath><commitId>a8d99ca4fb8fdf4af8c8329e94976c6fa4cf8b94</commitId><timestamp>1793618803000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>DHL Nachbelastung report: file-name fallback resolves the invoice number for both DHL file-name schemes (mirrors create_fulfillment.py)
</comment><date>2026-11-02 12:26:43 +0100</date><id>a8d99ca4fb8fdf4af8c8329e94976c6fa4cf8b94</id><msg>DHL Nachbelastung report: file-name fallback resolves the invoice number for both DHL file-name schemes (mirrors create_fulfillment.py)</msg><path><editType>edit</editType><file>server/utils/invoices/dhlSurchargeReportData.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/fee-invoice-generator.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/procurements/my-orders/[id].vue</affectedPath><affectedPath>app/pages/sales/invoices/[id]/edit.vue</affectedPath><affectedPath>.claude/rules/nuxt/nuxt4-conventions.md</affectedPath><affectedPath>app/pages/sales/fulfillment-orders/[id]/edit.vue</affectedPath><commitId>c29d7966d9218de3e0d2eaf201c9fcd9e700e7c2</commitId><timestamp>1793620845000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fix 500 on hard reload of sales invoice edit (and fulfillment-orders edit, inbound-notification detail): root-level &lt;Teleport to="body"&gt; next to the async &lt;NuxtLayout&gt; hydrated out of order in the prod build (insertBefore … not a child of this node); wrapped in &lt;ClientOnly&gt; like procurements/invoices edit; recipe note in nuxt4-conventions.md
</comment><date>2026-11-02 13:00:45 +0100</date><id>c29d7966d9218de3e0d2eaf201c9fcd9e700e7c2</id><msg>Fix 500 on hard reload of sales invoice edit (and fulfillment-orders edit, inbound-notification detail): root-level &lt;Teleport to="body"&gt; next to the async &lt;NuxtLayout&gt; hydrated out of order in the prod build (insertBefore … not a child of this node); wrapped in &lt;ClientOnly&gt; like procurements/invoices edit; recipe note in nuxt4-conventions.md</msg><path><editType>edit</editType><file>app/pages/sales/invoices/[id]/edit.vue</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/nuxt4-conventions.md</file></path><path><editType>edit</editType><file>app/pages/sales/fulfillment-orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/procurements/my-orders/[id].vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/saas/logship-cloud-konzept.pdf</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>reference/saas/logship-cloud-konzept.html</affectedPath><affectedPath>app/pages/mobile/generate-shipments.vue</affectedPath><affectedPath>server/api/requests/requests/browse.get.ts</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><commitId>75e2a35d6209b4fd4d203569e9f121aa74b27f03</commitId><timestamp>1793621603000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-11-02 13:13:23 +0100</date><id>75e2a35d6209b4fd4d203569e9f121aa74b27f03</id><msg>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</msg><path><editType>add</editType><file>reference/saas/logship-cloud-konzept.html</file></path><path><editType>add</editType><file>reference/saas/logship-cloud-konzept.pdf</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>edit</editType><file>server/api/requests/requests/browse.get.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/generate-shipments.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>server/api/requests/requests/browse.get.ts</affectedPath><commitId>9950ade8f88bf740a22245b600e996f969b704b4</commitId><timestamp>1793623232000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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'
</comment><date>2026-11-02 13:40:32 +0100</date><id>9950ade8f88bf740a22245b600e996f969b704b4</id><msg>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'</msg><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>server/api/requests/requests/browse.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>app/components/mobile/CameraCapture.vue</affectedPath><commitId>efa639ef0dbff30aa2bada22de90d11d93a114ad</commitId><timestamp>1793623380000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile tasks: 'Foto aufnehmen' uses a new in-app getUserMedia camera overlay (&lt;MobileCameraCapture&gt;, ported from the receive page) instead of &lt;input capture=environment&gt;, 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
</comment><date>2026-11-02 13:43:00 +0100</date><id>efa639ef0dbff30aa2bada22de90d11d93a114ad</id><msg>Mobile tasks: 'Foto aufnehmen' uses a new in-app getUserMedia camera overlay (&lt;MobileCameraCapture&gt;, ported from the receive page) instead of &lt;input capture=environment&gt;, 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</msg><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>add</editType><file>app/components/mobile/CameraCapture.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/update-files/version.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>server/api/requests/requests/browse.get.ts</affectedPath><commitId>c8f25c2067e77798abbfb3d0d7fb7ecf2bead84e</commitId><timestamp>1793623812000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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)'
</comment><date>2026-11-02 13:50:12 +0100</date><id>c8f25c2067e77798abbfb3d0d7fb7ecf2bead84e</id><msg>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)'</msg><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>server/api/requests/requests/browse.get.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/organizations/[id]/edit.vue</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_Lines.jrxml</affectedPath><affectedPath>reference/jasper-reports/invoice/Letterhead_Footer.jrxml</affectedPath><affectedPath>app/pages/users/organizations/create.vue</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_Address.jrxml</affectedPath><affectedPath>server/api/admin/organizations/[id]/organization-info/index.put.ts</affectedPath><affectedPath>.claude/rules/printing/jasper-shipment-report.md</affectedPath><affectedPath>app/components/admin/OrgFormField.vue</affectedPath><affectedPath>server/utils/orgInfoPayload.ts</affectedPath><affectedPath>reference/jasper-reports/README.md</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_Document.jrxml</affectedPath><affectedPath>app/composables/useOrganizationForm.ts</affectedPath><affectedPath>server/api/admin/organizations/store.post.ts</affectedPath><affectedPath>app/pages/users/organizations/index.vue</affectedPath><affectedPath>server/api/admin/organizations/update.put.ts</affectedPath><affectedPath>app/pages/users/organizations/[id]/duplicate.vue</affectedPath><affectedPath>app/components/admin/OrganizationForm.vue</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_OrgInfoblock.jrxml</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_TaxLines.jrxml</affectedPath><commitId>f1e371daca5a2d57ba1497c1d9a55dea31797678</commitId><timestamp>1793630440000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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): &lt;AdminOrganizationForm&gt; on Nuxt UI (hero with logo
tile + upload/remove, tabs Stammdaten / Briefkopf &amp; Belege / Adresse / Logistik &amp; 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.
</comment><date>2026-11-02 15:40:40 +0100</date><id>f1e371daca5a2d57ba1497c1d9a55dea31797678</id><msg>Invoice Jasper logo on black fixed + organization page rebuilt (full AD_Org/AD_OrgInfo CRUD, logo upload, Nuxt UI)</msg><path><editType>edit</editType><file>server/api/admin/organizations/[id]/organization-info/index.put.ts</file></path><path><editType>edit</editType><file>app/pages/users/organizations/create.vue</file></path><path><editType>edit</editType><file>app/pages/users/organizations/index.vue</file></path><path><editType>add</editType><file>app/components/admin/OrgFormField.vue</file></path><path><editType>edit</editType><file>reference/jasper-reports/README.md</file></path><path><editType>edit</editType><file>app/pages/users/organizations/[id]/edit.vue</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_Address.jrxml</file></path><path><editType>add</editType><file>app/composables/useOrganizationForm.ts</file></path><path><editType>add</editType><file>server/utils/orgInfoPayload.ts</file></path><path><editType>edit</editType><file>app/pages/users/organizations/[id]/duplicate.vue</file></path><path><editType>edit</editType><file>server/api/admin/organizations/store.post.ts</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_Lines.jrxml</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_Document.jrxml</file></path><path><editType>edit</editType><file>.claude/rules/printing/jasper-shipment-report.md</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_OrgInfoblock.jrxml</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/Letterhead_Footer.jrxml</file></path><path><editType>edit</editType><file>app/components/admin/OrganizationForm.vue</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_TaxLines.jrxml</file></path><path><editType>edit</editType><file>server/api/admin/organizations/update.put.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/leads/CloseLeadModal.vue</affectedPath><affectedPath>app/components/AgGrid/AgLeadExpireToggle.vue</affectedPath><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>c83fc53be899ebea1a71e35b67602349373e9463</commitId><timestamp>1793631086000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-11-02 15:51:26 +0100</date><id>c83fc53be899ebea1a71e35b67602349373e9463</id><msg>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</msg><path><editType>edit</editType><file>app/components/AgGrid/AgLeadExpireToggle.vue</file></path><path><editType>add</editType><file>app/components/leads/CloseLeadModal.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/leads/crm-qualification.md</affectedPath><commitId>f0ce63aca1642654bcefe3180aa896635c2592c8</commitId><timestamp>1793631093000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Recipe: leads list close-lead modal
</comment><date>2026-11-02 15:51:33 +0100</date><id>f0ce63aca1642654bcefe3180aa896635c2592c8</id><msg>Recipe: leads list close-lead modal</msg><path><editType>edit</editType><file>.claude/rules/leads/crm-qualification.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>package-lock.json</affectedPath><affectedPath>app/composables/states.ts</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core.js</affectedPath><affectedPath>app/components/BarcodeScanner.vue</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Core.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.worker.js</affectedPath><affectedPath>app/pages/mobile/picklist.vue</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd.wasm</affectedPath><affectedPath>app/composables/useBarcodeScanner.js</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>public/scanbot/ScanbotSDK.ui2.min.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.wasm</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.worker.js</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.worker.js</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.wasm</affectedPath><affectedPath>public/scanbot/ScanbotSDK.min.js</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Core-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Core.js</affectedPath><affectedPath>public/scanbot/ScanbotSDK.ui2.min.js.LICENSE.txt</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm.wasm</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm.wasm</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd.wasm</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.js</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.wasm</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm.wasm</affectedPath><affectedPath>package.json</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Core-simd.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd.wasm</affectedPath><commitId>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</commitId><timestamp>1793658994000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Replace mobile barcode scanner with Scanbot SDK
</comment><date>2026-11-02 23:36:34 +0100</date><id>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</id><msg>Replace mobile barcode scanner with Scanbot SDK</msg><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm.wasm</file></path><path><editType>add</editType><file>public/scanbot/ScanbotSDK.ui2.min.js.LICENSE.txt</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.worker.js</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.wasm</file></path><path><editType>edit</editType><file>app/components/BarcodeScanner.vue</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Core.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm.wasm</file></path><path><editType>add</editType><file>public/scanbot/ScanbotSDK.min.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd.js</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core.js</file></path><path><editType>edit</editType><file>app/composables/useBarcodeScanner.js</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.worker.js</file></path><path><editType>edit</editType><file>app/composables/states.ts</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Core-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Core-simd.js</file></path><path><editType>edit</editType><file>package-lock.json</file></path><path><editType>edit</editType><file>package.json</file></path><path><editType>add</editType><file>public/scanbot/ScanbotSDK.ui2.min.js</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/picklist.vue</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.worker.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Core.js</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></lastStableBuild><lastSuccessfulBuild _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>787</buildNumber><marked><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><branch><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><name>refs/remotes/origin/dev</name></branch></marked><revision><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><branch><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><name>refs/remotes/origin/dev</name></branch></revision></refsremotesorigindev></buildsByBranchName><lastBuiltRevision><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</SHA1><branch><SHA1>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</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'></action><building>false</building><displayName>#787</displayName><duration>64924</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #787</fullDisplayName><id>787</id><inProgress>false</inProgress><keepLog>false</keepLog><number>787</number><queueId>5963</queueId><result>SUCCESS</result><timestamp>1793667600164</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/787/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/materials/warehouse-builder/index.vue</affectedPath><affectedPath>.claude/rules/materials/warehouse-builder.md</affectedPath><commitId>67fb6d6041a9cdb3636ab85556ba3e41e0ad5242</commitId><timestamp>1793614337000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-11-02 11:12:17 +0100</date><id>67fb6d6041a9cdb3636ab85556ba3e41e0ad5242</id><msg>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</msg><path><editType>edit</editType><file>.claude/rules/materials/warehouse-builder.md</file></path><path><editType>edit</editType><file>app/pages/materials/warehouse-builder/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/api/invoices/[id]/dhl-surcharge-report.get.ts</affectedPath><affectedPath>server/utils/invoices/dhlSurchargeReportPdf.ts</affectedPath><affectedPath>app/pages/sales/invoices/[id]/view.vue</affectedPath><affectedPath>.claude/rules/fulfillment/fee-invoice-generator.md</affectedPath><affectedPath>server/utils/invoices/dhlSurchargeReportData.ts</affectedPath><affectedPath>server/api/fulfillment/generate-fee-report.post.ts</affectedPath><affectedPath>app/pages/sales/invoices/[id]/edit.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>08b36be0cd4826d8531c7affa9df5a670046fe1c</commitId><timestamp>1793616305000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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)
</comment><date>2026-11-02 11:45:05 +0100</date><id>08b36be0cd4826d8531c7affa9df5a670046fe1c</id><msg>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)</msg><path><editType>edit</editType><file>app/pages/sales/invoices/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path><path><editType>add</editType><file>server/utils/invoices/dhlSurchargeReportData.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/fee-invoice-generator.md</file></path><path><editType>add</editType><file>server/api/invoices/[id]/dhl-surcharge-report.get.ts</file></path><path><editType>add</editType><file>server/utils/invoices/dhlSurchargeReportPdf.ts</file></path><path><editType>edit</editType><file>server/api/fulfillment/generate-fee-report.post.ts</file></path><path><editType>edit</editType><file>app/pages/sales/invoices/[id]/view.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/fulfillment/fee-invoice-generator.md</affectedPath><affectedPath>server/utils/invoices/dhlSurchargeReportData.ts</affectedPath><commitId>a8d99ca4fb8fdf4af8c8329e94976c6fa4cf8b94</commitId><timestamp>1793618803000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>DHL Nachbelastung report: file-name fallback resolves the invoice number for both DHL file-name schemes (mirrors create_fulfillment.py)
</comment><date>2026-11-02 12:26:43 +0100</date><id>a8d99ca4fb8fdf4af8c8329e94976c6fa4cf8b94</id><msg>DHL Nachbelastung report: file-name fallback resolves the invoice number for both DHL file-name schemes (mirrors create_fulfillment.py)</msg><path><editType>edit</editType><file>server/utils/invoices/dhlSurchargeReportData.ts</file></path><path><editType>edit</editType><file>.claude/rules/fulfillment/fee-invoice-generator.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/procurements/my-orders/[id].vue</affectedPath><affectedPath>app/pages/sales/invoices/[id]/edit.vue</affectedPath><affectedPath>.claude/rules/nuxt/nuxt4-conventions.md</affectedPath><affectedPath>app/pages/sales/fulfillment-orders/[id]/edit.vue</affectedPath><commitId>c29d7966d9218de3e0d2eaf201c9fcd9e700e7c2</commitId><timestamp>1793620845000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Fix 500 on hard reload of sales invoice edit (and fulfillment-orders edit, inbound-notification detail): root-level &lt;Teleport to="body"&gt; next to the async &lt;NuxtLayout&gt; hydrated out of order in the prod build (insertBefore … not a child of this node); wrapped in &lt;ClientOnly&gt; like procurements/invoices edit; recipe note in nuxt4-conventions.md
</comment><date>2026-11-02 13:00:45 +0100</date><id>c29d7966d9218de3e0d2eaf201c9fcd9e700e7c2</id><msg>Fix 500 on hard reload of sales invoice edit (and fulfillment-orders edit, inbound-notification detail): root-level &lt;Teleport to="body"&gt; next to the async &lt;NuxtLayout&gt; hydrated out of order in the prod build (insertBefore … not a child of this node); wrapped in &lt;ClientOnly&gt; like procurements/invoices edit; recipe note in nuxt4-conventions.md</msg><path><editType>edit</editType><file>app/pages/sales/invoices/[id]/edit.vue</file></path><path><editType>edit</editType><file>.claude/rules/nuxt/nuxt4-conventions.md</file></path><path><editType>edit</editType><file>app/pages/sales/fulfillment-orders/[id]/edit.vue</file></path><path><editType>edit</editType><file>app/pages/procurements/my-orders/[id].vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>reference/saas/logship-cloud-konzept.pdf</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>reference/saas/logship-cloud-konzept.html</affectedPath><affectedPath>app/pages/mobile/generate-shipments.vue</affectedPath><affectedPath>server/api/requests/requests/browse.get.ts</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><commitId>75e2a35d6209b4fd4d203569e9f121aa74b27f03</commitId><timestamp>1793621603000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-11-02 13:13:23 +0100</date><id>75e2a35d6209b4fd4d203569e9f121aa74b27f03</id><msg>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</msg><path><editType>add</editType><file>reference/saas/logship-cloud-konzept.html</file></path><path><editType>add</editType><file>reference/saas/logship-cloud-konzept.pdf</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>edit</editType><file>server/api/requests/requests/browse.get.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/generate-shipments.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/app/build.gradle</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>server/api/requests/requests/browse.get.ts</affectedPath><commitId>9950ade8f88bf740a22245b600e996f969b704b4</commitId><timestamp>1793623232000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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'
</comment><date>2026-11-02 13:40:32 +0100</date><id>9950ade8f88bf740a22245b600e996f969b704b4</id><msg>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'</msg><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>server/api/requests/requests/browse.get.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>app/components/mobile/CameraCapture.vue</affectedPath><commitId>efa639ef0dbff30aa2bada22de90d11d93a114ad</commitId><timestamp>1793623380000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Mobile tasks: 'Foto aufnehmen' uses a new in-app getUserMedia camera overlay (&lt;MobileCameraCapture&gt;, ported from the receive page) instead of &lt;input capture=environment&gt;, 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
</comment><date>2026-11-02 13:43:00 +0100</date><id>efa639ef0dbff30aa2bada22de90d11d93a114ad</id><msg>Mobile tasks: 'Foto aufnehmen' uses a new in-app getUserMedia camera overlay (&lt;MobileCameraCapture&gt;, ported from the receive page) instead of &lt;input capture=environment&gt;, 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</msg><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path><path><editType>add</editType><file>app/components/mobile/CameraCapture.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>android/update-files/version.json</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>app/pages/mobile/tasks.vue</affectedPath><affectedPath>server/api/requests/requests/browse.get.ts</affectedPath><commitId>c8f25c2067e77798abbfb3d0d7fb7ecf2bead84e</commitId><timestamp>1793623812000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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)'
</comment><date>2026-11-02 13:50:12 +0100</date><id>c8f25c2067e77798abbfb3d0d7fb7ecf2bead84e</id><msg>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)'</msg><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>edit</editType><file>server/api/requests/requests/browse.get.ts</file></path><path><editType>edit</editType><file>app/pages/mobile/tasks.vue</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/pages/users/organizations/[id]/edit.vue</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_Lines.jrxml</affectedPath><affectedPath>reference/jasper-reports/invoice/Letterhead_Footer.jrxml</affectedPath><affectedPath>app/pages/users/organizations/create.vue</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_Address.jrxml</affectedPath><affectedPath>server/api/admin/organizations/[id]/organization-info/index.put.ts</affectedPath><affectedPath>.claude/rules/printing/jasper-shipment-report.md</affectedPath><affectedPath>app/components/admin/OrgFormField.vue</affectedPath><affectedPath>server/utils/orgInfoPayload.ts</affectedPath><affectedPath>reference/jasper-reports/README.md</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_Document.jrxml</affectedPath><affectedPath>app/composables/useOrganizationForm.ts</affectedPath><affectedPath>server/api/admin/organizations/store.post.ts</affectedPath><affectedPath>app/pages/users/organizations/index.vue</affectedPath><affectedPath>server/api/admin/organizations/update.put.ts</affectedPath><affectedPath>app/pages/users/organizations/[id]/duplicate.vue</affectedPath><affectedPath>app/components/admin/OrganizationForm.vue</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_OrgInfoblock.jrxml</affectedPath><affectedPath>reference/jasper-reports/invoice/C_Invoice_TaxLines.jrxml</affectedPath><commitId>f1e371daca5a2d57ba1497c1d9a55dea31797678</commitId><timestamp>1793630440000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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): &lt;AdminOrganizationForm&gt; on Nuxt UI (hero with logo
tile + upload/remove, tabs Stammdaten / Briefkopf &amp; Belege / Adresse / Logistik &amp; 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.
</comment><date>2026-11-02 15:40:40 +0100</date><id>f1e371daca5a2d57ba1497c1d9a55dea31797678</id><msg>Invoice Jasper logo on black fixed + organization page rebuilt (full AD_Org/AD_OrgInfo CRUD, logo upload, Nuxt UI)</msg><path><editType>edit</editType><file>server/api/admin/organizations/[id]/organization-info/index.put.ts</file></path><path><editType>edit</editType><file>app/pages/users/organizations/create.vue</file></path><path><editType>edit</editType><file>app/pages/users/organizations/index.vue</file></path><path><editType>add</editType><file>app/components/admin/OrgFormField.vue</file></path><path><editType>edit</editType><file>reference/jasper-reports/README.md</file></path><path><editType>edit</editType><file>app/pages/users/organizations/[id]/edit.vue</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_Address.jrxml</file></path><path><editType>add</editType><file>app/composables/useOrganizationForm.ts</file></path><path><editType>add</editType><file>server/utils/orgInfoPayload.ts</file></path><path><editType>edit</editType><file>app/pages/users/organizations/[id]/duplicate.vue</file></path><path><editType>edit</editType><file>server/api/admin/organizations/store.post.ts</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_Lines.jrxml</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_Document.jrxml</file></path><path><editType>edit</editType><file>.claude/rules/printing/jasper-shipment-report.md</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_OrgInfoblock.jrxml</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/Letterhead_Footer.jrxml</file></path><path><editType>edit</editType><file>app/components/admin/OrganizationForm.vue</file></path><path><editType>add</editType><file>reference/jasper-reports/invoice/C_Invoice_TaxLines.jrxml</file></path><path><editType>edit</editType><file>server/api/admin/organizations/update.put.ts</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>app/components/leads/CloseLeadModal.vue</affectedPath><affectedPath>app/components/AgGrid/AgLeadExpireToggle.vue</affectedPath><affectedPath>app/pages/users/leads/index.vue</affectedPath><affectedPath>app/assets/langs/shared.js</affectedPath><commitId>c83fc53be899ebea1a71e35b67602349373e9463</commitId><timestamp>1793631086000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>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
</comment><date>2026-11-02 15:51:26 +0100</date><id>c83fc53be899ebea1a71e35b67602349373e9463</id><msg>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</msg><path><editType>edit</editType><file>app/components/AgGrid/AgLeadExpireToggle.vue</file></path><path><editType>add</editType><file>app/components/leads/CloseLeadModal.vue</file></path><path><editType>edit</editType><file>app/pages/users/leads/index.vue</file></path><path><editType>edit</editType><file>app/assets/langs/shared.js</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.claude/rules/leads/crm-qualification.md</affectedPath><commitId>f0ce63aca1642654bcefe3180aa896635c2592c8</commitId><timestamp>1793631093000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Recipe: leads list close-lead modal
</comment><date>2026-11-02 15:51:33 +0100</date><id>f0ce63aca1642654bcefe3180aa896635c2592c8</id><msg>Recipe: leads list close-lead modal</msg><path><editType>edit</editType><file>.claude/rules/leads/crm-qualification.md</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>package-lock.json</affectedPath><affectedPath>app/composables/states.ts</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core.js</affectedPath><affectedPath>app/components/BarcodeScanner.vue</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Core.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.worker.js</affectedPath><affectedPath>app/pages/mobile/picklist.vue</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd.wasm</affectedPath><affectedPath>app/composables/useBarcodeScanner.js</affectedPath><affectedPath>android/update-files/version.json</affectedPath><affectedPath>public/scanbot/ScanbotSDK.ui2.min.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.wasm</affectedPath><affectedPath>nuxt.config.ts</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.worker.js</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.worker.js</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.wasm</affectedPath><affectedPath>public/scanbot/ScanbotSDK.min.js</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Core-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Core.js</affectedPath><affectedPath>public/scanbot/ScanbotSDK.ui2.min.js.LICENSE.txt</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm.wasm</affectedPath><affectedPath>android/app/build.gradle</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd.js</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm.wasm</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd.wasm</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.js</affectedPath><affectedPath>app/pages/mobile/index.vue</affectedPath><affectedPath>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.wasm</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm.wasm</affectedPath><affectedPath>package.json</affectedPath><affectedPath>public/scanbot/bin/complete/ScanbotSDK.Core-simd.js</affectedPath><affectedPath>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd.wasm</affectedPath><commitId>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</commitId><timestamp>1793658994000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@younex.de</authorEmail><comment>Replace mobile barcode scanner with Scanbot SDK
</comment><date>2026-11-02 23:36:34 +0100</date><id>6c162c77f5a03aa47c28c57f70d9b6dbaf05c278</id><msg>Replace mobile barcode scanner with Scanbot SDK</msg><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm.wasm</file></path><path><editType>add</editType><file>public/scanbot/ScanbotSDK.ui2.min.js.LICENSE.txt</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.worker.js</file></path><path><editType>edit</editType><file>android/app/build.gradle</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm-simd-threads.wasm</file></path><path><editType>edit</editType><file>app/components/BarcodeScanner.vue</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Core.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm.wasm</file></path><path><editType>add</editType><file>public/scanbot/ScanbotSDK.min.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Core-simd.js</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core.js</file></path><path><editType>edit</editType><file>app/composables/useBarcodeScanner.js</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.worker.js</file></path><path><editType>edit</editType><file>app/composables/states.ts</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Asm.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Core-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Core-simd.js</file></path><path><editType>edit</editType><file>package-lock.json</file></path><path><editType>edit</editType><file>package.json</file></path><path><editType>add</editType><file>public/scanbot/ScanbotSDK.ui2.min.js</file></path><path><editType>edit</editType><file>android/update-files/version.json</file></path><path><editType>edit</editType><file>app/pages/mobile/index.vue</file></path><path><editType>edit</editType><file>app/pages/mobile/picklist.vue</file></path><path><editType>add</editType><file>public/scanbot/bin/barcode-scanner/ScanbotSDK.Core-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/complete/ScanbotSDK.Asm-simd-threads.wasm</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.worker.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Asm-simd-threads.js</file></path><path><editType>add</editType><file>public/scanbot/bin/document-scanner/ScanbotSDK.Core.js</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit></lastSuccessfulBuild><lastUnsuccessfulBuild _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></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><building>false</building><displayName>#611</displayName><duration>200</duration><estimatedDuration>61562</estimatedDuration><fullDisplayName>build-logship-frontend #611</fullDisplayName><id>611</id><inProgress>false</inProgress><keepLog>false</keepLog><number>611</number><queueId>5105</queueId><result>FAILURE</result><timestamp>1778544000931</timestamp><url>https://jenkins.younex.de/job/build-logship-frontend/611/</url><builtOn></builtOn><changeSet _class='hudson.scm.EmptyChangeLogSet'></changeSet></lastUnsuccessfulBuild><nextBuildNumber>788</nextBuildNumber><concurrentBuild>false</concurrentBuild><disabled>false</disabled><scm _class='hudson.plugins.git.GitSCM'><browser _class='hudson.plugins.git.browser.GithubWeb'></browser><type>hudson.plugins.git.GitSCM</type><branche></branche><mergeOptions><fastForwardMode>--ff</fastForwardMode><mergeStrategy>default</mergeStrategy></mergeOptions><userRemoteConfig></userRemoteConfig></scm></freeStyleProject>