Browse code

Lot's of changes and improvements

Benjamin Roth authored on29/08/2023 15:05:02
Showing11 changed files
... ...
@@ -4,28 +4,47 @@
4 4
         <div class="frame__header">
5 5
             <h3>Reservierung</h3>
6 6
             <div class="row">
7
-                <div class="col">
8
-                    <i class="icon-uhr-outline u-justify-center"></i>
9
-                    <div class="t-label">Tag/Urzeit</div>
7
+                <div class="col-md-6">
8
+                    <div class="u-flex u-items-center u-gap-1">
9
+                        <i class="icon-uhr-outline"></i>
10
+                        <div class="t-label">Tag/Urzeit</div>
11
+                    </div>
10 12
                     <div class="">{{ slot.time|date('d.m.Y H:i') }}</div>
11 13
                 </div>
12 14
 
13
-                <div class="col">
14
-                    <i class="icon-behaelter-outline u-justify-center"></i>
15
-                    <div class="t-label">Verfügbare Behälterkapazität</div>
16
-                    <div class="">{{ buchung.behaelter }}</div>
15
+                <div class="col-md-6">
16
+                    <div class="u-flex u-items-center u-gap-1">
17
+                        <i class="icon-uhr-standort"></i>
18
+                        <div class="t-label">Standort</div>
19
+                    </div>
20
+                    <div class="">{{ standort.title }}</div>
21
+                </div>
22
+            </div>
23
+
24
+            <div class="row">
25
+                <div class="col-md-6">
26
+                    <div class="u-flex u-items-center u-gap-1">
27
+                        <i class="icon-behaelter-outline"></i>
28
+                        <div class="t-label">Verfügbare Behälterkapazität</div>
29
+                    </div>
30
+                    <div class="">{{ slot.behaelterAvailable }}</div>
17 31
                 </div>
18 32
 
19
-                <div class="col">
20
-                    <i class="icon-reben-outline u-justify-center"></i>
21
-                    <div class="t-label">Verarbeitete Sorten</div>
22
-                    <div class="">{{ buchung.sorten|join(', ') }}</div>
33
+                <div class="col-md-6">
34
+                    <div class="u-flex u-items-center u-gap-1">
35
+                        <i class="icon-reben-outline"></i>
36
+                        <div class="t-label">Verarbeitete Sorten</div>
37
+                    </div>
38
+                    <div class="">{{ slot.sorte|join(', ') }}</div>
23 39
                 </div>
24 40
             </div>
25 41
 
26 42
             {% if slot.anmerkungen %}
27 43
                 <div>
28
-                    <div class="t-label">Anmerkungen</div>
44
+                    <div class="u-flex u-items-center u-gap-1">
45
+                        <i class="icon-info-outline"></i>
46
+                        <div class="t-label">Anmerkungen</div>
47
+                    </div>
29 48
                     {{ slot.anmerkungen|raw }}
30 49
                 </div>
31 50
             {% endif %}
