feat: special treatment of services for participants of age 0-2

This commit is contained in:
Björn Fromme
2026-03-16 12:00:55 +01:00
parent 28c426ca3c
commit cca8554e3d
7 changed files with 635 additions and 18 deletions
+11 -1
View File
@@ -1,3 +1,13 @@
{%- block form_errors -%}
{%- if errors|length > 0 -%}
<ul class="pb-2 px-2">
{%- for error in errors -%}
<li class="text-red-500">{{ error.message }}</li>
{%- endfor -%}
</ul>
{%- endif -%}
{%- endblock form_errors -%}
{%- block form_row -%}
{%- set row_attr = row_attr|merge({ 'class': (row_attr.class|default('') ~ ' mb-4')|trim }) -%}
{%- set widget_attr = {} -%}
@@ -57,7 +67,7 @@
</td>
{% if choiceData %}
<td class="border border-primary-bg p-2 align-top w-24 text-right whitespace-nowrap">
{% if choiceData.price %}
{% if choiceData.price is not null %}
{{ choiceData.price | format_currency('EUR') }}
{% endif %}
</td>
+15 -9
View File
@@ -13,15 +13,17 @@
{# If neither condition is true, don't render anything (truly hidden) #}
{% endmacro %}
{# Macro to render a field or placeholder with consistent fieldset structure #}
{# Macro to render a service field with consistent fieldset/table structure #}
{% macro service_field(form, fieldName, label, options = {}, undefinedLabel = 'Nicht wählbar') %}
{% if form[fieldName] is defined %}
{{ form_row(form[fieldName], options) }}
{% else %}
<fieldset class="mb-1">
<legend class="font-semibold mb-1">{{ label }}</legend>
<div class="text-sm text-gray-500">{{ undefinedLabel }}</div>
</fieldset>
<div class="pb-4">
<fieldset class="border border-primary-bg">
<legend class="w-full bg-primary-bg p-2 font-semibold uppercase">{{ label }}</legend>
<div class="p-2 text-sm text-gray-500">{{ undefinedLabel }}</div>
</fieldset>
</div>
{% endif %}
{% endmacro %}
@@ -43,7 +45,7 @@
{%- endif -%}
</td>
<td class="border border-primary-bg p-2 align-top w-24 text-right whitespace-nowrap">
{% if price %}
{% if price is not null %}
{{ price | format_currency('EUR') }}
{% endif %}
</td>
@@ -76,7 +78,7 @@
{%- endif -%}
</td>
<td class="border border-primary-bg p-2 align-top w-24 text-right whitespace-nowrap">
{% if price %}
{% if price is not null %}
{{ price | format_currency('EUR') }}
{% endif %}
</td>
@@ -116,7 +118,7 @@
{%- endif -%}
</td>
<td class="border border-primary-bg p-2 align-top w-24 text-right whitespace-nowrap">
{% if price %}
{% if price is not null %}
{{ price | format_currency('EUR') }}
{% endif %}
</td>
@@ -313,8 +315,12 @@
) }}
{% endif %}
</table>
{% else %}
{% elseif form.skiPass is defined %}
{# Skipass field exists but no rentals yet - user needs to select skipass first #}
<div class="p-2 text-sm text-gray-500">Bitte zuerst den Skipass auswählen</div>
{% else %}
{# No skipass field (e.g., baby participant) - rentals not available #}
<div class="p-2 text-sm text-gray-500">Nicht wählbar</div>
{% endif %}
</fieldset>
{% if form.rentals is defined %}
+1 -4
View File
@@ -125,10 +125,7 @@
{% for roomPricing in summaryData.pricingData.rooms %}
<tr>
<td class="p-2 align-top">
<div>{{ roomPricing.quantity }}x {{ roomPricing.label }}</div>
{% if summaryData.assignmentCounts[roomPricing.roomId] is defined %}
<div class="text-sm text-gray-600">{{ summaryData.assignmentCounts[roomPricing.roomId] }}x Erwachsener</div>
{% endif %}
{{ roomPricing.quantity }}x {{ roomPricing.label }}
</td>
<td class="p-2 align-top w-24 text-right whitespace-nowrap">
{{ roomPricing.totalPrice | format_currency('EUR') }}