create components, portfolio and elemental tasks, update datatabels , for works in execution

This commit is contained in:
ygbanzato 2024-09-30 18:55:07 +01:00
parent 461fc8328d
commit a496b2fef0
40 changed files with 16464 additions and 14705 deletions

3
.env
View File

@ -11,6 +11,7 @@ LOG_LEVEL=debug
DB_CONNECTION=mysql DB_CONNECTION=mysql
DB_PORT=3306 DB_PORT=3306
# DB_HOST=127.0.0.1 # DB_HOST=127.0.0.1
# DB_DATABASE=ispt_4.0 # DB_DATABASE=ispt_4.0
# DB_USERNAME=root # DB_USERNAME=root
@ -18,7 +19,7 @@ DB_PORT=3306
# Alteracoes para funcionar com o servidor, porem não funciona na firma # Alteracoes para funcionar com o servidor, porem não funciona na firma
DB_HOST=ispt-innovation.com DB_HOST=ispt-innovation.com
DB_DATABASE=ispt40_version01_BK DB_DATABASE=ispt40_version01
DB_USERNAME=ispt40 DB_USERNAME=ispt40
DB_PASSWORD=qu3ro3ntr@r DB_PASSWORD=qu3ro3ntr@r

View File

@ -51,7 +51,7 @@ public function changeStateProject($projectId)
$detailsPrpject->order_project = 3; $detailsPrpject->order_project = 3;
$detailsPrpject->save(); $detailsPrpject->save();
// Redireciona para a rota 'home' após alterar o estado para Execussao // Redireciona para a rota 'home' após alterar o estado para execução
return redirect()->route('home'); return redirect()->route('home');
} }
@ -411,12 +411,16 @@ public function receiveUnitsForExcelTemplate($numberProject)
// Dados das Fabricas // Dados das Fabricas
$receveUnits = Unit::where('plant_id', $recevePlant->plant_id)->get(); $receveUnits = Unit::where('plant_id', $recevePlant->plant_id)->get();
// dd($receveUnits);
$filePath = public_path('templateExcel/Valves_Template.xlsx'); $filePath = public_path('templateExcel/Valves_Template.xlsx');
// Load the spreadsheet // Load the spreadsheet
$spreadsheet = IOFactory::load($filePath); $spreadsheet = IOFactory::load($filePath);
// Get the second sheet // Get the second sheet
$sheet = $spreadsheet->getSheet(1); // Sheet index starts from 0 $sheet = $spreadsheet->getSheet(1); // Sheet index starts from 0
// Define o valor de $numberProject na célula E2
$sheet->setCellValue('E2', $numberProject);
$row = 2; // Row number where you want to start inserting data $row = 2; // Row number where you want to start inserting data
foreach ($receveUnits as $unit) { foreach ($receveUnits as $unit) {
// Set value for column D // Set value for column D
@ -537,7 +541,7 @@ public function finishCreatingProject($numberProject)
return redirect()->back()->with('errors', $allMissingTasks); return redirect()->back()->with('errors', $allMissingTasks);
} else if ($receiveDetailsProject->order_project == 5) { } else if ($receiveDetailsProject->order_project == 5) {
// Se for igual a 5 significa que forem adicionados apenas equipamentos extras e sendo assim precisa voltar para a Obra em execussao // Se for igual a 5 significa que forem adicionados apenas equipamentos extras e sendo assim precisa voltar para a Obra Em execução
$receiveDetailsProject->order_project = 3; $receiveDetailsProject->order_project = 3;
$receiveDetailsProject->save(); $receiveDetailsProject->save();
return redirect()->route('home'); return redirect()->route('home');
@ -613,6 +617,9 @@ public function removeProjectEquipment(Request $request)
} }
public function EditEquipment(Request $request) public function EditEquipment(Request $request)
{ {
// dd($request);
// Localiza o equipment pelo numberProject // Localiza o equipment pelo numberProject
$dataEquipment = Equipment::where('equipment_id', $request->equipmentID)->first(); $dataEquipment = Equipment::where('equipment_id', $request->equipmentID)->first();
@ -669,6 +676,7 @@ public function EditEquipment(Request $request)
} }
} }
} }
return back()->with('success', 'Equipamento Atualizado!'); return back()->with('success', 'Equipamento Atualizado!');
} }
@ -1213,8 +1221,7 @@ public function processStep2(Request $request)
{ {
// Valide e processe os dados do formulário // Valide e processe os dados do formulário
$file = $request->file('documento'); $file = $request->file('documento');
// Criar o array para adicionar o HashMap
// $uniqueRowsHashmap = [];
// Recebe a id do Projecto criado // Recebe a id do Projecto criado
$company_projects_id = $request->numberProject; $company_projects_id = $request->numberProject;
// Recebe mais detalhes da Obra Atual. // Recebe mais detalhes da Obra Atual.
@ -1230,6 +1237,38 @@ public function processStep2(Request $request)
$originalFileName = $file->getClientOriginalName(); $originalFileName = $file->getClientOriginalName();
// Carregue o arquivo Excel // Carregue o arquivo Excel
$spreadsheet = IOFactory::load($file->path()); $spreadsheet = IOFactory::load($file->path());
// Verifica se existe uma sheet chamada 'list'
if ($spreadsheet->sheetNameExists('lists')) {
$listSheet = $spreadsheet->getSheetByName('lists');
// Verifica o valor da célula E2 na sheet 'list'
$sheetValueE2 = $listSheet->getCell('E2')->getValue();
// Compara com o valor de $request->numberProject
if ($sheetValueE2 != $request->numberProject) {
// Decide a rota de redirecionamento com base em 'order_project' se osnumeros da Obra nao forem o mesmo
if ($detailsCompanyProject->order_project == 5) {
return redirect()->route('changeFromExecutionToPlanning', ['projectID' => $request->numberProject])
->with('danger', 'Arquivo ignorado, Template de outra Obra');
} else {
return redirect()->route('articulated_2', ['projectID' => $request->numberProject])
->with('danger', 'Arquivo ignorado, Template de outra Obra');
}
}
} else {
// Decide a rota de redirecionamento se a sheet 'lists' não existir
if ($detailsCompanyProject->order_project == 5) {
return redirect()->route('changeFromExecutionToPlanning', ['projectID' => $request->numberProject])
->with('danger', 'Arquivo ignorado, por não ser compatível com a template 4.0');
} else {
return redirect()->route('articulated_2', ['projectID' => $request->numberProject])
->with('danger', 'Arquivo ignorado, por não ser compatível com a template 4.0');
}
}
// Obtenha a primeira planilha, onde fica os nomes chaves para associar as tabelas : 'general_attributes_equipaments' ,'equipments' e 'equipmentWorkHistorys' // Obtenha a primeira planilha, onde fica os nomes chaves para associar as tabelas : 'general_attributes_equipaments' ,'equipments' e 'equipmentWorkHistorys'
$worksheet = $spreadsheet->getSheet(0); $worksheet = $spreadsheet->getSheet(0);
// Transforme os dados da planilha em um array // Transforme os dados da planilha em um array
@ -1254,7 +1293,7 @@ public function processStep2(Request $request)
$documentType = $parts[2]; // 98 $documentType = $parts[2]; // 98
$timestamp = $parts[3]; // 2024-01-14_14-33 $timestamp = $parts[3]; // 2024-01-14_14-33
//Funcao para padronizar as respostas, como eliminar espacos em branco e reduzir o texto sempre para minisculas
function normalize($value) function normalize($value)
{ {
// Remove espaços em branco no início e no fim da string // Remove espaços em branco no início e no fim da string
@ -1296,7 +1335,6 @@ function normalize($value)
// Em cada um das linhas horizontais do excel, vai se guardar a 'key' vinculada ao valor do campo preenchido ou seja a 'key' vai ter o mesmo nome de um dos dados da tabela 'general_attributes_equipaments' na coluna : general_attributes_equipment_description, assim sendo mais facil implementar na tabela : specific_attributes_equipament_types // Em cada um das linhas horizontais do excel, vai se guardar a 'key' vinculada ao valor do campo preenchido ou seja a 'key' vai ter o mesmo nome de um dos dados da tabela 'general_attributes_equipaments' na coluna : general_attributes_equipment_description, assim sendo mais facil implementar na tabela : specific_attributes_equipament_types
$joinArrays = array_combine($columnNames, $dataLines); $joinArrays = array_combine($columnNames, $dataLines);
// vai guardar todos os campos de possiveis novos equipamentos, cada um em um array para multiplos inserts, na base de dados // vai guardar todos os campos de possiveis novos equipamentos, cada um em um array para multiplos inserts, na base de dados
$datas = array_filter($joinArrays, function ($chave) { $datas = array_filter($joinArrays, function ($chave) {
return !empty($chave); return !empty($chave);
@ -1493,7 +1531,7 @@ function normalize($value)
// Caso a linha nao se enquadre em nenhuma das verificacoes anteriores, ele sera considerado um equipamento novo. // Caso a linha nao se enquadre em nenhuma das verificacoes anteriores, ele sera considerado um equipamento novo.
} else { } else {
//Novo equipamento //--------- Novo equipamento
$newEquipament = new Equipment; $newEquipament = new Equipment;
$newEquipament->unit_id = $detailsUnit->unit_id; $newEquipament->unit_id = $detailsUnit->unit_id;
$newEquipament->equipment_type_id = $equipmentType->equipment_type_id; $newEquipament->equipment_type_id = $equipmentType->equipment_type_id;
@ -1512,7 +1550,9 @@ function normalize($value)
//Criar 'specific_attributes_equipament_types' de acordo com o escrito, na linha do excel //Criar 'specific_attributes_equipament_types' de acordo com o escrito, na linha do excel
$generalAttributes = GeneralAttributesEquipment::all(); $generalAttributes = GeneralAttributesEquipment::all();
foreach ($generalAttributes as $generalAttribute) { foreach ($generalAttributes as $generalAttribute) {
// Verifica se a chave existe em $datas // Verifica se a chave existe em $datas
if (isset($datas[$generalAttribute->general_attributes_equipment_description])) { if (isset($datas[$generalAttribute->general_attributes_equipment_description])) {
$specificAttribute = new SpecificAttributesEquipmentType; $specificAttribute = new SpecificAttributesEquipmentType;

View File

@ -4,6 +4,7 @@
use App\Models\Company; use App\Models\Company;
use App\Models\EquipmentWorkHistory; use App\Models\EquipmentWorkHistory;
use App\Models\OrderEquipmentTasks;
use App\Models\PendingEquipment; use App\Models\PendingEquipment;
use App\Models\Plant; use App\Models\Plant;
use App\Models\ProjectExcelLog; use App\Models\ProjectExcelLog;
@ -567,7 +568,7 @@ public function receiveExecutionProject($ProjectId)
// dd($allWorkstations); // dd($allWorkstations);
// Adicionando a nomenclatura de workstation aos usuários filtrados // Adicionando a nomenclatura de workstation aos usuários filtrados
$filteredUsers->map(function ($user) use ($allWorkstations) { $filteredUsers->map(function ($user) use ($allWorkstations) {
if (isset ($allWorkstations[$user->user_name])) { if (isset($allWorkstations[$user->user_name])) {
$user->nomenclature_workstation = $allWorkstations[$user->user_name]->nomenclature_workstation; $user->nomenclature_workstation = $allWorkstations[$user->user_name]->nomenclature_workstation;
} }
return $user; return $user;
@ -598,7 +599,7 @@ public function receiveExecutionProject($ProjectId)
return redirect()->route('home'); return redirect()->route('home');
} else { } else {
//Caso nem todos os equipamento tenham-se concluidos, deve voltar a pagina de Execussao normalmente //Caso nem todos os equipamento tenham-se concluidos, deve voltar a pagina de execução normalmente
// Retornando a view com os dados necessários // Retornando a view com os dados necessários
return view('projectsClients/executionProjectNew', [ return view('projectsClients/executionProjectNew', [
@ -734,69 +735,52 @@ public function showQrcodesInProject($projectNumber)
->with('equipmentsProjects', $equipmentsProjects); ->with('equipmentsProjects', $equipmentsProjects);
} }
// public function receiveDetailsEquipmentsProject(Request $request)
// {
// $numberProject = $request->input('receiveNumberProject');
// $tableType = $request->input('tableType'); // Captura o tipo de tabela
// // Para
// if ($tableType == 'pending') {
// $initialQuery = Equipment::where('company_projects_id', $numberProject);
// } else {
// // Lógica para a tabela 'normal'
// $initialQuery = Equipment::where('company_projects_id', $numberProject);
// }
// $query = $initialQuery->get(); // Certifique-se de usar get() para retornar uma coleção
// return DataTables::of($query)
// ->addColumn('equipment_type_name', function ($query) {
// // Retorna 'equipment_type_name' do relacionamento 'equipmentType'
// return $query->equipmentType ? $query->equipmentType->equipment_type_name : 'N/A';
// })
// ->addColumn('unit_name', function ($query) {
// // Retorna 'unit_name' do relacionamento 'unit'
// return $query->unit ? $query->unit->unit_name : 'N/A';
// })
// ->addColumn('ambit_name', function ($query) {
// $firstEquipmentWorkHistory = $query->equipmentWorkHistory->first();
// return $firstEquipmentWorkHistory->equipmentAssociationAmbit->ambitsEquipment->ambits_description;
// })
// ->make(true);
// }
public function receiveDetailsEquipmentsProject(Request $request) public function receiveDetailsEquipmentsProject(Request $request)
{ {
$numberProject = $request->input('receiveNumberProject'); $numberProject = $request->input('receiveNumberProject');
$tableType = $request->input('tableType'); // Captura o tipo de tabela $tableType = $request->input('tableType'); // Captura o tipo de tabela
// query inicial dependendo se estamos buscando equipamentos pendentes ou normais.
// Ajusta a query inicial dependendo se estamos buscando equipamentos pendentes ou normais.
$initialQuery = Equipment::where('company_projects_id', $numberProject) $initialQuery = Equipment::where('company_projects_id', $numberProject)
->whereHas('equipmentWorkHistory', function ($query) use ($tableType) { ->whereHas('equipmentWorkHistory', function ($query) use ($tableType) {
//Para a tabela com status = pending' deve ir equipamentos com status = 1 pois estao pendentes para Aprovar // Para a tabela 'pending' devem ir equipamentos com status = 1 ou 4 (por rever) pois estão pendentes para aprovação
// Para os restantes equipamentos vao para a tabela que lista os equipamentos da Obra,porem apenas os equipmentos com status = 0
//Equipamentos concluidos e aprovados,vao ter o status = 2 e servir apenas para visualizar
// Definir o status com base no tipo de tabela
if ($tableType === 'pending') { if ($tableType === 'pending') {
$statuses = [1, 4]; // Equipamentos pendentes para aprovação $statuses = [1, 4]; // Equipamentos pendentes para aprovação
$query->whereIn('equipment_status_project', $statuses); $query->whereIn('equipment_status_project', $statuses);
} else if ($tableType === 'completed') { }
// Para a tabela 'completed', apenas equipamentos concluídos e aprovados (status = 2)
else if ($tableType === 'completed') {
$status = 2; // Equipamentos concluídos e aprovados $status = 2; // Equipamentos concluídos e aprovados
$query->where('equipment_status_project', $status); $query->where('equipment_status_project', $status);
} else { }
$status = 0; // Outros equipamentos em andamento (normal) // Para as tabelas 'start' e 'execution', primeiro filtramos equipamentos em andamento (status = 0)
$query->where('equipment_status_project', $status); else if (in_array($tableType, ['start', 'execution'])) {
$query->where('equipment_status_project', 0);
} }
}); });
$query = $initialQuery->get(); // Obtém a coleção de equipamentos com base nos critérios // lógica para 'start' e 'execution' diretamente com a relação entre equipmentWorkHistory e controlEquipmentWorkstation
if ($tableType === 'start') {
// Equipamentos que ainda não iniciaram (sem registros no ControlEquipmentWorkstation)
$initialQuery->whereHas('equipmentWorkHistory', function ($query) {
$query->whereDoesntHave('controlEquipmentWorkstation', function ($subQuery) {
$subQuery->whereNotNull('equipmentWorkHistorys_id'); // Equipamentos que ainda não iniciaram
});
});
} else if ($tableType === 'execution') {
// Equipamentos já iniciados (com registros no ControlEquipmentWorkstation)
$initialQuery->whereHas('equipmentWorkHistory', function ($query) {
$query->whereHas('controlEquipmentWorkstation', function ($subQuery) {
$subQuery->whereNotNull('equipmentWorkHistorys_id'); // Equipamentos que já iniciaram
});
});
}
$query = $initialQuery->get(); // Obtém a coleção de equipamentos com base nos critérios
return DataTables::of($query) return DataTables::of($query)
->addColumn('ispt_number', function ($equipment) {
$firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first();
return $firstEquipmentWorkHistory ? $firstEquipmentWorkHistory->ispt_number : 'N/A';
})
->addColumn('equipment_type_name', function ($equipment) { ->addColumn('equipment_type_name', function ($equipment) {
// Retorna 'equipment_type_name' do relacionamento 'equipmentType' // Retorna 'equipment_type_name' do relacionamento 'equipmentType'
return $equipment->equipmentType ? $equipment->equipmentType->equipment_type_name : 'N/A'; return $equipment->equipmentType ? $equipment->equipmentType->equipment_type_name : 'N/A';
@ -809,7 +793,6 @@ public function receiveDetailsEquipmentsProject(Request $request)
$firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first(); $firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first();
return $firstEquipmentWorkHistory ? $firstEquipmentWorkHistory->equipmentAssociationAmbit->ambitsEquipment->ambits_description : 'N/A'; return $firstEquipmentWorkHistory ? $firstEquipmentWorkHistory->equipmentAssociationAmbit->ambitsEquipment->ambits_description : 'N/A';
}) })
->addColumn('extra_equipment', function ($equipment) { ->addColumn('extra_equipment', function ($equipment) {
$firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first(); $firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first();
if ($firstEquipmentWorkHistory) { if ($firstEquipmentWorkHistory) {
@ -818,14 +801,78 @@ public function receiveDetailsEquipmentsProject(Request $request)
return 'N/A'; // Retorna 'N/A' se não houver registros na relação equipmentWorkHistory return 'N/A'; // Retorna 'N/A' se não houver registros na relação equipmentWorkHistory
}) })
// ->addColumn('status', function ($equipment) {
// // Pegue o primeiro equipmentWorkHistory do equipamento
// $firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first();
// if (!$firstEquipmentWorkHistory) {
// return 'N/A'; // Se não houver histórico de trabalho
// }
// // Pegue os valores de 'elemental_tasks_id' da tabela OrderEquipmentTasks com base no equipmentWorkHistorys_id
// $elementalTasks = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $firstEquipmentWorkHistory->equipmentWorkHistorys_id)
// ->pluck('elemental_tasks_id')
// ->toArray(); // Armazena todos os elemental_tasks_id em um array
// // Se não houver tarefas elementares, retorna '0 / 0'
// if (empty($elementalTasks)) {
// return '0 / 0';
// }
// // Busque correspondências na tabela control_equipment_workstation com base nos mesmos 'elemental_tasks_id'
// $correspondencias = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $firstEquipmentWorkHistory->equipmentWorkHistorys_id)
// ->whereIn('elemental_tasks_id', $elementalTasks) // Verifica as correspondências
// ->count(); // Conta quantas correspondências existem
// // Total de tarefas é o número de 'elemental_tasks_id' que encontramos na tabela OrderEquipmentTasks
// $totalDeTarefas = count($elementalTasks);
// // Retorne a string com o formato 'contador de tarefas / total de tarefas'
// return $correspondencias . ' / ' . $totalDeTarefas;
// })
->addColumn('status', function ($equipment) {
// Pegue o primeiro equipmentWorkHistory do equipamento
$firstEquipmentWorkHistory = $equipment->equipmentWorkHistory->first();
if (!$firstEquipmentWorkHistory) {
return 'N/A'; // Se não houver histórico de trabalho
}
// Pegue os valores de 'elemental_tasks_id' da tabela OrderEquipmentTasks com base no equipmentWorkHistorys_id
$elementalTasks = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $firstEquipmentWorkHistory->equipmentWorkHistorys_id)
->pluck('elemental_tasks_id')
->toArray(); // Armazena todos os elemental_tasks_id em um array
// Se não houver tarefas elementares, retorna '0 / 0'
if (empty($elementalTasks)) {
return '0 / 0';
}
// Busque correspondências na tabela control_equipment_workstation com base nos mesmos 'elemental_tasks_id',
// usando distinct para contar apenas valores únicos de 'elemental_tasks_id'
$correspondencias = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $firstEquipmentWorkHistory->equipmentWorkHistorys_id)
->whereIn('elemental_tasks_id', $elementalTasks) // Verifica as correspondências
->distinct('elemental_tasks_id') // Garante que só tarefas únicas sejam contadas
->count(); // Conta quantas correspondências existem
// Total de tarefas é o número de 'elemental_tasks_id' que encontramos na tabela OrderEquipmentTasks
$totalDeTarefas = count($elementalTasks);
// Retorne a string com o formato 'contador de tarefas / total de tarefas'
return $correspondencias . ' / ' . $totalDeTarefas;
})
->addColumn('action', function ($dataEquipment) use ($numberProject, $tableType) { ->addColumn('action', function ($dataEquipment) use ($numberProject, $tableType) {
$equipmentStatus = ($tableType === 'pending' ? 1 : ($tableType === 'completed' ? 2 : 0)); $equipmentStatus = ($tableType === 'pending' ? 1 : ($tableType === 'completed' ? 2 : 0));
$actionBtn = '<a title="Detalhes do equipamento" href="' . route('showAmbitDetailsProjectHistory', ['equipmentStatus' => $equipmentStatus, 'projectID' => $numberProject, 'equipmentID' => $dataEquipment->equipment_id]) . '"><i class="fa-solid fa-eye text-primary"></i></a>'; $actionBtn = '<a title="Detalhes do equipamento" href="' . route('showAmbitDetailsProjectHistory', ['equipmentStatus' => $equipmentStatus, 'projectID' => $numberProject, 'equipmentID' => $dataEquipment->equipment_id]) . '"><i class="fa-solid fa-eye text-primary"></i></a>';
return $actionBtn; return $actionBtn;
}) })
->make(true); ->make(true);
} }
} }

View File

@ -22,6 +22,7 @@
use Yajra\DataTables\Facades\DataTables; use Yajra\DataTables\Facades\DataTables;
use Carbon\Carbon;
use App\Models\Equipment; use App\Models\Equipment;
use App\Models\Plant; use App\Models\Plant;
@ -79,7 +80,7 @@ public function completedEquipmentInProject(Request $request)
OrderEquipmentTasks::whereIn('id', $tasksToDelete->pluck('id'))->delete(); OrderEquipmentTasks::whereIn('id', $tasksToDelete->pluck('id'))->delete();
} }
// Voltar home da Obra em execussao // Voltar home da Obra Em execução
return redirect()->route('ExecutionProject', ['projectID' => $equipmentHistoryDetails->company_projects_id]) return redirect()->route('ExecutionProject', ['projectID' => $equipmentHistoryDetails->company_projects_id])
->with('success', 'Equipamento ' . $equipmentHistoryDetails->equipment->equipment_tag . 'foi alterado para "Concluido"'); ->with('success', 'Equipamento ' . $equipmentHistoryDetails->equipment->equipment_tag . 'foi alterado para "Concluido"');
@ -143,8 +144,8 @@ public function createPDFforcompletedEquipment($equipmentId)
} else { } else {
// Caso não haja dados, defina datas nulas // Caso não haja dados, defina datas nulas
$oldestDate = null; $startDate = null;
$latestDate = null; $endDate = null;
} }
@ -169,7 +170,7 @@ public function createPDFforcompletedEquipment($equipmentId)
// Contador para a ordem dos âmbitos // Contador para a ordem dos âmbitos
$ambitCounter = 1; $ambitCounter = 1;
// Itera sobre cada âmbito anterior // Itera sobre cada âmbito anterior
foreach ($receiveAmbitHistory as $index => $ambitHistory) { foreach ($receiveAmbitHistory as $index => $ambitHistory) {
@ -181,7 +182,7 @@ public function createPDFforcompletedEquipment($equipmentId)
if ($tasksByAmbit->has($ambitId)) { if ($tasksByAmbit->has($ambitId)) {
$tasksForAmbit = $tasksByAmbit->get($ambitId); $tasksForAmbit = $tasksByAmbit->get($ambitId);
// Loop para associar a ultima tarefa feita de acordo com o ambito relacionado com ela.
foreach ($tasksForAmbit as $taskHistory) { foreach ($tasksForAmbit as $taskHistory) {
if ($ambitId == $latestAmbitHistory->history_of_equipment_ambits_id) { if ($ambitId == $latestAmbitHistory->history_of_equipment_ambits_id) {
@ -204,9 +205,17 @@ public function createPDFforcompletedEquipment($equipmentId)
} }
} }
// // Verifica se há um comentário associado e adiciona ao taskHistory
$workstationTaskAnswer = $taskHistory->workstationsTaskAnswers->first(); if ($taskHistory->taskEquipmentComment) {
$taskHistory->taskComment = $taskHistory->taskEquipmentComment->task_comment;
}
// else {
// $taskHistory->taskComment = 'N/A'; // Ou qualquer outro valor padrão caso não tenha comentário
// }
//recebe os dados do id da workstations_task_answers_id, control_equipment_workstation_id e as respostar : answer_json
$workstationTaskAnswer = $taskHistory->workstationsTaskAnswers->first();
if ($workstationTaskAnswer && $workstationTaskAnswer->answer_json) { if ($workstationTaskAnswer && $workstationTaskAnswer->answer_json) {
$answersArray = json_decode($workstationTaskAnswer->answer_json, true); $answersArray = json_decode($workstationTaskAnswer->answer_json, true);
@ -245,7 +254,9 @@ public function createPDFforcompletedEquipment($equipmentId)
// Define os caminhos das logos- Simbolo ISPT_4.0 // Define os caminhos das logos- Simbolo ISPT_4.0
$defaultLogoPath = '/img/ispt/4.0/Ispt4.0_Símbolo_Fundo_Azul-Marinho@2x-100.jpg'; // $defaultLogoPath = '/img/ispt/4.0/Ispt4.0_Símbolo_Fundo_Azul-Marinho@2x-100.jpg';
$defaultLogoPath = '/img/ispt/4.0/Ispt4.0_Símbolo_Fundo_Azul-Marinho@2x-8.png';
$isptLogoPath = '/img/ispt/ispt.jpg'; $isptLogoPath = '/img/ispt/ispt.jpg';
@ -279,6 +290,10 @@ public function createPDFforcompletedEquipment($equipmentId)
]); ]);
} }
} }
// dd($receiveDetailsProject);
//Deve devolver com Observacoes se existir.
//Precisamos receber o Tipo de equipamento e detalhes da Obra, alem do atributos especificos de acordo com o tipo de equipamento. //Precisamos receber o Tipo de equipamento e detalhes da Obra, alem do atributos especificos de acordo com o tipo de equipamento.
// Converte as imagens para base64 usando o serviço PdfWrapper // Converte as imagens para base64 usando o serviço PdfWrapper
$pdfWrapper = new PdfWrapper(); $pdfWrapper = new PdfWrapper();
@ -477,6 +492,13 @@ public function showAmbitDetailsProjectHistory($equipmentStatus, $projectID, $eq
$taskHistory->cardTypeStyle = 'gray'; // Adiciona o campo 'cardTypeStyle' $taskHistory->cardTypeStyle = 'gray'; // Adiciona o campo 'cardTypeStyle'
$taskHistory->typeStatusHistory = 'historic'; $taskHistory->typeStatusHistory = 'historic';
// Verifica se há um comentário associado e adiciona ao taskHistory
if ($taskHistory->taskEquipmentComment) {
$taskHistory->taskComment = $taskHistory->taskEquipmentComment->task_comment;
}
// 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();
@ -531,7 +553,7 @@ public function showAmbitDetailsProjectHistory($equipmentStatus, $projectID, $eq
$taskHistory->runtime = $diffInDays . ' dias ' . $remainingHours . ' horas'; $taskHistory->runtime = $diffInDays . ' dias ' . $remainingHours . ' horas';
} }
} else { } else {
$taskHistory->runtime = 'N/A'; // Ou qualquer valor padrão que você prefira $taskHistory->runtime = 'N/A'; // valor padrão
} }
// Adiciona o taskHistory à coleção principal // Adiciona o taskHistory à coleção principal
@ -583,10 +605,6 @@ public function showAmbitDetailsProjectHistory($equipmentStatus, $projectID, $eq
]); ]);
} }
// dd($receiveAllTasksHistiory);
//recebe normalmente, porem os checkbox nao conseguem buscar valor, execepto o ultimo dado.
return view('projectsClients.showAmbitDetailProjectHistory', compact('receiveComments', 'equipmentStatus', 'detailsProject', 'receiveAmbit', 'receiveAllTasksHistiory', 'detalsEquipment', 'detailsEquipmentWorkProject')); return view('projectsClients.showAmbitDetailProjectHistory', compact('receiveComments', 'equipmentStatus', 'detailsProject', 'receiveAmbit', 'receiveAllTasksHistiory', 'detalsEquipment', 'detailsEquipmentWorkProject'));
} }
@ -721,7 +739,6 @@ public function projectDetails_11($projectID, $equipmentID)
->where('company_projects_id', $projectID) ->where('company_projects_id', $projectID)
->first(); ->first();
$attributes = SpecificAttributesEquipmentType::where('equipment_id', $equipmentID)->get(); // recebe todos os atributos espesificos do equipamento $attributes = SpecificAttributesEquipmentType::where('equipment_id', $equipmentID)->get(); // recebe todos os atributos espesificos do equipamento
// $DetailsTasks = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistorys->equipmentWorkHistorys_id)->get(); // Todas as tarefas que o equipamento vai realizar : // $DetailsTasks = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistorys->equipmentWorkHistorys_id)->get(); // Todas as tarefas que o equipamento vai realizar :
@ -803,10 +820,11 @@ public function projectDetails_11($projectID, $equipmentID)
foreach ($specificAttributes as $attribute) { foreach ($specificAttributes as $attribute) {
$specificAttributesArray[$attribute->general_attributes_equipment_id] = $attribute->specific_attributes_value; $specificAttributesArray[$attribute->general_attributes_equipment_id] = $attribute->specific_attributes_value;
} }
// Cria um sistema de 1 a 3 , onde 1 e apenas 'ler', 2 apenas editar e 3 as 2 opcoes
$portfolioOnlyreadOrEditToo = 3;
//filteredTasks', 'OrdemTasks', 'DetailsTasks' campos vazios para ISV. //filteredTasks', 'OrdemTasks', 'DetailsTasks' campos vazios para ISV.
return view('projectsClients.articulated_2_ShowEquipment', compact('detailsProject', 'dataEquipment', 'filteredTasks', 'OrdemTasks', 'DetailsTasks', 'specificAttributesArray', 'receiveEquipmentWorkHistorys','portfolioOnlyreadOrEditToo'));
return view('projectsClients.articulated_2_ShowEquipment', compact('detailsProject', 'dataEquipment', 'filteredTasks', 'OrdemTasks', 'DetailsTasks', 'specificAttributesArray', 'receiveEquipmentWorkHistorys'));
} }
//Funcao que recebe a Acoes do dataTables do portifolio. //Funcao que recebe a Acoes do dataTables do portifolio.
@ -850,7 +868,10 @@ public function articulated_22($equipmentID)
$specificAttributesArray[$attribute->general_attributes_equipment_id] = $attribute->specific_attributes_value; $specificAttributesArray[$attribute->general_attributes_equipment_id] = $attribute->specific_attributes_value;
} }
return view('projectsClients.testRoute', compact('dataEquipment', 'receiveAlldetailsEquipmentWorkHistory', 'specificAttributesArray')); // Cria um sistema de 1 a 3 , onde 1 e apenas 'ler', 2 apenas editar e 3 as 2 opcoes
$portfolioOnlyreadOrEditToo = 3;
return view('projectsClients.testRoute', compact('dataEquipment', 'receiveAlldetailsEquipmentWorkHistory', 'specificAttributesArray', 'portfolioOnlyreadOrEditToo'));
} }

