additional implementation of the authentication method and route selection, based on the type of user and start of creation of the client's display structure

This commit is contained in:
ygbanzato 2023-12-17 14:27:24 +00:00
parent 5dca96d473
commit ff6e6a91ad
11 changed files with 846 additions and 160 deletions

View File

@ -0,0 +1,33 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\Plant;
use App\Models\CompanyProject;
class ClientController extends Controller
{
public function receiveProjectsClient()
{
$client = Auth::user()->user_id;
$recevePlantClient = Plant::where('user_id', $client)->get();
// Extrai os plant_id da coleção $recevePlantClient
$plantIds = $recevePlantClient->pluck('plant_id');
// Busca todos os CompanyProject que têm um plant_id dentro da lista $plantIds
$allProjectsClient = CompanyProject::whereIn('plant_id', $plantIds)->get();
return view('userClient.dashboardClient',compact('allProjectsClient'));
}
public function receiveManageAssetsClient(){
// return view()
}
}

View File

@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers;
use App\Models\Plant;
use Illuminate\Http\Request;
use App\Models\CompanyProject;
use Illuminate\Support\Facades\Auth;
class ClienteController extends Controller
{
//
public function receiveProjectsClient()
{
$client = Auth::user()->user_id;
$recevePlantClient = Plant::where('user_id', $client)->get();
// Extrai os plant_id da coleção $recevePlantClient
$plantIds = $recevePlantClient->pluck('plant_id');
// Busca todos os CompanyProject que têm um plant_id dentro da lista $plantIds
$allProjectsClient = CompanyProject::whereIn('plant_id', $plantIds)->get();
return view('dashboardClient',compact('allProjectsClient'));
}
}

View File

