Update, correct bugs

This commit is contained in:
ygbanzato 2024-03-25 00:09:57 +00:00
parent 02911be806
commit 4e7215e9b7
27 changed files with 4861 additions and 2343 deletions

View File

@ -25,7 +25,7 @@ public function create(array $input): User
return User::create([
'user_name' => $input['user_name'],
'email' => $input['email'],
'password' => Hash::make($input['password']),
'password' => $input['password'],
'type_users' => $input['type_users'],
'user_phone' => $input['user_phone'],
'user_nif' => $input['user_nif'],

View File

@ -6,6 +6,7 @@
use App\Models\Equipment;
use App\Models\EquipmentAssociationAmbit;
use App\Models\EquipmentWorkHistory;
use App\Models\GeneralAttributesEquipment;
use App\Models\SpecificAttributesEquipmentType;
use App\Models\Unit;
use Illuminate\Http\Request;
@ -15,6 +16,7 @@
use App\Models\EquipmentType;
use App\Models\Plant;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Yajra\DataTables\Facades\DataTables;
@ -37,13 +39,7 @@ public function getEquipmentsOfAmbit(Request $request)
$projectId = $request->get('projectId');
$ambitId = $request->get('ambitId');
// $dataAmbit = AmbitsEquipment::where('ambits_id', $ambitId)->first();
// $receiveDataEquipments = Equipment::where('company_projects_id', $projectId)->get();
// $filteredAssociations = EquipmentAssociationAmbit::where('ambits_id', $dataAmbit->ambits_id)
// ->whereIn('equipment_id', $receiveDataEquipments->pluck('equipment_id'))
// ->get();
// $query = Equipment::whereIn('equipment_id', $filteredAssociations->pluck('equipment_id'))->get();
//Recebe os dados do Ambito
$dataAmbit = AmbitsEquipment::where('ambits_id', $ambitId)->first();
$receiveDataEquipments = Equipment::where('equipments.company_projects_id', $projectId)
@ -59,7 +55,16 @@ public function getEquipmentsOfAmbit(Request $request)
$query = EquipmentWorkHistory::whereIn('equipmentWorkHistorys_id', $equipmentWorkHistoryIds)
->join('equipments', 'equipment_work_historys.equipment_id', '=', 'equipments.equipment_id')
->select('equipments.*', 'equipment_work_historys.ispt_number as ispt_number') // Adicionei 'equipment_work_historys.ispt_number as ispt_number' aqui
->select([
'equipments.*',
'equipment_work_historys.ispt_number as ispt_number',
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE specific_attributes_equipament_types.equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 9), 'n/a') as dn"),
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE specific_attributes_equipament_types.equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 10), 'n/a') as dim"),
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE specific_attributes_equipament_types.equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 11), 'n/a') as pid"),
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE specific_attributes_equipament_types.equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 13), 'n/a') as isolation"),
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE specific_attributes_equipament_types.equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 15), 'n/a') as crane"),
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE specific_attributes_equipament_types.equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 23), 'n/a') as scaffold"),
])
->get();
return DataTables::of($query)
@ -97,30 +102,18 @@ public function showReportingForAmbitsProjectPdf($ambitId, $projectId)
// Agora, em vez de buscar diretamente em Equipment, vamos pegar os detalhes via EquipmentWorkHistory
$equipmentDetails = EquipmentWorkHistory::whereIn('equipmentWorkHistorys_id', $equipmentWorkHistoryIds)
->join('equipments', 'equipment_work_historys.equipment_id', '=', 'equipments.equipment_id')
->select('equipments.*', 'equipment_work_historys.*') // Seleciona todos os campos das tabelas equipments e equipment_work_historys
->select([
'equipments.*',
'equipment_work_historys.*',
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 10), 'n/a') as dim"),
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 9), 'n/a') as dn"),
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 11), 'n/a') as pid"),
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 23), 'n/a') as scaffold"),
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 13), 'n/a') as isolation"),
DB::raw("COALESCE((SELECT specific_attributes_value FROM specific_attributes_equipament_types WHERE equipment_id = equipments.equipment_id AND general_attributes_equipment_id = 15), 'n/a') as crane"),
])
->get();
// $equipmentDetails = EquipmentWorkHistory::whereIn('equipmentWorkHistorys_id', $equipmentWorkHistoryIds)
// ->join('equipments', 'equipment_work_historys.equipment_id', '=', 'equipments.equipment_id')
// ->leftJoin('specific_attributes_equipment_types', 'equipments.equipment_id', '=', 'specific_attributes_equipment_types.equipment_id') // Fazendo a junção com a tabela 'specific_attributes_equipment_types'
// ->select(
// 'equipments.*',
// 'equipment_work_historys.*',
// 'specific_attributes_equipment_types.general_attributes_equipment_id',
// 'specific_attributes_equipment_types.specific_attributes_value'
// )
// ->get()
// // Junta os dados obtidos na tabela : specific_attributes_equipment_types, e como os dados na colecao de cada equipamento.
// ->transform(function ($item) {
// // Aqui você transforma cada item da coleção, adicionando o novo par de chave-valor
// $item->specific_attributes = [
// $item->general_attributes_equipment_id => $item->specific_attributes_value
// ];
// // Remove as colunas desnecessárias para evitar duplicação
// unset($item->general_attributes_equipment_id, $item->specific_attributes_value);
// return $item;
// });
$detalsProject = CompanyProject::where('company_projects_id', $projectId)->first();
@ -253,11 +246,11 @@ public function getDataEquipmentsOfProject(Request $request)
// ->make(true);
return Datatables::of($dataEquipentProject)
->addColumn('action', function ($dataEquipment) use ($projectId) { // Use a palavra-chave 'use' para passar $projectId
$actionBtn = '<a title="Detalhes do equipamento" href="' . route('showAmbitDetailsProjectHistory', ['projectID' => $projectId,'equipmentID' => $dataEquipment->equipment_id]) . '"><i class="fa-solid fa-eye text-primary"></i></a>';
return $actionBtn;
})
->make(true);
->addColumn('action', function ($dataEquipment) use ($projectId) { // Use a palavra-chave 'use' para passar $projectId
$actionBtn = '<a title="Detalhes do equipamento" href="' . route('showAmbitDetailsProjectHistory', ['projectID' => $projectId, 'equipmentID' => $dataEquipment->equipment_id]) . '"><i class="fa-solid fa-eye text-primary"></i></a>';
return $actionBtn;
})
->make(true);

View File

