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