Browse code

Lot's of changes and improvements

Benjamin Roth authored on30/08/2023 17:18:43
Showing25 changed files
... ...
@@ -8,6 +8,7 @@
8 8
  * @license commercial
9 9
  */
10 10
 
11
+use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungLageModel;
11 12
 use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungRebsorteModel;
12 13
 use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungLeseartModel;
13 14
 use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungReservationModel;
... ...
@@ -18,7 +19,7 @@ use Contao\ArrayUtil;
18 19
 ArrayUtil::arrayInsert($GLOBALS['BE_MOD'],1,[
19 20
     'weinanlieferung' => [
20 21
         'weinanlieferung' => [
21
-            'tables'     => array('tl_vr_wa_standort', 'tl_vr_wa_slot', 'tl_vr_wa_rebsorte','tl_vr_wa_leseart','tl_vr_wa_reservation'),
22
+            'tables'     => array('tl_vr_wa_standort', 'tl_vr_wa_slot', 'tl_vr_wa_rebsorte','tl_vr_wa_leseart','tl_vr_wa_lage','tl_vr_wa_reservation'),
22 23
             'stylesheet' => array('bundles/vonrotenbergweinanlieferung/css/backend.css')
23 24
         ]
24 25
     ]
... ...
@@ -29,4 +30,5 @@ $GLOBALS['TL_MODELS']['tl_vr_wa_slot'] = WeinanlieferungSlotsModel::class;
29 30
 $GLOBALS['TL_MODELS']['tl_vr_wa_standort'] = WeinanlieferungStandortModel::class;
30 31
 $GLOBALS['TL_MODELS']['tl_vr_wa_rebsorte'] = WeinanlieferungRebsorteModel::class;
31 32
 $GLOBALS['TL_MODELS']['tl_vr_wa_leseart'] = WeinanlieferungLeseartModel::class;
33
+$GLOBALS['TL_MODELS']['tl_vr_wa_lage'] = WeinanlieferungLageModel::class;
32 34
 $GLOBALS['TL_MODELS']['tl_vr_wa_reservation'] = WeinanlieferungReservationModel::class;
33 35
new file mode 100644
... ...
@@ -0,0 +1,124 @@
1
+<?php
2
+
3
+/**
4
+ * This file is part of contao-weinanlieferung-bundle.
5
+ *
6
+ * (c) vonRotenberg
7
+ *
8
+ * @license commercial
9
+ */
10
+
11
+use Contao\DC_Table;
12
+use Contao\DataContainer;
13
+
14
+$GLOBALS['TL_DCA']['tl_vr_wa_lage'] = array
15
+(
16
+    // Config
17
+    'config' => array
18
+    (
19
+        'dataContainer'    => DC_Table::class,
20
+        'enableVersioning' => true,
21
+        'sql'              => array
22
+        (
23
+            'keys' => array
24
+            (
25
+                'id'  => 'primary'
26
+            )
27
+        )
28
+    ),
29
+
30
+    // List
31
+    'list' => array
32
+    (
33
+        'sorting' => array
34
+        (
35
+            'mode'                    => DataContainer::MODE_SORTED,
36
+            'fields'                  => array('title'),
37
+            'flag'                    => DataContainer::SORT_INITIAL_LETTER_ASC,
38
+            'panelLayout'             => 'limit'
39
+        ),
40
+        'label' => array(
41
+            'fields'                  => array('title'),
42
+            'format'                  => '%s'
43
+        ),
44
+        'global_operations' => array
45
+        (
46
+            'back' => array
47
+            (
48
+                'href'                => 'table=tl_vr_wa_standort',
49
+                'class'               => 'header_back',
50
+            ),
51
+            'all' => array
52
+            (
53
+                'href'                => 'act=select',
54
+                'class'               => 'header_edit_all',
55
+                'attributes'          => 'onclick="Backend.getScrollOffset()" accesskey="e"'
56
+            )
57
+        ),
58
+        'operations' => array
59
+        (
60
+            'edit' => array
61
+            (
62
+                'href'                => 'act=edit',
63
+                'icon'                => 'edit.gif',
64
+            ),
65
+            'copy' => array
66
+            (
67
+                'href'                => 'act=paste&amp;mode=copy',
68
+                'icon'                => 'copy.svg'
69
+            ),
70
+            'cut' => array
71
+            (
72
+                'href'                => 'act=paste&amp;mode=cut',
73
+                'icon'                => 'cut.svg',
74
+                'attributes'          => 'onclick="Backend.getScrollOffset()"'
75
+            ),
76
+            'delete' => array
77
+            (
78
+                'href'                => 'act=delete',
79
+                'icon'                => 'delete.gif',
80
+            ),
81
+            'show' => array
82
+            (
83
+                'icon'                => 'show.gif',
84
+            ),
85
+        )
86
+    ),
87
+
88
+    // Palettes
89
+    'palettes' => array
90
+    (
91
+        'default' => '{title_legend},title'
92
+    ),
93
+
94
+    // Subpalettes
95
+    'subpalettes' => array
96
+    (
97
+    ),
98
+
99
+    // Fields
100
+    'fields' => array
101
+    (
102
+        'id' => array
103
+        (
104
+            'sql'                     => "int(10) unsigned NOT NULL auto_increment"
105
+        ),
106
+        'tstamp' => array
107
+        (
108
+            'sql'                     => "int(10) unsigned NOT NULL default 0"
109
+        ),
110
+        'title' => array
111
+        (
112
+            'exclude'                 => true,
113
+            'sorting'                 => true,
114
+            'flag'                    => DataContainer::SORT_INITIAL_LETTER_ASC,
115
+            'inputType'               => 'text',
116
+            'eval'                    => array
117
+            (
118
+                'mandatory' => true,
119
+                'maxlength' => 255
120
+            ),
121
+            'sql'                     => "varchar(255) NOT NULL default ''"
122
+        )
123
+    )
124
+);
... ...
@@ -97,7 +97,7 @@ $GLOBALS['TL_DCA']['tl_vr_wa_reservation'] = array
97 97
     'palettes' => array
98 98
     (
99 99
         '__selector__' => array(),
100
-        'default' => 'pid,uid,behaelter,sorten,upload'
100
+        'default' => 'pid,uid,lage,behaelter,sorten,ernteart,upload'
101 101
     ),
102 102
 
103 103
     // Subpalettes
... ...
@@ -114,6 +114,7 @@ $GLOBALS['TL_DCA']['tl_vr_wa_reservation'] = array
114 114
         ),
115 115
         'pid'         => array
116 116
         (
117
+            'exclude'                 => true,
117 118
             'inputType' => 'select',
118 119
             'foreignKey' => 'tl_vr_wa_slot.time',
119 120
             'eval'       => array('mandatory'=>true,'chosen'=>true,'includeBlankOption'=>true,'submitOnChange'=>true),
... ...
@@ -126,29 +127,46 @@ $GLOBALS['TL_DCA']['tl_vr_wa_reservation'] = array
126 127
         ),
127 128
         'uid'         => array
128 129
         (
130
+            'exclude'                 => true,
129 131
             'inputType' => 'select',
130 132
             'foreignKey' => 'tl_member.username',
131 133
             'eval'       => array('mandatory'=>true,'chosen'=>true,'includeBlankOption'=>true,'tl_class'=>'w50'),
132 134
             'sql'        => "int(10) unsigned NOT NULL default '0'",
133 135
             'relation'   => array('type' => 'belongsTo', 'load' => 'lazy')
134 136
         ),
137
+        'lage'       => array
138
+        (
139
+            'exclude'                 => true,
140
+            'inputType'               => 'checkbox',
141
+            'eval'  => array('multiple'=>true, 'csv'=>',','tl_class'=>'w50'),
142
+            'sql'       => "blob NULL",
143
+        ),
135 144
         'behaelter'         => array
136 145
         (
146
+            'exclude'                 => true,
137 147
             'inputType'               => 'text',
138 148
             'eval'       => array('rgxp'=>'natural','tl_class'=>'w50'),
139 149
             'sql'        => "smallint(3) unsigned NOT NULL default 0",
140 150
         ),
141 151
         'sorten'       => array
142 152
         (
153
+            'exclude'                 => true,
143 154
             'inputType'               => 'checkbox',
144 155
             'eval'  => array('multiple'=>true, 'csv'=>';','tl_class'=>'w50'),
145 156
             'sql'       => "blob NULL",
146 157
         ),
158
+        'ernteart'       => array
159
+        (
160
+            'exclude'                 => true,
161
+            'inputType'               => 'checkbox',
162
+            'eval'  => array('multiple'=>true, 'csv'=>',','tl_class'=>'w50'),
163
+            'sql'       => "blob NULL",
164
+        ),
147 165
         'upload' => array
148 166
         (
149 167
             'exclude'                 => true,
150 168
             'inputType'               => 'fileTree',
151
-            'eval'                    => array('filesOnly'=>true, 'fieldType'=>'radio', 'tl_class'=>'w50', 'extensions'=>Config::get('allowedDownload')),
169
+            'eval'                    => array('filesOnly'=>true, 'fieldType'=>'radio', 'tl_class'=>'clr w50', 'extensions'=>Config::get('allowedDownload')),
152 170
             'sql'                     => "binary(16) NULL"
153 171
         ),
154 172
         'filename' => array
... ...
@@ -91,7 +91,7 @@ $GLOBALS['TL_DCA']['tl_vr_wa_slot'] = array
91 91
     'palettes' => array
92 92
     (
93 93
         '__selector__' => array('addEnclosure'),
94
-        'default' => '{time_legend},date,time;{type_legend},behaelter,sorten;{info_legend},anmerkungen,addEnclosure;{booking_legend},buchbar,buchbar_bis'
94
+        'default' => '{time_legend},date,time;{type_legend},lage,behaelter,sorten,ernteart;{info_legend},anmerkungen,addEnclosure;{booking_legend},buchbar,buchbar_bis'
95 95
     ),
96 96
 
97 97
     // Subpalettes
... ...
@@ -137,6 +137,15 @@ $GLOBALS['TL_DCA']['tl_vr_wa_slot'] = array
137 137
             'eval'      => array('rgxp' => 'time', 'mandatory' => true, 'tl_class' => 'w50'),
138 138
             'sql'       => "int(10) NULL"
139 139
         ),
