Warenwirtschaft: N-1 — Chargen-Gruppierung je Lieferant (Kundenentscheid 15.07.2026)
Chargennummern kommen von extern und können kollidieren. Der Lieferant gehört jetzt zum Gruppenschlüssel (batchGroupKey b:<supplier>:<lot>) — gleiche Lot-Nummern verschiedener Lieferanten verschmelzen nicht mehr (kein gemeinsames min-MHD/Summen-Rest). Batch-Check (AP-27) prüft zusätzlich den Lieferanten des zu buchenden Eingangs. Tests: +1 (getrennte Optionen je Lieferant); Chargen-Tests auf neues Schlüsselformat umgestellt. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
8a9b80327c
commit
9b6c9def97
6 changed files with 49 additions and 11 deletions
|
|
@ -218,6 +218,9 @@ class StockEntryController extends Controller
|
|||
$ingredientId = (int) $request->query('ingredient_id');
|
||||
$batchNumber = trim((string) $request->query('batch_number', ''));
|
||||
$excludeId = (int) $request->query('exclude', 0);
|
||||
// Audit N-1: Chargen sind je Lieferant getrennt — gleiche Lot-Nummer
|
||||
// eines anderen Lieferanten ist keine vorhandene Charge.
|
||||
$supplierId = (int) $request->query('supplier_id', 0);
|
||||
|
||||
if ($ingredientId < 1 || $batchNumber === '') {
|
||||
return response()->json(['exists' => false]);
|
||||
|
|
@ -229,6 +232,7 @@ class StockEntryController extends Controller
|
|||
->where('status', 'received')
|
||||
->where('ingredient_id', $ingredientId)
|
||||
->where('batch_number', $batchNumber)
|
||||
->when($supplierId > 0, fn ($q) => $q->where('supplier_id', $supplierId))
|
||||
->when($excludeId > 0, fn ($q) => $q->where('id', '!=', $excludeId))
|
||||
->orderByDesc('received_at')
|
||||
->orderByDesc('id')
|
||||
|
|
@ -240,7 +244,9 @@ class StockEntryController extends Controller
|
|||
|
||||
$latest = $entries->first();
|
||||
$remaining = $inventoryService->chargesWithRemainingForIngredient($ingredientId)
|
||||
->filter(fn (StockEntry $e) => trim((string) $e->batch_number) === $batchNumber && $e->id !== $excludeId)
|
||||
->filter(fn (StockEntry $e) => trim((string) $e->batch_number) === $batchNumber
|
||||
&& ($supplierId === 0 || (int) $e->supplier_id === $supplierId)
|
||||
&& $e->id !== $excludeId)
|
||||
->sum(fn (StockEntry $e) => (float) $e->getAttribute('remaining_quantity'));
|
||||
|
||||
return response()->json([
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue