label('Selesaikan Kerjasama') ->icon(Heroicon::OutlinedCheckBadge) ->color('success') ->requiresConfirmation() ->modalHeading(fn () => CheerfulNotification::getMessage('Selesaikan Kerja Sama? 🏁✨', 'Selesaikan Kerja Sama')) ->modalDescription(fn () => CheerfulNotification::getMessage('Yakin mau menyelesaikan kerja sama ini? Pastikan semua pembayaran ke media sudah lunas dan aman ya! 🤝😊', 'Apakah Anda yakin ingin menyelesaikan kerja sama ini? Pastikan seluruh kewajiban pembayaran telah terpenuhi.')) ->action(function (Cooperation $record): void { // Verify all accepted media are paid $acceptedMedia = $record->cooperationMedia()->accepted()->get(); if ($acceptedMedia->isEmpty()) { CheerfulNotification::danger( CheerfulNotification::getMessage('Tidak Ada Media! ❌', 'Data Media Kosong'), CheerfulNotification::getMessage('Tidak ada media yang menerima kerja sama ini. Tidak dapat diselesaikan.', 'Proses tidak dapat dilanjutkan karena tidak ada media yang terlibat dalam kerja sama ini.') )->send(); return; } $unpaidMedia = $acceptedMedia->filter(function ($media) { return ! $media->payment()->exists(); }); if ($unpaidMedia->isNotEmpty()) { CheerfulNotification::danger( CheerfulNotification::getMessage('Pembayaran Belum Lunas! ⚠️', 'Pembayaran Belum Terpenuhi'), CheerfulNotification::getMessage('Masih ada media yang belum dibayar. Harap selesaikan pembayaran untuk semua media yang menerima kerja sama.', 'Terdapat kewajiban pembayaran yang belum diselesaikan untuk media terkait.') )->send(); $this->halt(); return; } // Calculate total payment from media payments $totalPayment = $acceptedMedia->sum(fn ($media) => $media->payment->amount); $record->update([ 'payment_amount' => $totalPayment, 'completed_at' => now(), 'status' => CooperationStatus::COMPLETED, ]); CheerfulNotification::success( CheerfulNotification::getMessage('Kerja Sama Selesai! 🎉✨', 'Kerja Sama Berhasil Diselesaikan'), CheerfulNotification::getMessage('Alhamdulillah! Kerja sama ini telah resmi diselesaikan. Terima kasih atas kerja samanya! 🙌😊', 'Proses kerja sama ini telah resmi ditutup dan diselesaikan.') )->send(); }) ->visible(function (Cooperation $record): bool { $user = auth()->user(); return $user && ! $user->hasRole(RoleEnum::PERUSAHAAN->value) && $record->status === CooperationStatus::PAYMENT; }); } }