diff --git a/app/Http/Controllers/WorkstationsJobsController.php b/app/Http/Controllers/WorkstationsJobsController.php index 98a4eb09..97164879 100755 --- a/app/Http/Controllers/WorkstationsJobsController.php +++ b/app/Http/Controllers/WorkstationsJobsController.php @@ -6,10 +6,14 @@ use App\Models\ControlEquipmentWorkstation; use App\Models\ElementalTasks; use App\Models\Equipment; +use App\Models\EquipmentAssociationAmbit; use App\Models\EquipmentComment; use App\Models\EquipmentWorkHistory; use App\Models\HistoryOfEquipmentAmbitsInTheProject; use App\Models\OrderEquipmentTasks; +use App\Models\SpecificAttributesEquipmentType; +use App\Models\TaskEquipmentComment; +use App\Models\TasksAssociationAmbits; use App\Models\workstationsTaskAnswers; use App\Models\ReceiveImagesControlEquipmentWorkstation; // Ajuste o namespace conforme necessário @@ -24,6 +28,85 @@ class WorkstationsJobsController extends Controller { + + public function verifyEquipmentStatusTe7($id) + { + // Verificar a condição no banco de dados + $controlEquipment = ControlEquipmentWorkstation::find($id); + + // Se não encontrar, devolve uma 404 + if (!$controlEquipment) { + return response()->json(['status' => 'not_found'], 404); + } + + // Obter o histórico de trabalho do equipamento + $equipmentWorkHistorys = EquipmentWorkHistory::find($controlEquipment->equipmentWorkHistorys_id); + + if (!$equipmentWorkHistorys) { + return response()->json(['status' => 'not_found', 'message' => 'Histórico de trabalho do equipamento não encontrado'], 404); + } + + // Obter os detalhes do equipamento + $detailsEquipment = Equipment::find($equipmentWorkHistorys->equipment_id); + + if (!$detailsEquipment) { + return response()->json(['status' => 'not_found', 'message' => 'Equipamento não encontrado'], 404); + } + + // Determinar se é um PSV + $isPSV = $detailsEquipment->equipment_type_id == 3; + + // Continuar a verificação no âmbito + $detailsEquipmentAmbit = EquipmentAssociationAmbit::where('equipmentWorkHistorys_id', $controlEquipment->equipmentWorkHistorys_id)->first(); + + if (!$detailsEquipmentAmbit) { + return response()->json(['status' => 'not_found', 'message' => 'Associação do equipamento com âmbito não encontrada'], 404); + } + + $ambitsId = $detailsEquipmentAmbit->ambits_id; + + // Verificar se o âmbito associado possui as tarefas 8 e/ou 9 + $task8Exists = TasksAssociationAmbits::where('ambits_equipment_id', $ambitsId) + ->where('elemental_tasks_id', 8) + ->exists(); + + $task9Exists = $isPSV ? TasksAssociationAmbits::where('ambits_equipment_id', $ambitsId) + ->where('elemental_tasks_id', 9) + ->exists() : false; + + // Lógica para verificar a conclusão das tarefas, se existirem + if ($task8Exists || $task9Exists) { + // Verificar se a tarefa 8 foi completada, se existir + $task8Completed = $task8Exists ? ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $controlEquipment->equipmentWorkHistorys_id) + ->where('elemental_tasks_id', 8) + ->whereNotNull('departure_date') + ->exists() : true; + + // Verificar se a tarefa 9 foi completada, se for PSV e existir + $task9Completed = $task9Exists ? ControlEquipmentWorkstation::where('equipmentWorkHistorys_id', $controlEquipment->equipmentWorkHistorys_id) + ->where('elemental_tasks_id', 9) + ->whereNotNull('departure_date') + ->exists() : true; + + // Retornar resposta com base nos resultados + if ($task8Completed && $task9Completed) { + return response()->json(['status' => true, 'message' => 'Completou todas as tarefas relevantes.']); + } elseif ($task8Completed && !$task9Exists) { + return response()->json(['status' => true, 'message' => 'Tarefa TE5 completada. Tarefa TE6 não é aplicável.']); + } elseif ($task9Completed && !$task8Exists) { + return response()->json(['status' => true, 'message' => 'Tarefa TE6 completada. Tarefa TE5 não é aplicável.']); + } elseif (!$task8Completed && $task8Exists) { + return response()->json(['status' => false, 'message' => 'Tarefa TE5 não foi completada.']); + } elseif (!$task9Completed && $task9Exists) { + return response()->json(['status' => false, 'message' => 'Tarefa TE6 não foi completada.']); + } + } else { + // Se nenhuma tarefa relevante existir no âmbito, considera como completado + return response()->json(['status' => true, 'message' => 'Nenhuma tarefa relevante encontrada no âmbito.']); + } + } + + public function updateSessionStatus(Request $request, $controlEquipmentId) { @@ -40,6 +123,7 @@ public function updateSessionStatus(Request $request, $controlEquipmentId) } + public function receiveQuestionsEquipment($equipmentID) { //Busca os valores do historico do equipamento @@ -81,7 +165,6 @@ public function receiveQuestionsEquipment($equipmentID) } public function receiveAnswersEquipment(Request $request, $control_equipment_workstation_id) { - // dd($control_equipment_workstation_id); //No request recebemos ID(NUmero da tarela elementar) , esta variavel vai receber este ID apos selerar o id da string // $elementalTaskID = 0; // Deve receber as perguntas e respostas para a tarefa selecionada @@ -145,14 +228,25 @@ public function receiveAnswersEquipment(Request $request, $control_equipment_wor // Busca a Ws com base no id recebido da tabela Control. $receiveDataControlWs = ControlEquipmentWorkstation::find($control_equipment_workstation_id); + // Cria um novo comentario para a tarefa em particular. + $newTaskEquipmentComments = new TaskEquipmentComment; + $newTaskEquipmentComments->equipmentWorkHistorys_id = $receiveDataControlWs->equipmentWorkHistorys_id; + $newTaskEquipmentComments->control_equipment_workstation_id = $receiveDataControlWs->control_equipment_workstation_id; + $newTaskEquipmentComments->task_comment = $request->comment; + $newTaskEquipmentComments->save(); + + // Apos ter cria um novo comentario para a tarefa, adiciona na control para relacionar o comentario a tarefa atual + $receiveDataControlWs->task_equipment_comments_id = $newTaskEquipmentComments->task_equipment_comments_id; + $receiveDataControlWs->elemental_tasks_id = $elementalTaskID; $receiveDataControlWs->departure_date = now(); // Vai sempre procurar o primeira ocorrencia que tem o campo : time_change_ambit como null, pois outros dados para este mesmo equipamento seriam considerados Ambitos antigos e ja alterados de acordo com o valor de seu timestamp $receiveHistoryEquipmentAmbits = HistoryOfEquipmentAmbitsInTheProject::where('equipmentWorkHistorys_id', $receiveDataControlWs->equipmentWorkHistorys_id) - ->whereNull('time_change_ambit') - ->first(); - + ->whereNull('time_change_ambit') + ->first(); + + $receiveDataControlWs->history_of_equipment_ambits_id = $receiveHistoryEquipmentAmbits->history_of_equipment_ambits_id; $requestData = $request->all(); @@ -231,6 +325,15 @@ public function getEquipmentData($equipment_id, $component_tag) // Recebe os dados do Equipamento $receiveDataEquipment = Equipment::where('equipment_id', $equipment_id)->first(); + //Recebe os atributos especificos + $specificAttributes = SpecificAttributesEquipmentType::where('equipment_id', $receiveDataEquipment->equipment_id)->get(); + + $specificAttributesArray = []; + + foreach ($specificAttributes as $attribute) { + $specificAttributesArray[$attribute->general_attributes_equipment_id] = $attribute->specific_attributes_value; + } + $tagType = explode('@', $component_tag)[1]; // Isola o tipo da tag após o '@' @@ -240,6 +343,10 @@ public function getEquipmentData($equipment_id, $component_tag) ->where('company_projects_id', $receiveDataEquipment->company_projects_id) ->first(); + //Recebe os dados do Ambito para o equipamento atual + $receiveAmbit = EquipmentAssociationAmbit::where('equipmentWorkHistorys_id', $receiveEquipmentWorkHistory->equipmentWorkHistorys_id)->first(); + + if ($receiveEquipmentWorkHistory && $receiveEquipmentWorkHistory->equipment_status_project == 2) { return redirect()->back()->with('danger', 'O equipamento já está concluído'); } @@ -399,23 +506,24 @@ public function getEquipmentData($equipment_id, $component_tag) $task->cardTypeStyle = 'blue'; // Define o estilo de cor } + // Verifica se o id da tarefa está no array de tarefas que não podem ser feitas elseif (in_array($task->elemental_tasks_id, $divisionElementalTasks[2])) { - $task->cardType = 'card-primary'; - $task->cardTypeStyle = 'gray'; // Define o estilo de cor - - // Consulta ControlEquipmentWorkstation para verificar as condições especificadas - $controlEquipment = ControlEquipmentWorkstation::where('elemental_tasks_id', $task->elemental_tasks_id) + // Consulta se a tarefa já foi feita anteriormente em outro posto + $previouslyCompletedTask = ControlEquipmentWorkstation::where('elemental_tasks_id', $task->elemental_tasks_id) + ->where('equipmentWorkHistorys_id', $task->equipmentWorkHistorys_id) ->whereNotNull('entry_date') ->whereNotNull('departure_date') - ->orderByDesc('departure_date') // Ordena por departure_date de forma decrescente ->first(); - if ($controlEquipment) { - // Se encontrar, atribuir control_equipment_workstation_id - $task->control_equipment_workstation_id = $controlEquipment->control_equipment_workstation_id; + if ($previouslyCompletedTask) { + $task->cardType = 'card-primary'; + $task->cardTypeStyle = '#8CC084'; // Define o estilo de cor laranja para tarefas já feitas em outro posto - //buscar dados na model workstationsTaskAnswers + // Atribui o control_equipment_workstation_id e outras informações, se necessário + $task->control_equipment_workstation_id = $previouslyCompletedTask->control_equipment_workstation_id; + + // Buscar dados na model workstationsTaskAnswers $workstationTaskAnswer = WorkstationsTaskAnswers::where('control_equipment_workstation_id', $task->control_equipment_workstation_id) ->first(); @@ -432,7 +540,9 @@ public function getEquipmentData($equipment_id, $component_tag) // Atribui o array formatado ao task $task->formatted_answers = $formattedAnswers; } - + } else { + $task->cardType = 'card-primary'; + $task->cardTypeStyle = 'gray'; // Define o estilo de cor } } @@ -476,7 +586,7 @@ public function getEquipmentData($equipment_id, $component_tag) return $task; }); - + // 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) @@ -504,12 +614,15 @@ public function getEquipmentData($equipment_id, $component_tag) return $comment; }); + $receiveDataEquipment->istp_number = $receiveEquipmentWorkHistory->ispt_number; + $receiveDataEquipment->equipment_ambit = $receiveAmbit->ambitsEquipment->ambits_description; return view('workstations.workstations', [ // Deve receber o atual COntrol ID ? tudo a vez que atualizar ?? 'receiveComments' => $receiveComments, 'dataControlEquipment' => $receiveDataControlEquipment, 'receiveDataEquipment' => $receiveDataEquipment, + 'specificAttributesArray' => $specificAttributesArray, 'recebeTasksForEquipment' => $recebeTasksForEquipment, 'receiveComponentTag' => $component_tag // 'divisionElementalTasks' => $divisionElementalTasks, diff --git a/app/Http/Middleware/CheckUserType.php b/app/Http/Middleware/CheckUserType.php index 962ec651..dbbe6828 100755 --- a/app/Http/Middleware/CheckUserType.php +++ b/app/Http/Middleware/CheckUserType.php @@ -54,7 +54,7 @@ protected function getAllowedRoutesForUserType($userType) switch ($userType) { case 5: // Técnico - return ['enterWorkstation', 'getEquipmentData', 'receiveAnswersEquipment']; + return ['enterWorkstation', 'getEquipmentData', 'receiveAnswersEquipment','sendTaskComment']; case 3: // Empresa return ['dashboardClient','reportingDataClient', 'manageAssetsClient','usersProfiles', // Obras em Execussao diff --git a/app/Models/EquipmentWorkHistory.php b/app/Models/EquipmentWorkHistory.php index 0b419078..c7306370 100644 --- a/app/Models/EquipmentWorkHistory.php +++ b/app/Models/EquipmentWorkHistory.php @@ -32,6 +32,11 @@ public function controlEquipmentWorkstation() return $this->hasMany(ControlEquipmentWorkstation::class, 'equipmentWorkHistorys_id', 'equipmentWorkHistorys_id'); } + public function taskEquipmentComment() + { + return $this->hasMany(TaskEquipmentComment::class, 'equipmentWorkHistorys_id', 'equipmentWorkHistorys_id'); + } + public function equipmentAssociationAmbit() { return $this->hasOne(EquipmentAssociationAmbit::class, 'equipmentWorkHistorys_id', 'equipmentWorkHistorys_id'); diff --git a/app/Models/TaskEquipmentComment.php b/app/Models/TaskEquipmentComment.php new file mode 100644 index 00000000..530d6ea3 --- /dev/null +++ b/app/Models/TaskEquipmentComment.php @@ -0,0 +1,26 @@ +belongsTo(EquipmentWorkHistory::class, 'equipmentWorkHistorys_id', 'equipmentWorkHistorys_id'); + } + +} diff --git a/resources/views/Templates/templateWorkstations.blade.php b/resources/views/Templates/templateWorkstations.blade.php index 478d4941..315cdfb3 100755 --- a/resources/views/Templates/templateWorkstations.blade.php +++ b/resources/views/Templates/templateWorkstations.blade.php @@ -41,6 +41,49 @@ border: 1px solid #56606a; color: #fff; } + + /* Css para icon de validacao da TE7 */ + .info-icon { + width: 25px; + height: 25px; + background-color: #dc3545; + /* Vermelho por padrão */ + color: white; + text-align: center; + line-height: 25px; + border-radius: 50%; + cursor: pointer; + font-weight: bold; + font-size: 18px; + } + + .info-box { + display: none; + position: absolute; + top: -35px; + /* Ajuste para posicionar acima do ícone */ + left: 50%; + /* Alinhar ao centro do ícone */ + transform: translateX(-50%); + padding: 10px; + background-color: #343a40; + color: #fff; + border-radius: 5px; + white-space: nowrap; + z-index: 10; + } + + .info-box.green { + background-color: #28a745; + /* Verde */ + } + + .info-box.red { + background-color: #dc3545; + /* Vermelho */ + } + + /* /* Css para icon de validacao da TE7 */ @@ -153,30 +196,9 @@ class="brand-image img-circle elevation-3" style="opacity: .8">


-