This commit is contained in:
Simon Pocrnjič 2025-10-08 22:42:27 +02:00
parent 39dd3d4d8f
commit 1b96b0d821

View File

@ -890,21 +890,25 @@ public function process(Import $import, ?Authenticatable $user = null): array
} }
$failedRows[] = $rowNum; $failedRows[] = $rowNum;
$invalid++; $invalid++;
ImportEvent::create([ try {
'import_id' => $import->id, ImportEvent::create([
'user_id' => $user?->getAuthIdentifier(), 'import_id' => $import->id,
'import_row_id' => $importRow?->id, 'user_id' => $user?->getAuthIdentifier(),
'event' => 'row_exception', 'import_row_id' => $importRow?->id, // may be null if creation failed
'level' => 'error', 'event' => 'row_exception',
'message' => $this->safeErrorMessage($e->getMessage()), 'level' => 'error',
'context' => [ 'message' => $this->safeErrorMessage($e->getMessage()),
'classification' => $this->classifyRowException($e), 'context' => [
'driver' => DB::connection()->getDriverName(), 'classification' => $this->classifyRowException($e),
'row_number' => $rowNum, 'driver' => DB::connection()->getDriverName(),
'raw_sha1' => isset($rawAssoc) ? sha1(json_encode($rawAssoc)) : null, 'row_number' => $rowNum,
'raw_data_preview' => isset($rawAssoc) ? $this->buildRawDataPreview($rawAssoc) : [], 'raw_sha1' => isset($rawAssoc) ? sha1(json_encode($rawAssoc)) : null,
], 'raw_data_preview' => isset($rawAssoc) ? $this->buildRawDataPreview($rawAssoc) : [],
]); ],
]);
} catch (\Throwable $evtErr) {
// Swallow secondary failure to ensure loop continues
}
// Skip to next row without aborting whole import // Skip to next row without aborting whole import
continue; continue;
@ -1435,10 +1439,20 @@ private function upsertContractChain(Import $import, array $mapped, $mappings):
} }
$data = array_filter($applyInsert, fn ($v) => ! is_null($v)); $data = array_filter($applyInsert, fn ($v) => ! is_null($v));
if (array_key_exists('start_date', $data)) { if (array_key_exists('start_date', $data)) {
$data['start_date'] = $this->normalizeDate(is_scalar($data['start_date']) ? (string) $data['start_date'] : null) ?? $data['start_date']; $norm = $this->normalizeDate(is_scalar($data['start_date']) ? (string) $data['start_date'] : null);
if ($norm === null || $norm === '') {
unset($data['start_date']); // let default fill below
} else {
$data['start_date'] = $norm;
}
} }
if (array_key_exists('end_date', $data)) { if (array_key_exists('end_date', $data)) {
$data['end_date'] = $this->normalizeDate(is_scalar($data['end_date']) ? (string) $data['end_date'] : null) ?? $data['end_date']; $normEnd = $this->normalizeDate(is_scalar($data['end_date']) ? (string) $data['end_date'] : null);
if ($normEnd === null || $normEnd === '') {
unset($data['end_date']); // treat blank as null (omit)
} else {
$data['end_date'] = $normEnd;
}
} }
$data['client_case_id'] = $clientCaseId; $data['client_case_id'] = $clientCaseId;
$data['reference'] = $reference; $data['reference'] = $reference;