user()->hasRole(RoleEnum::PERUSAHAAN->value), function ($query) { $query->whereHas('partnerMedia', function ($partnerMediaQuery) { $partnerMediaQuery->whereHas('company', function ($companyQuery) { $companyQuery->where('user_id', auth()->id()); }); }); }) ->count(); } public static function form(Schema $schema): Schema { return CooperationForm::configure($schema); } public static function table(Table $table): Table { return CooperationsTable::configure($table) ->modifyQueryUsing(function (Builder $query) { if (auth()->user()->hasRole('Perusahaan')) { $query->whereHas('cooperationMedia', function ($subQuery) { $subQuery->whereHas('partnerMedia', function ($mediaQuery) { $mediaQuery->whereHas('company', function ($companyQuery) { $companyQuery->where('user_id', auth()->id()); }); }); }); } return $query; }); } public static function infolist(Schema $schema): Schema { return $schema ->components([ Section::make('Informasi Kerja Sama') ->headerActions([ Action::make('status') ->label(fn ($record) => $record->status->getLabel()) ->badge() ->color(fn ($record) => $record->status->getColor()) ->disabled(), ]) ->schema([ TextEntry::make('title') ->label('Judul'), Grid::make(3) ->schema([ TextEntry::make('initial_submission_date') ->label('Tanggal Pengajuan Awal') ->date('l, d F Y'), TextEntry::make('final_submission_date') ->label('Tanggal Pengajuan Akhir') ->date('l, d F Y'), TextEntry::make('assignment_deadline') ->label('Deadline Penugasan') ->date('l, d F Y') ->placeholder('Belum ditentukan'), TextEntry::make('verification_deadline') ->label('Deadline Verifikasi') ->date('l, d F Y') ->placeholder('Belum ditentukan'), TextEntry::make('payment_amount') ->label('Jumlah Pembayaran') ->money('IDR') ->placeholder('Belum ditentukan'), TextEntry::make('payment_date') ->label('Tanggal Pembayaran') ->date('l, d F Y') ->placeholder('Belum dibayar'), ]), Grid::make(2) ->schema([ PdfViewerEntry::make('proposal_template') ->label('Template Proposal') ->getStateUsing(fn ($record) => optional($record->getMedia('cooperations')->where('custom_properties.doc_type', 'proposal-template')->sortByDesc('created_at')->first())->getPathRelativeToRoot()) ->disk(config('filesystems.default')), ImageEntry::make('banner') ->label('Banner') ->getStateUsing(fn ($record) => optional($record->getMedia('banners')->sortByDesc('created_at')->first())->getPathRelativeToRoot()) ->disk(config('filesystems.default')) ->visible(fn ($record) => $record->getMedia('banners')->isNotEmpty()), ]), TextEntry::make('description') ->label('Deskripsi') ->markdown(), ]), ]) ->columns(1); } public static function getRelations(): array { return [ CooperationMediaRelationManager::class, CooperationProposalRelationManager::class, TaskAssignmentRelationManager::class, ReportRelationManager::class, ]; } public static function getPages(): array { return [ 'index' => ListCooperations::route('/'), 'create' => CreateCooperation::route('/create'), 'view' => ViewCooperation::route('/{record}'), 'edit' => EditCooperation::route('/{record}/edit'), ]; } public static function getRecordRouteBindingEloquentQuery(): Builder { return parent::getRecordRouteBindingEloquentQuery() ->withoutGlobalScopes([ SoftDeletingScope::class, ]); } }