label('Buat Penugasan') ->icon(Heroicon::Plus) ->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') ->locale('id') ->required() ->minDate($record->final_submission_date) ->autofocus(), 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->taskAssignments()->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' => 'Tugas Baru Telah Menanti! 📝✨', 'body' => "Halo! Admin sudah menetapkan tugas untuk kerja sama \"{$record->title}\". Yuk, cek detail tugasnya dan mulai buat laporannya! Semangat! 💪😊", 'action' => [ Action::make('view') ->label('Lihat') ->url(CooperationResource::getUrl('view', ['record' => $record->id, 'relation' => 2])), ], ])); } } CheerfulNotification::success( 'Penugasan Berhasil Dibuat! 🚀✨', 'Mantap! Penugasan telah dibuat dan semua media terkait sudah diberi tahu. Mari kita pantau progresnya! 💪' )->send(); }) ->modalHeading('Buat Penugasan') ->modalSubmitActionLabel('Simpan') ->visible(function (Cooperation $record): bool { /** @var \App\Models\User $user */ $user = Auth::user(); return $user && ! $user->hasRole('Perusahaan') && ! $record->taskAssignments()->exists() && $record->status === CooperationStatus::ASSIGNMENT; }) ->modalWidth(Width::Large); } }