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\AssociationCompanyUser;
use App\Models\Company; use App\Models\Company;
use App\Models\EquipmentTypeAttribute;
use App\Models\EquipmentWorkHistory; use App\Models\EquipmentWorkHistory;
use App\Models\HistoryOfEquipmentAmbitsInTheProject; use App\Models\HistoryOfEquipmentAmbitsInTheProject;
use App\Models\ProjectExcelLog; use App\Models\ProjectExcelLog;
@ -1285,8 +1286,6 @@ public function processStep2(Request $request)
// Inicialização do hashmap para rastrear as linhas únicas // Inicialização do hashmap para rastrear as linhas únicas
$uniqueRowsHashmap = []; $uniqueRowsHashmap = [];
$equipmentPendingLogs = []; $equipmentPendingLogs = [];
// $ignoredLines = [];
// $duplicateLines = [];
// Separa o nome do arquivo para obter o tipo de documento e a data-hora // Separa o nome do arquivo para obter o tipo de documento e a data-hora
$parts = explode('_', $originalFileName); $parts = explode('_', $originalFileName);
@ -1359,8 +1358,8 @@ function normalize($value)
$equipmentType = EquipmentType::where('equipment_type_name', $datas['equipment_type_name'])->first(); $equipmentType = EquipmentType::where('equipment_type_name', $datas['equipment_type_name'])->first();
//-------- Linhas Ignoradas //-------- Linhas Ignoradas
// Começa a contagem das linhas do excel a partir de 7 linha // Começa a contagem das linhas do excel a partir de 9 linha
if ($i < 6) { if ($i < 8) {
continue; continue;
} }
// Contador para campos não vazios // Contador para campos não vazios
@ -1537,9 +1536,9 @@ function normalize($value)
$newEquipament->equipment_type_id = $equipmentType->equipment_type_id; $newEquipament->equipment_type_id = $equipmentType->equipment_type_id;
$newEquipament->equipment_Description = $datas['equipment_description']; $newEquipament->equipment_Description = $datas['equipment_description'];
$newEquipament->equipment_tag = $datas['equipment_tag']; $newEquipament->equipment_tag = $datas['equipment_tag'];
$newEquipament->equipment_serial_number = $datas['serial_number']; $newEquipament->equipment_serial_number = $datas['equipment_serial_number'];
$newEquipament->equipment_brand = $datas['brand']; $newEquipament->equipment_brand = $datas['equipment_brand'];
$newEquipament->equipment_model = $datas['model']; $newEquipament->equipment_model = $datas['equipment_model'];
$newEquipament->company_projects_id = $company_projects_id; $newEquipament->company_projects_id = $company_projects_id;
$newEquipament->save(); $newEquipament->save();
@ -1551,15 +1550,27 @@ function normalize($value)
$generalAttributes = GeneralAttributesEquipment::all(); $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 = new SpecificAttributesEquipmentType;
$specificAttribute->equipment_id = $newEquipament->equipment_id; $specificAttribute->equipment_id = $newEquipament->equipment_id;
$specificAttribute->equipment_type_id = $newEquipament->equipment_type_id; $specificAttribute->equipment_type_id = $newEquipament->equipment_type_id;
$specificAttribute->general_attributes_equipment_id = $generalAttribute->general_attributes_equipment_id; $specificAttribute->general_attributes_equipment_id = $attribute->general_attributes_equipment_id;
$specificAttribute->specific_attributes_value = $datas[$generalAttribute->general_attributes_equipment_description]; $specificAttribute->specific_attributes_value = $datas[$description];
$specificAttribute->save(); $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) 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'; $zipFileName = 'equipamentos_projeto_' . $projectId . '.zip';
$tempPath = storage_path('app/public/temp_pdfs/'); $tempPath = storage_path('app/public/temp_pdfs/');
$zipPath = storage_path('app/public/' . $zipFileName); $zipPath = storage_path('app/public/' . $zipFileName);
@ -141,29 +243,44 @@ public function showAllEquipmentsInProjectForQrCode($projectId)
$files = []; // Armazena os caminhos dos PDFs gerados $files = []; // Armazena os caminhos dos PDFs gerados
foreach ($equipments as $equipment) { 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); $detailsCompanyProject = CompanyProject::find($projectId);
$detailsPlant = Plant::where('plant_id', $detailsCompanyProject->plant_id)->first(); $detailsPlant = Plant::where('plant_id', $detailsCompanyProject->plant_id)->first();
$detailsCompany = Company::where('company_id', $detailsPlant->company_id)->first(); $detailsCompany = Company::where('company_id', $detailsPlant->company_id)->first();
// Buscar atributos específicos do equipamento // 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 = []; $specificAttributesArray = [];
foreach ($specificAttributes as $attribute) { foreach ($specificAttributes as $attribute) {
$specificAttributesArray[$attribute->general_attributes_equipment_id] = $attribute->specific_attributes_value; $specificAttributesArray[$attribute->general_attributes_equipment_id] = $attribute->specific_attributes_value;
} }
// Buscar equipamentos associados ao QR Code // Equipamentos associados ao QR Code
$associatedEquipments = QrcodesAssociatedEquipment::where('equipment_id', $equipment->equipment_id)->get(); $associatedEquipments = QrcodesAssociatedEquipment::where('equipment_id', $detailsEquipment->equipment_id)->get();
$associatedArray = []; $associatedArray = [];
$qrCodeImages = []; $qrCodeImages = [];
foreach ($associatedEquipments as $associatedEquipment) { foreach ($associatedEquipments as $associatedEquipment) {
$componentParts = explode('@', $associatedEquipment->component_tag); $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); $qrCode = new QrCode($associatedEquipment->component_tag);
$writer = new PngWriter(); $writer = new PngWriter();
$qrCodeImages[$associatedEquipment->id] = 'data:image/png;base64,' . base64_encode($writer->write($qrCode)->getString()); $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)) { if (!file_exists($logoPath)) {
$logoPath = public_path('companies_logo/logoISPT4.0.jpg'); $logoPath = public_path('companies_logo/logoISPT4.0.jpg');
} }
$isptLogoPath = public_path('/img/ispt/ispt.jpg'); $isptLogoPath = public_path('/img/ispt/ispt.jpg');
// Criar uma nova instância do PdfWrapper para cada equipamento // Criar PDF
$pdfWrapper = new PdfWrapper(); $pdfWrapper = new PdfWrapper();
$pdf = $pdfWrapper->loadView('projectsClients.showDetailsEquipmentForQrCodePdf', [ $pdf = $pdfWrapper->loadView('projectsClients.showDetailsEquipmentForQrCodePdf', [
'detailsEquipment' => $equipment, 'detailsCompanyProject' => $detailsCompanyProject,
'detailsEquipment' => $detailsEquipment,
'logoPath' => $logoPath, 'logoPath' => $logoPath,
'qrCodeImages' => $qrCodeImages, 'qrCodeImages' => $qrCodeImages,
'associatedArray' => $associatedArray, 'associatedArray' => $associatedArray,
'isptLogoPath' => $isptLogoPath 'isptLogoPath' => $isptLogoPath,
'specificAttributesArray' => $specificAttributesArray
])->setOrientation('landscape'); ])->setOrientation('landscape');
// Nome do arquivo PDF // Nome do PDF com o número ISPT, sanitizado
$pdfFileName = $equipment->equipment_tag . '.pdf'; $istpNumber = preg_replace('/[^a-zA-Z0-9_-]/', '_', $detailsEquipment->istp_number);
$pdfFileName = $istpNumber . '.pdf';
$pdfFilePath = $tempPath . $pdfFileName; $pdfFilePath = $tempPath . $pdfFileName;
// Salvar o PDF // Salvar o PDF
@ -195,7 +316,7 @@ public function showAllEquipmentsInProjectForQrCode($projectId)
$files[] = $pdfFilePath; $files[] = $pdfFilePath;
} }
// Criar arquivo ZIP e adicionar os PDFs gerados // Criar ZIP com os PDFs
$zip = new ZipArchive; $zip = new ZipArchive;
if ($zip->open($zipPath, ZipArchive::CREATE) === TRUE) { if ($zip->open($zipPath, ZipArchive::CREATE) === TRUE) {
foreach ($files as $file) { foreach ($files as $file) {
@ -204,14 +325,17 @@ public function showAllEquipmentsInProjectForQrCode($projectId)
$zip->close(); $zip->close();
} }
// Remover arquivos PDF individuais após criar o ZIP // Limpar PDFs temporários
foreach ($files as $file) { foreach ($files as $file) {
unlink($file); unlink($file);
} }
// Retornar o arquivo ZIP para download // Retornar ZIP para download
return response()->download($zipPath)->deleteFileAfterSend(true); return response()->download($zipPath)->deleteFileAfterSend(true);
} }
public function showDetailsEquipmentForQrCode($equipmentId, $projectId) public function showDetailsEquipmentForQrCode($equipmentId, $projectId)
{ {
@ -279,6 +403,7 @@ public function showDetailsEquipmentForQrCode($equipmentId, $projectId)
// Gera e retorna o PDF com os detalhes e QR Codes // Gera e retorna o PDF com os detalhes e QR Codes
return $pdfWrapper return $pdfWrapper
->loadView('projectsClients.showDetailsEquipmentForQrCodePdf', [ ->loadView('projectsClients.showDetailsEquipmentForQrCodePdf', [
'detailsCompanyProject' => $detailsCompanyProject,
'detailsEquipment' => $detailsEquipment, 'detailsEquipment' => $detailsEquipment,
'logoPath' => $logoPath, 'logoPath' => $logoPath,
'qrCodeImages' => $qrCodeImages, 'qrCodeImages' => $qrCodeImages,

View File

@ -1058,8 +1058,8 @@ public function projectDetails_11($projectID, $equipmentID)
$specificAttributesArray[$attribute->general_attributes_equipment_id] = $attribute->specific_attributes_value; $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 // 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) { 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 // Cria um sistema de 1 a 3 , onde 1 e apenas 'ler', 2 apenas editar e 3 as 2 opcoes
$portfolioOnlyreadOrEditToo = 3; $portfolioOnlyreadOrEditToo = 3;
@ -1068,7 +1068,6 @@ public function projectDetails_11($projectID, $equipmentID)
$portfolioOnlyreadOrEditToo = 1; $portfolioOnlyreadOrEditToo = 1;
} }
//filteredTasks', 'OrdemTasks', 'DetailsTasks' campos vazios para ISV. //filteredTasks', 'OrdemTasks', 'DetailsTasks' campos vazios para ISV.
return view('projectsClients.articulated_2_ShowEquipment', compact('detailsProject', 'detalsEquipment', 'filteredTasks', 'OrdemTasks', 'DetailsTasks', 'specificAttributesArray', 'receiveEquipmentWorkHistorys', 'portfolioOnlyreadOrEditToo')); 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> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <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"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
<style> <style>
@ -16,12 +16,12 @@
} }
.card-layout { .card-layout {
margin-top: 10px; margin-top: 20px;
font-size: 10px; font-size: 10px;
/* width: 80mm; /* width: 80mm;
height: 45mm; */ height: 45mm; */
width: 115mm; width: 115mm;
height: 58mm; height: 60mm;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
/* Organiza os filhos verticalmente */ /* Organiza os filhos verticalmente */
@ -67,41 +67,10 @@
width: 12mm; width: 12mm;
height: 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> </style>
</head> </head>
<body> <body>
@foreach ($associatedArray as $key => $value) @foreach ($associatedArray as $key => $value)
<!-- psv --> <!-- psv -->
@if ($detailsEquipment->equipmentType->equipment_type_id == 3) @if ($detailsEquipment->equipmentType->equipment_type_id == 3)
@ -121,25 +90,30 @@
<div class="col-sm-6 p-0 m-0 title-card" style="border: 1px solid gray;"> <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;"> <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> </div>
<!-- Linha: N.Ispt -->
<div class="row align-items-center" style="margin: 0px; height: 18px;"> <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 N.Ispt
</div> </div>
<div class="col-sm" style="text-align: center;"> <div class="col-sm" style="text-align: center; border: 1.2px dashed black;">
{{ $detailsEquipment->istp_number}} {{ $detailsEquipment->istp_number }}
</div> </div>
</div> </div>
<!-- Linha: Tag -->
<div class="row align-items-center" style="margin: 0px; height: 18px;"> <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 Tag
</div> </div>
<div class="col-sm"> <div class="col-sm" style=" text-align: center;">
{{ $detailsEquipment->equipment_tag }} {{ $detailsEquipment->equipment_tag }}
</div> </div>
</div> </div>
</div> </div>
<div class="col-sm p-0" style="border: 1px solid gray;"> <div class="col-sm p-0" style="border: 1px solid gray;">
<div class="col-sm"> <div class="col-sm">
@ -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-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-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; 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>
<div class="row" style="margin: 0px; height: 20px; "> <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-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-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; 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>
<div class="row " style="margin: 0px; height: 20px; "> <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-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;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; 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; 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>
<div class="row" style="margin: 0px; display: flex; align-items: stretch;"> <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: T.val:
</div> </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 PSV
</div> </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: Âmbito:
</div> </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}} {{ $detailsEquipment->equipment_ambit}}
</div> </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: Área:
</div> </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] ?? '###' }} {{ $specificAttributesArray[35] ?? '###' }}
</div> </div>
</div> </div>
@ -281,22 +255,22 @@
</div> </div>
<div class="row" style="margin: 0px; display: flex; align-items: stretch;"> <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: T.val:
</div> </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 CV
</div> </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: Âmbito:
</div> </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}} {{ $detailsEquipment->equipment_ambit}}
</div> </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: Área:
</div> </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] ?? '###' }} {{ $specificAttributesArray[35] ?? '###' }}
</div> </div>
</div> </div>
@ -381,22 +355,22 @@
</div> </div>
<div class="row" style="margin: 0px; display: flex; align-items: stretch;"> <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: T.val:
</div> </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 ISV
</div> </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: Âmbito:
</div> </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}} {{ $detailsEquipment->equipment_ambit}}
</div> </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: Área:
</div> </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] ?? '###' }} {{ $specificAttributesArray[35] ?? '###' }}
</div> </div>
</div> </div>