refactor: remove packing auto-discovery fallback
The fallback silently pulled from StockItem.QuantityOnHand and always added an extra unlimited bin on top when a job had no stock configured - i.e. it assumed unlimited purchasing. Per docs/superpowers/specs/2026-08-01-remove-inventory-quantity-tracking-design.md, a job's available stock must now be exactly what's explicitly entered.
This commit is contained in:
@@ -46,10 +46,10 @@ public class CutListPackingService
|
|||||||
// Build stock bins
|
// Build stock bins
|
||||||
var stockBins = new List<StockBinSource>();
|
var stockBins = new List<StockBinSource>();
|
||||||
|
|
||||||
// Check if job has specific stock configured for this material
|
// Use job-specific stock configuration. Jobs must have stock explicitly configured -
|
||||||
if (jobStockByMaterial.TryGetValue(materialId, out var materialJobStock) && materialJobStock.Count > 0)
|
// there is no fallback to "whatever's in inventory."
|
||||||
|
if (jobStockByMaterial.TryGetValue(materialId, out var materialJobStock))
|
||||||
{
|
{
|
||||||
// Use job-specific stock configuration
|
|
||||||
foreach (var stock in materialJobStock.OrderBy(s => s.Priority))
|
foreach (var stock in materialJobStock.OrderBy(s => s.Priority))
|
||||||
{
|
{
|
||||||
stockBins.Add(new StockBinSource
|
stockBins.Add(new StockBinSource
|
||||||
@@ -61,37 +61,6 @@ public class CutListPackingService
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// No job-specific stock - use all available stock items for this material
|
|
||||||
var stockItems = await context.StockItems
|
|
||||||
.Where(s => s.MaterialId == materialId && s.IsActive)
|
|
||||||
.ToListAsync();
|
|
||||||
|
|
||||||
foreach (var stock in stockItems)
|
|
||||||
{
|
|
||||||
if (stock.QuantityOnHand > 0)
|
|
||||||
{
|
|
||||||
// In-stock with finite quantity
|
|
||||||
stockBins.Add(new StockBinSource
|
|
||||||
{
|
|
||||||
LengthInches = stock.LengthInches,
|
|
||||||
Quantity = stock.QuantityOnHand,
|
|
||||||
Priority = 1,
|
|
||||||
IsInStock = true
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Always add as purchasable (unlimited) - algorithm will use in-stock first due to priority
|
|
||||||
stockBins.Add(new StockBinSource
|
|
||||||
{
|
|
||||||
LengthInches = stock.LengthInches,
|
|
||||||
Quantity = -1, // unlimited
|
|
||||||
Priority = 2,
|
|
||||||
IsInStock = false
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stockBins.Count == 0)
|
if (stockBins.Count == 0)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user