feat: replace Add to Order List with a direct Lock Job action

This commit is contained in:
aj
2026-08-01 08:38:20 -04:00
parent 8d6ada35e5
commit 597181bd78
+13 -57
View File
@@ -4,7 +4,6 @@
@inject MaterialService MaterialService @inject MaterialService MaterialService
@inject StockItemService StockItemService @inject StockItemService StockItemService
@inject CutListPackingService PackingService @inject CutListPackingService PackingService
@inject PurchaseItemService PurchaseItemService
@inject NavigationManager Navigation @inject NavigationManager Navigation
@inject IJSRuntime JS @inject IJSRuntime JS
@using CutList.Core @using CutList.Core
@@ -374,8 +373,8 @@ else
private MultiMaterialPackResult? packResult; private MultiMaterialPackResult? packResult;
private MultiMaterialPackingSummary? summary; private MultiMaterialPackingSummary? summary;
private bool optimizing; private bool optimizing;
private bool addingToOrderList; private bool lockingJob;
private bool addedToOrderList; private bool jobLocked;
private IEnumerable<MaterialShape> DistinctShapes => materials.Select(m => m.Shape).Distinct().OrderBy(s => s); private IEnumerable<MaterialShape> DistinctShapes => materials.Select(m => m.Shape).Distinct().OrderBy(s => s);
private IEnumerable<Material> FilteredMaterials => !selectedShape.HasValue private IEnumerable<Material> FilteredMaterials => !selectedShape.HasValue
@@ -443,7 +442,7 @@ else
if (packResult != null) if (packResult != null)
{ {
summary = PackingService.GetSummary(packResult); summary = PackingService.GetSummary(packResult);
addedToOrderList = job.IsLocked; jobLocked = job.IsLocked;
} }
} }
catch catch
@@ -1049,18 +1048,18 @@ else
<h5 class="mb-0"><i class="bi bi-cart me-2"></i>Purchase List</h5> <h5 class="mb-0"><i class="bi bi-cart me-2"></i>Purchase List</h5>
@if (summary.TotalToBePurchasedBins > 0) @if (summary.TotalToBePurchasedBins > 0)
{ {
@if (addedToOrderList) @if (jobLocked)
{ {
<span class="badge bg-success"><i class="bi bi-check-lg me-1"></i>Added to orders</span> <span class="badge bg-success"><i class="bi bi-lock-fill me-1"></i>Job Locked</span>
} }
else else
{ {
<button class="btn btn-warning btn-sm" @onclick="AddToOrderList" disabled="@addingToOrderList"> <button class="btn btn-warning btn-sm" @onclick="LockJob" disabled="@lockingJob">
@if (addingToOrderList) @if (lockingJob)
{ {
<span class="spinner-border spinner-border-sm me-1"></span> <span class="spinner-border spinner-border-sm me-1"></span>
} }
<i class="bi bi-cart-plus me-1"></i>Add to Order List <i class="bi bi-lock me-1"></i>Lock Job
</button> </button>
} }
} }
@@ -1072,12 +1071,6 @@ else
} }
else else
{ {
@if (addedToOrderList)
{
<div class="alert alert-success py-2 mb-3">
Items added to order list. <a href="orders">View Orders</a>
</div>
}
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-sm mb-0"> <table class="table table-sm mb-0">
<thead> <thead>
@@ -1214,7 +1207,7 @@ else
// Refresh job to get updated OptimizedAt // Refresh job to get updated OptimizedAt
job = (await JobService.GetByIdAsync(Id!.Value))!; job = (await JobService.GetByIdAsync(Id!.Value))!;
addedToOrderList = job.IsLocked; jobLocked = job.IsLocked;
} }
finally finally
{ {
@@ -1222,55 +1215,18 @@ else
} }
} }
private async Task AddToOrderList() private async Task LockJob()
{ {
addingToOrderList = true; lockingJob = true;
try try
{ {
var purchaseItems = new List<PurchaseItem>();
var stockItems = await StockItemService.GetAllAsync();
foreach (var materialResult in packResult!.MaterialResults)
{
if (materialResult.ToBePurchasedBins.Count == 0) continue;
var materialId = materialResult.Material.Id;
// Group bins by length to consolidate quantities
foreach (var group in materialResult.ToBePurchasedBins.GroupBy(b => b.Length))
{
var lengthInches = (decimal)group.Key;
var quantity = group.Count();
// Find the matching stock item
var stockItem = stockItems.FirstOrDefault(s =>
s.MaterialId == materialId && s.LengthInches == lengthInches);
if (stockItem != null)
{
purchaseItems.Add(new PurchaseItem
{
StockItemId = stockItem.Id,
Quantity = quantity,
JobId = Id!.Value,
Status = PurchaseItemStatus.Pending
});
}
}
}
if (purchaseItems.Count > 0)
{
await PurchaseItemService.CreateBulkAsync(purchaseItems);
}
await JobService.LockAsync(Id!.Value); await JobService.LockAsync(Id!.Value);
job = (await JobService.GetByIdAsync(Id!.Value))!; job = (await JobService.GetByIdAsync(Id!.Value))!;
addedToOrderList = true; jobLocked = true;
} }
finally finally
{ {
addingToOrderList = false; lockingJob = false;
} }
} }