View File

@ -329,10 +329,10 @@ public function getEquipmentData($equipment_id, $component_tag)
// Busca os dados da Ws com base no Login // Busca os dados da Ws com base no Login
$receiveDataWs = ConstructionWorkstation::where('name_workstations', $userEmail->user_name)->first(); $receiveDataWs = ConstructionWorkstation::where('name_workstations', $userEmail->user_name)->first();
// Recebe os dados do Equipamento // Recebe os dados do Equipamento
$receiveDataEquipment = Equipment::where('equipment_id', $equipment_id)->first(); $dataEquipment = Equipment::where('equipment_id', $equipment_id)->first();
//Recebe os atributos especificos //Recebe os atributos especificos
$specificAttributes = SpecificAttributesEquipmentType::where('equipment_id', $receiveDataEquipment->equipment_id)->get(); $specificAttributes = SpecificAttributesEquipmentType::where('equipment_id', $dataEquipment->equipment_id)->get();
$specificAttributesArray = []; $specificAttributesArray = [];
@ -345,8 +345,8 @@ public function getEquipmentData($equipment_id, $component_tag)
// Busca os dados do equipamento // Busca os dados do equipamento
$receiveEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id', $receiveDataEquipment->equipment_id) $receiveEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id', $dataEquipment->equipment_id)
->where('company_projects_id', $receiveDataEquipment->company_projects_id) ->where('company_projects_id', $dataEquipment->company_projects_id)
->first(); ->first();
//Recebe os dados do Ambito para o equipamento atual //Recebe os dados do Ambito para o equipamento atual
@ -612,7 +612,7 @@ public function getEquipmentData($equipment_id, $component_tag)
$receiveComments = EquipmentComment::with(['user']) $receiveComments = EquipmentComment::with(['user'])
->where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id) ->where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)
->where('company_projects_id', $receiveDataEquipment->company_projects_id) ->where('company_projects_id', $dataEquipment->company_projects_id)
->get() ->get()
->transform(function ($comment) { ->transform(function ($comment) {
// Adiciona uma nova propriedade ao objeto de comentário // Adiciona uma nova propriedade ao objeto de comentário
@ -620,17 +620,21 @@ public function getEquipmentData($equipment_id, $component_tag)
return $comment; return $comment;
}); });
$receiveDataEquipment->istp_number = $receiveEquipmentWorkHistory->ispt_number; $dataEquipment->istp_number = $receiveEquipmentWorkHistory->ispt_number;
$receiveDataEquipment->equipment_ambit = $receiveAmbit->ambitsEquipment->ambits_description; $dataEquipment->equipment_ambit = $receiveAmbit->ambitsEquipment->ambits_description;
// Cria um sistema de 1 a 3 , onde 1 e apenas 'ler', 2 apenas editar e 3 as 2 opcoes
$portfolioOnlyreadOrEditToo = 3;
return view('workstations.workstations', [ return view('workstations.workstations', [
// Deve receber o atual COntrol ID ? tudo a vez que atualizar ?? // Deve receber o atual COntrol ID ? tudo a vez que atualizar ??
'receiveComments' => $receiveComments, 'receiveComments' => $receiveComments,
'dataControlEquipment' => $receiveDataControlEquipment, 'dataControlEquipment' => $receiveDataControlEquipment,
'receiveDataEquipment' => $receiveDataEquipment, 'dataEquipment' => $dataEquipment,
'specificAttributesArray' => $specificAttributesArray, 'specificAttributesArray' => $specificAttributesArray,
'recebeTasksForEquipment' => $recebeTasksForEquipment, 'recebeTasksForEquipment' => $recebeTasksForEquipment,
'receiveComponentTag' => $component_tag 'receiveComponentTag' => $component_tag,
'portfolioOnlyreadOrEditToo' => $portfolioOnlyreadOrEditToo,
// 'divisionElementalTasks' => $divisionElementalTasks, // 'divisionElementalTasks' => $divisionElementalTasks,
]); ]);
} }