32 51
new file mode 100644
... ...
@@ -0,0 +1,86 @@
1
+{% block content %}
2
+    {% if modal %}<div class="modal-content">{% endif %}
3
+        <div id="wa-slot-annotation-{{ id }}" class="frame">
4
+            <div class="frame__header">
5
+                <h3>Info</h3>
6
+                <div class="row">
7
+                    <div class="col-md-6">
8
+                        <div class="u-flex u-items-center u-gap-1">
9
+                            <i class="icon-uhr-outline"></i>
10
+                            <div class="t-label">Tag/Urzeit</div>
11
+                        </div>
12
+                        <div class="">{{ slot.time|date('d.m.Y H:i') }}</div>
13
+                    </div>
14
+
15
+                    <div class="col-md-6">
16
+                        <div class="u-flex u-items-center u-gap-1">
17
+                            <i class="icon-uhr-standort"></i>
18
+                            <div class="t-label">Standort</div>
19
+                        </div>
20
+                        <div class="">{{ standort.title }}</div>
21
+                    </div>
22
+                </div>
23
+
24
+                <div class="row">
25
+                    <div class="col-md-6">
26
+                        <div class="u-flex u-items-center u-gap-1">
27
+                            <i class="icon-behaelter-outline"></i>
28
+                            <div class="t-label">Verfügbare Behälterkapazität</div>
29
+                        </div>
30
+                        <div class="">{{ slot.behaelterAvailable }}</div>
31
+                    </div>
32
+
33
+                    <div class="col-md-6">
34
+                        <div class="u-flex u-items-center u-gap-1">
35
+                            <i class="icon-reben-outline"></i>
36
+                            <div class="t-label">Verarbeitete Sorten</div>
37
+                        </div>
38
+                        <div class="">{{ slot.sorte|join(', ') }}</div>
39
+                    </div>
40
+                </div>
41
+
42
+                {% if slot.anmerkungen %}
43
+                    <div>
44
+                        <div class="u-flex u-items-center u-gap-1">
45
+                            <i class="icon-info-outline"></i>
46
+                            <div class="t-label">Anmerkungen</div>
47
+                        </div>
48
+                        {{ slot.anmerkungen|raw }}
49
+                    </div>
50
+                {% endif %}
51
+            </div>
52
+        </div>
53
+    {% if modal %}</div>{% endif %}
54
+{% endblock %}
55
+
56
+{% block modal %}
57
+    {% if modal %}
58
+        <script>
59
+            (function ($) {
60
+
61
+                window.modals = window.modals || []
62
+                window.modals.wa_slots = window.modals.wa_slots || []
63
+
64
+                if (window.modals.wa_slots.annotation{{ id }} === undefined)
65
+                {
66
+                    window.modals.wa_slots.annotation{{ id }} = new jBox('Modal', {
67
+                    closeButton: 'box',
68
+                    content: $('#wa-slot-annotation-{{ id }}'),
69
+                    maxWidth: 650,
70
+                    minWidth: 100,
71
+                    minHeight: 100,
72
+                    width: 650,
73
+                    overlay: true,
74
+                    closeOnClick: false,
75
+                    zIndex: 'auto',
76
+                    addClass: ''
77
+                }).open();
78
+                } else {
79
+                    window.modals.wa_slots.annotation{{ id }}.content.empty();
80
+                    window.modals.wa_slots.annotation{{ id }}.setContent($('#wa-slot-annotation-{{ id }}')).open();
81
+                }
82
+
83
+            })(jQuery);
84
+        </script>
85
+    {% endif %}
86
+{% endblock %}
... ...
@@ -4,28 +4,47 @@
4 4
             <div class="frame__header">
5 5
                 <h3>Zeitslot</h3>
6 6
                 <div class="row">
7
-                    <div class="col">
8
-                        <i class="icon-uhr-outline u-justify-center"></i>
9
-                        <div class="t-label">Tag/Urzeit</div>
7
+                    <div class="col-md-6">
8
+                        <div class="u-flex u-items-center u-gap-1">
9
+                            <i class="icon-uhr-outline"></i>
10
+                            <div class="t-label">Tag/Urzeit</div>
11
+                        </div>
10 12
                         <div class="">{{ slot.time|date('d.m.Y H:i') }}</div>
11 13
                     </div>
12 14
 
13
-                    <div class="col">
14
-                        <i class="icon-behaelter-outline u-justify-center"></i>
15
-                        <div class="t-label">Verfügbare Behälterkapazität</div>
15
+                    <div class="col-md-6">
16
+                        <div class="u-flex u-items-center u-gap-1">
17
+                            <i class="icon-uhr-standort"></i>
18
+                            <div class="t-label">Standort</div>
19
+                        </div>
20
+                        <div class="">{{ standort.title }}</div>
21
+                    </div>
22
+                </div>
23
+
24
+                <div class="row">
25
+                    <div class="col-md-6">
26
+                        <div class="u-flex u-items-center u-gap-1">
27
+                            <i class="icon-behaelter-outline"></i>
28
+                            <div class="t-label">Verfügbare Behälterkapazität</div>
29
+                        </div>
16 30
                         <div class="">{{ slot.behaelterAvailable }}</div>
