@using Groceries.Data @using Microsoft.EntityFrameworkCore @inject AppDbContext DbContext
Item
@foreach (var item in items.DistinctBy(item => item.Brand)) { @foreach (var item in items) {
@*@CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol*@
@ChildContent
@code { [Parameter] public TransactionItem? TransactionItem { get; set; } [Parameter] public RenderFragment? ChildContent { get; set; } [Parameter(CaptureUnmatchedValues = true)] public Dictionary? AdditionalAttributes { get; set; } private record ItemModel(Guid Id, string Brand, string Name, decimal? Price, int? Quantity); private ItemBarcode? barcode; private ItemModel[] items = []; private ItemModel? selectedItem; private decimal? price; private int quantity; protected override async Task OnParametersSetAsync() { barcode = TransactionItem?.Item?.Barcodes.FirstOrDefault(); items = await DbContext.Items .OrderBy(item => item.Brand) .ThenBy(item => item.Name) .GroupJoin( DbContext.ItemPurchases.Where(purchase => purchase.IsLastPurchase), item => item.Id, lastPurchase => lastPurchase.ItemId, (item, purchases) => new { item, purchases }) .SelectMany( group => group.purchases.DefaultIfEmpty(), (group, lastPurchase) => new ItemModel( group.item.Id, group.item.Brand, group.item.Name, lastPurchase != null ? lastPurchase.Price : null, lastPurchase != null ? lastPurchase.Quantity : null)) .ToArrayAsync(); selectedItem = items.SingleOrDefault(item => item.Id == TransactionItem?.ItemId); price = TransactionItem?.Price >= 0 ? TransactionItem.Price : selectedItem?.Price; quantity = TransactionItem?.Quantity >= 1 ? TransactionItem.Quantity : (selectedItem?.Quantity ?? 1); } }