diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php index ce6fb724..70d01591 100644 --- a/app/Http/Controllers/ClientController.php +++ b/app/Http/Controllers/ClientController.php @@ -4,6 +4,7 @@ use App\Models\AmbitsEquipment; use App\Models\AssociationCompanyUser; +use App\Models\Company; use App\Models\Equipment; use App\Models\EquipmentAssociationAmbit; use App\Models\EquipmentWorkHistory; @@ -300,7 +301,7 @@ public function getDataProjectsClient(Request $request) //Criar Filtros para Atualizar os dados com base neles. - $allPlantsClient = Plant::where('user_id', $clientID)->pluck('plant_id')->toArray(); + $allPlantsClient = Plant::where('company_id', $clientID)->pluck('plant_id')->toArray(); $query = CompanyProject::with('plant') // Assegure-se de que a relação está correta. ->whereIn('plant_id', $allPlantsClient) @@ -444,8 +445,10 @@ public function reportingDataClient($clientID = null) $clientID = Auth::user()->user_id; } + $companyDetails = Company::where('company_id',$clientID)->first(); + // Busca todas as Instalacoes com base no id do CLIENTE - $allPlantsClient = Plant::where('user_id', $clientID)->get(); + $allPlantsClient = Plant::where('company_id', $companyDetails->company_id)->get(); // Extrai os plant_id da coleção $recevePlantClient $plantsIds = $allPlantsClient->pluck('plant_id'); diff --git a/app/Http/Controllers/CreateProjectController.php b/app/Http/Controllers/CreateProjectController.php index bebeefe3..b9825e37 100755 --- a/app/Http/Controllers/CreateProjectController.php +++ b/app/Http/Controllers/CreateProjectController.php @@ -845,7 +845,7 @@ public function CreateNewEquipmentFromPendingEquipment(Request $request, $id) public function processStep1(Request $request) { - // dd($request); + dd($request); //NAO DEVE SER CRIAR UMA NOVA EMPRESA NA CRIACAO DA OBRA (era uma boa ideia para facilitar ao Admin ter que criar a empresa para Depois a Obra, mas e necessario pelo facto da autentificao de 2 factores e envio e email , entao devido essa adicoes, nao preciso atualmente fazer sentido criar isto) // Dito isto vamos sempre pensar que o Cliente ja deve estar criado , para ser feita uma Obra para o mesmo. // dd($request); @@ -1146,7 +1146,6 @@ public function processStep2(Request $request) // Inicializa o contador para ispt_number $isptNumber = 1; - // Confirma que o arquivo foi enviado,ou seja sua existencia. // Antes de verificar o documento excel, deve ter uma forma de confirmar o mesmo como arquivo legitivo para criar dados de acordo com o nosso template. if ($file) { @@ -1218,12 +1217,10 @@ function normalize($value) foreach ($data as $i => $dataLines) { - - - // Em cada um das linhas horizontais do excel, vai se guardar a 'key' vinculada ao valor do campo preenchido ou seja a 'key' vai ter o mesmo nome de um dos dados da tabela 'general_attributes_equipaments' na coluna : general_attributes_equipment_description, assim sendo mais facil implementar na tabela : specific_attributes_equipament_types $joinArrays = array_combine($columnNames, $dataLines); + // vai guardar todos os campos de possiveis novos equipamentos, cada um em um array para multiplos inserts, na base de dados $datas = array_filter($joinArrays, function ($chave) { return !empty ($chave); @@ -1243,6 +1240,7 @@ function normalize($value) ->where('plant_id', $detailsCompanyProject->plant_id) ->first(); + //Indentifica qual o tipo de equipamento selecionado de acordo com a tabela EquipmentType $equipmentType = EquipmentType::where('equipment_type_name', $datas['equipment_type_name'])->first(); @@ -1753,17 +1751,19 @@ public function storeProject(Request $request) public function getByUserNif(Request $request) { + // dd($request); + $companyId = $request->input('company_id'); // Considerando que este ID é na verdade o ID da empresa // Busca as instalações associadas à empresa - // $installations = Plant::where('company_id', $companyId)->get(); + $installations = Plant::where('company_id', $companyId)->get(); // Busca os usuários associados à empresa $userIds = AssociationCompanyUser::where('company_id', $companyId)->pluck('user_id'); $users = User::whereIn('user_id', $userIds)->get(); return response()->json([ - // 'installations' => $installations, + 'installations' => $installations, 'users' => $users ]); } diff --git a/app/Http/Controllers/ExecutionProjectController.php b/app/Http/Controllers/ExecutionProjectController.php index 8cbb256d..795eef88 100755 --- a/app/Http/Controllers/ExecutionProjectController.php +++ b/app/Http/Controllers/ExecutionProjectController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Models\Company; use App\Models\EquipmentWorkHistory; use App\Models\Plant; use App\Models\Unit; @@ -409,16 +410,6 @@ public function getDataEquipment1(Request $request) } - - - - - - - - - - public function enterWorkstation() { return view('workstations/index'); @@ -429,12 +420,32 @@ public function receiveExecutionProject($ProjectId) $DatasProject = CompanyProject::find($ProjectId); $equipmentsTypes = EquipmentType::all(); + $receivePlant = Plant::where('plant_id', $DatasProject->plant_id)->first(); + $receiveCompany = Company::where('company_id', $receivePlant->company_id)->first(); + // return view('projectsClients/executionProject') return view('projectsClients/executionProjectNew') ->with('DatasProject', $DatasProject) - ->with('equipmentsTypes', $equipmentsTypes); + ->with('equipmentsTypes', $equipmentsTypes) + ->with('receiveCompany', $receiveCompany); + } + public function changeFromExecutionToPlanning($projectID) + { + $receiveCompanyProject = CompanyProject::where('company_projects_id', $projectID)->first(); + + if ($receiveCompanyProject) { + $receiveCompanyProject->order_project = 1; // Supondo que 1 seja 'Planeamento' + $receiveCompanyProject->save(); + return redirect()->route('articulated_2', ['projectID' => $receiveCompanyProject->company_projects_id]) + ->with('success', 'O projeto foi alterado para Planeamento.'); + } else { + return back()->with('error', 'Projeto não encontrado.'); + } + } + + public function receiveWorkstationExecutionProject($receiveNumberProject) { $model = ConstructionWorkstation::where('company_projects_id', $receiveNumberProject)->with('workstationsAssociationTasks'); diff --git a/app/Http/Controllers/LanguageController.php b/app/Http/Controllers/LanguageController.php index 46ace41f..b94f2b60 100755 --- a/app/Http/Controllers/LanguageController.php +++ b/app/Http/Controllers/LanguageController.php @@ -10,7 +10,7 @@ public function switchLanguage(Request $request) { $locale = $request->input('locale'); - if (!in_array($locale, ['en', 'pt'])) { + if (!in_array($locale, ['pt', 'en'])) { abort(400); } diff --git a/app/Http/Controllers/PreparedProjectController.php b/app/Http/Controllers/PreparedProjectController.php index d5ed39d9..31309c49 100755 --- a/app/Http/Controllers/PreparedProjectController.php +++ b/app/Http/Controllers/PreparedProjectController.php @@ -2,7 +2,9 @@ namespace App\Http\Controllers; +use App\Models\Company; use App\Models\EquipmentWorkHistory; +use App\Models\Plant; use App\Models\QrcodesAssociatedEquipment; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; @@ -74,7 +76,6 @@ class PreparedProjectController extends Controller public function showAllEquipmentsInProjectForQrCode($projectId) { $equipments = Equipment::where('company_projects_id', $projectId)->get(); - $userLogoPath = Auth::user()->user_logo ? asset('user_logos/' . Auth::user()->user_logo) : asset('user_logos/logoISPT4.0.jpg'); $equipmentData = []; foreach ($equipments as $equipment) { @@ -95,11 +96,22 @@ public function showAllEquipmentsInProjectForQrCode($projectId) ]; } + $detailsCompanyProject = CompanyProject::find($projectId); + $detailsPlant = Plant::where('plant_id', $detailsCompanyProject->plant_id)->first(); + + $detailsCompany= Company::where('company_id', $detailsPlant->company_id)->first(); + + $logoPath = public_path('companies_logo/' . ($detailsCompany->company_logo ?: 'logoISPT4.0.jpg')); + + if (!file_exists($logoPath)) { + $logoPath = public_path('companies_logo/logoISPT4.0.jpg'); + } + // dd($equipmentData); $html = view('projectsClients.showAllEquipmentsInProjectQrCodePdf', [ 'equipmentData' => $equipmentData, - 'userLogoPath' => $userLogoPath + 'logoPath' => $logoPath ])->render(); $mpdf = new \Mpdf\Mpdf([ @@ -122,7 +134,17 @@ public function showDetailsEquipmentForQrCode($equipmentId, $projectId) // Converte o QR Code para base64 para incorporar na página $qrCodeImage = 'data:image/png;base64,' . base64_encode($writer->write($qrCode)->getString()); - // $userLogoPath = Auth::user()->user_logo ? asset('user_logos/' . Auth::user()->user_logo) : asset('user_logos/logoISPT4.0.jpg'); + $detailsCompanyProject = CompanyProject::find($projectId); + $detailsPlant = Plant::where('plant_id', $detailsCompanyProject->plant_id)->first(); + + $detailsCompany= Company::where('company_id', $detailsPlant->company_id)->first(); + + $logoPath = public_path('companies_logo/' . ($detailsCompany->company_logo ?: 'logoISPT4.0.jpg')); + + if (!file_exists($logoPath)) { + $logoPath = public_path('companies_logo/logoISPT4.0.jpg'); + } + $associatedEquipments = QrcodesAssociatedEquipment::where('equipment_id', $detailsEquipment->equipment_id)->get(); @@ -133,7 +155,7 @@ public function showDetailsEquipmentForQrCode($equipmentId, $projectId) $html = view('projectsClients.showDetailsEquipmentForQrCodePdf', [ 'detailsEquipment' => $detailsEquipment, - // 'userLogoPath' => $userLogoPath, + 'logoPath' => $logoPath, 'qrCodeImage' => $qrCodeImage, 'associatedArray' => $associatedArray ])->render(); diff --git a/app/Http/Controllers/userController.php b/app/Http/Controllers/userController.php index cf66ba7a..3faa8d2a 100755 --- a/app/Http/Controllers/userController.php +++ b/app/Http/Controllers/userController.php @@ -4,6 +4,8 @@ use App\Models\AssociationCompanyUser; use App\Models\Company; +use App\Models\CompanyProject; +use App\Models\Plant; use App\Models\TypeUser; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Auth; @@ -27,6 +29,7 @@ class userController extends Controller { + public function EditProfile(Request $request) { // Verifica se um arquivo foi enviado e se o tamanho é maior que 70 KB @@ -46,7 +49,6 @@ public function EditProfile(Request $request) 'nif' => 'required', ], $messages); - // dd($messages); $user = User::find($request->userID); @@ -259,19 +261,113 @@ public function showCompany($id) // Busca os detalhes dos usuários na tabela users usando os IDs coletados $companyUsers = User::whereIn('user_id', $userIds)->get(); - return view('Admin.CrudCompanies.showCompanyDetails', compact('company','companyUsers')); + + // Para cada cliente, obtemos os plant_ids associados + $plantIds = Plant::where('company_id', $company->company_id)->pluck('plant_id'); + + // Contamos os CompanyProjects associados com datas de início e fim não nulas + $projectCount = CompanyProject::whereIn('plant_id', $plantIds) + ->whereNotNull('date_started') + ->whereNotNull('end_date') + ->count(); + + return view('Admin.CrudCompanies.showCompanyDetails', compact('company', 'companyUsers', 'projectCount')); } public function createCompany(Request $request) { + // Função interna para normalizar nomes de empresas + function normalize($value) + { + $trimmed = trim($value); + $noInnerSpaces = str_replace(' ', '', $trimmed); + $lowercase = strtolower($noInnerSpaces); + return $lowercase; + } + + // Normaliza o nome da empresa recebido + $normalizedInputName = normalize($request->company_name); + + // Verifica se já existe uma empresa com nome similar + $existingCompany = Company::whereRaw("LOWER(REPLACE(company_name, ' ', '')) = ?", [$normalizedInputName])->first(); + + if ($existingCompany) { + return back()->with('danger', 'Uma empresa com um nome similar já existe.'); + } + + $createCompany = new Company; $createCompany->company_name = $request->company_name; + + // Primeiro, verificamos se um arquivo foi enviado e se seu tamanho é maior que 70KB. + if ($request->hasFile('company_logo') && $request->file('company_logo')->getSize() > 71680) { + return back()->with('danger', 'O tamanho da imagem não deve ser maior que 70KB.'); + } + + // Processo para salvar a imagem, se tudo estiver ok + if ($request->hasFile('company_logo')) { + $imageName = time() . '.' . $request->company_logo->extension(); + + // Move o novo arquivo de imagem para o diretório + $request->company_logo->move(public_path('companies_logo'), $imageName); + $createCompany->company_logo = $imageName; + + } else { + // Se nenhuma imagem foi enviada, atribuímos uma imagem padrão. + $createCompany->company_logo = 'logoISPT4.0.jpg'; + } + $createCompany->save(); return redirect('CreateUsers')->with('status', 'A Empresa ' . $createCompany->company_name . ' foi criada com êxito. Consulte na página "Empresas".'); } + public function companyEdit(Request $request) + { + // Verifica se um arquivo foi enviado e se o tamanho é maior que 70 KB + if ($request->hasFile('company_logo') && $request->file('company_logo')->getSize() > 71680) { + return back()->with('danger', 'O tamanho da imagem não deve ser maior que 70KB, valores não alteradas.'); + } + + $messages = [ + 'user_logo.max' => 'O tamanho da imagem não deve ser maior que 70KB.', + ]; + + $companyDetails = Company::find($request->companyId); + + // Processo para salvar a imagem, se tudo estiver ok + if ($request->hasFile('company_logo')) { + + $imageName = time() . '.' . $request->company_logo->extension(); + + // Verifica se o usuário já tem uma imagem e se é diferente da nova imagem + if ($companyDetails->company_logo && $companyDetails->company_logo != $imageName) { + // Constrói o caminho completo para o arquivo de imagem existente + $existingImagePath = public_path('companies_logo/' . $companyDetails->company_logo); + + // Verifica se o arquivo de imagem existente realmente existe no sistema de arquivos + if (File::exists($existingImagePath)) { + // Exclui o arquivo de imagem existente + File::delete($existingImagePath); + } + } + + // Move o novo arquivo de imagem para o diretório + $request->company_logo->move(public_path('companies_logo'), $imageName); + + // Atualiza o campo user_logo do usuário com o nome do novo arquivo de imagem + $companyDetails->company_logo = $imageName; + $companyDetails->save(); + + + return back()->with('success', 'Logo atualizado com sucesso!'); + } + + return back()->with('danger', 'Erro ao carregar a imagem.'); + } } + + diff --git a/app/Http/Middleware/CheckUserType.php b/app/Http/Middleware/CheckUserType.php index 19049e08..46ae471b 100755 --- a/app/Http/Middleware/CheckUserType.php +++ b/app/Http/Middleware/CheckUserType.php @@ -64,7 +64,8 @@ protected function getAllowedRoutesForUserType($userType) //Api.s 'getDataAmbitsOfProject','getDataEquipmentsOfProject','getEquipmentsOfAmbit']; case 2: // Administrador - return ['home', + return [ + 'home', 'createProject','processStep1','articulated_2', 'showAllClientsForProjectReports', 'manageAssets', @@ -76,6 +77,8 @@ protected function getAllowedRoutesForUserType($userType) 'articulated_2CreateEquipment','processStep2','deleteEquipmentInProject','changeAmbitEquipment', 'deletePendingEquipments','CreateNewEquipmentFromPendingEquipment','removeEquipment','receiveEquipmentToAssociateTasks', 'createCompany','ShowPendingUser','register','download','projectDetails_11','editEquipment','EditprocessStep1','createWorkStations','workstationsAssociationTasks','finishCreatingProject', + 'preparedProject','EditProjectForArticulated','companyEdit','reportingDataClient','ExecutionProject', + 'changeFromExecutionToPlanning', ]; diff --git a/config/app.php b/config/app.php index 0f3e510b..bc366b83 100755 --- a/config/app.php +++ b/config/app.php @@ -83,7 +83,7 @@ | */ - 'locale' => 'en', + 'locale' => 'pt', /* |-------------------------------------------------------------------------- diff --git a/public/companies_logo/1713530987.jpg b/public/companies_logo/1713530987.jpg new file mode 100644 index 00000000..ce91928d Binary files /dev/null and b/public/companies_logo/1713530987.jpg differ diff --git a/public/companies_logo/1713705484.jpg b/public/companies_logo/1713705484.jpg new file mode 100644 index 00000000..ce91928d Binary files /dev/null and b/public/companies_logo/1713705484.jpg differ diff --git a/public/companies_logo/1713711791.jpg b/public/companies_logo/1713711791.jpg new file mode 100644 index 00000000..ce91928d Binary files /dev/null and b/public/companies_logo/1713711791.jpg differ diff --git a/public/companies_logo/logoISPT4.0.jpg b/public/companies_logo/logoISPT4.0.jpg new file mode 100755 index 00000000..6d603aec Binary files /dev/null and b/public/companies_logo/logoISPT4.0.jpg differ diff --git a/resources/views/Admin/CrudCompanies/showCompanyDetails.blade.php b/resources/views/Admin/CrudCompanies/showCompanyDetails.blade.php index b21f7a76..93e450b7 100644 --- a/resources/views/Admin/CrudCompanies/showCompanyDetails.blade.php +++ b/resources/views/Admin/CrudCompanies/showCompanyDetails.blade.php @@ -1,6 +1,32 @@ @extends('Templates/templateAdmin') @section('Main-content') + @if (session('success')) +
+ Qtd de Obra Concluidas : {{$projectCount}}
+ Visualizar Obras da empresa +Logo empresa
+ +
+ --}}
+
+ {{--