Compare commits

..
1 Commits
Author SHA1 Message Date
AdminandClaude Opus 5.5 a9aa3a38be feat: add a booking event history for admins
Admins get /admin/history: one line per booking created, rescheduled or
released, per series created or ended, and per resource deleted with its
bookings. Sortable by time, kind, resource, booked day and both people;
filterable by period, kinds, who acted and resource type.

Events are snapshots written inside the same transaction as the change,
so a rolled-back booking leaves none and a released booking stays
readable. app:booking-events:prune keeps twelve months and needs a cron
entry on the server.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-16 17:56:41 +02:00
3 changed files with 346 additions and 352 deletions

No files matched your search

+3 -3
View File
@@ -7,14 +7,14 @@
"php": ">=8.5",
"ext-ctype": "*",
"ext-iconv": "*",
"doctrine/doctrine-bundle": "^3.3.4",
"doctrine/doctrine-bundle": "^3.3",
"doctrine/doctrine-migrations-bundle": "^4.0",
"doctrine/orm": "^3.7.5",
"flagception/flagception-bundle": "^6.0",
"knplabs/knp-paginator-bundle": "^6.10",
"league/oauth2-client": "^2.9.1",
"phpdocumentor/reflection-docblock": "^6.0",
"phpstan/phpdoc-parser": "^2.4.0",
"phpstan/phpdoc-parser": "^2.3.6",
"symfony/apache-pack": "*",
"symfony/asset": "7.4.*",
"symfony/asset-mapper": "7.4.*",
@@ -104,7 +104,7 @@
}
},
"require-dev": {
"phpunit/phpunit": "^13.4.5",
"phpunit/phpunit": "^13.4.2",
"symfony/browser-kit": "7.4.*",
"symfony/css-selector": "7.4.*",
"symfony/debug-bundle": "7.4.*",
Generated
+340 -344
View File
File diff suppressed because it is too large. Load diff
+3 -5
View File
@@ -40,12 +40,10 @@
<section>
{% if spot_group.group %}
{% set free = spot_group.freeCount %}
{# Prominent on purpose: desk labels repeat from room to room, so the room is
the only thing telling one "Schreibtisch 1" from the next. #}
<h3 class="!mb-0 pb-2 text-base font-semibold text-gray-900 md:text-lg">
<h3 class="!mb-0 pb-2 text-sm font-semibold text-gray-500 md:text-sm">
{{- spot_group.group.label -}}
{%- if free > 0 %} <span class="text-sm font-normal text-emerald-600">· {{ free }} frei</span>
{%- else %} <span class="text-sm font-normal text-gray-500">· belegt</span>{% endif -%}
{%- if free > 0 %} <span class="text-emerald-600">· {{ free }} frei</span>
{%- else %} <span>· belegt</span>{% endif -%}
</h3>
{% endif %}