17 31
                     </div>
18 32
 
19
-                    <div class="col">
20
-                        <i class="icon-reben-outline u-justify-center"></i>
21
-                        <div class="t-label">Verarbeitete Sorten</div>
33
+                    <div class="col-md-6">
34
+                        <div class="u-flex u-items-center u-gap-1">
35
+                            <i class="icon-reben-outline"></i>
36
+                            <div class="t-label">Verarbeitete Sorten</div>
37
+                        </div>
22 38
                         <div class="">{{ slot.sorte|join(', ') }}</div>
23 39
                     </div>
24 40
                 </div>
25 41
 
26 42
                 {% if slot.anmerkungen %}
27 43
                     <div>
28
-                        <div class="t-label">Anmerkungen</div>
44
+                        <div class="u-flex u-items-center u-gap-1">
45
+                            <i class="icon-info-outline"></i>
46
+                            <div class="t-label">Anmerkungen</div>
47
+                        </div>
29 48
                         {{ slot.anmerkungen|raw }}
30 49
                     </div>
31 50
                 {% endif %}
... ...
@@ -41,10 +60,16 @@
41 60
                         {% for reservation in reservations %}
42 61
                             <li class="row u-items-center p-0">
43 62
                                 <div class="col-2">
44
-                                    <div class="icon-behaelter-outline">{{ reservation.behaelter }}</div>
63
+                                    <div class="u-flex u-items-center u-gap-1">
64
+                                        <i class="icon-behaelter-outline"></i>
65
+                                        {{ reservation.behaelter }}
66
+                                    </div>
45 67
                                 </div>
46 68
                                 <div class="col-6">
47
-                                    <div class="icon-reben-outline">{{ reservation.sorten|join(', ') }}</div>
69
+                                    <div class="u-flex u-items-center u-gap-1">
70
+                                        <i class="icon-reben-outline"></i>
71
+                                        {{ reservation.sorten|join(', ') }}
72
+                                    </div>
48 73
                                 </div>
49 74
                                 <div class="col u-text-right">
50 75
                                     <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--xs m-0">Bearbeiten</a></div>
... ...
@@ -48,6 +48,8 @@
48 48
                         {% if booking.member is not null %}
49 49
                         {% if booking.member.memberno is defined %}<div>{{booking.member.memberno }}</div>{% endif %}
50 50
                             <div>{{ booking.member.firstname }} {{ booking.member.lastname }}</div>
51
+                            {% if booking.member.phone is defined %}<div>{{booking.member.phone }}</div>{% endif %}
52
+                            {% if booking.member.email is defined %}<div><a href="mailto:{{ booking.member.email }}">{{ booking.member.email }}</a></div>{% endif %}
51 53
                         {% endif %}
52 54
                     </div>
53 55
                     <div class="col u-text-right action">
... ...
@@ -9,20 +9,44 @@
9 9
                         <div class="bookings">
10 10
                             {% for booking in bookings %}
11 11
                                 <div class="row u-items-center">
