... | ... |
@@ -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 & 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, |