From aab02b44fe7fdebf2f19d193c0c4903d63c304a4 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Thu, 8 Jan 2026 14:38:37 +0700 Subject: [PATCH] feat: Implement verified scope for PartnerMedia and update relationships in CooperationForm and AnnouncementResource --- .../Cooperations/Schemas/CooperationForm.php | 5 +++-- .../Announcements/AnnouncementResource.php | 14 ++++++++------ app/Models/PartnerMedia.php | 10 ++++++++++ 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/app/Filament/Resources/Manage/Cooperations/Schemas/CooperationForm.php b/app/Filament/Resources/Manage/Cooperations/Schemas/CooperationForm.php index 0078dfa..df08b63 100644 --- a/app/Filament/Resources/Manage/Cooperations/Schemas/CooperationForm.php +++ b/app/Filament/Resources/Manage/Cooperations/Schemas/CooperationForm.php @@ -13,6 +13,7 @@ use Filament\Schemas\Components\Section; use Filament\Schemas\Schema; use Filament\Support\Icons\Heroicon; +use Illuminate\Database\Eloquent\Builder; class CooperationForm { @@ -49,7 +50,7 @@ public static function configure(Schema $schema): Schema Select::make('partner_media_ids') ->label('Media') - ->relationship('partnerMedia', 'name') + ->relationship('partnerMedia', 'name', fn (Builder $query) => $query->verified()) ->multiple() ->preload() ->searchable() @@ -62,7 +63,7 @@ public static function configure(Schema $schema): Schema ->label('Select All') ->icon(Heroicon::OutlinedCheckCircle) ->action(function ($set, $livewire) { - $allMediaIds = PartnerMedia::pluck('id')->toArray(); + $allMediaIds = PartnerMedia::verified()->pluck('id')->toArray(); $set('partner_media_ids', $allMediaIds); }) ), diff --git a/app/Filament/Resources/Publication/Announcements/AnnouncementResource.php b/app/Filament/Resources/Publication/Announcements/AnnouncementResource.php index ead6914..7e6f2df 100644 --- a/app/Filament/Resources/Publication/Announcements/AnnouncementResource.php +++ b/app/Filament/Resources/Publication/Announcements/AnnouncementResource.php @@ -7,8 +7,8 @@ use App\Filament\Columns\TimestampColumns; use App\Filament\Resources\Publication\Announcements\Pages\ManageAnnouncements; use App\Models\Announcement; -use App\Models\PartnerMedia; use BackedEnum; +use Filament\Actions\Action; use Filament\Actions\BulkActionGroup; use Filament\Actions\DeleteAction; use Filament\Actions\EditAction; @@ -72,16 +72,18 @@ public static function form(Schema $schema): Schema CheckboxList::make('partnerMedia') ->label('Kirim Kepada') - ->relationship('partnerMedia', 'name') + ->relationship('partnerMedia', 'name', fn (Builder $query) => $query->verified()) ->visible(fn ($get) => in_array($get('type'), [AnnouncementType::COMPANY, AnnouncementType::COMPANY->value])) ->required(fn ($get) => in_array($get('type'), [AnnouncementType::COMPANY, AnnouncementType::COMPANY->value])) - ->options(function () { - return PartnerMedia::query()->pluck('name', 'id'); - }) ->searchable() ->noSearchResultsMessage('Tidak ada media yang ditemukan.') ->helperText('Pilih media yang akan menerima pengumuman ini') - ->columnSpanFull(), + ->columnSpanFull() + ->bulkToggleable() + ->selectAllAction( + fn (Action $action) => $action->label('Pilih Semua Media'), + ), + ]) ->columns(1); } diff --git a/app/Models/PartnerMedia.php b/app/Models/PartnerMedia.php index 482449b..e931f70 100644 --- a/app/Models/PartnerMedia.php +++ b/app/Models/PartnerMedia.php @@ -5,6 +5,8 @@ use App\Enums\MediaClassification; use App\Enums\MediaType; use App\Enums\VerificationStatus; +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; @@ -29,6 +31,14 @@ protected function casts(): array ]; } + #[Scope] + protected function verified(Builder $query): void + { + $query->whereHas('company.verificationRequest', function ($q) { + $q->where('status', VerificationStatus::APPROVED); + }); + } + public function company(): BelongsTo { return $this->belongsTo(Company::class);