Warenwirtschaft: einheitliches UI-Design (AP-19)
- Zentrale, wiederverwendbare Design-Partial wawi-ui.blade.php (gescoptes Inline-CSS, kein Build noetig) - Bausteine: Seitenkopf, Kennzahlen-Kacheln, Karten, Toolbar/Suche, aufgeraeumte Tabellen, Status-Pills, Datenblatt-Definitionsliste, Name-Zelle mit fester Icon-Spalte, Leer-Zustaende - Umgestellt: alle Uebersicht-/Listen- und Detailseiten unter admin/inventory - Responsive: Detail-Datenblaetter brechen unter 768px gestapelt um (Label oben, Wert linksbuendig); Icon-Spalte verhindert Versatz bei Zeilenumbruch - Entwicklungsplan um AP-19 + UI-Konvention ergaenzt Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
3ee2d756e9
commit
a8f6fef38e
21 changed files with 1609 additions and 955 deletions
|
|
@ -1,8 +1,20 @@
|
|||
@extends('layouts.layout-2')
|
||||
|
||||
@section('content')
|
||||
<h4 class="font-weight-bold py-2 mb-2">{{ __('Ausgang / Ausschuss erfassen') }}</h4>
|
||||
<div class="card">
|
||||
@include('admin.inventory.partials.wawi-ui')
|
||||
<div class="wawi-page">
|
||||
<div class="wawi-page-head">
|
||||
<div>
|
||||
<h1 class="wawi-page-head__title">{{ __('Ausgang / Ausschuss erfassen') }}</h1>
|
||||
<p class="wawi-page-head__subtitle">{{ __('Bestand eines Rohstoffs oder Verpackungsartikels reduzieren') }}</p>
|
||||
</div>
|
||||
<div class="wawi-page-head__actions">
|
||||
<a href="{{ route('admin.inventory.stock-disposals.index') }}" class="btn btn-outline-secondary btn-sm">
|
||||
<span class="fas fa-arrow-left mr-1"></span>{{ __('Zurück') }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card wawi-card">
|
||||
<div class="card-body">
|
||||
<p class="text-muted small">{{ __('Reduziert den Bestand des gewählten Rohstoffs bzw. Verpackungsartikels. Der Grund ist Pflicht und erscheint in der Ausgangsliste.') }}</p>
|
||||
<form method="post" action="{{ route('admin.inventory.stock-disposals.store') }}">
|
||||
|
|
@ -116,6 +128,7 @@
|
|||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('scripts')
|
||||
|
|
|
|||
|
|
@ -1,76 +1,89 @@
|
|||
@extends('layouts.layout-2')
|
||||
|
||||
@section('content')
|
||||
@include('admin.inventory.partials.table-actions-style')
|
||||
<div class="card">
|
||||
<div class="card-header d-flex flex-wrap justify-content-between align-items-center">
|
||||
<h6 class="mb-0">{{ __('Ausgang / Ausschuss') }}</h6>
|
||||
@include('admin.inventory.partials.wawi-ui')
|
||||
|
||||
<div class="wawi-page">
|
||||
<div class="wawi-page-head">
|
||||
<div>
|
||||
<form method="get" class="d-inline-block mr-2">
|
||||
<select name="type" class="form-control form-control-sm d-inline-block" style="width:auto"
|
||||
onchange="this.form.submit()">
|
||||
<h1 class="wawi-page-head__title">{{ __('Ausgang / Ausschuss') }}</h1>
|
||||
<p class="wawi-page-head__subtitle">{{ __('Erfasste Bestandsabgänge von Rohstoffen und Verpackung') }}</p>
|
||||
</div>
|
||||
<div class="wawi-page-head__actions">
|
||||
@if (Auth::user()->isAdmin())
|
||||
<a href="{{ route('admin.inventory.stock-disposals.create') }}" class="btn btn-primary btn-sm">
|
||||
<span class="fas fa-plus mr-1"></span>{{ __('Ausschuss erfassen') }}
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="wawi-card">
|
||||
<div class="wawi-toolbar">
|
||||
<form method="get" class="mb-0">
|
||||
<select name="type" class="form-control form-control-sm" style="width:auto" onchange="this.form.submit()">
|
||||
<option value="">{{ __('Alle Arten') }}</option>
|
||||
<option value="ingredient" @selected($typeFilter === 'ingredient')>{{ __('Rohstoff') }}</option>
|
||||
<option value="packaging" @selected($typeFilter === 'packaging')>{{ __('Verpackung') }}</option>
|
||||
</select>
|
||||
</form>
|
||||
@if (Auth::user()->isAdmin())
|
||||
<a href="{{ route('admin.inventory.stock-disposals.create') }}" class="btn btn-sm btn-primary">
|
||||
{{ __('Ausschuss erfassen') }}
|
||||
</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-datatable table-responsive">
|
||||
<table class="table table-striped wawi-table mb-0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{ __('Datum') }}</th>
|
||||
<th>{{ __('Art') }}</th>
|
||||
<th>{{ __('Artikel') }}</th>
|
||||
<th>{{ __('Charge') }}</th>
|
||||
<th>{{ __('Lagerort') }}</th>
|
||||
<th class="text-right">{{ __('Menge') }}</th>
|
||||
<th>{{ __('Grund') }}</th>
|
||||
<th>{{ __('Hinweis') }}</th>
|
||||
<th>{{ __('Mitarbeiter') }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@forelse($values as $disposal)
|
||||
<div class="table-responsive">
|
||||
<table class="table wawi-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>{{ $disposal->disposed_at?->format('d.m.Y') }}</td>
|
||||
<td>
|
||||
@if ($disposal->isIngredient())
|
||||
<span class="badge badge-info">{{ __('Rohstoff') }}</span>
|
||||
@else
|
||||
<span class="badge badge-secondary">{{ __('Verpackung') }}</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>{{ $disposal->articleName() }}</td>
|
||||
<td>
|
||||
@if ($disposal->stockEntry)
|
||||
{{ $disposal->stockEntry->batch_number ?: '#'.$disposal->stockEntry->id }}
|
||||
@else
|
||||
<span class="text-muted">—</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>{{ $disposal->location?->name ?? '—' }}</td>
|
||||
<td class="text-right text-danger font-weight-bold">
|
||||
−{{ \App\Services\Util::formatNumber($disposal->quantity, $disposal->unit === 'piece' ? 0 : 2) }}
|
||||
{{ $disposal->unit === 'piece' ? __('Stück') : 'g' }}
|
||||
</td>
|
||||
<td>{{ $disposal->reason }}</td>
|
||||
<td class="text-muted">{{ $disposal->note }}</td>
|
||||
<td>{{ $disposal->user?->getFullName(false) ?: ($disposal->user?->email ?? '—') }}</td>
|
||||
<th>{{ __('Datum') }}</th>
|
||||
<th>{{ __('Art') }}</th>
|
||||
<th>{{ __('Artikel') }}</th>
|
||||
<th>{{ __('Charge') }}</th>
|
||||
<th>{{ __('Lagerort') }}</th>
|
||||
<th class="text-right">{{ __('Menge') }}</th>
|
||||
<th>{{ __('Grund') }}</th>
|
||||
<th>{{ __('Hinweis') }}</th>
|
||||
<th>{{ __('Mitarbeiter') }}</th>
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="9" class="text-center text-muted py-4">{{ __('Noch keine Ausgänge erfasst.') }}</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</thead>
|
||||
<tbody>
|
||||
@forelse($values as $disposal)
|
||||
<tr>
|
||||
<td>{{ $disposal->disposed_at?->format('d.m.Y') }}</td>
|
||||
<td>
|
||||
@if ($disposal->isIngredient())
|
||||
<span class="wawi-pill wawi-pill--ok">{{ __('Rohstoff') }}</span>
|
||||
@else
|
||||
<span class="wawi-pill" style="background:rgba(24,28,33,.06);color:#6c757d;">{{ __('Verpackung') }}</span>
|
||||
@endif
|
||||
</td>
|
||||
<td><span class="wawi-item-name">{{ $disposal->articleName() }}</span></td>
|
||||
<td>
|
||||
@if ($disposal->stockEntry)
|
||||
{{ $disposal->stockEntry->batch_number ?: '#'.$disposal->stockEntry->id }}
|
||||
@else
|
||||
<span class="text-muted">—</span>
|
||||
@endif
|
||||
</td>
|
||||
<td>{{ $disposal->location?->name ?? '—' }}</td>
|
||||
<td class="text-right text-danger font-weight-bold">
|
||||
−{{ \App\Services\Util::formatNumber($disposal->quantity, $disposal->unit === 'piece' ? 0 : 2) }}
|
||||
{{ $disposal->unit === 'piece' ? __('Stück') : 'g' }}
|
||||
</td>
|
||||
<td>{{ $disposal->reason }}</td>
|
||||
<td class="text-muted">{{ $disposal->note }}</td>
|
||||
<td>{{ $disposal->user?->getFullName(false) ?: ($disposal->user?->email ?? '—') }}</td>
|
||||
</tr>
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="9">
|
||||
<div class="wawi-empty">
|
||||
<div><span class="fas fa-dumpster"></span></div>
|
||||
{{ __('Noch keine Ausgänge erfasst.') }}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue