diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 8146f572..a8ef93d5 100755 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -12,11 +12,31 @@ class Kernel extends ConsoleKernel */ protected function schedule(Schedule $schedule): void { + //Para atualizar a fObra para execussao quando chegar na hora estipulada. $schedule->call(function () { \App\Models\CompanyProject::where('order_project', 2) ->where('date_started', '<=', now()) ->update(['order_project' => 3]); })->everyMinute(); // Ou ajuste para a frequência desejada + + + //Funcao para libertar equipamentos na control caso nao seja atualizado em 1 minuto + $schedule->call(function () { + // Define o limite de inatividade, por exemplo, sessões não atualizadas nos últimos 1 minutos + $inactiveLimit = now()->subMinutes(1); + + // Atualiza sessões inativas + \App\Models\ControlEquipmentWorkstation::where('status', 1) + ->where('last_active_at', '<', $inactiveLimit) + ->update([ + 'status' => 0, + 'id_workstations' => null, + 'elemental_tasks_id' => null, + 'entry_date' => null + ]); + + // Adicione outras tarefas necessárias aqui + })->everyMinute(); } /** diff --git a/app/Http/Controllers/CreateProjectController.php b/app/Http/Controllers/CreateProjectController.php index 2a0b3e45..ce28ecd4 100755 --- a/app/Http/Controllers/CreateProjectController.php +++ b/app/Http/Controllers/CreateProjectController.php @@ -605,7 +605,7 @@ public function EditEquipment(Request $request) // } // $executionOrder = 1; - + // foreach ($request->input('ordemTasks') as $key => $value) { // $orderEquipmentTask = OrderEquipmentTasks::where('equipment_id', $request->equipmentId) // ->where('elemental_tasks_id', $key) @@ -654,10 +654,10 @@ public function EditEquipment(Request $request) // Retorna uma resposta // return redirect()->route('articulated_2', ['id' => $request->numberProject]) // ->with('success', 'Equipamento ' . $dataEquipment->equipment_tag . ' Editado com Sucesso!!!'); - // ->with('taskExecutionOrders', $taskExecutionOrders); + // ->with('taskExecutionOrders', $taskExecutionOrders); - // return back()->with('success', 'Ação concluída com sucesso!') - return back(); + // return back()->with('success', 'Ação concluída com sucesso!') + return back(); } @@ -1499,12 +1499,14 @@ public function showStep3($company_projects_id) foreach ($equipments as $equipment) { $tags = []; + // Se for psv tem o id 3 e atualmente sao os unicos tipos de valvulas que tem obturador (cv),(isv) nao apresentam. if ($equipment->equipment_type_id == 3) { $tags = ['@Corpo', '@Flange', '@Obturador']; - } elseif ($equipment->equipment_type_id == 1) { + } else { $tags = ['@Corpo', '@Flange']; } + foreach ($tags as $tag) { $associatedEquipment = QrcodesAssociatedEquipment::where('equipment_id', $equipment->equipment_id) ->where('component_tag', 'LIKE', '%' . $tag) @@ -1525,16 +1527,25 @@ public function showStep3($company_projects_id) } } - // 3. Verificar se há algum equipment_id em QrcodesAssociatedEquipment que não existe mais em Equipment e, se sim, excluí-lo. - $allEquipmentIds = Equipment::where('company_projects_id', $company_projects_id)->pluck('equipment_id')->toArray(); - $orphanedEntries = QrcodesAssociatedEquipment::whereNotIn('equipment_id', $allEquipmentIds)->get(); + // Obter IDs de equipamentos ativos do projeto especificado. + $activeEquipmentIds = Equipment::where('company_projects_id', $company_projects_id) + ->pluck('equipment_id') + ->toArray(); - foreach ($orphanedEntries as $orphanedEntry) { - $orphanedEntry->delete(); + // Identificar todos os equipment_id em QrcodesAssociatedEquipment. + $equipmentIdsInQrcodes = QrcodesAssociatedEquipment::pluck('equipment_id')->unique()->toArray(); + + // Verificar quais desses equipment_id foram desassociados de qualquer projeto na tabela Equipment. + $orphanEquipmentIds = Equipment::whereIn('equipment_id', $equipmentIdsInQrcodes) + ->whereNull('company_projects_id') + ->pluck('equipment_id') + ->toArray(); + + // Excluir todas as entradas em QrcodesAssociatedEquipment para os equipment_id desassociados. + foreach ($orphanEquipmentIds as $orphanId) { + QrcodesAssociatedEquipment::where('equipment_id', $orphanId)->delete(); } - - //Sempre que entrar na view ja verifica se existe 'Workstations' preparadas para esta obra. $listWorkstations = ConstructionWorkstation::where('company_projects_id', $company_projects_id)->get(); diff --git a/app/Http/Controllers/Pending_UserController.php b/app/Http/Controllers/Pending_UserController.php index da980dbe..ace4db22 100755 --- a/app/Http/Controllers/Pending_UserController.php +++ b/app/Http/Controllers/Pending_UserController.php @@ -28,7 +28,7 @@ public function ShowFormUser($id){ } - public function store(Request $request){ + public function store(Request $request){ $request->validate([ 'name' => 'required', diff --git a/app/Http/Controllers/WorkstationsJobsController.php b/app/Http/Controllers/WorkstationsJobsController.php index 7b20a207..f585709a 100755 --- a/app/Http/Controllers/WorkstationsJobsController.php +++ b/app/Http/Controllers/WorkstationsJobsController.php @@ -17,9 +17,105 @@ 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) + { + + $controlEquipment = ControlEquipmentWorkstation::find($controlEquipmentId); + if ($controlEquipment) { + $controlEquipment->status = $request->input('status', 1); // Assume 1 como padrão para sessão ativa + $controlEquipment->last_active_at = now(); // Atualiza o timestamp da última atividade + $controlEquipment->save(); + + return response()->json(['success' => true, 'message' => 'Sessão atualizada com sucesso.']); + } + + return response()->json(['success' => false, 'message' => 'Equipamento não encontrado.']); + } + + // public function closeSession(Request $request, $controlEquipmentId) + // { + // $controlEquipment = ControlEquipmentWorkstation::find($controlEquipmentId); + // if ($controlEquipment) { + // $controlEquipment->status = 0; // Marca a sessão como inativa + // $controlEquipment->save(); + + // return response()->json(['success' => true, 'message' => 'Sessão fechada com sucesso.']); + // } + + // return response()->json(['success' => false, 'message' => 'Equipamento não encontrado.']); + // } + 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; @@ -113,7 +209,7 @@ public function receiveAnswersEquipment(Request $request, $control_equipment_wor } // Ao selecionar o equipamento para se inicializar a tarefa deve mostrar os dados relacionados. - public function getEquipmentData($equipment_id) + public function getEquipmentData($equipment_id, $component_tag) { //vai receber o email atual, no caso o da workstation que se encontra $userEmail = Auth::user(); @@ -121,14 +217,34 @@ public function getEquipmentData($equipment_id) // Busca os dados da Ws com base no Login $receiveDataWs = ConstructionWorkstation::where('name_workstations', $userEmail->user_name)->first(); + // Recebe os dados do Equipamento $receiveDataEquipment = Equipment::where('equipment_id', $equipment_id)->first(); + // Recebe o id do Historico do equipamento, em sua obra atual $receiveEquipmentWorkHistory = EquipmentWorkHistory::where('equipment_id', $receiveDataEquipment->equipment_id) ->where('company_projects_id', $receiveDataEquipment->company_projects_id) ->first(); + + + + //Verificar se o equipamento ja esta sendo utilizado em outra Ws se sim, retorna para a pagina anterior. + $equipmentInUse = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id) + ->whereNull('departure_date') + ->whereNotNull('id_workstations') + ->where('id_workstations', '!=', $receiveDataWs->id_workstations) + ->where('status', 1) + ->exists(); + + // Se o equipamento já estiver em uso, redirecione com uma mensagem de erro + if ($equipmentInUse) { + return redirect()->back()->with('danger', 'O equipamento já se encontra a executar tarefas noutro posto de trabalho.'); + } + // Recebe todas as tarefas elementares do equipamento. $recebeTasksForEquipment = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)->get(); + + //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') @@ -138,7 +254,6 @@ public function getEquipmentData($equipment_id) ->groupBy('cw.id_workstations', 'cw.name_workstations') ->get(); - // Primeiro, obtenha todos os IDs de tarefas elementares e outras tarefas de $userTasks $userTasksIds = $userTasks->pluck('all_tasks')->map(function ($tasks) { // Transforma a string 'all_tasks' em um array e remove espaços em branco @@ -149,25 +264,65 @@ public function getEquipmentData($equipment_id) $equipmentTasksIds = $recebeTasksForEquipment->pluck('elemental_tasks_id')->filter()->unique(); // Agora, compare os dois conjuntos de IDs para encontrar os IDs comuns - $commonIds = $equipmentTasksIds->intersect($userTasksIds); + $comparisonBetweenBothTasks = $equipmentTasksIds->intersect($userTasksIds); //recebe as tarefas que a Ws atual pode fazer. $divisionElementalTasks = [ - 1 => $commonIds->all(), + 1 => $comparisonBetweenBothTasks->all(), ]; // IDs que estão em $recebeTasksForEquipment mas não em $userTasks ou seja sao os ids que a Ws nao pode executar estas tarefas. - $uniqueEquipmentTasksIds = $equipmentTasksIds->diff($userTasksIds); + $receiveTasksThatCannotBeDone = $equipmentTasksIds->diff($userTasksIds); // Adicione esses IDs únicos ao array $divisionElementalTasks na chave [2] - $divisionElementalTasks[2] = $uniqueEquipmentTasksIds->all(); + $divisionElementalTasks[2] = $receiveTasksThatCannotBeDone->all(); - // Ao selecionar um equipamento cria na ControlEquipmentWorkstation dados sobre o mesmo indicando quando entrou. - $newDataControlEquipment = new ControlEquipmentWorkstation; - $newDataControlEquipment->equipmentWorkHistorys_id = $receiveEquipmentWorkHistory->equipmentWorkHistorys_id; - $newDataControlEquipment->id_workstations = $receiveDataWs->id_workstations; - $newDataControlEquipment->entry_date = now(); - $newDataControlEquipment->save(); + //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) + ->where(function ($query) use ($receiveDataWs) { + $query->where(function ($q) { + $q->whereNull('elemental_tasks_id') + ->whereNull('departure_date') + ->whereNull('id_workstations'); + })->orWhere(function ($q) use ($receiveDataWs) { + $q->whereNotNull('id_workstations') + ->where('id_workstations', $receiveDataWs->id_workstations) + ->whereNull('departure_date'); + }); + }) + ->first(); + + + 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; + } else { + // Nenhum registro existente encontrado, crie um novo + $newDataControlEquipment = new ControlEquipmentWorkstation; + $newDataControlEquipment->equipmentWorkHistorys_id = $receiveEquipmentWorkHistory->equipmentWorkHistorys_id; + $newDataControlEquipment->id_workstations = $receiveDataWs->id_workstations; + $newDataControlEquipment->entry_date = now(); + + if (strpos($component_tag, '@Obturador') !== false) { + $newDataControlEquipment->elemental_tasks_id = 9; + } + + $newDataControlEquipment->status = 1; + $newDataControlEquipment->save(); + + $receiveDataControlEquipment = $newDataControlEquipment; + } + // Primeiro, obtenha o registro de ControlEquipmentWorkstation que não deve ter 'elemental_tasks_id' e 'departure_date' como null $completedTasks = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id) @@ -199,7 +354,6 @@ public function getEquipmentData($equipment_id) elseif (in_array($task->elemental_tasks_id, $divisionElementalTasks[2])) { $task->cardType = 'card-primary'; $task->cardTypeStyle = 'gray'; // Define o estilo de cor - // $task->InputInCardOnlyReadOrNot = 'readonly'; // Consulta ControlEquipmentWorkstation para verificar as condições especificadas $controlEquipment = ControlEquipmentWorkstation::where('elemental_tasks_id', $task->elemental_tasks_id) ->whereNotNull('entry_date') @@ -265,24 +419,43 @@ public function getEquipmentData($equipment_id) // Atribui o array formatado ao task $task->formatted_answers = $formattedAnswers; } - } } return $task; }); - // dd($recebeTasksForEquipment); + + // Verificar se component_tag contém '@Obturador' + if (strpos($component_tag, '@Obturador') !== false) { + // Filtrar para manter apenas a tarefa : elemental_tasks_id = 9 (Retificação e lapidação) + $recebeTasksForEquipment = $recebeTasksForEquipment->filter(function ($task) { + return $task->elemental_tasks_id == 9; + }); + } else { + //Se a Tag nao contém '@Obturador' significa que e um '@Corpo' sendo assim vai ser organizado o Menor para o maior entre as tarefas de acordo com o elemental_tasks_id + // Alem de remover o 'elemental_tasks_id == 9' das tarefas, pois se é o corpo, nao faz sentido fazer a tarefas de (Retificação e lapidação), sendo assim para realizar esta tarefa so se entrar com a 'TAG de Obturador'. + $recebeTasksForEquipment = $recebeTasksForEquipment->reject(function ($task) { + 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'); + } + + dd($receiveDataControlEquipment); + return view('workstations.workstations', [ - // Deve receber o atual COntrol ID ? tudo a vez que atualizar atualiza ?? - 'dataControlEquipment' => $newDataControlEquipment, + // Deve receber o atual COntrol ID ? tudo a vez que atualizar ?? + 'dataControlEquipment' => $receiveDataControlEquipment, 'receiveDataEquipment' => $receiveDataEquipment, 'recebeTasksForEquipment' => $recebeTasksForEquipment, - 'divisionElementalTasks' => $divisionElementalTasks, + 'receiveComponentTag' => $component_tag + // 'divisionElementalTasks' => $divisionElementalTasks, ]); } - public function cancelElementalTaskForEquipment($equipmentID) + public function cancelElementalTaskForEquipment($equipmentID,) { //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. // Assim sendo mais pratico excluindo o ultimo dado desta Ws da tabela control_equipment_workstation, quando seu 'elemental_tasks_id' e 'departure_date' forem 'Null' @@ -296,7 +469,17 @@ public function cancelElementalTaskForEquipment($equipmentID) $existingControlEquipment = ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id) ->whereNull('elemental_tasks_id') ->whereNull('departure_date') - ->delete(); + ->first(); + + if ($existingControlEquipment) { + $existingControlEquipment->id_workstations = null; + $existingControlEquipment->elemental_tasks_id = null; + $existingControlEquipment->status = 0; + $existingControlEquipment->entry_date = null; + $existingControlEquipment->last_active_at = null; + $existingControlEquipment->save(); + } + return redirect(route('enterWorkstation')); } diff --git a/app/Http/Middleware/CheckUserType.php b/app/Http/Middleware/CheckUserType.php index ac578601..52d879df 100755 --- a/app/Http/Middleware/CheckUserType.php +++ b/app/Http/Middleware/CheckUserType.php @@ -18,10 +18,12 @@ class CheckUserType public function handle(Request $request, Closure $next) { + //Se o utilizador nao estiver autentificado vai para o login if (!auth()->check()) { return redirect()->route('login'); } + //Recebe o tipo de utilizador $userType = auth()->user()->type_users; // Esta linha obtém o nome da rota que está sendo acessada na requisição atual. @@ -53,16 +55,27 @@ protected function getAllowedRoutesForUserType($userType) switch ($userType) { case 5: // Técnico return ['enterWorkstation', 'getEquipmentData', 'receiveAnswersEquipment']; - case 3: - // Empresa + case 3: // Empresa return ['dashboardClient','reportingDataClient', 'manageAssetsClient', // Obras em Execussao 'ExecutionProject', //Relatorios 'showDataDetailsProjectClient','showReportingForAmbitsProject', //Api.s - 'getDataAmbitsOfProject','getDataEquipmentsOfProject','getEquipmentsOfAmbit' - ]; + 'getDataAmbitsOfProject','getDataEquipmentsOfProject','getEquipmentsOfAmbit']; + case 2: // Administrador + return ['home', + 'createProject','processStep1','articulated_2', + 'showAllClientsForProjectReports', + 'manageAssets', + 'users.company','users.Show','users.edit','users.destroy','users.update','users.list', + 'CreateUsers', + 'enviar.formulario', + 'projectDetails_1','workStation_3','addFurtherTasks','deleteFurtherTasks', + + ]; + + // Adicione mais casos conforme necessário... default: @@ -76,7 +89,7 @@ protected function getAllowedRoutesForUserType($userType) protected function getDefaultRouteForUserType($userType) { switch ($userType) { - case 1: // Super_Administrador + case 2: // Administrador return 'home'; case 5: // Técnico return 'enterWorkstation'; diff --git a/app/Http/ViewComposers/WorkstationComposer.php b/app/Http/ViewComposers/WorkstationComposer.php index 55267d6a..3433c9d7 100755 --- a/app/Http/ViewComposers/WorkstationComposer.php +++ b/app/Http/ViewComposers/WorkstationComposer.php @@ -6,6 +6,8 @@ use App\Models\ControlEquipmentWorkstation; use App\Models\Equipment; use App\Models\EquipmentWorkHistory; +use App\Models\OrderEquipmentTasks; +use App\Models\QrcodesAssociatedEquipment; use App\Models\User; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; @@ -21,25 +23,175 @@ public function compose(View $view) $receiveDataWs = ConstructionWorkstation::where('name_workstations', $receiveDataEmail->user_name)->first(); - $receiveAllEquipmentOfProject = Equipment::where('company_projects_id', $receiveDataWs->company_projects_id) - ->whereHas('equipmentWorkHistory', function ($query) use ($receiveDataWs) { - $query->where('company_projects_id', $receiveDataWs->company_projects_id); - }) - ->whereDoesntHave('equipmentWorkHistory.controlEquipmentWorkstation', function ($query) { - $query->whereNull('elemental_tasks_id') - ->whereNull('departure_date'); - }) - ->get(); + // Busca todos os equipamentos associados a um determinado projeto. + + // $receiveAllEquipmentOfProject = Equipment::where('company_projects_id', $receiveDataWs->company_projects_id) + // // Verifica se existe histórico de trabalho associado ao equipamento e ao projeto específico. + // ->whereHas('equipmentWorkHistory', function ($query) use ($receiveDataWs) { + // $query->where('company_projects_id', $receiveDataWs->company_projects_id); + // }) + // // Exclui os equipamentos cujo histórico de trabalho mais recente (controlEquipmentWorkstation) tem 'elemental_tasks_id' e 'departure_date' nulos. + // ->whereDoesntHave('equipmentWorkHistory.controlEquipmentWorkstation', function ($query) { + // $query->where(function ($q) { + // $q->whereNull('elemental_tasks_id') + // ->WhereNull('departure_date') + // ->WhereNotNull('id_workstations'); + // }) ; + // }) + + // // Carrega o histórico de trabalho associado ao equipamento e ao projeto específico. + // ->with([ + // 'equipmentWorkHistory' => function ($query) use ($receiveDataWs) { + // // Filtra o histórico de trabalho pelo 'company_projects_id' para obter os registros relevantes. + // $query->where('company_projects_id', $receiveDataWs->company_projects_id) + // ->select('equipment_id', 'equipmentWorkHistorys_id'); // Seleciona apenas os campos necessários. + // } + // ]) + // ->get() // Obtém os resultados da consulta. + // ->map(function ($equipment) { + // // Supondo que cada equipamento tem apenas um 'equipmentWorkHistory' relevante para este contexto + // if (!$equipment->equipmentWorkHistory->isEmpty()) { + // $equipmentWorkHistory = $equipment->equipmentWorkHistory->first(); + // $equipment->equipmentWorkHistoryId = $equipmentWorkHistory->equipmentWorkHistorys_id; + // } else { + // // Definir como null ou algum valor padrão se não houver histórico correspondente + // $equipment->equipmentWorkHistoryId = null; + // } + // return $equipment; + // }); + + // $receiveAllEquipmentOfProject = Equipment::where('company_projects_id', $receiveDataWs->company_projects_id) + // // Primeiro filtro: Equipamentos sem ocorrência em ControlEquipmentWorkstation + // ->whereDoesntHave('equipmentWorkHistory.controlEquipmentWorkstation') + // // Segundo filtro: Equipamentos com ocorrências onde id_workstations e elemental_tasks_id são nulos + // ->orWhereHas('equipmentWorkHistory.controlEquipmentWorkstation', function ($query) { + // $query->whereNull('id_workstations') + // ->whereNull('elemental_tasks_id'); + // }) + // // Terceiro filtro: Equipamentos com todas as ocorrências onde id_workstations, elemental_tasks_id e departure_date não são nulos + // ->orWhereHas('equipmentWorkHistory.controlEquipmentWorkstation', function ($query) { + // $query->whereNotNull('id_workstations') + // ->whereNotNull('elemental_tasks_id') + // ->whereNotNull('departure_date'); + // }) + // // Carrega o histórico de trabalho associado ao equipamento e ao projeto específico + // ->with([ + // 'equipmentWorkHistory' => function ($query) use ($receiveDataWs) { + // $query->where('company_projects_id', $receiveDataWs->company_projects_id) + // ->select('equipment_id', 'equipmentWorkHistorys_id'); + // } + // ]) + // ->get() + // ->map(function ($equipment) { + // if (!$equipment->equipmentWorkHistory->isEmpty()) { + // $equipmentWorkHistory = $equipment->equipmentWorkHistory->first(); + // $equipment->equipmentWorkHistoryId = $equipmentWorkHistory->equipmentWorkHistorys_id; + // } else { + // $equipment->equipmentWorkHistoryId = null; + // } + // return $equipment; + // }); + + + $receiveAllEquipmentOfProject = Equipment::where('company_projects_id', $receiveDataWs->company_projects_id) + ->where(function ($query) use ($receiveDataWs) { + // Primeiro filtro: Equipamentos sem ocorrência em ControlEquipmentWorkstation + $query->whereDoesntHave('equipmentWorkHistory.controlEquipmentWorkstation'); + + // Segundo filtro: Equipamentos com ocorrências onde id_workstations e elemental_tasks_id são nulos + $query->orWhereHas('equipmentWorkHistory.controlEquipmentWorkstation', function ($subQuery) { + $subQuery->whereNull('id_workstations') + ->whereNull('elemental_tasks_id'); + }); + + // Terceiro filtro: Equipamentos com todas as ocorrências onde id_workstations, elemental_tasks_id e departure_date não são nulos + // Inclui a condição para elemental_tasks_id = 9 + $query->orWhereHas('equipmentWorkHistory.controlEquipmentWorkstation', function ($subQuery) { + $subQuery->whereNotNull('id_workstations') + ->where(function ($innerQuery) { + $innerQuery->whereNotNull('elemental_tasks_id') + ->whereNotNull('departure_date') + ->orWhere('elemental_tasks_id', 9); // Inclui equipamentos com elemental_tasks_id = 9 independentemente de outros critérios + }); + }); + }) + ->with([ + 'equipmentWorkHistory' => function ($query) use ($receiveDataWs) { + $query->where('company_projects_id', $receiveDataWs->company_projects_id) + ->select('equipment_id', 'equipmentWorkHistorys_id'); + } + ]) + ->get() + ->map(function ($equipment) { + if (!$equipment->equipmentWorkHistory->isEmpty()) { + $equipmentWorkHistory = $equipment->equipmentWorkHistory->first(); + $equipment->equipmentWorkHistoryId = $equipmentWorkHistory->equipmentWorkHistorys_id; + } else { + $equipment->equipmentWorkHistoryId = null; + } + return $equipment; + }); + + + + $completedEquipments = collect(); // Coleção para armazenar equipamentos concluídos + + 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 + + // Verifica se existe um workHistoryId antes de prosseguir + if (is_null($workHistoryId)) { + continue; // Se não houver histórico de trabalho, continua para o próximo equipamento + } + + $taskIds = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $workHistoryId) + ->pluck('elemental_tasks_id'); // Obter IDs de tarefas elementares baseado em um único workHistoryId + + if ($taskIds->isEmpty()) { + continue; // Se não houver tarefas, continua para o próximo equipamento + } + + $workstationTaskCounts = ControlEquipmentWorkstation::whereIn('elemental_tasks_id', $taskIds) + ->select('elemental_tasks_id', DB::raw('count(*) as total')) + ->groupBy('elemental_tasks_id') + ->pluck('total', 'elemental_tasks_id'); // Contagem de tarefas nas estações de trabalho + + // Verificar se todas as tarefas foram concluídas pelo menos uma vez + $allTasksCompleted = $taskIds->every(function ($taskId) use ($workstationTaskCounts) { + return isset ($workstationTaskCounts[$taskId]) && $workstationTaskCounts[$taskId] >= 1; + }); + + if ($allTasksCompleted && $workstationTaskCounts->count() >= $taskIds->count()) { + $completedEquipments->push($equipment); // Adicionar equipamento à lista de concluídos + } + } + + // Remover equipamentos concluídos da coleção original + $receiveAllEquipmentOfProject = $receiveAllEquipmentOfProject->reject(function ($equipment) use ($completedEquipments) { + return $completedEquipments->contains($equipment); + }); + + + $equipmentIds = $receiveAllEquipmentOfProject->pluck('equipment_id'); + + $receiveQrcodeEquipmentsProject = QrcodesAssociatedEquipment::whereIn('equipment_id', $equipmentIds)->get(); + + //VAMOS filtrar os valores recebidos e terar todas as correspondencias de Flange, ja nao e uma tag que nao vai entrar no percurso do Equipamento. + $filteredQrcodeEquipments = $receiveQrcodeEquipmentsProject->reject(function ($item) { + return strpos($item->component_tag, '@Flange') !== false; + }); + - $receiceCountAllEquipmentOfProject = count($receiveAllEquipmentOfProject); //Returning values of the queries to workstations layout $view->with([ 'receiveAllEquipmentOfProject' => $receiveAllEquipmentOfProject, - 'receiceCountAllEquipmentOfProject' => $receiceCountAllEquipmentOfProject, + // foi alterado para a variavel 'filteredQrcodeEquipments' pois nao tem a necessidade do utilizador selecionar 'Flange'(AINDA NAO !) + 'receiveQrcodeEquipmentsProject' => $filteredQrcodeEquipments, + 'completedEquipments' => $completedEquipments, 'receiveDataWs' => $receiveDataWs, ]); - } } diff --git a/public/user_logos/1707911835.jpg b/public/user_logos/1707911835.jpg new file mode 100644 index 00000000..ce91928d Binary files /dev/null and b/public/user_logos/1707911835.jpg differ diff --git a/resources/views/Admin/CrudUsers/editUsers.blade.php b/resources/views/Admin/CrudUsers/editUsers.blade.php index fd23f467..a3a34aa6 100755 --- a/resources/views/Admin/CrudUsers/editUsers.blade.php +++ b/resources/views/Admin/CrudUsers/editUsers.blade.php @@ -21,7 +21,7 @@
-
+
Editar Utilizador : {{ $user->user_name }}
@@ -33,14 +33,14 @@
-
+
-
+
@@ -50,14 +50,14 @@
-
+
-
+
@@ -67,14 +67,14 @@
-
+
-
+
@@ -82,17 +82,20 @@
-
+
diff --git a/resources/views/Admin/CrudUsers/listCompany.blade.php b/resources/views/Admin/CrudUsers/listCompany.blade.php index 6fb588f3..b924ed62 100755 --- a/resources/views/Admin/CrudUsers/listCompany.blade.php +++ b/resources/views/Admin/CrudUsers/listCompany.blade.php @@ -57,13 +57,13 @@ class="actions-btn btn btn-light circle "> - {{-- --}} -
@@ -2116,21 +2169,26 @@ class="form-control select2" style="width: 100%;" class="form-control select2" style="width: 100%;" @if ($task_todo->cardTypeStyle == 'gray') disabled @endif> + @if (isset($task_todo->formatted_answers['valve_adjustment_rings']) && + $task_todo->formatted_answers['valve_adjustment_rings'] == 'ok') selected @endif> + Está OK + @if (isset($task_todo->formatted_answers['valve_adjustment_rings']) && + $task_todo->formatted_answers['valve_adjustment_rings'] == 'replace') selected @endif> + É para substituir + @if (isset($task_todo->formatted_answers['valve_adjustment_rings']) && + $task_todo->formatted_answers['valve_adjustment_rings'] == 'reparar') selected @endif> + Reparar + @if (isset($task_todo->formatted_answers['valve_adjustment_rings']) && + $task_todo->formatted_answers['valve_adjustment_rings'] == 'accept') selected @endif> + Aceitar
@@ -2145,23 +2203,29 @@ class="form-control select2" style="width: 100%;"
@@ -2173,25 +2237,26 @@ class="form-control select2" @if ($task_todo->cardTypeStyle == 'gray') disabled
-
@@ -2214,10 +2279,13 @@ class="form-control select2" style="width: 100%;" style="color: red;">*
- cardTypeStyle == 'gray') readonly @endif required> + cardTypeStyle == 'gray') readonly @endif + required>
@@ -2232,8 +2300,10 @@ class="form-control select2" style="width: 100%;" cardTypeStyle == 'gray') readonly @endif required> + style="width: 100%;" placeholder="" + value="{{ $task_todo->formatted_answers['spring_diameter'] ?? '' }}" + @if ($task_todo->cardTypeStyle == 'gray') readonly @endif + required>
@@ -2246,10 +2316,12 @@ class="form-control select2" style="width: 100%;"
cardTypeStyle == 'gray') readonly @endif required> + name="ID5[spring_diameter_ext-number]" + type="number" step="0.01" class="form-control" + style="width: 100%;" placeholder="" + value="{{ $task_todo->formatted_answers['spring_diameter_ext'] ?? '' }}" + @if ($task_todo->cardTypeStyle == 'gray') readonly @endif + required>
@@ -2262,10 +2334,12 @@ class="form-control select2" style="width: 100%;"
cardTypeStyle == 'gray') readonly @endif required> + name="ID5[spring_pitch_glands-number]" + type="number" step="1" class="form-control" + style="width: 100%;" placeholder="" + value="{{ $task_todo->formatted_answers['spring_pitch_glands'] ?? '' }}" + @if ($task_todo->cardTypeStyle == 'gray') readonly @endif + required>
@@ -2278,10 +2352,12 @@ class="form-control select2" style="width: 100%;"
cardTypeStyle == 'gray') readonly @endif required> + name="ID5[spring_number_glands-number]" + type="number" step="1" class="form-control" + style="width: 100%;" placeholder="" + value="{{ $task_todo->formatted_answers['spring_number_glands'] ?? '' }}" + @if ($task_todo->cardTypeStyle == 'gray') readonly @endif + required>
@@ -2289,7 +2365,8 @@ class="form-control select2" style="width: 100%;"
-
@@ -2304,11 +2381,11 @@ class="form-control select2" style="width: 100%;" @if ($task_todo->cardTypeStyle != 'gray') - + @endif
@@ -2906,7 +2983,7 @@ class="btn btn-primary float-right">Guardar @if ($task_todo->elemental_tasks_id == 7) - +
@@ -2927,7 +3004,7 @@ class="btn btn-primary float-right">Guardar action="{{ route('receiveAnswersEquipment', $dataControlEquipment->control_equipment_workstation_id) }}" method="POST" id="form7"> @csrf - +
@@ -2940,13 +3017,14 @@ class="btn btn-primary float-right">Guardar
formatted_answers['validate_technical_specifications'] ?? '' == 'on') checked @endif @if ($task_todo->cardTypeStyle == 'gray') disabled @endif required>
@@ -2956,7 +3034,7 @@ class="btn btn-primary float-right">Guardar
@@ -2976,15 +3054,22 @@ class="btn btn-primary float-right">Guardar
@@ -2994,23 +3079,22 @@ class="form-control select2"
- +
@@ -3019,23 +3103,21 @@ class="form-control select2"
- +
@@ -3058,16 +3140,16 @@ class="form-control select2"
@@ -3076,23 +3158,23 @@ class="form-control select2" required
- +
@@ -3101,8 +3183,7 @@ class="form-control select2"
- +
@@ -3126,8 +3207,8 @@ class="form-control select2"
-
@@ -3136,14 +3217,14 @@ class="form-control select2" class="form-control select2" @if ($task_todo->cardTypeStyle == 'gray') disabled @endif> + @if ($task_todo->formatted_answers['components_seal'] ?? '' == 'yes') selected @endif> + Sim + @if ($task_todo->formatted_answers['components_seal'] ?? '' == 'no') selected @endif> + Nao + @if ($task_todo->formatted_answers['components_seal'] ?? '' == 'n_a') selected @endif> + N/A
@@ -3152,8 +3233,7 @@ class="form-control select2"
- +
@@ -3186,14 +3266,14 @@ class="form-control select2" class="form-control select2" @if ($task_todo->cardTypeStyle == 'gray') disabled @endif> + @if ($task_todo->formatted_answers['components_knob'] ?? '' == 'yes') selected @endif> + Sim + @if ($task_todo->formatted_answers['components_knob'] ?? '' == 'no') selected @endif> + Nao + @if ($task_todo->formatted_answers['components_knob'] ?? '' == 'n_a') selected @endif> + N/A @@ -3202,8 +3282,7 @@ class="form-control select2"
- +
@@ -3269,36 +3348,42 @@ class="btn btn-primary float-right">Guardar method="POST" id="form8"> @csrf -
+
- -
-
- -
-
- -
+ +
+
+
- - -
- - - @if ($task_todo->cardTypeStyle != 'gray') - + + +
+ + + @if ($task_todo->cardTypeStyle != 'gray') + + @endif +
- + @endif @@ -3307,7 +3392,7 @@ class="btn btn-primary float-right">Guardar
+ style="background-color: {{ $task_todo->cardTypeStyle }}">

