Browse code

Implement status to fe booking list

Benjamin Roth authored on05/09/2024 17:50:34
Showing6 changed files
... ...
@@ -22,3 +22,9 @@ $GLOBALS['TL_LANG']['REF']['wa_approval'] = [
22 22
     '0' => 'abgelehnt',
23 23
     '1' => 'angenommen',
24 24
 ];
25
+
26
+$GLOBALS['TL_LANG']['MSC']['wa_approval_status'] = [
27
+    'pending' => 'Freigabe ausstehend',
28
+    'canceled' => 'abgelehnt',
29
+    'approved' => 'angenommen',
30
+];
25 31
new file mode 100644
... ...
@@ -0,0 +1,20 @@
1
+<script>
2
+
3
+    (function ($) {
4
+
5
+        var messageModal = new jBox('Modal', {
6
+            closeButton: 'box',
7
+            content: '<div class="toast toast--{{ type }} mx-0"><p>{{ content }}</p></div>',
8
+            maxWidth: 650,
9
+            minWidth: 100,
10
+            minHeight: 100,
11
+            width: 650,
12
+            zIndex: 'auto',
13
+            addClass: '',
14
+            onCloseComplete: () => {
15
+                messageModal.destroy();
16
+            }
17
+        }).open();
18
+
19
+    })(jQuery);
20
+</script>
... ...
@@ -80,10 +80,10 @@
80 80
                                 {% set status = 'pending' %}
81 81
                             {% endif %}
82 82
 
83
-                            <li class="row u-items-center p-0 status status--{{ status }}">
83
+                            <li class="row u-items-center p-0 py-1 status status--{{ status }}">
84 84
                                 <div class="col-1">
85 85
                                     <div class="u-flex u-items-center u-gap-1">
86
-                                        <i class="status-icon">Blah</i>
86
+                                        <i class="status-icon">{{ ('MSC.wa_approval_status.'~status)|trans([], 'contao_default') }}</i>
87 87
                                     </div>
88 88
                                 </div>
89 89
                                 <div class="col-2">
... ...
@@ -99,7 +99,7 @@
99 99
                                     </div>
100 100
                                 </div>
101 101
                                 <div class="col u-text-right">
102
-                                    <div><a hx-get="/_ajax/vr_wa/v1/slot?do=booking&id={{ reservation.id }}" hx-target="body" hx-swap="beforeend" href="javascript:;" class="btn btn--sm m-0">Bearbeiten</a></div>
102
+                                    {% if reservation.approved != '0' %}<div><a hx-get="/_ajax/vr_wa/v1/slot?do=booking&id={{ reservation.id }}" hx-target="body" hx-swap="beforeend" href="javascript:;" class="btn btn--sm m-0">Bearbeiten</a></div>{% endif %}
103 103
                                 </div>
104 104
                             </li>
105 105
                         {% endfor %}
... ...
@@ -3,14 +3,48 @@
3 3
     {% block content %}
4 4
         {% if days is defined and days|length %}
5 5
             <div class="list">
6
+                <div class="u-flex u-items-center u-justify-flex-end u-gap-2 px-1 text-sm">
7
+                    <div><strong>Legende:</strong></div>
8
+                    <div class="u-flex u-items-center u-gap-1">
9
+                        <i class="status-icon status--approved status--small"></i>
10
+                        angenommen
11
+                    </div>
12
+                    <div class="u-flex u-items-center u-gap-1">
13
+                        <i class="status-icon status--pending status--small"></i>
14
+                        Freigabe ausstehend
15
+                    </div>
16
+                    <div class="u-flex u-items-center u-gap-1">
17
+                        <i class="status-icon status--canceled status--small"></i>
18
+                        abgelehnt
19
+                    </div>
20
+                </div>
6 21
                 {% for day,bookings in days %}
7 22
                     <h3 class="toggler-dis u-flex u-items-center mt-2">{{ day|date('d.m.Y') }}</h3>
8 23
                     <div class="accordion-dis">
9 24
                         <div class="bookings">
10 25
                             {% for booking in bookings %}
