ispt4.0_laravel/app/Livewire/Execução/TasksDashboard.php
2024-05-03 14:26:10 +01:00

158 lines
5.9 KiB
PHP
Executable File

<?php
namespace App\Livewire\Execução;
use App\Models\Equipment;
use App\Models\EquipmentWorkHistory;
use App\Models\OrderEquipmentTasks;
use App\Models\ControlEquipmentWorkstation;
use App\Models\ElementalTasks;
use Livewire\Component;
use App\Repositories\ReceiveTasksRepository;
class TasksDashboard extends Component
{
public $datasProject;
// protected $receiveTasksRepository;
public $receiveElementalTasks; // Recebe todas as acoes ja feitas atualmente por tarefa
public $receiveElementalTasksAll; // Recebe o total de tarefas que vamos fazer
public $countElementalTasks;
public $countElementalTasksAll;
public $lastUpdated;
// Por enquanto nao ira usar, vamos deixar
// public $receiveAllFurtherTasks;
// Deveria funcionar para receber o Repositorio.
// public function initialize()
// {
// // Injetar o repositório
// $this->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');
}
}