Big changes added events for decisions
This commit is contained in:
@@ -489,6 +489,90 @@ public function getEvents(Import $import)
|
||||
return response()->json(['events' => $events]);
|
||||
}
|
||||
|
||||
// List unresolved keyref contract rows (based on events containing keyref-not-found)
|
||||
public function missingKeyrefRows(Import $import)
|
||||
{
|
||||
// Identify row IDs from events. Prefer specific event key, fallback to message pattern
|
||||
$rowIds = \App\Models\ImportEvent::query()
|
||||
->where('import_id', $import->id)
|
||||
->where(function ($q) {
|
||||
$q->where('event', 'contract_keyref_not_found')
|
||||
->orWhereRaw('LOWER(message) LIKE ?', ['%keyref%not found%']);
|
||||
})
|
||||
->whereNotNull('import_row_id')
|
||||
->pluck('import_row_id')
|
||||
->filter()
|
||||
->unique()
|
||||
->values();
|
||||
|
||||
if ($rowIds->isEmpty()) {
|
||||
return response()->json([
|
||||
'columns' => (array) ($import->meta['columns'] ?? []),
|
||||
'rows' => [],
|
||||
]);
|
||||
}
|
||||
|
||||
$rows = \App\Models\ImportRow::query()
|
||||
->where('import_id', $import->id)
|
||||
->whereIn('id', $rowIds)
|
||||
->orderBy('row_number')
|
||||
->get(['id', 'row_number', 'raw_data']);
|
||||
|
||||
$columns = (array) ($import->meta['columns'] ?? []);
|
||||
// If no stored header, derive from first row raw_data keys
|
||||
if (empty($columns)) {
|
||||
$first = $rows->first();
|
||||
if ($first && is_array($first->raw_data)) {
|
||||
$columns = array_keys($first->raw_data);
|
||||
}
|
||||
}
|
||||
|
||||
// Normalize each row to ordered array by $columns
|
||||
$dataRows = [];
|
||||
foreach ($rows as $r) {
|
||||
$line = [];
|
||||
foreach ($columns as $col) {
|
||||
$line[] = (string) ($r->raw_data[$col] ?? '');
|
||||
}
|
||||
$dataRows[] = [
|
||||
'id' => $r->id,
|
||||
'row_number' => $r->row_number,
|
||||
'values' => $line,
|
||||
];
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'columns' => $columns,
|
||||
'rows' => $dataRows,
|
||||
]);
|
||||
}
|
||||
|
||||
// Export unresolved keyref rows as CSV (includes header if available)
|
||||
public function exportMissingKeyrefCsv(Import $import)
|
||||
{
|
||||
$json = $this->missingKeyrefRows($import)->getData(true);
|
||||
$columns = $json['columns'] ?? [];
|
||||
$rows = $json['rows'] ?? [];
|
||||
|
||||
$fh = fopen('php://temp', 'r+');
|
||||
if (! empty($columns)) {
|
||||
fputcsv($fh, $columns);
|
||||
}
|
||||
foreach ($rows as $r) {
|
||||
fputcsv($fh, $r['values'] ?? []);
|
||||
}
|
||||
rewind($fh);
|
||||
$csv = stream_get_contents($fh);
|
||||
fclose($fh);
|
||||
|
||||
$filename = 'missing-keyref-rows-'.$import->id.'.csv';
|
||||
|
||||
return response($csv, 200, [
|
||||
'Content-Type' => 'text/csv; charset=UTF-8',
|
||||
'Content-Disposition' => 'attachment; filename="'.$filename.'"',
|
||||
]);
|
||||
}
|
||||
|
||||
// Preview (up to N) raw CSV rows for an import for mapping review
|
||||
public function preview(Import $import, Request $request)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user