12
-                                    <div class="col-2 time icon-uhr-outline">
13
-                                        <span class="t-label">Uhrzeit</span>
14
-                                        {{ booking.slot.time|date('H:i') }}
15
-                                    </div>
16
-                                    <div class="col-3 behaelter icon-behaelter-outline">
17
-                                        <span class="t-label">Gebuchte Behälterkapazität</span>
18
-                                        {{ booking.behaelter }}
19
-                                    </div>
20
-                                    <div class="col-5 rebsorten icon-reben-outline">
21
-                                        <span class="t-label">Anliefernde Sorten</span>
22
-                                        {{ booking.sorte|join(', ') }}
12
+                                    <div class="col-10">
13
+                                        <div class="row">
14
+                                            <div class="col-3 time pl-0">
15
+                                                <div class="icon-uhr-outline u-flex u-items-center u-gap-1">
16
+                                                    <span class="t-label">Uhrzeit</span>
17
+                                                    {{ booking.slot.time|date('H:i') }}
18
+                                                </div>
19
+                                                <div class="icon-uhr-standort u-flex u-items-center u-gap-1">
20
+                                                    <span class="t-label">Standort</span>
21
+                                                    {{ booking.standort }}
22
+                                                </div>
23
+                                            </div>
24
+                                            <div class="col-3 behaelter">
25
+                                                <div class="icon-behaelter-outline u-flex u-items-center u-gap-1">
26
+                                                    <span class="t-label">Gebuchte Behälterkapazität</span>
27
+                                                    {{ booking.behaelter }}
28
+                                                </div>
29
+                                            </div>
30
+                                            <div class="col-6 rebsorten pr-0">
31
+                                                <div class="icon-reben-outline u-flex u-items-center u-gap-1">
32
+                                                    <div class="t-label">Anliefernde Sorten</div>
33
+                                                </div>
34
+                                                {{ booking.sorte|join(', ') }}
35
+                                            </div>
36
+                                            {% if booking.slot.anmerkungen is defined and booking.slot.anmerkungen %}
37
+                                                <div class="col-12 px-0">
38
+                                                    <div class="icon-info-outline u-flex u-items-center u-gap-1">
39
+                                                        <span class="t-label">Anmerkungen</span>
40
+                                                    </div>
41
+                                                    {{ booking.slot.anmerkungen|raw }}
42
+                                                    <a hx-get="/_ajax/vr_wa/v1/slot?do=annotation&id={{ booking.slot.id }}" hx-target="body" hx-swap="beforeend" href="javascript:;">mehr lesen</a>
43
+                                                </div>
44
+                                            {% endif %}
45
+                                        </div>
23 46
                                     </div>
47
+
24 48
                                     <div class="col u-text-right action">
25
-                                        <a hx-get="/_ajax/vr_wa/v1/slot?do=booking&id={{ booking.id }}" hx-target="body" hx-swap="beforeend" href="javascript:;" class="btn btn--xs m-0">Anzeigen</a>
49
+                                        <a hx-get="/_ajax/vr_wa/v1/slot?do=booking&id={{ booking.id }}" hx-target="body" hx-swap="beforeend" href="javascript:;" class="btn btn--xs m-0">Ändern</a>
26 50
                                         <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--xs btn-danger m-0">Löschen</a>
27 51
                                     </div>
28 52
                                 </div>
... ...
@@ -5,15 +5,23 @@
5 5
             <div class="row">
6 6
                 <div class="col-md-3 kapazitaet">
7 7
                     <select name="filter_kapazitaet">
8
-                        <option value="">-</option>
8
+                        <option value="">-- Behälterkapazität --</option>
9 9
                         {% for option in filter.kapazitaet.options %}
10 10
                             <option value="{{ option }}"{% if filter.kapazitaet.selected is defined and filter.kapazitaet.selected == option %} selected{% endif %}>{{ option }}</option>
11 11
                         {% endfor %}
12 12
                     </select>
13 13
                 </div>
14
+                <div class="col-md-3 standort">
15
+                    <select name="filter_standort">
16
+                        <option value="">-- Standort --</option>
17
+                        {% for key, option in filter.standort.options %}
18
+                            <option value="{{ key }}"{% if filter.standort.selected is defined and filter.standort.selected == key %} selected{% endif %}>{{ option }}</option>
19
+                        {% endfor %}
20
+                    </select>
21
+                </div>
14 22
                 <div class="col-md-3 sorte">
15 23
                     <select name="filter_sorte">
16
-                        <option value="">-</option>
24
+                        <option value="">-- Sorte --</option>
17 25
                         {% for key, option in filter.sorte.options %}
18 26
                             <option value="{{ key }}"{% if filter.sorte.selected is defined and filter.sorte.selected == key %} selected{% endif %}>{{ option }}</option>
19 27
                         {% endfor %}
... ...
@@ -21,13 +29,13 @@
21 29
                 </div>
22 30
                 <div class="col-md-3 leseart">
23 31
                     <select name="filter_leseart">
24
-                        <option value="">-</option>
32
+                        <option value="">-- Leseart --</option>
25 33
                         {% for key, option in filter.leseart.options %}