11
-                                <div class="row py-2 u-flex-nowrap-md u-items-center">
12
-                                    <div class="col-12">
26
+                                {% if booking.approved == '1' %}
27
+                                    {% set status = 'approved' %}
28
+                                {% elseif booking.approved == '0' %}
29
+                                    {% set status = 'canceled' %}
30
+                                {% else %}
31
+                                    {% set status = 'pending' %}
32
+                                {% endif %}
33
+                                <div class="row py-2 mb-1 u-flex-nowrap-md u-items-center status status--{{ status }}">
34
+                                    {#<div class="col-1">
35
+                                        <div class="u-flex u-items-center u-justify-center">
36
+                                            <i class="status-icon" title="{{ ('MSC.wa_approval_status.'~status)|trans([], 'contao_default') }}"></i>
37
+                                        </div>
38
+                                    </div>#}
39
+                                    <div class="col-11">
13 40
                                         <div class="grid-md u-gap-1">
41
+                                            <div class="grid-c-12 bg-white p-1">
42
+                                                <div class="u-flex u-flex-wrap u-gap-1">
43
+                                                    <i class="status-icon"></i>
44
+                                                    {{ ('MSC.wa_approval_status.'~status)|trans([], 'contao_default') }}
45
+                                                </div>
46
+                                            </div>
47
+
14 48
                                             <div class="grid-c-3 time bg-white p-1">
15 49
                                                 <div class="u-flex u-items-center u-gap-1">
16 50
                                                     <i class="icon-uhr-outline"></i>
... ...
@@ -68,7 +102,7 @@
68 102
                                     </div>
69 103
 
70 104
                                     <div class="col u-text-right u-text-nowrap action">
71
-                                        <a hx-get="/_ajax/vr_wa/v1/slot?do=booking&id={{ booking.id }}" hx-target="body" hx-swap="beforeend" href="javascript:;" class="btn btn--sm btn-info m-0">Ändern</a>
105
+                                        {% if booking.approved != '0' %}<a hx-get="/_ajax/vr_wa/v1/slot?do=booking&id={{ booking.id }}" hx-target="body" hx-swap="beforeend" href="javascript:;" class="btn btn--sm btn-info m-0">Ändern</a>{% endif %}
72 106
                                         <a hx-get="/_ajax/vr_wa/v1/slot?do=delete&id={{ booking.id }}" hx-target="body" hx-swap="beforeend" hx-confirm="Sind Sie sicher, dass Sie diese Reservierung löschen möchten?" href="javascript:;" class="btn btn--sm btn-danger m-0">Löschen</a>
73 107
                                     </div>
74 108
                                 </div>
... ...
@@ -279,6 +279,11 @@ class SlotAjaxController extends AbstractController
279 279
             return new Response('Could not load booking data',500);
280 280
         }
281 281
 
282
+        if ($Booking->approved === '0')
283
+        {
284
+            return $this->render('@Contao/modal_message.html.twig',['type'=>'danger','content'=>'Diese Buchungsanfrage wurde abgelehnt und kann nicht mehr geändert werden.']);
285
+        }
286
+
282 287
         $objFile = FilesModel::findByUuid($Booking->upload);
283 288
 
284 289
         if (!empty($_REQUEST['deleteFile']) && $_REQUEST['deleteFile'] && $objFile !== null)
... ...
@@ -125,7 +125,7 @@ class WeinanlieferungSlotsModel extends Model
125 125
         /** @var Connection $db */
126 126
         $db = Controller::getContainer()->get('database_connection');
127 127
 
128
-        $ReservedBehaelter = $db->prepare("SELECT SUM(behaelter) FROM tl_vr_wa_reservation WHERE pid = ?")
128
+        $ReservedBehaelter = $db->prepare("SELECT SUM(behaelter) FROM tl_vr_wa_reservation WHERE pid = ? AND approved != '0'")
129 129
             ->executeQuery([$this->id]);
130 130
 
131 131
         $intReserved = $ReservedBehaelter->fetchOne();
... ...
@@ -151,7 +151,8 @@ class WeinanlieferungSlotsModel extends Model
151 151
         $query = $db->createQueryBuilder()
152 152
             ->from("tl_vr_wa_reservation")
153 153
             ->addSelect("SUM(behaelter)")
154
-            ->andWhere("pid = :pid");
154
+            ->andWhere("pid = :pid")
155
+            ->andWhere("approved != '0'");
155 156
 
156 157
         $arrParams = ['pid'=>$this->id];
157 158