ispt4.0_laravel/app/Livewire/Execução/TasksDashboard.php
2024-07-08 02:24:33 +01:00

114 lines
4.2 KiB
PHP
Executable File

<?php
namespace App\Livewire\Execução;
use App\Models\EquipmentWorkHistory;
use App\Models\OrderEquipmentTasks;
use App\Models\ControlEquipmentWorkstation;
use App\Models\ElementalTasks;
use Livewire\Component;
class TasksDashboard extends Component
{
public $receiveElementalTasks;
public $receiveElementalTasksAll;
public $countElementalTasksAll;
public $datasProject;
public $lastUpdated;
public function mount($datasProject)
{
$this->datasProject = $datasProject;
$this->lastUpdated = now()->format('Y-m-d H:i');
// chama a funcao e envia a variavel datasProject recebido da view principal
$this->refreshDataEquipments($datasProject);
}
public function refreshTaskGraph()
{
$this->lastUpdated = now()->format('Y-m-d H:i');
$this->refreshDataEquipments($this->datasProject);
$this->dispatch('refreshDataTasks', [
'receiveElementalTasks' => $this->receiveElementalTasks,
'receiveElementalTasksAll' => $this->receiveElementalTasksAll,
]);
}
public function showPercentageElementalTasks()
{
$this->dispatch('refreshPercentageElementalTasks', [
'receiveElementalTasks' => $this->receiveElementalTasks,
'receiveElementalTasksAll' => $this->receiveElementalTasksAll,
'countElementalTasksAll' => $this->countElementalTasksAll,
]);
}
public function refreshDataEquipments($datasProject)
{
$receiveEquipmentsProject = EquipmentWorkHistory::where('company_projects_id', $datasProject->company_projects_id)->get();
$elementalTasks = collect();
$elementalTasksCountsAll = [];
foreach ($receiveEquipmentsProject as $equipment) {
$relatedTasks = OrderEquipmentTasks::where('equipmentWorkHistorys_id', $equipment->equipmentWorkHistorys_id)->get();
$elementalTasks = $elementalTasks->merge($relatedTasks->whereNotNull('elemental_tasks_id')->pluck('elemental_tasks_id'))->unique();
$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;
// Obtém a contagem das tarefas considerando os critérios especificados
$tasksCount = ControlEquipmentWorkstation::whereIn('elemental_tasks_id', $elementalTasks)
->whereIn('equipmentWorkHistorys_id', $receiveEquipmentsProject->pluck('equipmentWorkHistorys_id'))
->get(['equipmentWorkHistorys_id', 'elemental_tasks_id', 'departure_date', 'status'])
->groupBy('elemental_tasks_id')
->map(function ($group, $taskId) {
if ($taskId == 9) {
return $group->filter(function ($item) {
return $item->departure_date !== null && $item->status == 1;
})->unique('equipmentWorkHistorys_id')->count();
} else {
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;
}
}
$this->receiveElementalTasksAll = $newArray1;
$this->countElementalTasksAll = array_sum($this->receiveElementalTasksAll);
}
public function render()
{
return view('livewire.execução.tasks-dashboard');
}
}