label('Buat Penugasan') ->icon(Heroicon::OutlinedPlus) ->color('primary') ->schema(function (Cooperation $record): array { return [ DatePicker::make('start_date') ->label('Tanggal Mulai') ->placeholder(fn (): string => now()->translatedFormat('l, d F Y')) ->native(false) ->displayFormat('l, d F Y') ->required() ->minDate($record->final_submission_date), DatePicker::make('end_date') ->label('Tanggal Selesai') ->placeholder(fn (): string => now()->addDays(30)->translatedFormat('l, d F Y')) ->native(false) ->displayFormat('l, d F Y') ->required() ->after('start_date') ->minDate($record->final_submission_date), TextInput::make('report_amount') ->label('Jumlah Laporan') ->placeholder(10) ->numeric() ->minValue(1) ->required() ->autocomplete(false), Textarea::make('task_description') ->label('Deskripsi Tugas') ->required() ->rows(4) ->placeholder('...') ->autocomplete(false), ]; }) ->action(function (array $data, Cooperation $record): void { $taskAssignment = $record->taskAssignment()->create([ 'start_date' => $data['start_date'], 'end_date' => $data['end_date'], 'task_description' => $data['task_description'], 'report_amount' => $data['report_amount'], ]); $partnerMedias = $record->partnerMedia() ->wherePivot('status', ApprovalStatus::ACCEPTED) ->get(); foreach ($partnerMedias as $partnerMedia) { $taskAssignment->mediaTaskAssignments()->create([ 'partner_media_id' => $partnerMedia->id, 'status' => ApprovalStatus::PENDING, ]); // Notify Partner $partnerUser = $partnerMedia->company?->user; if ($partnerUser) { $partnerUser->notify(new BroadcastNotification([ 'title' => CheerfulNotification::getMessage('Tugas Baru Telah Menanti! 📝✨', 'Penugasan Kerja Sama Baru'), 'body' => CheerfulNotification::getMessage("Halo! Admin sudah menetapkan tugas untuk kerja sama \"{$record->title}\". Yuk, cek detail tugasnya dan mulai buat laporannya! Semangat! 💪😊", "Admin telah menetapkan penugasan baru untuk kerja sama \"{$record->title}\". Silakan tinjau detail tugas dan laporan yang diperlukan."), 'action' => [ Action::make('view') ->label('Lihat') ->url(CooperationResource::getUrl('view', ['record' => $record->id, 'relation' => 2])), ], ])); } } CheerfulNotification::success( CheerfulNotification::getMessage('Penugasan Berhasil Dibuat! 🚀✨', 'Penugasan Berhasil Dibuat'), CheerfulNotification::getMessage('Mantap! Penugasan telah dibuat dan semua media terkait sudah diberi tahu. Mari kita pantau progresnya! 💪', 'Penugasan telah berhasil dibuat dan seluruh media terkait telah dinotifikasi.') )->send(); }) ->modalHeading(fn () => CheerfulNotification::getMessage('Buat Penugasan Baru 📝✨', 'Buat Penugasan Baru')) ->modalDescription(fn () => CheerfulNotification::getMessage('Waktunya bagi-bagi tugas! Tentukan detail penugasan untuk para media biar mereka bisa langsung gaspol! 🚀💪', 'Silakan tentukan detail penugasan untuk pihak media eksternal.')) ->modalSubmitActionLabel('Simpan') ->visible(function (Cooperation $record): bool { $user = auth()->user(); return $user && ! $user->hasRole(RoleEnum::PERUSAHAAN->value) && ! $record->taskAssignment()->exists() && $record->status === CooperationStatus::ASSIGNMENT; }) ->modalWidth(Width::Large); } }