From d4b9e5fdf07ed2893d362cb01780110f442f7e65 Mon Sep 17 00:00:00 2001 From: LailaWulandarii Date: Sun, 28 Dec 2025 19:20:14 +0700 Subject: [PATCH] Refactor modal components for order history and payment details - Updated modal-foto.blade.php to dynamically include booking ID in modal ID and display booking details using Carbon for date and time formatting. - Created new modal-riwayat-buket.blade.php and modal-riwayat-foto.blade.php for displaying detailed order history for buket and foto respectively. - Removed the old modal-riwayat.blade.php file as its functionality has been split into the new modals. - Updated riwayat.blade.php to integrate new modals and display order history with invoice numbers and customer details. --- .../admin/HistoriPesananController.php | 15 +- .../admin/PesananBuketController.php | 79 ++++- .../admin/PesananFotoController.php | 95 +++++- resources/views/admin/pesanan/buket.blade.php | 67 +++-- resources/views/admin/pesanan/foto.blade.php | 72 +++-- .../pesanan/partials/modal-buket.blade.php | 282 +++++++----------- .../pesanan/partials/modal-foto.blade.php | 271 +++++++---------- .../partials/modal-riwayat-buket.blade.php | 147 +++++++++ .../partials/modal-riwayat-foto.blade.php | 146 +++++++++ .../pesanan/partials/modal-riwayat.blade.php | 194 ------------ .../views/admin/pesanan/riwayat.blade.php | 90 +++--- 11 files changed, 850 insertions(+), 608 deletions(-) create mode 100644 resources/views/admin/pesanan/partials/modal-riwayat-buket.blade.php create mode 100644 resources/views/admin/pesanan/partials/modal-riwayat-foto.blade.php delete mode 100644 resources/views/admin/pesanan/partials/modal-riwayat.blade.php diff --git a/app/Http/Controllers/admin/HistoriPesananController.php b/app/Http/Controllers/admin/HistoriPesananController.php index bd31d36..53ea3c0 100644 --- a/app/Http/Controllers/admin/HistoriPesananController.php +++ b/app/Http/Controllers/admin/HistoriPesananController.php @@ -3,12 +3,25 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; +use App\Models\BookingFoto; +use App\Models\TransaksiBuket; use Illuminate\Http\Request; class HistoriPesananController extends Controller { public function index() { - return view('admin.riwayat-pesanan'); + $riwayatBuket = TransaksiBuket::with(['pelanggan', 'buket']) + ->where('status_transaksi', '!=', 'menunggu_verifikasi') + ->latest() + ->get(); + + // Ambil riwayat foto (selain status menunggu) + $riwayatFoto = BookingFoto::with(['pelanggan', 'paketFoto']) + ->where('status_booking', '!=', 'menunggu_verifikasi') + ->latest() + ->get(); + + return view('admin.pesanan.riwayat', compact('riwayatBuket', 'riwayatFoto')); } } diff --git a/app/Http/Controllers/admin/PesananBuketController.php b/app/Http/Controllers/admin/PesananBuketController.php index 093cf3c..28c5a66 100644 --- a/app/Http/Controllers/admin/PesananBuketController.php +++ b/app/Http/Controllers/admin/PesananBuketController.php @@ -3,12 +3,89 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; +use App\Models\TransaksiBuket; use Illuminate\Http\Request; class PesananBuketController extends Controller { public function index() { - return view('admin.pesanan-buket'); + $pesanan = TransaksiBuket::with(['pelanggan']) + ->where('status_transaksi', 'menunggu_verifikasi') + ->latest() + ->get(); + + return view('admin.pesanan.buket', compact('pesanan')); + } + + public function updateStatus(Request $request, $id) + { + try { + // 1. Ambil data dengan relasi + $pesanan = \App\Models\TransaksiBuket::with(['pelanggan', 'buket'])->findOrFail($id); + + // 2. Tentukan status & session flash sekaligus agar tidak dobel + if ($request->jenis === 'terima') { + $status = 'diterima'; + session()->flash('success', "Pesanan #{$pesanan->no_invoice} telah diterima!"); // Alert Hijau + } else { + $status = 'ditolak'; + session()->flash('error', "Pesanan #{$pesanan->no_invoice} telah ditolak!"); // Alert Merah + } + + // 3. Update database + $pesanan->update(['status_transaksi' => $status]); + + // 4. Siapkan Data untuk Pesan WA + $nama = $pesanan->pelanggan->nama; // Pastikan kolomnya 'nama', bukan 'nama_lengkap' + $produk = $pesanan->buket->nama; + $tgl_obj = \Carbon\Carbon::parse($pesanan->tgl_ambil)->locale('id'); + $tanggal = $tgl_obj->translatedFormat('l, d F Y'); + $waktu = $tgl_obj->format('H:i'); + + $total = number_format($pesanan->total_bayar, 0, ',', '.'); + $req = $pesanan->request ?? '-'; + $ucapan = $pesanan->ucapan ?? '-'; + $invoice = $pesanan->no_invoice; + + // 5. Susun Pesan berdasarkan kondisi + if ($status === 'diterima') { + $msg = "Halo Kak *{$nama}*,\n\n" . + "Pesanan Anda dengan Nomor Invoice: *#{$invoice}* telah kami *TERIMA* dan masuk dalam daftar proses pengerjaan.\n\n" . + "*Rincian Pesanan:*\n" . + "- *Produk:* {$produk}\n" . + "- *Total Bayar:* Rp {$total}\n" . + "- *Request:* {$req}\n" . + "- *Ucapan:* \"{$ucapan}\"\n" . + "- *Waktu Pengambilan:* {$tanggal} pukul {$waktu} WIB\n\n" . + "Mohon simpan rincian ini dan ditunggu info selanjutnya ya Kak. Terima kasih! ✨"; + } else { + $msg = "Halo Kak *{$nama}*,\n\n" . + "Mengenai pesanan Anda dengan Nomor Invoice: *#{$invoice}* terpaksa kami *TOLAK* dikarenakan:\n\n" . + "*[TULIS ALASAN DI SINI]*\n\n" . + "*Rincian Pesanan:*\n" . + "- *Produk:* {$produk}\n" . + "- *Total Bayar:* Rp {$total}\n" . + "- *Waktu Pengambilan:* {$tanggal}\n\n" . + "Admin kami akan segera menghubungi Kakak terkait proses pengembalian dana. Mohon maaf atas ketidaknyamanannya."; + } + + // 6. Format Nomor WhatsApp + $no_wa = preg_replace('/[^0-9]/', '', $pesanan->pelanggan->no_wa); // Pastikan kolomnya '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; + } + + // 7. Kembalikan Response JSON + return response()->json([ + 'success' => true, + 'wa_url' => "https://wa.me/{$no_wa}?text=" . urlencode($msg) + ]); + } catch (\Exception $e) { + return response()->json(['success' => false, 'message' => $e->getMessage()], 500); + } } } diff --git a/app/Http/Controllers/admin/PesananFotoController.php b/app/Http/Controllers/admin/PesananFotoController.php index c1b4026..a4d6bb7 100644 --- a/app/Http/Controllers/admin/PesananFotoController.php +++ b/app/Http/Controllers/admin/PesananFotoController.php @@ -3,12 +3,105 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; +use App\Models\BookingFoto; use Illuminate\Http\Request; class PesananFotoController extends Controller { public function index() { - return view('admin.pesanan-foto'); + $pesanan = BookingFoto::with([ + 'pelanggan', // Untuk ambil Nama & No HP + 'paketFoto', // Untuk ambil Nama Paket (misal: Paket Wisuda) + 'detailAdditional.additional' // Lanjut ambil Nama Additional (misal: Background, Orang Tambahan) + ]) + ->where('status_booking', 'menunggu_verifikasi') + ->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!"); + } else { + $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) { + $list_additional .= "- " . $item->additional->nama . " (x" . $item->qty . ")\n"; + } + } else { + $list_additional = "- Tidak ada tambahan\n"; + } + + // 6. Susun Pesan WA + if ($status === 'diterima') { + $msg = "Halo Kak *{$nama}* ,\n\n" . + "Booking foto Anda dengan Invoice: *#{$invoice}* telah kami *TERIMA*. \n\n" . + "*Rincian Booking:*\n" . + "- *Paket:* {$paket}\n" . + "*Tambahan:*\n{$list_additional}" . + "- *Total Bayar:* Rp {$total}\n\n" . + "*Jadwal Sesi Foto:*\n" . + " Tanggal: {$tanggal}\n" . + " Jam: {$jam_mulai} - {$jam_selesai} WIB\n\n" . + "Mohon datang 15 menit sebelum jadwal dimulai ya Kak. Sampai jumpa di studio! "; + } else { + $msg = "Halo Kak *{$nama}*,\n\n" . + "Mohon maaf, booking foto Anda dengan Invoice *#{$invoice}* terpaksa kami *TOLAK* dikarenakan:\n\n" . + "*[TULIS ALASAN DI SINI]*\n\n" . + "*Rincian Booking:*\n" . + "- *Paket:* {$paket}\n" . + "*Tambahan:*\n{$list_additional}" . + "- *Total Bayar:* Rp {$total}\n" . + "- *Jadwal Sesi:* {$tanggal} ({$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) + $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; + } + + return response()->json([ + 'success' => true, + 'wa_url' => "https://wa.me/{$no_wa}?text=" . urlencode($msg) + ]); + } catch (\Exception $e) { + return response()->json(['success' => false, 'message' => $e->getMessage()], 500); + } } } diff --git a/resources/views/admin/pesanan/buket.blade.php b/resources/views/admin/pesanan/buket.blade.php index 607e238..06fdc40 100644 --- a/resources/views/admin/pesanan/buket.blade.php +++ b/resources/views/admin/pesanan/buket.blade.php @@ -3,43 +3,72 @@ @section('title', 'Pesanan Buket') @section('content') + {{-- ALERT SUKSES --}} + @if (session('success')) + + @endif + + {{-- ALERT ERROR UMUM (Jika ada error selain validasi modal) --}} + @if (session('error')) + + @endif
- + + - + - - - - - - - - - + @forelse ($pesanan as $p) + + + + + + + + + + + @include('admin.pesanan.partials.modal-buket') + @empty + + + + @endforelse
No.No. Invoice Nama Pelanggan Nama Buket Tanggal AmbilJam Ambil Total StatusAksiAksi
Graidenvehicula.aliquet@semconsequat.co.uk076 4820 8838OffenburgOffenburg - Active - - - - -
{{ $p->no_invoice }}{{ $p->pelanggan->nama }}{{ $p->buket->nama }} + {{ \Carbon\Carbon::parse($p->tgl_ambil)->locale('id')->translatedFormat('d F Y') }} + + {{ \Carbon\Carbon::parse($p->tgl_ambil)->format('H:i') }} WIB + Rp {{ number_format($p->total_bayar, 0, ',', '.') }} + + {{ $p->status_label->text }} + + + + +
Belum ada data pesanan buket.
- @include('admin.pesanan.partials.modal-buket') + @endsection diff --git a/resources/views/admin/pesanan/foto.blade.php b/resources/views/admin/pesanan/foto.blade.php index c51baa8..9b714f3 100644 --- a/resources/views/admin/pesanan/foto.blade.php +++ b/resources/views/admin/pesanan/foto.blade.php @@ -3,44 +3,74 @@ @section('title', 'Pesanan Foto') @section('content') + {{-- ALERT SUKSES --}} + @if (session('success')) + + @endif + + {{-- ALERT ERROR UMUM (Jika ada error selain validasi modal) --}} + @if (session('error')) + + @endif
- + - - + + + - + - - - - - - - - - + @forelse ($pesanan as $p) + + + + + + + + + + + @include('admin.pesanan.partials.modal-foto') + @empty + + + + @endforelse
No.No. Invoice Nama PelangganNama Paket FotoTanggal Booking Nama PaketTanggal BookingWaktu Total StatusAksiAksi
Graidenvehicula.aliquet@semconsequat.co.uk076 4820 8838OffenburgOffenburg - Selesai - - - - -
{{ $p->no_invoice }}{{ $p->pelanggan->nama }}{{ $p->paketFoto->nama }} + {{ \Carbon\Carbon::parse($p->tgl_booking)->locale('id')->translatedFormat('d F Y') }} + + {{ \Carbon\Carbon::parse($p->jam_mulai)->format('H:i') }} - + {{ \Carbon\Carbon::parse($p->jam_selesai)->format('H:i') }} + Rp {{ number_format($p->total_bayar, 0, ',', '.') }} + + {{ $p->status_label->text }} + + + + +
Belum ada data pesanan foto.
- @include('admin.pesanan.partials.modal-foto') + {{-- @include('admin.pesanan.partials.modal-foto') --}} @endsection diff --git a/resources/views/admin/pesanan/partials/modal-buket.blade.php b/resources/views/admin/pesanan/partials/modal-buket.blade.php index d6e9898..c0241e0 100644 --- a/resources/views/admin/pesanan/partials/modal-buket.blade.php +++ b/resources/views/admin/pesanan/partials/modal-buket.blade.php @@ -1,5 +1,5 @@ -