Files
2026-04-28 21:14:25 +03:00

139 lines
6.3 KiB
PHP

<?php
namespace App\Services\TpCreator\DocumentProcessors;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use Illuminate\Support\Facades\Cache;
class WdbProcessor extends AbstractTpDocumentProcessor
{
public function process(array $lineData, array $document, Worksheet $sheet, int $currentRow, array $settings): int
{
$testPackageNo = $lineData['test_package_number'];
$docPath = $document['path'];
$docTitle = $document['title2'] ?? '';
$override = $settings['override'] ?? true;
$folder = $settings['full_folder'];
$rowNo = $settings['row_no'];
$cleanTitle = str_replace("003_Welding_Database/", "", $docTitle);
$document['title2'] = $cleanTitle;
// Load dependencies
$testPackage = db("test_pack_base_statuses")->where("test_package_no", $testPackageNo)->first();
$wpsData = db("w_p_s")->where("details", $testPackage->wps_no)->first();
$naksCertificates = [];
if($wpsData) {
$naksCertificates = explode(" + ", $wpsData->naks_certificate_no);
}
// 1. Naks Technology
if (strpos($docPath, "Naks Technology") !== false) {
foreach($naksCertificates as $cert) {
$search = $this->alternativeGlob("storage/documents/{$docPath}/*{$cert}*.pdf");
$document['title3'] = $this->extractFileName($search[0] ?? '', $docPath);
$this->addRow($search, $document, $folder, $cert, $wpsData->date ?? date('Y-m-d'), $rowNo, $sheet, $currentRow, $override);
}
}
// 2. Naks_Welder
elseif (strpos($docPath, "Naks_Welder") !== false) {
$welders = $this->getWeldersForTp($testPackageNo);
foreach($welders as $welder) {
$search = $this->alternativeGlob("storage/documents/{$docPath}/*{$welder}*.pdf");
$document['title2'] = $welder;
$document['title3'] = $this->extractFileName($search[0] ?? '', $docPath);
$welderDate = db("naks_welders")->where("naks_certificate_no", $welder)->first()?->period_of_validity ?? date('Y-m-d');
$this->addRow($search, $document, $folder, $welder, $welderDate, $rowNo, $sheet, $currentRow, $override);
}
}
// 3. Naks_Equipments
elseif (strpos($docPath, "Naks_Equipments") !== false) {
foreach($naksCertificates as $cert) {
$search = $this->alternativeGlob("storage/documents/{$docPath}/*{$cert}*.pdf");
$document['title3'] = $cert;
$docDate = db("naks_welders")->where("welder_id", $cert)->first()?->period_of_validity ?? date('Y-m-d'); // Logic copied from blade, might need adjustment
$this->addRow($search, $document, $folder, $cert, $docDate, $rowNo, $sheet, $currentRow, $override);
}
}
// 4. Naks_Consumables
elseif (strpos($docPath, "Naks_Consumables") !== false) {
$naksConsumables = db("naks_consumables")->whereIn("naks_certificate_no", $naksCertificates)->pluck("batch_number")->toArray();
foreach($naksConsumables as $consumable) {
$search = $this->alternativeGlob("storage/documents/{$docPath}/*{$consumable}*.pdf");
$docDate = db("naks_welders")->where("welder_id", $consumable)->first()?->period_of_validity ?? date('Y-m-d');
$this->addRow($search, $document, $folder, $consumable, $docDate, $rowNo, $sheet, $currentRow, $override);
}
}
// 5. Welding Experts
elseif (strpos($docPath, "Welding Experts") !== false) {
// Using title2 as certificate no (from selection)
$search = $this->alternativeGlob("storage/documents/{$docPath}/*{$docTitle}*.pdf");
$expert = db("register_of_experts")->where("certificate_no", $docTitle)->first();
$docDate = $expert?->permit_date ?? date('Y-m-d');
$document['title2'] = e2("welding_expert_register_title");
$this->addRow($search, $document, $folder, $docTitle, $docDate, $rowNo, $sheet, $currentRow, $override);
}
// 6. WPQ
elseif (strpos($docPath, "WPQ") !== false) {
$wpqs = db("welder_tests")->whereIn("wpq_document_no", [
$testPackage->wpq_report_1,
$testPackage->wpq_report_2,
])->get();
foreach($wpqs as $wpq) {
$search = $this->alternativeGlob("storage/documents/{$docPath}/*{$wpq->wpq_document_no}*.pdf");
$document['title3'] = $wpq->wpq_document_no;
$docDate = $wpq->naks_validity;
$this->addRow($search, $document, $folder, $wpq->wpq_document_no, $docDate, $rowNo, $sheet, $currentRow, $override);
}
}
// 7. WPS
elseif (strpos($docPath, "WPS") !== false) {
$search = $this->alternativeGlob("storage/documents/{$docPath}/*{$wpsData->details}*.pdf");
$document['title3'] = $wpsData->details;
$docDate = $wpsData->date;
$this->addRow($search, $document, $folder, $wpsData->details, $docDate, $rowNo, $sheet, $currentRow, $override);
}
// 8. PQR
elseif (strpos($docPath, "PQR") !== false) {
$pqr = db("prosedure_qualification_records")->where("pqr_no", $wpsData->pqr_no)->first();
if($pqr) {
$search = $this->alternativeGlob("storage/documents/{$docPath}/*{$pqr->pqr_no}*.pdf");
$document['title2'] = $pqr->pqr_no;
$docDate = $pqr->approved_date;
$this->addRow($search, $document, $folder, $pqr->pqr_no, $docDate, $rowNo, $sheet, $currentRow, $override);
}
}
return $currentRow;
}
private function getWeldersForTp($tpNo) {
$logs = db("weld_logs")->where("test_package_no", $tpNo)->get();
$welders = [];
foreach($logs as $log) {
if($log->welder_1) $welders[] = $log->certificate_no_1;
if($log->welder_2) $welders[] = $log->certificate_no_2;
}
return array_unique(array_filter($welders));
}
}