diff --git a/app/Http/Controllers/Admin/BerandaController.php b/app/Http/Controllers/Admin/BerandaController.php index bd8aae1..5f9a2fb 100644 --- a/app/Http/Controllers/Admin/BerandaController.php +++ b/app/Http/Controllers/Admin/BerandaController.php @@ -15,14 +15,10 @@ public function index() $now = Carbon::now(); $lastMonth = Carbon::now()->subMonth(); $today = Carbon::today(); - - // Fungsi pembantu untuk hitung pertumbuhan (%) $getGrowth = function ($current, $previous) { if ($previous <= 0) return $current > 0 ? 100 : 0; return round((($current - $previous) / $previous) * 100, 1); }; - - // --- 1. HITUNG DATA BULAN INI --- $currPendapatan = TransaksiBuket::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_transaksi', 'diterima')->sum('total_bayar') + BookingFoto::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_booking', 'diterima')->sum('total_bayar'); @@ -34,8 +30,6 @@ public function index() $currBatal = TransaksiBuket::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_transaksi', 'ditolak')->count() + BookingFoto::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_booking', 'ditolak')->count(); - - // --- 2. HITUNG DATA BULAN LALU (Untuk Perbandingan %) --- $prevPendapatan = TransaksiBuket::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_transaksi', 'diterima')->sum('total_bayar') + BookingFoto::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_booking', 'diterima')->sum('total_bayar'); @@ -47,26 +41,18 @@ public function index() $prevBatal = TransaksiBuket::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_transaksi', 'ditolak')->count() + BookingFoto::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_booking', 'ditolak')->count(); - - // --- 3. SUSUN ARRAY STATISTIK --- $stat = [ 'pendapatan' => $currPendapatan, 'pendapatan_grow' => $getGrowth($currPendapatan, $prevPendapatan), - 'masuk_count' => $currMasuk, 'masuk_grow' => $getGrowth($currMasuk, $prevMasuk), - 'selesai_count' => $currSelesai, 'selesai_grow' => $getGrowth($currSelesai, $prevSelesai), - 'batal_count' => $currBatal, 'batal_grow' => $getGrowth($currBatal, $prevBatal), ]; - - // --- 4. JADWAL & PENDING --- $buketToday = TransaksiBuket::with(['pelanggan', 'buket'])->whereDate('tgl_ambil', $today)->where('status_transaksi', 'diterima')->get(); $fotoToday = BookingFoto::with(['pelanggan', 'paketFoto'])->whereDate('tgl_booking', $today)->where('status_booking', 'diterima')->orderBy('jam_mulai', 'asc')->get(); - $pesananBuket = TransaksiBuket::with(['pelanggan', 'buket'])->where('status_transaksi', 'menunggu_verifikasi')->latest()->get(); $pesananFoto = BookingFoto::with(['pelanggan', 'paketFoto'])->where('status_booking', 'menunggu_verifikasi')->latest()->get(); diff --git a/app/Http/Controllers/Admin/HistoriPesananController.php b/app/Http/Controllers/Admin/HistoriPesananController.php index 7240d4b..340de3b 100644 --- a/app/Http/Controllers/Admin/HistoriPesananController.php +++ b/app/Http/Controllers/Admin/HistoriPesananController.php @@ -16,7 +16,6 @@ public function index() $riwayatFoto = BookingFoto::whereIn('status_booking', ['selesai', 'ditolak']) ->latest()->get(); - return view('admin.pesanan.riwayat', compact('riwayatBuket', 'riwayatFoto')); } } diff --git a/app/Http/Controllers/Admin/ManajemenAdminController.php b/app/Http/Controllers/Admin/ManajemenAdminController.php index b5449d8..ea9ff26 100644 --- a/app/Http/Controllers/Admin/ManajemenAdminController.php +++ b/app/Http/Controllers/Admin/ManajemenAdminController.php @@ -24,19 +24,14 @@ public static function middleware(): array }), ]; } - /** - * Display a listing of the resource. - */ public function index() { $admin = User::where('role', '!=', 'pemilik') ->latest() ->get(); - // 2. Kirim data ($buket) ke view return view('admin.kelola-admin.index', compact('admin')); } - // --- Bagian STORE --- public function store(Request $request) { $validator = Validator::make($request->all(), [ @@ -47,7 +42,6 @@ public function store(Request $request) 'role' => 'required|in:admin_foto,admin_buket', 'alamat' => 'required|string|max:255', ], [ - // Detail Pesan Menggunakan :attribute 'required' => 'Kolom :attribute wajib diisi.', 'unique' => ':attribute sudah terdaftar di sistem, gunakan yang lain.', 'min' => ':attribute minimal harus berisi :min karakter.', @@ -58,7 +52,6 @@ public function store(Request $request) 'alpha_dash' => ':attribute hanya boleh berisi huruf, angka, serta simbol - dan _', 'in' => ':attribute yang dipilih tidak sesuai dengan pilihan yang tersedia.', ], [ - // Alias untuk :attribute agar pesan lebih rapi dibaca 'nama' => 'nama lengkap', 'username' => 'username', 'email' => 'alamat email', @@ -72,7 +65,6 @@ public function store(Request $request) ->withInput() ->with('error_modal', 'create'); } - User::create([ 'nama' => $request->nama, 'username' => $request->username, @@ -82,7 +74,6 @@ public function store(Request $request) 'alamat' => $request->alamat, 'password' => Hash::make($request->username), ]); - return redirect()->back()->with('success', 'Admin berhasil ditambahkan!'); } @@ -90,7 +81,6 @@ public function store(Request $request) public function update(Request $request, string $id) { $admin = User::findOrFail($id); - $validator = Validator::make($request->all(), [ 'nama' => 'required|string|min:5|max:100', 'username' => 'required|string|alpha_dash|max:50|unique:users,username,' . $id . ',id_user', @@ -99,7 +89,6 @@ public function update(Request $request, string $id) 'role' => 'required|in:admin_foto,admin_buket', 'alamat' => 'required|string|max:255', ], [ - // Detail Pesan Menggunakan :attribute 'required' => 'Kolom :attribute wajib diisi.', 'unique' => ':attribute sudah terdaftar di sistem, gunakan yang lain.', 'min' => ':attribute minimal harus berisi :min karakter.', @@ -110,7 +99,6 @@ public function update(Request $request, string $id) 'alpha_dash' => ':attribute hanya boleh berisi huruf, angka, serta simbol - dan _', 'in' => ':attribute yang dipilih tidak sesuai dengan pilihan yang tersedia.', ], [ - // Alias untuk :attribute agar pesan lebih rapi dibaca 'nama' => 'nama lengkap', 'username' => 'username', 'email' => 'alamat email', @@ -124,10 +112,7 @@ public function update(Request $request, string $id) ->withInput() ->with('error_id', $id); } - - // Menggunakan update hanya pada kolom yang diizinkan (mencegah injeksi role owner) $admin->update($request->only(['nama', 'username', 'email', 'no_wa', 'role', 'alamat'])); - return redirect()->back()->with('success', 'Data berhasil diperbarui!'); } diff --git a/app/Http/Controllers/Admin/PesananFotoController.php b/app/Http/Controllers/Admin/PesananFotoController.php index 1fe3426..295d425 100644 --- a/app/Http/Controllers/Admin/PesananFotoController.php +++ b/app/Http/Controllers/Admin/PesananFotoController.php @@ -18,17 +18,13 @@ public function index() ->whereIn('status_booking', ['menunggu_verifikasi', 'diterima']) ->latest() ->get(); - return view('admin.pesanan.foto', compact('pesanan')); } public function updateStatus(Request $request, $id) { try { - // 1. Ambil data dengan relasi lengkap (Eager Loading) $pesanan = \App\Models\BookingFoto::with(['pelanggan', 'paketFoto', 'detailAdditional.additional'])->findOrFail($id); - - // 2. Tentukan status & session flash if ($request->jenis === 'terima') { $status = 'diterima'; session()->flash('success', "Booking {$pesanan->no_invoice} telah diterima!"); @@ -39,24 +35,15 @@ public function updateStatus(Request $request, $id) $status = 'ditolak'; session()->flash('error', "Booking {$pesanan->no_invoice} telah ditolak!"); } - - // 3. Update database (Pastikan nama kolom status_booking sesuai migrasimu) $pesanan->update(['status_booking' => $status]); - - // 4. Siapkan Data Dasar $nama = $pesanan->pelanggan->nama; $paket = $pesanan->paketFoto->nama; $tgl_obj = \Carbon\Carbon::parse($pesanan->tgl_booking)->locale('id'); $tanggal = $tgl_obj->translatedFormat('l, d F Y'); - - // Jam mulai dan selesai $jam_mulai = \Carbon\Carbon::parse($pesanan->jam_mulai)->format('H:i'); $jam_selesai = \Carbon\Carbon::parse($pesanan->jam_selesai)->format('H:i'); - $total = number_format($pesanan->total_bayar, 0, ',', '.'); $invoice = $pesanan->no_invoice; - - // 5. Olah Data Additional untuk list di WA $list_additional = ""; if ($pesanan->detailAdditional->count() > 0) { foreach ($pesanan->detailAdditional as $item) { @@ -65,8 +52,6 @@ public function updateStatus(Request $request, $id) } else { $list_additional = "- Tidak ada additional\n"; } - - // 6. Susun Pesan WA $msg = null; if ($status === 'diterima') { $msg = "Halo Kak *{$nama}* ,\n\n" . @@ -92,23 +77,16 @@ public function updateStatus(Request $request, $id) " Jam: {$jam_mulai} - {$jam_selesai} WIB\n\n" . "Admin kami akan segera menghubungi Kakak untuk info pengembalian dana atau penjadwalan ulang. Terima kasih. "; } - - // 7. Format Nomor WhatsApp (Sesuaikan kolom: no_hp / no_wa) $wa_url = null; - if ($msg) { $no_wa = preg_replace('/[^0-9]/', '', $pesanan->pelanggan->no_wa); - if (str_starts_with($no_wa, '0')) { $no_wa = '62' . substr($no_wa, 1); } elseif (str_starts_with($no_wa, '8')) { $no_wa = '62' . $no_wa; } - $wa_url = "https://wa.me/{$no_wa}?text=" . urlencode($msg); } - - return response()->json([ 'success' => true, 'wa_url' => $wa_url