<freeStyleBuild _class='hudson.model.FreeStyleBuild'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.TimerTrigger$TimerTriggerCause'><shortDescription>Started by timer</shortDescription></cause></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesorigindev _class='hudson.plugins.git.util.Build'><buildNumber>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'><artifactsUrl>https://jenkins.younex.de/job/build-logship-frontend/747/artifact</artifactsUrl><changesUrl>https://jenkins.younex.de/job/build-logship-frontend/changes</changesUrl><displayUrl>https://jenkins.younex.de/job/build-logship-frontend/747/</displayUrl><testsUrl>https://jenkins.younex.de/job/build-logship-frontend/747/testReport</testsUrl></action><building>false</building><displayName>#747</displayName><duration>64719</duration><estimatedDuration>61503</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/composables/useOfferQuote.ts</affectedPath><affectedPath>app/components/offers/ContractModal.vue</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>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/useOfferQuote.ts</file></path><path><editType>edit</editType><file>server/utils/offers/offerConditions.ts</file></path><path><editType>edit</editType><file>app/composables/useOfferForecast.ts</file></path><path><editType>edit</editType><file>app/components/offers/ContractModal.vue</file></path><path><editType>edit</editType><file>app/composables/useOfferContract.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/noreply</absoluteUrl><fullName>noreply</fullName><id>noreply</id></culprit><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName><id>info</id></culprit></freeStyleBuild>