From 75f7b91d1809b9dc391cf4c62172dc63e212257a Mon Sep 17 00:00:00 2001 From: Louis Jeckel Date: Mon, 14 Dec 2020 12:01:23 +0100 Subject: [PATCH] add profile completion filters --- app/Nova/Filters/ProfileComplete.php | 42 +++++++++++ app/Nova/Lenses/UsersDetails.php | 99 +++++++++++++++++++++++++ app/Nova/User.php | 2 + app/User.php | 33 ++++++++- resources/views/account/index.blade.php | 6 +- 5 files changed, 179 insertions(+), 3 deletions(-) create mode 100644 app/Nova/Filters/ProfileComplete.php create mode 100644 app/Nova/Lenses/UsersDetails.php diff --git a/app/Nova/Filters/ProfileComplete.php b/app/Nova/Filters/ProfileComplete.php new file mode 100644 index 0000000..8a32f54 --- /dev/null +++ b/app/Nova/Filters/ProfileComplete.php @@ -0,0 +1,42 @@ +completeProfiles(); + } + if ($value['incomplete']) { + $query->inCompleteProfiles(); + } + } + + /** + * Get the filter's available options. + * + * @param \Illuminate\Http\Request $request + * @return array + */ + public function options(Request $request) + { + return [ + 'Profils complets' => 'complete', + 'Profils incomplets' => 'incomplete', + ]; + } +} diff --git a/app/Nova/Lenses/UsersDetails.php b/app/Nova/Lenses/UsersDetails.php new file mode 100644 index 0000000..8ebfed1 --- /dev/null +++ b/app/Nova/Lenses/UsersDetails.php @@ -0,0 +1,99 @@ +withOrdering($request->withFilters( + $query->orderBy('updated_at', 'desc') + )); + } + + /** + * Get the fields available to the lens. + * + * @param \Illuminate\Http\Request $request + * @return array + */ + public function fields(Request $request) + { + return [ + Text::make('Prénom', 'first_name'), + Text::make('Nom', 'last_name'), + Text::make('Email'), + Text::make('Fonction', 'position'), + Text::make('Service'), + Text::make('Téléphone', 'phone'), + + DateTime::make('Mis à jour', 'updated_at')->format('DD/MM/YYYY à HH:mm:ss'), + Boolean::make('Profil rempli', 'profileFilled')->readonly(), + + + ]; + } + + /** + * Get the cards available on the lens. + * + * @param \Illuminate\Http\Request $request + * @return array + */ + public function cards(Request $request) + { + return []; + } + + /** + * Get the filters available for the lens. + * + * @param \Illuminate\Http\Request $request + * @return array + */ + public function filters(Request $request) + { + return [ + new ProfileComplete, + ]; + } + + /** + * Get the actions available on the lens. + * + * @param \Illuminate\Http\Request $request + * @return array + */ + public function actions(Request $request) + { + return parent::actions($request); + } + + /** + * Get the URI key for the lens. + * + * @return string + */ + public function uriKey() + { + return 'users-details'; + } +} diff --git a/app/Nova/User.php b/app/Nova/User.php index 87d1fe6..aee97f0 100644 --- a/app/Nova/User.php +++ b/app/Nova/User.php @@ -15,6 +15,7 @@ use App\Nova\Lenses\AllFailedMailgun; use App\Nova\Lenses\FailedMailgun; use App\Nova\Lenses\MailgunStatus; use App\Nova\Lenses\NonDeliverableAddresses; +use App\Nova\Lenses\UsersDetails; use App\Nova\Metrics\RegistrationCompletePartition; use App\Nova\Metrics\SubscribedUsers; use App\Nova\Metrics\TotalUsers; @@ -179,6 +180,7 @@ class User extends Resource public function lenses(Request $request) { return [ + New UsersDetails, new MailgunStatus, new FailedMailgun, new AllFailedMailgun, diff --git a/app/User.php b/app/User.php index 2f71904..2e8286c 100644 --- a/app/User.php +++ b/app/User.php @@ -103,6 +103,13 @@ class User extends Authenticatable implements MustVerifyEmail, SendsEmails ]; + protected array $profileFilledAttributes = [ + 'position', + 'phone', +// 'employer', + 'service' + ]; + /** * Trial duration in days */ @@ -493,6 +500,21 @@ class User extends Authenticatable implements MustVerifyEmail, SendsEmails $builder->where('reg_complete', 0); } + /** + * @param Builder $builder + */ + public function scopeIncompleteProfiles(Builder $builder): void + { + $builder->whereNull($this->profileFilledAttributes, 'or'); + } + + /** + * @param Builder $builder + */ + public function scopeCompleteProfiles(Builder $builder): void + { + $builder->whereNotNull($this->profileFilledAttributes); + } @@ -606,6 +628,14 @@ class User extends Authenticatable implements MustVerifyEmail, SendsEmails return $this->organization === null; } + /** + * @return bool + * Returns true if all $profileFilledAttributes are filled + */ + public function getProfileFilledAttribute(): bool + { + return !in_array(null, $this->only($this->profileFilledAttributes)); + } /** * @return \Stripe\Customer @@ -615,7 +645,6 @@ class User extends Authenticatable implements MustVerifyEmail, SendsEmails return $this->createOrGetStripeCustomer([ 'name' => $this->name, 'phone' => $this->phone, - ]); } @@ -623,7 +652,7 @@ class User extends Authenticatable implements MustVerifyEmail, SendsEmails /** * @return string */ - public function __toString() + public function __toString(): string { return $this->name; } diff --git a/resources/views/account/index.blade.php b/resources/views/account/index.blade.php index bc88f13..65928b3 100644 --- a/resources/views/account/index.blade.php +++ b/resources/views/account/index.blade.php @@ -109,13 +109,17 @@
+ @if($user->organization === null) - @error('employer') {{ $message }} @enderror + @else + + + @endif
-- 2.39.5