]> _ Git - psq.git/commitdiff
add profile completion filters
authorLouis Jeckel <louis.jeckel@outlook.com>
Mon, 14 Dec 2020 11:01:23 +0000 (12:01 +0100)
committerLouis Jeckel <louis.jeckel@outlook.com>
Mon, 14 Dec 2020 11:01:23 +0000 (12:01 +0100)
app/Nova/Filters/ProfileComplete.php [new file with mode: 0644]
app/Nova/Lenses/UsersDetails.php [new file with mode: 0644]
app/Nova/User.php
app/User.php
resources/views/account/index.blade.php

diff --git a/app/Nova/Filters/ProfileComplete.php b/app/Nova/Filters/ProfileComplete.php
new file mode 100644 (file)
index 0000000..8a32f54
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+
+namespace App\Nova\Filters;
+
+use Illuminate\Http\Request;
+use Laravel\Nova\Filters\BooleanFilter;
+
+class ProfileComplete extends BooleanFilter
+{
+    public $name = "Remplissage profils";
+    /**
+     * Apply the filter to the given query.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Illuminate\Database\Eloquent\Builder  $query
+     * @param  mixed  $value
+     * @return \Illuminate\Database\Eloquent\Builder
+     */
+    public function apply(Request $request, $query, $value)
+    {
+        if ($value['complete']) {
+            $query->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 (file)
index 0000000..8ebfed1
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+
+namespace App\Nova\Lenses;
+
+use App\Nova\Filters\ProfileComplete;
+use Illuminate\Http\Request;
+use Laravel\Nova\Fields\Boolean;
+use Laravel\Nova\Fields\DateTime;
+use Laravel\Nova\Fields\ID;
+use Laravel\Nova\Fields\Text;
+use Laravel\Nova\Http\Requests\LensRequest;
+use Laravel\Nova\Lenses\Lens;
+
+class UsersDetails extends Lens
+{
+
+    public $name = "Détails profils";
+    /**
+     * Get the query builder / paginator for the lens.
+     *
+     * @param  \Laravel\Nova\Http\Requests\LensRequest  $request
+     * @param  \Illuminate\Database\Eloquent\Builder  $query
+     * @return mixed
+     */
+    public static function query(LensRequest $request, $query)
+    {
+        return $request->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';
+    }
+}
index 87d1fe6975a939b43c68e45a22f24aa57a1d7ed3..aee97f01a663101ea24799c1a7c767f93aacbf68 100644 (file)
@@ -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,
index 2f7190447696e49ca2bbf353b049238f7be0375a..2e8286c100ca6ea9f4ecc46d6a62bd0f9a0f2140 100644 (file)
@@ -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;
     }
index bc88f13bcd14e02017ce096db85fe21ca3062640..65928b37a4e2980f1f81960eafeb974ba3f4d746 100644 (file)
                                 <label for="employer" class="col-md-4 col-form-label text-md-right">{{ __('Employeur') }}</label>
 
                                 <div class="col-md-6">
+                                    @if($user->organization === null)
                                     <input id="employer" type="text" class="form-control @error('employer') is-invalid @enderror" name="employer" value="{{ old('employer', $user->employer) }}" >
-
                                     @error('employer')
                                     <span class="invalid-feedback" role="alert">
                                         <strong>{{ $message }}</strong>
                                     </span>
                                     @enderror
+                                    @else
+                                        <input id="employer" type="text" class="form-control" name="employer" value="{{ $user->organization }}" disabled readonly>
+
+                                    @endif
                                 </div>
                             </div>
                             <div class="form-group row">