label('Bayar') ->icon(Heroicon::CreditCard) ->color('success') ->visible(fn (CooperationMedia $record): bool => $record->cooperation->status === CooperationStatus::PAYMENT && ! $record->payment()->exists() && $record->status === ApprovalStatus::ACCEPTED) ->schema([ TextInput::make('amount') ->label('Nominal Pembayaran') ->placeholder('1,000,000') ->autocomplete(false) ->autofocus() ->required() ->mask(RawJs::make('$money($input)')) ->prefix('Rp'), SpatieMediaLibraryFileUpload::make('payment_proof') ->label('Bukti Pembayaran') ->disk(config('filesystems.default')) ->acceptedFileTypes(['image/*']) ->maxSize(1024 * 3) ->collection('cooperations') ->customProperties(fn (): array => [ 'feature' => 'cooperations', 'date' => now()->toDateString(), 'doc_type' => 'payment-proof', ]) ->image() ->required(), Textarea::make('description') ->label('Keterangan') ->placeholder('...') ->autocomplete(false), ]) ->action(function (CooperationMedia $record, array $data): void { $record->payment()->create([ 'amount' => str_replace(['Rp ', ','], '', $data['amount']), 'description' => $data['description'], 'payment_date' => now(), ]); CheerfulNotification::success( 'Pembayaran Berhasil! 💸✨', "Pembayaran untuk {$record->partnerMedia->name} telah berhasil dicatat." )->send(); }) ->modalWidth(Width::Large); } }