26 34
                             <option value="{{ key }}"{% if filter.leseart.selected is defined and filter.leseart.selected == key %} selected{% endif %}>{{ option }}</option>
27 35
                         {% endfor %}
28 36
                     </select>
29 37
                 </div>
30
-                <div class="col submit"><button class="u-block w-100p">Filter übernehmen</button></div>
38
+{#                <div class="col submit"><button class="u-block w-100p">Filter übernehmen</button></div>#}
31 39
             </div>
32 40
         </form>
33 41
     {% endblock %}
... ...
@@ -41,20 +49,43 @@
41 49
                         <div class="slots">
42 50
                             {% for slot in slots %}
43 51
                                 <div class="row u-items-center{{ not slot.buchbar ? ' error' : '' }}{{ slot.gebucht ? ' booked' : '' }}">
44
-                                    <div class="col-2 time icon-uhr-outline">
45
-                                        <span class="t-label">Uhrzeit</span>
46
-                                        {{ slot.time|date('H:i') }}
47
-                                    </div>
48
-                                    <div class="col-3 behaelter icon-behaelter-outline">
49
-                                        <span class="t-label">Verfügbare Behälterkapazität</span>
50
-                                        {{ slot.behaelterAvailable }}
51
-                                    </div>
52
-                                    <div class="col-5 rebsorten icon-reben-outline">
53
-                                        <span class="t-label">Verarbeitete Sorten</span>
54
-                                        {{ slot.sorte|join(', ') }}
52
+                                    <div class="col-10">
53
+                                        <div class="row">
54
+                                            <div class="col-3 time pl-0">
55
+                                                <div class="icon-uhr-outline u-flex u-items-center u-gap-1">
56
+                                                    <span class="t-label">Uhrzeit</span>
57
+                                                    {{ slot.time|date('H:i') }}
58
+                                                </div>
59
+                                                <div class="icon-uhr-standort u-flex u-items-center u-gap-1">
60
+                                                    <span class="t-label">Standort</span>
61
+                                                    {{ slot.standort }}
62
+                                                </div>
63
+                                            </div>
64
+                                            <div class="col-3 behaelter">
65
+                                                <div class="icon-behaelter-outline u-flex u-items-center u-gap-1">
66
+                                                    <span class="t-label">Verfügbare Behälterkapazität</span>
67
+                                                    {{ slot.behaelterAvailable }}
68
+                                                </div>
69
+                                            </div>
70
+                                            <div class="col-6 rebsorten pr-0">
71
+                                                <div class="icon-reben-outline u-flex u-items-center u-gap-1">
72
+                                                    <div class="t-label">Verarbeitete Sorten</div>
73
+                                                </div>
74
+                                                {{ slot.sorte|join(', ') }}
75
+                                            </div>
76
+                                            {% if slot.anmerkungen is defined and slot.anmerkungen %}
77
+                                                <div class="col-12 px-0">
78
+                                                    <div class="icon-info-outline u-flex u-items-center u-gap-1">
79
+                                                        <span class="t-label">Anmerkungen</span>
80
+                                                    </div>
81
+                                                    {{ slot.anmerkungen|raw }}
82
+                                                    <a hx-get="/_ajax/vr_wa/v1/slot?do=annotation&id={{ slot.id }}" hx-target="body" hx-swap="beforeend" href="javascript:;">mehr lesen</a>
83
+                                                </div>
84
+                                            {% endif %}
85
+                                        </div>
55 86
                                     </div>
56 87
                                     <div class="col u-text-right action">
57
-                                        <a hx-get="/_ajax/vr_wa/v1/slot?do=details&id={{ slot.id }}" hx-target="body" hx-swap="beforeend" href="javascript:;" class="btn btn--xs m-0">Anzeigen &amp; Buchen</a>
88
+                                        <a hx-get="/_ajax/vr_wa/v1/slot?do=details&id={{ slot.id }}" hx-target="body" hx-swap="beforeend" href="javascript:;" class="btn btn--xs m-0">Buchen</a>
58 89
                                     </div>
59 90
                                 </div>
60 91
                             {% endfor %}
61 92
new file mode 100644
... ...
@@ -0,0 +1 @@
1
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 413 413" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><rect id="Artboard1" x="0" y="0" width="412.5" height="412.5" style="fill:none;"/><g id="Artboard11" serif:id="Artboard1"><g id="Info"><path d="M198.75,135l15,-0c9.946,-0 19.484,3.951 26.517,10.984c7.032,7.032 10.983,16.57 10.983,26.516l-0,107.758c-0,15.046 12.196,27.242 27.242,27.242l0.001,0c13.949,0 25.257,11.308 25.257,25.257l-0,19.743c-0,20.711 -16.789,37.5 -37.5,37.5l-39.407,-0c-36.226,-0 -65.593,-29.367 -65.593,-65.593l-0,-151.907c0,-9.946 3.951,-19.484 10.983,-26.517c7.033,-7.032 16.571,-10.983 26.517,-10.983Zm0,15c-5.967,-0 -11.69,2.371 -15.91,6.59c-4.219,4.22 -6.59,9.943 -6.59,15.91l-0,151.907c-0,27.942 22.651,50.593 50.593,50.593l39.407,0c12.426,0 22.5,-10.074 22.5,-22.5l-0,-19.743c-0,-5.665 -4.592,-10.257 -10.257,-10.257l-0.002,0c-23.329,-0 -42.241,-18.912 -42.241,-42.242l-0,-107.758c0,-5.967 -2.371,-11.69 -6.59,-15.91c-4.22,-4.219 -9.943,-6.59 -15.91,-6.59l-15,0Z"/><path d="M161.25,67.5l0,-15c-0,-9.946 3.951,-19.484 10.983,-26.517c7.033,-7.032 16.571,-10.983 26.517,-10.983l15,-0c9.946,-0 19.484,3.951 26.517,10.983c7.032,7.033 10.983,16.571 10.983,26.517l-0,15c0,9.946 -3.951,19.484 -10.983,26.517c-7.033,7.032 -16.571,10.983 -26.517,10.983l-15,-0c-9.946,0 -19.484,-3.951 -26.517,-10.983c-7.032,-7.033 -10.983,-16.571 -10.983,-26.517Zm15,-0c-0,5.967 2.371,11.69 6.59,15.91c4.22,4.219 9.943,6.59 15.91,6.59l15,-0c5.967,0 11.69,-2.371 15.91,-6.59c4.219,-4.22 6.59,-9.943 6.59,-15.91l-0,-15c0,-5.967 -2.371,-11.69 -6.59,-15.91c-4.22,-4.219 -9.943,-6.59 -15.91,-6.59l-15,-0c-5.967,-0 -11.69,2.371 -15.91,6.59c-4.219,4.22 -6.59,9.943 -6.59,15.91l-0,15Z"/></g></g></svg>
0 2
\ No newline at end of file
1 3
new file mode 100644
... ...
@@ -0,0 +1 @@
1
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 413 413" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><rect id="Artboard1" x="0" y="0" width="412.5" height="412.5" style="fill:none;"/><clipPath id="_clip1"><rect id="Artboard11" serif:id="Artboard1" x="0" y="0" width="412.5" height="412.5"/></clipPath><g clip-path="url(#_clip1)"><g id="Standort"><path d="M193.047,404.619l-108.361,-200.961c-23.078,-42.799 -21.949,-94.582 2.973,-136.335c24.922,-41.752 69.965,-67.323 118.59,-67.323l0.002,-0c48.625,-0 93.668,25.571 118.59,67.323c24.922,41.753 26.051,93.536 2.973,136.335l-108.361,200.961c-2.618,4.855 -7.688,7.881 -13.203,7.881c-5.515,-0 -10.585,-3.026 -13.203,-7.881Zm13.203,-7.119l108.361,-200.961c20.572,-38.151 19.565,-84.309 -2.65,-121.528c-22.215,-37.218 -62.366,-60.011 -105.71,-60.011l-0.002,0c-43.344,-0 -83.495,22.793 -105.71,60.011c-22.215,37.219 -23.222,83.377 -2.65,121.528l108.361,200.961Z"/><path d="M206.25,93.75c22.766,0 41.25,18.484 41.25,41.25c-0,22.766 -18.484,41.25 -41.25,41.25c-22.766,0 -41.25,-18.484 -41.25,-41.25c-0,-22.766 18.484,-41.25 41.25,-41.25Zm-0,15c-14.488,0 -26.25,11.762 -26.25,26.25c-0,14.488 11.762,26.25 26.25,26.25c14.488,0 26.25,-11.762 26.25,-26.25c-0,-14.488 -11.762,-26.25 -26.25,-26.25Z"/></g></g></svg>
0 2
\ No newline at end of file
... ...
@@ -78,6 +78,9 @@ class SlotAjaxController extends AbstractController
78 78
             case 'details':
79 79
                 return $this->renderDetails($blnModal);
80 80
 
81
+            case 'annotation':
82
+                return $this->renderAnnotation($blnModal);
83
+
81 84
             case 'booking':
82 85
                 return $this->renderBooking($blnModal);
83 86
 
... ...
@@ -172,6 +175,48 @@ class SlotAjaxController extends AbstractController
172 175
         return $this->render('@Contao/modal_slot_details.html.twig',$arrData);
173 176
     }
174 177
 
178
+    protected function renderAnnotation(bool $blnModal=true,string $error=null)
179
+    {
180
+        if (empty($_REQUEST['id']))
181
+        {
182
+            return new Response('Required parameter missing',412);
183
+        }
184
+
185
+        if (($Slot = WeinanlieferungSlotsModel::findPublishedById($_REQUEST['id'])) === null)
186
+        {
187
+            return new Response('Could not load slot data',500);
188
+        }
189
+
190
+        // Build data
191
+        $arrSorten = [];
192
+        $Sorten = StringUtil::deserialize($Slot->sorten,true);
193
+        foreach($Sorten as $sorte)
194
+        {
195
+            $objSorte = WeinanlieferungRebsorteModel::findByPk($sorte['sorte']);
196
+            $objLeseart = WeinanlieferungLeseartModel::findByPk($sorte['leseart']);
197
+            $arrSorten[$objSorte->id.','.$objLeseart->id] = ($objSorte !== null  ? $objSorte->title : '') . ' ' . ($objLeseart !== null  ? $objLeseart->title : '');
198
+        }
199
+
200
+        $intAvailableBehaelter = $Slot->getAvailableBehaelter();
201
+
202
+        $arrData = [
203
+            'modal' => $blnModal,
204
+            'id'       => $Slot->id,
205
+            'slot'     => array_merge($Slot->row(),[
206
+                'sorte' => $arrSorten,
207
+                'behaelterAvailable' => $intAvailableBehaelter
208
+            ]),
209
+            'standort' => $Slot->getRelated('pid'),
210
+            'buchen' => [
211
+                'buchbar' => (boolean) $intAvailableBehaelter,
212
+                'behaelter' => range(min($intAvailableBehaelter,1),$intAvailableBehaelter),
213
+                'sorten' => $arrSorten
214
+            ],
215
+        ];
216
+
217
+        return $this->render('@Contao/modal_slot_annotation.html.twig',$arrData);
218
+    }
219
+
175 220
     protected function renderBooking(bool $blnModal=true)
176 221
     {
177 222
         $arrData = [];
... ...
@@ -69,9 +69,18 @@ class WeinanlieferungBookedListModuleController extends AbstractFrontendModuleCo
69 69
                         $arrSorten[$objSorte->id.','.$objLeseart->id] = ($objSorte !== null  ? $objSorte->title : '') . ' ' . ($objLeseart !== null  ? $objLeseart->title : '');
70 70
                     }
71 71
 
72
+                    $strStandort = '';
73
+                    if (($Standort = $Slot->getRelated('pid')) !== null)
74
+                    {
75
+                        $strStandort = $Standort->title;
76
+                    }
77
+
72 78
                     $arrData['days'][$day->dayBegin][] = array_merge($booking->row(), [
73 79
                         'sorte'              => $arrSorten,
74
-                        'slot'  => $Slot->row()
80
+                        'slot'  => array_merge($Slot->row(),[
81
+                            'anmerkungen' => $Slot->anmerkungen ? StringUtil::substr(strip_tags($Slot->anmerkungen),110) : '',
82
+                        ]),
83
+                        'standort' => $strStandort,
75 84
                     ]);
76 85
                 }
