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