Warenwirtschaft: AP-33a — Abwicklungs-Tabelle für iPad optimiert

9 → 6 Spalten (Datum unter Bestellnr., Gewicht in die Packliste, Zahlung in
die Status-Spalte); Aktionen-Spalte sticky am rechten Rand (bleibt beim
horizontalen Scrollen sichtbar); unterhalb Desktop-Breite Icon-Buttons ohne
Beschriftung (Tooltip bleibt).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-16 11:48:52 +00:00
parent 054f26fb38
commit 4c73e64446

View file

@ -3,6 +3,23 @@
@section('content')
@include('admin.inventory.partials.wawi-ui')
<style>
/* AP-33a: iPad-Optimierung — Aktionen bleiben beim horizontalen Scrollen sichtbar */
#of-table th.of-actions,
#of-table td.of-actions {
position: sticky;
right: 0;
background: #fff;
box-shadow: -6px 0 6px -6px rgba(24, 28, 33, .15);
white-space: nowrap;
}
#of-table td { vertical-align: middle; }
@media (max-width: 1199.98px) {
.of-btn-text { display: none; }
#of-table .btn .mr-1 { margin-right: 0 !important; }
}
</style>
<div class="wawi-page">
<div class="wawi-page-head">
<div>
@ -64,14 +81,11 @@
<thead>
<tr>
<th>{{ __('Bestellung') }}</th>
<th>{{ __('Datum') }}</th>
<th>{{ __('Kunde') }}</th>
<th class="text-right">{{ __('Positionen') }}</th>
<th class="text-right">{{ __('Gewicht') }}</th>
<th>{{ __('Zahlung') }}</th>
<th class="text-center">{{ __('Positionen') }}</th>
<th>{{ __('Status') }}</th>
<th>{{ __('Dokumente') }}</th>
<th class="text-right">{{ __('Aktionen') }}</th>
<th class="text-right of-actions">{{ __('Aktionen') }}</th>
</tr>
</thead>
<tbody>
@ -94,40 +108,39 @@
@elseif ($order->promotion_user_id)
<span class="wawi-pill" style="background:rgba(24,28,33,.06);color:#6c757d;">{{ __('Promo') }}</span>
@endif
<div class="small text-muted">{{ $order->created_at->format('d.m.Y H:i') }}</div>
</td>
<td>{{ $order->created_at->format('d.m.Y H:i') }}</td>
<td>
<span class="wawi-item-name">{{ $customer !== '' ? $customer : '—' }}</span>
@if ($order->shipping_country?->country)
<span class="text-muted small">{{ strtoupper($order->shipping_country->country->code) }}</span>
@endif
</td>
<td class="text-right">
<td class="text-center">
<button type="button" class="btn btn-sm btn-link p-0 js-of-toggle" data-target="of-items-{{ $order->id }}">
{{ $itemCount }} <span class="fas fa-chevron-down small"></span>
</button>
</td>
<td class="text-right">{{ $order->weight ? number_format($order->weight / 1000, 2, ',', '.').' kg' : '—' }}</td>
<td>
@if ($readyToShip)
<span class="wawi-pill wawi-pill--ok">{{ __('versandfertig') }}</span>
@else
<span class="wawi-pill wawi-pill--warning">{{ __('wartet auf Zahlung') }}</span>
@endif
@if ($clearingtype === 'fnc')
<div class="small text-muted">{{ __('Rechnung') }}</div>
@elseif ($clearingtype === 'vor')
<div class="small text-muted">{{ __('Vorkasse') }}</div>
@endif
</td>
<td>
@if ((int) $order->shipped === 0)
<span class="wawi-pill wawi-pill--warning">{{ __('offen') }}</span>
@else
<span class="wawi-pill" style="background:rgba(3,155,229,.12);color:#0277bd;">{{ $order->getShippedType() }}</span>
@endif
<div class="small mt-1">
@if ($readyToShip)
<span class="wawi-pill wawi-pill--ok">{{ __('versandfertig') }}</span>
@else
<span class="wawi-pill wawi-pill--danger">{{ __('wartet auf Zahlung') }}</span>
@endif
@if ($clearingtype === 'fnc')
<span class="text-muted">{{ __('Rechnung') }}</span>
@elseif ($clearingtype === 'vor')
<span class="text-muted">{{ __('Vorkasse') }}</span>
@endif
</div>
</td>
<td>
<td style="white-space:nowrap;">
@if ($order->isApiOrder())
@if ($order->wp_invoice_path)
<a href="{{ $order->wp_invoice_path }}" target="_blank" rel="noopener" title="{{ __('Externe Rechnung (Shop)') }}">
@ -146,19 +159,19 @@
<input type="hidden" name="back_filter" value="{{ $filter }}">
<button type="submit" class="btn btn-sm btn-outline-secondary" title="{{ __('Rechnung + Lieferschein erstellen (ohne E-Mail-Versand)') }}"
onclick="return confirm(@json(__('Rechnung + Lieferschein jetzt erstellen? (Es wird keine E-Mail versendet — Versand wie gewohnt über die Bestell-Details.)')));">
<span class="fas fa-file-medical mr-1"></span>{{ __('erstellen') }}
<span class="fas fa-file-medical mr-1"></span><span class="of-btn-text">{{ __('erstellen') }}</span>
</button>
</form>
@endif
</td>
<td class="text-right" style="white-space:nowrap;">
<td class="text-right of-actions">
@if ((int) $order->shipped === 0)
<form action="{{ route('admin.inventory.orders.status', $order->id) }}" method="post" class="d-inline">
@csrf
<input type="hidden" name="shipped" value="1">
<input type="hidden" name="back_filter" value="{{ $filter }}">
<button type="submit" class="btn btn-sm btn-outline-primary" title="{{ __('Als konfektioniert (in Bearbeitung) markieren') }}">
<span class="fas fa-box mr-1"></span>{{ __('Konfektioniert') }}
<span class="fas fa-box mr-1"></span><span class="of-btn-text">{{ __('Konfektioniert') }}</span>
</button>
</form>
@endif
@ -169,15 +182,18 @@
<input type="hidden" name="shipped" value="2">
<input type="hidden" name="back_filter" value="{{ $filter }}">
<button type="submit" class="btn btn-sm btn-primary" title="{{ __('Als versendet buchen (Bestandsabzug)') }}">
<span class="fas fa-shipping-fast mr-1"></span>{{ __('Versendet') }}
<span class="fas fa-shipping-fast mr-1"></span><span class="of-btn-text">{{ __('Versendet') }}</span>
</button>
</form>
@endif
</td>
</tr>
<tr class="of-items d-none" id="of-items-{{ $order->id }}">
<td colspan="9" class="pl-4" style="background:rgba(24,28,33,.02);">
<td colspan="6" class="pl-4" style="background:rgba(24,28,33,.02);">
<strong class="small text-muted">{{ __('Packliste') }}</strong>
@if ($order->weight)
<span class="small text-muted">· {{ __('Gewicht') }}: {{ number_format($order->weight / 1000, 2, ',', '.') }} kg</span>
@endif
<ul class="mb-1 small">
@foreach ($order->shopping_order_items as $item)
<li>
@ -197,7 +213,7 @@
</tr>
@empty
<tr>
<td colspan="9">
<td colspan="6">
<div class="wawi-empty">
<div><span class="fas fa-mug-hot"></span></div>
{{ __('Nichts zu tun — keine Bestellungen in diesem Filter.') }}