{{ $task_todo->elementalTask->elemental_tasks_code }} - @@ -3324,7 +3409,7 @@ class="btn btn-primary float-right">Guardar action="{{ route('receiveAnswersEquipment', $dataControlEquipment->control_equipment_workstation_id) }}" method="POST" id="form9"> @csrf - +
@@ -3340,10 +3425,9 @@ class="btn btn-primary float-right">Guardar
cardTypeStyle == 'gray') readonly @endif - required> + type="number" step="0.01" class="form-control" + value="{{ $task_todo->formatted_answers['seat_phi_int'] ?? '' }}" + @if ($task_todo->cardTypeStyle == 'gray') readonly @endif required>

@@ -3356,10 +3440,9 @@ class="form-control" value="{{ $task_todo->formatted_answers['seat_phi_int'] ??
cardTypeStyle == 'gray') readonly @endif - required> + type="number" step="0.01" class="form-control" + value="{{ $task_todo->formatted_answers['seat_phi_ext'] ?? '' }}" + @if ($task_todo->cardTypeStyle == 'gray') readonly @endif required>
@@ -3371,35 +3454,31 @@ class="form-control" value="{{ $task_todo->formatted_answers['seat_phi_ext'] ??
- +
cardTypeStyle == 'gray') readonly @endif - required> + type="number" step="0.01" class="form-control" + value="{{ $task_todo->formatted_answers['shutter_cam'] ?? '' }}" + @if ($task_todo->cardTypeStyle == 'gray') readonly @endif required>
- + @if ($task_todo->cardTypeStyle != 'gray') - + @endif - + - - @endif @@ -3426,311 +3505,362 @@ class="btn btn-primary float-right">Guardar action="{{ route('receiveAnswersEquipment', $dataControlEquipment->control_equipment_workstation_id) }}" method="POST" id="form10"> @csrf -
- +
+ - -
-
- formatted_answers['confirm_label_compliance']) && - $task_todo->formatted_answers['confirm_label_compliance'] == 'on') checked @endif - @if ($task_todo->cardTypeStyle == 'gray') disabled @endif required> - -
-
- - -
-
- -
-
- -
+ +
+
+ formatted_answers['confirm_label_compliance']) && + $task_todo->formatted_answers['confirm_label_compliance'] == 'on') checked @endif + @if ($task_todo->cardTypeStyle == 'gray') disabled @endif required> +
- +
- -
-
- -
-
- -
+ + + + +
+
+
- - - -
-
- -
-
- -
+
+
- +
+ - -
-
- -
-
- -
+ +
+
+
- - - -
-
- -
-
- -
+
+
- +
+ - -
-
- -
-
- -
+ +
+
+
- - - -
-
- -
-
- -
+
+
- +
+ - -
-
- -
-
- -
+ +
+
+
- - - -
-
- -
-
- -
+
+
- +
+ - -
-
- -
-
- -
+ +
+
+
- - - - -
- - - @if ($task_todo->cardTypeStyle != 'gray') - + + + +
+
+ +
+
+ +
+
+ + + +
+
+ +
+
+ +
+
+ + + +
+
+ +
+
+ +
+
+ + + +
+
+ +
+
+ +
+
+ + + +
+
+ +
+
+ +
+
+ + + + +
+ + + @if ($task_todo->cardTypeStyle != 'gray') + + @endif
-
+
@endif - + + + + @if ($task_todo->elemental_tasks_id == 11)
@@ -3754,7 +3884,7 @@ class="btn btn-primary float-right">Guardar action="{{ route('receiveAnswersEquipment', $dataControlEquipment->control_equipment_workstation_id) }}" method="POST" id="form11"> @csrf - +
@@ -3774,26 +3904,26 @@ class="btn btn-primary float-right">Guardar
-
@@ -3803,29 +3933,32 @@ class="form-control select2"
- +
@@ -3835,29 +3968,28 @@ class="form-control select2"
- +
-
@@ -3867,29 +3999,28 @@ class="form-control select2"
- +
-
@@ -3906,22 +4037,26 @@ class="form-control select2"
@@ -3931,29 +4066,28 @@ class="form-control select2"
- +
-
@@ -3963,29 +4097,28 @@ class="form-control select2"
- +
-
@@ -3999,29 +4132,32 @@ class="form-control select2"
- +
@@ -4031,29 +4167,30 @@ class="form-control select2"
- +
@@ -4063,29 +4200,33 @@ class="form-control select2"
- +
@@ -4102,22 +4243,27 @@ class="form-control select2"
@@ -4127,29 +4273,33 @@ class="form-control select2"
- +
@@ -4170,22 +4320,27 @@ class="form-control select2"
@@ -4202,22 +4357,27 @@ class="form-control select2"
@@ -4234,22 +4394,27 @@ class="form-control select2"
@@ -4266,22 +4431,27 @@ class="form-control select2"
@@ -4298,22 +4468,27 @@ class="form-control select2"
@@ -4323,29 +4498,33 @@ class="form-control select2"
- +
@@ -4374,22 +4553,27 @@ class="form-control select2"
@@ -4406,22 +4590,27 @@ class="form-control select2"
@@ -4441,8 +4630,7 @@ class="form-control select2"
cardTypeStyle == 'gray') readonly @endif>
@@ -4474,8 +4662,8 @@ class="form-control"
cardTypeStyle == 'gray') readonly @endif>
@@ -4491,8 +4679,8 @@ class="form-control" placeholder=""
cardTypeStyle == 'gray') readonly @endif>
@@ -4508,8 +4696,8 @@ class="form-control" placeholder=""
cardTypeStyle == 'gray') readonly @endif>
@@ -4523,13 +4711,11 @@ class="form-control" placeholder=""
- +
- cardTypeStyle == 'gray') readonly @endif>
@@ -4539,13 +4725,11 @@ class="form-control" placeholder=""
- +
cardTypeStyle == 'gray') readonly @endif>
@@ -4560,9 +4744,8 @@ class="form-control"
cardTypeStyle == 'gray') readonly @endif>
@@ -4576,11 +4759,11 @@ class="form-control" style="color: red;">*
- cardTypeStyle == 'gray') readonly @endif > + value="{{ $task_todo->formatted_answers['seal_material'] ?? '' }}" + required + @if ($task_todo->cardTypeStyle == 'gray') readonly @endif>
@@ -4593,11 +4776,11 @@ class="form-control"
cardTypeStyle == 'gray') readonly @endif > + name="ID11[seal_phi_int-number]" type="number" + step="0.01" class="form-control" placeholder="" + value="{{ $task_todo->formatted_answers['seal_phi_int'] ?? '' }}" + required + @if ($task_todo->cardTypeStyle == 'gray') readonly @endif>
@@ -4610,11 +4793,11 @@ class="form-control" placeholder=""
cardTypeStyle == 'gray') readonly @endif > + name="ID11[seal_phi_ext-number]" type="number" + step="0.01" class="form-control" placeholder="" + value="{{ $task_todo->formatted_answers['seal_phi_ext'] ?? '' }}" + required + @if ($task_todo->cardTypeStyle == 'gray') readonly @endif>
@@ -4627,11 +4810,11 @@ class="form-control" placeholder=""
cardTypeStyle == 'gray') readonly @endif > + name="ID11[seal_thickness-number]" type="number" + step="0.01" class="form-control" placeholder="" + value="{{ $task_todo->formatted_answers['seal_thickness'] ?? '' }}" + required + @if ($task_todo->cardTypeStyle == 'gray') readonly @endif>
@@ -4642,7 +4825,7 @@ class="form-control" placeholder=""
- + @if ($task_todo->cardTypeStyle != 'gray') @endif -
+ - - - @endif @@ -4684,7 +4864,7 @@ class="btn btn-primary float-right">Guardar action="{{ route('receiveAnswersEquipment', $dataControlEquipment->control_equipment_workstation_id) }}" method="POST" id="form12"> @csrf - +
@@ -4700,26 +4880,26 @@ class="btn btn-primary float-right">Guardar style="color: red;">*
-
@@ -4729,29 +4909,29 @@ class="form-control select2"
- +
@@ -4761,29 +4941,29 @@ class="form-control select2"
- +
@@ -4799,23 +4979,24 @@ class="form-control select2"
@@ -4825,29 +5006,29 @@ class="form-control select2"
- +
@@ -4857,29 +5038,29 @@ class="form-control select2"
- +
@@ -4889,29 +5070,29 @@ class="form-control select2"
- +
@@ -4921,29 +5102,29 @@ class="form-control select2"
- +
@@ -4957,26 +5138,26 @@ class="form-control select2" style="color: red;">*
-
@@ -4986,29 +5167,29 @@ class="form-control select2"
- +
@@ -5028,8 +5209,8 @@ class="form-control select2"
cardTypeStyle == 'gray') readonly @endif required>
@@ -5045,7 +5226,8 @@ class="form-control" value="{{ $task_todo->formatted_answers['bonnet_gasket_mate
cardTypeStyle == 'gray') readonly @endif required>
@@ -5068,8 +5250,8 @@ class="form-control" value="{{ $task_todo->formatted_answers['bonnet_gasket_mate
cardTypeStyle == 'gray') readonly @endif required>
@@ -5085,8 +5267,8 @@ class="form-control" value="{{ $task_todo->formatted_answers['bonnet_gasket_phi_
cardTypeStyle == 'gray') readonly @endif required>
@@ -5102,8 +5284,8 @@ class="form-control" value="{{ $task_todo->formatted_answers['bonnet_gasket_phi_
cardTypeStyle == 'gray') readonly @endif required>
@@ -5117,13 +5299,12 @@ class="form-control" value="{{ $task_todo->formatted_answers['bonnet_gasket_thic
- +
- cardTypeStyle == 'gray') readonly @endif required>
@@ -5133,13 +5314,12 @@ class="form-control" value="{{ $task_todo->formatted_answers['bonnet_gasket_thic
- +
cardTypeStyle == 'gray') readonly @endif required>
@@ -5154,9 +5334,9 @@ class="form-control" value="{{ $task_todo->formatted_answers['seal_type'] ?? ''
cardTypeStyle == 'gray') readonly @endif required>
@@ -5171,8 +5351,9 @@ class="form-control" value="{{ $task_todo->formatted_answers['seal_material'] ??
cardTypeStyle == 'gray') readonly @endif required>
@@ -5187,9 +5368,9 @@ class="form-control" value="{{ $task_todo->formatted_answers['seal_material'] ??
cardTypeStyle == 'gray') readonly @endif required>
@@ -5204,9 +5385,9 @@ class="form-control" value="{{ $task_todo->formatted_answers['seal_phi_int'] ??
cardTypeStyle == 'gray') readonly @endif required>
@@ -5221,9 +5402,9 @@ class="form-control" value="{{ $task_todo->formatted_answers['seal_phi_ext'] ??
cardTypeStyle == 'gray') readonly @endif required>
@@ -5276,7 +5457,7 @@ class="btn btn-primary float-right">Guardar @csrf
- +
@@ -5285,8 +5466,7 @@ class="btn btn-primary float-right">Guardar
- cardTypeStyle == 'gray') readonly @endif @@ -5304,11 +5484,10 @@ class="form-control float-right"
cardTypeStyle == 'gray') readonly @endif - required> + name="ID13[calibration_pressure-number]" type="number" + step="0.01" class="form-control" placeholder="" + value="{{ $task_todo->formatted_answers['calibration_pressure'] ?? '' }}" + @if ($task_todo->cardTypeStyle == 'gray') readonly @endif required>
@@ -5322,9 +5501,9 @@ class="form-control" placeholder="" value="{{ $task_todo->formatted_answers['cal
cardTypeStyle == 'gray') readonly @endif - required> + class="form-control" placeholder="" + value="{{ $task_todo->formatted_answers['bubbles_minute'] ?? '' }}" + @if ($task_todo->cardTypeStyle == 'gray') readonly @endif required>
@@ -5332,14 +5511,11 @@ class="form-control" placeholder="" value="{{ $task_todo->formatted_answers['bub
- +
- @@ -5386,9 +5562,9 @@ class="form-control select2"
cardTypeStyle == 'gray') readonly @endif>
@@ -5397,13 +5573,22 @@ class="form-control"
- +
- cardTypeStyle == 'gray') disabled @endif> + + +
@@ -5415,12 +5600,10 @@ class="form-control"
- cardTypeStyle == 'gray') readonly @endif - required> + cardTypeStyle == 'gray') readonly @endif required>
@@ -5428,19 +5611,26 @@ class="form-control"
- +
- cardTypeStyle == 'gray') disabled @endif> + +
- + @if ($task_todo->cardTypeStyle != 'gray')
-
-
+
+
@csrf - +
@@ -5885,9 +6076,9 @@ class="btn btn-primary float-right">Guardar
cardTypeStyle == 'gray') readonly @endif required>
@@ -5902,9 +6093,9 @@ class="btn btn-primary float-right">Guardar
cardTypeStyle == 'gray') readonly @endif required>
@@ -5918,9 +6109,9 @@ class="btn btn-primary float-right">Guardar
cardTypeStyle == 'gray') readonly @endif required>
@@ -5934,9 +6125,9 @@ class="btn btn-primary float-right">Guardar
cardTypeStyle == 'gray') readonly @endif required>
@@ -5950,9 +6141,9 @@ class="btn btn-primary float-right">Guardar
cardTypeStyle == 'gray') readonly @endif required>
@@ -5966,9 +6157,9 @@ class="btn btn-primary float-right">Guardar
cardTypeStyle == 'gray') readonly @endif required>
@@ -5982,9 +6173,9 @@ class="btn btn-primary float-right">Guardar
cardTypeStyle == 'gray') readonly @endif required>
@@ -5994,12 +6185,20 @@ class="btn btn-primary float-right">Guardar
- +
- cardTypeStyle == 'gray') disabled @endif + required> + +
@@ -6008,12 +6207,20 @@ class="btn btn-primary float-right">Guardar
- +
- cardTypeStyle == 'gray') disabled @endif + required> + +
@@ -6029,9 +6236,9 @@ class="btn btn-primary float-right">Guardar
cardTypeStyle == 'gray') readonly @endif required>
@@ -6045,9 +6252,9 @@ class="form-control" placeholder="" value="{{ $task_todo->formatted_answers['val
cardTypeStyle == 'gray') readonly @endif required>
@@ -6061,11 +6268,11 @@ class="form-control" placeholder="" value="{{ $task_todo->formatted_answers['val
cardTypeStyle == 'gray') readonly @endif - required> + required>
@@ -6077,11 +6284,11 @@ class="form-control" placeholder="" value="{{ $task_todo->formatted_answers['val
cardTypeStyle == 'gray') readonly @endif - required> + required>
@@ -6093,11 +6300,11 @@ class="form-control" placeholder="" value="{{ $task_todo->formatted_answers['val
cardTypeStyle == 'gray') readonly @endif - required> + required>
@@ -6112,12 +6319,20 @@ class="form-control" placeholder="" value="{{ $task_todo->formatted_answers['val
- +
- cardTypeStyle == 'gray') disabled @endif + required> + +
@@ -6126,12 +6341,20 @@ class="form-control" placeholder="" value="{{ $task_todo->formatted_answers['val
- +
- cardTypeStyle == 'gray') disabled @endif + required> + +
@@ -6140,12 +6363,20 @@ class="form-control" placeholder="" value="{{ $task_todo->formatted_answers['val
- +
- cardTypeStyle == 'gray') disabled @endif + required> + +
@@ -6162,8 +6393,8 @@ class="form-control" placeholder="" value="{{ $task_todo->formatted_answers['val
cardTypeStyle == 'gray') readonly @endif required>
@@ -6180,10 +6411,17 @@ class="form-control" placeholder="" value="{{ $task_todo->formatted_answers['val @@ -6196,9 +6434,8 @@ class="form-control select2" style="color: red;">*
- cardTypeStyle == 'gray') readonly @endif required> @@ -6214,9 +6451,9 @@ class="form-control" placeholder=""
cardTypeStyle == 'gray') readonly @endif required>
@@ -6232,8 +6469,8 @@ class="form-control" placeholder=""
cardTypeStyle == 'gray') readonly @endif required>
@@ -6249,11 +6486,18 @@ class="form-control" placeholder=""
@@ -6274,8 +6518,8 @@ class="form-control select2" - - + + @if ($task_todo->cardTypeStyle != 'gray') - + @endif @@ -6313,134 +6557,133 @@ class="btn btn-primary float-right">Guardar action="{{ route('receiveAnswersEquipment', $dataControlEquipment->control_equipment_workstation_id) }}" method="POST" id="form20"> @csrf -
- -
-
- -
-
- -
+
+ +
+
+
- - - -
-
- -
-
- cardTypeStyle == 'gray') readonly @endif - required> -
+
+
- +
+ - -
-
- -
-
- cardTypeStyle == 'gray') readonly @endif - required> -
-
- - - -
-
-
+ - -
-
-
+
+ +
@if ($task_todo->cardTypeStyle != 'gray') @@ -6456,8 +6699,8 @@ class="btn btn-primary float-right">Guardar
@endif - - @if ($task_todo->elemental_tasks_id == 21) + + @if ($task_todo->elemental_tasks_id == 21)
Guardar action="{{ route('receiveAnswersEquipment', $dataControlEquipment->control_equipment_workstation_id) }}" method="POST" id="form21"> @csrf - +
- +
formatted_answers['validate_technical_specifications'] ?? '' == 'on') checked @endif - @if ($task_todo->cardTypeStyle == 'gray') disabled @endif - required> + @if ($task_todo->cardTypeStyle == 'gray') disabled @endif required>
- +
- +
- +
- cardTypeStyle == 'gray') readonly @endif - required> + cardTypeStyle == 'gray') readonly @endif required>
- +
- cardTypeStyle == 'gray') readonly @endif - required> + cardTypeStyle == 'gray') readonly @endif required>
- +
- cardTypeStyle == 'gray') readonly @endif - required> + cardTypeStyle == 'gray') readonly @endif required>
- +
- cardTypeStyle == 'gray') readonly @endif - required> + cardTypeStyle == 'gray') readonly @endif required>
- +
- +
- cardTypeStyle == 'gray') readonly @endif - required> + cardTypeStyle == 'gray') readonly @endif required>
- +
- +
- cardTypeStyle == 'gray') readonly @endif - required> + cardTypeStyle == 'gray') readonly @endif required>
- +
- +
- cardTypeStyle == 'gray') readonly @endif - required> + cardTypeStyle == 'gray') readonly @endif required>
- +
@if ($task_todo->cardTypeStyle != 'gray') - + @endif
- - - - @endif + @empty +