@ -218,6 +218,8 @@ public function finishCreatingProject($numberProject)
$receiveAllFurtherTasks = session('receiveAllFurtherTasks');
$receiveElementalTasks = session('receiveElementalTasks');
dd($receiveAllFurtherTasks);
// Inicializar a matriz de IDs faltantes
$missingElementalTasks = [];
$missingFurtherTasksDetails = [];
@ -256,6 +258,7 @@ public function finishCreatingProject($numberProject)
}
}
}
dd($receiveAllFurtherTasks);
// Iterar sobre cada tarefa em $receiveAllFurtherTasks
foreach ($receiveAllFurtherTasks as $furtherTask) {
@ -264,7 +267,7 @@ public function finishCreatingProject($numberProject)
// Verificar se a tarefa está associada a algum id_workstations
$exists = WorkstationsAssociationTasks::whereIn('id_workstations', $workstationIds)
->where('further_tasks_id', $taskId)
->where('elemental_tasks_id', $taskId)
->exists();
// Se não existe, adicionar à lista de tarefas faltantes

View File

@ -150,7 +150,7 @@ public function deletePendingEquipments(Request $request)
$pendingEquipmentIds = $request->input('pendingEquipmentIds', []);
// Verifica se o array não está vazio
if (!empty($pendingEquipmentIds)) {
if (!empty ($pendingEquipmentIds)) {
// Deleta todos os registros de PendingEquipment que correspondam aos IDs
PendingEquipment::whereIn('pending_equipment_id', $pendingEquipmentIds)->delete();
}
@ -184,10 +184,20 @@ public function receiveUnits($numberProject)
public function deleteFurtherTasks(Request $request)
{
//Se o utilizador click mas nao associar as tarefas.
$selectedTasks = $request->input('selectedTasks', []);
if (empty ($selectedTasks)) {
return back()->with('danger', 'Não existem tarefas complementares selecionadas para exclusão.');
}
$receiveDataEquipment = Equipment::where('equipment_id', $request->equipmentID)->first();
// Buscar os registros que correspondem ao equipmentID e que têm further_tasks_id nos selectedTasks
$tasksToDelete = OrderEquipmentTasks::where('equipment_id', $request->equipmentID)
->whereIn('further_tasks_id', $request->selectedTasks)
$detailsEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id', $request->equipmentID)->first();
$tasksToDelete = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $detailsEquipmentWorkHistory->equipmentWorkHistorys_id)
->whereIn('elemental_tasks_id', $request->selectedTasks)
->get();
// Excluir esses registros
@ -197,11 +207,11 @@ public function deleteFurtherTasks(Request $request)
// Se o treatmentFurtherTask for "DeleteFurtherTask", exclua os registros da tabela principal FurtherTasks
if ($request->treatmentFurtherTask == "DeleteFurtherTask") {
FurtherTasks::whereIn('further_tasks_id', $request->selectedTasks)->delete();
ElementalTasks::whereIn('elemental_tasks_id', $request->selectedTasks)->delete();
}
// Reordenar os registros restantes
$remainingTasks = OrderEquipmentTasks::where('equipment_id', $request->equipmentID)
$remainingTasks = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $detailsEquipmentWorkHistory->equipmentWorkHistorys_id)
->orderBy('execution_order', 'asc')
->get();
@ -216,64 +226,81 @@ public function deleteFurtherTasks(Request $request)
public function addFurtherTasks(Request $request)
{
// Recebe e organiza os dados do equipameto recebido : ($request->equipmentID) e organiza em asc de acordo com a Ordem de execução
// $equipmentId = $request->equipmentID;
// $tasksToReorder = OrderEquipmentTasks::where('equipment_id', $equipmentId)
// ->orderBy('execution_order', 'asc')
// ->get();
// Recebe os detalhes do Equipment
$receiveDataEquipment = Equipment::where('equipment_id', $request->equipmentID)->first();
// Recebe os detalhes do EquipmentWorkHistory
$receiveEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id', $request->equipmentID)
->where('company_projects_id', $receiveDataEquipment->company_projects_id)
->first();
//Ordena os valores de OrderEquipmentTasks deste equipamento do Menor para o Maior
$tasksToReorder = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)
->orderBy('execution_order', 'asc')
->get();
// *Para Criar uma nova Tarefa complementar deve ser a soma dos dados das 2 tabelas para dar o numero da proxima tarefa e assim o numero da TC
// Obtenha a contagem de registros nas tabelas ElementalTasks e FurtherTasks
$elementalTasksCount = ElementalTasks::count();
$furtherTasksCount = FurtherTasks::count();
// Calcule o valor de further_tasks_id
$newFurtherTaskId = $elementalTasksCount + $furtherTasksCount + 1;
// Calcule o valor de further_tasks_name
$newFurtherTaskName = 'TC' . ($furtherTasksCount + 1);
//indica onde vai ficar na nova organizacao das tarefas
$insertPosition = $request->ArrayListElementsTasks + 1;
// Incrementar a execution_order das tarefas após a posição de inserção
// foreach ($tasksToReorder as $task) {
// if ($task->execution_order >= $insertPosition) {
// $task->execution_order += 1;
// $task->save();
// }
// }
if ($request->selectedFurtherTaskExisting != 'null') {
// Agora, insira a nova tarefa na posição desejada
$newOrderEquipmentTask = new OrderEquipmentTasks;
$newOrderEquipmentTask->equipmentWorkHistorys_id = $receiveEquipmentWorkHistory->equipmentWorkHistorys_id;
$newOrderEquipmentTask->execution_order = null;
$newOrderEquipmentTask->elemental_tasks_id = null;
//Se o $resquest->selectedFurtherTaskExisting nao for null significa que selecionou uma tarefa complementar existente
//Se for diferente o campo de descricao,, Adicionamos.
$detailsFutherTaskSelected = ElementalTasks::where('elemental_tasks_id', $request->selectedFurtherTaskExisting)->first();
$detailsFutherTaskSelected->further_tasks_description = $request->furtherTaskDescription;
$detailsFutherTaskSelected->save();
// Se o selectedFurtherTaskExisting for null quer dizer que e uma TC complementar criada e nova se nao for null quer dizer que vamos criar uma TC existente.
if ($request->selectedFurtherTaskExisting == 'null') {
// Cria uma nova tarefa Complementar
$newFurtherTask = new FurtherTasks;
$newFurtherTask->further_tasks_id = $newFurtherTaskId;
$newFurtherTask->further_tasks_name = $newFurtherTaskName;
$newFurtherTask->further_tasks_description = $request->furtherTask;
$newFurtherTask->company_projects_id = $receiveDataEquipment->company_projects_id;
$newFurtherTask->save();
$newOrderEquipmentTask->further_tasks_id = $newFurtherTask->further_tasks_id;
} else {
$newOrderEquipmentTask->further_tasks_id = $request->selectedFurtherTaskExisting;
// Conta o número de registros na ElementalTasks com o company_projects_id especificado
$count = ElementalTasks::where('company_projects_id', $request->company_projects_id)->count();
// Se não existir nenhum registro, define $count como 1
$count = $count > 0 ? $count : 0;
$maxElementalTaskId = ElementalTasks::max('elemental_tasks_id');
// Precisa Saber a Obra para ver quantos tarefas Complementares, ja existe para esta Obra
// Calcule o valor de further_tasks_name
$newFurtherTaskName = 'TC' . ($count + 1);
//Cria uma nova Tarefa Complementar
$newFurtherTask = new ElementalTasks;
//Ao definir exatamente o numero ao invez de deixar por auto Incremento, quando apagar essas tarefas complementares, ao proximas podem usar o mesmo Id
$newFurtherTask->elemental_tasks_id = $maxElementalTaskId + 1;
$newFurtherTask->elemental_tasks_code = $newFurtherTaskName;
$newFurtherTask->elemental_tasks_description = $request->furtherTask;
$newFurtherTask->further_tasks_description = $request->furtherTaskDescription;
$newFurtherTask->company_projects_id = $request->company_projects_id;
$newFurtherTask->save();
}
// Incrementar a execution_order das tarefas após a posição de inserção
foreach ($tasksToReorder as $task) {
if ($task->execution_order >= $insertPosition) {
$task->execution_order += 1;
$task->save();
}
}
//Adiciona essa tarefa a Ordem indicada em relação a execussão de tarefa.
$newOrderEquipmentTask = new OrderEquipmentTasks;
$newOrderEquipmentTask->equipmentWorkHistorys_id = $receiveEquipmentWorkHistory->equipmentWorkHistorys_id;
$newOrderEquipmentTask->execution_order = $insertPosition;
if ($request->selectedFurtherTaskExisting != 'null') {
// Se selectedFurtherTaskExisting não for 'null', então usa o ID da tarefa complementar selecionada
$newOrderEquipmentTask->elemental_tasks_id = $request->selectedFurtherTaskExisting;
} else {
// Caso contrário, usa o elemental_tasks_id do $newFurtherTask
$newOrderEquipmentTask->elemental_tasks_id = $newFurtherTask->elemental_tasks_id;
}
//Inspecionar Ainda não esta sendo utilizado.
$newOrderEquipmentTask->inspection = 2;
$newOrderEquipmentTask->save();
@ -441,21 +468,23 @@ public function finishCreatingProject($numberProject)
// Iterar sobre cada tarefa em $receiveAllFurtherTasks
foreach ($receiveAllFurtherTasks as $furtherTask) {
// Obter o ID da tarefa
$taskId = $furtherTask->further_tasks_id;
$taskId = $furtherTask->elemental_tasks_id;
// Verificar se a tarefa está associada a algum id_workstations
$exists = WorkstationsAssociationTasks::whereIn('id_workstations', $workstationIds)
->where('further_tasks_id', $taskId)
->exists();
$checkExistFurtherTaskInWs = WorkstationsAssociationTasks::whereIn('id_workstations',$workstationIds)
->where('elemental_tasks_id',$taskId)
->exists();
// Se não existe, adicionar à lista de tarefas faltantes
if (!$exists) {
if (!$checkExistFurtherTaskInWs) {
$missingFurtherTasksDetails[$taskId] = [
'name' => $furtherTask->further_tasks_name,
'description' => $furtherTask->further_tasks_description
'name' => $furtherTask->elemental_tasks_code,
'description' => $furtherTask->elemental_tasks_description
];
}
}
// dd($missingFurtherTasksDetails);
// A Partir daqui ja temos as 2 variaveis a receberem array com as tarefas que faltam ser associadas.
$allMissingTasks = [
@ -464,7 +493,7 @@ public function finishCreatingProject($numberProject)
'workstation' => $missingWorkstations
];
// Verificar se todos os arrays internos estão vazios
$isEmpty = empty($allMissingTasks['elemental']) && empty($allMissingTasks['further']) && empty($allMissingTasks['workstation']);
$isEmpty = empty ($allMissingTasks['elemental']) && empty ($allMissingTasks['further']) && empty ($allMissingTasks['workstation']);
if (!$isEmpty) {
return redirect()->back()->with('errors', $allMissingTasks);
@ -596,69 +625,7 @@ public function EditEquipment(Request $request)
}
}
}
// dd($request);
// Se não selecionar nenhuma tarefas ele devolve um erro , pois e necessario pelo menos uma
// if (!in_array('on', $request->input('ordemTasks'))) {
// return redirect()->back()->with('danger', 'É necessário selecionar pelo menos uma tarefa, Para o Equipamento : ' . $equipment->equipment_tag);
// }
// $executionOrder = 1;
// foreach ($request->input('ordemTasks') as $key => $value) {
// $orderEquipmentTask = OrderEquipmentTasks::where('equipment_id', $request->equipmentId)
// ->where('elemental_tasks_id', $key)
// ->first();
// if ($value == "on") {
// if (!$orderEquipmentTask) {
// if ($receiveEquipmentWorkHistori && $receiveEquipmentWorkHistori <> null) {
// $orderEquipmentTask = new OrderEquipmentTasks();
// $orderEquipmentTask->equipment_id = $request->equipmentId;
// $orderEquipmentTask->elemental_tasks_id = $key;
// }
// }
// //Nal precisa mais indicar a ordem das tarefas pois ela agora nao vao ser feitas por ordem necessariamente
// $orderEquipmentTask->execution_order = null;
// $orderEquipmentTask->save();
// $executionOrder++;
// } elseif ($value == "off" && $orderEquipmentTask) {
// $orderEquipmentTask->delete();
// }
// }
// // $executionOrder = 1; // Reinicia a contagem de ordem de execução
// $remainingOrderEquipmentTasks = OrderEquipmentTasks::where('equipment_id', $request->equipmentId)
// ->orderBy('execution_order', 'asc')
// ->get();
// foreach ($remainingOrderEquipmentTasks as $orderEquipmentTask) {
// $orderEquipmentTask->execution_order = null;
// $orderEquipmentTask->save();
// $executionOrder++;
// }
// $orderTasks = OrderEquipmentTasks::where('equipment_id', $request->equipmentId)
// ->orderBy('execution_order', 'asc')
// ->get();
// $taskExecutionOrders = [];
// foreach ($orderTasks as $task) {
// $taskExecutionOrders[$task->elemental_tasks_id] = $task->execution_order;
// }
// Retorna uma resposta
// return redirect()->route('articulated_2', ['id' => $request->numberProject])
// ->with('success', 'Equipamento ' . $dataEquipment->equipment_tag . ' Editado com Sucesso!!!');
// ->with('taskExecutionOrders', $taskExecutionOrders);
// return back()->with('success', 'Ação concluída com sucesso!')
return back();
return back()->with('success', 'Equipamento Atualizado!');
}
public function showJson($id)
@ -1186,7 +1153,7 @@ public function processStep2(Request $request)
$dataLines = $data[$i];
// Verifica se a coluna 'fábrica' (primeiro campo) está vazia
if (empty($dataLines[0])) {
if (empty ($dataLines[0])) {
// Se a coluna 'fábrica' estiver vazia, pule para a próxima linha
continue;
}
@ -1194,7 +1161,7 @@ public function processStep2(Request $request)
// Verifica se os 5 primeiros campos essenciais estão preenchidos
for ($j = 0; $j < 5; $j++) {
if (empty($dataLines[$j])) {
if (empty ($dataLines[$j])) {
// Adiciona o índice do campo vazio ao array $camposVazios
$emptyFields[] = $columnRealNames[$j]; // ou simplesmente $j se não tiver o nome da coluna
}
@ -1207,7 +1174,7 @@ public function processStep2(Request $request)
// 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) {
return !empty($chave);
return !empty ($chave);
}, ARRAY_FILTER_USE_KEY);
//Indentifica qual o tipo de equipamento selecionado de acordo com a tabela EquipmentType
@ -1296,9 +1263,12 @@ public function processStep2(Request $request)
//Recebe a tabela com as associoacoes entre Âmbitos e tarefas Elementares
$TasksAssociationAmbits = TasksAssociationAmbits::all()->where('ambits_equipment_id', $AssociationEquipmentAmbit->ambits_id);
$execution_order = 1;
foreach ($TasksAssociationAmbits as $TasksAssociationAmbit) {
$JoinsEquipmentsWithTasks = new OrderEquipmentTasks;
$JoinsEquipmentsWithTasks->equipmentWorkHistorys_id = $newEquipmentWorkHistory->equipmentWorkHistorys_id;
$JoinsEquipmentsWithTasks->execution_order = $execution_order++;
$JoinsEquipmentsWithTasks->elemental_tasks_id = $TasksAssociationAmbit->elemental_tasks_id;
$JoinsEquipmentsWithTasks->further_tasks_id = null;
$JoinsEquipmentsWithTasks->save();
@ -1322,7 +1292,7 @@ public function processStep2(Request $request)
} elseif ($chooseAction == 'createEquipments') {
if (!empty($emptyFields)) {
if (!empty ($emptyFields)) {
// Se houver campos vazios, adicione a linha e os campos vazios às linhas ignoradas
$ignoredLines[] = [
'line' => $i + 1,
@ -1463,13 +1433,13 @@ public function processStep2(Request $request)
}
}
if ($countPendingEquipments != 0 && !empty($equipmentPendingLogs)) {
if ($countPendingEquipments != 0 && !empty ($equipmentPendingLogs)) {
// Se houver equipamentos pendentes, redirecione com essa informação e inclua os $linhasIgnoradas se não estiverem vazios
return redirect()->route('articulated_2', ['id' => $request->numberProject])
->with('danger', 'Equipamentos Pendentes criados: ' . $countPendingEquipments)
->with('dangerLogs', $ignoredLines)
->with('equipmentPendingLogs', $equipmentPendingLogs);
// ->with('pendingEquipments', $pendingEquipments);
// ->with('pendingEquipments', $pendingEquipments);
} else {
// Se não houver equipamentos pendentes, redirecione com uma mensagem de sucesso e inclua os $linhasIgnoradas se não estiverem vazios
return redirect()->route('articulated_2', ['id' => $request->numberProject])
@ -1555,8 +1525,8 @@ public function showStep3($company_projects_id)
public function workstationsAssociationTasks(Request $request)
{
// dd($request);
$workStation = ConstructionWorkstation::where('id_workstations', $request->idWorkStation)->first();
// Trocar o nome se for diferente do recebido
if ($workStation) {
$workStation->nomenclature_workstation = $request->nameWorkstation;
@ -1566,14 +1536,16 @@ public function workstationsAssociationTasks(Request $request)
// Atualizar a lista de tipos de tarefas para incluir os novos grupos
$taskTypes = ['generalTasks', '1', '2', '3', 'FurtherTasks'];
foreach ($taskTypes as $groupTasks) {
if (isset($request[$groupTasks])) { // Checar se esse grupo de tarefas existe no request
if (isset ($request[$groupTasks])) { // Checar se esse grupo de tarefas existe no request
foreach ($request[$groupTasks] as $taskID => $check) {
//Este code pode parecer repetitivo, pois antes tinha uma tabela para os 2 tipos de tarefa. TE e TC apos atualizacao ambas ficam em uma so tabela, porem por falta de tempo ainda nao foi melhorado sua logina , MAS FUNCIONA !!!!
if ($groupTasks == 'FurtherTasks') {
// Encontra a tarefa existente, se houver, para FurtherTasks
$taskAssociation = WorkstationsAssociationTasks::where('id_workstations', $workStation->id_workstations)
->where('further_tasks_id', $taskID)
->where('elemental_tasks_id', $taskID)
->where('company_projects_id', $workStation->company_projects_id)
->first();
} else {
@ -1589,7 +1561,7 @@ public function workstationsAssociationTasks(Request $request)
$taskAssociation = new WorkstationsAssociationTasks;
$taskAssociation->id_workstations = $workStation->id_workstations;
if ($groupTasks == 'FurtherTasks') {
$taskAssociation->further_tasks_id = $taskID; // Usando $taskID, que é a key
$taskAssociation->elemental_tasks_id = $taskID; // Usando $taskID, que é a key
} else {
$taskAssociation->elemental_tasks_id = $taskID; // Usando $taskID, que é a key
}
@ -1635,7 +1607,7 @@ public function index()
$groupedEquipments = [];
foreach ($results as $result) {
if (!isset($groupedEquipments[$result->tag])) {
if (!isset ($groupedEquipments[$result->tag])) {
$groupedEquipments[$result->tag] = [];
}
@ -1648,7 +1620,7 @@ public function index()
$equipments = DB::table('equipments')->get();
foreach ($equipments as $equipment) {
if (isset($groupedEquipments[$equipment->tag])) {
if (isset ($groupedEquipments[$equipment->tag])) {
$equipment->specific_attributes = $groupedEquipments[$equipment->tag];
}
}

View File

@ -18,55 +18,58 @@ class Pending_UserController extends Controller
public function ListPendingUsers()
{
$pend_users = PendingUser::all();
return view('email/pendingUsers', compact('pend_users'));
return view('email/pendingUsers', compact('pend_users'));
}
public function ShowFormUser($id){
public function ShowFormUser($id)
{
$pend_user = PendingUser::findOrFail($id);
$types = TypeUser::all();
return view ('Admin.CrudUsers.createUser', compact('pend_user','types'));
return view('Admin.CrudUsers.createUser', compact('pend_user', 'types'));
}
public function store(Request $request){
public function store(Request $request)
{
$request->validate([
'name' => 'required',
'lastName' => 'required',
'pending_email' => 'required|email|unique:pending_users,pending_user_email|unique:users,email',
'pending_phone' => 'required',
'pending_nif' => 'required',
'pending_password' => 'required|min:8|confirmed',
]);
$request->validate([
'name' => 'required',
'lastName' => 'required',
'pending_email' => 'required|email|unique:pending_users,pending_user_email|unique:users,email',
'pending_phone' => 'required',
'pending_nif' => 'required',
'pending_password' => 'required|min:8|confirmed',
]);
$joinName = $request->get('name') . ' ' . $request->get('lastName');
$joinName = $request->get('name') . ' ' . $request->get('lastName');
// $pendingUser = new PendingUser([
// 'pending_user_name' => $joinName,
// 'pending_user_email' => $request->get('pending_email'),
// 'pending_user_phone' => $request->get('pending_phone'),
// 'pending_user_nif' => $request->get('pending_nif'),
// 'pending_user_password' => Hash::make($request->get('pending_password')),
// ]);
// $pendingUser = new PendingUser([
// 'pending_user_name' => $joinName,
// 'pending_user_email' => $request->get('pending_email'),
// 'pending_user_phone' => $request->get('pending_phone'),
// 'pending_user_nif' => $request->get('pending_nif'),
// 'pending_user_password' => Hash::make($request->get('pending_password')),
// ]);
$pendingUser = new PendingUser();
$pendingUser->pending_user_name = $joinName;
$pendingUser->pending_user_email = $request->get('pending_email');
$pendingUser->pending_user_phone = $request->get('pending_phone');
$pendingUser->pending_user_nif = $request->get('pending_nif');
$pendingUser->pending_user_password = Hash::make($request->get('pending_password'));
$pendingUser = new PendingUser();
$pendingUser->pending_user_name = $joinName;
$pendingUser->pending_user_email = $request->get('pending_email');
$pendingUser->pending_user_phone = $request->get('pending_phone');
$pendingUser->pending_user_nif = $request->get('pending_nif');
$pendingUser->pending_user_password = Hash::make($request->get('pending_password'));
$pendingUser->save();
$pendingUser->save();
// Enviar email de notificação para todos os Super_Administrador
$superAdmins = User::where('type_users', 'Super_Administrador')->get();
$newUserNotification = new NewUserNotification();
// Enviar email de notificação para todos os Super_Administrador
$superAdmins = User::where('type_users', 'Super_Administrador')->get();
$newUserNotification = new NewUserNotification();
foreach ($superAdmins as $superAdmin) {
Mail::to($superAdmin->email)->send($newUserNotification);
}
return redirect('/formulario')->with('success', 'O seu registo foi submetido e encontra-se pendente de aprovação. Pode encerrar a página. ');
foreach ($superAdmins as $superAdmin) {
Mail::to($superAdmin->email)->send($newUserNotification);
}
return redirect('/formulario')->with('success', 'O seu registro foi enviado e aguarda aprovação.');
}
}

View File

@ -33,6 +33,65 @@
class ProjectoDatacontroller extends Controller
{
public function editEquipmentTasks(Request $request, $equipmentID)
{
// dd($request);
$detailsEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id', $equipmentID)->first();
// Se não selecionar nenhuma tarefas ele devolve um erro , pois e necessario pelo menos uma
if (!in_array('on', $request->input('ordemTasks'))) {
return redirect()->back()->with('danger', 'É necessário selecionar pelo menos uma tarefa, Para o Equipamento');
}
$executionOrder = 1;
foreach ($request->input('ordemTasks') as $key => $value) {
$orderEquipmentTask = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $detailsEquipmentWorkHistory->equipmentWorkHistorys_id)
->where('elemental_tasks_id', $key)
->first();
if ($value == "on") {
if (!$orderEquipmentTask) {
$orderEquipmentTask = new OrderEquipmentTasks();
$orderEquipmentTask->equipmentWorkHistorys_id = $detailsEquipmentWorkHistory->equipmentWorkHistorys_id;
$orderEquipmentTask->elemental_tasks_id = $key;
}
$orderEquipmentTask->execution_order = $executionOrder;
$orderEquipmentTask->save();
$executionOrder++;
} elseif ($value == "off" && $orderEquipmentTask) {
$orderEquipmentTask->delete();
}
}
$executionOrder = 1; // Reinicia a contagem de ordem de execução
$remainingOrderEquipmentTasks = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $detailsEquipmentWorkHistory->equipmentWorkHistorys_id)
->orderBy('execution_order', 'asc')
->get();
foreach ($remainingOrderEquipmentTasks as $orderEquipmentTask) {
$orderEquipmentTask->execution_order = $executionOrder;
$orderEquipmentTask->save();
$executionOrder++;
}
$orderTasks = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $detailsEquipmentWorkHistory->equipmentWorkHistorys_id)
->orderBy('execution_order', 'asc')
->get();
$taskExecutionOrders = [];
foreach ($orderTasks as $task) {
$taskExecutionOrders[$task->elemental_tasks_id] = $task->execution_order;
}
// dd($orderTasks);
return redirect()->back()->with('success', 'As tarefas do equipamento foram atualizado com sucesso');
}
public function checkProjectIsptNumber(Request $request, $projectId = null)
{
$number = $request->get('number');
@ -67,14 +126,20 @@ public function checkProjectIsptNumber(Request $request, $projectId = null)
public function showAmbitDetailsProjectHistory($projectID, $equipmentID)
{
$detailsProject = CompanyProject::where('company_projects_id', $projectID)->first();
$detailsCliente = Plant::where('plant_id',$detailsProject->plant_id)->first();
$detailsProject->user_id = $detailsCliente->user_id;
$detalsEquipmentWorkProject = EquipmentWorkHistory::where('equipment_id', $equipmentID)
->where('company_projects_id', $projectID)->first();
$detalsEquipment = Equipment::where('equipment_id', $equipmentID)->first();
$receiveAllTasksHistiory = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $detalsEquipmentWorkProject->equipmentWorkHistorys_id)->get();
//recebe todos os dados referentes ao equipamento
// OBS : Porem deveria confirma se a tarefa foi mesmo concluida.
// $receiveAllTasksHistiory = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $detalsEquipmentWorkProject->equipmentWorkHistorys_id)->get();
$receiveAllTasksEquipmentInHistory = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $detalsEquipmentWorkProject->equipmentWorkHistorys_id)->get();
@ -102,6 +167,8 @@ public function showAmbitDetailsProjectHistory($projectID, $equipmentID)
->has('workstationsTaskAnswers') // Garante que haja pelo menos uma 'workstationsTaskAnswers' relacionada
->get();
// dd($receiveAllTasksHistiory);
foreach ($receiveAllTasksHistiory as $taskHistory) {
$taskHistory->cardTypeStyle = 'gray'; // Adiciona o campo 'cardTypeStyle'
@ -115,7 +182,7 @@ public function showAmbitDetailsProjectHistory($projectID, $equipmentID)
// Cria um array associativo onde as chaves são as perguntas e os valores são as respostas
$formattedAnswers = [];
foreach ($answersArray as $item) {
if (isset($item['question']) && isset($item['value'])) {
if (isset ($item['question']) && isset ($item['value'])) {
$formattedAnswers[$item['question']] = $item['value'];
}
}
@ -165,6 +232,7 @@ public function showAmbitDetailsProjectHistory($projectID, $equipmentID)
//buscar Tarfas e tempo de execussao pelo control, assim como suas respostas.
// dd($receiveAmbit);
return view('projectsClients.showAmbitDetailProjectHistory', compact('detailsProject', 'receiveAmbit', 'receiveAllTasksHistiory', 'detalsEquipment'));
}
@ -287,6 +355,7 @@ public function receivePlants($receiveAllClients)
//Funcao que recebe a Acoes do dataTables das obrar em Planeamento.
public function projectDetails_11($projectID, $equipmentID)
{
$detailsProject = CompanyProject::find($projectID);
$dataEquipment = Equipment::find($equipmentID);
@ -297,7 +366,105 @@ public function projectDetails_11($projectID, $equipmentID)
->first();
$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 :
// Obtém todas as tarefas associadas ao histórico do equipamento
$DetailsTasks = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistorys->equipmentWorkHistorys_id)
->whereNotNull('elemental_tasks_id')
->with([
'elementalTask' => function ($query) {
$query->whereNotNull('company_projects_id');
}
])
->get();
// Filtra para manter apenas os registros que realmente têm uma tarefa elemental associada com company_projects_id não nulo
$filteredTasks = $DetailsTasks->filter(function ($task) {
return !is_null($task->elementalTask) && !is_null($task->elementalTask->company_projects_id);
});
// Agora, vamos buscar os detalhes das tarefas elementais correspondentes
$elementalTasksDetails = ElementalTasks::whereIn('elemental_tasks_id', $filteredTasks->pluck('elemental_tasks_id'))
->whereNotNull('company_projects_id')
->get()
->keyBy('elemental_tasks_id'); // Keying by elemental_tasks_id para fácil acesso
// $filteredTasks = $filteredTasks->map(function ($task) use ($elementalTasksDetails) {
// // Verifica se o detalhe da tarefa elemental existe na coleção $elementalTasksDetails, com base no elemental_tasks_id
// if (isset ($elementalTasksDetails[$task->elemental_tasks_id])) {
// $elementalTaskDetail = $elementalTasksDetails[$task->elemental_tasks_id];
// // Adiciona novos atributos ao item da coleção $task com os detalhes da tarefa elemental
// $task->elemental_tasks_code = $elementalTaskDetail->elemental_tasks_code;
// $task->elemental_tasks_description = $elementalTaskDetail->elemental_tasks_description;
// $task->further_tasks_description = $elementalTaskDetail->further_tasks_description; // Ajuste este campo conforme sua existência e necessidade
// }
// // Retorna o item modificado para a nova coleção
// return $task;
// });
// $filteredTasks = $filteredTasks->map(function ($task) use ($DetailsTasks) {
// // Calcula o execution_order da tarefa anterior
// $executionOrderBefore = $task->execution_order - 1;
// // Busca a tarefa anterior com base no execution_order calculado
// $taskBefore = $DetailsTasks->first(function ($item) use ($executionOrderBefore) {
// return $item->execution_order == $executionOrderBefore;
// });
// // Se encontrou a tarefa anterior, adiciona seu elemental_tasks_id ao item atual
// if ($taskBefore) {
// $task->taskIDBeforeExecutionOrder = $taskBefore->elemental_tasks_id;
// } else {
// // Se não encontrar a tarefa anterior, pode definir como null ou outro valor padrão
// $task->taskIDBeforeExecutionOrder = null;
// }
// return $task;
// });
$filteredTasks = $filteredTasks->map(function ($task) use ($elementalTasksDetails, $DetailsTasks) {
// Primeiro bloco: Adiciona detalhes da tarefa elemental
if (isset ($elementalTasksDetails[$task->elemental_tasks_id])) {
$elementalTaskDetail = $elementalTasksDetails[$task->elemental_tasks_id];
$task->elemental_tasks_code = $elementalTaskDetail->elemental_tasks_code;
$task->elemental_tasks_description = $elementalTaskDetail->elemental_tasks_description;
$task->further_tasks_description = $elementalTaskDetail->further_tasks_description; // Ajuste conforme necessário
}
// Segundo bloco: Adiciona o ID da tarefa anterior
$executionOrderBefore = $task->execution_order - 1;
$taskBefore = $DetailsTasks->first(function ($item) use ($executionOrderBefore) {
return $item->execution_order == $executionOrderBefore;
});
if ($taskBefore) {
$task->taskIDBeforeExecutionOrder = $taskBefore->elemental_tasks_id;
} else {
$task->taskIDBeforeExecutionOrder = null;
}
// Retorna o item modificado para a nova coleção
return $task;
});
// Para buscar a tarefa com execution_order = 3
$taskBeforeExecutionOrder = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistorys->equipmentWorkHistorys_id)
->where('execution_order', 3)
->whereNotNull('elemental_tasks_id')
->first();
if ($taskBeforeExecutionOrder) {
$elementalTaskBefore = ElementalTasks::where('elemental_tasks_id', $taskBeforeExecutionOrder->elemental_tasks_id)
->whereNotNull('company_projects_id')
->first();
}
// $OrdemTasks = $DetailsTasks->pluck('elemental_tasks_id')->all(); // Array de IDs
$OrdemTasks = $DetailsTasks->pluck('execution_order', 'elemental_tasks_id')->all();
@ -313,9 +480,8 @@ public function projectDetails_11($projectID, $equipmentID)
foreach ($specificAttributes as $attribute) {
$specificAttributesArray[$attribute->general_attributes_equipment_id] = $attribute->specific_attributes_value;
}
// dd($OrdemTasks);
return view('projectsClients.articulated_2_ShowEquipment', compact('dataEquipment', 'OrdemTasks', 'DetailsTasks', 'detailsEquipmentWorkHistory','specificAttributesArray'));
return view('projectsClients.articulated_2_ShowEquipment', compact('detailsProject', 'dataEquipment','filteredTasks', 'OrdemTasks', 'DetailsTasks', 'detailsEquipmentWorkHistory', 'specificAttributesArray'));
}
//Funcao que recebe a Acoes do dataTables do portifolio.
@ -359,7 +525,7 @@ public function articulated_22($equipmentID)
$specificAttributesArray[$attribute->general_attributes_equipment_id] = $attribute->specific_attributes_value;
}
return view('projectsClients.testRoute', compact('dataEquipment', 'receiveAlldetailsEquipmentWorkHistory','specificAttributesArray'));
return view('projectsClients.testRoute', compact('dataEquipment', 'receiveAlldetailsEquipmentWorkHistory', 'specificAttributesArray'));
}

View File

@ -9,84 +9,19 @@
use App\Models\EquipmentWorkHistory;
use App\Models\OrderEquipmentTasks;
use App\Models\workstationsTaskAnswers;
use App\Models\ReceiveImagesControlEquipmentWorkstation; // Ajuste o namespace conforme necessário
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\File;
use Mockery\Undefined;
class WorkstationsJobsController extends Controller
{
// public function reloadWsPage(Request $request, $controlEquipmentId)
// {
// $active = $request->input('active', false);
// if (!$active) {
// // Se o 'active' for false, isso significa que o usuário saiu da página
// // e você deve fazer a limpeza necessária.
// $receiveDataControlEquipment = ControlEquipmentWorkstation::find($controlEquipmentId);
// if ($receiveDataControlEquipment) {
// $receiveDataControlEquipment->delete();
// }
// } else {
// // Se o 'active' for true, atualize o timestamp para refletir que o usuário ainda está ativo.
// ControlEquipmentWorkstation::where('control_equipment_workstation_id', $controlEquipmentId)
// ->update(['last_active_at' => now()]);
// }
// return response()->json(['success' => true]);
// }
// public function reloadWsPage(Request $request, $controlEquipmentId)
// {
// dd($controlEquipmentId);
// // Aqui você pode implementar a lógica para atualizar ou excluir o registro
// $receiveDataControlEquipment = ControlEquipmentWorkstation::find($controlEquipmentId);
// if($receiveDataControlEquipment){
// $receiveDataControlEquipment->delete();
// }
// return response()->json(['success' => true]);
// }
// public function reloadWsPage(Request $request, $controlEquipmentId)
// {
// // Ao buscar o id da control vamos desassociar a Ws atual com a linha de dados da control atual, sendo assim ele ficara disponivel para os outros metados,
// $receiveDataControlEquipment = ControlEquipmentWorkstation::find($controlEquipmentId);
// if ($receiveDataControlEquipment) {
// $receiveDataControlEquipment->id_workstations = null;
// $receiveDataControlEquipment->save();
// }
// // Não precisa retornar uma resposta detalhada pois sendBeacon não manipula respostas
// return response()->json(['success' => true]);
// }
// public function updateWorkstationStatus(Request $request)
// {
// $controlEquipmentId = $request->id;
// $status = $request->status;
// $controlEquipment = ControlEquipmentWorkstation::find($controlEquipmentId);
// if ($controlEquipment) {
// $controlEquipment->status = $status;
// $controlEquipment->save();
// }
// return response()->json(['success' => true]);
// }
// public function closeWorkstationSession(Request $request)
// { dd($request);
// $controlEquipmentId = $request->id;
// $controlEquipment = ControlEquipmentWorkstation::find($controlEquipmentId);
// if ($controlEquipment) {
// $controlEquipment->delete(); // Ou defina status como inativo, conforme a lógica do negócio.
// }
// return response()->json(['success' => true]);
// }
public function updateSessionStatus(Request $request, $controlEquipmentId)
{
@ -102,6 +37,48 @@ public function updateSessionStatus(Request $request, $controlEquipmentId)
return response()->json(['success' => false, 'message' => 'Equipamento não encontrado.']);
}
public function receiveQuestionsEquipment($equipmentID)
{
//Busca os valores do historico do equipamento
$receiveWorkHistoryEquipment = EquipmentWorkHistory::where('equipment_id', $equipmentID)->first();
// Se nao encontrar, retorna mensagem de erro.
if (!$receiveWorkHistoryEquipment) {
return response()->json(['message' => 'Equipment Work History not found'], 404);
}
//Se encontrar verifica na ControlEquipmentWorkstation dados referentes ao equipamento que faz a tarefa TE3(2)-CV e tem o departure_date mais recente
$mostRecentTask = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveWorkHistoryEquipment->equipmentWorkHistorys_id)
->where('elemental_tasks_id', 4)
->whereNotNull('departure_date')
->orderBy('departure_date', 'desc')
->first();
// Se nao encontrar, retorna mensagem de erro.
if (!$mostRecentTask) {
return response()->json(['message' => 'No recent task found'], 404);
}
$workstationTaskAnswers = WorkstationsTaskAnswers::where('control_equipment_workstation_id', $mostRecentTask->control_equipment_workstation_id)->get();
$interestedQuestions = ['valve_repair', 'actuator_repair', 'repair_positioner'];
$answersWithYes = [];
foreach ($workstationTaskAnswers as $answer) {
$answerJson = json_decode($answer->answer_json, true);
foreach ($answerJson as $item) {
if (in_array($item['question'], $interestedQuestions) && $item['value'] === 'yes') {
$answersWithYes[] = ['question' => $item['question']];
}
}
}
return response()->json($answersWithYes);
}
// public function closeSession(Request $request, $controlEquipmentId)
// {
// $controlEquipment = ControlEquipmentWorkstation::find($controlEquipmentId);
@ -117,7 +94,7 @@ public function updateSessionStatus(Request $request, $controlEquipmentId)
public function receiveAnswersEquipment(Request $request, $control_equipment_workstation_id)
{
dd($request);
//No request recebemos ID(NUmero da tarela elementar) , esta variavel vai receber este ID apos selerar o id da string
$elementalTaskID = 0;
@ -173,9 +150,9 @@ public function receiveAnswersEquipment(Request $request, $control_equipment_wor
$receiveAnswersElementalTasks->answer_json = $jsonString;
// Busca a Ws com base no id recebido da tabela Control.
$recebeDataControlWs = ControlEquipmentWorkstation::find($control_equipment_workstation_id);
$recebeDataControlWs->elemental_tasks_id = $elementalTaskID;
$recebeDataControlWs->departure_date = now();
$receiveDataControlWs = ControlEquipmentWorkstation::find($control_equipment_workstation_id);
$receiveDataControlWs->elemental_tasks_id = $elementalTaskID;
$receiveDataControlWs->departure_date = now();
$requestData = $request->all();
@ -185,15 +162,86 @@ public function receiveAnswersEquipment(Request $request, $control_equipment_wor
// $matches[1] contém o número após 'ID'
$idNumber = $matches[1];
// Atribuir o número extraído diretamente ao elemental_tasks_id
$recebeDataControlWs->elemental_tasks_id = $idNumber;
$receiveDataControlWs->elemental_tasks_id = $idNumber;
break; // Se você só espera um ID, pare o loop depois de encontrar
}
}
// Primeiro adicionamos a tarefa que acabou de completar, em seguida salvamos a respostas recebidas.
$recebeDataControlWs->save();
$receiveDataControlWs->save();
$receiveAnswersElementalTasks->save();
// dd($recebeDataControlWs);
// $imagesBase64 = json_decode($request->capturedImages);
// $imagePaths = [];
// // Assume $receiveDataControlWs já está definido/obtido em algum lugar do seu código
// $folderName = $receiveDataControlWs->control_equipment_workstation_id . '_' . $receiveDataControlWs->equipmentWorkHistorys_id;
// // Cria a pasta se não existir
// $path = 'receiveImagesControlEquipmentWorkstation/' . $folderName;
// Storage::disk('public')->makeDirectory($path);
// foreach ($imagesBase64 as $index => $imageBase64) {
// list($type, $imageBase64) = explode(';', $imageBase64);
// list(, $imageBase64) = explode(',', $imageBase64);
// $imageData = base64_decode($imageBase64);
// // Define um nome de arquivo baseado no índice
// $fileName = $path . '/img' . ($index + 1) . '.png';
// // Salva a imagem
// Storage::disk('public')->put($fileName, $imageData);
// // Armazena o caminho da imagem no array
// $imagePaths[] = $fileName;
// }
if ($request->capturedImages) {
$imagesBase64 = json_decode($request->capturedImages);
$imagePaths = [];
// Obtenha ou defina $receiveDataControlWs conforme sua lógica de negócio
$folderName = $receiveDataControlWs->control_equipment_workstation_id . '_' . $receiveDataControlWs->equipmentWorkHistorys_id;
// Define o caminho da pasta onde as imagens serão salvas
$path = public_path('receiveImagesControlEquipmentWorkstation/' . $folderName);
// Cria a pasta se não existir
if (!File::isDirectory($path)) {
File::makeDirectory($path, 0777, true, true);
}
foreach ($imagesBase64 as $index => $imageBase64) {
list($type, $imageBase64) = explode(';', $imageBase64);
list(, $imageBase64) = explode(',', $imageBase64);
$imageData = base64_decode($imageBase64);
// Define um nome de arquivo baseado no índice
$fileName = 'img' . ($index + 1) . '.png';
// Caminho completo do arquivo
$fullPath = $path . '/' . $fileName;
// Salva a imagem
file_put_contents($fullPath, $imageData);
// Armazena o caminho relativo da imagem no array
$imagePaths[] = 'receiveImagesControlEquipmentWorkstation/' . $folderName . '/' . $fileName;
}
// Salva o array de caminhos de imagem como JSON na base de dados
$model = new ReceiveImagesControlEquipmentWorkstation(); // Ajuste conforme seu modelo
$model->control_equipment_workstation_id = $receiveDataControlWs->control_equipment_workstation_id;
$model->image_paths = json_encode($imagePaths);
$model->save();
}
// return response()->json(['success' => true]);
// Agora que guardamos os dados anteriores, vamos criar a nova linha na tabela Control Equipment ID para que o equipamento continue
// $newControlEquipment = new ControlEquipmentWorkstation;
// $newControlEquipment->equipmentWorkHistorys_id = $recebeDataControlWs->equipmentWorkHistorys_id;
@ -204,7 +252,7 @@ public function receiveAnswersEquipment(Request $request, $control_equipment_wor
// dd($newControlEquipment);
// Vamos buscar os dados da tarefa elementar comcluida para mandar uma mensagem ao Front e indicar que esta completada
$receiveDataElementalTask = ElementalTasks::find($recebeDataControlWs->elemental_tasks_id, 'elemental_tasks_id')->first();
$receiveDataElementalTask = ElementalTasks::find($receiveDataControlWs->elemental_tasks_id, 'elemental_tasks_id')->first();
return back()->with('success', 'Tarefa :: ' . $receiveDataElementalTask->elemental_tasks_code . '-' . $receiveDataElementalTask->elemental_tasks_code . ' Concluída com sucesso!');
@ -256,15 +304,18 @@ public function getEquipmentData($equipment_id, $component_tag)
// Recebe todas as tarefas elementares do equipamento.
$recebeTasksForEquipment = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)->get();
$recebeTasksForEquipment = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)
->orderBy('execution_order', 'asc')
->get();
// dd($recebeTasksForEquipment);
//Busca as tarefas que podem ser feitas pela WS Atual a partir do Email
$userTasks = DB::table('users as u')
->join('construction_workstations as cw', 'u.user_name', '=', 'cw.name_workstations')
->join('workstations_association_tasks as wat', 'cw.id_workstations', '=', 'wat.id_workstations')
->where('u.email', $userEmail->email)
->select('cw.id_workstations', 'cw.name_workstations', DB::raw('GROUP_CONCAT(COALESCE(wat.elemental_tasks_id, wat.further_tasks_id)) AS all_tasks'))
->select('cw.id_workstations', 'cw.name_workstations', DB::raw('GROUP_CONCAT(COALESCE(wat.elemental_tasks_id)) AS all_tasks'))
->groupBy('cw.id_workstations', 'cw.name_workstations')
->get();
@ -290,40 +341,6 @@ public function getEquipmentData($equipment_id, $component_tag)
// Adicione esses IDs únicos ao array $divisionElementalTasks na chave [2]
$divisionElementalTasks[2] = $receiveTasksThatCannotBeDone->all();
// // //Aplica 2 condicoes a variavel a primeira e se os 3 campos forem nulos e a segunda e se a id_workstations nao for null e tiver o valor igual ao da sessao atual,
// $existingDataControlEquipment = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)
// ->whereNull('departure_date')
// ->whereNull('elemental_tasks_id')
// ->orWhere('elemental_tasks_id',9)
// ->where(function ($query) use ($receiveDataWs) {
// $query->whereNull('id_workstations')
// ->orWhere(function ($q) use ($receiveDataWs) {
// $q->whereNotNull('id_workstations')
// ->where('id_workstations', $receiveDataWs->id_workstations);
// });
// })
// ->first();
// dd($existingDataControlEquipment);
// if ($existingDataControlEquipment) {
// // Registro existente encontrado, atualize conforme necessário
// if (strpos($component_tag, '@Obturador') !== false) {
// $existingDataControlEquipment->elemental_tasks_id = 9;
// }
// $existingDataControlEquipment->id_workstations = $receiveDataWs->id_workstations;
// $existingDataControlEquipment->entry_date = now();
// $existingDataControlEquipment->status = 1;
// $existingDataControlEquipment->last_active_at = now();
// $existingDataControlEquipment->save();
// $receiveDataControlEquipment = $existingDataControlEquipment;
$existingDataControlEquipment = null;
@ -506,10 +523,11 @@ public function getEquipmentData($equipment_id, $component_tag)
return $task->elemental_tasks_id == 9;
})->sortBy('elemental_tasks_id');
// Se desejar aplicar a ordenação de forma geral, independente da condição
$recebeTasksForEquipment = $recebeTasksForEquipment->sortBy('elemental_tasks_id');
// ordenação de forma geral as tarefas do menor ao maior elemental_tasks_id
$recebeTasksForEquipment = $recebeTasksForEquipment->sortBy('execution_order');
}
// dd($recebeTasksForEquipment);
return view('workstations.workstations', [
// Deve receber o atual COntrol ID ? tudo a vez que atualizar ??
@ -521,7 +539,6 @@ public function getEquipmentData($equipment_id, $component_tag)
]);
}
public function cancelElementalTaskForEquipment($controlEquipmentID)
{
//Nesta funcao se o utilizador da Ws utilizar o botao cancelar na view principal,o equipamento deve se desvincular na Ws atual e poder ser selecionado por outra.

View File

@ -71,7 +71,7 @@ protected function getAllowedRoutesForUserType($userType)
'users.company','users.Show','users.edit','users.destroy','users.update','users.list',
'CreateUsers',
'enviar.formulario',
'projectDetails_1','workStation_3','addFurtherTasks','deleteFurtherTasks',
'projectDetails_1','workStation_3','addFurtherTasks','deleteFurtherTasks','editEquipmentTasks'
];

View File

@ -125,6 +125,7 @@ public function compose(View $view)
});
});
});
// Primeiro filtro: Equipamentos sem ocorrência em ControlEquipmentWorkstation
$query->whereDoesntHave('equipmentWorkHistory.controlEquipmentWorkstation');
@ -153,6 +154,7 @@ public function compose(View $view)
// Inicializa um array para armazenar o status de cada equipamento
$equipmentStatus = [];
foreach ($receiveAllEquipmentOfProject as $equipment) {
// Agora 'equipmentWorkHistoryId' contém um único ID, então não usamos 'pluck'
$workHistoryId = $equipment->equipmentWorkHistoryId; // Obter ID do histórico de trabalho diretamente
@ -225,7 +227,7 @@ public function compose(View $view)
$equipmentIds = array_keys($equipmentStatus);
// dd($equipmentIds);
// Obtendo os registros QrcodesAssociatedEquipment para esses equipamentos
$receiveQrcodeEquipmentsProject = QrcodesAssociatedEquipment::whereIn('equipment_id', $equipmentIds)

View File

@ -2,50 +2,80 @@
namespace App\Livewire\Articulado;
use App\Models\ElementalTasks;
use App\Models\EquipmentWorkHistory;
use Livewire\Component;
use App\Models\OrderEquipmentTasks;
use App\Models\FurtherTasks;
class AdditonalTask extends Component
{
public $equipment;
public $tasks = [];
public $furtherTasks = [];
public $elementalTasks = [];
public $furtherTaskRecords = [];
public $furtherTasks = [];
public $selectedFurtherTask = 'null';
public $furtherTaskDescription = '';
public $showAdditionalTask = false;
protected $listeners = ['furtherTaskSelected'];
public function mount($equipment)
{
// A variavel public recebe o valor de $equipment
$this->equipment = $equipment;
$receveEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id',$this->equipment->equipment_id)
//recebe os dados de EquipmentWorkHistory
$receveEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id', $this->equipment->equipment_id)
->where('company_projects_id', $this->equipment->company_projects_id)
->first();
$this->tasks = OrderEquipmentTasks::where('equipmentWorkHistorys_id',$receveEquipmentWorkHistory->equipmentWorkHistorys_id)
// A variavel de Array recebe os dados de OrderEquipmentTasks.
$this->tasks = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $receveEquipmentWorkHistory->equipmentWorkHistorys_id)
->orderBy('execution_order', 'asc')
->get();
// Coletando todos os registros onde further_tasks_id é diferente de null
$this->furtherTaskRecords = OrderEquipmentTasks::where('equipmentWorkHistorys_id',$receveEquipmentWorkHistory->equipmentWorkHistorys_id)
->whereNotNull('further_tasks_id')
// Obtém os elemental_tasks_id de OrderEquipmentTasks que correspondem ao equipmentWorkHistorys_id
$elementalTaskIds = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $receveEquipmentWorkHistory->equipmentWorkHistorys_id)
->pluck('elemental_tasks_id');
if ($receveEquipmentWorkHistory) {
// Agora, busca em ElementalTasks aqueles registros que correspondem aos IDs coletados
// e que também têm o company_projects_id desejado
$this->furtherTaskRecords = ElementalTasks::whereIn('elemental_tasks_id', $elementalTaskIds)
->where('company_projects_id', $this->equipment->company_projects_id)
->get();
} else {
$this->furtherTaskRecords = collect(); // Retorna uma coleção vazia se não encontrar nada
}
// Buscando furtherTasks que não estão presentes em $elementalTaskIds
$this->furtherTasks = ElementalTasks::where('company_projects_id', $this->equipment->company_projects_id)
->whereNotIn('elemental_tasks_id', $elementalTaskIds)
->get();
// Coletando todos os further_tasks_id da coleção $tasks que são diferentes de null
$existingFurtherTaskIds = $this->tasks->whereNotNull('further_tasks_id')->pluck('further_tasks_id');
// Buscando furtherTasks que não estão presentes em $tasks
$this->furtherTasks = FurtherTasks::where('company_projects_id', $this->equipment->company_projects_id)
->whereNotIn('further_tasks_id', $existingFurtherTaskIds)
->get();
}
public function updatedSelectedFurtherTask($value)
{
if ($value != 'null') {
$task = $this->furtherTasks->firstWhere('elemental_tasks_id', $value);
$this->furtherTaskDescription = $task ? $task->further_tasks_description : '';
} else {
$this->furtherTaskDescription = '';
}
}
public function toggle()
{

View File

@ -40,12 +40,6 @@ public function mount($workstation)
{
$this->workstation = $workstation;
// $this->receiveAllEquipments = Equipment::where('company_projects_id', $this->workstation->company_projects_id)
// ->join('equipment_association_ambits', 'equipments.equipment_id', '=', 'equipment_association_ambits.equipment_id')
// ->select('equipments.equipment_id', 'equipments.equipment_type_id', 'equipment_association_ambits.ambits_id')
// ->get()
// ->toArray();
$workstation = $this->workstation; // Atribuindo a uma variável local para uso na closure
$this->receiveAllEquipments = Equipment::join('equipment_work_historys', function ($join) use ($workstation) {
@ -57,10 +51,7 @@ public function mount($workstation)
->get()
->toArray();
$this->receiveAllFurtherTasks = FurtherTasks::where('company_projects_id', $this->workstation->company_projects_id)
->get();
$this->receiveAllFurtherTasks = ElementalTasks::where('company_projects_id', $this->workstation->company_projects_id)->get();
// Inicializar a matriz
$this->receiveElementalTasks = [

View File

@ -0,0 +1,17 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class ReceiveImagesControlEquipmentWorkstation extends Model
{
use HasFactory;
public $timestamps = false;
protected $table = 'receive_images_control_equipment_workstaion';
protected $primaryKey = 'receive_imagens_control_id';
}

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -301,7 +301,16 @@ class="nav-link text-white">
</div>
</aside>
<!-- /.control-sidebar -->
<!-- /.content-wrapper -->
{{-- <footer class="main-footer" style="background-color: #00B0EA">
<strong>Copyright © 2017-{{ date('Y') }} <a href="https://www.isptgroup.com" target="_blank">ISPT -
Industrial Services,
SA</a>.</strong>
Todos os direitos reservados.
<div class="float-right d-none d-sm-inline-block">
<b>Versão</b> {{ config('app.version') }}
</div>
</footer> --}}
</div>
@ -416,8 +425,8 @@ function(errorMessage) {
});
});
</script>
{{--
<script>
{{-- <script>
let scannerCheck = new Html5Qrcode("readerUnique");
let startScanCheck = document.getElementById("startScanUnique");
let readerCheck = document.getElementById("readerUnique");
@ -510,9 +519,9 @@ function(qrCodeMessage) {
});
});
});
</script>
</script> --}}
<script>
{{-- <script>
document.addEventListener('DOMContentLoaded', function() {
const btnConfirmManual = document.getElementById('btnConfirmManual');
@ -557,7 +566,7 @@ function checkInputAndToggleSubmit() {
});
</script> --}}
<script>
{{-- <script>
document.addEventListener('DOMContentLoaded', function() {
//Variavel para utilizacao de Qrcode
@ -579,9 +588,6 @@ function checkInputAndToggleSubmit() {
//Botao do Submit do formulario, nao deve ficar disponivel ate ter algum valor da verificacao de juncao de equipamentos.
const submitButton = document.getElementById('checkValidateQrCode');
// Função para verificar e ajustar o estado do botão baseado no valor do input
function checkInputAndToggleSubmit() {
const value = confirmCheckbox.value;
@ -609,6 +615,7 @@ function checkInputAndToggleSubmit() {
});
});
//Botao para fechar e cancelar a Leitura do Qrcode.
document.getElementById('stopQrcodeRead').addEventListener('click', function() {
scannerCheck.stop().then(() => {
@ -716,6 +723,296 @@ function processQRCode(qrCodeMessage) {
});
}
btnConfirmManual.addEventListener('click', function() {
$('#exampleModalSmall').modal('hide'); // Fecha a segunda modal.
$('#exampleModal').modal('hide'); // Fecha a primeira modal.
// Atualiza 'receiveValueValidateQRcode' para 0.
let receiveValueValidateQRcode = 0;
confirmCheckbox.value =
receiveValueValidateQRcode; // Atualiza o valor do input para refletir a confirmação manual
verificationStatusP.textContent = 'Etiquetas confirmadas manualmente';
verificationStatusP.style.color = 'orange'; // Altera a cor do texto conforme necessário.
checkInputAndToggleSubmit(); // Checa e ajusta o estado do botão após modificar o valor
scannerCheck.stop().then(() => {
// Apos fechar as Modais, cancelamos o mode de leitura se por acaso tiver sido selecionado e nao apertou em fechar.
readerCheck.style.display = "none"; // Esconde a área de leitura
startScanCheck.style.display =
"block"; // Mostra novamente o botão de iniciar leitura
});
// submitButton.disabled = false;
});
});
</script> --}}
{{-- <script>
document.addEventListener('DOMContentLoaded', function() {
let scannerCheck = new Html5Qrcode("readerUnique");
let startScanCheck = document.getElementById("startScanUnique");
let readerCheck = document.getElementById("readerUnique");
let currentFormId = ''; // Variável para armazenar o ID do formulário ativo
// Atualiza o estado do botão de envio com base no valor do checkbox
function checkInputAndToggleSubmit(formId) {
const confirmCheckbox = document.querySelector(
`#${formId} input[name^="ID"][name$="[confirm_label_compliance-checkbox]"]`);
const value = confirmCheckbox.value;
const submitButton = document.querySelector(
`#${formId} .submit-button-class`); // Adapte a classe do botão de envio conforme necessário
submitButton.disabled = !(value == '1' || value == '0');
}
document.querySelectorAll('[data-toggle="modal"]').forEach(button => {
button.addEventListener('click', function() {
currentFormId = this.getAttribute(
'data-form-id'); // Atualiza o ID do formulário ativo
checkInputAndToggleSubmit(currentFormId);
});
});
function startScan() {
startScanCheck.style.display = "none";
readerCheck.style.display = "block";
scannerCheck.start({
facingMode: "environment"
}, {
fps: 10,
qrbox: 250
}, function(qrCodeMessage) {
processQRCode(qrCodeMessage);
});
}
function processQRCode(qrCodeMessage) {
scannerCheck.stop().then(() => {
const parts = qrCodeMessage.split('@');
const valor = parts[0];
const componente = parts[1];
var expectedTag = "{{ $receiveComponentTag }}".split(
'@'); // Adapte conforme necessário
const expectedValor = expectedTag[0];
const expectedComponente = determineExpectedComponent(
currentFormId); // Função para determinar o componente esperado com base no formId
let receiveValueValidateQRcode = (valor == expectedValor && componente ==
expectedComponente) ? 1 : 0;
updateUIBasedOnQRCodeResult(currentFormId, receiveValueValidateQRcode);
});
}
function determineExpectedComponent(formId) {
// Adapte esta lógica conforme necessário
return (formId === "form10") ? "Obturador" : "Flange";
}
function updateUIBasedOnQRCodeResult(formId, isValid) {
const verificationStatusP = document.querySelector(`#${formId} #verificationStatus`);
const qrCodeError = document.querySelector(`#${formId} #qrCodeError`);
verificationStatusP.textContent = isValid ? 'Verificado com sucesso !!!' :
'Tags não correspondem. Tente novamente!';
verificationStatusP.style.color = isValid ? 'green' : 'red';
qrCodeError.style.display = isValid ? 'none' : 'block';
checkInputAndToggleSubmit(formId);
}
// Adicione mais eventos conforme necessário, como o clique no botão de confirmação manual, etc.
document.getElementById('stopQrcodeRead').addEventListener('click', function() {
// Pare a leitura do QR Code e ajuste a UI conforme necessário
});
});
</script> --}}
{{-- <script>
document.addEventListener('DOMContentLoaded', function() {
//Variavel para utilizacao de Qrcode
let scannerCheck = new Html5Qrcode("readerUnique");
let startScanCheck = document.getElementById("startScanUnique");
let readerCheck = document.getElementById("readerUnique");
//Botao de confirmacao Manual
const btnConfirmManual = document.getElementById('btnConfirmManual');
//Botao do Submit do formulario, nao deve ficar disponivel ate ter algum valor da verificacao de juncao de equipamentos.
const submitButton = document.getElementById('checkValidateQrCode');
// Função para verificar e ajustar o estado do botão baseado no valor do input
function checkInputAndToggleSubmit() {
const value = confirmCheckbox.value;
submitButton.disabled = !(value == '1' || value == '0');
}
// Inicialmente checa o estado para desabilitar o botão se necessário
checkInputAndToggleSubmit();
//Ao click no botao, indica em qual form esta, para ser preciso ao saber quais as verificacoes necessarias para o Qrcode
document.querySelectorAll('[data-toggle="modal"]').forEach(button => {
button.addEventListener('click', function(formId) {
const formId = this.getAttribute('data-form-id');
console.log(formId);
const formSelector = `#${formId}`;
// Extrai o número do formulário a partir do formId (assumindo que formId é algo como "form10")
const formNumber = formId.replace('form', '');
// Constrói o seletor do input com base no número do formulário
const inputName = `ID${formNumber}[confirm_label_compliance-checkbox]`;
const qrCodeError = document.querySelector(`${formSelector} #qrCodeError`);
const qrCodeErrorText = document.querySelector(
`${formSelector} #qrCodeErrorText`);
const verificationStatusP = document.querySelector(
`${formSelector} #verificationStatus`);
// Usa o inputName construído para selecionar o input correto
const confirmCheckbox = document.querySelector(
`${formSelector} input[name="${inputName}"]`);
const expectedComponente = (formId === "form10") ? "Obturador" : "Flange";
startScan(formId, qrCodeError, qrCodeErrorText, verificationStatusP,
confirmCheckbox, expectedComponente);
});
});
function startScan(formId, qrCodeError, qrCodeErrorText, verificationStatusP, confirmCheckbox,
expectedComponente) {
startScanCheck.style.display = "none";
readerCheck.style.display = "block";
scannerCheck.start({
facingMode: "environment"
}, {
fps: 10,
qrbox: 250
}, function(qrCodeMessage) {
processQRCode(qrCodeMessage, qrCodeError, qrCodeErrorText, verificationStatusP,
confirmCheckbox, expectedComponente);
});
}
function processQRCode(qrCodeMessage, qrCodeError, qrCodeErrorText, verificationStatusP,
confirmCheckbox, expectedComponente) {
//recebe e sepera o valor do Qrcode.
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
const expectedValor = expectedTag[0];
let receiveValueValidateQRcode;
let modalContent;
if (valor == expectedValor && componente == expectedComponente) {
receiveValueValidateQRcode = 1; // Atualiza para 1 (confirmado)
verificationStatusP.textContent = 'Verificado com sucesso !!!';
verificationStatusP.style.color = 'green'; // Muda a cor do texto para verde
$('#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 nao correspondem ao mesmo equipamento, tente novamente com a Tag correta !!! ';
verificationStatusP.style.color = 'red'; // Muda a cor do texto para verde
qrCodeErrorText.textContent =
`QR Lido: ${valor}@${componente} ||| Esperado: ${expectedValor}@${expectedComponente}`;
qrCodeErrorText.style.color = 'red';
qrCodeError.style.display = 'block'
}
// Atualiza o valor do input no formulário
confirmCheckbox.value = receiveValueValidateQRcode;
// Seleciona o botão pelo seu ID
const submitButton = document.getElementById('checkValidateQrCode');
// Verifica se 'receiveValueValidateQRcode' não é 'undefined'
if (receiveValueValidateQRcode !== undefined) {
// Se 'receiveValueValidateQRcode' tiver um valor (não 'undefined'), habilita o botão
submitButton.disabled = false;
} else {
// Se 'receiveValueValidateQRcode' for 'undefined', desabilita o botão
submitButton.disabled = true;
}
readerCheck.style.display = "block";
startScanCheck.style.display = "block";
}
// Botão para fechar e cancelar a Leitura do Qrcode.
document.getElementById('stopQrcodeRead').addEventListener('click', function() {
scannerCheck.stop().then(() => {
// Assumindo que o ID do formulário atual está armazenado de alguma forma
// Talvez através de um atributo data no botão de leitura do QR code ou de outra maneira.
// Você precisa definir como o formId é recuperado aqui. Vou usar um placeholder para ilustração.
const formId =
currentFormId; // Placeholder: substitua pela lógica correta de obtenção do formId atual
console.log(formId);
const formSelector = `#${formId}`;
const formNumber = formId.replace('form', '');
const inputName = `ID${formNumber}[confirm_label_compliance-checkbox]`;
const qrCodeError = document.querySelector(`${formSelector} #qrCodeError`);
const verificationStatusP = document.querySelector(
`${formSelector} #verificationStatus`);
const confirmCheckbox = document.querySelector(
`${formSelector} input[name="${inputName}"]`);
// Esconde a área de leitura
readerCheck.style.display = "none";
// Mostra novamente o botão de iniciar leitura
startScanCheck.style.display = "block";
// Limpa qualquer mensagem de erro ou de sucesso mostrada durante a leitura
if (verificationStatusP) {
verificationStatusP.textContent = '';
verificationStatusP.style.color = '';
}
if (qrCodeError) {
qrCodeError.style.display = 'none';
}
// Reseta o valor do input para um estado inicial
if (confirmCheckbox) {
confirmCheckbox.value = '';
}
});
});
btnConfirmManual.addEventListener('click', function() {
// Atualiza 'receiveValueValidateQRcode' para 0.
let receiveValueValidateQRcode = 0;
@ -733,17 +1030,181 @@ function processQRCode(qrCodeMessage) {
// Apos fechar as Modais, cancelamos o mode de leitura se por acaso tiver sido selecionado e nao apertou em fechar.
readerCheck.style.display = "none"; // Esconde a área de leitura
startScanCheck.style.display = "block"; // Mostra novamente o botão de iniciar leitura
startScanCheck.style.display =
"block"; // Mostra novamente o botão de iniciar leitura
});
});
});
</script> --}}
{{-- Novo teste --}}
<script>
document.addEventListener('DOMContentLoaded', function() {
// let scannerCheck;
// let isScanning = false; // Estado global de escaneamento
//Para leitura do Qrcode
let scannerCheck = new Html5Qrcode("readerUnique");
let startScanCheck = document.getElementById("startScanUnique");
let readerCheck = document.getElementById("readerUnique");
const btnConfirmManual = document.getElementById('btnConfirmManual');
let currentFormId = ''; // Variável para armazenar o ID do formulário ativo
// Captura cliques em botões que abrem a modal e extrai o ID do formulário
document.querySelectorAll('[data-toggle="modal"]').forEach(button => {
button.addEventListener('click', function() {
currentFormId = this.getAttribute('data-form-id');
console.log(` ${currentFormId}`); // Exibe o ID do formulário atual
// const submitButton = document.querySelector(`${formSelector} #checkValidateQrCode`);
});
});
// Evento de clique para iniciar a leitura do QR Code
startScanCheck.addEventListener('click', function() {
startScanCheck.style.display = "none";
readerCheck.style.display = "block";
// Inicia o scanner de QR Code com configurações específicas
scannerCheck.start({
facingMode: "environment" // Usa a câmera traseira
}, {
fps: 10,
qrbox: 250
}, function(qrCodeMessage) {
// Chamada quando um QR Code é detectado
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";
startScanCheck.style.display = "block";
// Atualiza o valor do input no formulário com o resultado da verificação.
confirmCheckbox.value = receiveValueValidateQRcode;
// Ajusta o estado do botão de submit com base no resultado da verificação.
const submitButton = document.querySelector(
`${formSelector} #checkValidateQrCode`); // Ajuste o seletor conforme necessário.
console.log(submitButton);
submitButton.disabled = receiveValueValidateQRcode !== 1;
});
}
// 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]']`
);
console.log(confirmCheckbox);
});
}
btnConfirmManual.addEventListener('click', function() {
const formSelector = `#${currentFormId}`;
// const qrCodeError = document.querySelector(`${formSelector} #qrCodeError`);
// const verificationStatusP = document.querySelector(`${formSelector} #verificationStatus`);
// // Constrói o nome do input dinamicamente com base no ID do formulário atual
// const inputNameSelector =
// `input[name='ID${currentFormId.replace('form', '')}[confirm_label_compliance-checkbox]']`;
// const confirmCheckbox = document.querySelector(`${formSelector} ${inputNameSelector}`);
// if (!confirmCheckbox) {
// console.error("Elemento confirmCheckbox não encontrado.");
// return;
// }
});
});
</script>
<script>
$(document).ready(function() {
// Clone the behavior of treeview to control-treeview
$(document).on('click', '[data-widget="control-treeview"] .nav-link', function(event) {
event.preventDefault();
var checkElement = $(this).next();

View File

@ -37,15 +37,21 @@
<div class="text-center">
<p><b>Excluir Tarefa Complementar</b></p>
</div>
<ul class="list-group scrollable-list" style="border: 1px solid #09255C;">
@foreach ($furtherTaskRecords as $task)
<li class="list-group-item d-flex align-items-center" aria-current="true">
<input class="icheck-primary me-2" type="checkbox"
name="selectedTasks[]" value="{{ $task->further_tasks_id }}">
({{ $task->furtherTasks->further_tasks_name }})
- {{ $task->furtherTasks->further_tasks_description }}
</li>
@endforeach
@if ($furtherTaskRecords->isEmpty())
<p class="text-center">Não existem tarefas elementares associadas ao equipamento atual.</p>
@else
@foreach ($furtherTaskRecords as $task)
<li class="list-group-item d-flex align-items-center"
aria-current="true">
<input class="icheck-primary me-2" type="checkbox"
name="selectedTasks[]" value="{{ $task->elemental_tasks_id }}">
({{ $task->elemental_tasks_code }})
- {{ $task->elemental_tasks_description }}
</li>
@endforeach
@endif
</ul>
<br>
<div>
@ -59,11 +65,10 @@
<br>
<div class="text-right">
<button type="submit" class="btn btn-outline-danger">Excluir</button>
<button type="submit" class="btn btn-outline-danger" {{ $furtherTaskRecords->isEmpty() ? 'disabled' : '' }}>Excluir</button>
</div>
</div>
</div>
</div>
</div>
</form>
@ -76,33 +81,42 @@
<div class="card">
<div class="card-body">
<div class="text-center">
<p><b>Fluxo da Tarefa</b></p>
<p><b>Fluxo da tarefa</b></p>
</div>
<input type="hidden" name="equipmentID" value="{{ $equipment->equipment_id }}">
<div class="row">
<input type="hidden" name="company_projects_id"
value="{{ $equipment->company_projects_id }}">
<div class="row mb-2">
<div class="col-sm-6">
<p>Tarefas complementares ja existentes:</p>
<p style="color: blue">Selecione tarefas complementares preexistentes</p>
<select class="form-control" name="selectedFurtherTaskExisting"
id="selectedFurtherTaskExisting" wire:model="selectedFurtherTask"
wire:change="$refresh">
<option value="null" name="nullFurtherTasks">N/A</option>
@foreach ($furtherTasks as $furtherTask)
<option value="{{ $furtherTask->further_tasks_id }}">
{{ $furtherTask->further_tasks_description }}</option>
<option value="{{ $furtherTask->elemental_tasks_id }}">
({{ $furtherTask->elemental_tasks_code }}) {{$furtherTask->elemental_tasks_description}}</option>
@endforeach
</select>
</div>
<div class="col-sm-6">
<p>Indique a tarefa complementar :</p>
{{-- <input name="furtherTask" type="text" class="form-control"> --}}
<p style="color:green"> Denominação da nova tarefa complementar</p>
<input name="furtherTask" type="text" class="form-control"
{{ $selectedFurtherTask != 'null' ? 'disabled' : '' }}>
</div>
</div>
<div class="row">
<p>Descrição da tarefa complementar</p>
<textarea name="furtherTaskDescription" class="form-control" rows="3" wire:model="furtherTaskDescription"></textarea>
</div>
<br>
<div>
<p>Selecione Após qual tarefa :</p>
<p> Selecione após qual tarefa</p>
<select name="ArrayListElementsTasks" id="ArrayListElementsTasks"
class="form-control">
@foreach ($tasks as $task)
@ -110,14 +124,9 @@ class="form-control">
<option name='startFutherTask'
value="{{ $task->execution_order }}">
{{ $task->execution_order }} --
({{ $task->elementalTask->elemental_tasks_code }})
{{ $task->elementalTask->elemental_tasks_description }}
</option>
@else
<option name='startFutherTask'
value="{{ $task->execution_order }}">
{{ $task->execution_order }} --
({{ $task->furtherTasks->further_tasks_name }})
{{ $task->furtherTasks->further_tasks_description }}</option>
@endif
@endforeach
</select>

View File

@ -26,24 +26,25 @@
<section class="content">
<div class="container-fluid">
<div class="row">
{{-- Lista de tarefas gerais --}}
@if (count($receiveElementalTasks['geral']) > 0)
<div class="col-sm">
<div class="card card-success">
<div class="card-header">
<div class="card-header clickable">
<h3 class="card-title">Tarefas Gerais</h3>
<div class="card-tools">
<button type="button" class="btn btn-tool"
data-card-widget="collapse"><i class="fas fa-minus"></i>
</button>
<button type="button" class="btn btn-tool collapse-button"
data-card-widget="collapse"><i class="fas fa-plus"></i></button>
</div>
</div>
<div class="card-body">
@foreach ($receiveElementalTasks['geral'] as $taskId => $generalTasks)
<p>{{ $generalTasks['code'] }} - {{ $generalTasks['description'] }}
<p>
<input type="hidden" name="generalTasks[{{ $taskId }}]"
value="off">
<input type="checkbox" value="on"
name="generalTasks[{{ $taskId }}]">
{{ $generalTasks['code'] }} - {{ $generalTasks['description'] }}
</p>
@endforeach
</div>
@ -52,135 +53,128 @@
@endif
<div class="col-sm">
@if (count($receiveElementalTasks['3']) > 0)
<div class="col-sm">
<div class="card card-primary collapsed-card">
<div class="card-header">
<h3 class="card-title">
Tarefas PSV</h3>
<div class="card-tools">
<button type="button" class="btn btn-tool"
data-card-widget="collapse">
<i class="fas fa-plus"></i>
</button>
</div>
{{-- Lista de tarefas PSV --}}
@if (count($receiveElementalTasks['3']) > 0)
<div class="col-sm">
<div class="card card-primary collapsed-card">
<div class="card-header clickable">
<h3 class="card-title">
Tarefas PSV</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 class="card-body">
</div>
<div class="card-body">
{{-- @foreach ($receiveElementalTasks['3'] as $taskId => $generalTasks)
<p><input type="hidden" name="3[{{ $taskId }}]"
value="off">
<input type="checkbox" value="on"
name="3[{{ $taskId }}]">
{{ $generalTasks['code'] }} -
{{ $generalTasks['description'] }}
</p>
@endforeach --}}
@foreach ($receiveElementalTasks['3'] as $taskId => $generalTasks)
<p>
<input type="hidden" name="3[{{ $taskId }}]"
value="off">
<input type="checkbox" value="on"
name="3[{{ $taskId }}]" class="taskCheckbox">
<!-- Adicione a classe aqui -->
{{ $generalTasks['code'] }} -
{{ $generalTasks['description'] }}
</p>
@endforeach
@foreach ($receiveElementalTasks['3'] as $taskId => $generalTasks)
<p>
<input type="checkbox" id="selectAll">
<label for="selectAll">Selecionar Todos</label>
<input type="hidden" name="3[{{ $taskId }}]"
value="off">
<input type="checkbox" value="on"
name="3[{{ $taskId }}]" class="taskCheckbox">
<!-- Adicione a classe aqui -->
{{ $generalTasks['code'] }} -
{{ $generalTasks['description'] }}
</p>
</div> {{-- ./card-body --}}
</div>
</div> {{-- ./col-sm-12 --}}
@endif
@if (count($receiveElementalTasks['2']) > 0)
<div class="col-sm">
<div class="card card-primary collapsed-card">
<div class="card-header">
<h3 class="card-title">
Tarefas ISV</h3>
<div class="card-tools">
<button type="button" class="btn btn-tool"
data-card-widget="collapse">
<i class="fas fa-plus"></i>
</button>
</div>
</div>
<div class="card-body">
@foreach ($receiveElementalTasks['2'] as $taskId => $generalTasks)
<p>{{ $generalTasks['code'] }} -
{{ $generalTasks['description'] }}
<input type="hidden" name="2[{{ $taskId }}]"
value="off">
<input type="checkbox" value="on"
name="2[{{ $taskId }}]">
</p>
@endforeach
</div> {{-- ./card-body --}}
</div>
@endforeach
{{-- Este code funciona !!! porem por falta de tempo ainda nao foi implementado para todos as tarefas e parece que so funciona no primeiro posto de trabalho. --}}
{{-- <p>
<input type="checkbox" id="selectAll">
<label for="selectAll">Selecionar Todos</label>
</p> --}}
</div> {{-- ./card-body --}}
</div>
@endif
</div> {{-- ./col-sm-12 --}}
@endif
@if (count($receiveElementalTasks['1']) > 0)
<div class="col-sm">
<div class="card card-primary collapsed-card">
<div class="card-header">
<h3 class="card-title">
Tarefas CV</h3>
<div class="card-tools">
<button type="button" class="btn btn-tool"
data-card-widget="collapse">
<i class="fas fa-plus"></i>
</button>
</div>
{{-- Lista de tarefas ISV --}}
@if (count($receiveElementalTasks['2']) > 0)
<div class="col-sm">
<div class="card card-primary collapsed-card">
<div class="card-header clickable">
<h3 class="card-title">
Tarefas ISV</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 class="card-body">
@foreach ($receiveElementalTasks['1'] as $taskId => $generalTasks)
<p>{{ $generalTasks['code'] }} -
{{ $generalTasks['description'] }}
<input type="hidden" name="1[{{ $taskId }}]"
value="off">
<input type="checkbox" value="on"
name="1[{{ $taskId }}]">
</p>
@endforeach
</div> {{-- ./card-body --}}
</div>
<div class="card-body">
@foreach ($receiveElementalTasks['2'] as $taskId => $generalTasks)
<p>
<input type="hidden" name="2[{{ $taskId }}]"
value="off">
<input type="checkbox" value="on"
name="2[{{ $taskId }}]">
{{ $generalTasks['code'] }} -
{{ $generalTasks['description'] }}
</p>
@endforeach
</div> {{-- ./card-body --}}
</div>
@endif
</div>
@endif
@if (count($receiveAllFurtherTasks) > 0)
<div class="col-sm">
<div class="card card-info collapsed-card">
<div class="card-header">
<h3 class="card-title">
Tarefas Complementares</h3>
<div class="card-tools">
<button type="button" class="btn btn-tool"
data-card-widget="collapse">
<i class="fas fa-plus"></i>
</button>
</div>
{{-- Lista de tarefas CV --}}
@if (count($receiveElementalTasks['1']) > 0)
<div class="col-sm">
<div class="card card-primary collapsed-card">
<div class="card-header clickable">
<h3 class="card-title">
Tarefas CV</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 class="card-body">
@foreach ($receiveAllFurtherTasks as $furtherTasks)
<p>{{ $furtherTasks->further_tasks_name }} -
{{ $furtherTasks->further_tasks_description }}
<input type="hidden"
name="FurtherTasks[{{ $furtherTasks->further_tasks_id }}]"
value="off">
<input type="checkbox" value="on"
name="FurtherTasks[{{ $furtherTasks->further_tasks_id }}]">
</p>
@endforeach
</div> {{-- ./card-body --}}
</div>
<div class="card-body">
@foreach ($receiveElementalTasks['1'] as $taskId => $generalTasks)
<p>
<input type="hidden" name="1[{{ $taskId }}]"
value="off">
<input type="checkbox" value="on"
name="1[{{ $taskId }}]">
{{ $generalTasks['code'] }} -
{{ $generalTasks['description'] }}
</p>
@endforeach
</div> {{-- ./card-body --}}
</div>
@endif
</div>
@endif
@if (count($receiveAllFurtherTasks) > 0)
<div class="col-sm">
<div class="card card-info collapsed-card">
<div class="card-header clickable">
<h3 class="card-title">
Tarefas Complementares</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 class="card-body">
@foreach ($receiveAllFurtherTasks as $furtherTasks)
<p>
<input type="hidden"
name="FurtherTasks[{{ $furtherTasks->elemental_tasks_id }}]"
value="off">
<input type="checkbox" value="on"
name="FurtherTasks[{{ $furtherTasks->elemental_tasks_id }}]">
{{ $furtherTasks->elemental_tasks_code }} -
{{ $furtherTasks->elemental_tasks_description }}
</p>
@endforeach
</div> {{-- ./card-body --}}
</div>
</div>
@endif
</div> {{-- ./col-sm-6 --}}
@ -215,6 +209,18 @@
});
</script>
<!-- Script para abrir os card sem tem que click diretamente no icone -->
<script type="text/javascript">
$(document).ready(function() {
$('.clickable').on('click', function(e) {
// Verifica se o clique não foi no botão
if (!$(e.target).is('.collapse-button') && !$(e.target).is('.collapse-button *')) {
$(this).find('.collapse-button').trigger('click');
}
});
});
</script>
{{-- Scrip para assim que entrar na modal, ele verifica quais as tarefas ja associadas a essa Ws e mostra nas checkbox como checked --}}
<script>

View File

@ -17,6 +17,7 @@
}, 5000); // A mensagem desaparecerá após 5 segundos
</script>
@endif
@if (session('danger'))
<div class="content">
<div class="alert alert-danger" role="alert" id="alert-message-danger" style="transition: opacity 1s;">
@ -32,8 +33,6 @@
</script>
@endif
@if (session('dangerLogs') && !empty(session('dangerLogs')))
<div class="content pt-3">
<div class="card card-danger collapsed-card">
@ -1436,14 +1435,18 @@ class="btn btn-primary float-right">Postos de Trabalho</a>
@csrf
<div class="modal-body">
<p>Ao optar por criar o equipamento, este assumirá o nome existente acrescido de (+1) para indicar o número da cópia e para diferenciá-lo como um equipamento individual em relação ao equipamento original de mesma TAG.</p>
<h4><b>Tag:</b> {{ $pendingEquipment->pending_equipment_tag }} <strong>(Número da copia)</strong>
<p>Ao optar por criar o equipamento, este assumirá o nome existente acrescido de (+1)
para indicar o número da cópia e para diferenciá-lo como um equipamento individual em
relação ao equipamento original de mesma TAG.</p>
<h4><b>Tag:</b> {{ $pendingEquipment->pending_equipment_tag }} <strong>(Número da
copia)</strong>
</h4>
<h4><b>Descrição:</b> {{ $pendingEquipment->pending_equipment_description }}
<h4><b>Descrição:</b> {{ $pendingEquipment->pending_equipment_description }}
<strong>(Número da copia)</strong>
</h4>
<h4>{{ $pendingEquipment->pending_equipment_type_id }}({{ $pendingEquipment->equipmentType->equipment_type_name }})</h4>
<h4>{{ $pendingEquipment->pending_equipment_type_id }}({{ $pendingEquipment->equipmentType->equipment_type_name }})
</h4>
<select class="form-control" name="EquipmentAmbit"
id="AmbitsEquipments_list-{{ $pendingEquipment->pending_equipment_id }}" required>
<option value='' hidden>Selecionar Âmbitos...</option>
@ -1501,8 +1504,11 @@ class="btn btn-primary float-right">Postos de Trabalho</a>
@endsection
@section('scriptsTemplateAdmin')
<script>
var dataTable;
$(document).ready(function() {
@ -1632,12 +1638,14 @@ class="btn btn-primary float-right">Postos de Trabalho</a>
url: '/api/ambits/' + equipmentTypeID,
type: 'GET',
success: function(data) {
$('#AmbitsEquipments_listManual').empty(); // Limpar o select de ambits
$('#AmbitsEquipments_listManual')
.empty(); // Limpar o select de ambits
$('#AmbitsEquipments_listManual').append(
'<option value="" hidden>Selecionar Tipo de Âmbito...</option>'
);
$.each(data, function(key, value) {
$('#AmbitsEquipments_listManual').append('<option value="' +
$('#AmbitsEquipments_listManual').append(
'<option value="' +
value.ambits_id + '">' + value
.ambits_description + '</option>');
});
@ -1690,9 +1698,11 @@ class="btn btn-primary float-right">Postos de Trabalho</a>
$(document).ready(function() {
@isset($pendingEquipment)
// Se $pendingEquipment está definido, executa o AJAX
var equipmentTypeID ='{{ $pendingEquipment->pending_equipment_type_id }}'; // Usando Blade para inserir o valor
var equipmentTypeID =
'{{ $pendingEquipment->pending_equipment_type_id }}'; // Usando Blade para inserir o valor
var selectId = "AmbitsEquipments_list-{{ $pendingEquipment->pending_equipment_id }}"; // Usando Blade para inserir o valor
var selectId =
"AmbitsEquipments_list-{{ $pendingEquipment->pending_equipment_id }}"; // Usando Blade para inserir o valor
if (equipmentTypeID) {
@ -1711,7 +1721,7 @@ class="btn btn-primary float-right">Postos de Trabalho</a>
});
} else {
$('#' + selectId)
.empty(); // Limpar o select de ambits se não há tipo de equipamento selecionado
.empty(); // Limpar o select de ambits se não há tipo de equipamento selecionado
$('#' + selectId).append('<option value="" hidden>Selecionar Tipo de Âmbito...</option>');
}
@endisset
@ -1743,12 +1753,12 @@ class="btn btn-primary float-right">Postos de Trabalho</a>
}
@endisset
});
</script>
--}}
</script> --}}
{{-- Script para trocas de ambito --}}
{{-- Script para trocas de ambito --}}
<script>
$(document).ready(function() {
$('.equipmentType_id').each(function() {
@ -1798,7 +1808,8 @@ class="btn btn-primary float-right">Postos de Trabalho</a>
});
</script>
<script>
{{-- <script>
$(function() {
$('#psv_card').hide();
$('#isv_card').hide();
@ -1830,8 +1841,45 @@ class="btn btn-primary float-right">Postos de Trabalho</a>
}
});
});
</script> --}}
<script>
$(function() {
// Esconde todos os cards inicialmente
$('#psv_card').hide();
$('#isv_card').hide();
$('#cv_card').hide();
// Evento de mudança no select de tipos de equipamento
$('#equipmentType_id_listManual').change(function() {
// Esconde todos os cards
$('#psv_card').hide();
$('#isv_card').hide();
$('#cv_card').hide();
// Desabilita todos os inputs nos cards
$('.card_inputs').prop('disabled', true);
// Mostra o card baseado na opção selecionada e habilita seus inputs
switch ($(this).val()) {
case '1': // Se for CV
$('#cv_card').show();
$('#cv_card .card_inputs').prop('disabled', false);
break;
case '2': // Se for ISV
$('#isv_card').show();
$('#isv_card .card_inputs').prop('disabled', false);
break;
case '3': // Se for PSV
$('#psv_card').show();
$('#psv_card .card_inputs').prop('disabled', false);
break;
}
});
});
</script>
<script>
$(document).ready(function() {
$('.fa-eye').parent().click(function(event) {
@ -2286,7 +2334,8 @@ function(task) {
// Adiciona um botão de enviar ao formulário
form.append(table);
form.append(
'<button type="submit" class="btn btn-primary">Submit</button>');
'<button type="submit" class="btn btn-primary">Adicionar a Obra</button>'
);
$('#modal-addingEquipmentToProject .table-responsive').append(form);
$('#modal-addingEquipmentToProject').modal('show');
@ -2360,5 +2409,4 @@ function(task) {
});
});
</script>
@endsection

View File

@ -38,10 +38,10 @@
<a href="#" type="button" class="btn btn-block bg-primary btn-lg"
style="margin-bottom: 2%;">Tarefas</a>
</div>
<div class="col-sm" id="ViewWorkstationButton">
{{-- <div class="col-sm" id="ViewWorkstationButton">
<a href="#" type="button" class="btn btn-block bg-primary btn-lg"
style="margin-bottom: 2%;">Postos de Trabalho</a>
</div>
</div> --}}
</div>
<div class="card card-primary" id="CardViewEquipments">
@ -68,7 +68,7 @@
</div>
</div>
<div class="card card-primary" id="CardViewWorkstations">
{{-- <div class="card card-primary" id="CardViewWorkstations">
<div class="card-header">
<h3 class="card-title">Postos de Trabalho</h3>
<div class="card-tools">
@ -76,9 +76,23 @@
</div>
<div class="card-body">
<p>teste</p>
@livewire('execução.tasks-dashboard', ['datasProject' => $DatasProject], key($DatasProject->company_projects_id))
</div>
</div> --}}
{{-- <div class="card card-primary" id="CardViewWorkstations">
<div class="card-header">
<h3 class="card-title">Postos de Trabalho</h3>
<div class="card-tools">
</div>
</div>
<div class="card-body">
<p>teste</p>
@livewire('execução.workstation-dashboard', ['datasProject' => $DatasProject], key($DatasProject->company_projects_id))
</div>
</div>
</div> --}}
</div>
</div>

View File

@ -1,6 +1,27 @@
@extends('Templates/templateAdmin')
@section('Main-content')
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1>Relatório Individual</h1>
</div>
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
{{-- Precisa passar o ID do cliente --}}
<li class="breadcrumb-item active"><a href="{{ route('reportingDataClient', $detailsProject->user_id) }}">Obras Concluidas</a></li>
{{-- Passar o numero da Obra --}}
<li class="breadcrumb-item active"><a href="{{ route('showDataDetailsProjectClient', $detailsProject->company_projects_id) }}">Relatorios Gerais</a></li>
<li class="breadcrumb-item active">Relatório Individual</li>
</ol>
</div>
</div>
</div>
</section>
<fieldset class="content">
<div class="container-fluid">

View File

@ -1720,6 +1720,7 @@ class="form-control card_inputs" id="crane"
</div>
</div>
{{-- Editar --}}
<div class="tab-pane fade pt-1" id="edit-equipment">
<div id="cv_card" class="card card-info specificAttributes-div">
@ -2095,9 +2096,9 @@ class="form-control card_inputs"
</form>
</div>
</div>
{{-- Historico --}}
<div class="tab-pane fade pt-1" id="history-equipment">
@foreach ($receiveAlldetailsEquipmentWorkHistory as $detailsEquipmentWorkHistory)
<div id="isv_card" class="card card-secondary specificAttributes-div">
<div class="card-header">

View File

@ -79,7 +79,6 @@ class="fas fa-minus"></i>
</div>{{-- ./card card-danger --}}
</div>
@endif
@if (count($allMissingTasks['further']) > 0)
<div class="col-sm">
<div class="card card-danger">

View File

@ -148,7 +148,11 @@
</div>
<div class="box box-text">{{ $dataAmbit->ambits_description }}</div>
<div class="box last-box">
<img class="header-img" src="{{ $userLogoPath }}" alt="User Logo">
<img class="header-img"
src="{{ public_path('/img/ispt/4.0/Ispt4.0_Símbolo_Fundo_Azul-Marinho@2x-100.jpg') }}"
alt="Logo Esquerdo"
{{-- Estava a utilizar a imagem do proprio utilizador, porem iste metodo so faz sentido no perfil de Empresa que tera sua proprio imagem no relatorio --}}
{{-- <img class="header-img" src="{{ $userLogoPath }}" alt="User Logo"> --}}
</div>
</div>
<table class="navBar">
@ -157,30 +161,30 @@
<th>Unidade</th>
<th>Tag </th>
<th>Dim</th>
<th>#(Classe)</th>
{{-- <th>#(Classe)</th> --}}
<th>DN</th>
<th>P&ID</th>
<th>Observacoes</th>
{{-- <th>Observacoes</th> --}}
<th>Andaime</th>
<th>Isolamento</th>
<th>Grua</th>
<th>Concluido</th>
{{-- <th>Concluido</th> --}}
</tr>
@endif
<tr class="items">
<td>{{ $equipmentDetail->equipment_id }}</td>
<td>{{ $equipmentDetail->ispt_number }}</td>
<td>{{ $equipmentDetail->unit_id }}</td>
<td>{{ $equipmentDetail->equipment_tag }}</td>
<td>{{ $equipmentDetail->dim }}</td>
<td>{{ $equipmentDetail->dn }}</td>
<td>{{ $equipmentDetail->pid }}</td>
<td>{{ $equipmentDetail->scaffold }}</td>
<td>{{ $equipmentDetail->isolation }}</td>
<td>{{ $equipmentDetail->crane }}</td>
{{-- <td>{{ $equipmentDetail->equipment_tag }}</td>
<td>{{ $equipmentDetail->equipment_tag }}</td>
<td>{{ $equipmentDetail->equipment_tag }}</td>
<td>{{ $equipmentDetail->equipment_tag }}</td>
<td>{{ $equipmentDetail->equipment_tag }}</td>
<td>{{ $equipmentDetail->equipment_tag }}</td>
<td>{{ $equipmentDetail->equipment_tag }}</td>
<td>{{ $equipmentDetail->equipment_tag }}</td>
<td>{{ $equipmentDetail->equipment_tag }}</td>
<td>{{ $equipmentDetail->equipment_tag }}</td>
<td>{{ $equipmentDetail->equipment_tag }}</td> --}}
</tr>
@php $count++; @endphp
@endforeach
@ -198,9 +202,9 @@
<td>&nbsp;</td> {{-- Espaço em branco --}}
<td>&nbsp;</td> {{-- Espaço em branco --}}
<td>&nbsp;</td> {{-- Espaço em branco --}}
<td>&nbsp;</td> {{-- Espaço em branco --}}
<td>&nbsp;</td> {{-- Espaço em branco --}}
<td>&nbsp;</td> {{-- Espaço em branco --}}
{{-- <td>&nbsp;</td> Espaço em branco
<td>&nbsp;</td> Espaço em branco
<td>&nbsp;</td> Espaço em branco --}}
</tr>
@php $count++; @endphp
@endwhile

View File

@ -100,7 +100,7 @@
</select>
</div>
</div>
{{-- @dd($receiveAllTypeEquipments) --}}
<div class="col-sm">
<div class="form-group">
<label>Tipo de equipamento</label>

View File

@ -12,8 +12,11 @@
</div>
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item active"><a href="{{ route('reportingDataClient') }}">Obras Concluidas</a></li>
<li class="breadcrumb-item active"><a href="{{ route('showDataDetailsProjectClient',['projectID' => $projectId]) }}">Relatorios Gerais</a></li>
<li class="breadcrumb-item active"><a href="{{ route('reportingDataClient') }}">Obras Concluidas</a>
</li>
<li class="breadcrumb-item active"><a
href="{{ route('showDataDetailsProjectClient', ['projectID' => $projectId]) }}">Relatorios
Gerais</a></li>
<li class="breadcrumb-item active">Relatório geral Ambito</li>
</ol>
</div>
@ -32,7 +35,9 @@
</div>
<div class="col-sm text-right">
{{-- <a href="{{route('showReportingForAmbitsProjectPdf')}}><i class="fa-solid fa-file-pdf fa-2x"></i></a> --}}
<a href="{{ route('showReportingForAmbitsProjectPdf', ['ambitId' => $ambitId, 'projectId' => $projectId]) }}"><i class="fa-solid fa-file-pdf fa-2x"></i></a>
<a
href="{{ route('showReportingForAmbitsProjectPdf', ['ambitId' => $ambitId, 'projectId' => $projectId]) }}"><i
class="fa-solid fa-file-pdf fa-2x"></i></a>
</div>
</div>
</div>
@ -45,6 +50,15 @@
<th> ISPT</th>
<th>Unidade</th>
<th>Tag </th>
<th>Dim</th>
{{-- <th>#(Classe)</th> --}}
<th>DN</th>
<th>P&ID </th>
{{-- <th>Observacoes</th> --}}
<th>Andaime</th>
<th>Isolamento</th>
<th>Grua</th>
{{-- <th>Concluido</th> --}}
</tr>
</thead>
</table>
@ -92,6 +106,29 @@
data: 'equipment_tag',
name: 'equipment_tag'
},
{
data: 'dim',
name: 'dim'
}, {
data: 'dn',
name: 'dn'
},
{
data: 'pid',
name: 'pid'
},
{
data: 'scaffold',
name: 'scaffold'
},
{
data: 'isolation',
name: 'isolation'
},
{
data: 'crane',
name: 'crane'
},
],
});
});

File diff suppressed because it is too large Load Diff

View File

@ -102,6 +102,9 @@
return view('email/FormAdmin');
})->name('formulario');
Route::post('formulario/receive', [Pending_UserController::class, 'store'])->name('criarUser');
// Email
Route::get('/your-verification-route/{id}/{hash}', [UserController::class, 'yourVerificationMethod'])
->middleware(['auth', 'signed', 'throttle:6,1'])
@ -194,6 +197,8 @@
Route::post('editProfile/{id}', 'EditProfile')->name('editProfile');
});
Route::post('editEquipmentTasks/{equipmentID}/{projectId}',[ProjectoDatacontroller::class,'editEquipmentTasks'])->name('editEquipmentTasks');
/*
|--------------------------------------------------------------------------
| Management of projects created
@ -260,7 +265,6 @@
Route::post('enviar-formulario', [FormController::class, 'enviarEmail'])->name('enviar.formulario');
Route::get('/CreateUsers/{id}', [Pending_UserController::class, 'ShowFormUser'])->name('ShowPendingUser');
Route::post('formulario/receive', [Pending_UserController::class, 'store'])->name('criarUser');
Route::get('/CreateUsers', [Pending_UserController::class, 'ListPendingUsers'])->name('CreateUsers');
Route::post('/register', [CustomRegistrationController::class, 'store'])->name('register');
@ -283,6 +287,8 @@
Route::get('/api/equipment/{id}', [CreateProjectController::class, 'showJson']);
Route::get('/api/installations/', [CreateProjectController::class, 'getByUserNif']);
Route::get('/api/ambits/{equipmentType}', [CreateProjectController::class, 'getAmbits']);
Route::get('/api/receiveQuestionsEquipment/{equipmentID}',[WorkstationsJobsController::class,'receiveQuestionsEquipment']);
// Route::get('/api/receiveUnits', [CreateProjectController::class, 'receiveUnits']);