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); } } } //Neste ponto parece esta correto a quantidade de tarefas, pois nenhuma tarefa passa do maximo de equipamentos. $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'); // Filtrar as associações de tarefas por equipmentWorkHistorys_id que são do projeto específico $tasksCount = ControlEquipmentWorkstation::whereIn('elemental_tasks_id', $elementalTasks) ->whereIn('equipmentWorkHistorys_id', $receiveEquipmentsProject->pluck('equipmentWorkHistorys_id')) // Garante que estamos contando apenas para o projeto específico ->get(['equipmentWorkHistorys_id', 'elemental_tasks_id']) ->groupBy('elemental_tasks_id') ->map(function ($group) { return $group->unique('equipmentWorkHistorys_id')->count(); }); $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'); } }