O obturador do equipamento selecionado não tem tarefas associadas. Por favor, feche e selecione o obturador de outro equipamento. Este equipamento não inclui a tarefa TE6 - Retificação e lapidação.

+ @endforelse - @endforeach - -
- -
+
@@ -6650,6 +6889,12 @@ class="btn btn-danger float-left">Fechar
+ + + + + + - - - - + {{ $dataControlEquipment->control_equipment_workstation_id }} + + {{-- --}} + + {{-- --}} + + + + @endsection + + \ No newline at end of file diff --git a/routes/web.bak.php b/routes/web.bak.php new file mode 100644 index 00000000..0e2466ce --- /dev/null +++ b/routes/web.bak.php @@ -0,0 +1,301 @@ +name('formulario'); + +Route::post('formulario/receive', [Pending_UserController::class, 'store'])->name('criarUser'); + +Route::post('/register', [CustomRegistrationController::class, 'store'])->name('register'); + + +// Rotas protegidas que exigem esta logado +Route::middleware(['auth'])->group(function () { + + /* + |-------------------------------------------------------------------------- + | User_Type (Super_Administrador) + |-------------------------------------------------------------------------- + |*** Routes unique access to the Super_Administrator, Administrator + + */ + Route::get('usersProfiles/{id}', [userController::class, 'UserProfile'])->name('usersProfiles'); + Route::post('editProfile/{id}', [userController::class, 'EditProfile'])->name('editProfile'); + + + + Route::middleware(['checkUserType:home'])->group(function () { + + Route::get('/', [ProjectoDatacontroller::class, ('HomePage')])->name('home'); + + Route::controller(CreateProjectController::class) + ->group(function () { + //Rotas de Criacao de Obra e de sua visualização da Obra no Planeamento + Route::get('createProject', 'createProjectForStep1')->name('createProject'); + Route::post('newProject1', 'processStep1')->name('processStep1'); + Route::get('articulated_2/{id}', 'showStep2')->name('articulated_2'); + }); + // Pagina de Rolatórios + Route::get('showAllClientsForProjectReports', [ProjectoDatacontroller::class, 'showAllClientsForProjectReports'])->name('showAllClientsForProjectReports'); + + // Pagina de Gestao de Ativos + Route::get('manageAssets', [ProjectoDatacontroller::class, 'ManageAssets'])->name('manageAssets'); + + + /* + |-------------------------------------------------------------------------- + | CRUD - users + |-------------------------------------------------------------------------- + | + */ + Route::controller(userController::class) + ->group(function () { + + Route::get('users/listUsers', 'listUsers')->name('users.list'); //oK + Route::get('users/listCompanies', 'listCompanies')->name('users.company'); //oK + Route::get('users/{id}', 'show')->name('users.Show'); //ok + Route::get('users/{id}/edit', 'edit')->name('users.edit'); // OK + Route::put('users/{user}', 'update')->name('users.update'); //ok + Route::delete('users/{user}', 'destroy')->name('users.destroy'); //ok + + }); + + /* + |-------------------------------------------------------------------------- + | Management of projects created + |-------------------------------------------------------------------------- + | + */ + Route::controller(CreateProjectController::class) + ->group(function () { + + // indication of progress bar to projects that are in 'Planning' + Route::get('projectDetails_1/{id}', 'showStep1')->name('projectDetails_1'); //ok + Route::get('workStation_3/{id}', 'showStep3')->name('workStation_3'); //ok + + // Para adicionar uma tarefa Complementar + Route::post('addFurtherTasks', 'addFurtherTasks')->name('addFurtherTasks'); //ok + Route::post('deleteFurtherTasks', 'deleteFurtherTasks')->name('deleteFurtherTasks'); //ok + + + Route::post('receiveEquipmentToAssociateTasks', 'receiveEquipmentToAssociateTasks')->name('receiveEquipmentToAssociateTasks'); + Route::get('finishCreatingProject/{numberProject}', 'finishCreatingProject')->name('finishCreatingProject'); + Route::get('testDataTables', 'testDataTables')->name('testDataTables'); + Route::get('workstationsAssociationTasks', 'workstationsAssociationTasks')->name('workstationsAssociationTasks'); + Route::get('AddNomenclatureWorkstation', 'AddNomenclatureWorkstation')->name('AddNomenclatureWorkstation'); + Route::get('removeProjectEquipment', 'removeProjectEquipment')->name('removeProjectEquipment'); + Route::delete('deleteWorkstation/{name}', 'deleteWorkstation')->name('deleteWorkstation'); + Route::post('editEquipment', 'EditEquipment')->name('editEquipment'); + Route::post('createWorkStations', 'createWorkStations')->name('createWorkStations'); + + Route::post('projectDetails_1', 'EditprocessStep1')->name('EditprocessStep1'); + Route::post('articulated_2', 'processStep2')->name('processStep2'); + Route::post('articulated_2CreateEquipment', 'createEquipmentManual')->name('articulated_2CreateEquipment'); + Route::post('workStation_3', 'processStep3'); + Route::delete('removeEquipment/{id}', 'removePendingEquipment')->name('removeEquipment'); + Route::post('CreateNewEquipmentFromPendingEquipment/{id}', 'CreateNewEquipmentFromPendingEquipment')->name('CreateNewEquipmentFromPendingEquipment'); + Route::post('create-equipament-project', 'createEquipamentProject')->name('createEquipamentProject'); + Route::get('equipments/{id}/attributes', 'getAttributes'); + + /* + |-------------------------------------------------------------------------- + | Template Excel + |-------------------------------------------------------------------------- + */ + Route::get('template1/{numberProject}', 'receiveUnitsForExcelTemplate')->name('download'); + }); + + Route::get('user-data', [PreparedProjectController::class, 'getData1'])->name('getData'); + Route::get('preparedProject/{ProjectId}', [PreparedProjectController::class, 'PreparedProject'])->name('preparedProject'); + Route::get('EditProjectForArticulated', [PreparedProjectController::class, 'editProjectForArticulated'])->name('EditProjectForArticulated'); + + Route::get('ExecutionProject/{ProjectId}', [ExecutionProjectController::class, 'receiveExecutionProject'])->name('ExecutionProject'); + Route::get('/ReceiveEquipmentIdForShowModal/{EquipmentID}', [ExecutionProjectController::class, 'receiveEquipmentIdForShowModal'])->name('ReceiveEquipmentIdForShowModal '); + + + //Gerir os Ativos gerais + Route::get('units/{id}', [ProjectoDatacontroller::class, 'showUnit'])->name('showUnit'); + + Route::post('enviar-formulario', [FormController::class, 'enviarEmail'])->name('enviar.formulario'); + + Route::get('/CreateUsers/{id}', [Pending_UserController::class, 'ShowFormUser'])->name('ShowPendingUser'); + Route::get('/CreateUsers', [Pending_UserController::class, 'ListPendingUsers'])->name('CreateUsers'); + + // Mostrar Instalação click + + }); + + /*manageAssets + |-------------------------------------------------------------------------- + | User_Type (tecnico) + |-------------------------------------------------------------------------- + |*** Routes unique access to the technical + */ + Route::middleware(['checkUserType:enterWorkstation'])->group(function () { + + Route::get('enterWorkstation', function () { + return view('workstations.start'); + })->name('enterWorkstation'); + + Route::get('/getEquipmentData/{equipment_id}', [WorkstationsJobsController::class, 'getEquipmentData'])->name('getEquipmentData'); + Route::post('receiveAnswersEquipment/{control_equipment_workstation_id}', [WorkstationsJobsController::class, 'receiveAnswersEquipment'])->name('receiveAnswersEquipment'); + }); + + Route::middleware(['checkUserType:testClient'])->group(function () { + // Dashboard + Route::get('dashboardClient', [ClientController::class, 'receiveProjectsClient'])->name('dashboardClient'); + // Relatorios + Route::get('reportingDataClient/{clientID?}', [ClientController::class, 'reportingDataClient'])->name('reportingDataClient'); + //Api + Route::get('/api/receiveMonths/{yearsProjects}', [ClientController::class, 'receiveMonths']); + Route::get('/api/receiveDays/{yearProjects}/{monthProjects}', [ClientController::class, 'receiveDays']); + + // Equipamentos do Cliente + Route::get('manageAssetsClient', [ClientController::class, 'receiveManageAssetsClient'])->name('manageAssetsClient'); + + //Relatorios Obras Concluidas + Route::get('showDataDetailsProjectClient/{projectID?}', [ClientController::class, 'showDataDetailsProjectClient'])->name('showDataDetailsProjectClient'); + //Api + Route::get('getDataAmbitsOfProject', [ClientController::class, 'getDataAmbitsOfProject'])->name('getDataAmbitsOfProject'); + Route::get('getDataEquipmentsOfProject', [ClientController::class, 'getDataEquipmentsOfProject'])->name('getDataEquipmentsOfProject'); + + // Relatorio por Ambito de uma Determinada Obra. + Route::get('showReportingForAmbitsProject/{ambitId}/{projectId}', [ClientController::class, 'showReportingForAmbitsProject'])->name('showReportingForAmbitsProject'); + //Api + Route::get('getEquipmentsOfAmbit', [ClientController::class, 'getEquipmentsOfAmbit'])->name('getEquipmentsOfAmbit'); + + }); + + +}); + + + +route::get('changeStateProject/{projectId}', [CreateProjectController::class, 'changeStateProject'])->name('changeStateProject'); + +route::get('deleteProject/{projectId}', [CreateProjectController::class, 'deleteProject'])->name('deleteProject'); + +Route::get('/checkProjectIsptNumber/{projectId?}', [ProjectoDatacontroller::class, 'checkProjectIsptNumber'])->name('checkProjectIsptNumber'); + +Route::post('deletePendingEquipments', [CreateProjectController::class, 'deletePendingEquipments'])->name('deletePendingEquipments'); + + + +Route::get('showDetailsEquipmentForQrCode/{equipmentId}/{projectId}', [PreparedProjectController::class, 'showDetailsEquipmentForQrCode'])->name('showDetailsEquipmentForQrCode'); + +Route::get('showAllEquipmentsInProjectForQrCode/{projectId}', [PreparedProjectController::class, 'showAllEquipmentsInProjectForQrCode'])->name('showAllEquipmentsInProjectForQrCode'); + + +Route::get('testRelatorio', [ProjectoDatacontroller::class, 'testRelatorio'])->name('testRelatorio'); + + +Route::get('showAllClientsForProjectReportsTable', [ProjectoDatacontroller::class, 'showAllClientsForProjectReportsTable'])->name('showAllClientsForProjectReportsTable'); + + +Route::get('cancelElementalTaskForEquipment/{equipmentID}', [WorkstationsJobsController::class, 'cancelElementalTaskForEquipment'])->name('cancelElementalTaskForEquipment'); + +Route::get('articulated_2/{projectID}/{equipmentID}', [ProjectoDatacontroller::class, 'projectDetails_11'])->name('projectDetails_11'); +Route::get('manageAssets/{equipmentID}', [ProjectoDatacontroller::class, 'articulated_22'])->name('articulated_22'); +Route::get('showAmbitDetailsProjectHistory/{projectID}/{equipmentID}', [ProjectoDatacontroller::class, 'showAmbitDetailsProjectHistory'])->name('showAmbitDetailsProjectHistory'); + + +Route::get('getDataEquipment', [ExecutionProjectController::class, 'getDataEquipment'])->name('getDataEquipment'); + +Route::post('deleteEquipmentInProject', [CreateProjectController::class, 'deleteEquipmentInProject'])->name('deleteEquipmentInProject'); +Route::post('changeAmbitEquipment', [CreateProjectController::class, 'changeAmbitEquipment'])->name('changeAmbitEquipment'); + +Route::get('getDataEquipmentClient', [ExecutionProjectController::class, 'getDataEquipmentClient'])->name('getDataEquipmentClient'); + + +Route::get('getDataProjectsClient', [ClientController::class, 'getDataProjectsClient'])->name('getDataProjectsClient'); +Route::get('showReportingEquipmentProject/{dataEquipment}', [ClientController::class, 'showReportingEquipmentProject'])->name('showReportingEquipmentProject'); //oK + +Route::get('showReportingForAmbitsProjectPdf/{ambitId}/{projectId}', [ClientController::class, 'showReportingForAmbitsProjectPdf'])->name('showReportingForAmbitsProjectPdf'); //ok + +Route::get('getDataAllEquipmentsForAmbitOfProject', [ClientController::class, 'getDataAllEquipmentsForAmbitOfProject'])->name('getDataAllEquipmentsForAmbitOfProject'); + + +Route::post('language/switch', [LanguageController::class, 'switchLanguage'])->name('language.switch'); + + + +// Email +Route::get('/your-verification-route/{id}/{hash}', [UserController::class, 'yourVerificationMethod']) + ->middleware(['auth', 'signed', 'throttle:6,1']) + ->name('verification.verify'); + + + + + + +// *** All api routes have been moved to api.php *** +Route::get('/api/receiveEquipmentsExecutionProject/{receiveNumberProject}', [ExecutionProjectController::class, 'receiveEquipmentsExecutionProject'])->name('receiveEquipmentsExecutionProject'); +Route::get('/api/receiveAllEquipments', [ProjectoDatacontroller::class, 'receiveAllEquipments']); +Route::get('/api/receiveEquipmentsProject/{receiveNumberProject}', [ProjectoDatacontroller::class, 'receiveEquipmentsProject']); +Route::get('/api/receiveWorkstationProject/{receiveNumberProject}', [ProjectoDatacontroller::class, 'receiveWorkstationProject']); +Route::get('/api/getEquipmentDetails/{receiveListEquipmentId}', [ProjectoDatacontroller::class, 'getEquipmentDetails']); +// Route::get('/api/receiveAllInstallationEquipment/{receiveNumberProject}', [ProjectoDatacontroller::class, 'receiveAllInstallationEquipment']); +Route::get('/api/receiveAllInstallationEquipment', [ProjectoDatacontroller::class, 'receiveAllInstallationEquipment'])->name('api_receiveAllInstallationEquipment'); + +Route::get('/api/receveTasksWorkstationPlanning/{WorkstationId}', [CreateProjectController::class, 'receveTasksWorkstationPlanning']); +Route::get('/api/ambits/prepared{equipmentType}', [PreparedProjectController::class, 'getAmbits']); +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/receiveUnits/{numberProject}', [CreateProjectController::class, 'receiveUnits']); + +Route::get('api/receivePlants/{receiveAllClients}', [ProjectoDatacontroller::class, 'receivePlants']); + +Route::get('api/receiveUnitsManageAssets/{receivePlantClientRelated}', [ProjectoDatacontroller::class, 'receiveUnitsManageAssets']); + + + + + + + + +// // Rotas para o tipo de usuário 'Técnico' + +// Rotas para o tipo de usuário 'Empresa' +Route::middleware(['auth', 'checkUserType:dashboardClient'])->group(function () { + Route::get('dashboardClient', [ClientController::class, 'receiveProjectsClient'])->name('dashboardClient'); + // Adicione outras rotas específicas para 'Empresa' aqui +}); \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 5b91afea..ab6e1e7e 100755 --- a/routes/web.php +++ b/routes/web.php @@ -135,7 +135,7 @@ return view('workstations.start'); })->name('enterWorkstation'); - Route::get('/getEquipmentData/{equipment_id}', [WorkstationsJobsController::class, 'getEquipmentData'])->name('getEquipmentData'); + Route::get('/getEquipmentData/{equipment_id}/{component_tag}', [WorkstationsJobsController::class, 'getEquipmentData'])->name('getEquipmentData'); Route::post('receiveAnswersEquipment/{control_equipment_workstation_id}', [WorkstationsJobsController::class, 'receiveAnswersEquipment'])->name('receiveAnswersEquipment'); }); @@ -293,6 +293,18 @@ Route::get('api/receiveUnitsManageAssets/{receivePlantClientRelated}', [ProjectoDatacontroller::class, 'receiveUnitsManageAssets']); +// Route::get('api/reloadWsPage{controlEquipmentId}',[WorkstationsJobsController::class,'reloadWsPage']); +// Route::post('/api/reloadWsPage/{controlEquipmentId}', [WorkstationsJobsController::class, 'reloadWsPage']); +// Route::post('/api/reloadWsPage/{controlEquipmentId}', [WorkstationsJobsController::class, 'reloadWsPage']); + +// Route::post('/api/updateWorkstationStatus/', [WorkstationsJobsController::class, 'updateWorkstationStatus']); +// Route::post('/api/closeWorkstationSession/', [WorkstationsJobsController::class, 'closeWorkstationSession']); + +Route::post('/api/updateSessionStatus/{controlEquipmentId}', [WorkstationsJobsController::class, 'updateSessionStatus']); +Route::post('/api/closeSession/{controlEquipmentId}', [WorkstationsJobsController::class, 'closeSession']); + + +