View File

@ -54,10 +54,10 @@ protected function getAllowedRoutesForUserType($userType)
switch ($userType) { switch ($userType) {
case 5: // Técnico case 5: // Técnico
return ['enterWorkstation', 'getEquipmentData', 'receiveAnswersEquipment','sendTaskComment']; return ['enterWorkstation', 'getEquipmentData', 'receiveAnswersEquipment','sendTaskComment','editEquipment'];
case 3: // Empresa case 3: // Empresa
return ['dashboardClient','reportingDataClient', 'manageAssetsClient','usersProfiles', return ['dashboardClient','reportingDataClient', 'manageAssetsClient','usersProfiles',
// Obras em Execussao // Obras Em execução
'ExecutionProject', 'ExecutionProject',
//Relatorios //Relatorios
'showDataDetailsProjectClient','showReportingForAmbitsProject', 'showDataDetailsProjectClient','showReportingForAmbitsProject',

View File

@ -25,7 +25,7 @@ public function compose(View $view)
$equipmentToReview = collect(); // Coleção para armazenar equipamentos para revisão $equipmentToReview = collect(); // Coleção para armazenar equipamentos para revisão
$executionEquipment = collect();// Coleção para armazenar equipamentos em execussao $executionEquipment = collect();// Coleção para armazenar equipamentos Em execução
$completedEquipments = collect(); // Coleção para armazenar equipamentos concluídos $completedEquipments = collect(); // Coleção para armazenar equipamentos concluídos
// Verifica equipamentos que tenho 2 dados com o departure_date = NULL e especificamente um dado tem o elemental_tasks_id = 9 e o outro igual a NULL. // Verifica equipamentos que tenho 2 dados com o departure_date = NULL e especificamente um dado tem o elemental_tasks_id = 9 e o outro igual a NULL.
@ -129,8 +129,8 @@ public function compose(View $view)
// Se não houver registros, considera como valor 0 (nenhuma tarefa ativa) // Se não houver registros, considera como valor 0 (nenhuma tarefa ativa)
$equipmentStatus[$equipment->equipment_id] = 0; $equipmentStatus[$equipment->equipment_id] = 0;
} else { } else {
//Caso ja tenha dados sobre o equipamento no control, significa que ja e um equipamento 'Em execussao' //Caso ja tenha dados sobre o equipamento no control, significa que ja e um equipamento 'Em execução'
//Ao colocar aqui a adicao a execussao, ele apenas considera os equipamentos que estao em algum posto de trabalho, sem considerar as tarefas ja feitas. //Ao colocar aqui a adicao a execução, ele apenas considera os equipamentos que estao em algum posto de trabalho, sem considerar as tarefas ja feitas.
$executionEquipment->push($equipment); $executionEquipment->push($equipment);
//Deve verificar se o departure_date e NULL e o id_workstations <> null, e status = 0 //Deve verificar se o departure_date e NULL e o id_workstations <> null, e status = 0

View File

@ -27,6 +27,11 @@ public function equipmentWorkHistory()
return $this->belongsTo(EquipmentWorkHistory::class, 'equipmentWorkHistorys_id', 'equipmentWorkHistorys_id'); return $this->belongsTo(EquipmentWorkHistory::class, 'equipmentWorkHistorys_id', 'equipmentWorkHistorys_id');
} }
public function taskEquipmentComment()
{
return $this->belongsTo(TaskEquipmentComment::class, 'control_equipment_workstation_id', 'control_equipment_workstation_id');
}
public function elementalTask() public function elementalTask()
{ {
return $this->belongsTo(ElementalTasks::class, 'elemental_tasks_id', 'elemental_tasks_id'); return $this->belongsTo(ElementalTasks::class, 'elemental_tasks_id', 'elemental_tasks_id');

View File

@ -32,6 +32,12 @@ public function controlEquipmentWorkstation()
return $this->hasMany(ControlEquipmentWorkstation::class, 'equipmentWorkHistorys_id', 'equipmentWorkHistorys_id'); return $this->hasMany(ControlEquipmentWorkstation::class, 'equipmentWorkHistorys_id', 'equipmentWorkHistorys_id');
} }
public function OrderEquipmentTasks()
{
return $this->hasMany(OrderEquipmentTasks::class, 'equipmentWorkHistorys_id', 'equipmentWorkHistorys_id');
}
public function taskEquipmentComment() public function taskEquipmentComment()
{ {
return $this->hasMany(TaskEquipmentComment::class, 'equipmentWorkHistorys_id', 'equipmentWorkHistorys_id'); return $this->hasMany(TaskEquipmentComment::class, 'equipmentWorkHistorys_id', 'equipmentWorkHistorys_id');

View File

@ -24,6 +24,11 @@ public function elementalTask()
return $this->belongsTo(ElementalTasks::class,'elemental_tasks_id','elemental_tasks_id'); return $this->belongsTo(ElementalTasks::class,'elemental_tasks_id','elemental_tasks_id');
} }
public function equipmentWorkHistory()
{
return $this->belongsTo(EquipmentWorkHistory::class, 'equipmentWorkHistorys_id', 'equipmentWorkHistorys_id');
}
// public function furtherTasks() // public function furtherTasks()
// { // {
// return $this->belongsTo(FurtherTasks::class,'further_tasks_id','further_tasks_id'); // return $this->belongsTo(FurtherTasks::class,'further_tasks_id','further_tasks_id');

View File

@ -23,4 +23,9 @@ public function equipmentWorkHistory()
return $this->belongsTo(EquipmentWorkHistory::class, 'equipmentWorkHistorys_id', 'equipmentWorkHistorys_id'); return $this->belongsTo(EquipmentWorkHistory::class, 'equipmentWorkHistorys_id', 'equipmentWorkHistorys_id');
} }
public function controlEquipmentWorkstation()
{
return $this->belongsTo(ControlEquipmentWorkstation::class, 'control_equipment_workstation_id', 'control_equipment_workstation_id');
}
} }

