This commit is contained in:
ygbanzato 2025-03-25 22:05:40 +00:00
parent 84b2e0c4c3
commit 091128e73b
9 changed files with 4208 additions and 1234 deletions

View File

@ -5,6 +5,7 @@
use App\Models\AssociationCompanyUser;
use App\Models\Company;
use App\Models\EquipmentTypeAttribute;
use App\Models\EquipmentWorkHistory;
use App\Models\HistoryOfEquipmentAmbitsInTheProject;
use App\Models\ProjectExcelLog;
@ -1285,8 +1286,6 @@ public function processStep2(Request $request)
// Inicialização do hashmap para rastrear as linhas únicas
$uniqueRowsHashmap = [];
$equipmentPendingLogs = [];
// $ignoredLines = [];
// $duplicateLines = [];
// Separa o nome do arquivo para obter o tipo de documento e a data-hora
$parts = explode('_', $originalFileName);
@ -1359,8 +1358,8 @@ function normalize($value)
$equipmentType = EquipmentType::where('equipment_type_name', $datas['equipment_type_name'])->first();
//-------- Linhas Ignoradas
// Começa a contagem das linhas do excel a partir de 7 linha
if ($i < 6) {
// Começa a contagem das linhas do excel a partir de 9 linha
if ($i < 8) {
continue;
}
// Contador para campos não vazios
@ -1537,9 +1536,9 @@ function normalize($value)
$newEquipament->equipment_type_id = $equipmentType->equipment_type_id;
$newEquipament->equipment_Description = $datas['equipment_description'];
$newEquipament->equipment_tag = $datas['equipment_tag'];
$newEquipament->equipment_serial_number = $datas['serial_number'];
$newEquipament->equipment_brand = $datas['brand'];
$newEquipament->equipment_model = $datas['model'];
$newEquipament->equipment_serial_number = $datas['equipment_serial_number'];
$newEquipament->equipment_brand = $datas['equipment_brand'];
$newEquipament->equipment_model = $datas['equipment_model'];
$newEquipament->company_projects_id = $company_projects_id;
$newEquipament->save();
@ -1551,15 +1550,27 @@ function normalize($value)
$generalAttributes = GeneralAttributesEquipment::all();
foreach ($generalAttributes as $generalAttribute) {
$typeId = $newEquipament->equipment_type_id;
// Verifica se a chave existe em $datas
if (isset($datas[$generalAttribute->general_attributes_equipment_description])) {
// 1. Buscar os IDs dos atributos permitidos para esse tipo
$allowedAttributeIds = EquipmentTypeAttribute::where('equipment_type_id', $typeId)
->pluck('attribute_id')
->toArray();
// 2. Buscar os nomes das descrições para esses atributos
$allowedAttributes = GeneralAttributesEquipment::whereIn('general_attributes_equipment_id', $allowedAttributeIds)
->get()
->keyBy('general_attributes_equipment_description');
foreach ($allowedAttributes as $description => $attribute) {
if (isset($datas[$description])) {
$specificAttribute = new SpecificAttributesEquipmentType;
$specificAttribute->equipment_id = $newEquipament->equipment_id;
$specificAttribute->equipment_type_id = $newEquipament->equipment_type_id;
$specificAttribute->general_attributes_equipment_id = $generalAttribute->general_attributes_equipment_id;
$specificAttribute->specific_attributes_value = $datas[$generalAttribute->general_attributes_equipment_description];
$specificAttribute->general_attributes_equipment_id = $attribute->general_attributes_equipment_id;
$specificAttribute->specific_attributes_value = $datas[$description];
$specificAttribute->save();
}

View File

@ -126,9 +126,111 @@ class PreparedProjectController extends Controller
// }
// public function showAllEquipmentsInProjectForQrCode($projectId)
// {
// $detailsEquipment = Equipment::where('company_projects_id', $projectId)->get();
// $zipFileName = 'equipamentos_projeto_' . $projectId . '.zip';
// $tempPath = storage_path('app/public/temp_pdfs/');
// $zipPath = storage_path('app/public/' . $zipFileName);
// // Busca os dados do equipamento
// $receiveEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id', $detailsEquipment->equipment_id)
// ->where('company_projects_id', $detailsEquipment->company_projects_id)
// ->first();
// //Recebe os dados do Ambito para o equipamento atual
// $receiveAmbit = EquipmentAssociationAmbit::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)->first();
// //Guarda os Detalhes recebidos das outras variavies como Ambito e Numero Ispt
// $detailsEquipment->istp_number = $receiveEquipmentWorkHistory->ispt_number;
// $detailsEquipment->equipment_ambit = $receiveAmbit->ambitsEquipment->ambits_description;
// // Criar diretório temporário se não existir
// if (!file_exists($tempPath)) {
// mkdir($tempPath, 0777, true);
// }
// $files = []; // Armazena os caminhos dos PDFs gerados
// foreach ($detailsEquipment as $equipment) {
// // Buscar detalhes do equipamento
// $detailsCompanyProject = CompanyProject::find($projectId);
// $detailsPlant = Plant::where('plant_id', $detailsCompanyProject->plant_id)->first();
// $detailsCompany = Company::where('company_id', $detailsPlant->company_id)->first();
// // Usar a mesma estrutura da função principal
// $specificAttributesArray = [];
// $specificAttributes = SpecificAttributesEquipmentType::where('equipment_id', $detailsEquipment->equipment_id)->get();
// foreach ($specificAttributes as $attribute) {
// $specificAttributesArray[$attribute->general_attributes_equipment_id] = $attribute->specific_attributes_value;
// }
// // Buscar equipamentos associados ao QR Code
// $associatedEquipments = QrcodesAssociatedEquipment::where('equipment_id', $equipment->equipment_id)->get();
// $associatedArray = [];
// $qrCodeImages = [];
// foreach ($associatedEquipments as $associatedEquipment) {
// $componentParts = explode('@', $associatedEquipment->component_tag);
// $associatedArray[$associatedEquipment->id] = isset($componentParts[1]) ? $componentParts[1] : $associatedEquipment->component_tag;
// // Gerar QR Code
// $qrCode = new QrCode($associatedEquipment->component_tag);
// $writer = new PngWriter();
// $qrCodeImages[$associatedEquipment->id] = 'data:image/png;base64,' . base64_encode($writer->write($qrCode)->getString());
// }
// // Caminho do logo da empresa
// $logoPath = public_path('companies_logo/' . ($detailsCompany->company_logo ?: 'logoISPT4.0.jpg'));
// if (!file_exists($logoPath)) {
// $logoPath = public_path('companies_logo/logoISPT4.0.jpg');
// }
// $isptLogoPath = public_path('/img/ispt/ispt.jpg');
// //Criar uma nova instância do PdfWrapper para cada equipamento
// $pdfWrapper = new PdfWrapper();
// $pdf = $pdfWrapper->loadView('projectsClients.showDetailsEquipmentForQrCodePdf', [
// 'detailsCompanyProject' => $detailsCompanyProject,
// 'detailsEquipment' => $detailsEquipment,
// 'logoPath' => $logoPath,
// 'qrCodeImages' => $qrCodeImages,
// 'associatedArray' => $associatedArray,
// 'isptLogoPath' => $isptLogoPath
// ])->setOrientation('landscape');
// // Nome do arquivo PDF
// $pdfFileName = $equipment->equipment_tag . '.pdf';
// $pdfFilePath = $tempPath . $pdfFileName;
// // Salvar o PDF
// $pdf->save($pdfFilePath);
// $files[] = $pdfFilePath;
// }
// // Criar arquivo ZIP e adicionar os PDFs gerados
// $zip = new ZipArchive;
// if ($zip->open($zipPath, ZipArchive::CREATE) === TRUE) {
// foreach ($files as $file) {
// $zip->addFile($file, basename($file));
// }
// $zip->close();
// }
// // Remover arquivos PDF individuais após criar o ZIP
// foreach ($files as $file) {
// unlink($file);
// }
// // Retornar o arquivo ZIP para download
// return response()->download($zipPath)->deleteFileAfterSend(true);
// }
public function showAllEquipmentsInProjectForQrCode($projectId)
{
$equipments = Equipment::where('company_projects_id', $projectId)->get();
$equipments = Equipment::where('company_projects_id', $projectId)->get(); // ← nome mais apropriado
$zipFileName = 'equipamentos_projeto_' . $projectId . '.zip';
$tempPath = storage_path('app/public/temp_pdfs/');
$zipPath = storage_path('app/public/' . $zipFileName);
@ -141,29 +243,44 @@ public function showAllEquipmentsInProjectForQrCode($projectId)
$files = []; // Armazena os caminhos dos PDFs gerados
foreach ($equipments as $equipment) {
// Buscar detalhes do equipamento
// Reutilizamos $detailsEquipment dentro do loop para compatibilidade com a view
$detailsEquipment = $equipment;
// Buscar dados do histórico de trabalho e âmbito
$receiveEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id', $detailsEquipment->equipment_id)
->where('company_projects_id', $detailsEquipment->company_projects_id)
->first();
// Adicionar campo personalizado ao equipamento
$detailsEquipment->istp_number = $receiveEquipmentWorkHistory->ispt_number ?? 'N/A';
$receiveAmbit = EquipmentAssociationAmbit::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id ?? null)
->first();
$detailsEquipment->equipment_ambit = $receiveAmbit->ambitsEquipment->ambits_description ?? 'N/A';
// Buscar detalhes do projeto, planta e empresa
$detailsCompanyProject = CompanyProject::find($projectId);
$detailsPlant = Plant::where('plant_id', $detailsCompanyProject->plant_id)->first();
$detailsCompany = Company::where('company_id', $detailsPlant->company_id)->first();
// Buscar atributos específicos do equipamento
$specificAttributes = SpecificAttributesEquipmentType::where('equipment_id', $equipment->equipment_id)->get();
$specificAttributes = SpecificAttributesEquipmentType::where('equipment_id', $detailsEquipment->equipment_id)->get();
$specificAttributesArray = [];
foreach ($specificAttributes as $attribute) {
$specificAttributesArray[$attribute->general_attributes_equipment_id] = $attribute->specific_attributes_value;
}
// Buscar equipamentos associados ao QR Code
$associatedEquipments = QrcodesAssociatedEquipment::where('equipment_id', $equipment->equipment_id)->get();
// Equipamentos associados ao QR Code
$associatedEquipments = QrcodesAssociatedEquipment::where('equipment_id', $detailsEquipment->equipment_id)->get();
$associatedArray = [];
$qrCodeImages = [];
foreach ($associatedEquipments as $associatedEquipment) {
$componentParts = explode('@', $associatedEquipment->component_tag);
$associatedArray[$associatedEquipment->id] = isset($componentParts[1]) ? $componentParts[1] : $associatedEquipment->component_tag;
$associatedArray[$associatedEquipment->id] = $componentParts[1] ?? $associatedEquipment->component_tag;
// Gerar QR Code
$qrCode = new QrCode($associatedEquipment->component_tag);
$writer = new PngWriter();
$qrCodeImages[$associatedEquipment->id] = 'data:image/png;base64,' . base64_encode($writer->write($qrCode)->getString());
@ -174,20 +291,24 @@ public function showAllEquipmentsInProjectForQrCode($projectId)
if (!file_exists($logoPath)) {
$logoPath = public_path('companies_logo/logoISPT4.0.jpg');
}
$isptLogoPath = public_path('/img/ispt/ispt.jpg');
// Criar uma nova instância do PdfWrapper para cada equipamento
// Criar PDF
$pdfWrapper = new PdfWrapper();
$pdf = $pdfWrapper->loadView('projectsClients.showDetailsEquipmentForQrCodePdf', [
'detailsEquipment' => $equipment,
'detailsCompanyProject' => $detailsCompanyProject,
'detailsEquipment' => $detailsEquipment,
'logoPath' => $logoPath,
'qrCodeImages' => $qrCodeImages,
'associatedArray' => $associatedArray,
'isptLogoPath' => $isptLogoPath
'isptLogoPath' => $isptLogoPath,
'specificAttributesArray' => $specificAttributesArray
])->setOrientation('landscape');
// Nome do arquivo PDF
$pdfFileName = $equipment->equipment_tag . '.pdf';
// Nome do PDF com o número ISPT, sanitizado
$istpNumber = preg_replace('/[^a-zA-Z0-9_-]/', '_', $detailsEquipment->istp_number);
$pdfFileName = $istpNumber . '.pdf';
$pdfFilePath = $tempPath . $pdfFileName;
// Salvar o PDF
@ -195,7 +316,7 @@ public function showAllEquipmentsInProjectForQrCode($projectId)
$files[] = $pdfFilePath;
}
// Criar arquivo ZIP e adicionar os PDFs gerados
// Criar ZIP com os PDFs
$zip = new ZipArchive;
if ($zip->open($zipPath, ZipArchive::CREATE) === TRUE) {
foreach ($files as $file) {
@ -204,15 +325,18 @@ public function showAllEquipmentsInProjectForQrCode($projectId)
$zip->close();
}
// Remover arquivos PDF individuais após criar o ZIP
// Limpar PDFs temporários
foreach ($files as $file) {
unlink($file);
}
// Retornar o arquivo ZIP para download
// Retornar ZIP para download
return response()->download($zipPath)->deleteFileAfterSend(true);
}
public function showDetailsEquipmentForQrCode($equipmentId, $projectId)
{
// Busca os detalhes do equipamento, projeto e empresa
@ -279,6 +403,7 @@ public function showDetailsEquipmentForQrCode($equipmentId, $projectId)
// Gera e retorna o PDF com os detalhes e QR Codes
return $pdfWrapper
->loadView('projectsClients.showDetailsEquipmentForQrCodePdf', [
'detailsCompanyProject' => $detailsCompanyProject,
'detailsEquipment' => $detailsEquipment,
'logoPath' => $logoPath,
'qrCodeImages' => $qrCodeImages,

View File

@ -1058,8 +1058,8 @@ public function projectDetails_11($projectID, $equipmentID)
$specificAttributesArray[$attribute->general_attributes_equipment_id] = $attribute->specific_attributes_value;
}
// talvez apenas ciar um if ja resolva, se vir da obra em status 1 ou 3 receve 3 para editar e ver, se viar da obra status 2, deve ser apenas 1
if ($detailsProject->order_project == 1 || $detailsProject->order_project == 3) {
// talvez apenas ciar um if ja resolva, se vir da obra em status 1, 3 ou 4 receve 3 para editar e ver, se viar da obra status 2, deve ser apenas 1
if ($detailsProject->order_project == 1 || $detailsProject->order_project == 3 || $detailsProject->order_project == 5 ) {
// Cria um sistema de 1 a 3 , onde 1 e apenas 'ler', 2 apenas editar e 3 as 2 opcoes
$portfolioOnlyreadOrEditToo = 3;
@ -1069,7 +1069,6 @@ public function projectDetails_11($projectID, $equipmentID)
}
//filteredTasks', 'OrdemTasks', 'DetailsTasks' campos vazios para ISV.
return view('projectsClients.articulated_2_ShowEquipment', compact('detailsProject', 'detalsEquipment', 'filteredTasks', 'OrdemTasks', 'DetailsTasks', 'specificAttributesArray', 'receiveEquipmentWorkHistorys', 'portfolioOnlyreadOrEditToo'));
}

View File

@ -0,0 +1,30 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class EquipmentTypeAttribute extends Model
{
use HasFactory;
protected $table = 'equipment_type_attributes'; // Nome da tabela
protected $fillable = [
'equipment_type_id',
'attribute_id',
'is_required',
'default_value',
];
public function equipmentType()
{
return $this->belongsTo(EquipmentType::class, 'equipment_type_id');
}
public function attribute()
{
return $this->belongsTo(GeneralAttributesEquipment::class, 'attribute_id');
}
}

BIN
public/templateExcel/Valves_Template.xlsx Executable file → Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Card Example</title>
<title>Ficha Técnica - {{ $detailsEquipment->equipment_tag }}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
@ -16,12 +16,12 @@
}
.card-layout {
margin-top: 10px;
margin-top: 20px;
font-size: 10px;
/* width: 80mm;
height: 45mm; */
width: 115mm;
height: 58mm;
height: 60mm;
display: flex;
flex-direction: column;
/* Organiza os filhos verticalmente */
@ -67,41 +67,10 @@
width: 12mm;
height: 12mm;
}
/* .blue {
background-color: #09255C;
color: white;
display: flex;
justify-content: center;
align-items: center;
box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);
font-weight: bold;
} */
/* .gray {
background-color: #EAF3F6;
color: black;
display: flex;
justify-content: center;
align-items: center;
box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);
font-weight: bold;
}
.dark-blue {
background-color: #00B0EA;
color: white;
display: flex;
justify-content: center;
align-items: center;
box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);
font-weight: bold;
} */
</style>
</head>
<body>
@foreach ($associatedArray as $key => $value)
<!-- psv -->
@if ($detailsEquipment->equipmentType->equipment_type_id == 3)
@ -121,26 +90,31 @@
<div class="col-sm-6 p-0 m-0 title-card" style="border: 1px solid gray;">
<div class="col-sm" style="padding-top: 15px; margin: 0px; background-color: #09255C; color: #fff; font-size: 15px;">
*Nome da paragem
{{ $detailsCompanyProject->company_project_description }}
</div>
<!-- Linha: N.Ispt -->
<div class="row align-items-center" style="margin: 0px; height: 18px;">
<div class="col-sm" style="font-size: 12px; background-color: rgb(218, 218, 218);border:1px dashed black;">
<div class="col-sm" style="font-size: 12px; background-color: rgb(218, 218, 218); border: 1px dashed black;">
N.Ispt
</div>
<div class="col-sm" style="text-align: center;">
{{ $detailsEquipment->istp_number}}
<div class="col-sm" style="text-align: center; border: 1.2px dashed black;">
{{ $detailsEquipment->istp_number }}
</div>
</div>
<!-- Linha: Tag -->
<div class="row align-items-center" style="margin: 0px; height: 18px;">
<div class="col-sm" style="font-size: 12px; background-color: rgb(218, 218, 218);border:1px dashed black;">
<div class="col-sm" style="font-size: 12px; background-color: rgb(218, 218, 218); border: 1px dashed black;">
Tag
</div>
<div class="col-sm">
<div class="col-sm" style=" text-align: center;">
{{ $detailsEquipment->equipment_tag }}
</div>
</div>
</div>
<div class="col-sm p-0" style="border: 1px solid gray;">
<div class="col-sm">
<img class="qr-code" src="{{ $qrCodeImages[$key] }}" alt="QR Code">
@ -158,14 +132,14 @@
<div class="col-sm-3" style="font-size: 10px; background-color:#09255C;border:1px dashed black; color:white;">Dim.Entrada:</div>
<div class="col-sm-6" style="font-size: 10px;border:1px dashed black;"> {{ $specificAttributesArray[4] ?? '###' }} </div>
<div class="col-sm" style="font-size: 10px; background-color:#09255C;border:1px dashed black; color:white;">Rating:</div>
<div class="col-sm" style="font-size: 10px;border:1px dashed black;"> {{ $specificAttributesArray[6] ?? '###' }} </div>
<div class="col-sm" style="font-size: 10px;border:1px dashed black;"> {{ $specificAttributesArray[43] ?? '###' }} </div>
</div>
<div class="row" style="margin: 0px; height: 20px; ">
<div class="col-sm-3" style="font-size: 10px; background-color:#09255C;border:1px dashed black; color:white;">Dim.Saida:</div>
<div class="col-sm-6" style="font-size: 10px;border:1px dashed black;"> {{ $specificAttributesArray[5] ?? '###' }} </div>
<div class="col-sm" style="font-size: 10px; background-color:#09255C;border:1px dashed black; color:white;">Rating:</div>
<div class="col-sm" style="font-size: 10px;border:1px dashed black;"> {{ $specificAttributesArray[16] ?? '###' }} </div>
<div class="col-sm" style="font-size: 10px;border:1px dashed black;"> {{ $specificAttributesArray[44] ?? '###' }} </div>
</div>
<div class="row " style="margin: 0px; height: 20px; ">
@ -177,28 +151,28 @@
<div class="col-sm-3" style="font-size: 10px; background-color:#09255C;border:1px dashed black; color:white;">Fluido:</div>
<div class="col-sm" style="font-size: 10px;border:1px dashed black"> {{ $specificAttributesArray[41] ?? '###' }} </div>
<div class="col-sm" style="font-size: 10px; background-color:#09255C;border:1px dashed black; color:white;">Pressão:</div>
<div class="col-sm" style="font-size: 10px;border:1px dashed black"> {{ $specificAttributesArray[100] ?? '###' }} </div>
<div class="col-sm" style="font-size: 10px;border:1px dashed black"> {{ $specificAttributesArray[12] ?? '###' }} </div>
<div class="col-sm" style="font-size: 10px; background-color:#09255C;border:1px dashed black; color:white;">C.pressão:</div>
<div class="col-sm" style="font-size: 10px;border:1px dashed black"> {{ $specificAttributesArray[100] ?? '###' }} </div>
<div class="col-sm" style="font-size: 10px;border:1px dashed black"> {{ $specificAttributesArray[13] ?? '###' }} </div>
</div>
<div class="row" style="margin: 0px; display: flex; align-items: stretch;">
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 3em;">
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
T.val:
</div>
<div class="col-sm" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4em;">
<div class="col-sm" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
PSV
</div>
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4em;">
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
Âmbito:
</div>
<div class="col-sm-4" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4em;">
<div class="col-sm-4" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
{{ $detailsEquipment->equipment_ambit}}
</div>
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4em;">
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
Área:
</div>
<div class="col-sm" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4em;">
<div class="col-sm" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
{{ $specificAttributesArray[35] ?? '###' }}
</div>
</div>
@ -281,22 +255,22 @@
</div>
<div class="row" style="margin: 0px; display: flex; align-items: stretch;">
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 3em;">
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
T.val:
</div>
<div class="col-sm" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4em;">
<div class="col-sm" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
CV
</div>
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4em;">
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
Âmbito:
</div>
<div class="col-sm-4" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4em;">
<div class="col-sm-4" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
{{ $detailsEquipment->equipment_ambit}}
</div>
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4em;">
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
Área:
</div>
<div class="col-sm" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4em;">
<div class="col-sm" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
{{ $specificAttributesArray[35] ?? '###' }}
</div>
</div>
@ -381,22 +355,22 @@
</div>
<div class="row" style="margin: 0px; display: flex; align-items: stretch;">
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 3em;">
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
T.val:
</div>
<div class="col-sm" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4em;">
<div class="col-sm" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
ISV
</div>
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4em;">
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
Âmbito:
</div>
<div class="col-sm-4" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4em;">
<div class="col-sm-4" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
{{ $detailsEquipment->equipment_ambit}}
</div>
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4em;">
<div class="col-sm" style="font-size: 10px; background-color:#09255C; border:1px dashed black; color:white; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
Área:
</div>
<div class="col-sm" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4em;">
<div class="col-sm" style="font-size: 10px; border:1px dashed black; text-align: center; display: flex; align-items: center; justify-content: center; min-height: 4.8em;">
{{ $specificAttributesArray[35] ?? '###' }}
</div>
</div>