Browse code

Update slot overcapacity request functionality

Benjamin Roth authored on03/09/2024 11:45:17
Showing3 changed files
... ...
@@ -46,7 +46,7 @@
46 46
                     <select id="res-behaelter" name="behaelter" required>
47 47
                         <option value="">-</option>
48 48
                         {% for option in buchen.behaelter %}
49
-                            {% if option > slot.behaelter %}
49
+                            {% if option > slot.behaelterAvailable %}
50 50
                                 <option value="{{ option }}"{{ buchung.behaelter == option ? ' selected' : '' }}>{{ option }} ({{ 'MSC.wa_approval_needed'|trans([], 'contao_default') }})</option>
51 51
                             {% else %}
52 52
                                 <option value="{{ option }}"{{ buchung.behaelter == option ? ' selected' : '' }}>{{ option }}</option>
... ...
@@ -101,6 +101,11 @@
101 101
                 {% if toast is defined %}
102 102
                   {{ toast|raw }}
103 103
                 {% endif %}
104
+                {% if slot.behaelterAvailable < 1 %}
105
+                    <div class="toast toast--warning mx-0">
106
+                        <p class="warning">Für diesen Slot können nur noch Reservierungsanfragen gestellt werden.</p>
107
+                    </div>
108
+                {% endif %}
104 109
                 {% if buchen.buchbar %}
105 110
                     <form hx-post="/_ajax/vr_wa/v1/slot?do=reservate" enctype="multipart/form-data">
106 111
                         <input type="hidden" name="id" value="{{ id }}">
... ...
@@ -167,6 +167,7 @@ class SlotAjaxController extends AbstractController
167 167
             $arrLage = array_combine($Lage->fetchEach('id'),$Lage->fetchEach('title'));
168 168
         }
169 169
 
170
+        $intReservedBehaelter = $Slot->getReservedBehaelter();
170 171
         $intAvailableBehaelter = max(0,$Slot->getAvailableBehaelter());
171 172
 
172 173
         $arrData = [
... ...
@@ -175,14 +176,15 @@ class SlotAjaxController extends AbstractController
175 176
             'slot'     => array_merge($Slot->row(),[
176 177
                 'anmerkungen' => $insertTagService->replace($Slot->anmerkungen ?? ''),
177 178
                 'sorte' => $arrSorten,
178
-                'behaelterAvailable' => $intAvailableBehaelter
179
+                'behaelterAvailable' => $intAvailableBehaelter,
180
+                'behaelterBooked' => $Slot->getReservedBehaelter(),
179 181
             ]),
180 182
             'standort' => $Slot->getRelated('pid'),
181 183
             'lage' => $arrLage,
182 184
             'ernteart' => $arrErnteart,
183 185
             'buchen' => [
184
-                'buchbar' => (boolean) $intAvailableBehaelter,
185
-                'behaelter' => range(min($intAvailableBehaelter,1),$Slot->behaelter*3),
186
+                'buchbar' => (boolean) ($Slot->behaelter*3 > $intReservedBehaelter),
187
+                'behaelter' => range(max($intAvailableBehaelter,1),$Slot->behaelter*3-$intReservedBehaelter),
186 188
                 'sorten' => $arrSorten,
187 189
                 'lage' => $arrLage,
188 190
                 'ernteart' => $arrErnteart,
... ...
@@ -366,7 +368,8 @@ class SlotAjaxController extends AbstractController
366 368
             $arrLagenBooked = explode(',', $Booking->lage);
367 369
         }
368 370
 
369
-        $intAvailableBehaelter = max(0,$Slot->getAvailableBehaelter());
371
+        $intReservedBehaelter = $Slot->getReservedBehaelter();
372
+        $intAvailableBehaelter = max($Booking->behaelter,$Slot->getAvailableBehaelter());
370 373
 
371 374
         $arrData = array_merge($arrData,[
372 375
             'modal' => $blnModal,
... ...
@@ -375,6 +378,7 @@ class SlotAjaxController extends AbstractController
375 378
                 'anmerkungen' => $insertTagService->replace($Slot->anmerkungen ?? ''),
376 379
                 'sorte' => $arrSortenAvailable,
377 380
                 'behaelterAvailable' => $intAvailableBehaelter,
381
+                'behaelterBooked' => $Slot->getReservedBehaelter(),
378 382
             ]),
379 383
             'buchung' => array_merge($Booking->row(),[
380 384
                 'sorten' => $arrSortenBooked,
... ...
@@ -384,7 +388,7 @@ class SlotAjaxController extends AbstractController
384 388
             'standort' => $Slot->getRelated('pid'),
385 389
             'buchen' => [
386 390
                 'buchbar' => (boolean) $intAvailableBehaelter,
387
-                'behaelter' => range(min($intAvailableBehaelter,1),max($intAvailableBehaelter+$Booking->behaelter,$Slot->behaelter*3)),
391
+                'behaelter' => range(min($intAvailableBehaelter,1),$Slot->behaelter*3-$Slot->getReservedBehaelter()+$Booking->behaelter),
388 392
                 'sorten' => $arrSortenAvailable,
389 393
                 'ernteart' => $arrErnteartAvailable,
390 394
                 'lage' => $arrLagenAvailable,
... ...
@@ -434,7 +438,7 @@ class SlotAjaxController extends AbstractController
434 438
         if (($Slot = WeinanlieferungSlotsModel::findByPk($_REQUEST['id'])) !== null)
435 439
         {
436 440
 //            if (Input::post('behaelter') > $Slot->getAvailableBehaelter())
437
-            if (Input::post('behaelter') > $Slot->behaelter*3)
441
+            if (Input::post('behaelter') > $Slot->behaelter*3-$Slot->getReservedBehaelter())
438 442
             {
439 443
                 return $this->renderDetails(false,sprintf('<div class="toast toast--danger mx-0">Fehler: Es sind mittlerweile nur noch %s Behälter verfügbar.</div>',$Slot->getAvailableBehaelter()));
440 444
             }