View File

@ -70,7 +70,9 @@
| |
*/ */
'timezone' => 'UTC', // 'timezone' => 'UTC',
'timezone' => 'Europe/Lisbon',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
public/img/ispt/galpLogo1.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

View File

@ -35,6 +35,12 @@
<!-- summernote --> <!-- summernote -->
<link rel="stylesheet" href="{{ URL::asset('assets/plugins/summernote/summernote-bs4.min.css') }}"> <link rel="stylesheet" href="{{ URL::asset('assets/plugins/summernote/summernote-bs4.min.css') }}">
<!-- Bootstrap CSS -->
{{-- <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"> --}}
<!-- Bootstrap JS Bundle (inclui Popper) -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
<style> <style>
[class*=sidebar-dark] .btn-sidebar2, [class*=sidebar-dark] .btn-sidebar2,
[class*=sidebar-dark] .form-control-sidebar2 { [class*=sidebar-dark] .form-control-sidebar2 {
@ -144,14 +150,15 @@
<!-- User Dropdown Menu --> <!-- User Dropdown Menu -->
<li class="nav-item dropdown"> <li class="nav-item dropdown">
<a class="nav-link" data-toggle="dropdown" href="#"> <a class="nav-link" data-toggle="dropdown" href="#">
<img src="{{ URL::asset('assets/dist/img/ispt.jpg') }}" class="img-circle elevation-2" <img src="{{ URL::asset('assets/dist/img/ispt.jpg') }}" class="img-circle elevation-2"
alt="User Image" style="width:30px;height:30px;"> alt="User Image" style="width:30px;height:30px;">
</a> </a>
<div class="dropdown-menu dropdown-menu-right"> <div class="dropdown-menu dropdown-menu-right">
<div class="nav-link" style="color:#1f2d3d">{{ $receiveDataWs->nomenclature_workstation }}</div> <div class="nav-link" style="color:#1f2d3d">{{ $receiveDataWs->nomenclature_workstation }}
</div>
<form id="logout-form" action="{{ route('logout') }}" method="POST"> <form id="logout-form" action="{{ route('logout') }}" method="POST">
@csrf @csrf
@ -186,12 +193,11 @@ class="brand-image img-circle elevation-3" style="opacity: .8">
<!-- SidebarSearch Form --> <!-- SidebarSearch Form -->
<div class="form-inline"> <div class="form-inline">
<div class="input-group" data-widget="sidebar-search"> <div class="input-group" data-widget="sidebar-search">
<input id="qrtextleft" class="form-control form-control-sidebar text-white" type="search" <input id="qrtextleft" class="form-control form-control-sidebar text-white" type="search"
placeholder="Tag/Equipamento" aria-label="Search"> placeholder="Tag/Equipamento" aria-label="Search">
<div class="input-group-append"> <div class="input-group-append">
<button class="btn btn-sidebar"> <button class="btn btn-sidebar" onclick="triggerSearchFromInput()">
<i class="fas fa-search fa-fw text-white"></i> <i class="fas fa-search fa-fw text-white"></i>
</button> </button>
</div> </div>
@ -201,8 +207,8 @@ class="brand-image img-circle elevation-3" style="opacity: .8">
<!-- Sidebar Menu --> <!-- Sidebar Menu -->
<nav class="mt-5"> <nav class="mt-5">
<ul class="nav nav-pills nav-sidebar flex-column searchable" data-widget="treeview" role="menu" <ul class="nav nav-pills nav-sidebar flex-column searchable" data-widget="treeview"
data-accordion="false"> role="menu" data-accordion="false">
<!-- Por iniciar --> <!-- Por iniciar -->
<li class="nav-item has-treeview menu-closed"> <li class="nav-item has-treeview menu-closed">
@ -227,13 +233,13 @@ class="brand-image img-circle elevation-3" style="opacity: .8">
</ul> </ul>
</li> </li>
<!-- Em execussao --> <!-- Em execução -->
<li class="nav-item has-treeview menu-closed mt-1"> <li class="nav-item has-treeview menu-closed mt-1">
<a href="#" class="nav-link text-white" style="background-color: #1b4cad;"> <a href="#" class="nav-link text-white" style="background-color: #1b4cad;">
{{-- <i class="fa-solid fa-rotate-left"></i> --}} {{-- <i class="fa-solid fa-rotate-left"></i> --}}
<i class="fa-solid fa-hourglass-start"></i> <i class="fa-solid fa-hourglass-start"></i>
<p> <p>
Em execussao : {{ count($executionEquipment) }} Em execução : {{ count($executionEquipment) }}
<i class="right fas fa-angle-left"></i> <i class="right fas fa-angle-left"></i>
</p> </p>
</a> </a>
@ -302,14 +308,10 @@ class="brand-image img-circle elevation-3" style="opacity: .8">
<ul class="nav nav-pills nav-sidebar flex-column searchable" id="qrcode-equipment-list" <ul class="nav nav-pills nav-sidebar flex-column searchable" id="qrcode-equipment-list"
style="display: none;"> style="display: none;">
<!-- Add icons to the links using the .nav-icon class
with font-awesome or any other icon font library -->
<li class="nav-item menu-closed"> <li class="nav-item menu-closed">
<a href="#" class="nav-link text-white" style="background-color: #007BFF;"> <a href="#" class="nav-link text-white" style="background-color: #007BFF;">
<i class="nav-icon fas fa-play"></i> <i class="nav-icon fas fa-play"></i>
<p> {{ count($receiveQrcodeEquipmentsProject) }} <p> {{ count($receiveQrcodeEquipmentsProject) }} a iniciar QrCodes
a iniciar QrCodes
<i class="right fas fa-angle-left"></i> <i class="right fas fa-angle-left"></i>
</p> </p>
</a> </a>
@ -327,6 +329,7 @@ class="nav-link text-white">
</li> </li>
</ul> </ul>
</nav> </nav>
<!-- /.sidebar-menu --> <!-- /.sidebar-menu -->
@ -425,20 +428,34 @@ class="nav-link text-white">
<script> <script>
// Função para simular uma pesquisa manual ao escanear o QR Code
function simulateManualSearch(value) {
var searchInput = document.getElementById("qrtextleft"); // Campo de busca
searchInput.value = value; // Insere o valor do QR code no campo de busca
// Simula o evento de digitação no campo de busca para ativar o search
var event = new Event('input', {
bubbles: true,
cancelable: true,
});
searchInput.dispatchEvent(event);
}
// Função para realizar a busca e navegação (após a leitura do QR code ou busca manual)
function searchForValueAndNavigate(value, itemsSelector, containerSelector) { function searchForValueAndNavigate(value, itemsSelector, containerSelector) {
var searchQuery = value.toLowerCase(); var searchQuery = value.toLowerCase();
var found = false; // Variable to track if any item is found var found = false; // Variável para verificar se encontrou o item
$(itemsSelector).each(function() { $(itemsSelector).each(function() {
var itemText = $(this).text().toLowerCase(); var itemText = $(this).text().toLowerCase();
if (itemText.includes(searchQuery)) { if (itemText.includes(searchQuery)) {
found = true; found = true;
window.location.href = $(this).attr('href'); window.location.href = $(this).attr('href'); // Navegar para a URL correspondente
return false; // Exit the .each loop after attempting navigation return false; // Sair do loop após encontrar a correspondência
} }
}); });
// If no item is found, change the class of <li> elements // Se não encontrar correspondência, fecha os itens abertos
if (!found) { if (!found) {
$(containerSelector + ' .nav-item.menu-open').each(function() { $(containerSelector + ' .nav-item.menu-open').each(function() {
$(this).removeClass('menu-open').addClass('menu-closed'); $(this).removeClass('menu-open').addClass('menu-closed');
@ -446,14 +463,107 @@ function searchForValueAndNavigate(value, itemsSelector, containerSelector) {
} }
} }
// Função de busca manual por input (usada no botão de busca)
function triggerSearchFromInput() {
let searchInput = document.getElementById("qrtextleft").value;
searchForValueAndNavigate(searchInput, '#qrcode-equipment-list li a', '#qrcode-equipment-list');
}
// Configuração do QR Code Scanner
let scanner = new Html5Qrcode("reader"); let scanner = new Html5Qrcode("reader");
let startScan = document.getElementById("startScan"); let startScan = document.getElementById("startScan");
let reader = document.getElementById("reader"); let reader = document.getElementById("reader");
let qrtextleft = document.getElementById("qrtextleft");
let qrtextright = document.getElementById("qrtextright");
startScan.addEventListener('click', function() { startScan.addEventListener('click', function() {
// Hiding the startScan button and showing the reader // Esconde o botão de início e exibe o leitor de QR Code
startScan.style.display = "none";
reader.style.display = "block";
scanner.start({
facingMode: "environment"
}, {
fps: 20,
qrbox: {
width: 250,
height: 250
}
},
function(qrCodeMessage) {
// Ao escanear o QR Code, simula a pesquisa
scanner.stop().then(() => {
simulateManualSearch(
qrCodeMessage); // Preenche o campo de busca e simula a digitação
reader.style.display = "none";
startScan.style.display = "block";
// Aciona a navegação automática se encontrar o valor correspondente
searchForValueAndNavigate(qrCodeMessage, '#qrcode-equipment-list li a',
'#qrcode-equipment-list');
});
},
function(errorMessage) {
// Em caso de erro no scan
console.log(errorMessage);
})
.catch(err => {
console.log(err);
});
});
// Função para lidar com a pesquisa no campo de input e exibir resultados dinamicamente
function handleSearch(inputSelector, itemsSelector, containerSelector) {
$(inputSelector).on('keyup', function() {
var searchQuery = $(this).val().toLowerCase();
var found = false; // Variável para verificar se encontrou algum item
$(itemsSelector).each(function() {
var itemText = $(this).text().toLowerCase();
if (itemText.includes(searchQuery)) {
$(this).show();
found = true;
} else {
$(this).hide();
}
});
// Altera a classe dos itens <li> quando o item é encontrado ou não
if (found) {
$(containerSelector + ' .nav-item.menu-closed').each(function() {
$(this).removeClass('menu-closed').addClass('menu-open');
});
} else {
$(containerSelector + ' .nav-item.menu-open').each(function() {
$(this).removeClass('menu-open').addClass('menu-closed');
});
}
});
}
// Aplicando a funcionalidade de pesquisa ao campo de pesquisa principal
handleSearch('#qrtextleft', '.searchable .nav.nav-pills.nav-sidebar.flex-column li.tags', '.searchable');
</script>
{{-- <script>
function simulateManualSearch(value) {
var searchInput = document.getElementById("qrtextleft"); // O campo de busca
searchInput.value = value; // Insere o valor do QR code no campo de busca
// Simula o evento de digitação no campo de busca para ativar o search
var event = new Event('input', {
bubbles: true,
cancelable: true,
});
searchInput.dispatchEvent(event);
}
let scanner = new Html5Qrcode("reader");
let startScan = document.getElementById("startScan");
let reader = document.getElementById("reader");
startScan.addEventListener('click', function() {
// Hide the startScan button and show the reader
startScan.style.display = "none"; startScan.style.display = "none";
reader.style.display = "block"; reader.style.display = "block";
@ -469,26 +579,18 @@ function searchForValueAndNavigate(value, itemsSelector, containerSelector) {
function(qrCodeMessage) { function(qrCodeMessage) {
// This is called when a QR Code is scanned // This is called when a QR Code is scanned
// Suppress every text in front of "@" including it
scanner.stop().then(() => { scanner.stop().then(() => {
qrtextleft.value = qrCodeMessage; // Simula a digitação manual com o valor do QR code
qrtextright.value = qrCodeMessage; simulateManualSearch(qrCodeMessage);
reader.style.display = "none"; reader.style.display = "none";
startScan.style.display = "block"; startScan.style.display = "block";
// Trigger the search functionality for both sidebars
searchForValueAndNavigate(qrCodeMessage,
'#qrcode-equipment-list li a',
'#qrcode-equipment-list');
}); });
}, },
function(errorMessage) { function(errorMessage) {
// In case of errors // In case of errors
console.log(errorMessage); console.log(errorMessage);
} })
)
.catch(err => { .catch(err => {
console.log(err); console.log(err);
}); });
@ -497,188 +599,80 @@ function(errorMessage) {
<script> <script>
document.addEventListener('DOMContentLoaded', function() { // Função para realizar a busca e navegação
let scannerCheck = new Html5Qrcode("readerUnique"); function searchForValueAndNavigate(value, itemsSelector, containerSelector) {
let startScanCheck = document.getElementById("startScanUnique"); var searchQuery = value.toLowerCase();
let readerCheck = document.getElementById("readerUnique"); var found = false;
let ModalForConfirmManual = document.getElementById('exampleModalSmall');
const btnConfirmManual = document.getElementById('btnConfirmManual');
let currentFormId = ''; // Variável global para armazenar o ID do formulário ativo $(itemsSelector).each(function() {
var itemText = $(this).text().toLowerCase();
// Captura cliques em botões que abrem a primeira modal e extrai o ID do formulário if (itemText.includes(searchQuery)) {
document.querySelectorAll('[data-toggle="modal"]').forEach(button => { found = true;
button.addEventListener('click', function() { window.location.href = $(this).attr('href'); // Navegar para a URL correspondente
if (this.dataset.target === return false; // Sair do loop após encontrar a correspondência
"#exampleModal") { // Verifica se o botão abre a primeira modal }
currentFormId = this.getAttribute('data-form-id');
console.log(`Current Form ID: ${currentFormId}`);
}
});
}); });
// Evento de clique para iniciar a leitura do QR Code // Se não encontrar correspondência, fecha os itens abertos
startScanCheck.addEventListener('click', function() { if (!found) {
startScanCheck.style.display = "none"; $(containerSelector + ' .nav-item.menu-open').each(function() {
readerCheck.style.display = "block"; $(this).removeClass('menu-open').addClass('menu-closed');
});
}
}
// Inicia o scanner de QR Code com configurações específicas // Função de busca manual por input
scannerCheck.start({ function triggerSearchFromInput() {
facingMode: "environment" // Usa a câmera traseira let searchInput = document.getElementById("searchInput").value;
searchForValueAndNavigate(searchInput, '#qrcode-equipment-list li a', '#qrcode-equipment-list');
}
// Configuração do QR Code Scanner
let scanner = new Html5Qrcode("reader");
let startScan = document.getElementById("startScan");
let reader = document.getElementById("reader");
let qrtextleft = document.getElementById("qrtextleft");
startScan.addEventListener('click', function() {
// Esconder o botão de início e mostrar o leitor
startScan.style.display = "none";
reader.style.display = "block";
scanner.start({
facingMode: "environment"
}, { }, {
fps: 10, fps: 20,
qrbox: 250 qrbox: {
}, function(qrCodeMessage) { width: 250,
// Chamada quando um QR Code é detectado height: 250
processQRCode(qrCodeMessage, currentFormId);
// startScan(currentFormId); // Inicia a leitura com base no formulário ativo
});
});
function processQRCode(qrCodeMessage, currentFormId) {
scannerCheck.stop().then(() => {
// Separa o valor do QR code.
const parts = qrCodeMessage.split('@');
const valor = parts[0];
const componente = parts[1];
//verica se existe $receiveComponentTag e se nao e vazio, se nao for separa a varaivel e guarda o valor antes do @
@if (isset($receiveComponentTag) && !empty($receiveComponentTag))
var expectedTag = "{{ $receiveComponentTag }}".split('@');
@endif
//Verifica se o form atual espera receber o valor : Obturador ou Flange
const expectedComponente = (currentFormId == "form10") ? "Obturador" : "Flange";
const expectedValor = expectedTag[0];
let receiveValueValidateQRcode; //
// Seleciona os elementos específicos do formulário ativo.
const formSelector = `#${currentFormId}`;
const qrCodeError = document.querySelector(`${formSelector} #qrCodeError`);
const qrCodeErrorText = document.querySelector(`${formSelector} #qrCodeErrorText`);
const verificationStatusP = document.querySelector(
`${formSelector} #verificationStatus`);
const confirmCheckbox = document.querySelector(
`${formSelector} input[name^='ID'][name$='[confirm_label_compliance-checkbox]']`
);
// const btnConfirmManual = document.getElementById('btnConfirmManual');
// Processa a leitura do QR Code.
if (valor == expectedValor && componente == expectedComponente) {
receiveValueValidateQRcode = 1; // Atualiza para 1 (confirmado).
verificationStatusP.textContent = 'Verificado com sucesso !!!';
verificationStatusP.style.color = 'green';
$('#exampleModal').modal('hide'); // Fecha a modal após confirmação.
qrCodeError.style.display = 'none';
} else {
$('#exampleModal').modal('hide'); // Fecha a modal após confirmação.
verificationStatusP.textContent =
'Tags não correspondem ao mesmo equipamento, tente novamente com a Tag correta !!!';
verificationStatusP.style.color = 'red';
qrCodeErrorText.textContent =
`QR Lido: ${valor}@${componente} ||| Esperado: ${expectedValor}@${expectedComponente}`;
qrCodeErrorText.style.color = 'red';
qrCodeError.style.display = 'block';
} }
// Apos finalizar a leitura, deve voltar a poder utilizar a leitura do QrCode se necessario. },
readerCheck.style.display = "none"; function(qrCodeMessage) {
startScanCheck.style.display = "block"; // Ao escanear o QR Code
// Atualiza o valor do input no formulário com o resultado da verificação. scanner.stop().then(() => {
confirmCheckbox.value = receiveValueValidateQRcode; qrtextleft.value = qrCodeMessage; // Preenche o campo com o valor escaneado
reader.style.display = "none";
startScan.style.display = "block";
// Ajusta o estado do botão de submit com base no resultado da verificação. // Aciona a busca automaticamente
const submitButton = document.querySelector( searchForValueAndNavigate(qrCodeMessage, '#qrcode-equipment-list li a',
`${formSelector} #checkValidateQrCode`); // Ajuste o seletor conforme necessário. '#qrcode-equipment-list');
});
console.log(submitButton); },
function(errorMessage) {
submitButton.disabled = receiveValueValidateQRcode !== 1; // Em caso de erro no scan
}); console.log(errorMessage);
} }
).catch(err => {
console.log(err);
// Configura o evento de clique para o botão que para a leitura do QR Code
document.getElementById('stopQrcodeRead').addEventListener('click', function() {
// Para o scanner de QR Code e executa ações de limpeza da interface
stopScan(currentFormId);
}); });
//Função para parar a leitura do QR Code e limpar a interface
function stopScan(currentFormId) {
scannerCheck.stop().then(() => {
readerCheck.style.display = "none";
startScanCheck.style.display = "block";
//Recebe o form atual
const formSelector = `#${currentFormId}`;
const qrCodeError = document.querySelector(`${formSelector} #qrCodeError`);
const verificationStatusP = document.querySelector(
`${formSelector} #verificationStatus`);
//De acordo com o form atual, devolve o nome do input referente ao numero do form atual
const confirmCheckbox = document.querySelector(
`${formSelector} input[name^='ID'][name$='[confirm_label_compliance-checkbox]']`
);
});
}
// Tratar equipamentos feitos Manualmente.
// Adiciona listener para quando o botão da segunda modal for clicado
document.querySelector('[data-toggle="modal"][data-target="#exampleModalSmall"]').addEventListener(
'click',
function() {
// Aqui você garante que o currentFormId ainda esteja correto e pode fazer o que precisar antes de abrir a segunda modal
console.log(`Passing Current Form ID to second modal: ${currentFormId}`);
});
btnConfirmManual.addEventListener('click', function() {
// Agora, currentFormId deve estar correto e acessível aqui
confirmManually(currentFormId);
});
function confirmManually(formId) {
const formSelector = `#${formId}`;
// Operações baseadas no formId...
console.log(`Manual Confirmation for Form ID: ${formId}`);
const confirmCheckbox = document.querySelector(
`${formSelector} input[name^='ID'][name$='[confirm_label_compliance-checkbox]']`);
// Define 'receiveValueValidateQRcode' para 0.
let receiveValueValidateQRcode = 0;
confirmCheckbox.value =
receiveValueValidateQRcode; // Atualiza o valor do checkbox para refletir a confirmação manual.
const verificationStatusP = document.querySelector(`${formSelector} #verificationStatus`);
verificationStatusP.textContent = 'Etiquetas confirmadas manualmente';
verificationStatusP.style.color = 'orange'; // Altera a cor do texto conforme necessário.
// Ajusta o estado do botão de submit com base no resultado da verificação.
const submitButton = document.querySelector(`${formSelector} #checkValidateQrCode`);
submitButton.disabled = receiveValueValidateQRcode !== 0;
$('#exampleModalSmall').modal('hide'); // Fecha a segunda modal.
$('#exampleModal').modal('hide'); // Fecha a primeira modal.
// Para o scanner de QR Code (se necessário)
scannerCheck.stop().then(() => {
// Esconde o leitor de QR Code e mostra o botão para iniciar a leitura
readerCheck.style.display = "none";
startScanCheck.style.display = "block";
// Fecha modais após confirmação
});
}
}); });
</script> </script>
<script> <script>
$(document).ready(function() { $(document).ready(function() {
$(document).on('click', '[data-widget="control-treeview"] .nav-link', function(event) { $(document).on('click', '[data-widget="control-treeview"] .nav-link', function(event) {
@ -749,7 +743,7 @@ function handleSearch(inputSelector, itemsSelector, containerSelector) {
// Apply the search functionality for the control sidebar // Apply the search functionality for the control sidebar
// handleSearch('#qrtextright', '.control-sidebar .nav.nav-pills.nav-sidebar.flex-column li', '.control-sidebar'); // handleSearch('#qrtextright', '.control-sidebar .nav.nav-pills.nav-sidebar.flex-column li', '.control-sidebar');
</script> </script> --}}

View File

@ -66,9 +66,33 @@
<div class="card-body"> <div class="card-body">
<div class="form-group"> <div class="form-group">
<input type="hidden" name="controlEquipmentID" <input type="hidden" name="controlEquipmentID"
value="{{ $receiveDataControlEquipment->control_equipment_workstation_id ?? '' }}"> value="{{ $receiveDataControlEquipment->control_equipment_workstation_id ?? '' }}">
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable">
<div class="d-flex justify-content-between align-items-center"
style="width: 100%;">
<h3 class="card-title">Observações</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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="4" placeholder="Escreva sua observação aqui..." readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<!-- Conformidade da etiqueta --> <!-- Conformidade da etiqueta -->
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6 icheck-primary"> <div class="col-md-6 icheck-primary">
@ -294,6 +318,29 @@ class="form-control ml-2" style="width: 40%;" placeholder=""
<div class="form-group"> <div class="form-group">
<!-- Single form-group for all content --> <!-- Single form-group for all content -->
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable">
<div class="d-flex justify-content-between align-items-center"
style="width: 100%;">
<h3 class="card-title">Observações</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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="4" placeholder="Escreva sua observação aqui..." readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<!-- Identificação da válvula em bom estado --> <!-- Identificação da válvula em bom estado -->
<div class="row mt-3"> <div class="row mt-3">
<div class="col-md-6"> <div class="col-md-6">
@ -638,6 +685,30 @@ class="form-control select2" style="width: 100%;"
<input type="hidden" name="controlEquipmentID" <input type="hidden" name="controlEquipmentID"
value="{{ $receiveDataControlEquipment->control_equipment_workstation_id ?? '' }}"> value="{{ $receiveDataControlEquipment->control_equipment_workstation_id ?? '' }}">
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable">
<div class="d-flex justify-content-between align-items-center"
style="width: 100%;">
<h3 class="card-title">Observações</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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="4" placeholder="Escreva sua observação aqui..." readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<!-- Decontamination --> <!-- Decontamination -->
<div class="row mb-3 mt-4"> <div class="row mb-3 mt-4">
<div class="col-md-6 d-flex align-items-center"> <div class="col-md-6 d-flex align-items-center">
@ -766,6 +837,29 @@ class="form-control select2" style="width: 100%;"
<div class="card-body"> <div class="card-body">
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable">
<div class="d-flex justify-content-between align-items-center"
style="width: 100%;">
<h3 class="card-title">Observações</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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="4" placeholder="Escreva sua observação aqui..." readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<div class="form-group"> <!-- Single form-group for all content --> <div class="form-group"> <!-- Single form-group for all content -->
<div class="row"> <div class="row">
@ -1275,6 +1369,29 @@ class="form-control" @if ($task_todo->cardTypeStyle == 'gray' || $task_todo->car
<div class="form-group"> <!-- Single form-group for all content --> <div class="form-group"> <!-- Single form-group for all content -->
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable" style="background-color:gray;color:white;">
<div class="d-flex justify-content-between align-items-center"
style="width: 70%">
<h5 class="card-title" >Observações</h5>
<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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="2" placeholder="Escreva sua observação aqui..." disabled readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<div class="row"> <div class="row">
<!-- First card column --> <!-- First card column -->
@ -1763,6 +1880,29 @@ class="form-control" @if ($task_todo->cardTypeStyle == 'gray' || $task_todo->car
<div class="form-group"> <div class="form-group">
<!-- Single form-group for all content --> <!-- Single form-group for all content -->
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable" style="background-color:gray;color:white;">
<div class="d-flex justify-content-between align-items-center"
style="width: 70%">
<h5 class="card-title" >Observações</h5>
<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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="2" placeholder="Escreva sua observação aqui..." disabled readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<div class="row"> <div class="row">
<!-- First card column --> <!-- First card column -->
@ -2196,6 +2336,29 @@ class="form-control select2" style="width: 100%;"
<!-- Single form-group for all content --> <!-- Single form-group for all content -->
<div class="form-group"> <div class="form-group">
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable" style="background-color:gray;color:white;">
<div class="d-flex justify-content-between align-items-center"
style="width: 70%">
<h5 class="card-title" >Observações</h5>
<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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="2" placeholder="Escreva sua observação aqui..." disabled readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<div class="row"> <div class="row">
<button data-form-id type="button" class="btn btn-primary float-left mb-3" <button data-form-id type="button" class="btn btn-primary float-left mb-3"
data-toggle="modal" data-target="#AddPhoneInElementalTaskModal"> data-toggle="modal" data-target="#AddPhoneInElementalTaskModal">
@ -2809,6 +2972,29 @@ class="form-control" @if ($task_todo->cardTypeStyle == 'gray' || $task_todo->car
<div class="form-group"> <div class="form-group">
<!-- Single form-group for all content --> <!-- Single form-group for all content -->
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable" style="background-color:gray;color:white;">
<div class="d-flex justify-content-between align-items-center"
style="width: 70%">
<h5 class="card-title" >Observações</h5>
<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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="2" placeholder="Escreva sua observação aqui..." disabled readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<div class="row"> <div class="row">
<!-- First card column --> <!-- First card column -->
@ -3158,6 +3344,29 @@ class="form-control select2"
<div class="form-group"> <div class="form-group">
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable" style="background-color:gray;color:white;">
<div class="d-flex justify-content-between align-items-center"
style="width: 70%">
<h5 class="card-title" >Observações</h5>
<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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="2" placeholder="Escreva sua observação aqui..." disabled readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<!-- Executado --> <!-- Executado -->
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md d-flex align-items-center"> <div class="col-md d-flex align-items-center">
@ -3277,6 +3486,29 @@ class="form-control" required @if ($task_todo->cardTypeStyle == 'gray' || $task_
<div class="form-group"> <div class="form-group">
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable" style="background-color:gray;color:white;">
<div class="d-flex justify-content-between align-items-center"
style="width: 70%">
<h5 class="card-title" >Observações</h5>
<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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="2" placeholder="Escreva sua observação aqui..." disabled readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<!-- Single form-group for all content --> <!-- Single form-group for all content -->
<div class="row mb-3 mt-3 col-md-12"> <div class="row mb-3 mt-3 col-md-12">
<label>Sede</label> <label>Sede</label>
@ -3415,6 +3647,29 @@ class="img-fluid pdf-image mx-auto"
<div class="card-body"> <div class="card-body">
<div class="form-group"> <div class="form-group">
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable" style="background-color:gray;color:white;">
<div class="d-flex justify-content-between align-items-center"
style="width: 70%">
<h5 class="card-title" >Observações</h5>
<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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="2" placeholder="Escreva sua observação aqui..." disabled readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<input id="inputReceiveErrors" class="confirm_component_joints-boolean" type="hidden" <input id="inputReceiveErrors" class="confirm_component_joints-boolean" type="hidden"
name="ID10[confirm_label_compliance-checkbox]"> name="ID10[confirm_label_compliance-checkbox]">
@ -3681,6 +3936,29 @@ class="form-control select2" @if ($task_todo->cardTypeStyle == 'gray' || $task_t
<div class="card-body"> <div class="card-body">
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable">
<div class="d-flex justify-content-between align-items-center"
style="width: 100%;">
<h3 class="card-title">Observações</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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="4" placeholder="Escreva sua observação aqui..." readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<div class="form-group"> <div class="form-group">
<!-- Single form-group for all content --> <!-- Single form-group for all content -->
@ -4754,6 +5032,29 @@ class="img-fluid pdf-image mx-auto"
<div class="form-group"> <div class="form-group">
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable" style="background-color:gray;color:white;">
<div class="d-flex justify-content-between align-items-center"
style="width: 70%">
<h5 class="card-title" >Observações</h5>
<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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="2" placeholder="Escreva sua observação aqui..." disabled readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<!-- Single form-group for all content --> <!-- Single form-group for all content -->
<div class="row"> <div class="row">
@ -5245,6 +5546,29 @@ class="img-fluid pdf-image mx-auto"
<div class="form-group"> <div class="form-group">
<!-- Single form-group for all content --> <!-- Single form-group for all content -->
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable" style="background-color:gray;color:white;">
<div class="d-flex justify-content-between align-items-center"
style="width: 70%">
<h5 class="card-title" >Observações</h5>
<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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="2" placeholder="Escreva sua observação aqui..." disabled readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<!-- Data calibração --> <!-- Data calibração -->
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6"> <div class="col-md-6">
@ -5475,6 +5799,30 @@ class="img-fluid pdf-image mx-auto"
<!-- Single form-group for all content --> <!-- Single form-group for all content -->
<div class="form-group"> <div class="form-group">
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable" style="background-color:gray;color:white;">
<div class="d-flex justify-content-between align-items-center"
style="width: 70%">
<h5 class="card-title" >Observações</h5>
<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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="2" placeholder="Escreva sua observação aqui..." disabled readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<!-- Executado --> <!-- Executado -->
<div class="row mb-3 mt-3"> <div class="row mb-3 mt-3">
<div class="col-md-6 d-flex align-items-center"> <div class="col-md-6 d-flex align-items-center">
@ -5590,6 +5938,30 @@ class="img-fluid pdf-image mx-auto"
<div class="card-body"> <div class="card-body">
<div class="form-group"> <div class="form-group">
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable" style="background-color:gray;color:white;">
<div class="d-flex justify-content-between align-items-center"
style="width: 70%">
<h5 class="card-title" >Observações</h5>
<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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="2" placeholder="Escreva sua observação aqui..." disabled readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<input type="hidden" name="controlEquipmentID" <input type="hidden" name="controlEquipmentID"
value="{{ $receiveDataControlEquipment->control_equipment_workstation_id ?? '' }}"> value="{{ $receiveDataControlEquipment->control_equipment_workstation_id ?? '' }}">
@ -5718,6 +6090,29 @@ class="form-control select2" style="width: 100%;"
<div class="form-group"> <div class="form-group">
<!-- Single form-group for all content --> <!-- Single form-group for all content -->
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable" style="background-color:gray;color:white;">
<div class="d-flex justify-content-between align-items-center"
style="width: 70%">
<h5 class="card-title" >Observações</h5>
<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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="2" placeholder="Escreva sua observação aqui..." disabled readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<!-- Tipo de junta --> <!-- Tipo de junta -->
<div class="row mt-2"> <div class="row mt-2">
<div class="col-md-6"> <div class="col-md-6">
@ -5813,6 +6208,29 @@ class="form-control select2" style="width: 100%;"
<div class="form-group"> <div class="form-group">
<!-- Verificar o aperto das flanges --> <!-- Verificar o aperto das flanges -->
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable" style="background-color:gray;color:white;">
<div class="d-flex justify-content-between align-items-center"
style="width: 70%">
<h5 class="card-title" >Observações</h5>
<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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="2" placeholder="Escreva sua observação aqui..." disabled readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<div class="row mb-3"> <div class="row mb-3">
<div class="col-md-6 icheck-primary"> <div class="col-md-6 icheck-primary">
<input id="ID17[check_flanges_tightness]" type="checkbox" <input id="ID17[check_flanges_tightness]" type="checkbox"
@ -5942,6 +6360,29 @@ class="img-fluid pdf-image mx-auto"
<div class="form-group"> <div class="form-group">
<!-- Single form-group for all content --> <!-- Single form-group for all content -->
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable" style="background-color:gray;color:white;">
<div class="d-flex justify-content-between align-items-center"
style="width: 70%">
<h5 class="card-title" >Observações</h5>
<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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="2" placeholder="Escreva sua observação aqui..." disabled readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<div class="row"> <div class="row">
<!-- First card column --> <!-- First card column -->
@ -6407,6 +6848,29 @@ class="img-fluid pdf-image mx-auto"
<div class="form-group"> <div class="form-group">
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable" style="background-color:gray;color:white;">
<div class="d-flex justify-content-between align-items-center"
style="width: 70%">
<h5 class="card-title" >Observações</h5>
<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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="2" placeholder="Escreva sua observação aqui..." disabled readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<!-- Foi efetuado o teste de acordo com o API RP 598 --> <!-- Foi efetuado o teste de acordo com o API RP 598 -->
<div class="row mb-2"> <div class="row mb-2">
<div class="col-md-6"> <div class="col-md-6">
@ -6592,6 +7056,29 @@ class="btn btn-primary float-right">Guardar</button>
<div class="form-group"> <!-- Single form-group for all content --> <div class="form-group"> <!-- Single form-group for all content -->
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable" style="background-color:gray;color:white;">
<div class="d-flex justify-content-between align-items-center"
style="width: 70%">
<h5 class="card-title" >Observações</h5>
<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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="2" placeholder="Escreva sua observação aqui..." disabled readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<!-- Validar especificações técnicas --> <!-- Validar especificações técnicas -->
<div class="row mb-3"> <div class="row mb-3">
<div class="icheck-primary"> <div class="icheck-primary">
@ -6791,6 +7278,29 @@ class="form-control" placeholder=""
<div class="card-body"> <div class="card-body">
<div class="form-group"> <!-- Single form-group for all content --> <div class="form-group"> <!-- Single form-group for all content -->
<!-- Apenas se existir o $task_todo->taskComment deve mostrar -->
@if (isset($task_todo->taskComment) && $task_todo->taskComment)
<!-- Criar Observaoces a Tarefa atual do equipamento -->
<div class="card card-success collapsed-card">
<div class="card-header clickable" style="background-color:gray;color:white;">
<div class="d-flex justify-content-between align-items-center"
style="width: 70%">
<h5 class="card-title" >Observações</h5>
<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>
</div>
<div class="card-body">
<!-- Novo formulário para comentários -->
<textarea name="comment" id="comment" class="form-control" rows="2" placeholder="Escreva sua observação aqui..." disabled readonly>{{ $task_todo->taskComment }}</textarea>
</div>
</div>
<!-- ./Criar Observaoces a Tarefa atual do equipamento -->
@endif
<input type="hidden" name="controlEquipmentID" <input type="hidden" name="controlEquipmentID"
value="{{ $receiveDataControlEquipment->control_equipment_workstation_id ?? '' }}"> value="{{ $receiveDataControlEquipment->control_equipment_workstation_id ?? '' }}">

File diff suppressed because it is too large Load Diff

View File

@ -1,92 +0,0 @@
<!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 5px; */
}
</style>
</head>
<body>
{{-- <div class="container">
<header class="mb-3">
@include(
'projectsClients.pdf._header',
compact('tag', 'numeroPanini', 'nObra', 'ambito', 'projectLogoPath', 'companyLogoPath'))
</header>
<div>
{{ $slot }}
</div>
<!-- <footer>
@include('projectsClients.pdf._footer', ['pageCounter' => $pageCounter])
@include('projectsClients.pdf._footer')
</footer> -->
</div> --}}
<div class="container">
<!-- Conteúdo específico da primeira página -->
{{-- <div class="first-page"> --}}
@yield('firstPage')
<!-- Conteúdo para o restante das páginas -->
{{-- <div class="loop-pages">
@yield('loopPages')
</div> --}}
</div>
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -104,9 +104,10 @@
@if ((auth()->user() && auth()->user()->type_users == 2) || (auth()->user() && auth()->user()->type_users == 1)) @if ((auth()->user() && auth()->user()->type_users == 2) || (auth()->user() && auth()->user()->type_users == 1))
<div class="row m-3 justify-content-between"> <div class="row m-3 justify-content-between">
<div> <div>
<button class="btn btn-info" data-toggle="modal" data-target="#exampleModal">Adicionar <button class="btn btn-info" data-toggle="modal"
equipamentos Extras</button> data-target="#exampleModal">Adicionar
</div> equipamentos Extras</button>
</div>
<div> <div>
<a href="{{ route('showQrcodesInProject', ['projectNumber' => $DatasProject->company_projects_id]) }}" <a href="{{ route('showQrcodesInProject', ['projectNumber' => $DatasProject->company_projects_id]) }}"
@ -165,7 +166,36 @@ class="btn btn-danger">Imprimir Qrcodes</a>
<div class="card-body"> <div class="card-body">
@if ((auth()->user() && auth()->user()->type_users == 2) || (auth()->user() && auth()->user()->type_users == 1)) @if ((auth()->user() && auth()->user()->type_users == 2) || (auth()->user() && auth()->user()->type_users == 1))
{{-- Faça algo específico para esse tipo de usuário --}} <div class="card card-info mt-4">
<div class="card-header">
<h3 class="card-title">Lista de equipamentos da Obra - Por iniciar</h3>
</div>
<!-- /.card-header -->
<div class="card-body">
<table id="TableListEquipmentInProjectForInit"
class="table table-bordered table-striped">
<thead>
<tr>
<th>N.Ispt</th>
<th>Tag</th>
<th>Descrição</th>
<th>Tipo Equipamento</th>
<th>Fabrica</th>
<th>Equipamento Extra</th>
<th>Âmbito</th>
<th>status</th>
<th>Ação</th>
</tr>
</thead>
</table>
</div>
</div>
<!-- ./card card-info -->
<div class="card card-info mt-4"> <div class="card card-info mt-4">
<div class="card-header"> <div class="card-header">
@ -178,12 +208,14 @@ class="btn btn-danger">Imprimir Qrcodes</a>
<table id="TableListEquipmentInProject" class="table table-bordered table-striped"> <table id="TableListEquipmentInProject" class="table table-bordered table-striped">
<thead> <thead>
<tr> <tr>
<th>N.Ispt</th>
<th>Tag</th> <th>Tag</th>
<th>Descrição</th> <th>Descrição</th>
<th>Tipo Equipamento</th> <th>Tipo Equipamento</th>
<th>Fabrica</th> <th>Fabrica</th>
<th>Equipamento Extra</th> <th>Equipamento Extra</th>
<th>Âmbito</th> <th>Âmbito</th>
<th>status</th>
<th>Ação</th> <th>Ação</th>
</tr> </tr>
</thead> </thead>
@ -206,12 +238,14 @@ class="btn btn-danger">Imprimir Qrcodes</a>
class="table table-bordered table-striped"> class="table table-bordered table-striped">
<thead> <thead>
<tr> <tr>
<th>N.Ispt</th>
<th>Tag</th> <th>Tag</th>
<th>Descrição</th> <th>Descrição</th>
<th>Tipo Equipamento</th> <th>Tipo Equipamento</th>
<th>Fabrica</th> <th>Fabrica</th>
<th>Equipamento Extra</th> <th>Equipamento Extra</th>
<th>Âmbito</th> <th>Âmbito</th>
<th>status</th>
<th>Ação</th> <th>Ação</th>
</tr> </tr>
</thead> </thead>
@ -234,12 +268,14 @@ class="table table-bordered table-striped">
class="table table-bordered table-striped"> class="table table-bordered table-striped">
<thead> <thead>
<tr> <tr>
<th>N.Ispt</th>
<th>Tag</th> <th>Tag</th>
<th>Descrição</th> <th>Descrição</th>
<th>Tipo Equipamento</th> <th>Tipo Equipamento</th>
<th>Fabrica</th> <th>Fabrica</th>
<th>Equipamento Extra</th> <th>Equipamento Extra</th>
<th>Âmbito</th> <th>Âmbito</th>
<th>status</th>
<th>Ação</th> <th>Ação</th>
</tr> </tr>
</thead> </thead>
@ -342,6 +378,7 @@ class="table table-bordered table-striped">
@endsection @endsection
@section('scriptsTemplateAdmin') @section('scriptsTemplateAdmin')
<script type="text/javascript"> <script type="text/javascript">
// Inicialize as tabelas deequipamentos // Inicialize as tabelas deequipamentos
function setupDataTable(tableSelector, tableType) { // Adiciona tableType como um parâmetro function setupDataTable(tableSelector, tableType) { // Adiciona tableType como um parâmetro
@ -357,7 +394,12 @@ function setupDataTable(tableSelector, tableType) { // Adiciona tableType como u
d.tableType = tableType; // Agora está definido corretamente d.tableType = tableType; // Agora está definido corretamente
} }
}, },
columns: [{ columns: [
{
data: 'ispt_number',
name: 'ispt_number'
},
{
data: 'equipment_tag', data: 'equipment_tag',
name: 'equipment_tag' name: 'equipment_tag'
}, },
@ -381,6 +423,10 @@ function setupDataTable(tableSelector, tableType) { // Adiciona tableType como u
data: 'ambit_name', data: 'ambit_name',
name: 'ambit_name' name: 'ambit_name'
}, },
{
data: 'status',
name: 'status'
},
{ {
data: 'action', data: 'action',
name: 'action' name: 'action'
@ -391,83 +437,10 @@ function setupDataTable(tableSelector, tableType) { // Adiciona tableType como u
// Inicialização das DataTables para cada tabela especificada // Inicialização das DataTables para cada tabela especificada
$(document).ready(function() { $(document).ready(function() {
setupDataTable('#TableListEquipmentInProject', 'normal'); setupDataTable('#TableListEquipmentInProjectForInit', 'start');
setupDataTable('#TableListEquipmentInProject', 'execution');
setupDataTable('#TableListEquipmentInProjectPendingsForApprove', 'pending'); setupDataTable('#TableListEquipmentInProjectPendingsForApprove', 'pending');
setupDataTable('#TableListOfCompletedProjectEquipment', 'completed'); setupDataTable('#TableListOfCompletedProjectEquipment', 'completed');
}); });
</script> </script>
<script>
$(document).ready(function() {
// Ja vai ser inicializado no card Equipamentos.
// $("#ViewEquipmentsButton").hide();
// $("#CardViewDetails").hide();
// $("#CardViewWorkstations").hide();
// $("#ViewDetailsButton").on('click', function() {
// $("#CardViewDetails").show();
// $("#ViewDetailsButton").hide();
// $("#ViewEquipmentsButton").show();
// $("#ViewWorkstationButton").show();
// $("#ViewTasksButton").show();
// $("#CardViewWorkstations").hide();
// $("#CardViewEquipments").hide();
// $("#CardViewTasks").hide();
// })
//Visualizacao dos Equipamentos
// $("#ViewEquipmentsButton").on('click', function() {
// $("#CardViewEquipments").show();
// $("#ViewWorkstationButton").show();
// $("#ViewDetailsButton").show();
// $("#ViewTasksButton").show();
// $("#CardViewDetails").hide();
// $("#CardViewWorkstations").hide();
// $("#ViewEquipmentsButton").hide();
// $("#CardViewTasks").hide();
// })
//Visualizacao das Tarefas
// $("#ViewTasksButton").on('click', function() {
// // $("#CardViewTasks").show();
// // $("#ViewEquipmentsButton").show();
// // $("#ViewWorkstationButton").show();
// // $("#ViewDetailsButton").show();
// $("#CardViewDetails").hide();
// $("#CardViewEquipments").hide();
// $("#CardViewWorkstations").hide();
// $("#ViewTasksButton").hide();
// })
//Visualizacao das Workstatios
// $("#ViewWorkstationButton").on('click', function() {
// $("#CardViewWorkstations").show();
// $("#ViewEquipmentsButton").show();
// $("#ViewDetailsButton").show();
// $("#ViewTasksButton").show();
// $("#CardViewDetails").hide();
// $("#CardViewEquipments").hide();
// $("#ViewWorkstationButton").hide();
// $("#CardViewTasks").hide();
// })
});
</script>
@endsection @endsection

View File

@ -6,10 +6,9 @@
style="max-width: 85px; max-height: 85px;"> style="max-width: 85px; max-height: 85px;">
<!-- 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="{{ public_path($companyLogoPath) }}" alt="Company Logo" class="img-fluid" <img src="{{ public_path($companyLogoPath) }}" alt="Company Logo" class="img-fluid"
style="max-width: 70px; max-height: 70px;"> --}} style="max-width: 90px; max-height: 90px;">
<img src="{{ public_path($projectLogoPath) }}" alt="Company Logo" class="img-fluid"
style="max-width: 85px; max-height: 85px;">
</div> </div>
</div> </div>

View File

@ -17,22 +17,27 @@
<!-- PSV --> <!-- PSV -->
@if ($detailsEquipment->equipment_type_id == 3) @if ($detailsEquipment->equipment_type_id == 3)
<h2>FICHA DE BENEFICIAÇÃO E REPARAÇÃO<br>DE<br>VÁLVULAS DE SECCIONAMENTO</h2> <h2>FICHA DE EQUIPAMENTO PSV <br>DE<br>{{ $detailsEquipment['specificAttributes'][5]['value'] ?? 'N/A' }}
</h2>
<!-- CV --> <!-- CV -->
@elseif($detailsEquipment->equipment_type_id == 1) @elseif($detailsEquipment->equipment_type_id == 1)
<h2>FICHA DE BENEFICIAÇÃO E REPARAÇÃO<br>DE<br>VÁLVULAS DE CONTROLO E ON/OFF</h2> <h2>FICHA DE EQUIPAMENTO CV <br>DE<br>{{ $detailsEquipment['specificAttributes'][5]['value'] ?? 'N/A' }}
</h2>
<!-- ISV --> <!-- ISV -->
@else @else
<h2>FICHA DE BENEFICIAÇÃO E REPARAÇÃO<br>DE<br>VÁLVULAS DE SEGURANCA</h2> <h2>FICHA DE EQUIPAMENTO ISV <br>DE<br>{{ $detailsEquipment['specificAttributes'][5]['value'] ?? 'N/A' }}
</h2>
@endif @endif
</div> </div>
<div class="info"> <div class="info">
<p> OBRA :<b>N/A</b> <p> OBRA :<b> {{ $receiveDetailsProject->project_ispt_number ?? 'N/A' }} </b>
<br>FICHA : {{ $detailsEquipmentWorkHistory->ispt_number }} <br>FICHA : {{ $detailsEquipmentWorkHistory->ispt_number ?? 'N/A' }}
<br>PAGINA : 1 de {{ $totalPages }} <br>PAGINA : 1 de {{ $totalPages ?? 'N/A' }}
</p> </p>
</div> </div>
</div> </div>
@ -40,12 +45,12 @@
<!-- Info Table --> <!-- Info Table -->
<table class="info-table"> <table class="info-table">
<tr> <tr>
<td> <b>Cliente:</b> <span>{{ $receiveDetailsProject->plant->company->company_name }}</span></td> <td> <b>Cliente:</b> <span>{{ $receiveDetailsProject->plant->company->company_name ?? 'N/A' }}</span></td>
<td> <b>Obra Cliente:</b> <span><b>N/A</b></span></td> <td> <b>Obra Cliente:</b> <span>{{ $receiveDetailsProject->company_project_description ?? 'N/A' }}</span></td>
</tr> </tr>
<tr> <tr>
<td> <b>Unidade:</b> <span>{{ $receiveDetailsProject->plant->plant_name }}</span></td> <td> <b>Unidade:</b> <span>{{ $receiveDetailsProject->plant->plant_name ?? 'N/A' }}</span></td>
<td> <b>Trabalhos Realizados de:</b> <span>{{ $oldestDate }}</span> a <span>{{ $latestDate }}</span> <td> <b>Trabalhos Realizados de:</b> <span>{{ $oldestDate ?? 'N/A' }}</span> a <span>{{ $latestDate ?? 'N/A' }}</span>
</td> </td>
</tr> </tr>
</table> </table>
@ -250,8 +255,8 @@
</div> </div>
<!-- Caso o equipamento tenha sido concluido sem terminar as suas tarefas, deve aparecer a justificacao para tal acao -->
@if (!empty($detailsEquipmentWorkHistory->justification_for_finalization)) @if (!empty($detailsEquipmentWorkHistory->justification_for_finalization))
<!-- Caso o equipamento tenha sido concluido sem terminar as suas tarefas, deve aparecer a justificacao para tal acao -->
<div style="border: 1px solid black; margin-top:15%"> <div style="border: 1px solid black; margin-top:15%">
<div style="border: 1px solid black; background-color: #f9f9f9; padding: 5px;"> <div style="border: 1px solid black; background-color: #f9f9f9; padding: 5px;">
<p style="text-align: center;font-size: 15px; "><b style="color: red;">*</b> <p style="text-align: center;font-size: 15px; "><b style="color: red;">*</b>
@ -298,7 +303,6 @@
@endsection @endsection
@section('loopPages') @section('loopPages')
@php @php
$pageCounter = 2; // Start from page 2, assuming the first page is already handled $pageCounter = 2; // Start from page 2, assuming the first page is already handled
@endphp @endphp
@ -323,7 +327,8 @@
<div class="content-loop-pages"> <div class="content-loop-pages">
@include('components.elemental-tasks', ['task_todo' => $task_todo]) @include('components.elemental-tasks', ['task_todo' => $task_todo])
@if (isset($taskImages[$task_todo->control_equipment_workstation_id]) && is_array($taskImages[$task_todo->control_equipment_workstation_id])) @if (isset($taskImages[$task_todo->control_equipment_workstation_id]) &&
is_array($taskImages[$task_todo->control_equipment_workstation_id]))
<div class="row no-gutters"> <div class="row no-gutters">
@foreach ($taskImages[$task_todo->control_equipment_workstation_id] as $image) @foreach ($taskImages[$task_todo->control_equipment_workstation_id] as $image)
<div class="col-4"> <div class="col-4">
@ -354,5 +359,4 @@
$pageCounter++; // Increment the page counter for each iteration $pageCounter++; // Increment the page counter for each iteration
@endphp @endphp
@endforeach @endforeach
@endsection @endsection

View File

@ -453,7 +453,7 @@ class="checkboxChoseTasksOficesCV"
<a style="margin: 10px" data-bs-toggle="modal" data-bs-target="#modelChangeProjectForExecution" <a style="margin: 10px" data-bs-toggle="modal" data-bs-target="#modelChangeProjectForExecution"
class="btn btn-primary float-right">Alterar para Execussao</a> class="btn btn-primary float-right">Alterar para execução</a>
<!-- Modal --> <!-- Modal -->
<div class="modal fade" id="modelChangeProjectForExecution" tabindex="-1" aria-labelledby="modelChangeProjectForExecution" <div class="modal fade" id="modelChangeProjectForExecution" tabindex="-1" aria-labelledby="modelChangeProjectForExecution"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -81,7 +81,7 @@
// Nao gosto que esteja neste controller, verificar mais tarde // Nao gosto que esteja neste controller, verificar mais tarde
Route::get('articulated_2/{projectID}/{equipmentID}', [ProjectoDatacontroller::class, 'projectDetails_11'])->name('projectDetails_11'); Route::get('articulated_2/{projectID}/{equipmentID}', [ProjectoDatacontroller::class, 'projectDetails_11'])->name('projectDetails_11');
Route::get('manageAssets/{equipmentID}', [ProjectoDatacontroller::class, 'articulated_22'])->name('articulated_22'); Route::get('manageAssets/{equipmentID}', action: [ProjectoDatacontroller::class, 'articulated_22'])->name('articulated_22');
Route::get('showAmbitDetailsProjectHistory/{equipmentStatus}/{projectID}/{equipmentID}', [ProjectoDatacontroller::class, 'showAmbitDetailsProjectHistory'])->name('showAmbitDetailsProjectHistory'); Route::get('showAmbitDetailsProjectHistory/{equipmentStatus}/{projectID}/{equipmentID}', [ProjectoDatacontroller::class, 'showAmbitDetailsProjectHistory'])->name('showAmbitDetailsProjectHistory');