initialize($weldLogData, $document, $sheet, $currentRow, $settings); $procedures = []; if (!empty($document['title2'])) { $procedures = array_map('trim', explode(",", $document['title2'])); } // Prepare procedures with dates for sorting $proceduresWithDates = []; foreach ($procedures as $procedureNo) { $procedure = db("document_procedures")->where("document_no", $procedureNo)->first(); if (!$procedure) continue; $proceduresWithDates[] = [ 'procedure' => $procedure, 'date' => $procedure->publish_date ?? '' ]; } // Sort by publish_date (oldest first) - reverse insertion order usort($proceduresWithDates, function($a, $b) { $timestampA = !empty($a['date']) ? strtotime($a['date']) : 0; $timestampB = !empty($b['date']) ? strtotime($b['date']) : 0; return $timestampA <=> $timestampB; }); foreach ($proceduresWithDates as $procData) { $procedure = $procData['procedure']; $normalized = $this->normalizeSearchTerm($procedure->document_no); $search = $this->searchFiles("storage/documents/{$document['path']}/*{$normalized}*.pdf"); $document['title2'] = $procedure->document_no; $this->document = $document; $documentDate = $procData['date']; $newRow = $this->addRowToExcel($search, $procedure->document_no, $documentDate); if ($newRow > $currentRow) { $currentRow = $newRow; } } return $currentRow; } }