user()->hasRole(RoleEnum::PERUSAHAAN->value), function (Builder $query): void { $query->whereHas('partnerMedia', function (Builder $partnerMediaQuery): void { $partnerMediaQuery->whereHas('company', function (Builder $companyQuery): void { $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): Builder { if (auth()->user()->hasRole('Perusahaan')) { $query->whereHas('cooperationMedia', function (Builder $subQuery): void { $subQuery->whereHas('partnerMedia', function (Builder $mediaQuery): void { $mediaQuery->whereHas('company', function (Builder $companyQuery): void { $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 (Cooperation $record): ?string => $record->status->getLabel()) ->badge() ->color(fn (Cooperation $record): string|array|null => $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(3) ->schema([ PdfViewerEntry::make('proposal_template') ->label('Template Proposal') ->getStateUsing(fn (Cooperation $record): ?string => optional($record->getMedia('cooperations')->where('custom_properties.doc_type', 'proposal-template')->sortByDesc('created_at')->first())->getPathRelativeToRoot()) ->disk(config('filesystems.default')) ->columnSpan(2), ImageEntry::make('banner') ->label('Banner') ->getStateUsing(fn (Cooperation $record): ?string => optional($record->getMedia('cooperations')->where('custom_properties.doc_type', 'banner')->sortByDesc('created_at')->first())->getPathRelativeToRoot()) ->disk(config('filesystems.default')) ->visible(fn (Cooperation $record): bool => $record->getMedia('cooperations')->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, ]); } }