receiveTasksRepository = app(ReceiveTasksRepository::class); // // Agora você pode usar o repositório // $this->receiveElementalTasks = $this->receiveTasksRepository->getElementalTasks(); // $this->receiveAllFurtherTasks = $this->receiveTasksRepository->getFurtherTasks(); // } public function updateTimeGrafics() { // Data atual $this->lastUpdated = now()->format('Y-m-d H:i'); // Chame o método para atualizar os dados dos gráficos $this->refreshDataEquipments($this->datasProject); // Disparar um evento com os dados atualizados $this->dispatch('refreshData', [ 'receiveElementalTasks' => $this->receiveElementalTasks, 'receiveElementalTasksAll' => $this->receiveElementalTasksAll, ]); } // Graficos de porcentagem entre o valor atual de finalizadas com valor final de quantas faltam public function showPercentageElementalTasks() { // Disparar um evento com os dados atualizados $this->dispatch('refreshPercentageElementalTasks', [ 'receiveElementalTasks' => $this->receiveElementalTasks, 'receiveElementalTasksAll' => $this->receiveElementalTasksAll, 'countElementalTasksAll' => $this->countElementalTasksAll ]); } public function mount($datasProject) { $this->datasProject = $datasProject; // Obter todos os equipamentos relacionados ao projeto $receiveEquipmentsProject = EquipmentWorkHistory::where('company_projects_id', $datasProject->company_projects_id)->get(); $elementalTasks = collect(); $furtherTasks = collect(); // Total de tarefas na Obra. $elementalTasksCountsAll = []; foreach ($receiveEquipmentsProject as $equipment) { // Obter todas as OrderEquipmentTasks relacionadas a este equipamento $relatedTasks = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $equipment->equipmentWorkHistorys_id)->get(); // Filtrar e armazenar os IDs únicos de elemental_tasks_id e further_tasks_id $elementalTasks = $elementalTasks->merge($relatedTasks->whereNotNull('elemental_tasks_id')->pluck('elemental_tasks_id'))->unique(); $furtherTasks = $furtherTasks->merge($relatedTasks->whereNotNull('further_tasks_id')->pluck('further_tasks_id'))->unique(); // Agrupar as tasks relacionadas por elemental_tasks_id e contar o número de ocorrências $groupedTasks = $relatedTasks->whereNotNull('elemental_tasks_id')->groupBy('elemental_tasks_id'); foreach ($groupedTasks as $taskId => $tasksGroup) { if (isset($elementalTasksCountsAll[$taskId])) { $elementalTasksCountsAll[$taskId] += count($tasksGroup); } else { $elementalTasksCountsAll[$taskId] = count($tasksGroup); } } } $this->receiveElementalTasksAll = $elementalTasksCountsAll; // Contar o número de ocorrências de cada ID na tabela ControlEquipmentWorkstation $furtherTasksCount1 = ControlEquipmentWorkstation::whereIn('further_tasks_id', $furtherTasks)->get()->countBy('further_tasks_id'); $tasksCount = ControlEquipmentWorkstation::whereIn('elemental_tasks_id', $elementalTasks) ->distinct('equipmentWorkHistorys_id', 'elemental_tasks_id') // Obter combinações únicas ->get(['equipmentWorkHistorys_id', 'elemental_tasks_id']) // Selecionar apenas os campos necessários ->groupBy('elemental_tasks_id') // Agrupar pelo ID da tarefa elemental ->map(function ($group) { return $group->unique('equipmentWorkHistorys_id')->count(); // Contar ocorrências únicas por equipmentWorkHistorys_id }); $newArray = []; foreach ($tasksCount as $taskId => $count) { $task = ElementalTasks::find($taskId); if ($task) { $newArray[$task->elemental_tasks_code] = $count; } } $this->receiveElementalTasks = $newArray; $newArray1 = []; foreach ($this->receiveElementalTasksAll as $taskId1 => $count) { $task1 = ElementalTasks::find($taskId1); if ($task1) { $newArray1[$task1->elemental_tasks_code] = $count; } } // Agora, $newArray contém a contagem de tasks por elemental_tasks_code $this->receiveElementalTasksAll = $newArray1; // Criar o contador para receber o valor total. $this->countElementalTasksAll = array_sum($this->receiveElementalTasksAll); $this->lastUpdated = now()->format('Y-m-d H:i'); } public function refreshDataEquipments($datasProject) { } public function render() { return view('livewire.execução.tasks-dashboard'); } }