diff --git a/app/Http/Controllers/ReceiptScanController.php b/app/Http/Controllers/ReceiptScanController.php index 8b42d5b..c5bb4f5 100644 --- a/app/Http/Controllers/ReceiptScanController.php +++ b/app/Http/Controllers/ReceiptScanController.php @@ -161,6 +161,53 @@ class ReceiptScanController extends Controller 'total_decimal' => $request->filled('total_decimal') ? $request->input('total_decimal') : null, ]); + if ($request->has('row_labels') && is_array($request->input('row_labels'))) { + $receiptScan->refresh(); + $meta = is_array($receiptScan->raw_meta) ? $receiptScan->raw_meta : []; + $baseSuggestions = $this->normalizeItemSuggestions( + $meta['item_suggestions'] ?? $this->extractItemSuggestions($receiptScan->ocr_text) + ); + $labels = $request->input('row_labels', []); + $prices = $request->input('row_prices', []); + $qtys = $request->input('row_qty', []); + $take = $request->input('row_take', []); + + $merged = []; + foreach ($labels as $i => $labelRaw) { + $label = trim((string) $labelRaw); + if ($label === '') { + continue; + } + $priceRaw = trim((string) ($prices[$i] ?? '')); + $qtyRaw = trim((string) ($qtys[$i] ?? '')); + $uncertain = (bool) ($baseSuggestions[$i]['is_uncertain'] ?? false); + $merged[] = [ + 'label' => $label, + 'price_raw' => $this->stripVatLetterFromPriceField($priceRaw), + 'quantity_raw' => $qtyRaw, + 'is_uncertain' => $uncertain, + ]; + } + + $selectionState = []; + foreach ($labels as $i => $labelRaw) { + $label = trim((string) $labelRaw); + if ($label === '') { + continue; + } + $priceRaw = trim((string) ($prices[$i] ?? '')); + $qtyRaw = trim((string) ($qtys[$i] ?? '')); + $selectionKey = $this->suggestionRowKey($label, $priceRaw, $qtyRaw); + $selectionState[$selectionKey] = isset($take[$i]); + } + + if ($merged !== []) { + $meta['item_suggestions'] = $merged; + $meta['item_selection_state'] = $selectionState; + $receiptScan->update(['raw_meta' => $meta]); + } + } + return back()->with('status', 'Kassazettel-Daten aktualisiert.'); } diff --git a/app/Http/Requests/UpdateReceiptScanRequest.php b/app/Http/Requests/UpdateReceiptScanRequest.php index f67f7fc..9e5537c 100644 --- a/app/Http/Requests/UpdateReceiptScanRequest.php +++ b/app/Http/Requests/UpdateReceiptScanRequest.php @@ -17,6 +17,14 @@ class UpdateReceiptScanRequest extends FormRequest 'store_name' => ['nullable', 'string', 'max:255'], 'receipt_date' => ['nullable', 'date'], 'total_decimal' => ['nullable', 'numeric', 'min:0', 'max:999999.99'], + 'row_labels' => ['nullable', 'array'], + 'row_labels.*' => ['nullable', 'string', 'max:255'], + 'row_prices' => ['nullable', 'array'], + 'row_prices.*' => ['nullable', 'string', 'max:64'], + 'row_qty' => ['nullable', 'array'], + 'row_qty.*' => ['nullable', 'string', 'max:64'], + 'row_take' => ['nullable', 'array'], + 'row_take.*' => ['nullable', 'in:1'], ]; } } diff --git a/resources/views/receipt-scans/index.blade.php b/resources/views/receipt-scans/index.blade.php index 7d933a3..5c9420d 100644 --- a/resources/views/receipt-scans/index.blade.php +++ b/resources/views/receipt-scans/index.blade.php @@ -92,44 +92,42 @@ · {{ $validatedAtFormatted }} @endif -
+