diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 1802678..12d0404 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -3,9 +3,11 @@ namespace App\Http\Controllers; use App\Http\Controllers\Auth\ForgotPasswordController; +use App\Models\Schedule; use App\Models\User; use Illuminate\Database\Eloquent\Model; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; use Kwaadpepper\CrudPolicies\Traits\CrudController; class UserController extends Controller @@ -31,4 +33,33 @@ class UserController extends Controller $request = new Request(['email' => $user->email]); return app(ForgotPasswordController::class)->sendResetLinkEmail($request); } + + public function stats() + { + $user = Auth::user(); + $stats = []; + + for ($i = 2021; $i <= date('Y'); $i++) { + $start = $i . '-03-01'; + $end = $i + 1 . '-02-' . $this->getLastDayFebruary($i + 1); + + $datas = $user->schedules()->selectRaw('count(id) as nb, activity') + ->whereBetween('date', [$start, $end]) + ->groupBy('activity') + ->orderBy('activity', 'ASC') + ->get(); + + $stats[sprintf("%d/%d", $i, $i + 1)] = $datas; + } + + return view('users.stats', ['stats' => $stats]); + } + + private function getLastDayFebruary($year) + { + if ((is_int($year / 4) && !is_int($year / 100)) || is_int($year / 400)) { + return 29; + } + return 28; + } } diff --git a/app/Models/User.php b/app/Models/User.php index 0776c47..4374473 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -186,6 +186,11 @@ class User extends Authenticatable return $this->belongsToMany(Site::class); } + public function schedules() + { + return $this->hasMany(Schedule::class); + } + public function sendMailConfirm() { dispatch(new SendUserCreatedEmail($this)); diff --git a/resources/views/layout/nav.blade.php b/resources/views/layout/nav.blade.php index fe6b429..60cc0dc 100644 --- a/resources/views/layout/nav.blade.php +++ b/resources/views/layout/nav.blade.php @@ -65,6 +65,11 @@