140
+        'lage'   => array
141
+        (
142
+            'exclude'   => true,
143
+            'inputType' => 'select',
144
+            'foreignKey'   => 'tl_vr_wa_lage.title',
145
+            'eval'      => array('mandatory' => false, 'includeBlankOption' => true, 'chosen'=>true,'tl_class' => 'w50'),
146
+            'sql'       => "smallint(3) unsigned NOT NULL default 0",
147
+            'relation'   => array('type' => 'hasOne', 'load' => 'lazy')
148
+        ),
140 149
         'behaelter'   => array
141 150
         (
142 151
             'exclude'   => true,
... ...
@@ -179,6 +188,15 @@ $GLOBALS['TL_DCA']['tl_vr_wa_slot'] = array
179 188
             ),
180 189
             'sql'       => "blob NULL",
181 190
         ),
191
+        'ernteart' => array
192
+        (
193
+            'exclude'                 => true,
194
+            'inputType'               => 'checkbox',
195
+            'options'                 => array('handlese','vollernter'),
196
+            'eval'                    => array('mandatory'=>true,'multiple'=>true,'csv'=>','),
197
+            'reference'               => $GLOBALS['TL_LANG']['REF']['wa_ernteart'],
198
+            'sql'                     => "blob NULL"
199
+        ),
182 200
         'anmerkungen' => array
183 201
         (
184 202
             'exclude'                 => true,
... ...
@@ -54,6 +54,11 @@ $GLOBALS['TL_DCA']['tl_vr_wa_standort'] = array
54 54
                 'href'                => 'table=tl_vr_wa_leseart',
55 55
                 'class'               => 'header_leseart',
56 56
             ),
57
+            'lage' => array
58
+            (
59
+                'href'                => 'table=tl_vr_wa_lage',
60
+                'class'               => 'header_lage',
61
+            ),
57 62
             'all' => array
