From 4e7215e9b7e1bb22c5d76b5f88aa72e7afd00f94 Mon Sep 17 00:00:00 2001 From: ygbanzato Date: Mon, 25 Mar 2024 00:09:57 +0000 Subject: [PATCH] Update, correct bugs --- app/Actions/Fortify/CreateNewUser.php | 2 +- app/Http/Controllers/ClientController.php | 65 +- .../CreateProjectController copy.php | 5 +- .../Controllers/CreateProjectController.php | 236 +- .../Controllers/Pending_UserController.php | 77 +- .../Controllers/ProjectoDatacontroller.php | 180 +- .../WorkstationsJobsController.php | 249 +- app/Http/Middleware/CheckUserType.php | 2 +- .../ViewComposers/WorkstationComposer.php | 4 +- app/Livewire/Articulado/AdditonalTask.php | 66 +- .../SelectElementalTasksInWonkstation.php | 11 +- ...ceiveImagesControlEquipmentWorkstation.php | 17 + .../{1710242399.jpg => 1710339234.jpg} | Bin .../Templates/templateWorkstations.blade.php | 483 ++- .../articulado/additonal-task.blade.php | 57 +- ...t-elemental-tasks-in-wonkstation.blade.php | 250 +- .../projectsClients/articulated_2.blade.php | 86 +- .../articulated_2_ShowEquipment.blade.php | 1779 +++++---- .../executionProjectNew.blade.php | 22 +- .../showAmbitDetailProjectHistory.blade.php | 21 + .../views/projectsClients/testRoute.blade.php | 3 +- .../projectsClients/workStation_3.blade.php | 1 - .../equipmentsForAmbitPdf.blade.php | 36 +- .../showDataDetailsProjectClient.blade.php | 2 +- ...tingAllEquipmentsForAmbitProject.blade.php | 43 +- .../views/workstations/workstations.blade.php | 3499 ++++++++++++----- routes/web.php | 8 +- 27 files changed, 4861 insertions(+), 2343 deletions(-) create mode 100644 app/Models/ReceiveImagesControlEquipmentWorkstation.php rename public/user_logos/{1710242399.jpg => 1710339234.jpg} (100%) diff --git a/app/Actions/Fortify/CreateNewUser.php b/app/Actions/Fortify/CreateNewUser.php index 2518c095..fdfb93f2 100755 --- a/app/Actions/Fortify/CreateNewUser.php +++ b/app/Actions/Fortify/CreateNewUser.php @@ -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'], diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php index 5e34876f..195cd75a 100644 --- a/app/Http/Controllers/ClientController.php +++ b/app/Http/Controllers/ClientController.php @@ -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(); @@ -251,13 +244,13 @@ 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 = ''; - return $actionBtn; - }) - ->make(true); + ->addColumn('action', function ($dataEquipment) use ($projectId) { // Use a palavra-chave 'use' para passar $projectId + $actionBtn = ''; + return $actionBtn; + }) + ->make(true); diff --git a/app/Http/Controllers/CreateProjectController copy.php b/app/Http/Controllers/CreateProjectController copy.php index d83f69f9..625beaa8 100755 --- a/app/Http/Controllers/CreateProjectController copy.php +++ b/app/Http/Controllers/CreateProjectController copy.php @@ -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 diff --git a/app/Http/Controllers/CreateProjectController.php b/app/Http/Controllers/CreateProjectController.php index 1f92d0aa..779b33a8 100755 --- a/app/Http/Controllers/CreateProjectController.php +++ b/app/Http/Controllers/CreateProjectController.php @@ -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]; } } diff --git a/app/Http/Controllers/Pending_UserController.php b/app/Http/Controllers/Pending_UserController.php index ace4db22..18561c5e 100755 --- a/app/Http/Controllers/Pending_UserController.php +++ b/app/Http/Controllers/Pending_UserController.php @@ -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){ - - $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', - ]); + public function store(Request $request) + { - $joinName = $request->get('name') . ' ' . $request->get('lastName'); + $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', + ]); - // $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')), - // ]); + $joinName = $request->get('name') . ' ' . $request->get('lastName'); - $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([ + // '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->save(); + $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(); + + // 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. '); - // 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 registro foi enviado e aguarda aprovação.'); -} - } diff --git a/app/Http/Controllers/ProjectoDatacontroller.php b/app/Http/Controllers/ProjectoDatacontroller.php index 1ee186d2..393e0eb1 100755 --- a/app/Http/Controllers/ProjectoDatacontroller.php +++ b/app/Http/Controllers/ProjectoDatacontroller.php @@ -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(); @@ -305,7 +472,7 @@ public function projectDetails_11($projectID, $equipmentID) $OrdemTasks = $DetailsTasks->mapWithKeys(function ($task) { return [$task->elemental_tasks_id => 'on']; })->all(); - + $specificAttributes = SpecificAttributesEquipmentType::where('equipment_id', $dataEquipment->equipment_id)->get(); $specificAttributesArray = []; @@ -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')); } diff --git a/app/Http/Controllers/WorkstationsJobsController.php b/app/Http/Controllers/WorkstationsJobsController.php index c8d57373..6cff2f81 100755 --- a/app/Http/Controllers/WorkstationsJobsController.php +++ b/app/Http/Controllers/WorkstationsJobsController.php @@ -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!'); @@ -230,7 +278,7 @@ public function getEquipmentData($equipment_id, $component_tag) $receiveEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id', $receiveDataEquipment->equipment_id) ->where('company_projects_id', $receiveDataEquipment->company_projects_id) ->first(); - + $equipmentInUse = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id) ->whereNull('departure_date') // A data de saída deve ser nula, indicando que a tarefa ainda está ativa ->whereNotNull('id_workstations') // Deve ter um posto de trabalho associado @@ -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. diff --git a/app/Http/Middleware/CheckUserType.php b/app/Http/Middleware/CheckUserType.php index 52d879df..3944a742 100755 --- a/app/Http/Middleware/CheckUserType.php +++ b/app/Http/Middleware/CheckUserType.php @@ -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' ]; diff --git a/app/Http/ViewComposers/WorkstationComposer.php b/app/Http/ViewComposers/WorkstationComposer.php index 9275e568..b4043cf2 100755 --- a/app/Http/ViewComposers/WorkstationComposer.php +++ b/app/Http/ViewComposers/WorkstationComposer.php @@ -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) diff --git a/app/Livewire/Articulado/AdditonalTask.php b/app/Livewire/Articulado/AdditonalTask.php index 466ce2d4..f3eb3c29 100755 --- a/app/Livewire/Articulado/AdditonalTask.php +++ b/app/Livewire/Articulado/AdditonalTask.php @@ -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) - ->where('company_projects_id', $this->equipment->company_projects_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() { diff --git a/app/Livewire/Articulado/SelectElementalTasksInWonkstation.php b/app/Livewire/Articulado/SelectElementalTasksInWonkstation.php index a3e309df..5f7db551 100755 --- a/app/Livewire/Articulado/SelectElementalTasksInWonkstation.php +++ b/app/Livewire/Articulado/SelectElementalTasksInWonkstation.php @@ -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 = [ diff --git a/app/Models/ReceiveImagesControlEquipmentWorkstation.php b/app/Models/ReceiveImagesControlEquipmentWorkstation.php new file mode 100644 index 00000000..29152837 --- /dev/null +++ b/app/Models/ReceiveImagesControlEquipmentWorkstation.php @@ -0,0 +1,17 @@ + - + + {{-- --}} @@ -416,8 +425,8 @@ function(errorMessage) { }); }); - {{-- - + --}} - --}} - --}} + + + + {{-- --}} + + {{-- --}} + + + {{-- Novo teste --}} + + + + + + {{-- Scrip para assim que entrar na modal, ele verifica quais as tarefas ja associadas a essa Ws e mostra nas checkbox como checked --}} @endif + @if (session('danger'))