@page "/tire-storage"
@implements IAsyncDisposable
@inject ITireStackService TireStackService
@inject IStorageLocationService StorageLocationService
@inject ICatalogService CatalogService
@inject UserSessionService UserSession
@inject IJSRuntime JS
@using Lagerbestand.Components.Shared
Lagerübersicht - Reifen Späth Lagerverwaltung
@if (!UserSession.IsWorkerOrAdmin)
{
🔒
Zugriff verweigert
Diese Seite ist nur für Mitarbeiter und Administratoren zugänglich.
Zur Startseite
}
else
{
@* Statistics *@
@stats.TotalStacksStored
Stapel (@stats.TotalTiresStored Reifen)
@stats.CustomerStackCount
👤 Kundenstapel
@stats.InventoryStackCount
📦 Lagerbestand
@stats.AvailableLocations
Freie Plätze
@* Type Filter (Customer vs Inventory) *@
@* View Toggle (List / Rack Grid) *@
@* Search & Filter *@
@* Category Filter (only when showing inventory) *@
@if (typeFilter == true && categories.Count > 0)
{
}
@* Tire Stacks List *@
@if (isLoading)
{
}
else if (showGridView)
{
@foreach (var area in new[] { AreaType.Werkstatt, AreaType.Lager })
{
@area.GetBuildingLabel()
@for (int row = StorageLocation.MinRow; row <= area.GetMaxRow(); row++)
{
var currentRow = row;
Reihe @currentRow
@foreach (var side in new[] { "Links", "Rechts" })
{
@side
@foreach (var pos in ShelfPositionExtensions.All.Where(p => p.IsLeft() == (side == "Links")).OrderByDescending(p => p.IsTop()))
{
@(pos.IsTop() ? "Oben" : "Unten")
@for (int slot = StorageLocation.MinSlot; slot <= StorageLocation.MaxSlot; slot++)
{
var loc = GetLocation(area, currentRow, pos, slot);
var cellClass = loc == null ? "missing" : !loc.IsAvailable ? "blocked" : loc.IsOccupied ? "occupied" : "free";
}
}
}
}
}
Frei
Belegt
Gesperrt
@if (selectedLocation != null)
{
}
}
else if (filteredTireStacks.Count == 0)
{
📦
Keine Einträge
@(string.IsNullOrEmpty(searchTerm) ? "Noch keine Reifenstapel eingelagert." : "Keine Ergebnisse für Ihre Suche.")
@if (string.IsNullOrEmpty(searchTerm))
{
Reifenstapel einlagern
}
}
else
{
@foreach (var ts in filteredTireStacks)
{
ToggleDetails(ts.Id)"
role="listitem"
aria-expanded="@(expandedId == ts.Id)">
@(ts.Season == TireSeason.Sommer ? "☀️" : ts.Season == TireSeason.Winter ? "❄️" : "🔄")
@if (ts.IsInventory)
{
📦 @(ts.CatalogItem?.Name ?? "Lagerbestand")
}
else
{
@ts.Customer?.FullName
}
1 Stapel (@TireStack.TiresPerStack Reifen) @(ts.TireSize != null ? $"| {ts.TireSize}" : "") @(ts.WithRims ? "| mit Felgen" : "")
@(ts.StorageLocation?.Code ?? "-")
@if (!ts.IsInventory && ts.Vehicle != null)
{
@ts.Vehicle.ShortName
}
@if (ts.IsInventory)
{
Lager
}
@if (expandedId == ts.Id)
{
- Ticket-Nr.
- @ts.TicketNumber
- Reifenstapel
- 1 Stapel (@TireStack.TiresPerStack Reifen)
@if (ts.IsInventory && ts.CatalogItem != null)
{
- Kategorie
- @ts.CatalogItem.Name
}
- Marke
- @(ts.TireBrand ?? "-")
- Modell
- @(ts.TireModel ?? "-")
- Zustand
- @ts.ConditionText
- Eingelagert
- Dauer
- @ts.DaysStored Tage
@if (!string.IsNullOrEmpty(ts.Notes))
{
Notizen:
@ts.Notes
}
}
}
}
@* Expiring Pickups Warning (only for customer stacks) *@
@if (expiringPickups.Count > 0)
{
}
}
@code {
private List