58 63
             (
59 64
                 'href'                => 'act=select',
... ...
@@ -10,3 +10,8 @@
10 10
 
11 11
 $GLOBALS['TL_LANG']['MSC']['wa_sorte'] = 'Rebsorte';
12 12
 $GLOBALS['TL_LANG']['MSC']['wa_leseart'] = 'Leseart';
13
+
14
+$GLOBALS['TL_LANG']['REF']['wa_ernteart'] = [
15
+    'handlese' => 'Handlese',
16
+    'vollernter' => 'Vollernter',
17
+];
13 18
new file mode 100644
... ...
@@ -0,0 +1,16 @@
1
+<?php
2
+
3
+/**
4
+ * This file is part of contao-weinanlieferung-bundle.
5
+ *
6
+ * (c) vonRotenberg
7
+ *
8
+ * @license commercial
9
+ */
10
+
11
+$GLOBALS['TL_LANG']['tl_vr_wa_lage']['title'][0] = 'Lage';
12
+$GLOBALS['TL_LANG']['tl_vr_wa_lage']['title'][1] = 'Der Name der Lage.';
13
+
14
+$GLOBALS['TL_LANG']['tl_vr_wa_lage']['title_legend'] = 'Lage';
15
+
16
+$GLOBALS['TL_LANG']['tl_vr_wa_lage']['back'] = 'Zurück';
... ...
@@ -14,6 +14,8 @@ $GLOBALS['TL_LANG']['tl_vr_wa_reservation']['behaelter'][0] = 'Behälteranzahl';
14 14
 $GLOBALS['TL_LANG']['tl_vr_wa_reservation']['behaelter'][1] = 'Die Anzahl an Behälter, die der Winzer anliefert.';
15 15
 $GLOBALS['TL_LANG']['tl_vr_wa_reservation']['sorten'][0] = 'Sorten';
16 16
 $GLOBALS['TL_LANG']['tl_vr_wa_reservation']['sorten'][1] = 'Die Sorten, die der Winzer anliefert.';
17
+$GLOBALS['TL_LANG']['tl_vr_wa_reservation']['ernteart'][0] = 'Ernteart';
18
+$GLOBALS['TL_LANG']['tl_vr_wa_reservation']['ernteart'][1] = 'Die Ernteart, der angelieferten Reben.';
17 19
 $GLOBALS['TL_LANG']['tl_vr_wa_reservation']['uid'][0] = 'Winzer';
18 20
 $GLOBALS['TL_LANG']['tl_vr_wa_reservation']['uid'][1] = 'Zuordnung des anliefernden Winzers.';
19 21
 $GLOBALS['TL_LANG']['tl_vr_wa_reservation']['upload'][0] = 'Datei';
... ...
@@ -14,10 +14,14 @@ $GLOBALS['TL_LANG']['tl_vr_wa_slot']['time'][0] = 'Uhrzeit';
14 14
 $GLOBALS['TL_LANG']['tl_vr_wa_slot']['time'][1] = 'Uhrzeit dieses Anlieferungsslots.';
15 15
 $GLOBALS['TL_LANG']['tl_vr_wa_slot']['behaelter'][0] = 'Behälter';
16 16
 $GLOBALS['TL_LANG']['tl_vr_wa_slot']['behaelter'][1] = 'Anzahl der Behälter, die verarbeitet werden können.';
17
+$GLOBALS['TL_LANG']['tl_vr_wa_slot']['lage'][0] = 'Lage';
18
+$GLOBALS['TL_LANG']['tl_vr_wa_slot']['lage'][1] = 'Lage der angelieferten Reben.';
17 19
 $GLOBALS['TL_LANG']['tl_vr_wa_slot']['leseart'][0] = 'Leseart';
18 20
 $GLOBALS['TL_LANG']['tl_vr_wa_slot']['leseart'][1] = 'Die verwendete Leseart.';
19 21
 $GLOBALS['TL_LANG']['tl_vr_wa_slot']['sorten'][0] = 'Rebsorten';
20 22
 $GLOBALS['TL_LANG']['tl_vr_wa_slot']['sorten'][1] = 'Die Rebsorten, die in diesem Zeitslot verarbeitet werden.';
23
+$GLOBALS['TL_LANG']['tl_vr_wa_slot']['ernteart'][0] = 'Ernteart';
24
+$GLOBALS['TL_LANG']['tl_vr_wa_slot']['ernteart'][1] = 'Die Ernteart, welche zur Traubenlese angewandt wurde.';
21 25
 $GLOBALS['TL_LANG']['tl_vr_wa_slot']['anmerkungen'][0] = 'Anmerkungen';
22 26
 $GLOBALS['TL_LANG']['tl_vr_wa_slot']['anmerkungen'][1] = 'Ergänzende Hinweise zu diesem Zeitslot.';
23 27
 $GLOBALS['TL_LANG']['tl_vr_wa_slot']['addEnclosure'][0] = 'Anhänge';
... ...
@@ -15,3 +15,4 @@ $GLOBALS['TL_LANG']['tl_vr_wa_standort']['title_legend'] = 'Standort';
15 15
 
16 16
 $GLOBALS['TL_LANG']['tl_vr_wa_standort']['rebsorte'] = 'Rebsorten';
17 17
 $GLOBALS['TL_LANG']['tl_vr_wa_standort']['leseart'] = 'Leseart';
18
+$GLOBALS['TL_LANG']['tl_vr_wa_standort']['lage'] = 'Lage';
... ...
@@ -10,3 +10,8 @@
10 10
 
11 11
 $GLOBALS['TL_LANG']['MSC']['wa_sorte'] = 'Grape variety';
12 12
 $GLOBALS['TL_LANG']['MSC']['wa_leseart'] = 'Harvest type';
13
+
14
+$GLOBALS['TL_LANG']['REF']['wa_ernteart'] = [
15
+    'handlese' => 'Manual harvest',
16
+    'vollernter' => 'Harvester',
17
+];
... ...
@@ -14,7 +14,7 @@
14 14
 
15 15
                 <div class="col-md-6">
16 16
                     <div class="u-flex u-items-center u-gap-1">
17
-                        <i class="icon-uhr-standort"></i>
17
+                        <i class="icon-standort-outline"></i>
18 18
                         <div class="t-label">Standort</div>
19 19
                     </div>
20 20
                     <div class="">{{ standort.title }}</div>
... ...
@@ -3,8 +3,8 @@
3 3
         <div id="wa-slot-annotation-{{ id }}" class="frame">
4 4
             <div class="frame__header">
5 5
                 <h3>Info</h3>
6
-                <div class="row">
7
-                    <div class="col-md-6">
6
+                <div class="grid-md u-gap-2">
7
+                    <div class="grid-c-6 mb-2 mb-0-md">
8 8
                         <div class="u-flex u-items-center u-gap-1">
9 9
                             <i class="icon-uhr-outline"></i>
10 10
                             <div class="t-label">Tag/Urzeit</div>
... ...
@@ -12,17 +12,15 @@
12 12
                         <div class="">{{ slot.time|date('d.m.Y H:i') }}</div>
13 13
                     </div>
14 14
 
15
-                    <div class="col-md-6">
15
+                    <div class="grid-c-6 mb-2 mb-0-md">
16 16
                         <div class="u-flex u-items-center u-gap-1">
17
-                            <i class="icon-uhr-standort"></i>
17
+                            <i class="icon-standort-outline"></i>
18 18
                             <div class="t-label">Standort</div>
19 19
                         </div>
20 20
                         <div class="">{{ standort.title }}</div>
21 21
                     </div>
22
-                </div>
23 22
 
24
-                <div class="row">
25
-                    <div class="col-md-6">
23
+                    <div class="grid-c-6 mb-2 mb-0-md">
26 24
                         <div class="u-flex u-items-center u-gap-1">
27 25
                             <i class="icon-behaelter-outline"></i>
28 26
                             <div class="t-label">Verfügbare Behälterkapazität</div>
... ...
@@ -30,24 +28,40 @@
30 28
                         <div class="">{{ slot.behaelterAvailable }}</div>
31 29
                     </div>
32 30
 
33
-                    <div class="col-md-6">
31
+                    <div class="grid-c-6 mb-2 mb-0-md">
32
+                        <div class="u-flex u-items-center u-gap-1">
33
+                            <i class="icon-schere-outline"></i>
34
+                            <div class="t-label">Ernteart</div>
35
+                        </div>
36
+                        <div class="">{{ ernteart|join(', ') }}</div>
37
+                    </div>
38
+
39
+                    <div class="grid-c-6 mb-2 mb-0-md">
34 40
                         <div class="u-flex u-items-center u-gap-1">
35 41
                             <i class="icon-reben-outline"></i>
36 42
                             <div class="t-label">Verarbeitete Sorten</div>
37 43
                         </div>
38 44
                         <div class="">{{ slot.sorte|join(', ') }}</div>
39 45
                     </div>
40
-                </div>
41 46
 
42
-                {% if slot.anmerkungen %}
43
-                    <div>
47
+                    <div class="grid-c-6 mb-2 mb-0-md">
44 48
                         <div class="u-flex u-items-center u-gap-1">
45
-                            <i class="icon-info-outline"></i>
46
-                            <div class="t-label">Anmerkungen</div>
49
+                            <i class="icon-lage-outline"></i>
50
+                            <div class="t-label">Lage</div>
47 51
                         </div>
48
-                        {{ slot.anmerkungen|raw }}
52
+                        <div class="">{{ lage.title }}</div>
49 53
                     </div>
50
-                {% endif %}
54
+
55
+                    {% if slot.anmerkungen %}
56
+                        <div class="grid-c-12 mb-2 mb-0-md">
57
+                            <div class="u-flex u-items-center u-gap-1">
58
+                                <i class="icon-info-outline"></i>
59
+                                <div class="t-label">Anmerkungen</div>
60
+                            </div>
61
+                            {{ slot.anmerkungen|raw }}
62
+                        </div>
63
+                    {% endif %}
64
+                </div>
51 65
             </div>
52 66
         </div>
53 67
     {% if modal %}</div>{% endif %}
... ...
@@ -3,8 +3,8 @@
3 3
         <div id="wa-slot-{{ id }}" class="frame" hx-get="/_ajax/vr_wa/v1/slot?do=details&id={{ id }}&modal=false" hx-target="this" hx-swap="outerHTML" hx-trigger="updateWaBooking from:body">
4 4
             <div class="frame__header">
5 5
                 <h3>Zeitslot</h3>
6
-                <div class="row">
7
-                    <div class="col-md-6">
6
+                <div class="grid-md u-gap-2">
7
+                    <div class="grid-c-6 mb-2 mb-0-md">
8 8
                         <div class="u-flex u-items-center u-gap-1">
9 9
                             <i class="icon-uhr-outline"></i>
10 10
                             <div class="t-label">Tag/Urzeit</div>
... ...
@@ -12,17 +12,15 @@
12 12
                         <div class="">{{ slot.time|date('d.m.Y H:i') }}</div>
13 13
                     </div>
14 14
 
15
-                    <div class="col-md-6">
15
+                    <div class="grid-c-6 mb-2 mb-0-md">
16 16
                         <div class="u-flex u-items-center u-gap-1">
17
-                            <i class="icon-uhr-standort"></i>
17
+                            <i class="icon-standort-outline"></i>
18 18
                             <div class="t-label">Standort</div>
19 19
                         </div>
20 20
                         <div class="">{{ standort.title }}</div>
21 21
                     </div>
22
-                </div>
23 22
 
24
-                <div class="row">
25
-                    <div class="col-md-6">
23
+                    <div class="grid-c-6 mb-2 mb-0-md">
26 24
                         <div class="u-flex u-items-center u-gap-1">
27 25
                             <i class="icon-behaelter-outline"></i>
28 26
                             <div class="t-label">Verfügbare Behälterkapazität</div>
... ...
@@ -30,24 +28,40 @@
30 28
                         <div class="">{{ slot.behaelterAvailable }}</div>
31 29
                     </div>
32 30
 
33
-                    <div class="col-md-6">
31
+                    <div class="grid-c-6 mb-2 mb-0-md">
32
+                        <div class="u-flex u-items-center u-gap-1">
33
+                            <i class="icon-schere-outline"></i>
34
+                            <div class="t-label">Ernteart</div>
35
+                        </div>
36
+                        <div class="">{{ ernteart|join(', ') }}</div>
37
+                    </div>
38
+
39
+                    <div class="grid-c-6 mb-2 mb-0-md">
34 40
                         <div class="u-flex u-items-center u-gap-1">
35 41
                             <i class="icon-reben-outline"></i>
36 42
                             <div class="t-label">Verarbeitete Sorten</div>
37 43
                         </div>
38 44
                         <div class="">{{ slot.sorte|join(', ') }}</div>
39 45
                     </div>
40
-                </div>
41 46
 
42
-                {% if slot.anmerkungen %}
43
-                    <div>
47
+                    <div class="grid-c-6 mb-2 mb-0-md">
44 48
                         <div class="u-flex u-items-center u-gap-1">
45
-                            <i class="icon-info-outline"></i>
46
-                            <div class="t-label">Anmerkungen</div>
49
+                            <i class="icon-lage-outline"></i>
50
+                            <div class="t-label">Lage</div>
47 51
                         </div>
48
-                        {{ slot.anmerkungen|raw }}
52
+                        <div class="">{{ lage.title }}</div>
49 53
                     </div>
50
-                {% endif %}
54
+
55
+                    {% if slot.anmerkungen %}
56
+                        <div class="grid-c-12 mb-2 mb-0-md">
57
+                            <div class="u-flex u-items-center u-gap-1">
58
+                                <i class="icon-info-outline"></i>
59
+                                <div class="t-label">Anmerkungen</div>
60
+                            </div>
61
+                            {{ slot.anmerkungen|raw }}
62
+                        </div>
63
+                    {% endif %}
64
+                </div>
51 65
             </div>
52 66
 
53 67
             {% if reservations|length %}
... ...
@@ -8,15 +8,15 @@
8 8
                     <div class="accordion-dis">
9 9
                         <div class="bookings">
10 10
                             {% for booking in bookings %}
11
-                                <div class="row u-items-center">
12
-                                    <div class="col-10">
11
+                                <div class="row u-flex-nowrap-md u-items-center">
12
+                                    <div class="col-12">
13 13
                                         <div class="row">
14 14
                                             <div class="col-3 time pl-0">
15 15
                                                 <div class="icon-uhr-outline u-flex u-items-center u-gap-1">
16 16
                                                     <span class="t-label">Uhrzeit</span>
17 17
                                                     {{ booking.slot.time|date('H:i') }}
18 18
                                                 </div>
19
-                                                <div class="icon-uhr-standort u-flex u-items-center u-gap-1">
19
+                                                <div class="icon-standort-outline u-flex u-items-center u-gap-1">
20 20
                                                     <span class="t-label">Standort</span>
21 21
                                                     {{ booking.standort }}
22 22
                                                 </div>
... ...
@@ -30,6 +30,7 @@
30 30
                                             <div class="col-6 rebsorten pr-0">
31 31
                                                 <div class="icon-reben-outline u-flex u-items-center u-gap-1">
32 32
                                                     <div class="t-label">Anliefernde Sorten</div>
33
+                                                    &nbsp;
33 34
                                                 </div>
34 35
                                                 {{ booking.sorte|join(', ') }}
35 36
                                             </div>
... ...
@@ -45,7 +46,7 @@
45 46
                                         </div>
46 47
                                     </div>
47 48
 
48
-                                    <div class="col u-text-right action">
49
+                                    <div class="col u-text-right u-text-nowrap action">
49 50
                                         <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>
50 51
                                         <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>
51 52
                                     </div>
... ...
@@ -48,44 +48,66 @@
48 48
                     <div class="accordion-dis">
49 49
                         <div class="slots">
50 50
                             {% for slot in slots %}
51
-                                <div class="row u-items-center{{ not slot.buchbar ? ' error' : '' }}{{ slot.gebucht ? ' booked' : '' }}">
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">
51
+                                <div class="row py-2 u-flex-nowrap-md u-items-center{{ not slot.buchbar ? ' error' : '' }}{{ slot.gebucht ? ' booked' : '' }}">
52
+                                    <div class="col-12">
53
+                                        <div class="grid-md u-gap-1">
54
+                                            <div class="grid-c-3 time bg-white p-1">
55
+                                                <div class="u-flex u-flex-wrap u-gap-1">
56
+                                                    <i class="icon-uhr-outline"></i>
56 57
                                                     <span class="t-label">Uhrzeit</span>
57 58
                                                     {{ slot.time|date('H:i') }}
58 59
                                                 </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 60
                                             </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>
61
+                                            <div class="grid-c-3 behaelter bg-white p-1">
62
+                                                <div class="u-flex u-flex-wrap u-gap-1">
63
+                                                    <i class="icon-behaelter-outline"></i>
64
+                                                    <span class="t-label">Verfügbare Kapazität</span>
67 65
                                                     {{ slot.behaelterAvailable }}
68 66
                                                 </div>
69 67
                                             </div>
70
-                                            <div class="col-6 rebsorten pr-0">
71
-                                                <div class="icon-reben-outline u-flex u-items-center u-gap-1">
68
+                                            <div class="grid-c-6 rebsorten bg-white p-1">
69
+                                                <div class="u-flex u-flex-wrap u-gap-1">
70
+                                                    <i class="icon-reben-outline"></i>
72 71
                                                     <div class="t-label">Verarbeitete Sorten</div>
72
+                                                    &nbsp;
73 73
                                                 </div>
74 74
                                                 {{ slot.sorte|join(', ') }}
75 75
                                             </div>
76
+                                            <div class="grid-c-3 standort bg-white p-1">
77
+                                                <div class="u-flex u-flex-wrap u-gap-1">
78
+                                                    <i class="icon-standort-outline"></i>
79
+                                                    <span class="t-label">Standort</span>
80
+                                                    {{ slot.standort }}
81
+                                                </div>
82
+                                            </div>
83
+                                            <div class="grid-c-3 ernteart bg-white p-1">
84
+                                                <div class="u-flex u-flex-wrap u-gap-1">
85
+                                                    <i class="icon-schere-outline"></i>
86
+                                                    <div class="t-label">Ernteart</div>
87
+                                                    {{ slot.ernteart|join(', ') }}
88
+                                                </div>
89
+                                            </div>
90
+                                            <div class="grid-c-6 lage bg-white p-1">
91
+                                                <div class="u-flex u-flex-wrap u-gap-1">
92
+                                                    <i class="icon-lage-outline"></i>
93
+                                                    <span class="t-label">Lage</span>
94
+                                                    {{ slot.lage }}
95
+                                                </div>
96
+                                            </div>
76 97
                                             {% 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">
98
+                                                <div class="grid-c-12 bg-white p-1">
99
+                                                    <div class="u-flex u-flex-wrap u-gap-1">
100
+                                                        <i class="icon-info-outline"></i>
79 101
                                                         <span class="t-label">Anmerkungen</span>
102
+                                                        {{ slot.anmerkungen|raw }}
103
+                                                        <a hx-get="/_ajax/vr_wa/v1/slot?do=annotation&id={{ slot.id }}" hx-target="body" hx-swap="beforeend" href="javascript:;">mehr lesen</a>
80 104
                                                     </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 105
                                                 </div>
84 106
                                             {% endif %}
85 107
                                         </div>
86 108
                                     </div>
87
-                                    <div class="col u-text-right action">
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>
109
+                                    <div class="col u-text-right action mt-2 mt-0-md">
110
+                                        <a hx-get="/_ajax/vr_wa/v1/slot?do=details&id={{ slot.id }}" hx-target="body" hx-swap="beforeend" href="javascript:;" class="btn btn--sm btn-info m-0">Buchen</a>
89 111
                                     </div>
90 112
                                 </div>
91 113
                             {% endfor %}
... ...
@@ -4,6 +4,7 @@
4 4
 }
5 5
 
6 6
 .header_rebsorte,
7
+.header_lage,
7 8
 .header_leseart {
8 9
   padding:3px 0 3px 21px;
9 10
   background-position:left center;
... ...
@@ -16,6 +17,9 @@
16 17
 .header_leseart {
17 18
   background-image:url("/bundles/vonrotenbergweinanlieferung/images/icons/schere.svg");
18 19
 }
20
+.header_lage {
21
+  background-image:url("/bundles/vonrotenbergweinanlieferung/images/icons/lage.svg");
22
+}
19 23
 
20 24
 
21 25
 .t-label {
22 26
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="16px" height="16px" viewBox="0 0 600 600" 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;"><g><path d="M0,430.576c0,-0 61.493,-170.576 160,-170.576c54.263,0 80,40 80,40c0,0 129.683,-140 200,-140c106.288,0 160,305.468 160,305.468c0,-0 -306.34,-82.854 -406.34,-60.432c-89.381,20.041 -193.66,25.54 -193.66,25.54Z" style="fill:#d9c8aa;"/><path d="M0,430.576c0,-0 104.279,-5.499 193.66,-25.54c100,-22.422 406.34,60.432 406.34,60.432l0,163.208l-600,-0l0,-198.1Z" style="fill:#c6d9aa;"/><path d="M73.951,437.09c1.607,-3.338 5.621,-4.745 8.959,-3.139c3.338,1.607 4.745,5.621 3.139,8.959c-4.88,10.806 -8.235,24.657 -10.621,39.333c-2.628,16.165 -3.408,33.339 -4.684,48.639c-2.29,27.452 -4.033,49.019 -4.033,49.019c0.055,3.704 -2.907,6.756 -6.612,6.81c-3.704,0.055 -6.756,-2.907 -6.81,-6.612c-0,0 -2.021,-18.553 -1.027,-43.326c0.361,-9.006 1.45,-18.796 2.769,-28.783c3.394,-25.71 9.484,-52.6 18.92,-70.9Z" style="fill:#259232;"/><path d="M143.288,440.026c-0.015,-3.704 2.981,-6.724 6.686,-6.738c3.704,-0.015 6.724,2.981 6.738,6.686c0.667,21.414 -2.64,56.141 -7.439,85.848c-1.285,7.96 -2.749,15.539 -4.259,22.381c-4.319,19.561 -8.443,33.164 -8.443,33.164c-0.754,3.627 -4.311,5.959 -7.938,5.204c-3.627,-0.754 -5.959,-4.311 -5.204,-7.938c-0,-0 2.403,-21.687 6.817,-48.876c2.493,-15.355 6.27,-32.316 8.726,-48.412c2.382,-15.606 4.088,-30.255 4.316,-41.319Z" style="fill:#259232;"/><path d="M213.951,426.298c1.607,-3.338 5.621,-4.744 8.959,-3.138c3.338,1.606 4.745,5.621 3.139,8.959c-5.056,11.145 -8.47,26.23 -10.869,42.453c-2.557,17.291 -3.278,35.874 -4.518,52.485c-2.198,29.464 -3.95,52.854 -3.95,52.854c0.049,3.704 -2.918,6.751 -6.623,6.801c-3.704,0.049 -6.751,-2.918 -6.801,-6.623c0,0 -2.014,-19.997 -1.095,-46.469c0.336,-9.688 1.392,-20.207 2.665,-30.901c3.372,-28.338 9.523,-57.773 19.093,-76.421Z" style="fill:#259232;"/><path d="M284.311,417.09c1.606,-3.338 5.621,-4.745 8.959,-3.139c3.338,1.607 4.744,5.621 3.138,8.959c-5.192,11.409 -8.674,27.568 -11.117,45.144c-2.539,18.261 -3.266,38.044 -4.525,55.766c-2.217,31.192 -4.054,56.119 -4.054,56.119c0.034,3.704 -2.946,6.739 -6.651,6.773c-3.704,0.034 -6.739,-2.946 -6.773,-6.651c0,0 -1.943,-21.232 -1.002,-49.174c0.346,-10.268 1.408,-21.409 2.675,-32.708c3.429,-30.581 9.687,-62.193 19.35,-81.089Z" style="fill:#259232;"/><path d="M353.729,437.606c1.322,-3.461 5.204,-5.198 8.665,-3.877c3.461,1.322 5.198,5.204 3.877,8.665c-4.006,11.313 -6.973,25.38 -9.215,40.146c-2.475,16.303 -3.43,33.472 -4.981,48.712c-2.803,27.527 -5.365,48.905 -5.365,48.905c-0.086,3.703 -3.163,6.64 -6.867,6.553c-3.703,-0.086 -6.64,-3.163 -6.553,-6.867c-0,0 -1.315,-18.395 0.192,-43.084c0.545,-8.919 1.786,-18.616 3.185,-28.547c3.546,-25.17 9.238,-51.705 17.062,-70.606Z" style="fill:#259232;"/><path d="M422.631,459.087c0.503,-3.67 3.892,-6.241 7.562,-5.737c3.671,0.504 6.241,3.893 5.737,7.563c-2.262,21.533 -5.214,49.257 -8.893,72.626c-1.081,6.866 -2.288,13.339 -3.525,19.158c-3.613,16.99 -6.9,28.461 -6.9,28.461c-0.64,3.649 -4.121,6.093 -7.77,5.454c-3.649,-0.64 -6.093,-4.121 -5.454,-7.77c0,-0 0.768,-15.343 3.892,-36.268c3.773,-25.272 11.232,-58.453 15.351,-83.487Z" style="fill:#259232;"/><path d="M493.355,466.126c-0.522,-3.668 2.031,-7.069 5.699,-7.591c3.668,-0.522 7.069,2.031 7.591,5.699c3.302,18.688 1.749,40.882 -1.857,61.066c-1.489,8.333 -3.16,16.361 -5.313,23.509c-6.02,19.988 -13.223,33.635 -13.223,33.635c-1.349,3.45 -5.246,5.156 -8.696,3.808c-3.45,-1.349 -5.156,-5.246 -3.808,-8.696c0,0 4.393,-16.888 9.79,-39.052c2.925,-12.012 6.809,-25.406 8.716,-38.985c1.614,-11.489 2.273,-22.968 1.101,-33.393Z" style="fill:#259232;"/></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;"/><g id="Artboard11" serif:id="Artboard1"><g id="Lage"><clipPath id="_clip1"><path d="M412.5,61.875c-0,-34.15 -27.725,-61.875 -61.875,-61.875l-288.75,0c-34.15,0 -61.875,27.725 -61.875,61.875l0,288.75c0,34.15 27.725,61.875 61.875,61.875l288.75,-0c34.15,-0 61.875,-27.725 61.875,-61.875l-0,-288.75Z"/></clipPath><g clip-path="url(#_clip1)"><path d="M113.439,285.977c17.847,4.311 32.184,13.91 39.947,24.756c6.252,8.734 8.503,18.372 6.304,27.477c-2.199,9.105 -8.601,16.653 -18.15,21.57c-11.858,6.106 -28.997,8.104 -46.844,3.793c-17.847,-4.311 -32.184,-13.911 -39.948,-24.756c-6.252,-8.734 -8.502,-18.372 -6.303,-27.477c2.199,-9.105 8.601,-16.653 18.15,-21.57c11.858,-6.107 28.996,-8.104 46.844,-3.793Zm-2.348,9.72c-25.334,-6.119 -49.049,1.942 -52.926,17.991c-3.876,16.048 13.545,34.045 38.879,40.164c25.334,6.12 49.049,-1.942 52.925,-17.99c3.877,-16.048 -13.544,-34.046 -38.878,-40.165Z"/><path d="M117.546,268.971c26.737,6.458 48.298,20.706 59.929,36.953c8.83,12.336 12.167,25.911 9.061,38.77c-3.106,12.859 -12.271,23.414 -25.758,30.36c-17.765,9.147 -43.452,11.983 -70.189,5.525c-26.737,-6.458 -48.299,-20.706 -59.929,-36.954c-8.83,-12.335 -12.167,-25.91 -9.061,-38.769c3.106,-12.859 12.271,-23.415 25.758,-30.36c17.764,-9.148 43.452,-11.983 70.189,-5.525Zm-2.348,9.72c-40.15,-9.698 -77.735,3.078 -83.879,28.513c-6.143,25.434 21.467,53.957 61.618,63.655c40.15,9.697 77.735,-3.079 83.878,-28.513c6.144,-25.434 -21.466,-53.957 -61.617,-63.655Z"/><path d="M127.476,227.859c44.114,10.655 79.46,35.371 98.128,64.338c13.227,20.524 18.245,43.225 12.97,65.066c-5.276,21.841 -20.102,39.748 -41.239,51.973c-29.831,17.252 -72.562,23.11 -116.676,12.454c-44.115,-10.655 -79.46,-35.371 -98.128,-64.337c-13.227,-20.525 -18.245,-43.225 -12.97,-65.066c5.276,-21.841 20.102,-39.749 41.239,-51.973c29.831,-17.252 72.562,-23.11 116.676,-12.455Zm-2.348,9.721c-68.871,-16.635 -134.223,8.93 -145.846,57.055c-11.624,48.124 34.853,100.7 103.725,117.335c68.871,16.635 134.222,-8.931 145.846,-57.055c11.624,-48.124 -34.854,-100.7 -103.725,-117.335Z"/><path d="M-7.166,162.489c-2.753,0.184 -5.138,-1.901 -5.323,-4.655c-0.184,-2.753 1.901,-5.138 4.655,-5.323c-0,0 47.508,-3.187 96.338,4.37c33.219,5.141 66.954,15.37 87.408,34.464c49.424,46.138 63.804,81.529 101.812,112.267c39.315,31.796 53.437,56.558 57.266,116.067c0.177,2.754 -1.915,5.134 -4.669,5.311c-2.754,0.177 -5.134,-1.915 -5.311,-4.669c-3.59,-55.816 -16.698,-79.11 -53.575,-108.933c-38.184,-30.881 -52.693,-66.38 -102.347,-112.733c-19.177,-17.902 -50.969,-27.072 -82.114,-31.892c-47.716,-7.384 -94.14,-4.274 -94.14,-4.274Z"/><path d="M-22.302,94.996c-2.757,0.11 -5.085,-2.04 -5.194,-4.798c-0.11,-2.757 2.04,-5.085 4.798,-5.194c-0,-0 72.481,-2.866 119.607,2.6c14.765,1.713 27.122,4.319 34.362,7.917c4.146,2.06 6.859,4.589 8.191,7.223c3.035,6.002 12.455,16.433 24.312,28.401c28.54,28.807 71.268,65.821 78.988,70.937c5.439,3.604 21.963,9.181 39.267,16.149c18.412,7.413 37.604,16.372 46.858,25.759c11.004,11.163 25.109,34.386 34.219,56.549c6.238,15.178 10.067,29.892 9.383,40.045c-0.572,8.491 4.322,17.057 11.12,25.505c11.4,14.167 28.402,27.674 39.876,38.829c1.979,1.924 2.024,5.092 0.1,7.071c-1.924,1.978 -5.092,2.023 -7.07,0.099c-11.725,-11.398 -29.047,-25.253 -40.696,-39.73c-8.569,-10.648 -14.029,-21.745 -13.308,-32.446c0.609,-9.038 -3.101,-22.061 -8.654,-35.571c-8.579,-20.87 -21.729,-42.819 -32.092,-53.331c-8.552,-8.675 -26.455,-16.652 -43.471,-23.503c-18.124,-7.298 -35.359,-13.314 -41.056,-17.089c-7.869,-5.215 -51.479,-42.874 -80.568,-72.235c-12.841,-12.961 -22.845,-24.426 -26.132,-30.927c-0.861,-1.703 -3.307,-2.769 -6.512,-3.988c-6.766,-2.572 -16.724,-4.391 -28.269,-5.73c-46.516,-5.396 -118.059,-2.542 -118.059,-2.542Z"/><path d="M-8.711,-10.149c-2.678,-0.669 -4.309,-3.385 -3.64,-6.062c0.669,-2.678 3.385,-4.309 6.062,-3.64c0,-0 108.827,27.201 186.602,75.606c38.524,23.976 71.368,39.069 98.621,54.663c28.064,16.058 50.305,32.704 66.958,59.438c19.43,31.194 38.058,68.16 55.726,95.967c11.22,17.659 21.846,31.603 32.208,37.295c2.419,1.328 3.304,4.37 1.975,6.789c-1.329,2.419 -4.371,3.304 -6.79,1.975c-11.401,-6.262 -23.487,-21.264 -35.833,-40.697c-17.683,-27.829 -36.328,-64.823 -55.774,-96.041c-15.744,-25.276 -36.904,-40.865 -63.436,-56.046c-27.343,-15.646 -60.289,-30.798 -98.939,-54.853c-76.575,-47.658 -183.74,-74.394 -183.74,-74.394Z"/><path d="M137.908,-26.566c0.977,0.355 6.835,2.483 14.098,5.005c22.849,7.935 66.826,23.623 103.446,44.536c25.145,14.359 46.765,31.294 56.47,49.692c28.703,54.41 25.747,47.271 130.012,102.922c2.434,1.299 3.356,4.331 2.057,6.765c-1.3,2.435 -4.331,3.356 -6.766,2.057c-107.926,-57.606 -104.437,-50.758 -134.147,-107.078c-10.143,-19.227 -34.653,-36.31 -61.669,-50.677c-41.742,-22.199 -89.716,-37.582 -103.914,-42.686c-3.344,-1.202 -5.263,-2.231 -5.694,-2.602c-1.057,-0.908 -1.439,-1.873 -1.624,-2.548c-0.728,-2.662 0.842,-5.414 3.503,-6.143c1.509,-0.412 3.046,-0.087 4.228,0.757Z"/><path d="M219.938,-6.425c-2.663,-0.725 -4.237,-3.475 -3.513,-6.137c0.725,-2.663 3.475,-4.237 6.137,-3.513c0,0 61.817,16.815 116.164,51.325c36.931,23.451 70.237,55.12 79.474,94.868c0.624,2.688 -1.051,5.378 -3.739,6.002c-2.688,0.625 -5.377,-1.05 -6.002,-3.738c-8.673,-37.324 -40.415,-66.669 -75.094,-88.69c-53.067,-33.697 -113.427,-50.117 -113.427,-50.117Z"/><path d="M412.5,61.875l-0,288.75c-0,34.15 -27.725,61.875 -61.875,61.875l-288.75,-0c-34.15,-0 -61.875,-27.725 -61.875,-61.875l0,-288.75c0,-34.15 27.725,-61.875 61.875,-61.875l288.75,0c34.15,0 61.875,27.725 61.875,61.875Zm-10,0c-0,-28.631 -23.244,-51.875 -51.875,-51.875l-288.75,0c-28.631,0 -51.875,23.244 -51.875,51.875l-0,288.75c-0,28.631 23.244,51.875 51.875,51.875l288.75,-0c28.631,-0 51.875,-23.244 51.875,-51.875l-0,-288.75Z"/></g></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;"/><g id="Artboard11" serif:id="Artboard1"><g id="schere"><path d="M190.481,258.335c-8.827,3.866 -17.026,10.925 -24.444,20.275c-19.659,24.778 -33.384,65.238 -37.148,112.189c-0.417,5.196 -4.755,9.201 -9.968,9.201l-20.049,-0c-2.784,0 -5.442,-1.161 -7.335,-3.203c-1.892,-2.043 -2.847,-4.782 -2.636,-7.558c4.015,-52.586 19.407,-98.22 40.439,-128.29c10.669,-15.254 22.922,-26.827 36.068,-34.543c-0.269,-1.887 -0.408,-3.816 -0.408,-5.778c-0,-2.519 0.23,-4.986 0.67,-7.379c-0.978,-0.532 -1.956,-1.09 -2.933,-1.675c-20.88,-12.493 -42.217,-37.768 -56.191,-70.687c-13.973,-32.919 -17.332,-65.825 -11.814,-89.523c4.548,-19.536 15.088,-33.417 29.602,-39.578c7.625,-3.237 16.431,0.321 19.668,7.947l61.766,145.512l61.767,-145.512c3.237,-7.626 12.043,-11.184 19.668,-7.947c14.514,6.161 25.054,20.042 29.602,39.578c5.518,23.698 2.159,56.604 -11.814,89.523c-13.974,32.919 -35.311,58.194 -56.191,70.687c-1.062,0.635 -2.125,1.24 -3.188,1.813c0.424,2.35 0.645,4.77 0.645,7.241c-0,1.857 -0.125,3.685 -0.367,5.476c13.343,7.715 25.778,19.391 36.587,34.845c21.032,30.07 36.424,75.704 40.439,128.29c0.212,2.776 -0.744,5.515 -2.636,7.558c-1.893,2.042 -4.551,3.203 -7.335,3.203l-20.049,0c-5.213,0 -9.551,-4.005 -9.968,-9.201c-3.764,-46.951 -17.489,-87.411 -37.147,-112.189c-7.495,-9.446 -15.786,-16.553 -24.716,-20.393c-4.76,1.959 -9.973,3.04 -15.437,3.04c-5.353,-0 -10.465,-1.038 -15.147,-2.922Zm15.147,-57.078c-10.691,-0 -19.371,8.68 -19.371,19.371c-0,10.692 8.68,19.372 19.371,19.372c10.692,0 19.372,-8.68 19.372,-19.372c-0,-10.691 -8.68,-19.371 -19.372,-19.371Zm34.546,-2.011c19.036,-10.999 38.267,-34.2 51.009,-64.22c20.894,-49.223 16.484,-98.258 -9.841,-109.432l-66.035,155.568c10.461,2.561 19.338,9.177 24.867,18.084Zm-43.971,-18.145l-66.008,-155.507c-26.326,11.174 -30.735,60.209 -9.841,109.432c12.696,29.912 31.834,53.054 50.804,64.1c5.578,-8.918 14.521,-15.521 25.045,-18.025Z"/></g></g></svg>
0 2
\ No newline at end of file
... ...
@@ -149,6 +149,15 @@ class SlotAjaxController extends AbstractController
149 149
             $arrSorten = array_combine($Sorten->fetchEach('id'),$Sorten->fetchEach('title'));
150 150
         }*/
151 151
 
152
+        $arrErnteart = [];
153
+        if ($Slot->ernteart !== null)
154
+        {
155
+            foreach (explode(',', $Slot->ernteart) as $ernteart)
156
+            {
157
+                $arrErnteart[] = $GLOBALS['TL_LANG']['REF']['wa_ernteart'][$ernteart] ?? $ernteart;
158
+            }
159
+        }
160
+
152 161
         $intAvailableBehaelter = $Slot->getAvailableBehaelter();
153 162
 
154 163
         $arrData = [
... ...
@@ -159,6 +168,8 @@ class SlotAjaxController extends AbstractController
159 168
                 'behaelterAvailable' => $intAvailableBehaelter
160 169
             ]),
161 170
             'standort' => $Slot->getRelated('pid'),
171
+            'lage' => $Slot->getRelated('lage'),
172
+            'ernteart' => $arrErnteart,
162 173
             'buchen' => [
163 174
                 'buchbar' => (boolean) $intAvailableBehaelter,
164 175
                 'behaelter' => range(min($intAvailableBehaelter,1),$intAvailableBehaelter),
... ...
@@ -197,6 +208,15 @@ class SlotAjaxController extends AbstractController
197 208
             $arrSorten[$objSorte->id.','.$objLeseart->id] = ($objSorte !== null  ? $objSorte->title : '') . ' ' . ($objLeseart !== null  ? $objLeseart->title : '');
198 209
         }
199 210
 
211
+        $arrErnteart = [];
212
+        if ($Slot->ernteart !== null)
213
+        {
214
+            foreach (explode(',', $Slot->ernteart) as $ernteart)
215
+            {
216
+                $arrErnteart[] = $GLOBALS['TL_LANG']['REF']['wa_ernteart'][$ernteart] ?? $ernteart;
217
+            }
218
+        }
219
+
200 220
         $intAvailableBehaelter = $Slot->getAvailableBehaelter();
201 221
 
202 222
         $arrData = [
... ...
@@ -207,6 +227,8 @@ class SlotAjaxController extends AbstractController
207 227
                 'behaelterAvailable' => $intAvailableBehaelter
208 228
             ]),
209 229
             'standort' => $Slot->getRelated('pid'),
230
+            'lage' => $Slot->getRelated('lage'),
231
+            'ernteart' => $arrErnteart,
210 232
             'buchen' => [
211 233
                 'buchbar' => (boolean) $intAvailableBehaelter,
212 234
                 'behaelter' => range(min($intAvailableBehaelter,1),$intAvailableBehaelter),
... ...
@@ -59,6 +59,7 @@ class WeinanlieferungBookedListModuleController extends AbstractFrontendModuleCo
59 59
                 {
60 60
                     $day = new Date($Slot->date);
61 61
                     $arrSorten = [];
62
+                    $arrErnteart = [];
62 63
 
63 64
                     $SortenLeseart = explode(';',$booking->sorten);
64 65
                     foreach($SortenLeseart as $sorteLeseart)
... ...
@@ -110,14 +110,23 @@ class WeinanlieferungSlotsListModuleController extends AbstractFrontendModuleCon
110 110
             {
111 111
                 $day = new Date($slot->date);
112 112
                 $arrSorten = [];
113
+                $arrErnteart = [];
113 114
                 $intAvailableBehaelter = $slot->getAvailableBehaelter();
114 115
 
115
-                $Sorten = StringUtil::deserialize($slot->sorten,true);
116
-                foreach($Sorten as $sorte)
116
+                $Sorten = StringUtil::deserialize($slot->sorten, true);
117
+                foreach ($Sorten as $sorte)
117 118
                 {
118 119
                     $objSorte = WeinanlieferungRebsorteModel::findByPk($sorte['sorte']);
119 120
                     $objLeseart = WeinanlieferungLeseartModel::findByPk($sorte['leseart']);
120
-                    $arrSorten[] = ($objSorte !== null  ? $objSorte->title : '') . ' ' . ($objLeseart !== null  ? $objLeseart->title : '');
121
+                    $arrSorten[] = ($objSorte !== null ? $objSorte->title : '') . ' ' . ($objLeseart !== null ? $objLeseart->title : '');
122
+                }
123
+
124
+                if ($slot->ernteart !== null)
125
+                {
126
+                    foreach (explode(',', $slot->ernteart) as $ernteart)
127
+                    {
128
+                        $arrErnteart[] = $GLOBALS['TL_LANG']['REF']['wa_ernteart'][$ernteart] ?? $ernteart;
129
+                    }
121 130
                 }
122 131
 
123 132
                 $strStandort = '';
... ...
@@ -126,10 +135,18 @@ class WeinanlieferungSlotsListModuleController extends AbstractFrontendModuleCon
126 135
                     $strStandort = $Standort->title;
127 136
                 }
128 137
 
138
+                $strLage = '';
139
+                if (($Lage = $slot->getRelated('lage')) !== null)
140
+                {
141
+                    $strLage = $Lage->title;
142
+                }
143
+
129 144
                 $arrData['days'][$day->dayBegin][] = array_merge($slot->row(),[
130 145
                     'anmerkungen' => $slot->anmerkungen ? StringUtil::substr(strip_tags($slot->anmerkungen),110) : '',
131 146
                     'standort' => $strStandort,
147
+                    'lage' => $strLage,
132 148
                     'sorte' => $arrSorten,
149
+                    'ernteart' => $arrErnteart,
133 150
                     'behaelterAvailable' => $intAvailableBehaelter,
134 151
                     'buchbar' => (boolean) $intAvailableBehaelter,
135 152
                     'gebucht' => (boolean) WeinanlieferungReservationModel::countBy(["uid = ?","pid = ?"],[FrontendUser::getInstance()->id,$slot->id])
... ...
@@ -56,6 +56,27 @@ class WeinanlieferungReservationContainerListener
56 56
     }
57 57
 
58 58
     /**
59
+     * @Callback(table="tl_vr_wa_reservation", target="fields.ernteart.options")
60
+     */
61
+    public function onErnteartOptionsCallback(DataContainer $dc)
62
+    {
63
+        $arrErnteart = [];
64
+
65
+        if (($Slot = WeinanlieferungSlotsModel::findByPk($dc->activeRecord->pid)) === null || $Slot->ernteart === null)
66
+        {
67
+            return $arrErnteart;
68
+        }
69
+
70
+        $Ernteart = explode(',',$Slot->ernteart);
71
+        foreach($Ernteart as $art)
72
+        {
73
+            $arrErnteart[] = $GLOBALS['TL_LANG']['REF']['wa_ernteart'][$art] ?? $art;
74
+        }
75
+
76
+        return $arrErnteart;
77
+    }
78
+
79
+    /**
59 80
      * @Callback(table="tl_vr_wa_reservation", target="fields.pid.options")
60 81
      */
61 82
     public function onPidOptionsCallback(DataContainer $dc)
62 83
new file mode 100644
... ...
@@ -0,0 +1,24 @@
1
+<?php
2
+
3
+declare(strict_types=1);
4
+
5
+/*
6
+ * This file is part of contao-weinanlieferung-bundle.
7
+ *
8
+ * (c) vonRotenberg
9
+ *
10
+ * @license commercial
11
+ */
12
+
13
+namespace vonRotenberg\WeinanlieferungBundle\Model;
14
+
15
+use Contao\Model;
16
+
17
+class WeinanlieferungLageModel extends Model
18
+{
19
+    /**
20
+     * Table name
21
+     * @var string
22
+     */
23
+    protected static $strTable = 'tl_vr_wa_lage';
24
+}