feat: replace Add to Order List with a direct Lock Job action
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user