From 0bca962de94c9ea8fd45a310063638a3afe6c3cb Mon Sep 17 00:00:00 2001 From: Vincent BRIDIER Date: Thu, 17 Apr 2025 16:22:23 +0200 Subject: [PATCH] feat: Add project manager on site model - Close #79 --- app/Http/Controllers/Bo/SiteController.php | 3 +- .../Requests/Bo/Sites/StoreSiteRequest.php | 2 + app/Models/Site.php | 15 +++++++- ...2713_add_users_relation_on_sites_table.php | 38 +++++++++++++++++++ .../bo/pages/sites/form-inputs.blade.php | 28 +++++++++++++- .../views/bo/pages/sites/index.blade.php | 8 ++++ resources/views/bo/pages/sites/show.blade.php | 10 +++++ .../views/bo/pages/tickets/index.blade.php | 8 ++++ .../views/bo/pages/tickets/show.blade.php | 4 +- 9 files changed, 112 insertions(+), 4 deletions(-) create mode 100644 database/migrations/2025_04_17_112713_add_users_relation_on_sites_table.php diff --git a/app/Http/Controllers/Bo/SiteController.php b/app/Http/Controllers/Bo/SiteController.php index be3d5f5..de9e73e 100644 --- a/app/Http/Controllers/Bo/SiteController.php +++ b/app/Http/Controllers/Bo/SiteController.php @@ -9,6 +9,7 @@ use App\Lib\Helpers\ToolboxHelper; use App\Models\Site; use App\Models\User; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; @@ -23,7 +24,7 @@ class SiteController extends Controller public function index(Request $request): \Illuminate\Contracts\View\View { /** @var \App\Models\User $user */ - $user = \auth()->user(); + $user = Auth::user(); if ($user->isAdmin()) { /** @var \Illuminate\Database\Eloquent\Builder $siteModels */ diff --git a/app/Http/Requests/Bo/Sites/StoreSiteRequest.php b/app/Http/Requests/Bo/Sites/StoreSiteRequest.php index de7035e..a55bf3c 100644 --- a/app/Http/Requests/Bo/Sites/StoreSiteRequest.php +++ b/app/Http/Requests/Bo/Sites/StoreSiteRequest.php @@ -29,6 +29,7 @@ class StoreSiteRequest extends FormRequest 'users' => 'nullable|array', 'users.*.id' => 'required|exists:users,id', 'gitlab_project_id' => 'nullable|unique:sites,gitlab_project_id', + 'project_manager_id' => 'nullable|exists:users,id', 'url_re7' => 'nullable|url', 'url_prod' => 'nullable|url' ]; @@ -46,6 +47,7 @@ class StoreSiteRequest extends FormRequest 'users' => trans('Utilisateurs associés au site'), 'users.*.id' => trans('Élément parmis les Utilisateurs associés au site'), 'gitlab_project_id' => trans('ID du dépôt Gitlab'), + 'project_manager_id' => trans('Chef de projet'), 'url_re7' => trans('Url de RECETTE'), 'url_prod' => trans('Url de prod') ]; diff --git a/app/Models/Site.php b/app/Models/Site.php index 770064c..d8aa825 100644 --- a/app/Models/Site.php +++ b/app/Models/Site.php @@ -6,6 +6,7 @@ use App\Lib\Helpers\ToolboxHelper; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Casts\Attribute; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; /** @@ -29,7 +30,8 @@ class Site extends Model 'name', 'url_re7', 'url_prod', - 'gitlab_project_id' + 'gitlab_project_id', + 'project_manager_id' ]; /** @@ -109,6 +111,17 @@ class Site extends Model return $this->belongsTo(Brand::class); } + /** + * BelongsTo User relation + * The project manager of the site + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function projectManager(): BelongsTo + { + return $this->belongsTo(User::class, 'project_manager_id'); + } + /** * BelongsTo Project relation * diff --git a/database/migrations/2025_04_17_112713_add_users_relation_on_sites_table.php b/database/migrations/2025_04_17_112713_add_users_relation_on_sites_table.php new file mode 100644 index 0000000..3712c0d --- /dev/null +++ b/database/migrations/2025_04_17_112713_add_users_relation_on_sites_table.php @@ -0,0 +1,38 @@ +unsignedBigInteger('project_manager_id') + ->nullable() + ->after('brand_id') + ->comment('Project manager relationship'); + + $table->foreign('project_manager_id')->references('id')->on('users')->nullOnDelete(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down(): void + { + Schema::table('sites', function (Blueprint $table) { + $table->dropForeign(['project_manager_id']); + $table->dropColumn('project_manager_id'); + }); + } +}; diff --git a/resources/views/bo/pages/sites/form-inputs.blade.php b/resources/views/bo/pages/sites/form-inputs.blade.php index 53a650f..c3b27fb 100644 --- a/resources/views/bo/pages/sites/form-inputs.blade.php +++ b/resources/views/bo/pages/sites/form-inputs.blade.php @@ -59,12 +59,14 @@ + +
{{-- GITLAB_PROJECT_ID --}}
{{ Str::ucfirst(__('validation.attributes.gitlab_project_id')) }}
-
+
@include('bo.partials.inputs.int-number', [ 'id' => 'siteGitlabProject', 'label' => __(':field du :model', [ @@ -86,6 +88,30 @@
+ {{-- PROJECT MANAGER --}} +
+
+ {{ __('Chef de projet') }} +
+
+ + +
+
+
+
+
+
{{-- SITE URLS --}}
diff --git a/resources/views/bo/pages/sites/index.blade.php b/resources/views/bo/pages/sites/index.blade.php index a187e11..8d7d3cd 100644 --- a/resources/views/bo/pages/sites/index.blade.php +++ b/resources/views/bo/pages/sites/index.blade.php @@ -25,6 +25,7 @@ 'name' => Str::ucfirst(__('validation.attributes.name')), 'url_re7' => Str::ucfirst(__('validation.attributes.url_re7')), 'url_prod' => Str::ucfirst(__('validation.attributes.url_prod')), + 'project_manager_id' => __("Chef de projet"), ], ]) @@ -46,6 +47,13 @@ - @endif + + @if ($siteModel->project_manager_id) + {{ $siteModel->projectManager->name }} + @else + - + @endif + @can('isAdmin')
+ + {{ __("Chef de projet") }} + + @if ($siteModel->project_manager_id) + {{ $siteModel->projectManager->name }} + @else + - + @endif + + {{ Str::ucfirst(__('validation.attributes.created_at')) }} {{ $siteModel->created_at }} diff --git a/resources/views/bo/pages/tickets/index.blade.php b/resources/views/bo/pages/tickets/index.blade.php index 1d1ada0..c8c4a40 100644 --- a/resources/views/bo/pages/tickets/index.blade.php +++ b/resources/views/bo/pages/tickets/index.blade.php @@ -16,6 +16,14 @@ (Archivés) @endif + @if (session('tickets.pr')) + @php + $projectManager = \App\Models\Site::query()->find(session('tickets.pr'))->projectManager; + @endphp + @if($projectManager) +

{{ __("Chef de projet") }} : {{ $projectManager->name; }}

+ @endif + @endif