creation of structure and implementation of dynamic and responsive graphics for the project in progress

This commit is contained in:
ygbanzato 2023-10-02 16:01:58 +01:00
parent 2ddc55eeed
commit 4f0b53a49d
19 changed files with 1455 additions and 361 deletions

View File

@ -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);
}

View File

@ -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()

View File

@ -0,0 +1,143 @@
<?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 $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
) {
// 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');
}
}

View File

@ -0,0 +1,142 @@
<?php
namespace App\Livewire\Execução;
use App\Models\Equipment;
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
// Por enquanto nao ira usar, vamos deixar
// public $receiveAllFurtherTasks;
public $lastUpdated;
// 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()->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');
}
}

View File

@ -0,0 +1,80 @@
<?php
namespace App\Livewire\Execução;
use Livewire\Component;
use App\Models\ControlEquipmentWorkstation;
use App\Models\ConstructionWorkstation;
use Illuminate\Support\Facades\DB;
class WorkstationDashboard extends Component
{
public $receivefnishTasksInWorkstation;
public $test = 'batata';
public function mount()
{
// Obtendo todos os registros onde entry_date e departure_date não são nulos
$validWorkstations = ControlEquipmentWorkstation::whereNotNull('entry_date')
->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');
}
}

View File

@ -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();
});
}
/**

View File

@ -0,0 +1,33 @@
<?php
namespace App\Repositories;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
class ReceiveTasksRepository
{
protected $elementalTasks = [];
protected $furtherTasks = [];
public function setElementalTasks(array $tasks)
{
$this->elementalTasks = $tasks;
}
public function getElementalTasks(): array
{
return $this->elementalTasks;
}
public function setFurtherTasks(Collection $tasks)
{
$this->furtherTasks = $tasks;
}
public function getFurtherTasks(): Collection
{
return $this->furtherTasks;
}
}

View File

@ -1,4 +1,3 @@
@extends('Templates/templateAdmin')
@section('Main-content')
@ -34,11 +33,8 @@
<span class="info-box-icon"><i class="fas fa-file-edit"></i></span>
<div class="info-box-content">
<span class="info-box-text">Em planeamento</span>
<span class="info-box-number">{{ count($CompanyProject) }}</span>
<div class="progress">
<div class="progress-bar" style="width: 100%"></div>
</div>
<span
class="info-box-number">{{ $CompanyProject->where('order_project', 1)->count() }}</span>
<span class="progress-description">
Em planeamento de 2023
</span>
@ -76,13 +72,11 @@ class="btn btn-tool">
<div class="info-box-content">
<span class="info-box-text">Preparadas</span>
<span class="info-box-number">4</span>
<span
class="info-box-number">{{ $CompanyProject->where('order_project', 2)->count() }}</span>
<div class="progress">
<div class="progress-bar" style="width: 75%"></div>
</div>
<span class="progress-description">
75% adicionadas nos últimos 30
Aguardam o início da obra.
</span>
</div>
<!-- /.info-box-content -->
@ -92,16 +86,6 @@ class="btn btn-tool">
<div class="card-body">
@foreach ($CompanyProject as $project)
@if ($project->order_project == 2)
{{-- <div class="card card-primary card-outline">
<div class="card-header">
<h5 class="card-title">Paragem Cliente 2 OUT2022</h5>
<div class="card-tools">
<a href="{{route('preparedProject', ['ProjectId'=>$project->company_projects_id])}}" class="btn btn-tool">
<i class="fa-solid fa-eye" style="color:rgb(62, 62, 62)"></i>
</a>
</div>
</div>
</div> --}}
<div class="card card-secondary card-outline">
<div class="card-header">
<h5 class="card-title">{{ $project->company_project_description }}</h5>
@ -128,13 +112,10 @@ class="btn btn-tool">
<div class="info-box-content">
<span class="info-box-text">Em execução</span>
<span class="info-box-number">2</span>
<div class="progress">
<div class="progress-bar" style="width: 100%"></div>
</div>
<span
class="info-box-number">{{ $CompanyProject->where('order_project', 3)->count() }}</span>
<span class="progress-description">
100% em execução à 30 dias
Obras em curso.
</span>
</div>
<!-- /.info-box-content -->
@ -144,16 +125,6 @@ class="btn btn-tool">
<div class="card-body">
@foreach ($CompanyProject as $project)
@if ($project->order_project == 3)
{{-- <div class="card card-warning card-outline">
<div class="card-header">
<h5 class="card-title">Paragem Cliente 1 JUN2022</h5>
<div class="card-tools">
<a href="#" class="btn btn-tool">
<i class="fas fa-eye"></i>
</a>
</div>
</div>
</div> --}}
<div class="card card-secondary card-outline">
<div class="card-header">
<h5 class="card-title">{{ $project->company_project_description }}</h5>
@ -180,13 +151,10 @@ class="btn btn-tool">
<div class="info-box-content">
<span class="info-box-text">Concluídas</span>
<span class="info-box-number">3</span>
<div class="progress">
<div class="progress-bar" style="width: 100%"></div>
</div>
<span
class="info-box-number">{{ $CompanyProject->where('order_project', 4)->count() }}</span>
<span class="progress-description">
Últimas obras de 2022
Últimas obras de 2023
</span>
</div>
<!-- /.info-box-content -->
@ -195,17 +163,7 @@ class="btn btn-tool">
<!-- /.Card header-->
<div class="card-body">
@foreach ($CompanyProject as $project)
@if ($project->order_project == 3)
<div class="card card-success card-outline">
<div class="card-header">
<h5 class="card-title">Paragem Cliente 2 JAN2022</h5>
<div class="card-tools">
<a href="#" class="btn btn-tool">
<i class="fas fa-eye"></i>
</a>
</div>
</div>
</div>
@if ($project->order_project == 4)
@endif
@endforeach
</div>

View File

@ -19,7 +19,7 @@
<img src="{{ asset('/img/avatar5.png') }}" class="img-circle elevation-2 imgProfile"
alt="User Image">
<h2>{{ $user->user_name }}</h2>
<h3>{{ $user->userType->type_user_id }}</h3>
<h3>{{ $user->userType->type_user}}</h3>
</div>
</div>

View File

@ -44,7 +44,8 @@
<!-- DataTables -->
<link rel="stylesheet" href="{{ asset('assets/plugins/datatables-bs4/css/dataTables.bootstrap4.min.css') }}">
<link rel="stylesheet" href="{{ asset('assets/plugins/datatables-responsive/css/responsive.bootstrap4.min.css') }}">
<link rel="stylesheet"
href="{{ asset('assets/plugins/datatables-responsive/css/responsive.bootstrap4.min.css') }}">
<link rel="stylesheet" href="{{ asset('assets/plugins/datatables-buttons/css/buttons.bootstrap4.min.css') }}">
@ -59,6 +60,14 @@
<!-- DataTables Buttons JavaScript -->
<script src="https://cdn.datatables.net/buttons/1.7.1/js/dataTables.buttons.min.js"></script>
{{-- Graficos para gestao com chart.js --}}
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels"></script>
<style>
.spin {
animation: spin 1s infinite linear;

View File

@ -0,0 +1,300 @@
<div>
<div class="row">
<div class="col-sm d-flex justify-content-end">
<button class="btn btn-primary mr-2 mb-2" wire:click="showPercentageEquipments">
<i class="fa-solid fa-percent"></i>
</button>
<button class="btn btn-primary mr-2 mb-2" wire:click="updateTimeGrafics">
<i class="fa-solid fa-chart-pie"></i>
</button>
<button class="btn btn-primary mb-2" wire:click="updateTimeGrafics">
<i class="fa-solid fa-arrows-rotate"></i>
</button>
<div style="font-size: 15px; color:#09255C; margin-left:4px; display: flex; align-items: center; justify-content: center; height: 50px;">
{{ $lastUpdated }}
</div>
</div>
</div>
<div class="row text-center">
<div class="col-sm">
<h6>Equipamentos da Obra</h6>
<p style="color:gray; font-size:13px">Total de ações para concluir todos os equipamentos da obra.</p>
<canvas id="myPieChart"></canvas>
</div>
<div class="col-sm">
<h6>Equivalente de equipamentos da Obra</h6>
<p style="color:gray; font-size:13px">Total de equipamentos e os seus estados actuais.</p>
<canvas id="myPieChart1"></canvas>
</div>
</div>
</div>
<script>
// O code em si e refeito pois o code inicial busca valores do componente livewire apos atualizar ele vem como data, posteriormente atualizar esta parte para nao repetir code.
window.addEventListener('refreshData', event => {
// Obter dados do evento
var data = event.detail[0];
if (myPieChart) {
myPieChart.destroy(); // Destrua o gráfico antigo antes de criar um novo
}
var equipmentGraph = document.getElementById('myPieChart').getContext('2d');
var myPieChart = new Chart(equipmentGraph, {
type: 'doughnut',
data: {
labels: [
'Total: ' + data.totalEquipmentsCount,
'Por Iniciar: ' + data.unstarted,
'Em Curso: ' + data.inProgress,
'Concluídos: ' + data.completed
],
datasets: [{
data: [null, data.unstarted, data.inProgress, data.completed],
backgroundColor: [
'rgba(0,80,0,0.5)', //green color
'rgb(9, 37, 92)', //Azul escuro ISPT
'rgb(0, 176, 234)', // Azull Claro ISPT
'rgb(5, 107, 163)', // Azul parecido
],
// borderColor: [
// '#FFFFFF', // Cor branca para o total (não será visível)
// 'rgba(255, 99, 132, 1)',
// 'rgba(54, 162, 235, 1)',
// 'rgba(255, 206, 86, 1)'
// ],
borderWidth: 1
}]
},
options: {
events: [],
// responsive: true,
// maintainAspectRatio: false // Isso permite que você defina o tamanho do gráfico via CSS
}
});
if (myPieChart1) {
myPieChart1.destroy(); // Destrua o gráfico antigo antes de criar um novo
}
var grafico2 = document.getElementById('myPieChart1').getContext('2d');
var myPieChart1 = new Chart(grafico2, {
type: 'doughnut',
data: {
labels: [
'Total: ' + data.totalEquivalentEquipment,
'Por Iniciar: ' + data.equivalentUnstarted,
'Em Curso: ' + data.equivalentInProgress,
'Concluídos: ' + data.equivalentCompleted
],
datasets: [{
data: [null, data.equivalentUnstarted, data.equivalentInProgress, data
.equivalentCompleted
],
backgroundColor: [
'rgba(0,80,0,0.5)', //green color
'rgb(9, 37, 92)', //Azul escuro ISPT
'rgb(0, 176, 234)', // Azull Claro ISPT
'rgb(5, 107, 163)', // Azul parecido
],
// borderColor: [
// 'rgba(0,80,0,0.5)',
// 'rgba(255, 99, 132, 1)',
// 'rgba(54, 162, 235, 1)',
// 'rgba(255, 206, 86, 1)'
// ],
borderWidth: 1.
}]
},
options: {
events: [],
// responsive: true,
// maintainAspectRatio: false // Isso permite que você defina o tamanho do gráfico via CSS
}
});
});
// Obtenha o contexto do elemento canvas
var equipmentGraph = document.getElementById('myPieChart').getContext('2d');
// Dados do componente Livewire
var totalEquipmentsCount = {{ $totalEquipmentsCount }};
var unstarted = {{ $unstarted }};
var inProgress = {{ $inProgress }};
var completed = {{ $completed }};
// Crie um novo gráfico circular
var myPieChart = new Chart(equipmentGraph, {
type: 'doughnut',
data: {
labels: [
'Total: ' + totalEquipmentsCount,
'Por Iniciar: ' + unstarted,
'Em Curso: ' + inProgress,
'Concluídos: ' + completed
],
datasets: [{
data: [null, unstarted, inProgress, completed],
backgroundColor: [
'rgba(0,80,0,0.5)', //green color
'rgb(9, 37, 92)', //Azul escuro ISPT
'rgb(0, 176, 234)', // Azull Claro ISPT
'rgb(5, 107, 163)', // Azul parecido
],
// borderColor: [
// '#FFFFFF', // Cor branca para o total (não será visível)
// 'rgba(255, 99, 132, 1)',
// 'rgba(54, 162, 235, 1)',
// 'rgba(255, 206, 86, 1)'
// ],
borderWidth: 1
}]
},
options: {
events: [],
// responsive: true,
// maintainAspectRatio: false // Isso permite que você defina o tamanho do gráfico via CSS
}
});
var grafico2 = document.getElementById('myPieChart1').getContext('2d');
// Dados do componente Livewire
var totalEquivalentEquipment = {{ $totalEquivalentEquipment }}
var equivalentUnstarted = {{ $equivalentUnstarted }}
var equivalentInProgress = {{ $equivalentInProgress }}
var equivalentCompleted = {{ $equivalentCompleted }}
var myPieChart1 = new Chart(grafico2, {
type: 'doughnut',
data: {
labels: [
'Total: ' + totalEquivalentEquipment,
'Por Iniciar: ' + equivalentUnstarted,
'Em Curso: ' + equivalentInProgress,
'Concluídos: ' + equivalentCompleted
],
datasets: [{
data: [null, equivalentUnstarted, equivalentInProgress,
equivalentCompleted
], // Dados do componente Livewire
backgroundColor: [
'rgba(0,80,0,0.5)', //green color
'rgb(9, 37, 92)', //Azul escuro ISPT
'rgb(0, 176, 234)', // Azull Claro ISPT
'rgb(5, 107, 163)', // Azul parecido
],
// borderColor: [
// 'rgba(0,80,0,0.5)',
// 'rgba(255, 99, 132, 1)',
// 'rgba(54, 162, 235, 1)',
// 'rgba(255, 206, 86, 1)'
// ],
borderWidth: 1
}]
},
options: {
events: []
}
});
</script>
<script>
window.addEventListener('refreshPercentageEquipments', event => {
// Obter dados do evento
var data = event.detail[0];
// Calcular porcentagens
var unstartedPercentage = ((data.unstarted / data.totalEquipmentsCount) * 100).toFixed(2);
var inProgressPercentage = ((data.inProgress / data.totalEquipmentsCount) * 100).toFixed(2);
var completedPercentage = ((data.completed / data.totalEquipmentsCount) * 100).toFixed(2);
var totalEquivalentEquipmentPercentage = ((data.equivalentUnstarted / data.totalEquivalentEquipment) *
100).toFixed(
2);
var equivalentInProgressPercentage = ((data.equivalentInProgress / data.totalEquivalentEquipment) * 100)
.toFixed(2);
var equivalentCompletedPercentage = ((data.equivalentCompleted / data.totalEquivalentEquipment) * 100)
.toFixed(2);
if (myPieChart) {
myPieChart.destroy(); // Destrua o gráfico antigo antes de criar um novo
}
var equipmentGraph = document.getElementById('myPieChart').getContext('2d');
var myPieChart = new Chart(equipmentGraph, {
type: 'pie',
data: {
labels: [
'Total: ' + data.totalEquipmentsCount,
'Por Iniciar: ' + unstartedPercentage + '%',
'Em Curso: ' + inProgressPercentage + '%',
'Concluídos: ' + completedPercentage + '%'
],
datasets: [{
data: [null, data.unstarted, data.inProgress, data.completed],
backgroundColor: [
'rgba(0,80,0,0.5)', //green color
'rgb(9, 37, 92)', //Azul escuro ISPT
'rgb(0, 176, 234)', // Azull Claro ISPT
'rgb(5, 107, 163)', // Azul parecido
],
borderWidth: 1
}]
},
options: {
events: [],
}
});
if (myPieChart1) {
myPieChart1.destroy(); // Destrua o gráfico antigo antes de criar um novo
}
var grafico2 = document.getElementById('myPieChart1').getContext('2d');
var myPieChart1 = new Chart(grafico2, {
type: 'pie',
data: {
labels: [
'Total: ' + data.totalEquivalentEquipment,
'Por Iniciar: ' + totalEquivalentEquipmentPercentage + '%',
'Em Curso: ' + equivalentInProgressPercentage + '%',
'Concluídos: ' + equivalentCompletedPercentage + '%'
],
datasets: [{
data: [null, data.equivalentUnstarted, data.equivalentInProgress, data
.equivalentCompleted
],
backgroundColor: [
'rgba(0,80,0,0.5)', //green color
'rgb(9, 37, 92)', //Azul escuro ISPT
'rgb(0, 176, 234)', // Azull Claro ISPT
'rgb(5, 107, 163)', // Azul parecido
],
// borderColor: [
// 'rgba(0,80,0,0.5)',
// 'rgba(255, 99, 132, 1)',
// 'rgba(54, 162, 235, 1)',
// 'rgba(255, 206, 86, 1)'
// ],
borderWidth: 1.
}]
},
options: {
events: [],
// responsive: true,
// maintainAspectRatio: false // Isso permite que você defina o tamanho do gráfico via CSS
}
});
});
</script>

View File

@ -0,0 +1,192 @@
<div>
<div class="row">
<div class="col-sm">
<button wire:click="showPercentageElementalTasks">Grafico em porcentagem</button>
</div>
</div>
<div class="row text-center">
<div class="col-sm">
<h6>Quantidade Tarefas Concluidas</h6>
<p style="color:gray; font-size:13px"> Total de acções a serem realizadas por tarefa.</p>
<canvas id="myPieChart2" width="50" height="50"></canvas>
</div>
<div class="col-sm">
<h6>Quantidade tarefas Acumuladas</h6>
<p style="color:gray; font-size:13px">Total de acções realizadas de acordo com a tarefa.</p>
<canvas id="myPieChart3" width="50" height="50"></canvas>
</div>
</div>
{{ $lastUpdated }}
<button wire:click="updateTimeGrafics">Atualizar Gráfico</button>
</div>
<script>
var elementalTasksCount = @json($receiveElementalTasks);
var grafico2 = document.getElementById('myPieChart2').getContext('2d');
var labels = Object.keys(elementalTasksCount);
var data = Object.values(elementalTasksCount);
var myPieChart2 = new Chart(grafico2, {
type: 'bar',
data: {
labels: labels.map(label => label),
datasets: [{
data: data,
backgroundColor: [
'rgba(0,80,0,0.5)', //green color
'rgb(9, 37, 92)', //Azul escuro ISPT
'rgb(0, 176, 234)', // Azull Claro ISPT
'rgb(5, 107, 163)', // Azul parecido
],
borderColor: [
'rgba(0,80,0,0.5)',
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)'
// ... (adicionar mais cores se necessário)
],
borderWidth: 1
}]
},
options: {
animation: false,
plugins: {
legend: {
display: false
},
tooltip: {
enabled: false
}
}
},
});
// Grafico de Script 2
var elementalTasksCountAll = @json($receiveElementalTasksAll);
var grafico3 = document.getElementById('myPieChart3').getContext('2d');
var labels = Object.keys(elementalTasksCountAll);
var data = Object.values(elementalTasksCountAll);
var myPieChart3 = new Chart(grafico3, {
type: 'bar',
data: {
labels: labels.map(label => label),
datasets: [{
label: 'Total de Acções da Obra"',
data: data,
backgroundColor: [
'rgb(117,210,240)', //green color
'rgb(9, 37, 92)', //Azul escuro ISPT
'rgb(0, 176, 234)', // Azull Claro ISPT
'rgb(5, 107, 163)', // Azul parecido
],
borderColor: [
'rgba(0,80,0,0.5)',
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)'
// ... (adicionar mais cores se necessário)
],
borderWidth: 1
}]
},
options: {
animation: false,
plugins: {
legend: {
display: false
},
tooltip: {
enabled: false
}
}
},
});
</script>
{{-- Scrip de atualizacao da tabela --}}
<script>
window.addEventListener('refreshData', event => {
var data = event.detail[0];
var elementalTasksCount = data.receiveElementalTasks;
var labels = Object.keys(elementalTasksCount);
var dataValues = Object.values(elementalTasksCount);
var baseColors = [
'rgb(117,210,240)', //green color
'rgb(9, 37, 92)', //Azul escuro ISPT
'rgb(0, 176, 234)', // Azull Claro ISPT
'rgb(5, 107, 163)', // Azul parecido
];
// Atribuir cores aos dados de forma cíclica
var backgroundColors = dataValues.map((_, index) => baseColors[index % baseColors.length]);
var grafico2 = document.getElementById('myPieChart2').getContext('2d');
window.myPieChart2 = new Chart(grafico2, {
type: 'bar',
data: {
labels: labels,
datasets: [{
data: dataValues,
backgroundColor: backgroundColors, // Usar o array de cores gerado
borderColor: backgroundColors.map(color => color.replace('0.5',
'1')), // Ajustar a opacidade para as bordas
borderWidth: 1
}]
},
options: {
events: [], // Desativa todos os eventos
}
});
var elementalTasksCountAll = data.receiveElementalTasksAll;
var labelsTasksCountAll = Object.keys(elementalTasksCountAll);
var dataValuesTasksCountAll = Object.values(elementalTasksCountAll);
var grafico3 = document.getElementById('myPieChart3').getContext('2d');
window.myPieChart3 = new Chart(grafico3, {
type: 'bar',
data: {
labels: labelsTasksCountAll,
datasets: [{
data: dataValuesTasksCountAll,
backgroundColor: backgroundColors, // Usar o array de cores gerado
borderColor: backgroundColors.map(color => color.replace('0.5',
'1')), // Ajustar a opacidade para as bordas
borderWidth: 1
}]
},
options: {
events: [], // Desativa todos os eventos
title: {
display: true, // Ativa a exibição do título
text: 'Total', // Define o texto do título
position: 'top' // Define a posição do título
}
}
});
});
</script>
{{-- Script de Gradico em porcentagem --}}
<script>
window.addEventListener('refreshPercentageElementalTasks', event => {
});
</script>

View File

@ -0,0 +1,43 @@
<div>
<button wire:click="updateData">Atualizar Gráfico</button>
<canvas id="myPieChart5" width="50" height="50"></canvas>
</div>
<script>
var receivefnishTasksInWorkstation = @json($receivefnishTasksInWorkstation);
var grafico5 = document.getElementById('myPieChart5').getContext('2d');
var labels = Object.keys(receivefnishTasksInWorkstation);
var data = Object.values(receivefnishTasksInWorkstation);
var myPieChart5 = new Chart(grafico5, {
type: 'bar',
data: {
labels: labels.map(label => label),
datasets: [{
data: data,
backgroundColor: [
'rgb(117,210,240)', //green color
'rgb(9, 37, 92)', //Azul escuro ISPT
'rgb(0, 176, 234)', // Azull Claro ISPT
'rgb(5, 107, 163)', // Azul parecido
],
borderColor: [
'rgba(0,80,0,0.5)',
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)'
// ... (adicionar mais cores se necessário)
],
borderWidth: 1
}]
},
options: {
events: [], // Desativa todos os eventos
}
});
</script>

View File

@ -32,7 +32,7 @@
<form>
<div class="row">
<div class="col-sm-6" id="BotaoDetalhesObra">
<a href="#" type="button" class="btn btn-block bg-gradient-primary btn-lg">
<a href="#" type="button" class="btn btn-block bg-gradient-primary btn-lg" >
Detalhes da Obra</a>
</div>
<div class="col-sm-6" id="BotaoArticulado">
@ -40,7 +40,7 @@
class="btn btn-block bg-gradient-primary btn-lg">Articulado</a>
</div>
<div class="col-sm-6" id="BotaoPostosDeTrabalho">
<a href="#" type="button" class="btn btn-block bg-gradient-primary btn-lg">Postos de
<a href="#" type="button" class="btn btn-block bg-gradient-primary btn-lg" >Postos de
Trabalho</a>
</div>
</div>
@ -682,6 +682,7 @@ function createListItems(task_codes) {
}
</script>
{{-- Inicialmente nao devemos utilizar --}}
<script>
$(document).ready(function() {
var steps = ['.res-step-one', '.res-step-two', '.res-step-three', '.res-step-four'];

View File

@ -0,0 +1,134 @@
@extends('Templates/templateAdmin')
@section('Main-content')
<!-- Content Header (Page header) -->
<section class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1>{{ $DatasProject->company_project_description }}</h1>
<input type="hidden" value="{{ $DatasProject->company_projects_id }}" id="receiveNumberProject">
</div>
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item"><a href="{{ route('home') }}">Dashboard</a></li>
<li class="breadcrumb-item"><a href="./preparadas.html">Em Execucao</a></li>
<li class="breadcrumb-item active">{{ $DatasProject->company_project_description }}</li>
</ol>
</div><!-- /.col -->
</div>
</div><!-- /.container-fluid -->
</section>
<!-- /.content-header -->
<!-- Main content -->
<section class="content">
<div class="container-fluid">
<div class="row justify-content-center">
<div class="col-md-12">
<div class="row">
<div class="col-sm" id="ViewEquipmentsButton">
<a href="#" type="button" class="btn btn-block bg-gradient-primary btn-lg"
style="margin-bottom: 2%;"> Equipamentos</a>
</div>
<div class="col-sm" id="ViewTasksButton">
<a href="#" type="button" class="btn btn-block bg-gradient-primary btn-lg"
style="margin-bottom: 2%;">Tarefas</a>
</div>
<div class="col-sm" id="ViewWorkstationButton">
<a href="#" type="button" class="btn btn-block bg-gradient-primary btn-lg"
style="margin-bottom: 2%;">Postos de Trabalho</a>
</div>
</div>
<div class="card card-primary" id="CardViewEquipments">
<div class="card-header">
<h3 class="card-title">Equipamentos</h3>
<div class="card-tools">
</div>
</div>
<div class="card-body">
@livewire('execução.equipments-dashboard', ['datasProject' => $DatasProject], key($DatasProject->company_projects_id))
</div>
</div>
<div class="card card-primary" id="CardViewTasks">
<div class="card-header">
<h3 class="card-title">Tarefas</h3>
<div class="card-tools">
</div>
</div>
<div class="card-body">
@livewire('execução.tasks-dashboard', ['datasProject' => $DatasProject], key($DatasProject->company_projects_id))
</div>
</div>
<div class="card card-primary" id="CardViewWorkstations">
<div class="card-header">
<h3 class="card-title">Postos de Trabalho</h3>
<div class="card-tools">
</div>
</div>
<div class="card-body">
@livewire('execução.workstation-dashboard', ['datasProject' => $DatasProject], key($DatasProject->company_projects_id))
</div>
</div>
</div>
</div>
</div>
</section>
@endsection
@section('scriptsTemplateAdmin')
<script>
$(document).ready(function() {
// Ja vai ser inicializado no card Equipamentos.
$("#ViewEquipmentsButton").hide();
$("#CardViewTasks").hide();
$("#CardViewWorkstations").hide();
//Visualizacao das Tarefas
$("#ViewTasksButton").on('click', function() {
$("#CardViewTasks").show();
$("#ViewEquipmentsButton").show();
$("#ViewWorkstationButton").show();
$("#CardViewEquipments").hide();
$("#CardViewWorkstations").hide();
$("#ViewTasksButton").hide();
})
//Visualizacao dos Equipamentos
$("#ViewEquipmentsButton").on('click', function() {
$("#CardViewEquipments").show();
$("#ViewTasksButton").show();
$("#ViewWorkstationButton").show();
$("#CardViewTasks").hide();
$("#CardViewWorkstations").hide();
$("#ViewEquipmentsButton").hide();
})
//Visualizacao das Workstatios
$("#ViewWorkstationButton").on('click', function() {
$("#CardViewWorkstations").show();
$("#ViewEquipmentsButton").show();
$("#ViewTasksButton").show();
$("#CardViewEquipments").hide();
$("#CardViewTasks").hide();
$("#ViewWorkstationButton").hide();
})
});
</script>
@endsection

View File

@ -20,19 +20,23 @@
<ul class="nav nav-tabs nav-tabs-bordered">
<li class="nav-item">
<button class="nav-link active" data-bs-toggle="tab" data-bs-target="#profile-overview">Overview</button>
<button class="nav-link active" data-bs-toggle="tab"
data-bs-target="#profile-overview">Overview</button>
</li>
<li class="nav-item">
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#profile-edit">Edit Profile</button>
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#profile-edit">Edit
Profile</button>
</li>
<li class="nav-item">
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#profile-settings">Settings</button>
<button class="nav-link" data-bs-toggle="tab"
data-bs-target="#profile-settings">Settings</button>
</li>
<li class="nav-item">
<button class="nav-link" data-bs-toggle="tab" data-bs-target="#profile-change-password">Change Password</button>
<button class="nav-link" data-bs-toggle="tab"
data-bs-target="#profile-change-password">Change Password</button>
</li>
</ul>
@ -40,7 +44,10 @@
<div class="tab-pane fade show active profile-overview" id="profile-overview">
<h5 class="card-title">About</h5>
<p class="small fst-italic">Sunt est soluta temporibus accusantium neque nam maiores cumque temporibus. Tempora libero non est unde veniam est qui dolor. Ut sunt iure rerum quae quisquam autem eveniet perspiciatis odit. Fuga sequi sed ea saepe at unde.</p>
<p class="small fst-italic">Sunt est soluta temporibus accusantium neque nam maiores
cumque temporibus. Tempora libero non est unde veniam est qui dolor. Ut sunt iure
rerum quae quisquam autem eveniet perspiciatis odit. Fuga sequi sed ea saepe at
unde.</p>
<h5 class="card-title">Profile Details</h5>
@ -86,12 +93,15 @@
<!-- Profile Edit Form -->
<form>
<div class="row mb-3">
<label for="profileImage" class="col-md-4 col-lg-3 col-form-label">Profile Image</label>
<label for="profileImage" class="col-md-4 col-lg-3 col-form-label">Profile
Image</label>
<div class="col-md-8 col-lg-9">
<img src="assets/img/profile-img.jpg" alt="Profile">
<div class="pt-2">
<a href="#" class="btn btn-primary btn-sm" title="Upload new profile image"><i class="bi bi-upload"></i></a>
<a href="#" class="btn btn-danger btn-sm" title="Remove my profile image"><i class="bi bi-trash"></i></a>
<a href="#" class="btn btn-primary btn-sm"
title="Upload new profile image"><i class="bi bi-upload"></i></a>
<a href="#" class="btn btn-danger btn-sm"
title="Remove my profile image"><i class="bi bi-trash"></i></a>
</div>
</div>
</div>
@ -99,7 +109,8 @@
<div class="row mb-3">
<label for="fullName" class="col-md-4 col-lg-3 col-form-label">Full Name</label>
<div class="col-md-8 col-lg-9">
<input name="fullName" type="text" class="form-control" id="fullName" value="Kevin Anderson">
<input name="fullName" type="text" class="form-control" id="fullName"
value="Kevin Anderson">
</div>
</div>
@ -113,70 +124,84 @@
<div class="row mb-3">
<label for="company" class="col-md-4 col-lg-3 col-form-label">Company</label>
<div class="col-md-8 col-lg-9">
<input name="company" type="text" class="form-control" id="company" value="Lueilwitz, Wisoky and Leuschke">
<input name="company" type="text" class="form-control" id="company"
value="Lueilwitz, Wisoky and Leuschke">
</div>
</div>
<div class="row mb-3">
<label for="Job" class="col-md-4 col-lg-3 col-form-label">Job</label>
<div class="col-md-8 col-lg-9">
<input name="job" type="text" class="form-control" id="Job" value="Web Designer">
<input name="job" type="text" class="form-control" id="Job"
value="Web Designer">
</div>
</div>
<div class="row mb-3">
<label for="Country" class="col-md-4 col-lg-3 col-form-label">Country</label>
<div class="col-md-8 col-lg-9">
<input name="country" type="text" class="form-control" id="Country" value="USA">
<input name="country" type="text" class="form-control" id="Country"
value="USA">
</div>
</div>
<div class="row mb-3">
<label for="Address" class="col-md-4 col-lg-3 col-form-label">Address</label>
<div class="col-md-8 col-lg-9">
<input name="address" type="text" class="form-control" id="Address" value="A108 Adam Street, New York, NY 535022">
<input name="address" type="text" class="form-control" id="Address"
value="A108 Adam Street, New York, NY 535022">
</div>
</div>
<div class="row mb-3">
<label for="Phone" class="col-md-4 col-lg-3 col-form-label">Phone</label>
<div class="col-md-8 col-lg-9">
<input name="phone" type="text" class="form-control" id="Phone" value="(436) 486-3538 x29071">
<input name="phone" type="text" class="form-control" id="Phone"
value="(436) 486-3538 x29071">
</div>
</div>
<div class="row mb-3">
<label for="Email" class="col-md-4 col-lg-3 col-form-label">Email</label>
<div class="col-md-8 col-lg-9">
<input name="email" type="email" class="form-control" id="Email" value="k.anderson@example.com">
<input name="email" type="email" class="form-control" id="Email"
value="k.anderson@example.com">
</div>
</div>
<div class="row mb-3">
<label for="Twitter" class="col-md-4 col-lg-3 col-form-label">Twitter Profile</label>
<label for="Twitter" class="col-md-4 col-lg-3 col-form-label">Twitter
Profile</label>
<div class="col-md-8 col-lg-9">
<input name="twitter" type="text" class="form-control" id="Twitter" value="https://twitter.com/#">
<input name="twitter" type="text" class="form-control" id="Twitter"
value="https://twitter.com/#">
</div>
</div>
<div class="row mb-3">
<label for="Facebook" class="col-md-4 col-lg-3 col-form-label">Facebook Profile</label>
<label for="Facebook" class="col-md-4 col-lg-3 col-form-label">Facebook
Profile</label>
<div class="col-md-8 col-lg-9">
<input name="facebook" type="text" class="form-control" id="Facebook" value="https://facebook.com/#">
<input name="facebook" type="text" class="form-control"
id="Facebook" value="https://facebook.com/#">
</div>
</div>
<div class="row mb-3">
<label for="Instagram" class="col-md-4 col-lg-3 col-form-label">Instagram Profile</label>
<label for="Instagram" class="col-md-4 col-lg-3 col-form-label">Instagram
Profile</label>
<div class="col-md-8 col-lg-9">
<input name="instagram" type="text" class="form-control" id="Instagram" value="https://instagram.com/#">
<input name="instagram" type="text" class="form-control"
id="Instagram" value="https://instagram.com/#">
</div>
</div>
<div class="row mb-3">
<label for="Linkedin" class="col-md-4 col-lg-3 col-form-label">Linkedin Profile</label>
<label for="Linkedin" class="col-md-4 col-lg-3 col-form-label">Linkedin
Profile</label>
<div class="col-md-8 col-lg-9">
<input name="linkedin" type="text" class="form-control" id="Linkedin" value="https://linkedin.com/#">
<input name="linkedin" type="text" class="form-control"
id="Linkedin" value="https://linkedin.com/#">
</div>
</div>
@ -193,16 +218,19 @@
<form>
<div class="row mb-3">
<label for="fullName" class="col-md-4 col-lg-3 col-form-label">Email Notifications</label>
<label for="fullName" class="col-md-4 col-lg-3 col-form-label">Email
Notifications</label>
<div class="col-md-8 col-lg-9">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="changesMade" checked>
<input class="form-check-input" type="checkbox" id="changesMade"
checked>
<label class="form-check-label" for="changesMade">
Changes made to your account
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="newProducts" checked>
<input class="form-check-input" type="checkbox" id="newProducts"
checked>
<label class="form-check-label" for="newProducts">
Information on new products and services
</label>
@ -214,7 +242,8 @@
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="securityNotify" checked disabled>
<input class="form-check-input" type="checkbox" id="securityNotify"
checked disabled>
<label class="form-check-label" for="securityNotify">
Security alerts
</label>
@ -234,23 +263,29 @@
<form>
<div class="row mb-3">
<label for="currentPassword" class="col-md-4 col-lg-3 col-form-label">Current Password</label>
<label for="currentPassword" class="col-md-4 col-lg-3 col-form-label">Current
Password</label>
<div class="col-md-8 col-lg-9">
<input name="password" type="password" class="form-control" id="currentPassword">
<input name="password" type="password" class="form-control"
id="currentPassword">
</div>
</div>
<div class="row mb-3">
<label for="newPassword" class="col-md-4 col-lg-3 col-form-label">New Password</label>
<label for="newPassword" class="col-md-4 col-lg-3 col-form-label">New
Password</label>
<div class="col-md-8 col-lg-9">
<input name="newpassword" type="password" class="form-control" id="newPassword">
<input name="newpassword" type="password" class="form-control"
id="newPassword">
</div>
</div>
<div class="row mb-3">
<label for="renewPassword" class="col-md-4 col-lg-3 col-form-label">Re-enter New Password</label>
<label for="renewPassword" class="col-md-4 col-lg-3 col-form-label">Re-enter
New Password</label>
<div class="col-md-8 col-lg-9">
<input name="renewpassword" type="password" class="form-control" id="renewPassword">
<input name="renewpassword" type="password" class="form-control"
id="renewPassword">
</div>
</div>
@ -270,9 +305,8 @@
</div>
</section>
<script src="{{ asset('assets/dist/js/bootstrap.bundle.min.js') }}"></script>
{{-- <script src="{{ asset('assets/plugins/bootstrap/js/bootstrap.bundle.min.js') }}"></script> --}}
{{-- <script src="{{ asset('assets/dist/js/bootstrap.bundle.min.js') }}"></script> --}}
<script src="{{ asset('assets/plugins/bootstrap/js/bootstrap.bundle.min.js') }}"></script>
@livewire('management-dashboard.work-management')

View File

@ -41,11 +41,6 @@
Route::get('user-data', [PreparedProjectController::class, 'getData1'])->name('getData');
Route::get('preparedProject/{ProjectId}', [PreparedProjectController::class, 'PreparedProject'])->name('preparedProject');
Route::get('EditProjectForArticulated', [PreparedProjectController::class, 'editProjectForArticulated'])->name('EditProjectForArticulated');
@ -115,6 +110,7 @@
|however the Admin will not have access to the data of the SupersAdmins only.
|
*/
Route::controller(userController::class)
->group(function () {
@ -127,34 +123,6 @@
Route::put('editProfile/{id}', 'EditProfile')->name('editProfile');
});
/*
|--------------------------------------------------------------------------
| Create Users with Super Admin
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/
Route::middleware(['auth', 'checkUserType'])->group(function () {
// Rotas protegidas que exigem verificação de e-mail
/*
|--------------------------------------------------------------------------
| Create Projects with Super Admin and Admin
|--------------------------------------------------------------------------
|
|Crud model for the application's projects, where both their creation and the indication of project statuses are handled.
|
*/
Route::controller(CreateProjectController::class)
->group(function () {
// indication of progress bar to projects that are in 'Planning'
@ -192,6 +160,32 @@
});
/*
|--------------------------------------------------------------------------
| Create Users with Super Admin
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/
Route::get('manageAssets', [ProjectoDatacontroller::class, 'ManageAssets'])->name('manageAssets');
Route::middleware(['auth', 'checkUserType'])->group(function () {
// Rotas protegidas que exigem verificação de e-mail
/*
|--------------------------------------------------------------------------
| Create Projects with Super Admin and Admin
|--------------------------------------------------------------------------
|
|Crud model for the application's projects, where both their creation and the indication of project statuses are handled.
|
*/
Route::get('/CreateUsers', [Pending_UserController::class, 'ListPendingUsers'])->name('CreateUsers');
Route::get('/CreateUsers/{id}', [Pending_UserController::class, 'ShowFormUser'])->name('ShowPendingUser');
Route::post('formulario/receive', [Pending_UserController::class, 'store'])->name('criarUser');
@ -218,7 +212,6 @@
| be assigned to the "web" middleware group. Make something great!
|
*/
Route::get('manageAssets', [ProjectoDatacontroller::class, 'ManageAssets'])->name('manageAssets');
// Mostrar Instalação click
Route::get('units/{id}', [ProjectoDatacontroller::class, 'showUnit'])->name('showUnit');