@ -34,9 +34,11 @@
// use DataTables;
class CreateProjectController extends Controller {
class CreateProjectController extends Controller
{
public function receiveUnits($numberProject) {
public function receiveUnits($numberProject)
{
$PlantData = CompanyProject::where('company_projects_id', $numberProject)->first();
if (!$PlantData) {
@ -57,7 +59,8 @@ public function receiveUnits($numberProject) {
}
public function deleteFurtherTasks(Request $request) {
public function deleteFurtherTasks(Request $request)
{
$receiveDataEquipment = Equipment::where('equipment_id', $request->equipmentID)->first();
// Buscar os registros que correspondem ao equipmentID e que têm further_tasks_id nos selectedTasks
$tasksToDelete = OrderEquipmentTasks::where('equipment_id', $request->equipmentID)
@ -88,7 +91,8 @@ public function deleteFurtherTasks(Request $request) {
return redirect()->back()->with('success', 'Ordem de execução do equipamento: ' . $receiveDataEquipment->equipment_tag . ' Atulizada!');
}
public function addFurtherTasks(Request $request) {
public function addFurtherTasks(Request $request)
{
// Recebe e organiza os dados do equipameto recebido : ($request->equipmentID) e organiza em asc de acordo com a Ordem de execução
$equipmentId = $request->equipmentID;
$tasksToReorder = OrderEquipmentTasks::where('equipment_id', $equipmentId)
@ -150,7 +154,8 @@ public function addFurtherTasks(Request $request) {
}
public function receiveEquipmentToAssociateTasks(Request $request) {
public function receiveEquipmentToAssociateTasks(Request $request)
{
// dd($request);
foreach ($request->equipment as $equipment) {
@ -164,7 +169,8 @@ public function receiveEquipmentToAssociateTasks(Request $request) {
return redirect()->back()->with('success', 'Equipametos associados a Obra com Sucesso !');
}
public function receiveUnitsForExcelTemplate($numberProject) {
public function receiveUnitsForExcelTemplate($numberProject)
{
$receveCompanyProject = CompanyProject::where('company_projects_id', $numberProject)->first();
$recevePlant = Plant::where('plant_id', $receveCompanyProject->plant_id)->first();
$receveUnits = Unit::where('plant_id', $recevePlant->plant_id)->get();
@ -183,7 +189,8 @@ public function receiveUnitsForExcelTemplate($numberProject) {
return $this->createDownloadResponse($spreadsheet, 'Valves_Template.xlsx');
}
protected function createDownloadResponse($spreadsheet, $filename) {
protected function createDownloadResponse($spreadsheet, $filename)
{
// Create a writer object
$writer = new Xlsx($spreadsheet);
// Create a StreamedResponse with a callback
@ -200,7 +207,8 @@ function () use ($writer) {
return $response;
}
public function finishCreatingProject($numberProject) {
public function finishCreatingProject($numberProject)
{
// recebe atraves de sessao toda a vez quem entra no componente 'SelectElementalTasksInWonkstation' para selecionar as tarefas de cada Workstation
$receiveAllFurtherTasks = session('receiveAllFurtherTasks');
$receiveElementalTasks = session('receiveElementalTasks');
@ -283,7 +291,8 @@ public function finishCreatingProject($numberProject) {
}
}
public function deleteWorkstation($name) {
public function deleteWorkstation($name)
{
$workstation = ConstructionWorkstation::where('name_workstations', $name)->first();
$removeAcountUserWorkstation = User::where('user_name', $workstation->name_workstations)->first();
@ -327,7 +336,8 @@ public function deleteWorkstation($name) {
return back()->with('danger', 'Posto de Trabalho não encontrado!');
}
public function removeProjectEquipment(Request $request) {
public function removeProjectEquipment(Request $request)
{
$equipment = Equipment::find($request->EquipmentID);
@ -341,7 +351,8 @@ public function removeProjectEquipment(Request $request) {
return back()->with('success', 'Equipamento retirado da obra !');
}
public function EditEquipmentsProjects(Request $request) {
public function EditEquipmentsProjects(Request $request)
{
// dd($request);
// Localiza o equipment pelo numberProject
$equipment = Equipment::find($request->equipmentId);
@ -450,7 +461,8 @@ public function EditEquipmentsProjects(Request $request) {
->with('taskExecutionOrders', $taskExecutionOrders);
}
public function showJson($id) {
public function showJson($id)
{
$attributes = SpecificAttributesEquipmentType::where('equipment_id', $id)->get();
$OrdemTasks = OrderEquipmentTasks::where('equipment_id', $id)->get();
$allElementalTasks = ElementalTasks::all();
@ -462,7 +474,8 @@ public function showJson($id) {
]);
}
public function receveTasksWorkstationPlanning($WorkstationId) {
public function receveTasksWorkstationPlanning($WorkstationId)
{
$workstationsAssociationTasks = WorkstationsAssociationTasks::where('id_workstations', $WorkstationId)->get();
return response()->json([
@ -471,7 +484,8 @@ public function receveTasksWorkstationPlanning($WorkstationId) {
}
public function createWorkStations(Request $request) {
public function createWorkStations(Request $request)
{
// Pega o número de estações de trabalho do request
$numberWorkstations = $request->numberWorkstations;
@ -520,7 +534,8 @@ public function createWorkStations(Request $request) {
// Funcao apenas para retornar os dados necessarios para a view criar uma Obra.
public function createProjectForStep1() {
public function createProjectForStep1()
{
$companies = User::where('type_users', 3)->get();
// Apos terminar não vai ficar step 1
return view('projectsClients/createProject', ['step' => 1], ['companies' => $companies]);
@ -528,7 +543,8 @@ public function createProjectForStep1() {
// Progress Bar
//Devolve para a primeira para na Descrição do projecto apenas user com ID 3, quer dizer que apenas as "empresas"
public function showStep1($company_projects_id) {
public function showStep1($company_projects_id)
{
// $projects = CompanyProject::find($company_projects_id);
$projects = CompanyProject::with('user')->find($company_projects_id);
@ -541,16 +557,19 @@ public function showStep1($company_projects_id) {
}
// Se forem alterados dados dos Detalhes da Obra, vai ser alterado
public function EditprocessStep1(Request $request) {
public function EditprocessStep1(Request $request)
{
}
public function removePendingEquipment($id) {
public function removePendingEquipment($id)
{
$equipment = PendingEquipment::findOrFail($id);
$equipment->delete();
return back()->with('success', 'Equipamento pendente removido com sucesso!');
}
public function CreateNewEquipmentFromPendingEquipment(Request $request, $id) {
public function CreateNewEquipmentFromPendingEquipment(Request $request, $id)
{
$checkPendingEquipment = PendingEquipment::findOrFail($id);
$counter = 2;
@ -589,7 +608,8 @@ public function CreateNewEquipmentFromPendingEquipment(Request $request, $id) {
}
public function processStep1(Request $request) {
public function processStep1(Request $request)
{
// Validação...
$installationId = $request->input('installation_id');
@ -637,7 +657,8 @@ public function processStep1(Request $request) {
->with('success', 'Detalhes, Projecto criado com sucesso');
}
public function showStep2($company_projects_id) {
public function showStep2($company_projects_id)
{
// Verifique se a etapa 1 foi concluída
// if (!session('form_data.step1')) {
@ -705,7 +726,8 @@ public function showStep2($company_projects_id) {
->with('receiveNumberProject', $project);
}
public function createEquipmentManual(Request $request) {
public function createEquipmentManual(Request $request)
{
// EquipmentAmbit
// *** Recebe a Instalação(Plant), com base no número da Obra Criada
$receivePlant = DB::table('plants')
@ -819,18 +841,24 @@ public function createEquipmentManual(Request $request) {
->with('success', 'Equipamento criado com sucesso')
->with('listEquipmentsProjects', $listEquipmentsProjects);
}
public function receiveIdEquipment(Equipment $equipment) {
public function receiveIdEquipment(Equipment $equipment)
{
// return response()->json($equipment);
return view('projectsClients/articulated_2', ['equipment' => $equipment]);
}
public function processStep2(Request $request) {
public function processStep2(Request $request)
{
// Valide e processe os dados do formulário
$file = $request->file('documento');
// Recebe a id do Projecto criado
$company_projects_id = $request->numberProject;
// Inicializa o contador para ispt_number
$isptNumber = 1;
// Certifique-se de que um arquivo foi enviado
if ($file) {
// Carregue o arquivo Excel
@ -914,13 +942,15 @@ public function processStep2(Request $request) {
$newEquipament->equipment_tag = $datas['tag'];
$newEquipament->equipment_serial_number = $datas['n_serie'];
$newEquipament->equipment_model = $datas['modelo'];
$newEquipament->ispt_number = $isptNumber;
$newEquipament->company_projects_id = $company_projects_id;
$newEquipament->save();
$countNewEquipment++;
$isptNumber++;
// Guardo os valores de 'id' e do 'tipo de equipamento' que nosso novo equipamento acabado de criar
$receveEquipment_ID = $newEquipament->equipment_id;
$receveEquipament_type_ID = $newEquipament->equipment_type_id;
@ -995,7 +1025,8 @@ public function processStep2(Request $request) {
return redirect('/test3');
}
public function showStep3($company_projects_id) {
public function showStep3($company_projects_id)
{
$equipments = Equipment::where('company_projects_id', $company_projects_id)
->get();
@ -1049,7 +1080,8 @@ public function showStep3($company_projects_id) {
->with('futherTasks', $futherTasks);
}
public function workstationsAssociationTasks(Request $request) {
public function workstationsAssociationTasks(Request $request)
{
// dd($request);
$workStation = ConstructionWorkstation::where('id_workstations', $request->idWorkStation)->first();
@ -1105,7 +1137,8 @@ public function workstationsAssociationTasks(Request $request) {
return back()->with('success', 'Posto de trabalho : ' . $workStation->name_workstations . ' atualizado com sucesso!');
}
public function processStep3(Request $request) {
public function processStep3(Request $request)
{
// Valide e processe os dados do formulário
// ...
session(['form_data.step3' => $request->all()]);
@ -1115,7 +1148,8 @@ public function processStep3(Request $request) {
// ...
}
public function index() {
public function index()
{
// $results = DB::table('equipaments')
// ->join('specific_attributes_equipament_types', 'equipaments.equipment_ID', '=', 'specific_attributes_equipament_types.tb_equipament_id')
// ->join('general_attributes_equipaments', 'specific_attributes_equipament_types.specific_Attributes_Equipment_Type_ID', '=', 'general_attributes_equipaments.general_Attributes_Equipment_ID')
@ -1159,13 +1193,15 @@ public function index() {
}
public function listCompanies() {
public function listCompanies()
{
$companies = User::where('type_users', 3)->get();
return view('projectsClients/createProject', ['companies' => $companies]);
}
public function createProject(Request $request) {
public function createProject(Request $request)
{
// Validação...
$installationId = $request->input('installation_id');
@ -1201,7 +1237,8 @@ public function createProject(Request $request) {
}
public function storeProject(Request $request) {
public function storeProject(Request $request)
{
if ($request->input('company_id') == 'new') {
$company = new CompanyProject; // Substitua "Company" pelo nome do seu modelo de empresas
$company->name = $request->input('new_company_name');
@ -1215,7 +1252,8 @@ public function storeProject(Request $request) {
// Agora, você pode usar $company_id ao criar o projeto
}
public function getByUserNif(Request $request) {
public function getByUserNif(Request $request)
{
// dd(Plant::where('user_id', $request->input('user_id'))->get());
@ -1225,7 +1263,8 @@ public function getByUserNif(Request $request) {
return response()->json($installations);
}
public function getAmbits($equipmentType) {
public function getAmbits($equipmentType)
{
$ambits = DB::table('ambits_equipments')
->select('ambits_equipments.*')
@ -1234,7 +1273,8 @@ public function getAmbits($equipmentType) {
return response()->json($ambits);
}
public function getAttributes($id) {
public function getAttributes($id)
{
$equipment = Equipment::with('specificAttributes')->find($id);
return response()->json($equipment->specificAttributes);
}

View File

@ -34,7 +34,7 @@ public function getDataEquipment(Request $request)
// Query padrão que todas as dataTables recebem, a partir dele fazemos os filt
$query = Equipment::with('equipmentType', 'unit')
->select(['equipment_id', 'equipment_tag', 'unit_id', 'equipment_type_id']);
->select(['equipment_id','ispt_number' ,'equipment_tag', 'unit_id', 'equipment_type_id']);
// Consultas para a Criacao da Obra, Ambas vao ser diferentes, pois na creacao, recebes os equipamentos por obra, porem no portifolio vamos buscar todos.
if ($numberProject) {
@ -96,13 +96,6 @@ public function getDataEquipment(Request $request)
return $actionBtn;
})
// ->addColumn('action', function ($equipment) use ($numberProject) {
// // Lógica para a coluna de ação com o link correto
// $actionBtn = '<a title="Detalhes do equipamento" href="' . route('test11', ['equipmentID' => $equipment->equipment_id]) . '"><i class="fa-solid fa-eye text-primary"></i></a>';
// return $actionBtn;
// })
->editColumn('unit_id', function ($equipment) {
// Isto irá substituir 'unit_id' pelo 'unit_name' associado
return $equipment->unit->unit_name ?? 'N/A';

View File

@ -16,18 +16,64 @@ class CheckUserType
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next, $routeType)
public function handle(Request $request, Closure $next)
{
$userType = auth()->user()->userType->type_user;
if ($routeType == 'enterWorkstation' && $userType != 'Técnico') {
return redirect()->route('home'); // ou qualquer rota padrão para redirecionar
if (!auth()->check()) {
return redirect()->route('login');
}
if ($routeType == 'home' && $userType != 'Super_Administrador') {
return redirect()->route('enterWorkstation'); // ou qualquer rota padrão para redirecionar
$userType = auth()->user()->userType->type_user;
$currentRouteName = $request->route()->getName();
// Permitir que o Super_Administrador acesse qualquer rota
if ($userType === 'Super_Administrador') {
return $next($request);
}
// Obter as rotas permitidas para o tipo de usuário atual
$allowedRoutes = $this->getAllowedRoutesForUserType($userType);
// Verificar se a rota atual está permitida para o tipo de usuário
if (!in_array($currentRouteName, $allowedRoutes)) {
// Redirecionar para a rota padrão do tipo de usuário
return redirect()->route($this->getDefaultRouteForUserType($userType));
}
return $next($request);
}
/**
* Retorna as rotas permitidas para um dado tipo de usuário.
*/
protected function getAllowedRoutesForUserType($userType)
{
switch ($userType) {
case 'Técnico':
return ['enterWorkstation', 'getEquipmentData', 'receiveAnswersEquipment'];
case 'Empresa':
return ['dashboardClient', 'manageAssetsClient'];
// Adicione mais casos conforme necessário
default:
return [];
}
}
/**
* Retorna a rota padrão para um dado tipo de usuário.
*/
protected function getDefaultRouteForUserType($userType)
{
switch ($userType) {
case 'Super_Administrador':
return 'home';
case 'Técnico':
return 'enterWorkstation';
case 'Empresa':
return 'dashboardClient';
// Adicione mais casos conforme necessário
default:
}
}
}

View File

@ -0,0 +1,398 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<link rel="stylesheet" href="{{ asset('assets/dist/css/adminlte.css') }}">
<link rel="stylesheet"
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
<!-- Font Awesome -->
{{-- <link rel="stylesheet" href="{{ asset('assets/plugins/fontawesome-free/css/all.min.css') }}"> --}}
<!-- Font Awesome 6.1.1 -->
{{-- <link rel="stylesheet" href="{{ asset('plugins/fontawesome-611/css/all.min.css') }}"> --}}
<link rel="stylesheet" href="{{ asset('assets/plugins/fontawesome-6.4.2/css/all.css') }}">
<!-- Ionicons -->
<link rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
<!-- Tempusdominus Bootstrap 4 -->
<link rel="stylesheet"
href="{{ asset('assets/plugins/tempusdominus-bootstrap-4/css/tempusdominus-bootstrap-4.min.css') }}">
<!-- iCheck -->
<link rel="stylesheet" href="{{ asset('assets/plugins/icheck-bootstrap/icheck-bootstrap.min.css') }}">
<!-- JQVMap -->
<link rel="stylesheet" href="{{ asset('assets/plugins/jqvmap/jqvmap.min.css') }}">
<!-- Theme style -->
<!-- overlayScrollbars -->
<link rel="stylesheet" href="{{ asset('assets/plugins/overlayScrollbars/css/OverlayScrollbars.min.css') }}">
<!-- Daterange picker -->
<link rel="stylesheet" href="{{ asset('assets/plugins/daterangepicker/daterangepicker.css') }}">
<!-- summernote -->
<link rel="stylesheet" href="{{ asset('assets/plugins/summernote/summernote-bs4.min.css') }}">
<!-- jQuery UI -->
<link rel="stylesheet" href="{{ asset('assets/plugins/jquery-ui/jquery-ui.css') }}">
<!-- daterange picker -->
<link rel="stylesheet" href="{{ asset('assets/plugins/daterangepicker/daterangepicker.css') }}">
<!-- 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-buttons/css/buttons.bootstrap4.min.css') }}">
<!-- jQuery -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<!-- DataTables CSS -->
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.11.3/css/dataTables.bootstrap4.min.css">
<!-- DataTables JavaScript -->
<script src="https://cdn.datatables.net/1.11.3/js/jquery.dataTables.min.js"></script>
<!-- DataTables Bootstrap 4 JavaScript -->
<script src="https://cdn.datatables.net/1.11.3/js/dataTables.bootstrap4.min.js"></script>
<!-- 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>
#isptGroupLink:hover {
color: #EAF3F6;
}
.spin {
animation: spin 1s infinite linear;
}
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
/* ***************************** */
.accordion {
overflow-anchor: none;
}
.accordion>.card {
overflow: hidden;
}
.accordion>.card:not(:last-of-type) {
border-bottom: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.accordion>.card:not(:first-of-type) {
border-top-left-radius: 0;
border-top-right-radius: 0;
}
.accordion>.card>.card-header {
border-radius: 0;
margin-bottom: 0;
}
/* Nome de baixo do circulo */
.steps {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 2rem;
position: relative;
}
/* Nome dentro do circulo de ainda não de chegar o progress bar */
.step-button {
width: 50px;
height: 50px;
border-radius: 50%;
border: none;
background-color: var(--prm-gray);
transition: .4s;
display: flex;
align-items: center;
text-align: center;
justify-content: center;
}
.step-button[aria-expanded="true"] {
width: 60px;
height: 60px;
background-color: var(--prm-color);
color: #fff;
}
.done {
background-color: var(--prm-color);
color: #fff;
}
.step-item {
z-index: 10;
text-align: center;
}
#progress {
-webkit-appearance: none;
position: absolute;
width: 95%;
z-index: 5;
height: 10px;
margin-left: 18px;
margin-bottom: 18px;
}
/* to customize progress bar */
#progress::-webkit-progress-value {
background-color: var(--prm-color);
transition: .5s ease;
}
#progress::-webkit-progress-bar {
background-color: var(--prm-gray);
}
#editImg {
width: 215px;
height: 215px;
object-fit: cover;
/* Isso fará com que a imagem cubra completamente a área sem distorcer */
}
</style>
</head>
<body class="hold-transition sidebar-mini layout-fixed">
<!-- Wrapper -->
<div class="wrapper">
<!-- Preloader -->
<div class="preloader flex-column justify-content-center align-items-center">
<img class="animation__shake spin" src="{{ asset('img/logo4.0.jpg') }}" alt="AdminLTELogo" height="60"
width="60">
</div>
<!-- Navbar -->
<nav class="main-header navbar navbar-expand navbar-white navbar-light">
<!-- Left navbar links -->
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" data-widget="pushmenu" href="#" role="button"><i
class="fas fa-bars"></i></a>
</li>
</ul>
<!-- Right navbar links -->
<ul class="navbar-nav ml-auto align-items-center">
<li class="nav-item my-2">
<form id="language-form" action="{{ route('language.switch') }}" method="post"
class="form-inline">
@csrf
<select class="custom-select" name="locale" onchange="this.form.submit()">
<option value="en" {{ app()->getLocale() == 'en' ? 'selected' : '' }}>English</option>
<option value="pt" {{ app()->getLocale() == 'pt' ? 'selected' : '' }}>Português
</option>
</select>
</form>
</li>
<li class="nav-item">
<a class="nav-link" data-widget="fullscreen" href="#" role="button">
<i class="fas fa-expand-arrows-alt"></i>
</a>
</li>
</ul>
</nav>
<!-- /.navbar -->
<!-- Main Sidebar Container -->
<aside class="main-sidebar sidebar-dark-primary elevation-4">
<!-- Brand Logo -->
<a href="#" class="brand-link" style="pointer-events: none;">
<img src="{{ asset('/img/ispt.jpg') }}" alt="AdminLTE Logo" class="brand-image img-circle elevation-3"
style="opacity: .8">
<span class="brand-text font-weight-light">ISPT 4.0</span>
</a>
<!-- Sidebar -->
<div class="sidebar">
<!-- Sidebar user panel (optional) -->
<div class="user-panel mt-3 pb-3 mb-3 d-flex">
{{-- Verifica se esta logado , se estiver , busca os dados do utilizador atual. --}}
@if (Auth::check())
<div class="image">
<img class="img-circle elevation-2 imgProfile editImg"
src="{{ asset('user_logos/' . (Auth::user()->user_logo ?? 'logoISPT4.0.jpg')) }}"
alt="User Logo">
</div>
<div class="info">
<a href="{{ route('usersProfiles', ['id' => Auth::user()->user_id]) }}"
class="d-block">{{ Auth::user()->userType?->type_user }}</a>
</div>
@endif
</div>
<!-- Sidebar Menu -->
<nav class="mt-2">
<ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu"
data-accordion="false">
<!-- Add icons to the links using the .nav-icon class
with font-awesome or any other icon font library -->
<li class="nav-item">
<a href="{{ route('dashboardClient') }}" class="nav-link active">
<i class="nav-icon fas fa-tachometer-alt"></i>
<p> {{ __('messages.dashboard.dashboard') }} </p>
</a>
</li>
<li class="nav-item">
<a href="{{ route('manageAssetsClient') }}" class="nav-link">
<i class="fa-solid fa-file-edit"></i>
<p> {{ __('messages.portfolio.top_view_part.management_assets') }}</p>
</a>
</li>
<br>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit" class="btn btn-danger">Terminar sessão</button>
</form>
<!-- /.Single menu item -->
</ul>
</nav>
<!-- /.sidebar-menu -->
</div>
<!-- /.sidebar -->
</aside>
<div class="content-wrapper">
@yield('Main-content')
{{-- <section class="content">
<div class="container-fluid">
<div class="row justify-content-center">
<div class="col-md-12">
</div>
./col-md-12
</div>
./row justify-content-center
</div>
./container-fluid
</section> --}}
{{-- ./content --}}
</div>
{{-- ./content-wrapper --}}
<!-- Control Sidebar -->
<aside class="control-sidebar control-sidebar-dark">
<!-- Control sidebar content goes here -->
</aside>
<!-- /.control-sidebar -->
</div>
<!-- ./ Wrapper -->
<footer class="main-footer">
<strong>Copyright &copy; 2017-{{ date('Y') }} <a href="https://www.isptgroup.com" id="isptGroupLink">ISPT
-
Industrial Services, SA</a>.</strong>
Todos os direitos reservados.
<div class="float-right d-none d-sm-inline-block">
<b>Versão</b> {{ config('app.version') }}
</div>
</footer>
</body>
@yield('scriptsTemplateAdmin')
{{-- Scripts-Plugins --}}
<script src="{{ asset('assets/dist/js/bootstrap.bundle.min.js') }}"></script>
<script src="{{ asset('assets/plugins/jquery/jquery.min.js') }}"></script>
<!-- jQuery UI 1.11.4 -->
<script src="{{ asset('assets/plugins/jquery-ui/jquery-ui.min.js') }}"></script>
<!-- Resolve conflict in jQuery UI tooltip with Bootstrap tooltip -->
<script>
$.widget.bridge('uibutton', $.ui.button)
</script>
<!-- Bootstrap 4 -->
<script src="{{ asset('assets/plugins/bootstrap/js/bootstrap.bundle.min.js') }}"></script>
<script src="{{ asset('assets/plugins/bootstrap/js/bootstrap.bundle.min.js') }}"></script>
<!-- ChartJS -->
<script src="{{ asset('assets/plugins/chart.js/Chart.min.js') }}"></script>
<!-- Sparkline -->
<script src="{{ asset('assets/plugins/sparklines/sparkline.js') }}"></script>
<!-- JQVMap -->
<script src="{{ asset('assets/plugins/jqvmap/jquery.vmap.min.js') }}"></script>
<script src="{{ asset('assets/plugins/jqvmap/maps/jquery.vmap.usa.js') }}"></script>
<!-- jQuery Knob Chart -->
<script src="{{ asset('assets/plugins/jquery-knob/jquery.knob.min.js') }}"></script>
<!-- daterangepicker -->
<script src="{{ asset('assets/plugins/moment/moment.min.js') }}"></script>
<script src="{{ asset('assets/plugins/daterangepicker/daterangepicker.js') }}"></script>
<!-- Tempusdominus Bootstrap 4 -->
<script src="{{ asset('assets/plugins/tempusdominus-bootstrap-4/js/tempusdominus-bootstrap-4.min.js') }}"></script>
<!-- Summernote -->
<script src="{{ asset('assets/plugins/summernote/summernote-bs4.min.js') }}"></script>
<!-- overlayScrollbars -->
<script src="{{ asset('assets/plugins/overlayScrollbars/js/jquery.overlayScrollbars.min.js') }}"></script>
<!-- AdminLTE App -->
<script src="{{ asset('assets/dist/js/adminlte.js') }}"></script>
<!-- AdminLTE for demo purposes -->
{{-- <script src="{{ asset('js/demo.js') }}"></script>
<!-- AdminLTE dashboard demo (This is only for demo purposes) -->
<script src="{{ asset('js/pages/dashboard.js') }}"></script> --}}
<!-- jQuery Script fadeIn fadeOut for the dropdown -->
<script src="{{ asset('assets/plugins/datatables/jquery.dataTables.min.js') }}"></script>
<script src="{{ asset('assets/plugins/datatables-bs4/js/dataTables.bootstrap4.min.js') }}"></script>
<script src="{{ asset('assets/plugins/datatables-responsive/js/dataTables.responsive.min.js') }}"></script>
<script src="{{ asset('assets/plugins/datatables-responsive/js/responsive.bootstrap4.min.js') }}"></script>
<script src="{{ asset('assets/plugins/datatables-buttons/js/dataTables.buttons.min.js') }}"></script>
<script src="{{ asset('assets/plugins/datatables-buttons/js/buttons.bootstrap4.min.js') }}"></script>
<script src="{{ asset('assets/plugins/jszip/jszip.min.js') }}"></script>
<script src="{{ asset('assets/plugins/pdfmake/pdfmake.min.js') }}"></script>
<script src="{{ asset('assets/plugins/pdfmake/vfs_fonts.js') }}"></script>
<script src="{{ asset('assets/plugins/datatables-buttons/js/buttons.html5.min.js') }}"></script>
<script src="{{ asset('assets/plugins/datatables-buttons/js/buttons.print.min.js') }}"></script>
<script src="{{ asset('assets/plugins/datatables-buttons/js/buttons.colVis.min.js') }}"></script>
</html>

View File

@ -1220,6 +1220,7 @@ class="btn btn-info">Baixar Template</a>
<thead>
<tr>
<th>ID</th>
<th>Numero Ispt</th>
<th>Tag</th>
<th>Fabrica</th>
<th>Tipo</th>
@ -1441,6 +1442,10 @@ class="btn btn-primary float-right">Seguinte</a>
data: 'equipment_id',
name: 'equipment_id'
},
{
data: 'ispt_number',
name: 'ispt_number'
},
{
data: 'equipment_tag',
name: 'equipment_tag'

View File

@ -7,8 +7,8 @@
<div class="card card-primary">
<div class="card-header "> <!-- Flex container with spaced between items -->
<h3 class="float-left">Numero ispt</h3> <!-- This item will be on the left -->
<h3 class="float-right">{{ $dataEquipment->equipment_tag }}</h3> <!-- This item will be on the right -->
<h3 class="float-left"><b>Número ISPT:</b> {{ $dataEquipment->ispt_number }}</h3> <!-- This item will be on the left -->
<h3 class="float-right"> <b>Tag:</b> {{ $dataEquipment->equipment_tag }}</h3> <!-- This item will be on the right -->
</div>
<div class="card-body">

View File

@ -0,0 +1,113 @@
@extends('Templates/templateClient')
@section('Main-content')
<!-- Content Wrapper. Contains page content -->
<!-- Content Header (Page header) -->
<div class="content-header">
<div class="container-fluid">
<div class="row mb-2">
<div class="col-sm-6">
<h1 class="m-0" style="color:#09255C">Dashboard</h1>
</div><!-- /.col -->
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item"><a href="#"></a>Dashboard</li>
</ol>
</div><!-- /.col -->
</div><!-- /.row -->
</div><!-- /.container-fluid -->
</div>
<!-- /.content-header -->
<!-- Main content -->
<section class="content">
<div class="container-fluid">
<div class="row">
{{-- Execucao --}}
<div class="col-md">
<div class="card card-row card-default">
<!-- Card header -->
<div class="card-header info-box bg-warning">
<span class="info-box-icon"><i class="fas fa-file-alt"></i></span>
<div class="info-box-content">
<span class="info-box-text">{{ __('messages.dashboard.on_going.description') }}</span>
<span {{-- class="info-box-number">{{ $CompanyProject->where('order_project', 3)->count() }}</span> --}} <span class="progress-description">
{{ __('messages.dashboard.on_going.text') }}
</span>
</div>
<!-- /.info-box-content -->
</div>
<!-- /.info-box -->
<!-- /.Card header-->
<div class="card-body">
@foreach ($allProjectsClient as $project)
@if ($project->order_project == 3)
<div class="card card-secondary card-outline">
<div class="card-header">
<h5 class="progress-description">{{ $project->company_project_description }}
</h5>
<div class="card-tools">
<a href="{{ route('ExecutionProject', ['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>
@endif
@endforeach
</div>
</div>
</div>
{{-- ./Execucao --}}
{{-- Concluidas --}}
<div class="col-md">
<div class="card card-row card-success">
<!-- Card header -->
<div class="card-header info-box bg-success">
<span class="info-box-icon"><i class="fas fa-check-circle"></i></span>
<div class="info-box-content">
<span class="info-box-text">{{ __('messages.dashboard.finished.description') }}</span>
<span {{-- class="info-box-number">{{ $CompanyProject->where('order_project', 4)->count() }}</span> --}} <span class="progress-description">
{{ __('messages.dashboard.finished.text') }}
</span>
</div>
<!-- /.info-box-content -->
</div>
<!-- /.info-box -->
<!-- /.Card header-->
<div class="card-body">
@foreach ($allProjectsClient as $project)
@if ($project->order_project == 4)
<div class="card card-secondary card-outline">
<div class="card-header">
<h5 class="progress-description">{{ $project->company_project_description }}
</h5>
<div class="card-tools">
<a href="{{ route('ExecutionProject', ['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>
@endif
@endforeach
</div>
</div>
</div>
{{-- ./Concluidas --}}
</div>
</div>
</section>
@endsection

View File

@ -0,0 +1,6 @@
@extends('Templates/templateClient')
@section('Main-content')
<!-- Content Wrapper. Contains page content -->
<h1> Teste Gestao do cliente</h1>
@endsection

View File

@ -1,5 +1,6 @@
<?php
use App\Http\Controllers\ClientController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
@ -91,12 +92,19 @@
Route::post('receiveAnswersEquipment', [WorkstationsJobsController::class, 'receiveAnswersEquipment'])->name('receiveAnswersEquipment');
});
Route::middleware(['checkUserType:testClient'])->group(function () {
Route::get('dashboardClient', [ClientController::class, 'receiveProjectsClient'])->name('dashboardClient');
Route::get('manageAssetsClient', [ClientController::class, 'receiveManageAssetsClient'])->name('manageAssetsClient');
});
/*
|--------------------------------------------------------------------------
| User_Type (Super_Administrador)
|--------------------------------------------------------------------------
|*** Routes unique access to the Super_Administrator, Administrator
*/
Route::middleware(['checkUserType:home'])->group(function () {
Route::get('/', [ProjectoDatacontroller::class, ('HomePage')])->name('home');
@ -125,7 +133,6 @@
|--------------------------------------------------------------------------
|
*/
Route::controller(CreateProjectController::class)
->group(function () {
@ -191,7 +198,6 @@
// Mostrar Instalação click
// Route::middleware(['checkUserType:enterWorkstation'])
});
});
@ -216,3 +222,20 @@
Route::get('api/receivePlants/{receiveAllClients}', [ProjectoDatacontroller::class, 'receivePlants']);
Route::get('api/receiveUnitsManageAssets/{receivePlantClientRelated}', [ProjectoDatacontroller::class, 'receiveUnitsManageAssets']);
// Rotas para o tipo de usuário 'Técnico'
Route::middleware(['auth', 'checkUserType:enterWorkstation'])->group(function () {
Route::get('enterWorkstation', function () {
return view('workstations.start');
})->name('enterWorkstation');
// Adicione outras rotas específicas para 'Técnico' aqui
});
// Rotas para o tipo de usuário 'Empresa'
Route::middleware(['auth', 'checkUserType:dashboardClient'])->group(function () {
Route::get('dashboardClient', [ClientController::class, 'receiveProjectsClient'])->name('dashboardClient');
// Adicione outras rotas específicas para 'Empresa' aqui
});