{% block content %}
{% if modal %}<div class="modal-content">{% endif %}
<div id="wa-booking-{{ id }}" hx-target="this" hx-swap="outerHTML" class="frame">
<div class="frame__header">
<h3>Reservierung</h3>
<div class="grid-md u-gap-2">
<div class="grid-c-6 mb-2 mb-0-md">
<div class="u-flex u-items-center u-gap-1">
<i class="icon-behaelter-outline"></i>
<div class="t-label">Gebuchte Behälterkapazität</div>
</div>
<div class="">{{ buchung.behaelter }}</div>
</div>
{% if buchung is defined %}
<div class="grid-c-6 mb-2 mb-0-md">
<div class="u-flex u-items-center u-gap-1">
<i class="icon-behaelter-outline"></i>
<div class="t-label">Einheit</div>
</div>
{% set uTitle = buchung.unit_title|default('Behälter') %}
{% set uAmount = buchung.unit_amount_display|default(0) %}
{% if uAmount > 0 %}
<div class="">{{ uAmount }} × {{ uTitle }}</div>
{% else %}
<div class="">{{ buchung.behaelter }} × {{ 'Behälter' }}</div>
{% endif %}
</div>
{% endif %}
<div class="grid-c-6 mb-2 mb-0-md">
<div class="u-flex u-items-center u-gap-1">
<i class="icon-uhr-outline"></i>
<div class="t-label">Tag/Urzeit</div>
</div>
<div class="">{{ slot.time|date('d.m.Y H:i') }}</div>
</div>
<div class="grid-c-6 mb-2 mb-0-md">
<div class="u-flex u-items-center u-gap-1">
<i class="icon-standort-outline"></i>
<div class="t-label">Standort</div>
</div>
<div class="">{{ standort.title }}</div>
</div>
{% if slot.anmerkungen %}
<div class="grid-c-12 mb-2 mb-0-md">
<div class="u-flex u-items-center u-gap-1">
<i class="icon-info-outline"></i>
<div class="t-label">Anmerkungen</div>
</div>
{{ slot.anmerkungen|raw }}
</div>
{% endif %}
</div>
</div>
<div class="divider m-0 mb-2"></div>
<div class="frame__body">
<h3>Reservierung ändern</h3>
{% if toast is defined %}
{{ toast|raw }}
{% endif %}
<form hx-post="/_ajax/vr_wa/v1/slot?do=updateReservation" enctype="multipart/form-data">
<input type="hidden" name="id" value="{{ id }}">
<fieldset>
<label for="bok-unit"><strong>Einheit</strong><sup class="text-danger">*</sup></label>
<select id="bok-unit" name="unit_id" required>
{% for unit in buchen.units %}
<option value="{{ unit.id }}" data-multiplier="{{ unit.multiplier }}"{% if buchung.unit_id == unit.id %} selected{% endif %}>{{ unit.title }}</option>
{% endfor %}
</select>
</fieldset>
<fieldset>
<label for="bok-unit-amount"><strong>Anzahl</strong><sup class="text-danger">*</sup></label>
<select id="bok-unit-amount" name="unit_amount" required>
</select>
{#<div class="text-sm text-muted">Verbleibende Kapazität (Basis): {{ slot.behaelterAvailable }}</div>#}
</fieldset>
<script>
(function(){
var container = document.getElementById('wa-booking-{{ id }}');
if(!container) return;
var units = {{ buchen.units|json_encode|raw }};
var unitSel = container.querySelector('#bok-unit');
var amtSel = container.querySelector('#bok-unit-amount');
var selectedAmount = {{ buchung.unit_amount|default(0) }};
function fillAmounts(){
if(!unitSel||!amtSel) return;
var id = parseInt(unitSel.value||0,10);
var u = units.find(function(x){return x.id == id;});
if(!u){ amtSel.innerHTML=''; return; }
var html = '<option value="">-</option>';
var base = {{ slot.behaelter|default(0) }};
var booked = {{ slot.behaelterBooked|default(0) }};
var currentBase = {{ buchung.behaelter|default(0) }};
var remainingOcBase = Math.max(0, Math.floor(base * 1.5) - Math.max(0, booked - currentBase));
var overByUnit = Math.floor(remainingOcBase / Math.max(1, parseInt(u.multiplier||1,10)));
var maxByUnit = Math.max(u.max_amount, overByUnit);
for(var i=1;i<=maxByUnit;i++){
var label = ''+i;
if(i > u.max_amount){ label = label + ' ({{ 'MSC.wa_approval_needed'|trans([], 'contao_default') }})'; }
html += '<option value="'+i+'"'+(selectedAmount==i?' selected':'')+'>'+label+'</option>';
}
amtSel.innerHTML = html;
}
if(unitSel){
unitSel.onchange = null;
unitSel.addEventListener('change', function(){ selectedAmount = 0; fillAmounts();});
}
fillAmounts();
})();
</script>
<fieldset>
<legend>Anliefernde Rebsorte(n)<sup class="text-danger">*</sup></legend>
{% for value,label in buchen.sorten %}
<label><input type="checkbox" name="sorten[]" value="{{ value }}"{{ value in buchung.sorten|keys ? ' checked' : '' }}> <span class="checkable">{{ label }}</span></label><br>
{% endfor %}
</fieldset>
<fieldset>
<legend>Ernteart(en)<sup class="text-danger">*</sup></legend>
{% for value,label in buchen.ernteart %}
<label><input type="checkbox" name="ernteart[]" value="{{ value }}"{{ value in buchung.ernteart ? ' checked' : '' }}> <span class="checkable">{{ label }}</span></label><br>
{% endfor %}
</fieldset>
<fieldset>
<legend>Lage(n)<sup class="text-danger">*</sup></legend>
{% for value,label in buchen.lage %}
<label><input type="checkbox" name="lage[]" value="{{ value }}"{{ value in buchung.lage ? ' checked' : '' }}> <span class="checkable">{{ label }}</span></label><br>
{% endfor %}
</fieldset>
{% if file is defined %}
<fieldset>
<div class="t-label">Aktuelle Datei</div>
<div class="u-flex u-items-center u-gap-1"><a href="{{ file.link }}">{{ file.name }}</a> <a href="javascript:;" hx-get="/_ajax/vr_wa/v1/slot?do=booking&id={{ id }}&modal=false&deleteFile=true" hx-target="closest .frame" hx-swap="outerHTML" class="tag tag__close-btn tag--danger tag--xs"></a></div>
</fieldset>
<fieldset>
<label for="bok-upload"><strong>Datei überschreiben</strong></label>
{% else %}
<fieldset>
<label for="bok-upload"><strong>Datei hochladen</strong></label>
{% endif %}
<input type="file" id="bok-upload" name="upload">
</fieldset>
<fieldset>
<button id="bok-submit" type="submit" data-label-oc="Anfragen" data-label-default="Speichern">Speichern</button>
</fieldset>
</form>
</div>
{% if modal %}</div>{% endif %}
{% endblock %}
{% block modal %}
{% if modal %}
<script>
(function ($) {
// Define an idempotent initializer for this modal instance
window.initWaBookingDetails{{ id }} = function() {
var container = document.getElementById('wa-booking-{{ id }}');
if(!container) return;
var units = {{ buchen.units|json_encode|raw }};
var unitSel = container.querySelector('#bok-unit');
var amtSel = container.querySelector('#bok-unit-amount');
var selectedAmount = {{ buchung.unit_amount|default(0) }};
function fillAmounts(){
if(!unitSel||!amtSel) return;
var id = parseInt(unitSel.value||0,10);
var u = units.find(function(x){return x.id == id;});
if(!u){ amtSel.innerHTML=''; return; }
var html = '<option value="">-</option>';
var base = {{ slot.behaelter|default(0) }};
var booked = {{ slot.behaelterBooked|default(0) }};
var currentBase = {{ buchung.behaelter|default(0) }};
var remainingOcBase = Math.max(0, Math.floor(base * 1.5) - Math.max(0, booked - currentBase));
var overByUnit = Math.floor(remainingOcBase / Math.max(1, parseInt(u.multiplier||1,10)));
var maxByUnit = Math.max(u.max_amount, overByUnit);
for(var i=1;i<=maxByUnit;i++){
var label = ''+i;
if(i > u.max_amount){ label = '({{ 'MSC.wa_approval_needed'|trans([], 'contao_default') }}) ' + label; }
html += '<option value="'+i+'"'+(selectedAmount==i?' selected':'')+'>'+label+'</option>';
}
amtSel.innerHTML = html;
}
if(unitSel){
unitSel.onchange = null;
unitSel.addEventListener('change', function(){ selectedAmount = 0; fillAmounts();});
}
fillAmounts();
};
window.modals = window.modals || []
window.modals.wa_bookings = window.modals.wa_bookings || []
if (window.modals.wa_bookings.details{{ id }} === undefined)
{
window.modals.wa_bookings.details{{ id }} = new jBox('Modal', {
closeButton: 'box',
content: $('#wa-booking-{{ id }}'),
maxWidth: 650,
minWidth: 100,
minHeight: 100,
width: 650,
overlay: true,
closeOnClick: false,
zIndex: 'auto',
addClass: '',
onOpen: function(){
if (window.initWaBookingDetails{{ id }}) { window.initWaBookingDetails{{ id }}(); }
}
}).open();
} else {
window.modals.wa_bookings.details{{ id }}.content.empty();
window.modals.wa_bookings.details{{ id }}.setContent($('#wa-booking-{{ id }}')).open();
if (window.initWaBookingDetails{{ id }}) { window.initWaBookingDetails{{ id }}(); }
}
})(jQuery);
</script>
{% endif %}
{% endblock %}