ispt4.0_laravel/app/Livewire/Execução/EquipmentsDashboard.php
2023-11-30 14:18:56 +00:00

158 lines
6.3 KiB
PHP
Executable File

<?php
namespace App\Livewire\Execução;
use Livewire\Component;
use Livewire\Exceptions\PublicPropertyNotFoundException;
use App\Models\Equipment;
use App\Models\GeneralAttributesEquipment;
use App\Models\OrderEquipmentTasks;
use App\Models\ControlEquipmentWorkstation;
use Spatie\LaravelIgnition\Recorders\DumpRecorder\Dump;
class EquipmentsDashboard extends Component
{
public $totalEquipmentsCount;
public $unstarted;
public $inProgress;
public $completed;
public $completed1;
public $totalEquivalentEquipment;
public $equivalentUnstarted;
public $equivalentInProgress;
public $equivalentCompleted;
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 updateTimeGrafics()
{
// $this->lastUpdated = now()->toDateTimeString();
$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', [
'totalEquipmentsCount' => $this->totalEquipmentsCount,
'unstarted' => $this->unstarted,
'inProgress' => $this->inProgress,
'completed' => $this->completed,
'totalEquivalentEquipment' => $this->totalEquivalentEquipment,
'equivalentUnstarted' => $this->equivalentUnstarted,
'equivalentInProgress' => $this->equivalentInProgress,
'equivalentCompleted' => $this->equivalentCompleted,
]);
}
// Por tipo de equipamento,
// Por Fabrica
//Porcentagem
public function showPercentageEquipments()
{
// Disparar um evento com os dados atualizados
$this->dispatch('refreshPercentageEquipments', [
'totalEquipmentsCount' => $this->totalEquipmentsCount,
'unstarted' => $this->unstarted,
'inProgress' => $this->inProgress,
'completed' => $this->completed,
'totalEquivalentEquipment' => $this->totalEquivalentEquipment,
'equivalentUnstarted' => $this->equivalentUnstarted,
'equivalentInProgress' => $this->equivalentInProgress,
'equivalentCompleted' => $this->equivalentCompleted,
]);
}
public function refreshDataEquipments($datasProject)
{
// Inicializa a zero o contador para toda a vez que atualizar.
$this->completed = 0;
$this->inProgress = 0;
$this->unstarted = 0;
$this->equivalentCompleted = 0;
$this->equivalentInProgress = 0;
$this->equivalentUnstarted = 0;
$totalEquipments = Equipment::where('company_projects_id', $datasProject->company_projects_id)->get();
// Busca o valor total de todos os equipamentos encontrados
$this->totalEquipmentsCount = $totalEquipments->count();
$equipmentCounts = [];
foreach ($totalEquipments as $equipment) {
// Conta quantas vezes o equipamento aparece em OrderEquipmentTasks
$tasksCount = OrderEquipmentTasks::where('equipment_id', $equipment->equipment_id)->count();
// ira receber varios dados para o array sendo array[key:equipment_id,valor:quantidade de vezes que o equipment_id se repete na tabela 'OrderEquipmentTasks']
$equipmentCounts[$equipment->equipment_id] = $tasksCount;
// Verifica quantos dados tem para o mesmo equipamento, resumindo quantas tarefas ja vez e seu circuito ao longo de seu Ambito
$controlCount = ControlEquipmentWorkstation::where('equipment_id', $equipment->equipment_id)->count();
// Verifica inicialmente se a quantido de vezes que tal equipamento apacere na ControlEquipmentWorkstation e o mesmo numero de vezes que aparece na tabela : OrderEquipmentTasks
// Isto para ver se o ciclo foi correto sem retornos se os 2 valores forem iguais significa que o equipamento foi concluido.
// if (
// $controlCount >= $tasksCount && ControlEquipmentWorkstation::where('equipment_id', $equipment->equipment_id)
// // apos receber ambos os numeros se as colunas 'entry_date' e 'departure_date' forem diferente de Null significa que o equipamento foi concluido
// ->whereNotNull('entry_date')
// ->whereNotNull('departure_date')
// ->count() >= $tasksCount
// ) {
if (ControlEquipmentWorkstation::where('equipment_id', $equipment->equipment_id)
// apos receber ambos os numeros se as colunas 'entry_date' e 'departure_date' forem diferente de Null significa que o equipamento foi concluido
->whereNotNull('id_workstations')
->whereNotNull('entry_date')
->whereNotNull('departure_date')
->count() >= $tasksCount
) {
// se o equipamento foi considerado concluido, conta +1 para o completed e o equivalentCompleted busca no array equipmentCounts, quando a key for igual ao equipment_id atual e conta com + os valores da key encontrada
$this->completed++;
$this->completed1[] = $equipment->equipment_id; // Adiciona o equipment_id ao array
$this->equivalentCompleted += $equipmentCounts[$equipment->equipment_id];
} elseif (ControlEquipmentWorkstation::where('equipment_id', $equipment->equipment_id)->exists()) {
$this->inProgress++;
$this->equivalentInProgress += $equipmentCounts[$equipment->equipment_id];
} else {
$this->unstarted++;
$this->equivalentUnstarted += $equipmentCounts[$equipment->equipment_id];
}
}
// Busca o valor total de todas as ocorrências criadas na variavel equipmentCounts
$this->totalEquivalentEquipment = array_sum($equipmentCounts);
$this->completed1 = collect($this->completed1);
}
public function render()
{
return view('livewire.execução.equipments-dashboard');
}
}