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; } } ?>