feat: Implement verified scope for PartnerMedia and update relationships in CooperationForm and AnnouncementResource

This commit is contained in:
Yoga Pangestu 2026-01-08 14:38:37 +07:00
parent 57eece15db
commit aab02b44fe
3 changed files with 21 additions and 8 deletions

View File

@ -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);
})
),

View File

@ -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);
}

View File

@ -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);