fromme
e796dd01ee
feat: admin view listing a travel's mailing recipients from bpn-connect
2026-10-14 12:32:23 +02:00
fromme
fe40e1807e
feat: chatbot trip search finds trips by trip name, hotel name and code
2026-10-13 09:29:27 +02:00
fromme
26d4140c18
feat: trips-only chatbot MCP endpoint without editorial website text
2026-10-12 14:43:46 +02:00
fromme
849a19b67a
fix: exclude cancelled participants' services from price breakdown
2026-10-09 12:33:43 +02:00
fromme
553ec901f3
fix: omit zero-amount surcharges from the booking summary
2026-10-09 12:22:32 +02:00
fromme
3cb1548f2f
fix: give chatbot pickups per-leg surcharges including the return leg
2026-10-09 08:38:57 +02:00
fromme
4ab2714bde
feat: turn search_trips into the website's travel search
2026-10-08 13:14:12 +02:00
fromme
bfdedefae3
feat: give every MCP client its own token, rate limit and log name
2026-10-08 12:37:49 +02:00
fromme
3af41c06ab
feat: let get_trip resolve a date code to its trip and date
2026-10-08 11:46:59 +02:00
fromme
754360605c
fix: leave access denials on stateless firewalls to the plain 401/403
2026-10-08 11:46:59 +02:00
fromme
1b4384e3f3
feat: add MCP server for the website chatbot over a mirrored TYPO3 content feed
2026-10-08 11:46:58 +02:00
fromme
ff7ddf7a9e
feat: drop the TYPO3 api key query parameter
2026-10-08 11:45:24 +02:00
fromme
56af0f921b
fix: stop caching rejected voucher checks, document response codes
2026-10-06 11:29:14 +02:00
fromme
21d756a2e3
feat: fold purchase and promo voucher fields into one code field
2026-10-06 10:41:30 +02:00
fromme
93512b8345
feat: add employee-only supervisor role nominated by crm selection 1487
2026-10-05 17:06:37 +02:00
fromme
627b190fcb
feat: update voucher purchase urls to match established patterns
2026-10-05 09:10:19 +02:00
fromme
b755a6f43e
refactor: split buspro ApiClient into domain clients
2026-10-02 13:55:30 +02:00
fromme
3c81c79819
refactor: move buspro socket framing into SocketTransport
2026-10-02 13:55:04 +02:00
fromme
f3dd122678
feat: voucher purchase flow
2026-10-01 15:03:27 +02:00
fromme
2bb0148e49
chore: replace nelexa/zip with maennchen/zipstream-php
2026-10-01 10:48:49 +02:00
fromme
72ef3ff105
chore: bump project to php 8.5
2026-10-01 09:48:37 +02:00
fromme
56deb1e24b
feat: name the accommodation booking PDF after its record label
2026-10-01 08:46:12 +02:00
fromme
ec10ca3623
feat: offer the accommodation booking PDF download in every status
2026-10-01 08:46:06 +02:00
fromme
eb45693257
feat: panel layout for the accommodation booking edit and detail pages
2026-09-30 18:06:45 +02:00
fromme
7001bc0cf2
feat: split nights off an accommodation booking as separate periods
...
addresses #869f6z36v
2026-09-30 18:06:20 +02:00
fromme
ede8fd840a
fix: emit export pickup times as clock readings without an offset
2026-09-30 14:52:04 +02:00
fromme
1d42565a84
feat: unfiltered product export for the website's catalogue import
2026-09-30 12:19:10 +02:00
fromme
272c811f4f
feat: report the source export timestamp on every travel export page
2026-09-30 12:19:04 +02:00
fromme
c2c55bc8b2
fix: answer null instead of 500 when the export marker is missing
2026-09-30 12:18:59 +02:00
fromme
8a6ce7606f
feat: add a cleanup command for accounts without recent activity
2026-09-29 16:23:32 +02:00
fromme
7dadb6806a
feat: add a paginated travel export for the teamer app
2026-09-29 14:46:36 +02:00
fromme
6b539f43f3
fix: skip travels whose hotel is missing from the master data
2026-09-29 14:46:27 +02:00
fromme
1845441bc2
feat: expose hotel cost unit and iso country code via the api
2026-09-29 14:46:20 +02:00
fromme
d0e7ba017c
fix: resync room selections with travel data before step 2
2026-09-29 10:59:13 +02:00
fromme
f5e6d2105d
feat: make boarding point price levelling switchable
2026-09-29 10:11:03 +02:00
fromme
0c6126010f
fix: always adopt outbound pickup price for inbound when set
2026-09-28 16:33:36 +02:00
fromme
29f295abf6
feat: duplicate an accommodation booking into a new draft
...
addresses #869f6z44f
2026-09-28 08:55:01 +02:00
fromme
2aa98b81fe
feat: dedicated login page for oauth2 logins
2026-09-27 13:43:17 +02:00
fromme
56adf72d12
fix: refuse implausible accommodation booking prices
2026-09-26 15:39:04 +02:00
fromme
773cd4f847
fix: keep post-booking newsletter failures out of the booking flow
2026-09-26 14:00:26 +02:00
fromme
876e69e62c
feat: offer a newsletter opt-in for the other participants
...
addresses #869etn6c5
2026-09-26 13:53:10 +02:00
fromme
96b7b3f451
fix: anonymize user first and last names
2026-09-23 17:22:19 +02:00
fromme
bad916cfb7
feat: identify accounts by a uuid in the oauth2 sub claim
2026-09-23 15:17:09 +02:00
fromme
cc3d32fcbb
feat: gate oauth2 authorization on per-client roles
2026-09-23 13:46:56 +02:00
fromme
ab7d00b35d
feat: emit team admin role in userinfo claims when applicable
2026-09-21 11:43:36 +02:00
fromme and Claude Opus 5
f080d05dd6
fix: normalize the login email case
...
The login address was only trimmed, so the casing somebody happened to type at
their very first login was frozen into the user row forever — createOrUpdateLocalUser()
never wrote the address back. Everything downstream re-sends the stored address
rather than the one just authenticated with, which also leaked that casing into the
OAuth2 email claim and the log identities.
Harmless in practice, since BusPro matches an address case-insensitively and so does
the utf8mb4_unicode_ci column, but it left User out of step with the newsletter
entities, which have always normalized.
Fold the case once in authenticate(), which covers the BusPro calls, the lookup and a
new account alike, and write the address back on every login so an account created
before this converges instead of staying frozen. No backfill: a row nobody logs into
again is matched case-insensitively either way.
Co-Authored-By: Claude Opus 5 <[email protected] >
2026-09-21 10:03:06 +02:00
fromme
00637042e2
chore: adjust tests to changed role labels
2026-09-21 10:02:29 +02:00
fromme
fbb3ebb8c1
fix: make bpn response failures diagnosable
2026-09-19 11:51:15 +02:00
fromme
ec83ad598f
feat: identify the authenticated account in the userinfo claims
2026-09-19 10:54:06 +02:00
fromme
540cd8eeb7
feat: reserve administrative roles for staff email addresses
2026-09-17 18:13:52 +02:00