From e4cd88136e5d87d22f8ba212fd16c9744f587977 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Tue, 24 Feb 2026 11:11:18 +0700 Subject: [PATCH 1/2] feat: Implement local scopes for report statuses in the Report model and update the TaskRealizationChart to filter by ApprovalStatus enum. --- app/Filament/Widgets/TaskRealizationChart.php | 10 ++++++---- app/Models/Report.php | 20 +++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/app/Filament/Widgets/TaskRealizationChart.php b/app/Filament/Widgets/TaskRealizationChart.php index 353dc76..4e0c75e 100644 --- a/app/Filament/Widgets/TaskRealizationChart.php +++ b/app/Filament/Widgets/TaskRealizationChart.php @@ -2,6 +2,7 @@ namespace App\Filament\Widgets; +use App\Enums\ApprovalStatus; use App\Models\Report; use BezhanSalleh\FilamentShield\Traits\HasWidgetShield; use Carbon\Carbon; @@ -27,7 +28,7 @@ protected function getData(): array $data = Report::query() ->select( DB::raw('COUNT(*) as count'), - DB::raw('status'), + 'status', DB::raw("DATE_FORMAT(created_at, '%Y-%m') as month") ) ->when($startDate, fn ($q) => $q->whereDate('created_at', '>=', $startDate)) @@ -44,9 +45,10 @@ protected function getData(): array $rejectedData = []; foreach ($months as $month) { - $acceptedData[] = $data->where('month', $month)->accepted()->first()?->count ?? 0; - $pendingData[] = $data->where('month', $month)->pending()->first()?->count ?? 0; - $rejectedData[] = $data->where('month', $month)->rejected()->first()?->count ?? 0; + $monthData = $data->where('month', $month); + $acceptedData[] = $monthData->where('status', ApprovalStatus::ACCEPTED)->first()?->count ?? 0; + $pendingData[] = $monthData->where('status', ApprovalStatus::PENDING)->first()?->count ?? 0; + $rejectedData[] = $monthData->where('status', ApprovalStatus::REJECTED)->first()?->count ?? 0; } return [ diff --git a/app/Models/Report.php b/app/Models/Report.php index 82596b3..cac8282 100644 --- a/app/Models/Report.php +++ b/app/Models/Report.php @@ -3,6 +3,8 @@ namespace App\Models; use App\Enums\ApprovalStatus; +use Illuminate\Database\Eloquent\Attributes\Scope; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -27,6 +29,24 @@ protected function casts(): array ]; } + #[Scope] + protected function accepted(Builder $query): void + { + $query->where('status', ApprovalStatus::ACCEPTED); + } + + #[Scope] + protected function pending(Builder $query): void + { + $query->where('status', ApprovalStatus::PENDING); + } + + #[Scope] + protected function rejected(Builder $query): void + { + $query->where('status', ApprovalStatus::REJECTED); + } + public function mediaTaskAssignment(): BelongsTo { return $this->belongsTo(MediaTaskAssignment::class); From 09c4a83debb9a7d3773903b2755984bbce7e0b20 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Mon, 2 Mar 2026 10:15:20 +0700 Subject: [PATCH 2/2] feat: implement must verify email --- app/Filament/Pages/Auth/Registration.php | 2 ++ routes/web.php | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/app/Filament/Pages/Auth/Registration.php b/app/Filament/Pages/Auth/Registration.php index 3e0a879..12386ac 100644 --- a/app/Filament/Pages/Auth/Registration.php +++ b/app/Filament/Pages/Auth/Registration.php @@ -71,6 +71,8 @@ protected function handleRegistration(array $data): Model $user = $this->getUserModel()::create($data); $user->assignRole('Perusahaan'); + $user->sendEmailVerificationNotification(); + CheerfulNotification::success( 'Selamat Datang! 👋🎉', "Halooo, {$user->name}!, terima kasih sudah bergabung! Akunmu berhasil dibuat. Silakan verifikasi alamat surelmu! 🚀✨" diff --git a/routes/web.php b/routes/web.php index 160b133..c4d4bf1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -7,6 +7,8 @@ use App\Livewire\Home\Index; use App\Livewire\Home\News\Index as NewsIndex; use App\Livewire\Home\News\Show as NewsShow; +use Illuminate\Foundation\Auth\EmailVerificationRequest; +use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; Route::middleware([TrackVisitor::class])->group(function () { @@ -23,3 +25,19 @@ Route::get('/contact-us', ContactUs::class)->name('contact-us'); }); + +Route::get('/email/verify', function () { + return view('auth.verify-email'); +})->middleware('auth')->name('verification.notice'); + +Route::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) { + $request->fulfill(); + + return redirect('/home'); +})->middleware(['auth', 'signed'])->name('verification.verify'); + +Route::post('/email/verification-notification', function (Request $request) { + $request->user()->sendEmailVerificationNotification(); + + return back()->with('message', 'Verification link sent!'); +})->middleware(['auth', 'throttle:6,1'])->name('verification.send');