Fixed localization issues, fixed text-warning not accessible,
This commit is contained in:
@@ -24,7 +24,7 @@ public class OrderController : Controller
|
|||||||
|
|
||||||
// POST: Order/Create
|
// POST: Order/Create
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IActionResult> Create(Order order, string[] itemNames, decimal[] itemPrices)
|
public async Task<IActionResult> Create(Order order, string[] itemNames, string[] itemPrices)
|
||||||
{
|
{
|
||||||
if (!ModelState.IsValid)
|
if (!ModelState.IsValid)
|
||||||
return View();
|
return View();
|
||||||
@@ -38,13 +38,14 @@ public class OrderController : Controller
|
|||||||
// Add menu items
|
// Add menu items
|
||||||
for (int i = 0; i < itemNames.Length; i++)
|
for (int i = 0; i < itemNames.Length; i++)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(itemNames[i]) && itemPrices[i] > 0)
|
itemPrices[i] = itemPrices[i].Replace(".", ",");
|
||||||
|
if (!string.IsNullOrEmpty(itemNames[i]) && decimal.TryParse(itemPrices[i], out var price) && price > 0)
|
||||||
{
|
{
|
||||||
_context.MenuItems.Add(new MenuItem
|
_context.MenuItems.Add(new MenuItem
|
||||||
{
|
{
|
||||||
OrderId = order.Id,
|
OrderId = order.Id,
|
||||||
Name = itemNames[i],
|
Name = itemNames[i],
|
||||||
Price = itemPrices[i]
|
Price = price
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -111,6 +112,26 @@ public class OrderController : Controller
|
|||||||
return View(order);
|
return View(order);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GET: Order/Close/{code}
|
||||||
|
public async Task<IActionResult> Close(string code)
|
||||||
|
{
|
||||||
|
var order = await _context.Orders.FirstOrDefaultAsync(o => o.OrderCode == code);
|
||||||
|
|
||||||
|
if (order == null)
|
||||||
|
return NotFound("Order not found");
|
||||||
|
|
||||||
|
if (order.IsClosed)
|
||||||
|
return BadRequest("Order is already closed");
|
||||||
|
|
||||||
|
order.IsClosed = true;
|
||||||
|
order.ClosedAt = DateTime.UtcNow;
|
||||||
|
|
||||||
|
_context.Orders.Update(order);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
|
||||||
|
return RedirectToAction("Details", new { code = order.OrderCode });
|
||||||
|
}
|
||||||
|
|
||||||
private string GenerateOrderCode()
|
private string GenerateOrderCode()
|
||||||
{
|
{
|
||||||
return Guid.NewGuid().ToString().Substring(0, 8).ToUpper();
|
return Guid.NewGuid().ToString().Substring(0, 8).ToUpper();
|
||||||
|
|||||||
10
Program.cs
10
Program.cs
@@ -80,7 +80,15 @@ if (!app.Environment.IsDevelopment())
|
|||||||
}
|
}
|
||||||
|
|
||||||
app.UseHttpsRedirection();
|
app.UseHttpsRedirection();
|
||||||
app.UseRequestLocalization();
|
|
||||||
|
// Add localization
|
||||||
|
var supportedCultures = new[] { "de", "de-DE", "en-US" };
|
||||||
|
var localizationOptions = new RequestLocalizationOptions()
|
||||||
|
.SetDefaultCulture("de")
|
||||||
|
.AddSupportedCultures(supportedCultures)
|
||||||
|
.AddSupportedUICultures(supportedCultures);
|
||||||
|
|
||||||
|
app.UseRequestLocalization(localizationOptions);
|
||||||
app.UseRouting();
|
app.UseRouting();
|
||||||
|
|
||||||
app.UseAuthentication();
|
app.UseAuthentication();
|
||||||
|
|||||||
@@ -100,7 +100,7 @@
|
|||||||
<value>Gesamt</value>
|
<value>Gesamt</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="IOwe" xml:space="preserve">
|
<data name="IOwe" xml:space="preserve">
|
||||||
<value>Ich schulde</value>
|
<value>Offener Betrag</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AddMore" xml:space="preserve">
|
<data name="AddMore" xml:space="preserve">
|
||||||
<value>Mehr hinzufügen</value>
|
<value>Mehr hinzufügen</value>
|
||||||
@@ -267,4 +267,16 @@
|
|||||||
<data name="RegistrationSuccessful" xml:space="preserve">
|
<data name="RegistrationSuccessful" xml:space="preserve">
|
||||||
<value>Registrierung erfolgreich! Leitung zum Login...</value>
|
<value>Registrierung erfolgreich! Leitung zum Login...</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Created" xml:space="preserve">
|
||||||
|
<value>Erstellt</value>
|
||||||
|
</data>
|
||||||
|
<data name="MyItems" xml:space="preserve">
|
||||||
|
<value>Meine Artikel</value>
|
||||||
|
</data>
|
||||||
|
<data name="CurrencySymbol" xml:space="preserve">
|
||||||
|
<value>€</value>
|
||||||
|
</data>
|
||||||
|
<data name="Currency" xml:space="preserve">
|
||||||
|
<value>{0} €</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -100,7 +100,7 @@
|
|||||||
<value>Total</value>
|
<value>Total</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="IOwe" xml:space="preserve">
|
<data name="IOwe" xml:space="preserve">
|
||||||
<value>I owe</value>
|
<value>Outstanding amount</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="AddMore" xml:space="preserve">
|
<data name="AddMore" xml:space="preserve">
|
||||||
<value>Add More</value>
|
<value>Add More</value>
|
||||||
@@ -267,4 +267,16 @@
|
|||||||
<data name="RegistrationSuccessful" xml:space="preserve">
|
<data name="RegistrationSuccessful" xml:space="preserve">
|
||||||
<value>Registration successful! Redirecting to login...</value>
|
<value>Registration successful! Redirecting to login...</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="Created" xml:space="preserve">
|
||||||
|
<value>Created</value>
|
||||||
|
</data>
|
||||||
|
<data name="MyItems" xml:space="preserve">
|
||||||
|
<value>My Items</value>
|
||||||
|
</data>
|
||||||
|
<data name="CurrencySymbol" xml:space="preserve">
|
||||||
|
<value>$</value>
|
||||||
|
</data>
|
||||||
|
<data name="Currency" xml:space="preserve">
|
||||||
|
<value>${0}</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
||||||
@@ -14,4 +14,5 @@ public class LocalizationService
|
|||||||
public string Get(string key) => _localizer[key];
|
public string Get(string key) => _localizer[key];
|
||||||
|
|
||||||
public string this[string key] => _localizer[key];
|
public string this[string key] => _localizer[key];
|
||||||
|
public string this[string key, params object[] args] => _localizer[key, args];
|
||||||
}
|
}
|
||||||
@@ -11,8 +11,6 @@
|
|||||||
<div class="row mb-4">
|
<div class="row mb-4">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<h1>@Localizer.Get("Welcome")</h1>
|
<h1>@Localizer.Get("Welcome")</h1>
|
||||||
<p>@Localizer.Get("LoggedInAs"): <strong>@User.Identity?.Name</strong></p>
|
|
||||||
<a href="/Account/Logout" class="btn btn-danger">@Localizer.Get("Logout")</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -63,7 +61,7 @@
|
|||||||
<small class="text-muted">@Localizer.Get("Created"): @order.CreatedAt.ToString("MMM dd, yyyy HH:mm")</small><br>
|
<small class="text-muted">@Localizer.Get("Created"): @order.CreatedAt.ToString("MMM dd, yyyy HH:mm")</small><br>
|
||||||
<small>@Localizer.Get("Items"): @order.MenuItems.Count | @Localizer.Get("Orders"): @order.OrderItems.Count</small>
|
<small>@Localizer.Get("Items"): @order.MenuItems.Count | @Localizer.Get("Orders"): @order.OrderItems.Count</small>
|
||||||
</p>
|
</p>
|
||||||
<p class="text-success"><strong>@Localizer.Get("Total"): $@order.OrderItems.Sum(oi => oi.MenuItem.Price * oi.Quantity).ToString("F2")</strong></p>
|
<p class="text-success"><strong>@Localizer.Get("Total"): @Localizer["Currency", order.OrderItems.Sum(oi => oi.MenuItem.Price * oi.Quantity).ToString("F2")]</strong></p>
|
||||||
<div class="d-flex gap-2">
|
<div class="d-flex gap-2">
|
||||||
<a href="/order/details?code=@order.OrderCode" class="btn btn-sm btn-primary">@Localizer.Get("View")</a>
|
<a href="/order/details?code=@order.OrderCode" class="btn btn-sm btn-primary">@Localizer.Get("View")</a>
|
||||||
@if (!order.IsClosed)
|
@if (!order.IsClosed)
|
||||||
@@ -72,7 +70,7 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
<span class="badge bg-secondary">@Localizer.Get("Closed")</span>
|
<span class="badge bg-secondary align-content-center">@Localizer.Get("Closed")</span>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -109,7 +107,7 @@
|
|||||||
<small class="text-muted">@Localizer.Get("CreatedBy"): @order.CreatorName</small><br>
|
<small class="text-muted">@Localizer.Get("CreatedBy"): @order.CreatorName</small><br>
|
||||||
<small>@Localizer.Get("MyItems"): @myItems.Count</small>
|
<small>@Localizer.Get("MyItems"): @myItems.Count</small>
|
||||||
</p>
|
</p>
|
||||||
<p class="text-warning"><strong>@Localizer.Get("IOwe"): $@myItems.Sum(oi => oi.MenuItem.Price * oi.Quantity).ToString("F2")</strong></p>
|
<p><strong>@Localizer.Get("IOwe"): @Localizer["Currency", myItems.Sum(oi => (oi.MenuItem?.Price ?? 0) * oi.Quantity).ToString("F2")]</strong></p>
|
||||||
<div class="d-flex gap-2">
|
<div class="d-flex gap-2">
|
||||||
<a href="/order/join?code=@order.OrderCode" class="btn btn-sm btn-primary">@Localizer.Get("View")</a>
|
<a href="/order/join?code=@order.OrderCode" class="btn btn-sm btn-primary">@Localizer.Get("View")</a>
|
||||||
@if (!order.IsClosed)
|
@if (!order.IsClosed)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
<form method="post" id="createOrderForm">
|
<form method="post" id="createOrderForm">
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="Name" class="form-label">@Localizer["OrderName"]</label>
|
<label for="Name" class="form-label">@Localizer["OrderName"]</label>
|
||||||
<input type="text" class="form-control" id="Name" name="Name" placeholder="e.g., Pizza Party" required>
|
<input type="text" class="form-control" id="Name" name="Name" required>
|
||||||
<small class="text-muted">@Localizer["GiveOrderName"]</small>
|
<small class="text-muted">@Localizer["GiveOrderName"]</small>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<span class="input-group-text">$</span>
|
<span class="input-group-text">@Localizer["CurrencySymbol"]</span>
|
||||||
<input type="number" class="form-control" placeholder="@Localizer["Price"]" name="itemPrices[]" step="0.01" min="0">
|
<input type="number" class="form-control" placeholder="@Localizer["Price"]" name="itemPrices[]" step="0.01" min="0">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -67,7 +67,7 @@ document.getElementById('addItemBtn').addEventListener('click', function() {
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<span class="input-group-text">$</span>
|
<span class="input-group-text">@Localizer["CurrencySymbol"]</span>
|
||||||
<input type="number" class="form-control" placeholder="@Localizer["Price"]" name="itemPrices[]" step="0.01" min="0">
|
<input type="number" class="form-control" placeholder="@Localizer["Price"]" name="itemPrices[]" step="0.01" min="0">
|
||||||
<button type="button" class="btn btn-outline-danger" onclick="this.closest('.item-row').remove()">@Localizer["Remove"]</button>
|
<button type="button" class="btn btn-outline-danger" onclick="this.closest('.item-row').remove()">@Localizer["Remove"]</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
{
|
{
|
||||||
<tr>
|
<tr>
|
||||||
<td>@item.Name</td>
|
<td>@item.Name</td>
|
||||||
<td>$@item.Price.ToString("F2")</td>
|
<td>@Localizer["Currency", item.Price.ToString("F2")]</td>
|
||||||
</tr>
|
</tr>
|
||||||
}
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
<td>@orderItem.ParticipantName</td>
|
<td>@orderItem.ParticipantName</td>
|
||||||
<td>@orderItem.MenuItem?.Name</td>
|
<td>@orderItem.MenuItem?.Name</td>
|
||||||
<td>@orderItem.Quantity</td>
|
<td>@orderItem.Quantity</td>
|
||||||
<td>$@(orderItem.MenuItem?.Price * orderItem.Quantity ?? 0).ToString("F2")</td>
|
<td>@Localizer["Currency", (orderItem.MenuItem?.Price * orderItem.Quantity ?? 0).ToString("F2")]</td>
|
||||||
</tr>
|
</tr>
|
||||||
}
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
@@ -105,13 +105,17 @@
|
|||||||
<h5>@Localizer.Get("QuickStats")</h5>
|
<h5>@Localizer.Get("QuickStats")</h5>
|
||||||
<p>@Localizer.Get("TotalItems"): <strong>@Model.MenuItems.Count</strong></p>
|
<p>@Localizer.Get("TotalItems"): <strong>@Model.MenuItems.Count</strong></p>
|
||||||
<p>@Localizer.Get("TotalOrders"): <strong>@Model.OrderItems.Count</strong></p>
|
<p>@Localizer.Get("TotalOrders"): <strong>@Model.OrderItems.Count</strong></p>
|
||||||
<p>@Localizer.Get("TotalRevenue"): <strong>$@Model.OrderItems.Sum(oi => oi.MenuItem.Price * oi.Quantity).ToString("F2")</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>
|
||||||
|
|
||||||
@if (!Model.IsClosed)
|
@if (!Model.IsClosed)
|
||||||
{
|
{
|
||||||
<a href="#" class="btn btn-danger w-100">@Localizer.Get("CloseOrder")</a>
|
<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>
|
</div>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<div class="card shadow mb-4">
|
<div class="card shadow mb-4">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h2>@Model.CreatorName</h2>
|
<h2>@Model.Name</h2>
|
||||||
<p class="text-muted">@Localizer["Code"]: <strong>@Model.OrderCode</strong></p>
|
<p class="text-muted">@Localizer["Code"]: <strong>@Model.OrderCode</strong></p>
|
||||||
<p>@Localizer["CreatedBy"]: <strong>@Model.CreatorName</strong></p>
|
<p>@Localizer["CreatedBy"]: <strong>@Model.CreatorName</strong></p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
<footer class="border-top footer text-muted">
|
<footer class="border-top footer text-muted">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
© 2025 - OneForMe - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
|
© 2025 - OneForMe
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
<script src="~/lib/jquery/dist/jquery.min.js"></script>
|
<script src="~/lib/jquery/dist/jquery.min.js"></script>
|
||||||
|
|||||||
Reference in New Issue
Block a user