Files
citrus-cms/app/Functions/work-permit-replacer-excel2.php
2026-04-28 21:14:25 +03:00

190 lines
11 KiB
PHP

<?php
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\IOFactory;
use Illuminate\Support\Facades\Cache;
function workPermitReplacerExcel2(?Spreadsheet $spreadsheet, $weldLog, $documentInfo, $type="replacer") {
// Handle project value from weldLog (may be array or object)
$weldLog = (object)$weldLog;
if(isset($weldLog->project)) {
$project = $weldLog->project;
}else{
$project = '';
}
// Fetch the work permit users from the database
$cacheKey = "work_permit_users_{$project}_{$documentInfo->slug}";
$workPermitUsers = db("work_permit_documents")
->select([
'work_permit_documents.*',
'subcontractors.*',
'work_permit_documents.sign_order as personel_sign_order',
'subcontractors.sign_order as firma_sign_order',
])
->leftJoin("subcontractors", "work_permit_documents.company", "subcontractors.company_name_ru")
->where("zone", "like", "%{$project}%")
->where("assigned_documents", "like", "%{$documentInfo->slug}%")
->get();
// Initialize data array for placeholders
$data = [];
if ($type == "replacer") {
// Only process spreadsheet if it's not null
if ($spreadsheet !== null) {
try {
// Iterate over each sheet in the spreadsheet
foreach ($spreadsheet->getAllSheets() as $sheet) {
// Loop through all the cells in the sheet and replace placeholders
foreach ($sheet->getRowIterator() as $row) {
foreach ($row->getCellIterator() as $cell) {
$cellValue = $cell->getValue();
if (is_string($cellValue)) {
// Perform the replacement for each work permit user
foreach ($workPermitUsers as $wpi) {
// Get all properties for the current work permit user
// Support for old format (using only personel_sign_order)
$jobDescPrefix = $wpi->job_description.$wpi->personel_sign_order;
$companyCodePrefix = $wpi->company_code.$wpi->personel_sign_order;
// Support for new format (using both firma_sign_order and personel_sign_order)
$jobDescPrefixNew = $wpi->job_description.$wpi->firma_sign_order."_".$wpi->personel_sign_order;
$companyCodePrefixNew = $wpi->company_code.$wpi->firma_sign_order."_".$wpi->personel_sign_order;
// Dynamically replace all properties
foreach ((array)$wpi as $key => $value) {
// Skip internal properties and non-string/numeric values
if (is_string($key) && !str_starts_with($key, "\0") && (is_string($value) || is_numeric($value))) {
// Handle dates
if (in_array($key, ['attorney_date', 'date_of_issue', 'certificate_date']) && !empty($value)) {
$value = df($value);
}
// Replace with old format (job_description + personel_sign_order)
$cellValue = str_replace("{".$jobDescPrefix."_".$key."}", $value, $cellValue);
$cellValue = str_replace("{".$companyCodePrefix."_".$key."}", $value, $cellValue);
// Replace with new format (job_description + firma_sign_order + "_" + personel_sign_order)
$cellValue = str_replace("{".$jobDescPrefixNew."_".$key."}", $value, $cellValue);
$cellValue = str_replace("{".$companyCodePrefixNew."_".$key."}", $value, $cellValue);
}
}
// For backward compatibility, add specific replacements for commonly used fields
// Old format
$cellValue = str_replace("{".$jobDescPrefix."_company_name}", $wpi->company, $cellValue);
$cellValue = str_replace("{".$companyCodePrefix."_company_name}", $wpi->company, $cellValue);
$cellValue = str_replace("{".$jobDescPrefix."_certificate_no}", $wpi->certificates_number, $cellValue);
$cellValue = str_replace("{".$companyCodePrefix."_certificate_no}", $wpi->certificates_number, $cellValue);
$cellValue = str_replace("{".$jobDescPrefix."_certificate_number}", $wpi->certificates_number, $cellValue);
$cellValue = str_replace("{".$companyCodePrefix."_certificate_number}", $wpi->certificates_number, $cellValue);
// New format
$cellValue = str_replace("{".$jobDescPrefixNew."_company_name}", $wpi->company, $cellValue);
$cellValue = str_replace("{".$companyCodePrefixNew."_company_name}", $wpi->company, $cellValue);
$cellValue = str_replace("{".$jobDescPrefixNew."_certificate_no}", $wpi->certificates_number, $cellValue);
$cellValue = str_replace("{".$companyCodePrefixNew."_certificate_no}", $wpi->certificates_number, $cellValue);
$cellValue = str_replace("{".$jobDescPrefixNew."_certificate_number}", $wpi->certificates_number, $cellValue);
$cellValue = str_replace("{".$companyCodePrefixNew."_certificate_number}", $wpi->certificates_number, $cellValue);
// Update the cell with the new value
$cell->setValue($cellValue);
}
}
}
}
}
// Return the modified spreadsheet for replacer type
return $spreadsheet;
} catch (\Throwable $th) {
// Log error but continue
// error_log("Error processing spreadsheet: " . $th->getMessage());
}
}
// If spreadsheet is null or an error occurred, return empty array
return [];
} else {
// For other types (e.g. "data"), collect placeholders
foreach ($workPermitUsers as $wpi) {
// Get all properties for the current work permit user
$wpiArray = (array)$wpi;
foreach ($wpiArray as $key => $value) {
// Skip internal properties
if (is_string($key) && !str_starts_with($key, "\0")) {
// Old format placeholders (job_description + personel_sign_order)
$jobDescPlaceholder = "{" . $wpi->job_description . $wpi->personel_sign_order . "_" . $key . "}";
if (!in_array($jobDescPlaceholder, $data)) {
$data[] = $jobDescPlaceholder;
}
$companyCodePlaceholder = "{" . $wpi->company_code . $wpi->personel_sign_order . "_" . $key . "}";
if (!in_array($companyCodePlaceholder, $data)) {
$data[] = $companyCodePlaceholder;
}
// New format placeholders (job_description + firma_sign_order + "_" + personel_sign_order)
$jobDescPlaceholderNew = "{" . $wpi->job_description . $wpi->firma_sign_order . "_" . $wpi->personel_sign_order . "_" . $key . "}";
if (!in_array($jobDescPlaceholderNew, $data)) {
$data[] = $jobDescPlaceholderNew;
}
$companyCodePlaceholderNew = "{" . $wpi->company_code . $wpi->firma_sign_order . "_" . $wpi->personel_sign_order . "_" . $key . "}";
if (!in_array($companyCodePlaceholderNew, $data)) {
$data[] = $companyCodePlaceholderNew;
}
}
}
// For backward compatibility, add specific placeholders for commonly used fields
$commonPlaceholders = [
"company_name" => "company",
"certificate_no" => "certificates_number",
"certificate_number" => "certificates_number",
"document_code" => "document_code",
"document_number" => "document_number",
"revision" => "revision",
"date_of_issue" => "date_of_issue",
"duty" => "duty",
"attorney" => "attorney",
"attorney_date" => "attorney_date",
"name_surname" => "name_surname",
"id_no" => "id_no",
"level" => "level",
"description" => "description",
"status" => "status",
"dept" => "dept",
"zone" => "zone",
"third_party" => "third_party",
];
foreach ($commonPlaceholders as $placeholder => $field) {
// Old format
$jobDescPlaceholder = "{" . $wpi->job_description . $wpi->personel_sign_order . "_" . $placeholder . "}";
$companyCodePlaceholder = "{" . $wpi->company_code . $wpi->personel_sign_order . "_" . $placeholder . "}";
if (!in_array($jobDescPlaceholder, $data)) {
$data[] = $jobDescPlaceholder;
}
if (!in_array($companyCodePlaceholder, $data)) {
$data[] = $companyCodePlaceholder;
}
// New format
$jobDescPlaceholderNew = "{" . $wpi->job_description . $wpi->firma_sign_order . "_" . $wpi->personel_sign_order . "_" . $placeholder . "}";
$companyCodePlaceholderNew = "{" . $wpi->company_code . $wpi->firma_sign_order . "_" . $wpi->personel_sign_order . "_" . $placeholder . "}";
if (!in_array($jobDescPlaceholderNew, $data)) {
$data[] = $jobDescPlaceholderNew;
}
if (!in_array($companyCodePlaceholderNew, $data)) {
$data[] = $companyCodePlaceholderNew;
}
}
}
// Return the placeholder list
return $data;
}
}
?>