validate([ 'subject' => 'required|string', 'content' => 'required|string', 'recipients_type' => 'required|in:all,custom', 'recipients' => 'required_if:recipients_type,custom|array', 'recipients.*' => 'email', ]); if ($request->recipients_type === 'all') { $recipients = Customer::limit(3)->pluck('email')->toArray(); } else { $recipients = $request->recipients; } $emailBlastHistory = EmailBlastHistory::create([ 'subject' => $request->subject, 'content' => $request->content, 'recipients_count' => count($recipients), 'status' => 'pending', ]); SendEmailBlast::dispatch($emailBlastHistory, $recipients); return redirect()->route('emailblast.index')->with('success', 'Email blast queued successfully'); } public function view($id) { $emailBlast = EmailBlastHistory::findOrFail($id); return view('webstatement::emailblast.view', compact('emailBlast')); } public function datatables(Request $request) { $query = EmailBlastHistory::query(); if ($request->has('search')) { $searchTerm = $request->search; $query->where('subject', 'like', "%{$searchTerm}%"); } $total = $query->count(); $result = $query->orderBy('created_at', 'desc') ->skip($request->input('start', 0)) ->take($request->input('length', 10)) ->get(); return response()->json([ 'draw' => $request->input('draw', 1), 'recordsTotal' => $total, 'recordsFiltered' => $total, 'data' => $result ]); } }