diff --git a/app/Http/Controllers/ExecutionProjectController.php b/app/Http/Controllers/ExecutionProjectController.php index ca8eb021..e1277cc9 100755 --- a/app/Http/Controllers/ExecutionProjectController.php +++ b/app/Http/Controllers/ExecutionProjectController.php @@ -26,7 +26,7 @@ public function receiveExecutionProject($ProjectId) $equipmentsTypes = EquipmentType::all(); // return view('projectsClients/executionProject') - return view('projectsClients/executionProject') + return view('projectsClients/executionProjectNew') ->with('DatasProject', $DatasProject) ->with('equipmentsTypes', $equipmentsTypes); } diff --git a/app/Livewire/Articulado/SelectElementalTasksInWonkstation.php b/app/Livewire/Articulado/SelectElementalTasksInWonkstation.php index fa884af0..59bfc98c 100644 --- a/app/Livewire/Articulado/SelectElementalTasksInWonkstation.php +++ b/app/Livewire/Articulado/SelectElementalTasksInWonkstation.php @@ -11,6 +11,9 @@ use App\Models\TasksAssociationAmbits; use App\Models\FurtherTasks; +// Chama o Repositorio para amazenar as variaveis e depois conseguir chamar facilmente sem precisar de sessao. +use App\Repositories\ReceiveTasksRepository; + class SelectElementalTasksInWonkstation extends Component { public $workstation; @@ -104,6 +107,11 @@ public function mount($workstation) 'receiveAllFurtherTasks' => $this->receiveAllFurtherTasks, 'receiveElementalTasks' => $this->receiveElementalTasks, ]); + + $receiveTasksRepository = app(ReceiveTasksRepository::class); + // Chama a variavel do Repositorio para amazenar a variavel e depois conseguir chamar facilmente. + $receiveTasksRepository->setElementalTasks($this->receiveElementalTasks); + $receiveTasksRepository->setFurtherTasks($this->receiveAllFurtherTasks); } public function render() diff --git a/app/Livewire/Execução/EquipmentsDashboard.php b/app/Livewire/Execução/EquipmentsDashboard.php new file mode 100644 index 00000000..fffcdb40 --- /dev/null +++ b/app/Livewire/Execução/EquipmentsDashboard.php @@ -0,0 +1,143 @@ +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 + ) { + // 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->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); + } + + + public function render() + { + return view('livewire.execução.equipments-dashboard'); + } +} diff --git a/app/Livewire/Execução/TasksDashboard.php b/app/Livewire/Execução/TasksDashboard.php new file mode 100644 index 00000000..92ec2493 --- /dev/null +++ b/app/Livewire/Execução/TasksDashboard.php @@ -0,0 +1,142 @@ +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()->toDateTimeString(); + + // 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, + + ]); + } + + + + + + public function mount($datasProject) + { + $this->datasProject = $datasProject; + + // Obter todos os equipamentos relacionados ao projeto + $receiveEquipmentsProject = Equipment::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('equipment_id', $equipment->equipment_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 + $elementalTasksCount1 = ControlEquipmentWorkstation::whereIn('elemental_tasks_id', $elementalTasks)->get()->countBy('elemental_tasks_id'); + $furtherTasksCount1 = ControlEquipmentWorkstation::whereIn('further_tasks_id', $furtherTasks)->get()->countBy('further_tasks_id'); + + $newArray = []; + + foreach ($elementalTasksCount1 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; + } + + + + public function refreshDataEquipments($datasProject) + { + } + + public function render() + { + return view('livewire.execução.tasks-dashboard'); + } +} diff --git a/app/Livewire/Execução/WorkstationDashboard.php b/app/Livewire/Execução/WorkstationDashboard.php new file mode 100644 index 00000000..1b6c791e --- /dev/null +++ b/app/Livewire/Execução/WorkstationDashboard.php @@ -0,0 +1,80 @@ +whereNotNull('departure_date') + ->get(); + + // Inicializando um array para armazenar a contagem + // $workstationCounts = []; + + // // Iterando sobre os registros válidos + // foreach ($validWorkstations as $workstation) { + // // Obtendo o id_workstations do registro atual + // $workstationId = $workstation->id_workstations; + + // // Se o id_workstations já existe no array, incrementa o contador, senão, inicializa com 1 + // if (isset($workstationCounts[$workstationId])) { + // $workstationCounts[$workstationId]++; + // } else { + // $workstationCounts[$workstationId] = 1; + // } + // } + + // dump($workstationCounts); + + + + $workstationCounts = ControlEquipmentWorkstation::select('id_workstations', DB::raw('count(*) as count')) + ->whereNotNull('id_workstations') + ->whereNotNull('entry_date') + ->whereNotNull('departure_date') + ->groupBy('id_workstations') + ->get() + ->pluck('count', 'id_workstations') + ->toArray(); + + $receiveNameWK = []; + + foreach ($workstationCounts as $wkId1 => $count) { + $wkId1 = ConstructionWorkstation::find($wkId1); + if ($wkId1) { + $receiveNameWK[$wkId1->nomenclature_workstation] = $count; + } + } + + $this->receivefnishTasksInWorkstation = $receiveNameWK; + } + + public function updateData() + { + // Atualize a variável com os novos dados + $this->receivefnishTasksInWorkstation = [1, 2, 3]; + + $this->test = 'FUncionaa'; + + // Emita um evento com os novos dados + $this->dispatch('updateChart', $this->receivefnishTasksInWorkstation); + } + + public function render() + { + return view('livewire.execução.workstation-dashboard'); + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 452e6b65..1d45f1ab 100755 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -4,6 +4,8 @@ use Illuminate\Support\ServiceProvider; +use App\Repositories\ReceiveTasksRepository; + class AppServiceProvider extends ServiceProvider { /** @@ -11,7 +13,9 @@ class AppServiceProvider extends ServiceProvider */ public function register(): void { - // + $this->app->singleton(ReceiveTasksRepository::class, function ($app) { + return new ReceiveTasksRepository(); + }); } /** diff --git a/app/Repositories/ReceiveTasksRepository.php b/app/Repositories/ReceiveTasksRepository.php new file mode 100644 index 00000000..22546e2b --- /dev/null +++ b/app/Repositories/ReceiveTasksRepository.php @@ -0,0 +1,33 @@ +elementalTasks = $tasks; + } + + public function getElementalTasks(): array + { + return $this->elementalTasks; + } + + public function setFurtherTasks(Collection $tasks) + { + $this->furtherTasks = $tasks; + } + + public function getFurtherTasks(): Collection + { + return $this->furtherTasks; + } +} diff --git a/resources/views/Admin/index.blade.php b/resources/views/Admin/index.blade.php index 4ac45c15..baa6655b 100755 --- a/resources/views/Admin/index.blade.php +++ b/resources/views/Admin/index.blade.php @@ -1,4 +1,3 @@ - @extends('Templates/templateAdmin') @section('Main-content') @@ -34,11 +33,8 @@
Em planeamento - {{ count($CompanyProject) }} - -
-
-
+ {{ $CompanyProject->where('order_project', 1)->count() }} Em planeamento de 2023 @@ -76,13 +72,11 @@ class="btn btn-tool">
Preparadas - 4 + {{ $CompanyProject->where('order_project', 2)->count() }} -
-
-
- 75% adicionadas nos últimos 30 + Aguardam o início da obra.
@@ -92,16 +86,6 @@ class="btn btn-tool">
@foreach ($CompanyProject as $project) @if ($project->order_project == 2) - {{--
-
-
Paragem Cliente 2 OUT2022
-
- - - -
-
-
--}}
{{ $project->company_project_description }}
@@ -128,13 +112,10 @@ class="btn btn-tool">
Em execução - 2 - -
-
-
+ {{ $CompanyProject->where('order_project', 3)->count() }} - 100% em execução à 30 dias + Obras em curso.
@@ -144,16 +125,6 @@ class="btn btn-tool">
@foreach ($CompanyProject as $project) @if ($project->order_project == 3) - {{--
-
-
Paragem Cliente 1 JUN2022
-
- - - -
-
-
--}}
{{ $project->company_project_description }}
@@ -180,13 +151,10 @@ class="btn btn-tool">
Concluídas - 3 - -
-
-
+ {{ $CompanyProject->where('order_project', 4)->count() }} - Últimas obras de 2022 + Últimas obras de 2023
@@ -195,17 +163,7 @@ class="btn btn-tool">
@foreach ($CompanyProject as $project) - @if ($project->order_project == 3) -
-
-
Paragem Cliente 2 JAN2022
-
- - - -
-
-
+ @if ($project->order_project == 4) @endif @endforeach
diff --git a/resources/views/Admin/profile.blade.php b/resources/views/Admin/profile.blade.php index d1f05219..8475a269 100755 --- a/resources/views/Admin/profile.blade.php +++ b/resources/views/Admin/profile.blade.php @@ -19,7 +19,7 @@ User Image

{{ $user->user_name }}

-

{{ $user->userType->type_user_id }}

+

{{ $user->userType->type_user}}

diff --git a/resources/views/Templates/templateAdmin.blade.php b/resources/views/Templates/templateAdmin.blade.php index f89d8af4..8e927be4 100755 --- a/resources/views/Templates/templateAdmin.blade.php +++ b/resources/views/Templates/templateAdmin.blade.php @@ -44,7 +44,8 @@ - + @@ -59,6 +60,14 @@ + + {{-- Graficos para gestao com chart.js --}} + + + + + +