Fix error loading Add/Edit Transaction Item page
All checks were successful
Docker Image CI / build (push) Successful in 3m8s
All checks were successful
Docker Image CI / build (push) Successful in 3m8s
This commit is contained in:
@ -3,7 +3,7 @@
|
||||
|
||||
@layout Layout
|
||||
|
||||
@inject AppDbContext DbContext
|
||||
@inject IDbContextFactory<AppDbContext> DbContextFactory
|
||||
|
||||
<PageTitle>Groceries – Edit Transaction Item</PageTitle>
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
|
||||
<div class="row">
|
||||
<button class="button button--primary" type="submit" form="editTransactionItem">Update</button>
|
||||
<a class="button" href="/transaction/new/items">Cancel</a>
|
||||
<a class="button" href="/transactions/new/items">Cancel</a>
|
||||
<span class="row__fill"></span>
|
||||
<button class="button button--danger" type="submit" form="deleteTransactionItem">Remove</button>
|
||||
</div>
|
||||
@ -35,7 +35,8 @@
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
store = await DbContext.Stores
|
||||
using var dbContext = DbContextFactory.CreateDbContext();
|
||||
store = await dbContext.Stores
|
||||
.Where(store => store.Id == Transaction.StoreId)
|
||||
.Select(store => string.Concat(store.Retailer!.Name, " ", store.Name))
|
||||
.SingleAsync();
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
@layout Layout
|
||||
|
||||
@inject AppDbContext DbContext
|
||||
@inject IDbContextFactory<AppDbContext> DbContextFactory
|
||||
|
||||
<PageTitle>Groceries – Edit Transaction Promotion</PageTitle>
|
||||
|
||||
@ -35,7 +35,8 @@
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
store = await DbContext.Stores
|
||||
using var dbContext = DbContextFactory.CreateDbContext();
|
||||
store = await dbContext.Stores
|
||||
.Where(store => store.Id == Transaction.StoreId)
|
||||
.Select(store => string.Concat(store.Retailer!.Name, " ", store.Name))
|
||||
.SingleAsync();
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
@layout Layout
|
||||
|
||||
@inject AppDbContext DbContext
|
||||
@inject IDbContextFactory<AppDbContext> DbContextFactory
|
||||
|
||||
<PageTitle>Groceries – New Transaction Item</PageTitle>
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
<TransactionItemForm TransactionItem="TransactionItem">
|
||||
<div class="row">
|
||||
<button class="button button--primary" type="submit">Add</button>
|
||||
<a class="button" href="/transaction/new/items">Cancel</a>
|
||||
<a class="button" href="/transactions/new/items">Cancel</a>
|
||||
</div>
|
||||
</TransactionItemForm>
|
||||
|
||||
@ -31,7 +31,8 @@
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
store = await DbContext.Stores
|
||||
using var dbContext = DbContextFactory.CreateDbContext();
|
||||
store = await dbContext.Stores
|
||||
.Where(store => store.Id == Transaction.StoreId)
|
||||
.Select(store => string.Concat(store.Retailer!.Name, " ", store.Name))
|
||||
.SingleAsync();
|
||||
|
@ -2,7 +2,8 @@
|
||||
@using Microsoft.EntityFrameworkCore
|
||||
|
||||
@layout Layout
|
||||
@inject AppDbContext DbContext
|
||||
|
||||
@inject IDbContextFactory<AppDbContext> DbContextFactory
|
||||
|
||||
<PageTitle>Groceries – New Transaction</PageTitle>
|
||||
|
||||
@ -78,13 +79,15 @@
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
store = await DbContext.Stores
|
||||
using var dbContext = DbContextFactory.CreateDbContext();
|
||||
|
||||
store = await dbContext.Stores
|
||||
.Where(store => store.Id == Transaction.StoreId)
|
||||
.Select(store => string.Concat(store.Retailer!.Name, " ", store.Name))
|
||||
.SingleAsync();
|
||||
|
||||
var itemIds = Transaction.Items.Select(item => item.ItemId);
|
||||
itemNames = await DbContext.Items
|
||||
itemNames = await dbContext.Items
|
||||
.Where(item => itemIds.Contains(item.Id))
|
||||
.ToDictionaryAsync(item => item.Id, item => string.Concat(item.Brand, " ", item.Name));
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
@layout Layout
|
||||
|
||||
@inject AppDbContext DbContext
|
||||
@inject IDbContextFactory<AppDbContext> DbContextFactory
|
||||
|
||||
<PageTitle>Groceries – New Transaction</PageTitle>
|
||||
|
||||
@ -41,7 +41,8 @@
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
stores = await DbContext.Stores
|
||||
using var dbContext = DbContextFactory.CreateDbContext();
|
||||
stores = await dbContext.Stores
|
||||
.OrderBy(store => store.Retailer!.Name)
|
||||
.ThenBy(store => store.Name)
|
||||
.Select(store => new StoreModel(store.Id, string.Concat(store.Retailer!.Name, " ", store.Name)))
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
@layout Layout
|
||||
|
||||
@inject AppDbContext DbContext
|
||||
@inject IDbContextFactory<AppDbContext> DbContextFactory
|
||||
|
||||
<PageTitle>Groceries – New Transaction Promotion</PageTitle>
|
||||
|
||||
@ -28,7 +28,8 @@
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
store = await DbContext.Stores
|
||||
using var dbContext = DbContextFactory.CreateDbContext();
|
||||
store = await dbContext.Stores
|
||||
.Where(store => store.Id == Transaction.StoreId)
|
||||
.Select(store => string.Concat(store.Retailer!.Name, " ", store.Name))
|
||||
.SingleAsync();
|
||||
|
@ -2,7 +2,8 @@
|
||||
@using Microsoft.EntityFrameworkCore
|
||||
|
||||
@layout Layout
|
||||
@inject AppDbContext DbContext
|
||||
|
||||
@inject IDbContextFactory<AppDbContext> DbContextFactory
|
||||
|
||||
<PageTitle>Groceries – New Transaction</PageTitle>
|
||||
|
||||
@ -64,7 +65,8 @@
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
store = await DbContext.Stores
|
||||
using var dbContext = DbContextFactory.CreateDbContext();
|
||||
store = await dbContext.Stores
|
||||
.Where(store => store.Id == Transaction.StoreId)
|
||||
.Select(store => string.Concat(store.Retailer!.Name, " ", store.Name))
|
||||
.SingleAsync();
|
||||
|
@ -1,7 +1,7 @@
|
||||
@using Groceries.Data
|
||||
@using Microsoft.EntityFrameworkCore
|
||||
|
||||
@inject AppDbContext DbContext
|
||||
@inject IDbContextFactory<AppDbContext> DbContextFactory
|
||||
|
||||
<form method="post" @attributes="AdditionalAttributes">
|
||||
@* Ensure form action/method are used for implicit submission instead of barcode button *@
|
||||
@ -93,11 +93,12 @@
|
||||
{
|
||||
barcode = TransactionItem.Item?.Barcodes.FirstOrDefault();
|
||||
|
||||
items = await DbContext.Items
|
||||
using var dbContext = DbContextFactory.CreateDbContext();
|
||||
items = await dbContext.Items
|
||||
.OrderBy(item => item.Brand)
|
||||
.ThenBy(item => item.Name)
|
||||
.GroupJoin(
|
||||
DbContext.ItemPurchases.Where(purchase => purchase.IsLastPurchase),
|
||||
dbContext.ItemPurchases.Where(purchase => purchase.IsLastPurchase),
|
||||
item => item.Id,
|
||||
lastPurchase => lastPurchase.ItemId,
|
||||
(item, purchases) => new { item, purchases })
|
||||
|
@ -1,7 +1,7 @@
|
||||
@using Groceries.Data
|
||||
@using Microsoft.EntityFrameworkCore
|
||||
|
||||
@inject AppDbContext DbContext
|
||||
@inject IDbContextFactory<AppDbContext> DbContextFactory
|
||||
|
||||
<form method="post" @attributes="AdditionalAttributes">
|
||||
<div class="form-field">
|
||||
@ -56,8 +56,9 @@
|
||||
{
|
||||
selectedItemIds = Promotion?.Items.Select(item => item.Id).ToArray() ?? [];
|
||||
|
||||
using var dbContext = DbContextFactory.CreateDbContext();
|
||||
var itemIds = Transaction.Items.Select(item => item.ItemId);
|
||||
itemNames = await DbContext.Items
|
||||
itemNames = await dbContext.Items
|
||||
.Where(item => itemIds.Contains(item.Id))
|
||||
.ToDictionaryAsync(item => item.Id, item => string.Concat(item.Brand, " ", item.Name));
|
||||
}
|
||||
|
@ -9,11 +9,11 @@ using System.Text.Json;
|
||||
[Route("/transactions")]
|
||||
public class TransactionsController : Controller
|
||||
{
|
||||
private readonly AppDbContext dbContext;
|
||||
private readonly IDbContextFactory<AppDbContext> dbContextFactory;
|
||||
|
||||
public TransactionsController(AppDbContext dbContext)
|
||||
public TransactionsController(IDbContextFactory<AppDbContext> dbContextFactory)
|
||||
{
|
||||
this.dbContext = dbContext;
|
||||
this.dbContextFactory = dbContextFactory;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
@ -70,6 +70,8 @@ public class TransactionsController : Controller
|
||||
Item? item = null;
|
||||
if (barcodeData != null && barcodeFormat != null)
|
||||
{
|
||||
using var dbContext = dbContextFactory.CreateDbContext();
|
||||
|
||||
item = await dbContext.Items
|
||||
.Where(item => item.Barcodes.Any(barcode => barcode.BarcodeData == barcodeData))
|
||||
.OrderByDescending(item => item.UpdatedAt)
|
||||
@ -105,6 +107,8 @@ public class TransactionsController : Controller
|
||||
return Results.LocalRedirect("/transactions/new");
|
||||
}
|
||||
|
||||
using var dbContext = dbContextFactory.CreateDbContext();
|
||||
|
||||
var itemId = await dbContext.Items
|
||||
.Where(item => EF.Functions.ILike(item.Brand, brand) && EF.Functions.ILike(item.Name, name))
|
||||
.Select(item => item.Id)
|
||||
@ -171,6 +175,8 @@ public class TransactionsController : Controller
|
||||
return Results.LocalRedirect("/transactions/new/items");
|
||||
}
|
||||
|
||||
using var dbContext = dbContextFactory.CreateDbContext();
|
||||
|
||||
var itemId = await dbContext.Items
|
||||
.Where(item => EF.Functions.ILike(item.Brand, brand) && EF.Functions.ILike(item.Name, name))
|
||||
.Select(item => item.Id)
|
||||
@ -235,6 +241,8 @@ public class TransactionsController : Controller
|
||||
return Results.LocalRedirect("/transactions/new");
|
||||
}
|
||||
|
||||
using var dbContext = dbContextFactory.CreateDbContext();
|
||||
|
||||
// Work around EF trying to insert items by explicitly tracking them as unchanged
|
||||
dbContext.Items.AttachRange(
|
||||
transaction.Items
|
||||
|
@ -1,7 +1,10 @@
|
||||
@using Groceries.Data
|
||||
@using Microsoft.EntityFrameworkCore
|
||||
|
||||
@layout Layout
|
||||
@inject AppDbContext DbContext
|
||||
|
||||
@implements IDisposable
|
||||
@inject IDbContextFactory<AppDbContext> DbContextFactory
|
||||
|
||||
<PageTitle>Groceries – Transactions</PageTitle>
|
||||
|
||||
@ -35,14 +38,16 @@
|
||||
public int TotalItems { get; init; }
|
||||
}
|
||||
|
||||
private AppDbContext? dbContext;
|
||||
private IQueryable<TransactionModel> transactions = null!;
|
||||
private PaginationState pagination = new();
|
||||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
transactions = DbContext.Transactions
|
||||
dbContext ??= DbContextFactory.CreateDbContext();
|
||||
transactions = dbContext.Transactions
|
||||
.Join(
|
||||
DbContext.TransactionTotals,
|
||||
dbContext.TransactionTotals,
|
||||
transaction => transaction.Id,
|
||||
transactionTotal => transactionTotal.TransactionId,
|
||||
(transaction, transactionTotal) => new TransactionModel
|
||||
@ -55,4 +60,9 @@
|
||||
})
|
||||
.OrderByDescending(transaction => transaction.CreatedAt);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
dbContext?.Dispose();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user