Files
OneForMe/Views/Order/Details.cshtml

164 lines
7.4 KiB
Plaintext

@using Microsoft.AspNetCore.Localization
@using OneForMe.Services
@inject LocalizationService Localizer
@model OneForMe.Models.Order
@{
ViewData["Title"] = Model.CreatorName;
}
<div class="container mt-5">
<div class="row">
<div class="col-md-8">
<div class="card shadow mb-4">
<div class="card-body">
<h2>@Model.Name</h2>
<p class="text-muted">@Localizer.Get("Code"): <strong>@Model.OrderCode</strong></p>
<p>@Localizer.Get("CreatedBy"): <strong>@Model.CreatorName</strong></p>
<p>@Localizer.Get("CreatedOn"): @Model.CreatedAt.ToString("g")</p>
@if (!string.IsNullOrEmpty(Model.ImagePath))
{
<img src="@Model.ImagePath" alt="Order Image" class="img-fluid mb-3 rounded" style="max-height: 300px; object-fit: cover;">
}
@if (!string.IsNullOrEmpty(Model.AdditionalInfo))
{
<p class="border rounded p-3" style="white-space: pre-wrap;">@Model.AdditionalInfo</p>
}
<p>@Localizer.Get("Status"):
<div class="d-flex align-items-center gap-3">
<div class="text-center">
<div class="badge bg-success")">Offen</div>
</div>
<div class="flex-grow-1 border-top" style="border-width:3px !important;"></div>
<div class="text-center">
<div class="badge @(Model.IsClosed ? "bg-success" : "bg-danger")">Abgeschlossen</div>
</div>
<div class="flex-grow-1 border-top" style="border-width:3px !important;"></div>
<div class="text-center">
<div class="badge @(Model.IsCompleted ? "bg-success" : "bg-danger")">Geliefert</div>
</div>
</div>
</p>
<div class="d-grid gap-2 mt-4">
@if (!Model.IsClosed && Model.CreatorName == User.Identity?.Name)
{
<a href="/order/close?code=@Model.OrderCode" class="btn btn-warning">@Localizer.Get("CloseOrder")</a>
}
@if (Model.IsClosed && !Model.IsCompleted && Model.CreatorName == User.Identity?.Name)
{
<a href="/order/complete?code=@Model.OrderCode" class="btn btn-success">@Localizer.Get("MarkCompleted")</a>
}
@if (Model.IsCompleted)
{
<button class="btn btn-success" disabled>@Localizer.Get("Completed")</button>
}
</div>
</div>
</div>
<div class="card shadow mb-4">
<div class="card-header bg-primary text-white">
<h5 class="mb-0">@Localizer.Get("MenuItems")</h5>
</div>
<div class="card-body">
@if (Model.MenuItems.Any())
{
<table class="table table-hover">
<thead>
<tr>
<th>@Localizer.Get("Item")</th>
<th>@Localizer.Get("Price")</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.MenuItems)
{
<tr>
<td>@item.Name</td>
<td>@Localizer["Currency", item.Price.ToString("F2")]</td>
</tr>
}
</tbody>
</table>
}
else
{
<p class="text-muted">@Localizer.Get("NoItemsAdded")</p>
}
</div>
</div>
<div class="card shadow">
<div class="card-header bg-info text-white">
<h5 class="mb-0">@Localizer.Get("Orders") (@Model.OrderItems.Count)</h5>
</div>
<div class="card-body">
@if (Model.OrderItems.Any())
{
<table class="table table-hover">
<thead>
<tr>
<th>@Localizer.Get("Participant")</th>
<th>@Localizer.Get("Item")</th>
<th>@Localizer.Get("Qty")</th>
<th>@Localizer.Get("Total")</th>
</tr>
</thead>
<tbody>
@foreach (var orderItem in Model.OrderItems)
{
<tr>
<td>@orderItem.ParticipantName</td>
<td>@orderItem.MenuItem?.Name</td>
<td>@orderItem.Quantity</td>
<td>@Localizer["Currency", (orderItem.MenuItem?.Price * orderItem.Quantity ?? 0).ToString("F2")]</td>
</tr>
}
</tbody>
</table>
}
else
{
<p class="text-muted">@Localizer.Get("NoOrdersYet")</p>
}
</div>
</div>
</div>
<div class="col-md-4">
<div class="card shadow mb-4 bg-light">
<div class="card-body @(Model.IsClosed ? "disabled" : "")">
<h5>@Localizer.Get("ShareOrder")</h5>
<p>@Localizer.Get("SendLinkToOthers")</p>
<div class="input-group">
<input type="text" class="form-control" id="shareLink" value="@(Context.Request.Scheme)://@(Context.Request.Host)/order/join?code=@Model.OrderCode" readonly>
<button class="btn btn-outline-primary" onclick="copyToClipboard()">@Localizer.Get("Copy")</button>
</div>
</div>
</div>
<div class="card shadow mb-4">
<div class="card-body">
<h5>@Localizer.Get("QuickStats")</h5>
<p>@Localizer.Get("TotalItems"): <strong>@Model.MenuItems.Count</strong></p>
<p>@Localizer.Get("TotalOrders"): <strong>@Model.OrderItems.Count</strong></p>
<p>@Localizer.Get("TotalRevenue"): <strong>@Localizer["Currency", Model.OrderItems.Sum(oi => oi.MenuItem.Price * oi.Quantity).ToString("F2")]</strong></p>
</div>
</div>
</div>
</div>
</div>
<script>
function copyToClipboard() {
const link = document.getElementById('shareLink');
link.select();
document.execCommand('copy');
alert('@Localizer.Get("LinkCopied")');
}
</script>