View File

@ -39,6 +39,14 @@
'App\\Http\\Middleware\\TrustProxies' => $baseDir . '/app/Http/Middleware/TrustProxies.php',
'App\\Http\\Middleware\\ValidateSignature' => $baseDir . '/app/Http/Middleware/ValidateSignature.php',
'App\\Http\\Middleware\\VerifyCsrfToken' => $baseDir . '/app/Http/Middleware/VerifyCsrfToken.php',
'App\\Livewire\\Articulado\\AdditonalTask' => $baseDir . '/app/Livewire/Articulado/AdditonalTask.php',
'App\\Livewire\\Articulado\\SelectElementalTasksInWonkstation' => $baseDir . '/app/Livewire/Articulado/SelectElementalTasksInWonkstation.php',
'App\\Livewire\\Execução\\EquipmentsDashboard' => $baseDir . '/app/Livewire/Execução/EquipmentsDashboard.php',
'App\\Livewire\\Execução\\StepByStepEquipmentTasks' => $baseDir . '/app/Livewire/Execução/StepByStepEquipmentTasks.php',
'App\\Livewire\\Execução\\TasksDashboard' => $baseDir . '/app/Livewire/Execução/TasksDashboard.php',
'App\\Livewire\\Execução\\WorkstationDashboard' => $baseDir . '/app/Livewire/Execução/WorkstationDashboard.php',
'App\\Livewire\\ManagementDashboard\\WorkManagement' => $baseDir . '/app/Livewire/ManagementDashboard/WorkManagement.php',
'App\\Livewire\\Preparadas\\ShowQrcodeAndDetallsEquipment' => $baseDir . '/app/Livewire/Preparadas/ShowQrcodeAndDetallsEquipment.php',
'App\\Mail\\NewUserNotification' => $baseDir . '/app/Mail/NewUserNotification.php',
'App\\Models\\AmbitsEquipment' => $baseDir . '/app/Models/AmbitsEquipment.php',
'App\\Models\\CompanyProject' => $baseDir . '/app/Models/CompanyProject.php',
@ -55,6 +63,7 @@
'App\\Models\\PendingEquipment' => $baseDir . '/app/Models/PendingEquipment.php',
'App\\Models\\PendingUser' => $baseDir . '/app/Models/PendingUser.php',
'App\\Models\\Plant' => $baseDir . '/app/Models/Plant.php',
'App\\Models\\QrcodesAssociatedEquipment' => $baseDir . '/app/Models/QrcodesAssociatedEquipment.php',
'App\\Models\\SpecificAttributesEquipmentType' => $baseDir . '/app/Models/SpecificAttributesEquipmentType.php',
'App\\Models\\TasksAssociationAmbits' => $baseDir . '/app/Models/TasksAssociationAmbits.php',
'App\\Models\\TypeUser' => $baseDir . '/app/Models/TypeUser.php',
@ -67,6 +76,7 @@
'App\\Providers\\EventServiceProvider' => $baseDir . '/app/Providers/EventServiceProvider.php',
'App\\Providers\\FortifyServiceProvider' => $baseDir . '/app/Providers/FortifyServiceProvider.php',
'App\\Providers\\RouteServiceProvider' => $baseDir . '/app/Providers/RouteServiceProvider.php',
'App\\Repositories\\ReceiveTasksRepository' => $baseDir . '/app/Repositories/ReceiveTasksRepository.php',
'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
'BaconQrCode\\Common\\BitArray' => $vendorDir . '/bacon/bacon-qr-code/src/Common/BitArray.php',
'BaconQrCode\\Common\\BitMatrix' => $vendorDir . '/bacon/bacon-qr-code/src/Common/BitMatrix.php',

