From ba5a6a86044f318fa9f9fa8a9369b31c8c079321 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Tue, 18 Feb 2025 16:35:16 +0700 Subject: [PATCH] feat(email-blast): tambahkan kontroler untuk manajemen email blast - Menambahkan EmailBlastController untuk mengelola email blast. - Menyediakan metode untuk menampilkan, membuat, dan menyimpan email blast. - Mengimplementasikan validasi untuk input email blast. - Menyimpan riwayat email blast dan mengantre pengiriman menggunakan job. - Menyediakan metode untuk menampilkan detail dan datatables untuk riwayat email blast. --- app/Http/Controllers/EmailBlastController.php | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 app/Http/Controllers/EmailBlastController.php diff --git a/app/Http/Controllers/EmailBlastController.php b/app/Http/Controllers/EmailBlastController.php new file mode 100644 index 0000000..8e6bc21 --- /dev/null +++ b/app/Http/Controllers/EmailBlastController.php @@ -0,0 +1,81 @@ +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 + ]); + + } +}