77 86
             }
... ...
@@ -30,6 +30,7 @@ use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungLeseartModel;
30 30
 use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungRebsorteModel;
31 31
 use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungReservationModel;
32 32
 use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungSlotsModel;
33
+use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungStandortModel;
33 34
 
34 35
 /**
35 36
  * @FrontendModule(WeinanlieferungSlotsListModuleController::TYPE, category="miscellaneous")
... ...
@@ -60,6 +61,12 @@ class WeinanlieferungSlotsListModuleController extends AbstractFrontendModuleCon
60 61
             $arrOptions['column'][] = '(SELECT tl_vr_wa_slot.behaelter - IFNULL(SUM(tl_vr_wa_reservation.behaelter),0) FROM tl_vr_wa_reservation WHERE tl_vr_wa_reservation.pid = tl_vr_wa_slot.id) >= ?';
61 62
             $arrOptions['value'][] = $_GET['filter_kapazitaet'];
62 63
         }
64
+        if (!empty($_GET['filter_standort']))
65
+        {
66
+            $arrData['filter']['standort']['selected'] = $_GET['filter_standort'];
67
+            $arrOptions['column'][] = 'pid = ?';
68
+            $arrOptions['value'][] = $_GET['filter_standort'];
69
+        }
63 70
         if (!empty($_GET['filter_sorte']) && !empty($_GET['filter_leseart']))
64 71
         {
65 72
             $arrData['filter']['sorte']['selected'] = $_GET['filter_sorte'];
... ...
@@ -80,6 +87,11 @@ class WeinanlieferungSlotsListModuleController extends AbstractFrontendModuleCon
80 87
 
81 88
         $arrData['filter']['kapazitaet']['options'] = range(1,30);
82 89
 
90
+        if (($Standorte = WeinanlieferungStandortModel::findBy(["id IN (".implode(',',$standortIds).")"],null,['order'=>'title ASC'])) !== null)
91
+        {
92
+            $arrData['filter']['standort']['options'] = array_combine($Standorte->fetchEach('id'),$Standorte->fetchEach('title'));
93
+        }
94
+
83 95
         if (($Sorten = WeinanlieferungRebsorteModel::findAll(['order'=>'title ASC'])) !== null)
84 96
         {
85 97
             $arrData['filter']['sorte']['options'] = array_combine($Sorten->fetchEach('id'),$Sorten->fetchEach('title'));
... ...
@@ -107,12 +119,16 @@ class WeinanlieferungSlotsListModuleController extends AbstractFrontendModuleCon
107 119
                     $objLeseart = WeinanlieferungLeseartModel::findByPk($sorte['leseart']);
108 120
                     $arrSorten[] = ($objSorte !== null  ? $objSorte->title : '') . ' ' . ($objLeseart !== null  ? $objLeseart->title : '');
109 121
                 }
110
-                /*if (($Sorten = $slot->getRelated('sorte')) !== null)
122
+
123
+                $strStandort = '';
124
+                if (($Standort = $slot->getRelated('pid')) !== null)
111 125
                 {
112
-                    $arrSorten = $Sorten->fetchEach('title');
113
-                }*/
126
+                    $strStandort = $Standort->title;
127
+                }
114 128
 
115 129
                 $arrData['days'][$day->dayBegin][] = array_merge($slot->row(),[
130
+                    'anmerkungen' => $slot->anmerkungen ? StringUtil::substr(strip_tags($slot->anmerkungen),110) : '',
131
+                    'standort' => $strStandort,
116 132
                     'sorte' => $arrSorten,
117 133
                     'behaelterAvailable' => $intAvailableBehaelter,
118 134
                     'buchbar' => (boolean) $intAvailableBehaelter,