View File

@ -629,6 +629,14 @@ class ComposerStaticInit4de2290df2a8c5142f72130885c7079d
'App\\Http\\Middleware\\TrustProxies' => __DIR__ . '/../..' . '/app/Http/Middleware/TrustProxies.php',
'App\\Http\\Middleware\\ValidateSignature' => __DIR__ . '/../..' . '/app/Http/Middleware/ValidateSignature.php',
'App\\Http\\Middleware\\VerifyCsrfToken' => __DIR__ . '/../..' . '/app/Http/Middleware/VerifyCsrfToken.php',
'App\\Livewire\\Articulado\\AdditonalTask' => __DIR__ . '/../..' . '/app/Livewire/Articulado/AdditonalTask.php',
'App\\Livewire\\Articulado\\SelectElementalTasksInWonkstation' => __DIR__ . '/../..' . '/app/Livewire/Articulado/SelectElementalTasksInWonkstation.php',
'App\\Livewire\\Execução\\EquipmentsDashboard' => __DIR__ . '/../..' . '/app/Livewire/Execução/EquipmentsDashboard.php',
'App\\Livewire\\Execução\\StepByStepEquipmentTasks' => __DIR__ . '/../..' . '/app/Livewire/Execução/StepByStepEquipmentTasks.php',
'App\\Livewire\\Execução\\TasksDashboard' => __DIR__ . '/../..' . '/app/Livewire/Execução/TasksDashboard.php',
'App\\Livewire\\Execução\\WorkstationDashboard' => __DIR__ . '/../..' . '/app/Livewire/Execução/WorkstationDashboard.php',
'App\\Livewire\\ManagementDashboard\\WorkManagement' => __DIR__ . '/../..' . '/app/Livewire/ManagementDashboard/WorkManagement.php',
'App\\Livewire\\Preparadas\\ShowQrcodeAndDetallsEquipment' => __DIR__ . '/../..' . '/app/Livewire/Preparadas/ShowQrcodeAndDetallsEquipment.php',
'App\\Mail\\NewUserNotification' => __DIR__ . '/../..' . '/app/Mail/NewUserNotification.php',
'App\\Models\\AmbitsEquipment' => __DIR__ . '/../..' . '/app/Models/AmbitsEquipment.php',
'App\\Models\\CompanyProject' => __DIR__ . '/../..' . '/app/Models/CompanyProject.php',
@ -645,6 +653,7 @@ class ComposerStaticInit4de2290df2a8c5142f72130885c7079d
'App\\Models\\PendingEquipment' => __DIR__ . '/../..' . '/app/Models/PendingEquipment.php',
'App\\Models\\PendingUser' => __DIR__ . '/../..' . '/app/Models/PendingUser.php',
'App\\Models\\Plant' => __DIR__ . '/../..' . '/app/Models/Plant.php',
'App\\Models\\QrcodesAssociatedEquipment' => __DIR__ . '/../..' . '/app/Models/QrcodesAssociatedEquipment.php',
'App\\Models\\SpecificAttributesEquipmentType' => __DIR__ . '/../..' . '/app/Models/SpecificAttributesEquipmentType.php',
'App\\Models\\TasksAssociationAmbits' => __DIR__ . '/../..' . '/app/Models/TasksAssociationAmbits.php',
'App\\Models\\TypeUser' => __DIR__ . '/../..' . '/app/Models/TypeUser.php',
@ -657,6 +666,7 @@ class ComposerStaticInit4de2290df2a8c5142f72130885c7079d
'App\\Providers\\EventServiceProvider' => __DIR__ . '/../..' . '/app/Providers/EventServiceProvider.php',
'App\\Providers\\FortifyServiceProvider' => __DIR__ . '/../..' . '/app/Providers/FortifyServiceProvider.php',
'App\\Providers\\RouteServiceProvider' => __DIR__ . '/../..' . '/app/Providers/RouteServiceProvider.php',
'App\\Repositories\\ReceiveTasksRepository' => __DIR__ . '/../..' . '/app/Repositories/ReceiveTasksRepository.php',
'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
'BaconQrCode\\Common\\BitArray' => __DIR__ . '/..' . '/bacon/bacon-qr-code/src/Common/BitArray.php',
'BaconQrCode\\Common\\BitMatrix' => __DIR__ . '/..' . '/bacon/bacon-qr-code/src/Common/BitMatrix.php',