190 lines
11 KiB
PHP
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;
|
|
}
|
|
}
|
|
?>
|