Update pdf to receive answers and images of elementary tasks

This commit is contained in:
ygbanzato 2024-06-16 21:16:17 +01:00
parent 7d2f37174e
commit 14ed916725
27 changed files with 1417 additions and 6606 deletions

View File

@ -538,6 +538,7 @@ public function enterWorkstation()
public function receiveExecutionProject($ProjectId) public function receiveExecutionProject($ProjectId)
{ {
$DatasProject = CompanyProject::find($ProjectId); $DatasProject = CompanyProject::find($ProjectId);
$equipmentsTypes = EquipmentType::all(); $equipmentsTypes = EquipmentType::all();
@ -581,7 +582,6 @@ public function receiveExecutionProject($ProjectId)
}); });
}); });
// $allEquipmentsFullyCompleted será true se todos os equipamentos tiverem todos seus históricos com status 2 // $allEquipmentsFullyCompleted será true se todos os equipamentos tiverem todos seus históricos com status 2
//Deve verificar se todos os equipamentos ja foram concluidos e se for o caso, deve alterar para Obra concluido, autorizar os relatorios e dessasociar todos os equipamento da Obra atual. //Deve verificar se todos os equipamentos ja foram concluidos e se for o caso, deve alterar para Obra concluido, autorizar os relatorios e dessasociar todos os equipamento da Obra atual.
if ($allEquipmentsFullyCompleted) { if ($allEquipmentsFullyCompleted) {

View File

@ -9,11 +9,16 @@
use App\Models\EquipmentAssociationAmbit; use App\Models\EquipmentAssociationAmbit;
use App\Models\EquipmentComment; use App\Models\EquipmentComment;
use App\Models\EquipmentWorkHistory; use App\Models\EquipmentWorkHistory;
use App\Models\ReceiveImagesControlEquipmentWorkstation;
use App\Models\TasksAssociationAmbits; use App\Models\TasksAssociationAmbits;
use App\Models\Unit; use App\Models\Unit;
use App\Models\workstationsTaskAnswers; use App\Models\workstationsTaskAnswers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use App\Services\PdfWrapper;
use Illuminate\Support\Facades\Storage;
use Yajra\DataTables\Facades\DataTables; use Yajra\DataTables\Facades\DataTables;
@ -36,6 +41,109 @@
class ProjectoDatacontroller extends Controller class ProjectoDatacontroller extends Controller
{ {
public function createPDFforcompletedEquipment($equipmentId)
{
$detailsEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id', $equipmentId)->first();
$detailsEquipment = Equipment::where('equipment_id', $equipmentId)->first();
$receiveDetailsProject = CompanyProject::where('company_projects_id', $detailsEquipmentWorkHistory->company_projects_id)->first();
$receiveAmbit = EquipmentAssociationAmbit::where('equipmentWorkHistorys_id', $detailsEquipmentWorkHistory->equipmentWorkHistorys_id)->first();
// dd($receiveDetailsProject->plant->company->company_logo);
// Recebe apenas as tarefas já feitas
$completedTasksHistory = ControlEquipmentWorkstation::with('workstationsTaskAnswers', 'receiveImages')
->where('equipmentWorkHistorys_id', $detailsEquipmentWorkHistory->equipmentWorkHistorys_id)
->whereNotNull('entry_date')
->whereNotNull('departure_date')
->has('workstationsTaskAnswers')
->orderBy('elemental_tasks_id', 'asc')
->get();
// Cria uma coleção para armazenar todas as tarefas, concluídas e não concluídas
$receiveAllTasksHistiory = collect();
$taskImages = [];
foreach ($completedTasksHistory as $taskHistory) {
$taskHistory->cardTypeStyle = 'gray';
$taskHistory->typeStatusHistory = 'historic';
$workstationTaskAnswer = $taskHistory->workstationsTaskAnswers->first();
if ($workstationTaskAnswer && $workstationTaskAnswer->answer_json) {
$answersArray = json_decode($workstationTaskAnswer->answer_json, true);
$formattedAnswers = [];
foreach ($answersArray as $item) {
if (isset($item['question']) && isset($item['value'])) {
$formattedAnswers[$item['question']] = $item['value'];
}
}
$taskHistory->formatted_answers = $formattedAnswers;
} else {
$taskHistory->formatted_answers = [];
}
if ($taskHistory->receiveImages) {
$imagePaths = $taskHistory->receiveImages->image_paths;
$taskImages[$taskHistory->control_equipment_workstation_id] = is_array($imagePaths) ? $imagePaths : json_decode($imagePaths, true);
} else {
$taskImages[$taskHistory->control_equipment_workstation_id] = [];
}
$receiveAllTasksHistiory->push($taskHistory);
}
// Agrupa as tarefas concluídas por elemental_tasks_id e seleciona a mais recente por departure_date
$receiveAllTasksHistiory = $receiveAllTasksHistiory->groupBy(function ($item) {
return $item->elemental_tasks_id;
})->map(function ($group) {
return $group->sortByDesc('departure_date')->first();
});
// // Define os caminhos das logos
// $defaultLogoPath = '/img/ispt/4.0/Ispt4.0_Símbolo_Fundo_Azul-Marinho@2x-100.jpg';
// // Verifica se a logo do projeto está definida e não está vazia
// $projectLogoPath = !empty($receiveDetailsProject->plant->company->project_logo) ? $receiveDetailsProject->plant->company->project_logo : $defaultLogoPath;
// // Verifica se a logo da empresa está definida e não está vazia
// $companyLogoPath = !empty($receiveDetailsProject->plant->company->company_logo) ? $receiveDetailsProject->plant->company->company_logo : $defaultLogoPath;
// Define os caminhos das logos
$defaultLogoPath = '/img/ispt/4.0/Ispt4.0_Símbolo_Fundo_Azul-Marinho@2x-100.jpg';
// Verifica se a logo do projeto está definida e não está vazia
$projectLogoPath = !empty($receiveDetailsProject->plant->company->project_logo) ? $receiveDetailsProject->plant->company->project_logo : $defaultLogoPath;
// Verifica se a logo da empresa está definida e não está vazia
if (!empty($receiveDetailsProject->plant->company->company_logo)) {
$companyLogoPath = '/companies_logo/' . $receiveDetailsProject->plant->company->company_logo;
} else {
$companyLogoPath = $defaultLogoPath;
}
// Converte as imagens para base64 usando o serviço PdfWrapper
$pdfWrapper = new PdfWrapper();
// dd($receiveAllTasksHistiory);
// Gera e retorna o PDF
return $pdfWrapper
->loadView('projectsClients.pdf.testePdf', [
'tag' => $detailsEquipment->equipment_tag,
'numeroPanini' => $detailsEquipmentWorkHistory->ispt_number,
'nObra' => $receiveDetailsProject->project_company_name,
'ambito' => $receiveAmbit->ambitsEquipment->ambits_description,
'receiveAllTasksHistiory' => $receiveAllTasksHistiory,
'taskImages' => $taskImages,
'projectLogoPath' => $projectLogoPath,
'companyLogoPath' => $companyLogoPath
])
->stream('ispt40.pdf');
}
public function viewProjectsList($orderProjectID) public function viewProjectsList($orderProjectID)
{ {
@ -43,7 +151,6 @@ public function viewProjectsList($orderProjectID)
// $receiveProjectsForThisOrder = CompanyProject::with(['plant.user'])->where('order_project', $orderProjectID)->get(); // $receiveProjectsForThisOrder = CompanyProject::with(['plant.user'])->where('order_project', $orderProjectID)->get();
// return view('projectsClients.viewProjectsList',compact('receiveProjectsForThisOrder','orderProjectID')); // return view('projectsClients.viewProjectsList',compact('receiveProjectsForThisOrder','orderProjectID'));
$receiveProjectsForThisOrder = CompanyProject::with(['plant']) $receiveProjectsForThisOrder = CompanyProject::with(['plant'])
->where('order_project', $orderProjectID) ->where('order_project', $orderProjectID)
->get(); ->get();
@ -193,12 +300,15 @@ public function showAmbitDetailsProjectHistory($equipmentStatus, $projectID, $eq
->orderBy('elemental_tasks_id', 'asc') ->orderBy('elemental_tasks_id', 'asc')
->get(); ->get();
// Cria uma coleção para armazenar todas as tarefas, concluídas e não concluídas // Cria uma coleção para armazenar todas as tarefas, concluídas e não concluídas
$receiveAllTasksHistiory = collect(); $receiveAllTasksHistiory = collect();
// Adiciona as tarefas concluídas à coleção principal // Adiciona as tarefas concluídas à coleção principal
foreach ($completedTasksHistory as $taskHistory) { foreach ($completedTasksHistory as $taskHistory) {
$taskHistory->cardTypeStyle = 'gray'; // Adiciona o campo 'cardTypeStyle' $taskHistory->cardTypeStyle = 'gray'; // Adiciona o campo 'cardTypeStyle'
$taskHistory->typeStatusHistory = 'historic';
// Obtém o primeiro registro de workstationsTaskAnswers ou define como null se não existir // Obtém o primeiro registro de workstationsTaskAnswers ou define como null se não existir
$workstationTaskAnswer = $taskHistory->workstationsTaskAnswers->first(); $workstationTaskAnswer = $taskHistory->workstationsTaskAnswers->first();
@ -222,6 +332,14 @@ public function showAmbitDetailsProjectHistory($equipmentStatus, $projectID, $eq
$taskHistory->formatted_answers = []; $taskHistory->formatted_answers = [];
} }
if ($taskHistory->receiveImages) {
$imagePaths = $taskHistory->receiveImages->image_paths;
$taskHistory->image_paths = is_array($imagePaths) ? $imagePaths : json_decode($imagePaths, true);
} else {
$taskHistory->image_paths = [];
}
if (!is_null($taskHistory->entry_date) && !is_null($taskHistory->departure_date)) { if (!is_null($taskHistory->entry_date) && !is_null($taskHistory->departure_date)) {
// Converte para instâncias de Carbon // Converte para instâncias de Carbon
$entryDate = \Carbon\Carbon::parse($taskHistory->entry_date); $entryDate = \Carbon\Carbon::parse($taskHistory->entry_date);
@ -254,33 +372,41 @@ public function showAmbitDetailsProjectHistory($equipmentStatus, $projectID, $eq
$receiveAllTasksHistiory->push($taskHistory); $receiveAllTasksHistiory->push($taskHistory);
} }
// Agrupar tarefas por elemental_tasks_id e ordenar por departure_date
$tasksGrouped = $completedTasksHistory->groupBy('elemental_tasks_id')->map(function ($group) {
return $group->sortByDesc('departure_date'); // Agrupa e ordena as tarefas concluídas por elemental_tasks_id e departure_date
$receiveAllTasksHistiory = $receiveAllTasksHistiory->groupBy(function ($item) {
return $item->elemental_tasks_id;
})->map(function ($group) {
$latest = $group->sortByDesc('departure_date')->first();
$latest->statusHistory = 'yes';
$history = $group->sortByDesc('departure_date')->slice(1)->map(function ($item) {
$item->statusHistory = 'no';
return $item;
});
return [
'latest' => $latest,
'history' => $history->values()
];
}); });
// Processar tarefas concluídas // ->map(function ($group) {
foreach ($tasksGrouped as $elemental_tasks_id => $tasks) { // return [
// A tarefa mais recente // 'latest' => $group->sortByDesc('departure_date')->first(),
$latestTask = $tasks->first(); // 'history' => $group->sortByDesc('departure_date')->slice(1)->values()
// Os históricos (excluindo a mais recente) // ];
$historyTasks = $tasks->slice(1); // });
$receiveAllTasksHistiory->push((object) [
'latest' => $latestTask,
'history' => $historyTasks,
]);
}
// Adiciona as tarefas não concluídas à coleção principal // Adiciona as tarefas não concluídas à coleção principal
$incompleteTasks = $equipmentTasksIds->diff($completedTasksHistory->pluck('elemental_tasks_id')); $incompleteTasks = $equipmentTasksIds->diff($completedTasksHistory->pluck('elemental_tasks_id'));
foreach ($incompleteTasks as $taskId) { foreach ($incompleteTasks as $taskId) {
// Busca os dados da tarefa elementar // Busca os dados da tarefa elementar
$elementalTask = ElementalTasks::where('elemental_tasks_id', $taskId)->first(); $elementalTask = ElementalTasks::where('elemental_tasks_id', $taskId)->first();
$receiveAllTasksHistiory->push((object) [ // Adiciona à coleção principal usando o elemental_tasks_id como chave
$receiveAllTasksHistiory->put($taskId, [
'latest' => (object) [ 'latest' => (object) [
'elemental_tasks_id' => $taskId, 'elemental_tasks_id' => $taskId,
'control_equipment_workstation_id' => 'N/A', 'control_equipment_workstation_id' => 'N/A',
@ -294,11 +420,11 @@ public function showAmbitDetailsProjectHistory($equipmentStatus, $projectID, $eq
'elemental_tasks_description' => $elementalTask ? $elementalTask->elemental_tasks_description : null 'elemental_tasks_description' => $elementalTask ? $elementalTask->elemental_tasks_description : null
] ]
], ],
'history' => collect(), // Histórico vazio para tarefas não concluídas 'history' => collect() // Histórico vazio para tarefas não concluídas
]); ]);
} }
dd($receiveAllTasksHistiory); // dd($receiveAllTasksHistiory);
//recebe normalmente, porem os checkbox nao conseguem buscar valor, execepto o ultimo dado. //recebe normalmente, porem os checkbox nao conseguem buscar valor, execepto o ultimo dado.
@ -464,7 +590,6 @@ public function projectDetails_11($projectID, $equipmentID)
->keyBy('elemental_tasks_id'); // Keying by elemental_tasks_id para fácil acesso ->keyBy('elemental_tasks_id'); // Keying by elemental_tasks_id para fácil acesso
$filteredTasks = $filteredTasks->map(function ($task) use ($elementalTasksDetails, $DetailsTasks) { $filteredTasks = $filteredTasks->map(function ($task) use ($elementalTasksDetails, $DetailsTasks) {
// Primeiro bloco: Adiciona detalhes da tarefa elemental // Primeiro bloco: Adiciona detalhes da tarefa elemental
if (isset($elementalTasksDetails[$task->elemental_tasks_id])) { if (isset($elementalTasksDetails[$task->elemental_tasks_id])) {
@ -504,8 +629,6 @@ public function projectDetails_11($projectID, $equipmentID)
// dd($taskBeforeExecutionOrder); // dd($taskBeforeExecutionOrder);
// $OrdemTasks = $DetailsTasks->pluck('elemental_tasks_id')->all(); // Array de IDs // $OrdemTasks = $DetailsTasks->pluck('elemental_tasks_id')->all(); // Array de IDs
$OrdemTasks = $DetailsTasks->pluck('execution_order', 'elemental_tasks_id')->all(); $OrdemTasks = $DetailsTasks->pluck('execution_order', 'elemental_tasks_id')->all();

View File

@ -40,6 +40,9 @@ public function workstationsTaskAnswers()
{ {
return $this->hasMany(workstationsTaskAnswers::class, 'control_equipment_workstation_id', 'control_equipment_workstation_id'); return $this->hasMany(workstationsTaskAnswers::class, 'control_equipment_workstation_id', 'control_equipment_workstation_id');
} }
public function receiveImages()
{
return $this->hasOne(ReceiveImagesControlEquipmentWorkstation::class, 'control_equipment_workstation_id', 'control_equipment_workstation_id');
}
} }

View File

@ -77,5 +77,7 @@ public function equipmentWorkHistory()
{ {
return $this->hasMany(EquipmentWorkHistory::class, 'equipment_id', 'equipment_id'); return $this->hasMany(EquipmentWorkHistory::class, 'equipment_id', 'equipment_id');
} }
} }

View File

@ -0,0 +1,354 @@
<?php
namespace App\Services;
use Spatie\Browsershot\Browsershot;
use Illuminate\Http\Response;
class PdfWrapper
{
protected Browsershot $pdfGenerator;
protected string $html;
protected string $headerHtml;
protected string $footerHtml;
public function __construct()
{
$this->pdfGenerator = new Browsershot();
$this->headerHtml = view('projectsClients.pdf._header')->render();
$this->footerHtml = view('projectsClients.pdf._footer')->render();
}
// Load view and render HTML
public function loadView(string $bladeFile, array $data = []): self
{
$this->html = view($bladeFile, $data)->render();
return $this;
}
// Load raw HTML
public function loadHtml(string $html): self
{
$this->html = $html;
return $this;
}
// Load HTML from a URL
public function loadUrl(string $url): self
{
$this->html = file_get_contents(url($url));
return $this;
}
// Generate the PDF using Browsershot
public function generate(): Browsershot
{
return $this->pdfGenerator
->html($this->html)
->format('A4')
->margins(10, 20, 10, 20)
->showBrowserHeaderAndFooter()
->headerHtml($this->headerHtml)
->footerHtml($this->footerHtml)
->waitUntilNetworkIdle();
}
// Save the PDF to the server in the public folder
public function save(string $path): void
{
$this->generate()->savePdf($path);
}
// Download the PDF with a specified filename
public function download(string $filename)
{
$pdf = $this->generate()->pdf();
return new Response($pdf, 200, [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="' . $filename . '"',
'Content-Length' => strlen($pdf)
]);
}
// Stream the PDF in the browser
public function stream(string $filename)
{
$pdf = $this->generate()->pdf();
return new Response($pdf, 200, [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline; filename="' . $filename . '"'
]);
}
}
// namespace App\Services;
// use Spatie\Browsershot\Browsershot;
// use Illuminate\Http\Response;
// class PdfWrapper
// {
// protected Browsershot $pdfGenerator;
// protected string $html;
// public function __construct()
// {
// $this->pdfGenerator = new Browsershot();
// }
// // Load view and render HTML
// public function loadView(string $bladeFile, array $data = []): self
// {
// $this->html = view($bladeFile, $data)->render();
// return $this;
// }
// // Load raw HTML
// public function loadHtml(string $html): self
// {
// $this->html = $html;
// return $this;
// }
// // Load HTML from a URL
// public function loadUrl(string $url): self
// {
// $this->html = file_get_contents(url($url));
// return $this;
// }
// // Generate the PDF using Browsershot
// public function generate(): Browsershot
// {
// return $this->pdfGenerator
// ->html($this->html)
// ->format('A4')
// // ->margins(10, 10, 10, 10)
// ->scale(0.7)
// ->fullPage()
// ->setOption('printBackground',true)
// ->waitUntilNetworkIdle();
// }
// // Save the PDF to the server in the public folder
// public function save(string $path): void
// {
// $this->generate()->savePdf($path);
// }
// // Download the PDF with a specified filename
// public function download(string $filename)
// {
// $pdf = $this->generate()->pdf();
// return new Response($pdf, 200, [
// 'Content-Type' => 'application/pdf',
// 'Content-Disposition' => 'attachment; filename="'.$filename.'"',
// 'Content-Length' => strlen($pdf)
// ]);
// }
// // Stream the PDF in the browser
// public function stream(string $filename)
// {
// $pdf = $this->generate()->pdf();
// return new Response($pdf, 200, [
// 'Content-Type' => 'application/pdf',
// 'Content-Disposition' => 'inline; filename="'.$filename.'"'
// ]);
// }
// }
// namespace App\Services;
// use Spatie\Browsershot\Browsershot;
// use Illuminate\Http\Response;
// use Illuminate\Support\Facades\File;
// class PdfWrapper
// {
// protected Browsershot $pdfGenerator;
// protected string $html;
// public function __construct()
// {
// $this->pdfGenerator = new Browsershot();
// }
// // Load view and render HTML
// public function loadView(string $bladeFile, array $data = []): self
// {
// // Convert image paths to base64
// if (isset($data['imagePaths']) && is_array($data['imagePaths'])) {
// $data['imagesBase64'] = array_map(function($path) {
// return $this->getImageBase64($path);
// }, $data['imagePaths']);
// }
// $this->html = view($bladeFile, $data)->render();
// return $this;
// }
// // Load raw HTML
// public function loadHtml(string $html): self
// {
// $this->html = $html;
// return $this;
// }
// // Load HTML from a URL
// public function loadUrl(string $url): self
// {
// $this->html = file_get_contents(url($url));
// return $this;
// }
// // Generate the PDF using Browsershot
// public function generate(): Browsershot
// {
// return $this->pdfGenerator
// ->html($this->html)
// ->format('A4')
// ->scale(0.7)
// ->fullPage()
// ->setOption('printBackground', true)
// ->waitUntilNetworkIdle();
// }
// // Save the PDF to the server in the public folder
// public function save(string $path): void
// {
// $this->generate()->savePdf($path);
// }
// // Download the PDF with a specified filename
// public function download(string $filename)
// {
// $pdf = $this->generate()->pdf();
// return new Response($pdf, 200, [
// 'Content-Type' => 'application/pdf',
// 'Content-Disposition' => 'attachment; filename="'.$filename.'"',
// 'Content-Length' => strlen($pdf)
// ]);
// }
// // Stream the PDF in the browser
// public function stream(string $filename)
// {
// $pdf = $this->generate()->pdf();
// return new Response($pdf, 200, [
// 'Content-Type' => 'application/pdf',
// 'Content-Disposition' => 'inline; filename="'.$filename.'"'
// ]);
// }
// // Function to convert image to base64
// protected function getImageBase64($imagePath)
// {
// $path = public_path($imagePath);
// $type = pathinfo($path, PATHINFO_EXTENSION);
// $data = File::get($path);
// $base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
// return $base64;
// }
// }
// namespace App\Services;
// use Spatie\Browsershot\Browsershot;
// use Illuminate\Http\Response;
// use Illuminate\Support\Facades\File;
// class PdfWrapper
// {
// protected Browsershot $pdfGenerator;
// protected string $html;
// public function __construct()
// {
// $this->pdfGenerator = new Browsershot();
// }
// // Load view and render HTML
// public function loadView(string $bladeFile, array $data = []): self
// {
// // Convert image paths to base64
// if (isset($data['imagePaths']) && is_array($data['imagePaths'])) {
// $data['imagesBase64'] = array_map(function ($path) {
// return $this->getImageBase64($path);
// }, $data['imagePaths']);
// }
// $this->html = view($bladeFile, $data)->render();
// return $this;
// }
// // Load raw HTML
// public function loadHtml(string $html): self
// {
// $this->html = $html;
// return $this;
// }
// // Load HTML from a URL
// public function loadUrl(string $url): self
// {
// $this->html = file_get_contents(url($url));
// return $this;
// }
// // Generate the PDF using Browsershot
// public function generate(): Browsershot
// {
// return $this->pdfGenerator
// ->html($this->html)
// ->format('A4')
// ->scale(0.7)
// ->fullPage()
// ->setOption('printBackground', true)
// ->showBackground()
// ->waitUntilNetworkIdle()
// ->timeout(60000);
// }
// // Save the PDF to the server in the public folder
// public function save(string $path): void
// {
// $this->generate()->savePdf($path);
// }
// // Download the PDF with a specified filename
// public function download(string $filename)
// {
// $pdf = $this->generate()->pdf();
// return new Response($pdf, 200, [
// 'Content-Type' => 'application/pdf',
// 'Content-Disposition' => 'attachment; filename="' . $filename . '"',
// 'Content-Length' => strlen($pdf)
// ]);
// }
// // Stream the PDF in the browser
// public function stream(string $filename)
// {
// $pdf = $this->generate()->pdf();
// return new Response($pdf, 200, [
// 'Content-Type' => 'application/pdf',
// 'Content-Disposition' => 'inline; filename="' . $filename . '"'
// ]);
// }
// // Function to convert image to base64
// protected function getImageBase64($imagePath)
// {
// $path = public_path($imagePath);
// if (!File::exists($path)) {
// return null; // Retorna null se o arquivo não existir
// }
// $type = pathinfo($path, PATHINFO_EXTENSION);
// $data = File::get($path);
// $base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
// return $base64;
// }
// // Function to convert image paths in a collection to base64
// public function convertImagePathsToBase64($collection)
// {
// foreach ($collection as $item) {
// if (isset($item->image_paths) && is_array($item->image_paths)) {
// $item->image_paths = array_map([$this, 'getImageBase64'], $item->image_paths);
// }
// }
// }
// }

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

View File

@ -0,0 +1,513 @@
<!-- TE1 - Desmontar da linha -->
@if ($task_todo->elemental_tasks_id == 1)
<!-- TE1 - Desmontar da linha -->
<div class="card {{ $task_todo->cardType }} collapsed-card">
<!-- Card-header TE1-->
<div class="card-header clickable" style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }}
</h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1">
</div>
<div class="d-flex justify-content-end align-items-center">
@if ($task_todo->typeStatusHistory === 'historic')
<p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
@endif
</div>
<div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" data-card-widget="collapse">
</button>
</div>
</div>
</div>
<!-- ./Card-header TE1-->
<div class="card-body">
<div class="form-group">
<input type="hidden" name="controlEquipmentID"
value="{{ $receiveDataControlEquipment->control_equipment_workstation_id ?? '' }}">
<!-- Conformidade da etiqueta -->
<div class="row mb-3">
<div class="col-md-6 icheck-primary">
<input id="ID1[confirm_label_compliance-checkbox]" type="checkbox"
name="ID1[confirm_label_compliance-checkbox]"
@if (isset($task_todo->formatted_answers['confirm_label_compliance']) &&
$task_todo->formatted_answers['confirm_label_compliance'] == 'on') checked @endif
@if ($task_todo->cardTypeStyle == 'gray') disabled @endif required>
<label for="ID1[confirm_label_compliance-checkbox]">Conformidade da
etiqueta <span style="color: red;">*</span></label>
</div>
</div> <!-- ./ Conformidade da etiqueta -->
<!-- Tipo de junta existente -->
<div class="row mb-3">
<div class="col-md-6">
<label for="existing-joint">Tipo de junta existente <span style="color: red;">*</span></label>
</div>
<div class="col-md-6">
<select id="existing-joint" name="ID1[existing_joint-select]" class="form-control select2"
style="width: 100%;" @if ($task_todo->cardTypeStyle == 'gray') disabled @endif required>
<option value="316L OR" @if (isset($task_todo->formatted_answers['existing_joint']) &&
$task_todo->formatted_answers['existing_joint'] == '316L OR') selected @endif>316L OR
</option>
<option value="316L IR/OR" @if (isset($task_todo->formatted_answers['existing_joint']) &&
$task_todo->formatted_answers['existing_joint'] == '316L IR/OR') selected @endif>316L IR/OR
</option>
<option value="Monel IR/OR" @if (isset($task_todo->formatted_answers['existing_joint']) &&
$task_todo->formatted_answers['existing_joint'] == 'Monel IR/OR') selected @endif>Monel
IR/OR
</option>
<option value="Monel OR C/Gorotex" @if (isset($task_todo->formatted_answers['existing_joint']) &&
$task_todo->formatted_answers['existing_joint'] == 'Monel OR C/Gorotex') selected @endif>
Monel OR
C/Gorotex
</option>
</select>
</div>
</div> <!-- ./ Tipo de junta existente -->
<!-- Facing type -->
<div class="row">
<div class="col-md-6">
<label>Facing type <span style="color: red;">*</span></label>
</div>
<div class="col-md-6">
<select id="facing-type" name="ID1[facing_type-select]" class="form-control select2"
style="width: 100%;" @if ($task_todo->cardTypeStyle == 'gray') disabled @endif required>
<option disabled hidden value=""></option>
<option value="RF" @if (isset($task_todo->formatted_answers['facing_type']) && $task_todo->formatted_answers['facing_type'] == 'RF') selected @endif>RF
</option>
<option value="RTJ" @if (isset($task_todo->formatted_answers['facing_type']) && $task_todo->formatted_answers['facing_type'] == 'RTJ') selected @endif>RTJ
</option>
</select>
</div>
</div> <!-- ./ Facing type -->
<!-- Diâmetro do perno -->
<div class="row m-3">
<div class="col-md-6">
<label>Diâmetro do perno</label>
</div>
<div class="col-md-6">
<div class="icheck-primary d-inline mr-2">
<input type="radio" value="Polegadas" id="ID1[diameter-inches]"
name="ID1[diameter-varchar]" @if (isset($task_todo->formatted_answers['diameter']) && $task_todo->formatted_answers['diameter'] == 'Polegadas') checked @endif
@if ($task_todo->cardTypeStyle == 'gray') disabled @endif>
<label for="ID1[diameter-inches]">Polegadas</label>
</div>
<div class="icheck-primary d-inline">
<input type="radio" value="Milímetros" id="ID1[diameter-milimeters]"
name="ID1[diameter-varchar]" @if (isset($task_todo->formatted_answers['diameter']) && $task_todo->formatted_answers['diameter'] == 'Milímetros') checked @endif
@if ($task_todo->cardTypeStyle == 'gray') disabled @endif>
<label for="ID1[diameter-milimeters]">Milímetros</label>
</div>
</div>
</div> <!-- ./ Diâmetro do perno -->
<!-- Medida do perno -->
<div class="row mb-3">
<div class="col-md-6">
<label>Medida do perno</label>
</div>
<div class="col-md-6 d-flex align-items-center">
<input id="bolt-measure1" name="ID1[bolt_measure1-number]" type="number" step="0.01"
class="form-control" style="width: 40%;" placeholder=""
value="{{ $task_todo->formatted_answers['bolt_measure1'] ?? '' }}"
@if ($task_todo->cardTypeStyle == 'gray') readonly @endif> x
<input id="bolt-measure2" name="ID1[bolt_measure2-number]" type="number"
class="form-control ml-2" style="width: 40%;" placeholder=""
value="{{ $task_todo->formatted_answers['bolt_measure2'] ?? '' }}"
@if ($task_todo->cardTypeStyle == 'gray') readonly @endif>
</div>
</div> <!-- ./ Medida do perno -->
<!-- Medida da chave (mm) -->
<div class="row mb-3">
<div class="col-md-6">
<label>Medida da chave (mm)</label>
</div>
<div class="col-md-6">
<input id="key-measure" name="ID1[key_measure-number]" type="number" class="form-control"
placeholder="" value="{{ $task_todo->formatted_answers['key_measure'] ?? '' }}"
@if ($task_todo->cardTypeStyle == 'gray') readonly @endif>
</div>
</div> <!-- ./ Medida da chave (mm) -->
<!-- Tubagem obstruída -->
<div class="row mb-3">
<div class="col-md-6 d-flex align-items-center">
<label>Tubagem obstruída</label>
<i class="fas fa-info-circle ml-2" style="color: #9B9B9B;" data-toggle="tooltip"
title="Considera-se obstruída a tubagem onde a válvula se encontra conectada, quando a obstrução é = v > a 25%"></i>
</div>
<div class="col-md-6">
<div class="icheck-primary d-inline mr-2">
<input type="radio" value="TRUE" id="piping-yes" name="ID1[piping-boolean]"
@if (isset($task_todo->formatted_answers['piping']) && $task_todo->formatted_answers['piping'] == 'TRUE') checked @endif
@if ($task_todo->cardTypeStyle == 'gray') disabled @endif>
<label for="piping-yes">Sim</label>
</div>
<div class="icheck-primary d-inline">
<input type="radio" value="FALSE" id="piping-no" name="ID1[piping-boolean]"
@if (isset($task_todo->formatted_answers['piping']) && $task_todo->formatted_answers['piping'] == 'FALSE') checked @endif
@if ($task_todo->cardTypeStyle == 'gray') disabled @endif>
<label for="piping-no">Não</label>
</div>
</div>
</div> <!-- ./ Tubagem obstruída -->
@if (!empty($task_todo->image_paths))
<div class="row no-gutters justify-content-center">
@foreach ($task_todo->image_paths as $image)
<div class="col-12 col-sm-6 col-md-4 col-lg-3 mb-3">
<img src="{{ asset($image) }}" alt="Image" class="img-fluid pdf-image mx-auto" style="border: 3px solid #00B0EA; cursor: pointer;" data-toggle="modal" data-target="#imageModal" data-src="{{ asset($image) }}">
</div>
@endforeach
</div>
@endif
</div>
@if ($task_todo->statusHistory === 'yes')
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#taskModal"
data-elemental-task-id="{{ $task_todo->elemental_tasks_id }}">
Abrir Histórico
</button>
@endif
{{-- <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#taskModal" data-elemental-task-id="{{ $task_todo->elemental_tasks_id }}">
Abrir Histórico
</button> --}}
<!-- Verifica se for diferente de gray. ou seja se o card for green ou blue, aparece o botao -->
@if ($task_todo->cardTypeStyle != 'gray')
<div class="card-footer">
<!-- Botão alinhado à direita -->
<button type="submit" class="btn btn-primary float-right">Guardar</button>
</div>
@endif
</div>
<!-- ./card TE1 -->
{{-- @if (isset($imagesBase64) && is_array($imagesBase64))
<div class="row no-gutters">
@foreach ($imagesBase64 as $image)
<div class="col-4">
<img src="{{ $image }}" alt="Image" class="pdf-image"
style="border: 3px solid #00B0EA">
</div>
@endforeach
</div>
@endif --}}
</div>
<!-- ./TE1 - Desmontar da linha -->
@endif
{{-- <!-- TE8 - Calibrar e certificar -->
@if ($task_todo->elemental_tasks_id == 13)
<!-- Workstation card -->
<div class="card {{ $task_todo->cardType }} collapsed-card">
<div class="card-header clickable" style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }}
</h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1">
</div>
<div class="d-flex justify-content-end align-items-center">
@if ($task_todo->typeStatusHistory === 'historic')
<p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |
</p>
<p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
@endif
</div>
<div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" data-card-widget="collapse">
</button>
</div>
</div>
</div>
<div class="card-body">
<form id="form13">
@csrf
<div class="form-group">
<!-- Single form-group for all content -->
<!-- Data calibração -->
<div class="row mb-3">
<div class="col-md-6">
<label>Data de calibração</label>
<span style="color: red;">*</span></label>
</div>
<div class="col-md-6 ">
<div class="input-group date" id="reservationdate" data-target-input="nearest">
<input name="ID13[pre_test_date-date]" type="datetime-local"
class="form-control float-right"
value="{{ $task_todo->formatted_answers['pre_test_date'] ?? '' }}"
@if ($task_todo->cardTypeStyle == 'gray') readonly @endif required>
</div>
</div>
</div>
<!-- ./ Data de calibração -->
<!-- Pressão da calibração a frio (bar) -->
<div class="row mb-3">
<div class="col-md-6">
<label>Pressão da calibração a frio (bar) <span style="color: red;">*</span></label>
</div>
<div class="col-md-6">
<input id="calibration-pressure" name="ID13[calibration_pressure-number]" type="number"
step="0.01" class="form-control" placeholder=""
value="{{ $task_todo->formatted_answers['calibration_pressure'] ?? '' }}"
@if ($task_todo->cardTypeStyle == 'gray') readonly @endif required>
</div>
</div>
<!-- ./ Pressão da calibração a frio (bar) -->
<!-- Teste de estanquicidade (bolhas/min) -->
<div class="row mb-3">
<div class="col-md-6">
<label>Teste de estanquicidade (bolhas/min) <span style="color: red;">*</span></label>
</div>
<div class="col-md-6">
<input id="ID13[bubbles-minute]" name="ID13[bubbles_minute-number]" type="number"
class="form-control" placeholder=""
value="{{ $task_todo->formatted_answers['bubbles_minute'] ?? '' }}"
@if ($task_todo->cardTypeStyle == 'gray') readonly @endif required>
</div>
</div>
<!-- ./ Teste de estanquicidade (bolhas/min) -->
<!-- Fole testado -->
<div class="row mt-2">
<div class="col-md-6">
<label>Fole testado <span style="color: red;">*</span></label>
</div>
<div class="col-md-6">
<select id="tested-bellow" name="ID13[tested_bellow-select]"
class="form-control select2" style="width: 100%;" required>
<option value="yes" @if ($task_todo->formatted_answers['tested_bellow'] ?? '' == 'yes') selected @endif>
Sim</option>
<option value="no" @if ($task_todo->formatted_answers['tested_bellow'] ?? '' == 'no') @endif>
Não</option>
<option value="n_a" @if ($task_todo->formatted_answers['tested_bellow'] ?? '' == 'n_a') @endif>
N/A</option>
</select>
</div>
</div>
<!-- ./ Fole testado -->
<!-- Teste contra-pressão (bar) -->
<div class="row mt-2">
<div class="col-md-6">
<label>Teste contra-pressão (bar) <span style="color: red;">*</span></label>
</div>
<div class="col-md-6">
<select id="back-pressure-test" name="ID13[back_pressure_test-select]"
class="form-control select2" @if ($task_todo->cardTypeStyle == 'gray') disabled @endif>
<option value="yes" @if ($task_todo->formatted_answers['back_pressure_test'] ?? '' == 'yes') selected @endif>
Sim</option>
<option value="no" @if ($task_todo->formatted_answers['back_pressure_test'] ?? '' == 'no') @endif>
Não</option>
<option value="n_a" @if ($task_todo->formatted_answers['back_pressure_test'] ?? '' == 'n_a') @endif>
N/A</option>
</select>
</div>
</div>
<!-- ./ Teste contra-pressão (bar) -->
<!-- Padrão utilizado -->
<div class="row mt-2">
<div class="col-md-6">
<label>Padrão utilizado</label>
</div>
<div class="col-md-6 d-flex align-items-center">
<input id="standard-used" name="ID13[standard_used-label]" type="text"
maxlength="50" class="form-control" placeholder=""
value="{{ $task_todo->formatted_answers['standard_used'] ?? '' }}"
@if ($task_todo->cardTypeStyle == 'gray') readonly @endif>
</div>
</div>
<!-- ./ Padrão utilizado -->
<!-- Fluído utilizado na calibração -->
<div class="row mb-3 mt-3">
<div class="col-md-6 d-flex align-items-center">
<label>Fluído utilizado na calibração <span style="color: red;">*</span></label>
</div>
<div class="col-md-6">
<select name="ID13[calibration_fluid-select]" id="calibration_fluid-select"
class="form-control" @if ($task_todo->cardTypeStyle == 'gray') disabled @endif>
<option value="compressed_air" @if ($task_todo->formatted_answers['calibration_fluid'] ?? '' == 'compressed_air') selected @endif>Ar
comprimido</option>
<option value="azoto" @if ($task_todo->formatted_answers['calibration_fluid'] ?? '' == 'azoto') selected @endif>Azoto
</option>
<option value="water" @if ($task_todo->formatted_answers['calibration_fluid'] ?? '' == 'water') selected @endif>Água
</option>
</select>
</div>
</div>
<!-- ./ Fluído utilizado na calibração -->
<!-- Outro -->
<div class="row mt-2">
<div class="col-md-6">
<label>Outro</label>
</div>
<div class="col-md-6 d-flex align-items-center">
<input id="other" name="ID13[other-label]" type="text" maxlength="50"
class="form-control" placeholder=""
value="{{ $task_todo->formatted_answers['other'] ?? '' }}"
@if ($task_todo->cardTypeStyle == 'gray') readonly @endif required>
</div>
</div>
<!-- ./ Outro -->
<!-- Resultado da calibração -->
<div class="row mb-3 mt-3">
<div class="col-md-6 d-flex align-items-center">
<label>Resultado da calibração <span style="color: red;">*</span></label>
</div>
<div class="col-md-6">
<select name="ID13[calibration_result-select]" id="calibration_result-select"
class="form-control" @if ($task_todo->cardTypeStyle == 'gray') disabled @endif>
<option value="passed" @if ($task_todo->formatted_answers['calibration_result'] ?? '' == 'passed') selected @endif>Passou
</option>
<option value="fail" @if ($task_todo->formatted_answers['calibration_result'] ?? '' == 'fail') selected @endif>Chumbou
</option>
</select>
</div>
</div>
<!-- ./ Resultado da calibração -->
</div> <!-- End of single form-group -->
@if ($task_todo->statusHistory === 'yes')
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#taskModal"
data-elemental-task-id="{{ $task_todo->elemental_tasks_id }}">
Abrir Histórico
</button>
@endif
<!-- Verifica se for diferente de gray. ou seja se o card for green ou blue, aparece o botao -->
@if ($task_todo->cardTypeStyle != 'gray')
<div class="card-footer">
<!-- Botão alinhado à direita -->
<button type="submit" class="btn btn-primary float-right">Guardar</button>
</div>
@endif
</form>
</div>
</div>
<!-- ./ Workstation card-->
@endif --}}
<!-- TE10 - Montagem na linha -->
@if ($task_todo->elemental_tasks_id == 15)
<!-- TE10 - Montagem na linha -->
<div class="card {{ $task_todo->cardType }} collapsed-card">
<!-- Card-header TE10-->
<div class="card-header clickable" style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }}
</h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1">
</div>
<div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div>
<div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" data-card-widget="collapse">
</button>
</div>
</div>
</div>
<div class="card-body">
<form id="form15">
@csrf
<div class="form-group">
<input type="hidden" name="controlEquipmentID"
value="{{ $receiveDataControlEquipment->control_equipment_workstation_id ?? '' }}">
<!-- Conformidade da etiqueta -->
<div class="row mb-3">
<div class="col-md-6 icheck-primary">
<input id="ID15[confirm_label_compliance-checkbox]" type="checkbox"
name="ID15[confirm_label_compliance-checkbox]"
@if (isset($task_todo->formatted_answers['confirm_label_compliance']) &&
$task_todo->formatted_answers['confirm_label_compliance'] == 'on') checked @endif
@if ($task_todo->cardTypeStyle == 'gray') disabled @endif required>
<label for="ID15[confirm_label_compliance-checkbox]">
Conformidade da etiqueta <span style="color: red;">*</span>
</label>
</div>
</div>
<!-- ./ Conformidade da etiqueta -->
<!-- Tipo de junta -->
<div class="row mt-2">
<div class="col-md-6">
<label>Tipo de junta <span style="color: red;">*</span></label>
</div>
<div class="col-md-6">
<select id="ID15[gasket_type-select]" name="ID15[gasket_type-select]"
class="form-control select2" style="width: 100%;"
@if ($task_todo->cardTypeStyle == 'gray') disabled @endif required>
<option selected="selected" disabled hidden value="">
</option>
<option value="316L OR" @if (isset($task_todo->formatted_answers['gasket_type']) && $task_todo->formatted_answers['gasket_type'] == '316L OR') selected @endif>316L
OR
</option>
<option value="316L IR/OR" @if (isset($task_todo->formatted_answers['gasket_type']) && $task_todo->formatted_answers['gasket_type'] == '316L IR/OR') selected @endif>316L
IR/OR</option>
<option value="Monel IR/OR" @if (isset($task_todo->formatted_answers['gasket_type']) &&
$task_todo->formatted_answers['gasket_type'] == 'Monel IR/OR') selected @endif>Monel
IR/OR</option>
<option value="Monel OR C/Gorotex"
@if (isset($task_todo->formatted_answers['gasket_type']) &&
$task_todo->formatted_answers['gasket_type'] == 'Monel OR C/Gorotex') selected @endif>Monel
OR
C/Gorotex</option>
</select>
</div>
</div>
<!-- ./ Tipo de junta -->
</div> <!-- End of single form-group -->
<!-- Verifica se for diferente de gray. ou seja se o card for green ou blue, aparece o botao -->
@if ($task_todo->cardTypeStyle != 'gray')
<div class="card-footer">
<!-- Botão alinhado à direita -->
<button type="submit" class="btn btn-primary float-right">Guardar</button>
</div>
@endif
</form>
</div><!-- card-body TE10 -->
</div>
@endif

View File

@ -1,129 +1,156 @@
{{-- <!DOCTYPE html> {{-- <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
@page {
size: A4;
margin: 20mm;
}
body {
font-family: Arial, sans-serif;
font-size: 14px;
margin: 0;
padding: 0;
}
.page-break {
page-break-before: always;
}
header, footer {
position: fixed;
left: 0;
right: 0;
height: 50px;
text-align: center;
}
header {
top: 0;
}
footer {
bottom: 0;
}
.content {
margin-top: 70px;
margin-bottom: 70px;
}
</style>
</head>
<body>
<div>
{{ $slot }}
</div>
</body>
</html> --}}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
{{-- <link rel="stylesheet" href="{{ url('https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css') }}"> --}}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/css/bootstrap.min.css" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/css/bootstrap.min.css" rel="stylesheet">
<style> <style>
@page { @page {
size: A4; size: A4;
margin-top: 10px; margin-top: 10px;
margin-bottom: 50px;
/* Ajuste conforme necessário */
} }
body { body {
font-family: Arial, sans-serif; font-family: Arial, sans-serif;
font-size: 14px; font-size: 14px;
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
.page-break { .page-break {
page-break-before: always; page-break-before: always;
} }
header, footer {
header {
position: fixed; position: fixed;
top: 0;
left: 0;
right: 0;
height: 50px;
text-align: center;
margin-bottom: 100px;
}
footer {
position: fixed;
bottom: 0;
left: 0; left: 0;
right: 0; right: 0;
height: 50px; height: 50px;
text-align: center; text-align: center;
} }
header {
top: 0;
bottom: 10mm;
margin-bottom: 100px;
}
footer {
bottom: 0;
}
.content { .content {
margin-top: 150px; margin-top: 170px;
margin-bottom: 70px; /* Aumente para dar mais espaço para o cabeçalho */
left: 0; margin-bottom: 50px;
right: 0; /* Espaço para o rodapé */
/* margin: 0; */ padding: 0 20px;
padding: 0;
} }
</style> </style>
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<header class="mb-3"> <!-- Certifique-se de adicionar margem abaixo do cabeçalho --> <header class="mb-3">
@include('projectsClients.pdf._header', compact('tag', 'numeroPanini', 'nObra', 'ambito')) @include('projectsClients.pdf._header', compact('tag', 'numeroPanini', 'nObra', 'ambito', 'projectLogoPath', 'companyLogoPath'))
</header> </header>
<div class="content"> <div class="content">
<!-- Seu conteúdo principal aqui -->
{{ $slot }} {{ $slot }}
</div> </div>
<footer> <footer>
@include('projectsClients.pdf._footer') @include('projectsClients.pdf._footer', ['pageCounter' => $pageCounter])
</footer> </footer>
</div> </div>
</body> </body>
</html> --}}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
@page {
size: A4;
margin-top: 10px;
margin-bottom: 50px;
/* Ajuste conforme necessário */
}
body {
font-family: Arial, sans-serif;
font-size: 14px;
margin: 0;
padding: 0;
}
.page-break {
page-break-before: always;
}
header {
position: fixed;
top: 0;
left: 0;
right: 0;
height: 50px;
text-align: center;
margin-bottom: 100px;
}
footer {
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: 50px;
text-align: center;
}
.content {
margin-top: 170px;
/* Aumente para dar mais espaço para o cabeçalho */
margin-bottom: 50px;
/* Espaço para o rodapé */
padding: 0 20px;
}
</style>
</head>
<body>
<div class="container">
<header class="mb-3">
@include(
'projectsClients.pdf._header',
compact('tag', 'numeroPanini', 'nObra', 'ambito', 'projectLogoPath', 'companyLogoPath'))
</header>
<div class="content">
{{ $slot }}
</div>
{{-- <footer>
@include('projectsClients.pdf._footer', ['pageCounter' => $pageCounter])
@include('projectsClients.pdf._footer')
</footer> --}}
</div>
</body>
</html> </html>

View File

@ -1,24 +1,14 @@
<div class="footer"> <div class="footer">
<div class="container" > <div class="container">
<div class="row"> <div class="row">
<div class="col-6 generated-at"> <div class="col-6 generated-at">
Generated at: {{ \Carbon\Carbon::now()->addHour()->format('Y-m-d H:i:s') }} Generated at: {{ \Carbon\Carbon::now()->addHour()->format('Y-m-d H:i:s') }}
</div> </div>
<div class="col-6 page-number"> <div class="col-6 page-number">
Page: 1 {{-- Page: {{ $pageCounter }} --}}
Page: N/A
{{-- <script type="text/php">
if (isset($pdf)) {
$pdf->page_script(function($pageNumber, $pageCount, $pdf) {
$text = "Page $pageNumber of $pageCount";
$pdf->text(10, 820, $text);
});
}
</script> --}}
</div> </div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,89 +1,27 @@
{{-- <div style="display: flex; align-items: center; font-size: 14px;">
<!-- Logo -->
<div style="flex: 0 0 auto; margin-right: 20px;">
<img src="data:image/png;base64,{{ base64_encode(file_get_contents('http://place-hold.it/50x50?text=Logo+4.0')) }}" alt="Logo 4.0" style="width: 50px; height: 50px;">
</div>
<!-- Relatório de Dados -->
<div style="flex: 1; text-align: left;">
<p style="margin: 0;"><strong>Tag:</strong> {{ $tag ?? 'N/A' }}</p>
<p style="margin: 0;"><strong>Número Panini:</strong> {{ $numeroPanini ?? 'N/A' }}</p>
<p style="margin: 0;"><strong>N. Obra:</strong> {{ $nObra ?? 'N/A' }}</p>
<p style="margin: 0;"><strong>Âmbito:</strong> {{ $ambito ?? 'N/A' }}</p>
</div>
</div> --}}
{{-- <div class="container">
<!-- Logo -->
<div class="row" style="background-color: blue;">
<!-- Imagem no extremo esquerdo -->
<div class="col-sm d-flex justify-content-start">
<img src="data:image/png;base64,{{ base64_encode(file_get_contents('http://place-hold.it/50x50?text=Logo+4.0')) }}"
alt="Logo 4.0" class="img-fluid">
</div>
<!-- Imagem no extremo direito -->
<div class="col-sm d-flex justify-content-end">
<img src="data:image/png;base64,{{ base64_encode(file_get_contents('http://place-hold.it/50x50?text=Logo+4.0')) }}"
alt="Logo 4.0" class="img-fluid">
</div>
</div>
<!-- Relatório de Dados -->
<div style="border-style: groove;">
<div class="row">
<div class="col-sm">
<p class="mb-0" style="border-style: double;"><strong>Tag:</strong> {{ $tag ?? 'N/A' }}</p>
</div>
<div class="col-sm">
<p class="mb-0" style="border-style: double;"><strong>Número Panini:</strong> {{ $numeroPanini ?? 'N/A' }}</p>
</div>
</div>
<div class="row">
<div class="col-sm">
<p class="mb-0" style="border-style: double;"><strong>N. Obra:</strong> {{ $nObra ?? 'N/A' }}</p>
</div>
<div class="col-sm">
<p class="mb-0" style="border-style: double;"><strong>Âmbito:</strong> {{ $ambito ?? 'N/A' }}</p>
</div>
</div>
</div>
</div> --}}
<div class="container"> <div class="container">
<!-- Logo --> <!-- Logo -->
<div class="row" style="height: 70px;margin-bottom : 15px;"> <div class="row" style="height: 70px; margin-bottom: 15px;">
<!-- Imagem no extremo esquerdo --> <!-- Imagem no extremo esquerdo -->
<div class="col d-flex justify-content-start align-items-center" style="height: 100%;"> <div class="col d-flex justify-content-start align-items-center" style="height: 100%;">
<img src="data:image/png;base64,{{ base64_encode(file_get_contents('http://place-hold.it/50x50?text=Logo+4.0')) }}" <img src="{{ public_path($projectLogoPath) }}" alt="Project Logo" class="img-fluid"
alt="Logo 4.0" class="img-fluid"> style="max-width: 70px; max-height: 70px;">
</div> </div>
<!-- Imagem no extremo direito --> <!-- Imagem no extremo direito -->
<div class="col d-flex justify-content-end align-items-center" style="height: 100%;"> <div class="col d-flex justify-content-end align-items-center" style="height: 100%;">
<img src="data:image/png;base64,{{ base64_encode(file_get_contents('http://place-hold.it/50x50?text=Logo+4.0')) }}" <img src="{{ public_path($companyLogoPath) }}" alt="Company Logo" class="img-fluid"
alt="Logo 4.0" class="img-fluid"> style="max-width: 70px; max-height: 70px;">
</div> </div>
</div> </div>
<!-- Relatório de Dados --> <!-- Relatório de Dados -->
<div class="row" style="margin-left: 2px;" > <div class="row" style="margin-left: 2px;">
<div class="row"> <div class="row">
<!-- Defina uma altura fixa para a linha do relatório -->
<div class="col-sm"> <div class="col-sm">
<p class="mb-0" style="border-style: double;"><strong>Tag:</strong> {{ $tag ?? 'N/A' }}</p> <p class="mb-0" style="border-style: double;"><strong>Tag:</strong> {{ $tag ?? 'N/A' }}</p>
</div> </div>
<div class="col-sm"> <div class="col-sm">
<p class="mb-0" style="border-style: double;"><strong>Número Panini:</strong> <p class="mb-0" style="border-style: double;"><strong>Número Panini:</strong>
{{ $numeroPanini ?? 'N/A' }} {{ $numeroPanini ?? 'N/A' }}</p>
</p>
</div> </div>
</div> </div>
@ -91,11 +29,9 @@
<div class="col-sm"> <div class="col-sm">
<p class="mb-0" style="border-style: double;"><strong>N. Obra:</strong> {{ $nObra ?? 'N/A' }}</p> <p class="mb-0" style="border-style: double;"><strong>N. Obra:</strong> {{ $nObra ?? 'N/A' }}</p>
</div> </div>
<div class="col-sm" "> <div class="col-sm">
<p class="mb-0" style="border-style: double;"><strong>Âmbito:</strong> {{ $ambito ?? 'N/A' }}</p> <p class="mb-0" style="border-style: double;"><strong>Âmbito:</strong> {{ $ambito ?? 'N/A' }}</p>
</div> </div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,430 +1,96 @@
{{-- <x-pdf-layout> {{-- @php
$pageCounter = 1;
@endphp
<h1>{{ $card1 }}</h1> <x-pdf-layout :tag="$tag" :numeroPanini="$numeroPanini" :nObra="$nObra" :ambito="$ambito" :projectLogoPath="$projectLogoPath"
<p> :pageCounter="$pageCounter" :companyLogoPath="$companyLogoPath">
ISPT4.0 Lorem ipsum dolor sit, amet consectetur adipisicing elit. Facere consequatur perferendis culpa vel magnam enim doloremque eveniet. Repudiandae quisquam earum, provident sapiente sint iure sequi delectus rerum, odit iste a?
</p>
<div class="page-break"></div>
<h1>Card 2</h1>
<p>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Ipsum tenetur, asperiores cum laudantium tempore illum ducimus rem veniam officia. Dolorum quam sequi dolores earum architecto nemo temporibus, voluptatibus repudiandae tempora.
</p>
</x-pdf-layout> --}}
{{-- @foreach ($receiveAllTasksHistiory as $task_todo)
<x-pdf-layout :tag="$tag" :numeroPanini="$numeroPanini" :nObra="$nObra" :ambito="$ambito"> <div class="page-break"></div>
<h1>{{ $card1 }}</h1>
<p>
ISPT4.0 Lorem ipsum dolor sit, amet consectetur adipisicing elit. Facere consequatur perferendis culpa vel magnam enim doloremque eveniet. Repudiandae quisquam earum, provident sapiente sint iure sequi delectus rerum, odit iste a?
</p>
<div class="page-break"></div>
<h1>Card 2</h1> <div class="content">
<p> @include('components.elemental-tasks', ['task_todo' => $task_todo])
Lorem ipsum dolor sit amet consectetur adipisicing elit. Ipsum tenetur, asperiores cum laudantium tempore illum ducimus rem veniam officia. Dolorum quam sequi dolores earum architecto nemo temporibus, voluptatibus repudiandae tempora. <br>
</p> <br>
</x-pdf-layout> --}} <br>
@if (isset($taskImages[$task_todo->control_equipment_workstation_id]) && is_array($taskImages[$task_todo->control_equipment_workstation_id]))
<x-pdf-layout :tag="$tag" :numeroPanini="$numeroPanini" :nObra="$nObra" :ambito="$ambito"> <div class="row no-gutters">
@foreach ($taskImages[$task_todo->control_equipment_workstation_id] as $image)
<div class="card card-danger" style="border-style: double;"> <div class="col-4">
<!-- Card-header TE3 - Pré-teste--> <img src="{{ public_path($image) }}" alt="Image" class="pdf-image"
<div class="card-header clickable" style="background-color: #09255C"> style="border: 3px solid #00B0EA">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> </div>
<h3 class="card-title mb-0" style="color: white"> @endforeach
PSV - Pré-teste</h3>
<div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" data-card-widget="collapse">
<i class="fas fa-plus"></i></button>
</div> </div>
@endif
</div>
@php
$pageCounter++;
@endphp
@endforeach
</x-pdf-layout> --}}
<x-pdf-layout :tag="$tag" :numeroPanini="$numeroPanini" :nObra="$nObra" :ambito="$ambito" :projectLogoPath="$projectLogoPath"
:companyLogoPath="$companyLogoPath">
@php
$pageCounter = 1;
@endphp
@foreach ($receiveAllTasksHistiory as $task_todo)
<div class="page-break"></div>
<div class="container">
<header class="mb-3">
@include(
'projectsClients.pdf._header',
compact('tag', 'numeroPanini', 'nObra', 'ambito', 'projectLogoPath', 'companyLogoPath'))
</header>
<div class="content">
@include('components.elemental-tasks', ['task_todo' => $task_todo])
<br>
<br>
<br>
@if (isset($taskImages[$task_todo->control_equipment_workstation_id]) &&
is_array($taskImages[$task_todo->control_equipment_workstation_id]))
<div class="row no-gutters">
@foreach ($taskImages[$task_todo->control_equipment_workstation_id] as $image)
<div class="col-4">
<img src="{{ public_path($image) }}" alt="Image" class="pdf-image"
style="border: 3px solid #00B0EA">
</div>
@endforeach
</div>
@endif
</div> </div>
</div>
<!-- Card-header TE3 - Pré-teste--> <footer>
<div class="footer">
<div class="card-body"> <div class="container">
<div class="row">
<div class="form-group"> <!-- Single form-group for all content --> <div class="col-6 generated-at">
Generated at: {{ \Carbon\Carbon::now()->addHour()->format('Y-m-d H:i:s') }}
<div class="row"> </div>
<div class="col-6 page-number">
<!-- First card column --> Page: {{ $pageCounter }}
<div class="col-md">
<!-- Validar especificações técnicas -->
<div class="row mb">
<div class="icheck-primary">
<input id="ID3[validate-technical-specifications]" type="checkbox"
name="ID3[validate-technical-specifications-checkbox]" value="on" checked>
<label for="ID3[validate-technical-specifications]">
Validar especificações técnicas
<span style="color: red;">*</span>
</label>
</div> </div>
</div> </div>
<!-- ./ Validar especificações técnicas -->
<!-- Especificações técnicas -->
<!-- ./ Especificações técnicas -->
<!-- Data de pré-teste -->
<div class="row mb-3">
<div class="col-md-4 d-flex align-items-center">
<label>Data de calibração</label>
<span style="color: red;">*</span></label>
<span style="color: red;">*</span></label>
</div>
<div class="col-md-8 d-flex align-items-center">
<div class="input-group date" id="reservationdate" data-target-input="nearest">
<input name="ID3[pre_test_data-datetime]" type="datetime-local"
class="form-control float-right">
</div>
</div>
</div>
<!-- ./ Data de pré-teste -->
<!-- API RP 576 -->
<div class="row mb-3">
<div class="col-md d-flex align-items-center">
<label for="apirp576-select">Pré-teste efetuado de acordo
com o API RP 576</label>
</div>
<div class="col-md">
<select id="apirp576-select" name="ID3[apirp576-select]" class="form-control">
<option value="yes">
Sim</option>
<option value="no">
Não</option>
</select>
</div>
</div>
<!-- ./ API RP 576 -->
<!-- Pré-teste em bancada -->
<div class="row mb-3">
<div class="col-md d-flex align-items-center">
<label for="bench-pretest-select">
Foi efetuado o pré-teste em bancada <span style="color: red;">*</span>
</label>
</div>
<div class="col-md-3">
<select id="bench-pretest-select" name="ID3[bench_pretest-select]" class="form-control">
<option value="yes">
Sim</option>
<option value="no">
Não</option>
</select>
</div>
</div>
<!-- ./ Pré-teste em bancada -->
<!-- Conforme recebida da unidade -->
<div class="row mb-3">
<div class="col-md-9 d-flex align-items-center">
<label for="unit-received-select">Conforme recebida da unidade</label>
</div>
<div class="col-md-3">
<select id="unit-received-select" name="ID3[unit_received-select]" class="form-control">
<option value="yes">
Sim</option>
<option value="no">
Não</option>
</select>
</div>
</div>
<!-- ./ Conforme recebida da unidade -->
<!-- Após limpeza -->
<div class="row mb-3">
<div class="col-md-9 d-flex align-items-center">
<label for="after-cleaning-select">Após limpeza</label>
</div>
<div class="col-md-3">
<select id="after-cleaning-select" name="ID3[after_cleaning-select]"
class="form-control">
<option value="yes">
Sim</option>
<option value="no">
Não</option>
</select>
</div>
</div>
<!-- ./ Após limpeza -->
<!-- Apresenta fuga -->
<div class="row mb-3">
<div class="col-md-9 d-flex align-items-center">
<label for="shows-leak-select">Apresenta fuga</label>
<i class="fas fa-info-circle ml-2" style="color: #9B9B9B;" data-toggle="tooltip"
title="Considera-se com fuga no teste de 'POP', em bancada ou na instalação, quando o início da passagem é inferior a 90% relativamente ao 'set pressure', (95% para válvulas pilotadas). Para testes de inspeção visual considera-se com fuga se houver evidência de danos excessivos ou cortes nas faces de vedação"></i>
</div>
<div class="col-md-3">
<select id="shows-leak-select" name="ID3[shows_leak-select]" class="form-control">
<option value="yes">
Sim</option>
<option value="no">
Não</option>
</select>
</div>
</div>
<!-- ./ Apresenta fuga -->
</div> </div>
<!-- ./First card column -->
<!-- Second card column -->
<div class="col-md">
<!-- Pressão a que se inicia a passagem (bar) -->
<div class="row mb-3">
<div class="col-md-7">
<label>Pressão a que se inicia a passagem (bar) <span
style="color: red;">*</span></label>
</div>
<div class="col-md-5 d-flex align-items-center">
</div>
</div>
<!-- ./ Pressão a que se inicia a passagem (bar) -->
<!-- Pressão a que volta a fechar "assentar" (bar) -->
<div class="row mb-3">
<div class="col-md-7">
<label>Pressão a que volta a fechar "assentar" (bar) <span
style="color: red;">*</span></label>
</div>
<div class="col-md-5 d-flex align-items-center">
<input id="pressure-flow-stops" name="ID3[pressure_flow_stops-number]" type="number"
step="0.01" class="form-control" style="width: 100%;">
</div>
</div>
<!-- ./ Pressão a que volta a fechar "assentar" (bar) -->
<!-- Pressão de abertura POP (bar) -->
<div class="row mb-3">
<div class="col-md-7">
<label>Pressão de abertura POP (bar) <span style="color: red;">*</span></label>
</div>
<div class="col-md-5 d-flex align-items-center">
<input id="POP_opening_pressure" name="ID3[POP_opening_pressure-number]"
type="number" step="0.01" class="form-control" style="width: 100%;">
</div>
</div>
<!-- ./ Pressão de abertura POP (bar) -->
<!-- A válvula está colada -->
<div class="row mb-3">
<div class="col-md-9 d-flex align-items-center">
<label for="stuck-valve-select">
A válvula está colada <span style="color: red;">*</span>
</label>
<i class="fas fa-info-circle ml-2" style="color: #9B9B9B;" data-toggle="tooltip"
title="Considera-se válvula colada quando se eleva a pressão até 30% da Pressão de Teste e não abre"></i>
</div>
<div class="col-md-3">
<select id="stuck_valve-select" name="ID3[stuck_valve-select]" class="form-control">
<option value="yes">
Sim</option>
<option value="no">
Não</option>
</select>
</div>
</div>
<!-- ./ A válvula está colada -->
<!-- Indicar se a válvula volta a assentar durante o teste -->
<div class="row mb-3">
<div class="col-md-7 d-flex align-items-center">
<label for="valve-reseats-select">
Indicar se a válvula volta a assentar durante o teste
<span style="color: red;">*</span>
</label>
</div>
<div class="col-md-5">
<select id="valve_reseats-select" name="ID3[valve_reseats-select]"
class="form-control">
<option value="yes">
Sim</option>
<option value="no">
Não</option>
<option value="not applicable">
Não aplicável</option>
</select>
</div>
</div>
<!-- ./ Indicar se a válvula volta a assentar durante o teste -->
<!-- Reparada -->
<div class="row mb-3">
<div class="col-md-8 d-flex align-items-center">
<label for="repaired-select">
Reparada <span style="color: red;">*</span>
</label>
</div>
<div class="col-md-4">
<select id="repaired-select" name="ID3[repaired-select]" class="form-control">
<option value="yes">
Sim</option>
<option value="no">
Não</option>
<option value="new">
Nova</option>
</select>
</div>
</div>
<!-- ./ Reparada -->
<!-- Resultado do pré-teste -->
<div class="row mb-3">
<div class="col-md-8 d-flex align-items-center">
<label for="pre-test-result-select">
Resultado do pré-teste
<span style="color: red;">*</span>
</label>
<i class="fas fa-info-circle ml-2" style="color: #9B9B9B;" data-toggle="tooltip"
title="Considera-se que passou o teste de 'POP', em bancada ou na instalação, quando a abertura se dá num intervalo de 30% relativamente ao 'set pressure'. Para testes de inspeção visual considera-se que passou se não houver evidências de mola danificada, corrosão excessiva e/ou gripagem das peças móveis (haste/guia/obturador)."></i>
</div>
<div class="col-md-4">
<select id="pre_test_result-select" name="ID3[pre_test_result-select]"
class="form-control" X>
<option value="passed" X>
Passou</option>
<option value="plunked">
Chumbou</option>
</select>
</div>
</div>
<!-- ./ Resultado do pré-teste -->
<!-- Resumo -->
<label>Resumo</label>
<table class="table table-bordered">
<thead>
<tr>
<th style="width: 50%">Falha ao abrir</th>
<th style="width: 50%">Falha de estanquicidade (Fuga)
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<!-- FTO -->
<div class="icheck-primary d-inline mr-2">
<input type="radio" class="toggle-radio" id="fto-lpv-fto"
name="fto_lpv-select" checked>
<label value="FTO" for="fto-lpv-fto">
Preso ou Falha a Abrir (FTO)
<span style="color: red;">*</span>
</label>
</div>
<!-- ./ FTO -->
</td>
<td>
<!-- LPV -->
<div class="icheck-primary d-inline mr-2">
<input type="radio" class="toggle-radio" id="fto-lpv-lpv"
name="fto_lpv-select">
<label value="FTO" for="fto-lpv-lpv">
Fuga Superior à Permitida (LPV)
<span style="color: red;">**</span>
</label>
</div>
<!-- ./ LPV -->
</td>
</tr>
<tr>
<td>
<!-- VPO -->
<div class="icheck-primary d-inline mr-2">
<input type="radio" class="toggle-radio" id="vpo-spo-vpo"
name="vpo_spo-select">
<label value="VPO" for="vpo-spo-vpo">
Válvula Parcialmente Aberta (VPO)
<span style="color: red;">*</span>
</label>
</div>
<!-- ./ VPO -->
</td>
<td>
<!-- SPO -->
<div class="icheck-primary d-inline mr-2">
<input type="radio" class="toggle-radio" id="vpo-spo-spo"
name="vpo_spo-select">
<label value="SPO" for="vpo-spo-spo">
Abre Antes da Pressão de Teste (SPO)
<span style="color: red;">**</span>
</label>
</div>
<!-- ./ SPO -->
</td>
</tr>
<tr>
<td>
<!-- OASP -->
<div class="icheck-primary d-inline mr-2">
<input type="radio" class="toggle-radio" id="oasp-vso-oasp"
name="oasp_vso-select">
<label value="OASP" for="oasp-vso-oasp">
Abre Acima da Pressão de Teste (OASP)
<span style="color: red;">*</span></label>
</div>
<!-- ./ OASP -->
</td>
<td>
<!-- VSO -->
<div class="icheck-primary d-inline mr-2">
<input type="radio" class="toggle-radio" id="oasp-vso-vso"
name="oasp_vso-select">
<label value="VSO" for="oasp-vso-vso">Válvula
Colada
(VSO)
<span style="color: red;">**</span></label>
</div>
<!-- ./ VSO -->
</td>
</tr>
</tbody>
</table>
<!-- ./Resumo -->
</div>
<!-- ./ Second card column -->
</div> </div>
</footer>
</div> <!-- End of single form-group -->
</div> </div>
@php
$pageCounter++;
@endphp
@endforeach
</div> </x-pdf-layout>
<br><br><br><br>
@if (isset($imagesBase64) && is_array($imagesBase64))
<div class="row no-gutters">
@foreach ($imagesBase64 as $image)
<div class="col-4">
<img src="{{ $image }}" alt="Image" class="pdf-image" style="border: 3px solid #00B0EA">
</div>
@endforeach
</div>
@endif
</x-pdf-layout>

View File

@ -153,15 +153,15 @@ class="fas fa-plus"></i></button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -352,15 +352,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -595,15 +595,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -679,15 +679,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -1157,15 +1157,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -1589,15 +1589,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -2063,15 +2063,15 @@ class="form-control select2" style="width: 100%;" required
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -2652,15 +2652,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -2998,15 +2998,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -3065,15 +3065,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -3165,15 +3165,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -3502,15 +3502,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -4475,15 +4475,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -5064,15 +5064,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -5280,15 +5280,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -5345,15 +5345,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -5443,15 +5443,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -5539,15 +5539,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -5612,15 +5612,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -5688,15 +5688,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -6182,15 +6182,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"
@ -6351,15 +6351,15 @@ class="btn btn-primary float-right">Guardar</button>
<div class="card-header clickable" <div class="card-header clickable"
style="background-color: {{ $task_todo->cardTypeStyle }}"> style="background-color: {{ $task_todo->cardTypeStyle }}">
<div class="d-flex justify-content-between align-items-center" style="width: 100%;"> <div class="d-flex justify-content-between align-items-center" style="width: 100%;">
<h5 class="card-title mb-0"> <h5 class="card-title mb-0" style="color:white;">
{{ $task_todo->elementalTask->elemental_tasks_code }} - {{ $task_todo->elementalTask->elemental_tasks_code }} -
{{ $task_todo->elementalTask->elemental_tasks_description }} {{ $task_todo->elementalTask->elemental_tasks_description }}
</h5> </h5>
<div class="d-flex justify-content-center align-items-center flex-grow-1"> <div class="d-flex justify-content-center align-items-center flex-grow-1">
</div> </div>
<div class="d-flex justify-content-end align-items-center"> <div class="d-flex justify-content-end align-items-center">
<p class="mb-0 text-center mx-auto">Data:{{ $task_todo->entry_date }} |</p> <p class="mb-0 text-center mx-auto" style="color:white;">Data:{{ $task_todo->entry_date }} |</p>
<p class="mb-0"> Tempo de execução: {{ $task_todo->runtime }}</p> <p class="mb-0" style="color:white;"> Tempo de execução: {{ $task_todo->runtime }}</p>
</div> </div>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool collapse-button" <button type="button" class="btn btn-tool collapse-button"

View File

@ -14,9 +14,9 @@
<ol class="breadcrumb float-sm-right"> <ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item active"><a href="{{ route('reportingDataClient') }}">Obras Concluidas</a> <li class="breadcrumb-item active"><a href="{{ route('reportingDataClient') }}">Obras Concluidas</a>
</li> </li>
<li class="breadcrumb-item active"><a <li class="breadcrumb-item active">
href="{{ route('showDataDetailsProjectClient', ['projectID' => $projectId]) }}">Relatorios <a href="{{ route('showDataDetailsProjectClient', ['projectID' => $projectId]) }}">Relatorios Gerais</a>
Gerais</a></li> </li>
<li class="breadcrumb-item active">Relatório geral Ambito</li> <li class="breadcrumb-item active">Relatório geral Ambito</li>
</ol> </ol>
</div> </div>
@ -34,9 +34,9 @@
<h3 class="card-title ">{{ $dataAmbit->ambits_description }}</h3> <h3 class="card-title ">{{ $dataAmbit->ambits_description }}</h3>
</div> </div>
<div class="col-sm text-right"> <div class="col-sm text-right">
<a <a href="{{ route('showReportingForAmbitsProjectPdf', ['ambitId' => $ambitId, 'projectId' => $projectId]) }}">
href="{{ route('showReportingForAmbitsProjectPdf', ['ambitId' => $ambitId, 'projectId' => $projectId]) }}"><i <i class="fa-solid fa-file-pdf fa-2x"></i>
class="fa-solid fa-file-pdf fa-2x"></i></a> </a>
</div> </div>
</div> </div>
</div> </div>

View File

@ -83,6 +83,9 @@
Route::get('equipmentTaskDetailsPdf', [ProjectoDatacontroller::class, 'equipmentTaskDetailsPdf'])->name('equipmentTaskDetailsPdf'); Route::get('equipmentTaskDetailsPdf', [ProjectoDatacontroller::class, 'equipmentTaskDetailsPdf'])->name('equipmentTaskDetailsPdf');
Route::get('createPDFforcompletedEquipment/{equipmentId}', [ProjectoDatacontroller::class, 'createPDFforcompletedEquipment'])->name('createPDFforcompletedEquipment');
Route::get('getDataEquipment', [ExecutionProjectController::class, 'getDataEquipment'])->name('getDataEquipment'); Route::get('getDataEquipment', [ExecutionProjectController::class, 'getDataEquipment'])->name('getDataEquipment');
Route::get('getDetailsEquipmentQrcode', [ExecutionProjectController::class, 'getDetailsEquipmentQrcode'])->name('getDetailsEquipmentQrcode'); Route::get('getDetailsEquipmentQrcode', [ExecutionProjectController::class, 'getDetailsEquipmentQrcode'])->name('getDetailsEquipmentQrcode');
@ -135,10 +138,6 @@
Route::get('teste1', function () { Route::get('teste1', function () {
$imagePaths = [ $imagePaths = [
// 'receiveImagesControlEquipmentWorkstation/1897_3781/img1.png',
// 'receiveImagesControlEquipmentWorkstation/1897_3781/img2.png',
// 'receiveImagesControlEquipmentWorkstation/1897_3781/img3.png'
'receiveImagesControlEquipmentWorkstation/1926_3781/img1.png', 'receiveImagesControlEquipmentWorkstation/1926_3781/img1.png',
'receiveImagesControlEquipmentWorkstation/1926_3781/img2.png', 'receiveImagesControlEquipmentWorkstation/1926_3781/img2.png',
'receiveImagesControlEquipmentWorkstation/1926_3781/img3.png', 'receiveImagesControlEquipmentWorkstation/1926_3781/img3.png',
@ -184,6 +183,7 @@
Route::get('showReportingForAmbitsProjectPdf/{ambitId}/{projectId}', [ClientController::class, 'showReportingForAmbitsProjectPdf'])->name('showReportingForAmbitsProjectPdf'); //ok Route::get('showReportingForAmbitsProjectPdf/{ambitId}/{projectId}', [ClientController::class, 'showReportingForAmbitsProjectPdf'])->name('showReportingForAmbitsProjectPdf'); //ok
Route::get('getDataAllEquipmentsForAmbitOfProject', [ClientController::class, 'getDataAllEquipmentsForAmbitOfProject'])->name('getDataAllEquipmentsForAmbitOfProject'); Route::get('getDataAllEquipmentsForAmbitOfProject', [ClientController::class, 'getDataAllEquipmentsForAmbitOfProject'])->name('getDataAllEquipmentsForAmbitOfProject');
// Route::get('test/{id}',[ExecutionProjectController::class, 'projectDetails_11'])->name('projectDetails_11'); // Route::get('test/{id}',[ExecutionProjectController::class, 'projectDetails_11'])->name('projectDetails_11');