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

138 lines
6.1 KiB
PHP

<?php
namespace App\Services\TpCreator\DocumentProcessors;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class WdbTpProcessor extends AbstractTpDocumentProcessor
{
public function process(
array $lineData,
array $document,
Worksheet $sheet,
int $currentRow,
int $rowNo,
string $fullFolder,
string $testPackageNo,
bool $override
): int {
$docPath = $document['path'];
$docTitle = $document['title2'] ?? '';
$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, $fullFolder, $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, $fullFolder, $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');
$this->addRow($search, $document, $fullFolder, $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, $fullFolder, $consumable, $docDate, $rowNo, $sheet, $currentRow, $override);
}
}
// 5. Welding Experts
elseif (strpos($docPath, "Welding Experts") !== false) {
$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, $fullFolder, $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, $fullFolder, $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, $fullFolder, $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, $fullFolder, $pqr->pqr_no, $docDate, $rowNo, $sheet, $currentRow, $override);
}
}
return $rowNo;
}
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));
}
}