weldLogData = $weldLogData; $this->document = $document; $this->sheet = $sheet; $this->currentRow = $currentRow; $this->settings = $settings; $this->registerColumnBased = $settings['register_column_based'] ?? 'line_number'; $this->excelRowHandler = new ExcelRowHandler(); $this->documentsAdded = 0; // Reset counter for each document type // Set documents array for dynamic type order mapping if (isset($settings['all_documents']) && is_array($settings['all_documents'])) { $this->excelRowHandler->setDocuments($settings['all_documents']); Log::debug("ExcelRowHandler initialized with documents", [ 'processor' => class_basename($this), 'documents_count' => count($settings['all_documents']) ]); } // Setup log file path $lineIdentifier = $weldLogData[$this->registerColumnBased] ?? 'unknown'; $basePath = $settings['path'] ?? ''; $this->logFilePath = "{$basePath}/{$lineIdentifier}/log.txt"; } /** * Normalize search term for file matching */ protected function normalizeSearchTerm(string $term): string { $term = str_replace("/", "*", $term); $term = str_replace(" ", "*", $term); $term = str_replace("\\", "*", $term); return $term; } /** * Search for files using glob pattern */ protected function searchFiles(string $pattern): array { Log::debug('Searching for files', ['pattern' => $pattern]); $files = glob($pattern); if ($files === false) { $files = []; } Log::debug('Files found', ['count' => count($files)]); return $files; } /** * Get full folder path for current line */ protected function getFullFolder(): string { $path = $this->settings['path'] ?? ''; $lineIdentifier = $this->weldLogData[$this->registerColumnBased] ?? 'unknown'; $basePath = "storage/documents/{$path}"; return "{$basePath}/{$lineIdentifier}/"; } /** * Write to log file * Note: This method is now silent to keep log files clean * Only errors and NOT FOUND messages are logged */ protected function log(string $message, string $level = 'info'): void { // Don't write info messages to log file anymore - keep it clean // Only errors will be logged via ExcelRowHandler // Only log to Laravel debug for development purposes Log::debug($message, [ 'processor' => class_basename($this), 'line' => $this->weldLogData[$this->registerColumnBased] ?? 'unknown' ]); } /** * Get contractor name */ protected function getContractor(): string { $subcontractors = \Cache::get("subcontractors", []); $contractorKey = $this->weldLogData['contractor'] ?? ''; if (isset($subcontractors[$contractorKey])) { return $subcontractors[$contractorKey]->company_name_ru ?? $contractorKey; } return $contractorKey; } /** * Add row to Excel using ExcelRowHandler service * * @param array $search File paths to search for * @param string $lineNumber Line number or identifier * @param string $documentDate Document date * * @return int Next row position */ protected function addRowToExcel( array $search, string $lineNumber, string $documentDate ): int { $fullFolder = $this->getFullFolder(); $override = $this->settings['override'] ?? false; // Calculate current row number based on starting row + documents added so far $startRowNo = $this->settings['row_no'] ?? 1; $currentRowNo = $startRowNo + $this->documentsAdded; Log::info("🟢 AbstractDocumentProcessor->addRowToExcel() CALLED", [ 'processor' => class_basename($this), 'row_no' => $currentRowNo, 'start_row_no' => $startRowNo, 'documents_added' => $this->documentsAdded, 'doc_type' => $this->document['type'] ?? 'N/A', 'doc_title2' => $this->document['title2'] ?? 'N/A', 'line' => $lineNumber, 'search_files' => count($search) ]); $oldCurrentRow = $this->currentRow; // Ensure the actual line identifier is available in the document array // This allows processors (like TemplateProcessor) to override $lineNumber for Excel // while still preserving the real line number for filename generation. $this->document['real_line_identifier'] = $this->weldLogData[$this->registerColumnBased] ?? $lineNumber; $newRow = $this->excelRowHandler->addRow( $search, $this->document, $fullFolder, $lineNumber, $documentDate, $currentRowNo, $this->sheet, $this->currentRow, $override ); // If a row was added, increment the documents counter and update current row if ($newRow > $oldCurrentRow) { $this->documentsAdded++; $this->currentRow = $newRow; // ← UPDATE CURRENT ROW! } return $newRow; } /** * Get the number of documents added during processing */ public function getDocumentsAdded(): int { return $this->documentsAdded; } }