131 lines
5.5 KiB
Plaintext
131 lines
5.5 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("Status"): <span class="badge @(Model.IsClosed ? "bg-danger" : "bg-success")">@(Model.IsClosed ? Localizer.Get("Closed") : Localizer.Get("Open"))</span></p>
|
|
</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">
|
|
<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>
|
|
|
|
@if (!Model.IsClosed)
|
|
{
|
|
<a href="/order/close?code=@Model.OrderCode" class="btn btn-danger w-100">@Localizer.Get("CloseOrder")</a>
|
|
}
|
|
else
|
|
{
|
|
<div class="alert alert-danger w-100">@Localizer.Get("Closed")</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
function copyToClipboard() {
|
|
const link = document.getElementById('shareLink');
|
|
link.select();
|
|
document.execCommand('copy');
|
|
alert('@Localizer.Get("LinkCopied")');
|
|
}
|
|
</script> |