|
|
@ -29,8 +29,8 @@ public function index()
|
||||||
$currMasuk = TransaksiBuket::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->count() +
|
$currMasuk = TransaksiBuket::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->count() +
|
||||||
BookingFoto::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->count();
|
BookingFoto::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->count();
|
||||||
|
|
||||||
$currSelesai = TransaksiBuket::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_transaksi', 'diterima')->count() +
|
$currSelesai = TransaksiBuket::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_transaksi', 'selesai')->count() +
|
||||||
BookingFoto::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_booking', 'diterima')->count();
|
BookingFoto::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_booking', 'selesai')->count();
|
||||||
|
|
||||||
$currBatal = TransaksiBuket::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_transaksi', 'ditolak')->count() +
|
$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();
|
BookingFoto::whereMonth('created_at', $now->month)->whereYear('created_at', $now->year)->where('status_booking', 'ditolak')->count();
|
||||||
|
|
@ -42,8 +42,8 @@ public function index()
|
||||||
$prevMasuk = TransaksiBuket::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->count() +
|
$prevMasuk = TransaksiBuket::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->count() +
|
||||||
BookingFoto::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->count();
|
BookingFoto::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->count();
|
||||||
|
|
||||||
$prevSelesai = TransaksiBuket::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_transaksi', 'diterima')->count() +
|
$prevSelesai = TransaksiBuket::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_transaksi', 'selesai')->count() +
|
||||||
BookingFoto::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_booking', 'diterima')->count();
|
BookingFoto::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_booking', 'selesai')->count();
|
||||||
|
|
||||||
$prevBatal = TransaksiBuket::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_transaksi', 'ditolak')->count() +
|
$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();
|
BookingFoto::whereMonth('created_at', $lastMonth->month)->whereYear('created_at', $lastMonth->year)->where('status_booking', 'ditolak')->count();
|
||||||
|
|
@ -63,13 +63,13 @@ public function index()
|
||||||
'batal_grow' => $getGrowth($currBatal, $prevBatal),
|
'batal_grow' => $getGrowth($currBatal, $prevBatal),
|
||||||
];
|
];
|
||||||
|
|
||||||
// --- 4. JADWAL & PENDING (Sudah Benar) ---
|
// --- 4. JADWAL & PENDING ---
|
||||||
$buketToday = TransaksiBuket::with(['pelanggan', 'buket'])->whereDate('tgl_ambil', $today)->where('status_transaksi', 'diterima')->get();
|
$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();
|
$fotoToday = BookingFoto::with(['pelanggan', 'paketFoto'])->whereDate('tgl_booking', $today)->where('status_booking', 'diterima')->orderBy('jam_mulai', 'asc')->get();
|
||||||
|
|
||||||
$riwayatBuket = TransaksiBuket::with(['pelanggan', 'buket'])->where('status_transaksi', 'menunggu_verifikasi')->latest()->get();
|
$pesananBuket = TransaksiBuket::with(['pelanggan', 'buket'])->where('status_transaksi', 'menunggu_verifikasi')->latest()->get();
|
||||||
$riwayatFoto = BookingFoto::with(['pelanggan', 'paketFoto'])->where('status_booking', 'menunggu_verifikasi')->latest()->get();
|
$pesananFoto = BookingFoto::with(['pelanggan', 'paketFoto'])->where('status_booking', 'menunggu_verifikasi')->latest()->get();
|
||||||
|
|
||||||
return view('admin.beranda.index', compact('stat', 'buketToday', 'fotoToday', 'riwayatBuket', 'riwayatFoto'));
|
return view('admin.beranda.index', compact('stat', 'buketToday', 'fotoToday', 'pesananBuket', 'pesananFoto'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,16 +11,11 @@ class HistoriPesananController extends Controller
|
||||||
{
|
{
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$riwayatBuket = TransaksiBuket::with(['pelanggan', 'buket'])
|
$riwayatBuket = TransaksiBuket::whereIn('status_transaksi', ['selesai', 'ditolak'])
|
||||||
->where('status_transaksi', '!=', 'menunggu_verifikasi')
|
->latest()->get();
|
||||||
->latest()
|
|
||||||
->get();
|
|
||||||
|
|
||||||
// Ambil riwayat foto (selain status menunggu)
|
$riwayatFoto = BookingFoto::whereIn('status_booking', ['selesai', 'ditolak'])
|
||||||
$riwayatFoto = BookingFoto::with(['pelanggan', 'paketFoto'])
|
->latest()->get();
|
||||||
->where('status_booking', '!=', 'menunggu_verifikasi')
|
|
||||||
->latest()
|
|
||||||
->get();
|
|
||||||
|
|
||||||
return view('admin.pesanan.riwayat', compact('riwayatBuket', 'riwayatFoto'));
|
return view('admin.pesanan.riwayat', compact('riwayatBuket', 'riwayatFoto'));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,8 @@ class PesananBuketController extends Controller
|
||||||
{
|
{
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$pesanan = TransaksiBuket::with(['pelanggan'])
|
$pesanan = TransaksiBuket::whereIn('status_transaksi', ['menunggu_verifikasi', 'diterima'])
|
||||||
->where('status_transaksi', 'menunggu_verifikasi')
|
->orderBy('created_at', 'ASC')
|
||||||
->latest()
|
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
return view('admin.pesanan.buket', compact('pesanan'));
|
return view('admin.pesanan.buket', compact('pesanan'));
|
||||||
|
|
@ -27,10 +26,13 @@ public function updateStatus(Request $request, $id)
|
||||||
// 2. Tentukan status & session flash sekaligus agar tidak dobel
|
// 2. Tentukan status & session flash sekaligus agar tidak dobel
|
||||||
if ($request->jenis === 'terima') {
|
if ($request->jenis === 'terima') {
|
||||||
$status = 'diterima';
|
$status = 'diterima';
|
||||||
session()->flash('success', "Pesanan #{$pesanan->no_invoice} telah diterima!"); // Alert Hijau
|
session()->flash('success', "Pesanan {$pesanan->no_invoice} telah diterima!"); // Alert Hijau
|
||||||
|
} elseif ($request->jenis === 'selesai') {
|
||||||
|
$status = 'selesai';
|
||||||
|
session()->flash('success', "Pesanan {$pesanan->no_invoice} berhasil diselesaikan!");
|
||||||
} else {
|
} else {
|
||||||
$status = 'ditolak';
|
$status = 'ditolak';
|
||||||
session()->flash('error', "Pesanan #{$pesanan->no_invoice} telah ditolak!"); // Alert Merah
|
session()->flash('error', "Pesanan {$pesanan->no_invoice} telah ditolak!"); // Alert Merah
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. Update database
|
// 3. Update database
|
||||||
|
|
@ -49,9 +51,10 @@ public function updateStatus(Request $request, $id)
|
||||||
$invoice = $pesanan->no_invoice;
|
$invoice = $pesanan->no_invoice;
|
||||||
|
|
||||||
// 5. Susun Pesan berdasarkan kondisi
|
// 5. Susun Pesan berdasarkan kondisi
|
||||||
|
$msg = null;
|
||||||
if ($status === 'diterima') {
|
if ($status === 'diterima') {
|
||||||
$msg = "Halo Kak *{$nama}*,\n\n" .
|
$msg = "Halo Kak *{$nama}*,\n\n" .
|
||||||
"Pesanan Anda dengan Nomor Invoice: *#{$invoice}* telah kami *TERIMA* dan masuk dalam daftar proses pengerjaan.\n\n" .
|
"Pesanan Anda dengan Nomor Invoice: *{$invoice}* telah kami *TERIMA* dan masuk dalam daftar proses pengerjaan.\n\n" .
|
||||||
"*Rincian Pesanan:*\n" .
|
"*Rincian Pesanan:*\n" .
|
||||||
"- *Produk:* {$produk}\n" .
|
"- *Produk:* {$produk}\n" .
|
||||||
"- *Total Bayar:* Rp {$total}\n" .
|
"- *Total Bayar:* Rp {$total}\n" .
|
||||||
|
|
@ -59,9 +62,9 @@ public function updateStatus(Request $request, $id)
|
||||||
"- *Ucapan:* \"{$ucapan}\"\n" .
|
"- *Ucapan:* \"{$ucapan}\"\n" .
|
||||||
"- *Waktu Pengambilan:* {$tanggal} pukul {$waktu} WIB\n\n" .
|
"- *Waktu Pengambilan:* {$tanggal} pukul {$waktu} WIB\n\n" .
|
||||||
"Mohon simpan rincian ini dan ditunggu info selanjutnya ya Kak. Terima kasih! ✨";
|
"Mohon simpan rincian ini dan ditunggu info selanjutnya ya Kak. Terima kasih! ✨";
|
||||||
} else {
|
} elseif ($status === 'ditolak') {
|
||||||
$msg = "Halo Kak *{$nama}*,\n\n" .
|
$msg = "Halo Kak *{$nama}*,\n\n" .
|
||||||
"Mengenai pesanan Anda dengan Nomor Invoice: *#{$invoice}* terpaksa kami *TOLAK* dikarenakan:\n\n" .
|
"Mengenai pesanan Anda dengan Nomor Invoice: *{$invoice}* terpaksa kami *TOLAK* dikarenakan:\n\n" .
|
||||||
"*[TULIS ALASAN DI SINI]*\n\n" .
|
"*[TULIS ALASAN DI SINI]*\n\n" .
|
||||||
"*Rincian Pesanan:*\n" .
|
"*Rincian Pesanan:*\n" .
|
||||||
"- *Produk:* {$produk}\n" .
|
"- *Produk:* {$produk}\n" .
|
||||||
|
|
@ -71,18 +74,24 @@ public function updateStatus(Request $request, $id)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. Format Nomor WhatsApp
|
// 6. Format Nomor WhatsApp
|
||||||
$no_wa = preg_replace('/[^0-9]/', '', $pesanan->pelanggan->no_wa); // Pastikan kolomnya 'no_wa'
|
$wa_url = null;
|
||||||
|
|
||||||
if (str_starts_with($no_wa, '0')) {
|
if ($msg) {
|
||||||
$no_wa = '62' . substr($no_wa, 1);
|
$no_wa = preg_replace('/[^0-9]/', '', $pesanan->pelanggan->no_wa);
|
||||||
} elseif (str_starts_with($no_wa, '8')) {
|
|
||||||
$no_wa = '62' . $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);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 7. Kembalikan Response JSON
|
// 7. Kembalikan Response JSON
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'success' => true,
|
'success' => true,
|
||||||
'wa_url' => "https://wa.me/{$no_wa}?text=" . urlencode($msg)
|
'wa_url' => $wa_url
|
||||||
]);
|
]);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
|
return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
|
||||||
|
|
|
||||||
|
|
@ -11,11 +11,11 @@ class PesananFotoController extends Controller
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$pesanan = BookingFoto::with([
|
$pesanan = BookingFoto::with([
|
||||||
'pelanggan', // Untuk ambil Nama & No HP
|
'pelanggan',
|
||||||
'paketFoto', // Untuk ambil Nama Paket (misal: Paket Wisuda)
|
'paketFoto',
|
||||||
'detailAdditional.additional' // Lanjut ambil Nama Additional (misal: Background, Orang Tambahan)
|
'detailAdditional.additional'
|
||||||
])
|
])
|
||||||
->where('status_booking', 'menunggu_verifikasi')
|
->whereIn('status_booking', ['menunggu_verifikasi', 'diterima'])
|
||||||
->latest()
|
->latest()
|
||||||
->get();
|
->get();
|
||||||
|
|
||||||
|
|
@ -31,10 +31,13 @@ public function updateStatus(Request $request, $id)
|
||||||
// 2. Tentukan status & session flash
|
// 2. Tentukan status & session flash
|
||||||
if ($request->jenis === 'terima') {
|
if ($request->jenis === 'terima') {
|
||||||
$status = 'diterima';
|
$status = 'diterima';
|
||||||
session()->flash('success', "Booking #{$pesanan->no_invoice} telah diterima!");
|
session()->flash('success', "Booking {$pesanan->no_invoice} telah diterima!");
|
||||||
|
} elseif ($request->jenis === 'selesai') {
|
||||||
|
$status = 'selesai';
|
||||||
|
session()->flash('success', "Booking {$pesanan->no_invoice} berhasil diselesaikan!");
|
||||||
} else {
|
} else {
|
||||||
$status = 'ditolak';
|
$status = 'ditolak';
|
||||||
session()->flash('error', "Booking #{$pesanan->no_invoice} telah ditolak!");
|
session()->flash('error', "Booking {$pesanan->no_invoice} telah ditolak!");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. Update database (Pastikan nama kolom status_booking sesuai migrasimu)
|
// 3. Update database (Pastikan nama kolom status_booking sesuai migrasimu)
|
||||||
|
|
@ -60,45 +63,55 @@ public function updateStatus(Request $request, $id)
|
||||||
$list_additional .= "- " . $item->additional->nama . " (x" . $item->qty . ")\n";
|
$list_additional .= "- " . $item->additional->nama . " (x" . $item->qty . ")\n";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$list_additional = "- Tidak ada tambahan\n";
|
$list_additional = "- Tidak ada additional\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. Susun Pesan WA
|
// 6. Susun Pesan WA
|
||||||
|
$msg = null;
|
||||||
if ($status === 'diterima') {
|
if ($status === 'diterima') {
|
||||||
$msg = "Halo Kak *{$nama}* ,\n\n" .
|
$msg = "Halo Kak *{$nama}* ,\n\n" .
|
||||||
"Booking foto Anda dengan Invoice: *#{$invoice}* telah kami *TERIMA*. \n\n" .
|
"Booking foto Anda dengan Invoice: *{$invoice}* telah kami *TERIMA*. \n\n" .
|
||||||
"*Rincian Booking:*\n" .
|
"*Rincian Booking:*\n" .
|
||||||
"- *Paket:* {$paket}\n" .
|
"- *Paket:* {$paket}\n" .
|
||||||
"*Tambahan:*\n{$list_additional}" .
|
"*Additional:*\n{$list_additional}" .
|
||||||
"- *Total Bayar:* Rp {$total}\n\n" .
|
"- *Total Bayar:* Rp {$total}\n\n" .
|
||||||
"*Jadwal Sesi Foto:*\n" .
|
"*Jadwal Sesi Foto:*\n" .
|
||||||
" Tanggal: {$tanggal}\n" .
|
" Tanggal: {$tanggal}\n" .
|
||||||
" Jam: {$jam_mulai} - {$jam_selesai} WIB\n\n" .
|
" Jam: {$jam_mulai} - {$jam_selesai} WIB\n\n" .
|
||||||
"Mohon datang 15 menit sebelum jadwal dimulai ya Kak. Sampai jumpa di studio! ";
|
"Mohon datang 15 menit sebelum jadwal dimulai ya Kak. Sampai jumpa di studio! ";
|
||||||
} else {
|
} elseif ($status === 'ditolak') {
|
||||||
$msg = "Halo Kak *{$nama}*,\n\n" .
|
$msg = "Halo Kak *{$nama}*,\n\n" .
|
||||||
"Mohon maaf, booking foto Anda dengan Invoice *#{$invoice}* terpaksa kami *TOLAK* dikarenakan:\n\n" .
|
"Mohon maaf, booking foto Anda dengan Invoice *{$invoice}* terpaksa kami *TOLAK* dikarenakan:\n\n" .
|
||||||
"*[TULIS ALASAN DI SINI]*\n\n" .
|
"*[TULIS ALASAN DI SINI]*\n\n" .
|
||||||
"*Rincian Booking:*\n" .
|
"*Rincian Booking:*\n" .
|
||||||
"- *Paket:* {$paket}\n" .
|
"- *Paket:* {$paket}\n" .
|
||||||
"*Tambahan:*\n{$list_additional}" .
|
"*Additional:*\n{$list_additional}" .
|
||||||
"- *Total Bayar:* Rp {$total}\n" .
|
"- *Total Bayar:* Rp {$total}\n" .
|
||||||
"- *Jadwal Sesi:* {$tanggal} ({$jam_mulai} - {$jam_selesai} WIB)\n\n" .
|
"*Jadwal Sesi Foto:*\n" .
|
||||||
|
" Tanggal: {$tanggal}\n" .
|
||||||
|
" Jam: {$jam_mulai} - {$jam_selesai} WIB\n\n" .
|
||||||
"Admin kami akan segera menghubungi Kakak untuk info pengembalian dana atau penjadwalan ulang. Terima kasih. ";
|
"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)
|
// 7. Format Nomor WhatsApp (Sesuaikan kolom: no_hp / no_wa)
|
||||||
$no_wa = preg_replace('/[^0-9]/', '', $pesanan->pelanggan->no_wa);
|
$wa_url = null;
|
||||||
|
|
||||||
if (str_starts_with($no_wa, '0')) {
|
if ($msg) {
|
||||||
$no_wa = '62' . substr($no_wa, 1);
|
$no_wa = preg_replace('/[^0-9]/', '', $pesanan->pelanggan->no_wa);
|
||||||
} elseif (str_starts_with($no_wa, '8')) {
|
|
||||||
$no_wa = '62' . $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([
|
return response()->json([
|
||||||
'success' => true,
|
'success' => true,
|
||||||
'wa_url' => "https://wa.me/{$no_wa}?text=" . urlencode($msg)
|
'wa_url' => $wa_url
|
||||||
]);
|
]);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
|
return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,8 @@
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
|
||||||
|
|
||||||
class BookingFotoController extends Controller
|
class BookingFotoController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -41,9 +43,6 @@ public function detail($id)
|
||||||
public function loadCalendar(Request $request)
|
public function loadCalendar(Request $request)
|
||||||
{
|
{
|
||||||
\Carbon\Carbon::setLocale('id');
|
\Carbon\Carbon::setLocale('id');
|
||||||
// Ambil bulan & tahun dari request AJAX, atau default sekarang
|
|
||||||
// $month = $request->month ?? date('m');
|
|
||||||
// $year = $request->year ?? date('Y');
|
|
||||||
$month = $request->month ?? date('m');
|
$month = $request->month ?? date('m');
|
||||||
$year = $request->year ?? date('Y');
|
$year = $request->year ?? date('Y');
|
||||||
$start = \Carbon\Carbon::createFromDate($year, $month, 1);
|
$start = \Carbon\Carbon::createFromDate($year, $month, 1);
|
||||||
|
|
@ -51,8 +50,7 @@ public function loadCalendar(Request $request)
|
||||||
// Data Navigasi
|
// Data Navigasi
|
||||||
$prevMonth = $start->copy()->subMonth();
|
$prevMonth = $start->copy()->subMonth();
|
||||||
$nextMonth = $start->copy()->addMonth();
|
$nextMonth = $start->copy()->addMonth();
|
||||||
// translatedFormat akan mengikuti locale 'id' di config Anda
|
$currentMonthLabel = $start->isoFormat('MMMM YYYY');
|
||||||
$currentMonthLabel = $start->isoFormat('MMMM YYYY'); // Return hanya potongan HTML (Partial), bukan halaman full
|
|
||||||
$html = view('user.components.calendar-grid', compact(
|
$html = view('user.components.calendar-grid', compact(
|
||||||
'start',
|
'start',
|
||||||
'prevMonth',
|
'prevMonth',
|
||||||
|
|
@ -65,8 +63,7 @@ public function loadCalendar(Request $request)
|
||||||
}
|
}
|
||||||
public function cekSlot(Request $request)
|
public function cekSlot(Request $request)
|
||||||
{
|
{
|
||||||
// Cari booking yang statusnya valid (bukan dibatalkan/ditolak)
|
|
||||||
// Sesuaikan status dengan logic bisnis kamu
|
|
||||||
$booked = BookingFoto::where('tgl_booking', $request->tanggal)
|
$booked = BookingFoto::where('tgl_booking', $request->tanggal)
|
||||||
->whereIn('status_booking', ['menunggu_verifikasi', 'diterima', 'selesai'])
|
->whereIn('status_booking', ['menunggu_verifikasi', 'diterima', 'selesai'])
|
||||||
->get(['jam_mulai']);
|
->get(['jam_mulai']);
|
||||||
|
|
@ -150,14 +147,30 @@ public function cancelBooking()
|
||||||
}
|
}
|
||||||
public function store(Request $request)
|
public function store(Request $request)
|
||||||
{
|
{
|
||||||
// 1. Validasi Input menggunakan Format Validator
|
$validator = Validator::make($request->all(), [
|
||||||
$validator = \Illuminate\Support\Facades\Validator::make($request->all(), [
|
|
||||||
'id_paket' => 'required|exists:paket_fotos,id_paket',
|
'id_paket' => 'required|exists:paket_fotos,id_paket',
|
||||||
'tgl_booking' => 'required|date|after_or_equal:today',
|
'tgl_booking' => 'required|date|after_or_equal:today',
|
||||||
'jam_mulai' => 'required',
|
'jam_mulai' => 'required',
|
||||||
'nama' => 'required|string|min:3|max:100',
|
'nama' => 'required|string|min:3|max:100',
|
||||||
'no_wa' => 'required|numeric|digits_between:10,15',
|
'no_wa' => 'required|numeric|digits_between:10,15',
|
||||||
'bukti_bayar' => 'required|image|mimes:jpeg,png,jpg|max:2048',
|
'bukti_bayar' => 'required|image|mimes:jpeg,png,jpg|max:2048',
|
||||||
|
], [
|
||||||
|
// Detail Pesan Kustom
|
||||||
|
'required' => 'Kolom :attribute wajib diisi.',
|
||||||
|
'string' => 'Input :attribute harus berupa teks valid.',
|
||||||
|
'min' => ':attribute terlalu pendek, minimal :min karakter.',
|
||||||
|
'max' => ':attribute terlalu panjang, maksimal :max karakter.',
|
||||||
|
'numeric' => ':attribute harus berupa angka.',
|
||||||
|
'digits_between' => ':attribute harus antara :min sampai :max digit.',
|
||||||
|
'date' => 'Format tanggal pada :attribute tidak valid.',
|
||||||
|
'after_or_equal' => ':attribute tidak boleh tanggal yang sudah lewat.',
|
||||||
|
'image' => ':attribute harus berupa file gambar.',
|
||||||
|
'mimes' => 'Format :attribute harus jpeg, png, atau jpg.',
|
||||||
|
'max.file' => 'Ukuran :attribute maksimal adalah 2MB.',
|
||||||
|
], [
|
||||||
|
'nama' => 'nama pemesan',
|
||||||
|
'no_wa' => 'nomor WhatsApp',
|
||||||
|
'bukti_bayar' => 'bukti pembayaran',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
DB::beginTransaction(); // Mulai Transaksi Database
|
DB::beginTransaction(); // Mulai Transaksi Database
|
||||||
|
|
@ -186,21 +199,11 @@ public function store(Request $request)
|
||||||
['no_wa' => $request->no_wa],
|
['no_wa' => $request->no_wa],
|
||||||
['nama' => $request->nama]
|
['nama' => $request->nama]
|
||||||
);
|
);
|
||||||
|
|
||||||
// 5. Upload Bukti Bayar
|
|
||||||
$pathBukti = null;
|
|
||||||
if ($request->hasFile('bukti_bayar')) {
|
|
||||||
$file = $request->file('bukti_bayar');
|
|
||||||
$namaFile = 'bukti_' . time() . '_' . Str::random(5) . '.' . $file->getClientOriginalExtension();
|
|
||||||
$file->move(public_path('img/payment/foto'), $namaFile);
|
|
||||||
$pathBukti = $file->storeAs('img/payment/foto', $namaFile, 'public');
|
|
||||||
}
|
|
||||||
|
|
||||||
// 6. Hitung Grand Total (Paket + Additional)
|
// 6. Hitung Grand Total (Paket + Additional)
|
||||||
// Kita hitung ulang di server agar aman dari manipulasi inspect element
|
// Kita hitung ulang di server agar aman dari manipulasi inspect element
|
||||||
$grandTotal = $paket->harga;
|
$grandTotal = $paket->harga;
|
||||||
$listAdditional = [];
|
$listAdditional = [];
|
||||||
|
$totalDurasi = $durasiMenit;
|
||||||
if ($request->has('addons')) {
|
if ($request->has('addons')) {
|
||||||
foreach ($request->addons as $idAddon => $qty) {
|
foreach ($request->addons as $idAddon => $qty) {
|
||||||
if ($qty > 0) {
|
if ($qty > 0) {
|
||||||
|
|
@ -230,26 +233,25 @@ public function store(Request $request)
|
||||||
// 3. Cek Slot Sekali Lagi (Mencegah Race Condition)
|
// 3. Cek Slot Sekali Lagi (Mencegah Race Condition)
|
||||||
$isTaken = \App\Models\BookingFoto::where('tgl_booking', $request->tgl_booking)
|
$isTaken = \App\Models\BookingFoto::where('tgl_booking', $request->tgl_booking)
|
||||||
->where('jam_mulai', $request->jam_mulai)
|
->where('jam_mulai', $request->jam_mulai)
|
||||||
->whereIn('status_booking', ['menunggu_verifikasi', 'diterima', 'selesai'])
|
->whereIn('status_booking', ['menunggu_verifikasi', 'diterima'])
|
||||||
->exists();
|
->exists();
|
||||||
|
|
||||||
if ($isTaken) {
|
if ($isTaken) {
|
||||||
return back()->with('error', 'Mohon maaf, slot waktu ini baru saja diambil orang lain.');
|
return back()->with('error', 'Mohon maaf, slot waktu ini baru saja diambil orang lain.');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. Simpan/Update Data Pelanggan
|
// 4. Simpan Data Pelanggan
|
||||||
$pelanggan = \App\Models\Pelanggan::firstOrCreate(
|
$pelanggan = \App\Models\Pelanggan::create([
|
||||||
['no_wa' => $request->no_wa],
|
'nama' => $request->nama,
|
||||||
['nama' => $request->nama]
|
'no_wa' => $request->no_wa
|
||||||
);
|
]);
|
||||||
|
|
||||||
// 5. Upload Bukti Bayar
|
// 5. Upload Bukti Bayar
|
||||||
$pathBukti = null;
|
$pathBukti = null;
|
||||||
if ($request->hasFile('bukti_bayar')) {
|
if ($request->hasFile('bukti_bayar')) {
|
||||||
$file = $request->file('bukti_bayar');
|
$file = $request->file('bukti_bayar');
|
||||||
$namaFile = 'bukti_' . time() . $file->getClientOriginalExtension();
|
$namaFile = 'bukti_' . time() . '.' . $file->getClientOriginalExtension();
|
||||||
$file->move(public_path('img/payment'), $namaFile);
|
$pathBukti = $file->storeAs('img/payment/foto', $namaFile, 'public');
|
||||||
$pathBukti = 'img/payment/foto' . $namaFile;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. Simpan Booking Utama
|
// 6. Simpan Booking Utama
|
||||||
|
|
@ -286,19 +288,19 @@ public function store(Request $request)
|
||||||
$txtAddons .= "\n"; // Kasih jarak baris
|
$txtAddons .= "\n"; // Kasih jarak baris
|
||||||
}
|
}
|
||||||
// 8. Redirect ke WhatsApp
|
// 8. Redirect ke WhatsApp
|
||||||
$pesan = "Halo Admin Flo.do! Saya sudah melakukan pembayaran untuk invoice {$booking->no_invoice}:" .
|
$pesan = "Halo Admin Flo.do! Saya sudah melakukan pembayaran untuk invoice {$booking->no_invoice}:\n\n" .
|
||||||
"*Data Pemesan:*\n" .
|
"*Data Pemesan:*\n" .
|
||||||
"Nama: {$pelanggan->nama}\n" .
|
"Nama: {$request->nama}\n" .
|
||||||
"WA: {$pelanggan->no_wa}\n\n" .
|
"WA: {$request->no_wa}\n\n" .
|
||||||
"*Detail Booking:*\n" .
|
"*Detail Booking:*\n" .
|
||||||
"Nama Paket: {$request->nama}\n" .
|
"Nama Paket: {$paket->nama}\n" .
|
||||||
$txtAddons .
|
$txtAddons .
|
||||||
"Tanggal: " . \Carbon\Carbon::parse($request->tgl_booking)->translatedFormat('l, d F Y') . "\n" .
|
"Tanggal: " . \Carbon\Carbon::parse($request->tgl_booking)->translatedFormat('l, d F Y') . "\n" .
|
||||||
"Jam: {$request->jam_mulai} - {$jamSelesai->format('H:i')} WIB\n" .
|
"Jam: {$request->jam_mulai} - {$jamSelesai->format('H:i')} WIB\n" .
|
||||||
"Total: Rp " . number_format($grandTotal, 0, ',', '.') . "\n" .
|
"Total: Rp " . number_format($grandTotal, 0, ',', '.') . "\n\n" .
|
||||||
"Mohon segera diproses, ya! Terima kasih.";
|
"Mohon segera diproses, ya! Terima kasih.";
|
||||||
|
|
||||||
$urlWA = "https://wa.me/6289673668516?text=" . urlencode($pesan);
|
$urlWA = "https://wa.me/6282337687878?text=" . urlencode($pesan);
|
||||||
session()->forget('payment_deadline');
|
session()->forget('payment_deadline');
|
||||||
|
|
||||||
return redirect()->route('booking.foto')->with([
|
return redirect()->route('booking.foto')->with([
|
||||||
|
|
|
||||||
|
|
@ -114,9 +114,7 @@ public function store(Request $request)
|
||||||
$namaFile = null;
|
$namaFile = null;
|
||||||
if ($request->hasFile('bukti_bayar')) {
|
if ($request->hasFile('bukti_bayar')) {
|
||||||
$file = $request->file('bukti_bayar');
|
$file = $request->file('bukti_bayar');
|
||||||
// Membuat nama file unik berdasarkan waktu agar tidak tertimpa
|
$namaFile = 'bukti_' . time() . '.' . $file->getClientOriginalExtension();
|
||||||
$namaFile = 'bukti_' . time() . $file->getClientOriginalExtension();
|
|
||||||
// Pindahkan ke folder public/img/payment
|
|
||||||
$pathBukti = $file->storeAs('img/payment/buket', $namaFile, 'public');
|
$pathBukti = $file->storeAs('img/payment/buket', $namaFile, 'public');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -124,12 +122,12 @@ public function store(Request $request)
|
||||||
'id_pelanggan' => $pelanggan->id_pelanggan,
|
'id_pelanggan' => $pelanggan->id_pelanggan,
|
||||||
'id_buket' => $request->id_buket,
|
'id_buket' => $request->id_buket,
|
||||||
'tgl_ambil' => $request->tgl_ambil . ' ' . $request->waktu_ambil,
|
'tgl_ambil' => $request->tgl_ambil . ' ' . $request->waktu_ambil,
|
||||||
'request' => $request->request_khusus, // Ubah dari request_khusus ke request
|
'request' => $request->request_khusus,
|
||||||
'ucapan' => $request->ucapan,
|
'ucapan' => $request->ucapan,
|
||||||
'bukti_bayar' => 'img/payment/buket' . $namaFile,
|
'bukti_bayar' => $pathBukti,
|
||||||
'status_transaksi' => 'menunggu_verifikasi', // Ubah dari status ke status_transaksi
|
'status_transaksi' => 'menunggu_verifikasi',
|
||||||
'total_bayar' => $buket->harga, // Tambahkan ini karena total_bayar wajib di fillable
|
'total_bayar' => $buket->harga,
|
||||||
'no_invoice' => 'INV-BUKET-' . strtoupper(\Illuminate\Support\Str::random(6)), // Tambahkan invoice sederhana
|
'no_invoice' => 'INV-BUKET-' . strtoupper(\Illuminate\Support\Str::random(6)),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
@ -144,7 +142,7 @@ public function store(Request $request)
|
||||||
"Total: Rp " . number_format($transaksi->buket->harga, 0, ',', '.') . "\n\n" .
|
"Total: Rp " . number_format($transaksi->buket->harga, 0, ',', '.') . "\n\n" .
|
||||||
"Mohon segera diproses, ya! Terima kasih.";
|
"Mohon segera diproses, ya! Terima kasih.";
|
||||||
|
|
||||||
$urlWA = "https://wa.me/6289673668516?text=" . urlencode($pesan);
|
$urlWA = "https://wa.me/6282337687878?text=" . urlencode($pesan);
|
||||||
|
|
||||||
return redirect()->route('pesan.buket')->with([
|
return redirect()->route('pesan.buket')->with([
|
||||||
'success' => 'Pesanan Berhasil Dibuat!',
|
'success' => 'Pesanan Berhasil Dibuat!',
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 101 KiB |
|
Before Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 102 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 147 KiB |
|
Before Width: | Height: | Size: 93 KiB |
|
Before Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 74 KiB |
|
Before Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 147 KiB |
|
Before Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
|
@ -1,203 +0,0 @@
|
||||||
@extends('layouts.admin')
|
|
||||||
|
|
||||||
@section('title', 'Beranda')
|
|
||||||
|
|
||||||
@section('content')
|
|
||||||
<section class="row gy-2">
|
|
||||||
<div class="col-12">
|
|
||||||
<div class="row gx-2">
|
|
||||||
<div class="col-12 col-xl-6">
|
|
||||||
<div class="card mb-0">
|
|
||||||
<div class="card-header">
|
|
||||||
<h4>Bunga Diambil Hari Ini</h4>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-hover table-lg">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Waktu</th>
|
|
||||||
<th>Nama Pelanggan</th>
|
|
||||||
<th>Nama Buket</th>
|
|
||||||
<th>Aksi</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>Si Ganteng</td>
|
|
||||||
<td>Komentar dia...</td>
|
|
||||||
<td>cb</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<a href="#" class="btn icon btn-primary btn-action"
|
|
||||||
data-bs-toggle="modal" data-bs-target="#buketToday">
|
|
||||||
<i class="bi bi-eye"></i>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-12 col-xl-6">
|
|
||||||
<div class="card mb-0">
|
|
||||||
<div class="card-header">
|
|
||||||
<h4>Jadwal Foto Hari Ini</h4>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-hover table-lg">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Waktu</th>
|
|
||||||
<th>Nama Pelanggan</th>
|
|
||||||
<th>Nama Paket</th>
|
|
||||||
<th>Aksi</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>Si Keren</td>
|
|
||||||
<td>Komentar dia...</td>
|
|
||||||
<td>cb</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<a href="#" class="btn icon btn-primary btn-action"
|
|
||||||
data-bs-toggle="modal" data-bs-target="#fotoToday">
|
|
||||||
<i class="bi bi-eye"></i>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-12 col-xl-12">
|
|
||||||
<div class="card mb-0">
|
|
||||||
<div class="card-header">
|
|
||||||
<h4>Pesanan Pending</h4>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
|
|
||||||
<div class="nav nav-pills nav-fill mb-4" id="v-pills-tab" role="tablist" aria-orientation="horizontal">
|
|
||||||
<a class="nav-link active" id="v-pills-home-tab" data-bs-toggle="pill" href="#v-pills-home"
|
|
||||||
role="tab" aria-controls="v-pills-home" aria-selected="true">
|
|
||||||
Buket
|
|
||||||
</a>
|
|
||||||
<a class="nav-link" id="v-pills-profile-tab" data-bs-toggle="pill" href="#v-pills-profile"
|
|
||||||
role="tab" aria-controls="v-pills-profile" aria-selected="false">
|
|
||||||
Foto
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="tab-content" id="v-pills-tabContent">
|
|
||||||
|
|
||||||
<div class="tab-pane fade show active" id="v-pills-home" role="tabpanel"
|
|
||||||
aria-labelledby="v-pills-home-tab">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-hover table-lg">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>No.</th>
|
|
||||||
<th>Nama Pelanggan</th>
|
|
||||||
<th>Nama Buket</th>
|
|
||||||
<th>Tanggal Ambil</th>
|
|
||||||
<th>Total</th>
|
|
||||||
<th>Status</th>
|
|
||||||
<th>Aksi</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">1</p>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">Congratulations</p>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">Congratulations</p>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">Congratulations</p>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">Congratulations</p>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<span class="badge bg-success-subtle rounded-pill px-3 py-2">Selesai</span>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<a href="#" class="btn icon btn-primary btn-action"
|
|
||||||
data-bs-toggle="modal" data-bs-target="#riwayatBuket">
|
|
||||||
<i class="bi bi-eye"></i>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="tab-pane fade" id="v-pills-profile" role="tabpanel"
|
|
||||||
aria-labelledby="v-pills-profile-tab">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-hover table-lg">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>No.</th>
|
|
||||||
<th>Nama Pelanggan</th>
|
|
||||||
<th>Nama Paket</th>
|
|
||||||
<th>Tanggal Booking</th>
|
|
||||||
<th>Total</th>
|
|
||||||
<th>Status</th>
|
|
||||||
<th>Aksi</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">1</p>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">Congratulations</p>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">Congratulations</p>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">Congratulations</p>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">Congratulations</p>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<span class="badge bg-success-subtle rounded-pill px-3 py-2">Selesai</span>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<a href="#" class="btn icon btn-primary btn-action"
|
|
||||||
data-bs-toggle="modal" data-bs-target="#riwayatFoto">
|
|
||||||
<i class="bi bi-eye"></i>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
@include('admin.beranda.partials.modal-buket')
|
|
||||||
@include('admin.beranda.partials.modal-foto')
|
|
||||||
@include('admin.beranda.partials.modal-riwayat')
|
|
||||||
@endsection
|
|
||||||
|
|
@ -3,6 +3,21 @@
|
||||||
@section('title', 'Beranda')
|
@section('title', 'Beranda')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
|
{{-- ALERT SUKSES --}}
|
||||||
|
@if (session('success'))
|
||||||
|
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
||||||
|
{{ session('success') }}
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
{{-- ALERT ERROR UMUM (Jika ada error selain validasi modal) --}}
|
||||||
|
@if (session('error'))
|
||||||
|
<div class="alert alert-danger alert-dismissible fade show" role="alert">
|
||||||
|
{{ session('error') }}
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
<section class="row gy-3">
|
<section class="row gy-3">
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
<div class="row gx-3">
|
<div class="row gx-3">
|
||||||
|
|
@ -101,9 +116,9 @@ class="bi {{ $stat['selesai_grow'] >= 0 ? 'bi-arrow-up' : 'bi-arrow-down' }}"></
|
||||||
<div class="card-body px-3 py-4">
|
<div class="card-body px-3 py-4">
|
||||||
|
|
||||||
<div class="stat-header">
|
<div class="stat-header">
|
||||||
<h6 class="stat-label">Pesanan Dibatalkan</h6>
|
<h6 class="stat-label">Pesanan Ditolak</h6>
|
||||||
<i class="bi bi-info-circle menu-dots" data-bs-toggle="tooltip" data-bs-placement="top"
|
<i class="bi bi-info-circle menu-dots" data-bs-toggle="tooltip" data-bs-placement="top"
|
||||||
title="Total pesanan buket dan foto yang dibatalkan dalam bulan ini"></i>
|
title="Total pesanan buket dan foto yang ditolak dalam bulan ini"></i>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="stat-body">
|
<div class="stat-body">
|
||||||
|
|
@ -148,20 +163,20 @@ class="bi {{ $stat['batal_grow'] >= 0 ? 'bi-arrow-up' : 'bi-arrow-down' }}"></i>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@forelse ($buketToday as $rb)
|
@forelse ($buketToday as $p)
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ \Carbon\Carbon::parse($rb->tgl_ambil)->format('H:i') }} WIB</td>
|
<td>{{ \Carbon\Carbon::parse($p->tgl_ambil)->format('H:i') }} WIB</td>
|
||||||
<td>{{ $rb->pelanggan->nama }}</td>
|
<td>{{ $p->pelanggan->nama }}</td>
|
||||||
<td>{{ $rb->buket->nama }}</td>
|
<td>{{ $p->buket->nama }}</td>
|
||||||
<td class="col-auto">
|
<td class="col-auto">
|
||||||
<a href="#" class="btn icon btn-primary btn-action"
|
<a href="#" class="btn icon btn-primary btn-action"
|
||||||
data-bs-toggle="modal"
|
data-bs-toggle="modal"
|
||||||
data-bs-target="#riwayatBuket{{ $rb->id_transaksi }}">
|
data-bs-target="#buket{{ $p->id_transaksi }}">
|
||||||
<i class="bi bi-eye"></i>
|
<i class="bi bi-eye"></i>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@include('admin.pesanan.partials.modal-riwayat-buket')
|
@include('admin.pesanan.partials.modal-buket')
|
||||||
@empty
|
@empty
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="4" class="text-center text-muted">Tidak ada buket diambil
|
<td colspan="4" class="text-center text-muted">Tidak ada buket diambil
|
||||||
|
|
@ -192,21 +207,21 @@ class="bi {{ $stat['batal_grow'] >= 0 ? 'bi-arrow-up' : 'bi-arrow-down' }}"></i>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@forelse ($fotoToday as $rf)
|
@forelse ($fotoToday as $p)
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ \Carbon\Carbon::parse($rf->jam_mulai)->format('H:i') }} -
|
<td>{{ \Carbon\Carbon::parse($p->jam_mulai)->format('H:i') }} -
|
||||||
{{ \Carbon\Carbon::parse($rf->jam_selesai)->format('H:i') }}</td>
|
{{ \Carbon\Carbon::parse($p->jam_selesai)->format('H:i') }}</td>
|
||||||
<td>{{ $rf->pelanggan->nama }}</td>
|
<td>{{ $p->pelanggan->nama }}</td>
|
||||||
<td>{{ $rf->paketFoto->nama }}</td>
|
<td>{{ $p->paketFoto->nama }}</td>
|
||||||
<td class="col-auto">
|
<td class="col-auto">
|
||||||
<a href="#" class="btn icon btn-primary btn-action"
|
<a href="#" class="btn icon btn-primary btn-action"
|
||||||
data-bs-toggle="modal"
|
data-bs-toggle="modal"
|
||||||
data-bs-target="#riwayatFoto{{ $rf->id_booking }}">
|
data-bs-target="#foto{{ $p->id_booking }}">
|
||||||
<i class="bi bi-eye"></i>
|
<i class="bi bi-eye"></i>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@include('admin.pesanan.partials.modal-riwayat-foto')
|
@include('admin.pesanan.partials.modal-foto')
|
||||||
@empty
|
@empty
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="4" class="text-center text-muted">Tidak ada jadwal foto
|
<td colspan="4" class="text-center text-muted">Tidak ada jadwal foto
|
||||||
|
|
@ -251,36 +266,42 @@ class="bi {{ $stat['batal_grow'] >= 0 ? 'bi-arrow-up' : 'bi-arrow-down' }}"></i>
|
||||||
<th>Nama Pelanggan</th>
|
<th>Nama Pelanggan</th>
|
||||||
<th>Nama Buket</th>
|
<th>Nama Buket</th>
|
||||||
<th>Tanggal Ambil</th>
|
<th>Tanggal Ambil</th>
|
||||||
|
<th>Jam Ambil</th>
|
||||||
<th>Total</th>
|
<th>Total</th>
|
||||||
<th>Status</th>
|
<th>Status</th>
|
||||||
<th>Aksi</th>
|
<th>Aksi</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@forelse ($riwayatBuket as $rb)
|
@forelse ($pesananBuket as $p)
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $rb->no_invoice }}</td>
|
<td>{{ $p->no_invoice }}</td>
|
||||||
<td>{{ $rb->pelanggan->nama }}</td>
|
<td>{{ $p->pelanggan->nama }}</td>
|
||||||
<td>{{ $rb->buket->nama }}</td>
|
<td>{{ $p->buket->nama }}</td>
|
||||||
<td>{{ \Carbon\Carbon::parse($rb->tgl_ambil)->translatedFormat('d M Y') }}</td>
|
|
||||||
<td>Rp {{ number_format($rb->total_bayar, 0, ',', '.') }}</td>
|
|
||||||
<td>
|
<td>
|
||||||
<span class="badge {{ $rb->status_label->class }}">
|
{{ \Carbon\Carbon::parse($p->tgl_ambil)->locale('id')->translatedFormat('d F Y') }}
|
||||||
{{ $rb->status_label->text }}
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ \Carbon\Carbon::parse($p->tgl_ambil)->format('H:i') }} WIB
|
||||||
|
</td>
|
||||||
|
<td>Rp {{ number_format($p->total_bayar, 0, ',', '.') }}</td>
|
||||||
|
<td>
|
||||||
|
<span class="badge {{ $p->status_label->class }}">
|
||||||
|
{{ $p->status_label->text }}
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<td class="col-auto">
|
<td class="text-center col-auto"><a href="#"
|
||||||
<a href="#" class="btn icon btn-primary btn-action"
|
class="btn icon btn-primary btn-action" data-bs-toggle="modal"
|
||||||
data-bs-toggle="modal"
|
data-bs-target="#buket{{ $p->id_transaksi }}">
|
||||||
data-bs-target="#riwayatBuket{{ $rb->id_transaksi }}">
|
|
||||||
<i class="bi bi-eye"></i>
|
<i class="bi bi-eye"></i>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@include('admin.pesanan.partials.modal-riwayat-buket')
|
@include('admin.pesanan.partials.modal-buket')
|
||||||
@empty
|
@empty
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="7" class="text-center text-muted">Tidak ada riwayat buket.
|
<td colspan="8" class="text-center text-muted">Tidak ada pesanan buket yang
|
||||||
|
pending.
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@endforelse
|
@endforelse
|
||||||
|
|
@ -297,38 +318,43 @@ class="bi {{ $stat['batal_grow'] >= 0 ? 'bi-arrow-up' : 'bi-arrow-down' }}"></i>
|
||||||
<th>Nama Pelanggan</th>
|
<th>Nama Pelanggan</th>
|
||||||
<th>Nama Paket</th>
|
<th>Nama Paket</th>
|
||||||
<th>Tanggal Booking</th>
|
<th>Tanggal Booking</th>
|
||||||
|
<th>Waktu</th>
|
||||||
<th>Total</th>
|
<th>Total</th>
|
||||||
<th>Status</th>
|
<th>Status</th>
|
||||||
<th>Aksi</th>
|
<th>Aksi</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@forelse ($riwayatFoto as $rf)
|
@forelse ($pesananFoto as $p)
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ $rf->no_invoice }}</td>
|
<td>{{ $p->no_invoice }}</td>
|
||||||
<td>{{ $rf->pelanggan->nama }}</td>
|
<td>{{ $p->pelanggan->nama }}</td>
|
||||||
<td>{{ $rf->paketFoto->nama }}</td>
|
<td>{{ $p->paketFoto->nama }}</td>
|
||||||
<td>{{ \Carbon\Carbon::parse($rf->tgl_booking)->translatedFormat('d M Y') }}
|
|
||||||
</td>
|
|
||||||
<td>Rp {{ number_format($rf->total_bayar, 0, ',', '.') }}</td>
|
|
||||||
<td>
|
<td>
|
||||||
<span class="badge {{ $rf->status_label->class }}">
|
{{ \Carbon\Carbon::parse($p->tgl_booking)->locale('id')->translatedFormat('d F Y') }}
|
||||||
{{ $rf->status_label->text }}
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ \Carbon\Carbon::parse($p->jam_mulai)->format('H:i') }} -
|
||||||
|
{{ \Carbon\Carbon::parse($p->jam_selesai)->format('H:i') }}
|
||||||
|
</td>
|
||||||
|
<td>Rp {{ number_format($p->total_bayar, 0, ',', '.') }}</td>
|
||||||
|
<td>
|
||||||
|
<span class="badge {{ $p->status_label->class }}">
|
||||||
|
{{ $p->status_label->text }}
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
<td class="col-auto">
|
<td class="text-center col-auto"><a href="#"
|
||||||
<a href="#" class="btn icon btn-primary btn-action"
|
class="btn icon btn-primary btn-action" data-bs-toggle="modal"
|
||||||
data-bs-toggle="modal"
|
data-bs-target="#foto{{ $p->id_booking }}">
|
||||||
data-bs-target="#riwayatFoto{{ $rf->id_booking }}">
|
|
||||||
<i class="bi bi-eye"></i>
|
<i class="bi bi-eye"></i>
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@include('admin.pesanan.partials.modal-riwayat-foto')
|
@include('admin.pesanan.partials.modal-foto')
|
||||||
@empty
|
@empty
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="7" class="text-center text-muted">Tidak ada riwayat pesanan
|
<td colspan="8" class="text-center text-muted">Tidak ada pesanan
|
||||||
foto.</td>
|
foto yang pending.</td>
|
||||||
</tr>
|
</tr>
|
||||||
@endforelse
|
@endforelse
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
||||||
|
|
@ -1,261 +0,0 @@
|
||||||
<div class="modal fade text-left" id="buketToday" tabindex="-1" role="dialog" aria-labelledby="myModalLabel1"
|
|
||||||
aria-hidden="true">
|
|
||||||
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
|
|
||||||
<div class="modal-content">
|
|
||||||
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="myModalLabel1">Detail Pesanan Buket</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-body">
|
|
||||||
<div class="row gx-3">
|
|
||||||
|
|
||||||
<div class="col-12 col-md-6">
|
|
||||||
|
|
||||||
<h6 class="modal-section-title">Rincian Pesanan</h6>
|
|
||||||
<div class="detail-order">
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Nama Buket</span>
|
|
||||||
<span class="detail-value">Buket Lily Premium</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Request Khusus</span>
|
|
||||||
<span class="detail-value">Full pink</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Ucapan</span>
|
|
||||||
<span class="detail-value">Selamat ulang tahun</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h6 class="modal-section-title">Informasi Pemesan</h6>
|
|
||||||
<div class="detail-customer">
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Nama Lengkap</span>
|
|
||||||
<span class="detail-value">Budi Susanto</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">WhatsApp</span>
|
|
||||||
<span class="detail-value">089673665678</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Tanggal Pengambilan</span>
|
|
||||||
<span class="detail-value">10 Nov 2025</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-12 col-md-6 mt-4 mt-md-0">
|
|
||||||
<h6 class="modal-section-title">Pembayaran</h6>
|
|
||||||
|
|
||||||
<div class="payment-box">
|
|
||||||
<div class="detail-row align-items-center">
|
|
||||||
<span class="detail-label">Status</span>
|
|
||||||
<span class="badge bg-success-subtle rounded-pill px-3 py-2">Terbayar</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row align-items-center">
|
|
||||||
<span class="detail-label">Total</span>
|
|
||||||
<span class="detail-value">Rp 150.000</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row align-items-start">
|
|
||||||
<span class="detail-label d-block ">Bukti Pembayaran</span>
|
|
||||||
<div class="proof-img-wrapper" onclick="showImage('{{ asset('img/invoice.jpg') }}')">
|
|
||||||
<img src="{{ asset('img/invoice.jpg') }}" class="proof-img">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer border-top-0 pt-2 px-2">
|
|
||||||
<div class="d-flex w-100 gap-2">
|
|
||||||
<button type="button" class="btn btn-danger tolak flex-fill" data-bs-toggle="modal"
|
|
||||||
data-bs-target="#modalTolak">Tolak
|
|
||||||
Pesanan</button>
|
|
||||||
<button type="button" class="btn btn-success terima flex-fill ms-2" data-bs-toggle="modal"
|
|
||||||
data-bs-target="#modalTerima">Terima Pesanan</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{-- MODAL GAMBAR --}}
|
|
||||||
<div class="modal fade" id="modalImagePreview" tabindex="-1" aria-hidden="true">
|
|
||||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
|
||||||
<div class="modal-content bg-transparent border-0 shadow-none">
|
|
||||||
|
|
||||||
<div class="modal-body p-0 text-center">
|
|
||||||
<img id="img-preview-target" src="" class="img-fluid rounded shadow-lg"
|
|
||||||
style="max-height: 85vh;">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
function showImage(src) {
|
|
||||||
var modalImg = document.getElementById('img-preview-target');
|
|
||||||
modalImg.src = src;
|
|
||||||
var myModal = new bootstrap.Modal(document.getElementById('modalImagePreview'));
|
|
||||||
myModal.show();
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
{{-- MODAL TOLAK --}}
|
|
||||||
<div class="modal fade" id="modalTolak" tabindex="-1" aria-hidden="true">
|
|
||||||
<div class="modal-dialog modal-dialog-centered">
|
|
||||||
<div class="modal-content modal-reject">
|
|
||||||
|
|
||||||
<div class="modal-header pb-0">
|
|
||||||
<h5 class="modal-title">Konfirmasi Penolakan</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-body pt-0">
|
|
||||||
<div class="alert d-flex align-items-center border-0 mb-4 mt-2 p-3 rounded-3"
|
|
||||||
style="background-color: #f8d7da; color: #842029;" role="alert">
|
|
||||||
<i class="bi bi-exclamation-circle-fill me-1" style="line-height: 1;"></i>
|
|
||||||
|
|
||||||
<div class="lh-sm" style="font-size: 0.75rem;">
|
|
||||||
Status pesanan akan otomatis berubah menjadi <strong>"Ditolak"</strong>.
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<label class="form-label fw-bold small text-muted text-uppercase mb-2"> Pesan yang akan dikirim
|
|
||||||
</label>
|
|
||||||
<div class="mb-3">
|
|
||||||
<textarea class="form-control custom-textarea bg-light" id="pesanTolak" rows="5">Halo Kak Budi Susanto,
|
|
||||||
Mohon maaf, pesanan Foto (Single) Anda pada tanggal 10 Juni 2025 kami *TOLAK* dikarenakan:
|
|
||||||
|
|
||||||
[TULIS ALASAN DISINI]
|
|
||||||
|
|
||||||
Silakan hubungi admin untuk info pengembalian dana. Terima kasih.</textarea>
|
|
||||||
|
|
||||||
<div class="text-start mt-1">
|
|
||||||
<small class="text-muted" style="font-size: 0.75rem;">
|
|
||||||
*Pesan dapat diedit sebelum dikirim
|
|
||||||
</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-footer border-top-0 pt-0">
|
|
||||||
<div class="d-flex w-100 gap-2">
|
|
||||||
|
|
||||||
<button type="button" class="btn btn-light batal rounded-pill flex-fill py-2"
|
|
||||||
data-bs-toggle="modal" data-bs-target="#default">
|
|
||||||
Batal
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<button type="button" class="btn btn-danger kirim-wa rounded-pill flex-fill py-2"
|
|
||||||
onclick="kirimWa('tolak')">
|
|
||||||
<i class="bi bi-whatsapp me-1"></i> Kirim Penolakan
|
|
||||||
</button>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{-- MODAL TERIMA --}}
|
|
||||||
<div class="modal fade" id="modalTerima" tabindex="-1" aria-hidden="true">
|
|
||||||
<div class="modal-dialog modal-dialog-centered">
|
|
||||||
<div class="modal-content modal-accept">
|
|
||||||
|
|
||||||
<div class="modal-header pb-0">
|
|
||||||
<h5 class="modal-title">Konfirmasi Penerimaan</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-body pt-0">
|
|
||||||
|
|
||||||
<div class="alert d-flex align-items-center border-0 mb-4 mt-2 p-3 rounded-3"
|
|
||||||
style="background-color: #d1e7dd; color: #0f5132;" role="alert">
|
|
||||||
<i class="bi bi-info-circle-fill me-1" style="line-height: 1;"></i>
|
|
||||||
|
|
||||||
<div class="lh-sm" style="font-size: 0.75rem;">
|
|
||||||
Status pesanan akan otomatis berubah menjadi <strong>"Diproses"</strong>.
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mb-2">
|
|
||||||
<label class="form-label fw-bold small text-muted text-uppercase mb-2"> Pesan yang akan dikirim
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<div class="position-relative">
|
|
||||||
<textarea class="form-control bg-light border-0 shadow-sm p-3 text-secondary" id="pesanTerima" rows="4"
|
|
||||||
style="resize: none; font-size: 0.85rem; line-height: 1.2; border-radius: 0.5rem;">Halo Kak Budi Susanto,
|
|
||||||
|
|
||||||
Selamat! Pesanan Foto (Single) Anda untuk tanggal 10 Juni 2025 telah kami *TERIMA*.
|
|
||||||
|
|
||||||
Silakan datang tepat waktu ya. Terima kasih!</textarea>
|
|
||||||
|
|
||||||
<div class="position-absolute top-0 start-0 bottom-0 bg-success"
|
|
||||||
style="width: 4px; border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem;">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="text-start mt-1">
|
|
||||||
<small class="text-muted" style="font-size: 0.75rem;">
|
|
||||||
*Pesan dapat diedit sebelum dikirim
|
|
||||||
</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-footer border-top-0 pt-0">
|
|
||||||
<div class="d-flex w-100 gap-2">
|
|
||||||
|
|
||||||
<button type="button" class="btn btn-light batal rounded-pill flex-fill py-2"
|
|
||||||
data-bs-toggle="modal" data-bs-target="#default">
|
|
||||||
Batal
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<button type="button" class="btn btn-success kirim-wa rounded-pill flex-fill py-2"
|
|
||||||
onclick="kirimWa('terima')">
|
|
||||||
<i class="bi bi-whatsapp me-1"></i> Kirim & Terima
|
|
||||||
</button>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
function kirimWa(jenis) {
|
|
||||||
// 1. Nomor HP Dummy (Nanti diganti variabel database)
|
|
||||||
var nomorHp = "+6281334394400";
|
|
||||||
|
|
||||||
// 2. Ambil isi pesan dari textarea
|
|
||||||
var pesan = "";
|
|
||||||
if (jenis === 'tolak') {
|
|
||||||
pesan = document.getElementById('pesanTolak').value;
|
|
||||||
} else {
|
|
||||||
pesan = document.getElementById('pesanTerima').value;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 3. Encode pesan biar aman di URL (spasi jadi %20, dst)
|
|
||||||
var url = "https://wa.me/" + nomorHp + "?text=" + encodeURIComponent(pesan);
|
|
||||||
|
|
||||||
// 4. Buka WhatsApp di tab baru
|
|
||||||
window.open(url, '_blank');
|
|
||||||
|
|
||||||
// 5. (Opsional) Tutup Modal setelah kirim
|
|
||||||
// var modalEl = document.getElementById(jenis === 'tolak' ? 'modalTolak' : 'modalTerima');
|
|
||||||
// var modal = bootstrap.Modal.getInstance(modalEl);
|
|
||||||
// modal.hide();
|
|
||||||
|
|
||||||
// Disini nanti bisa ditambah ajax buat update status di database
|
|
||||||
alert("Simulasi: Status pesanan berhasil diupdate jadi " + (jenis === 'tolak' ? 'DITOLAK' : 'DITERIMA'));
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,264 +0,0 @@
|
||||||
<div class="modal fade text-left" id="fotoToday" tabindex="-1" role="dialog" aria-labelledby="myModalLabel1"
|
|
||||||
aria-hidden="true">
|
|
||||||
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
|
|
||||||
<div class="modal-content">
|
|
||||||
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="myModalLabel1">Detail Pesanan Foto</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-body">
|
|
||||||
<div class="row gx-3">
|
|
||||||
|
|
||||||
<div class="col-12 col-md-6">
|
|
||||||
|
|
||||||
<h6 class="modal-section-title">Rincian Pesanan</h6>
|
|
||||||
<div class="detail-order">
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Tanggal Booking</span>
|
|
||||||
<span class="detail-value">Kamis 10 Juni 2025</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Waktu Booking</span>
|
|
||||||
<span class="detail-value">10.00</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Paket Foto</span>
|
|
||||||
<span class="detail-value">Single</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Additional</span>
|
|
||||||
<div class="detail-value">
|
|
||||||
<span class="item">Kostum boneka</span><br>
|
|
||||||
<small class="amount">x1</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h6 class="modal-section-title">Informasi Pemesan</h6>
|
|
||||||
<div class="detail-customer">
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Nama Lengkap</span>
|
|
||||||
<span class="detail-value">Budi Susanto</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">WhatsApp</span>
|
|
||||||
<span class="detail-value">089673665678</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-12 col-md-6 mt-4 mt-md-0">
|
|
||||||
<h6 class="modal-section-title">Pembayaran</h6>
|
|
||||||
|
|
||||||
<div class="payment-box">
|
|
||||||
<div class="detail-row align-items-center">
|
|
||||||
<span class="detail-label">Status</span>
|
|
||||||
<span class="badge bg-success-subtle rounded-pill px-3 py-2">Terbayar</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row align-items-center">
|
|
||||||
<span class="detail-label">Total</span>
|
|
||||||
<span class="detail-value">Rp 150.000</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row align-items-start">
|
|
||||||
<span class="detail-label d-block ">Bukti Pembayaran</span>
|
|
||||||
<div class="proof-img-wrapper" onclick="showImage('{{ asset('img/invoice.jpg') }}')">
|
|
||||||
<img src="{{ asset('img/invoice.jpg') }}" class="proof-img">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer border-top-0 pt-2 px-2">
|
|
||||||
<div class="d-flex w-100 gap-2">
|
|
||||||
<button type="button" class="btn btn-danger tolak flex-fill" data-bs-toggle="modal"
|
|
||||||
data-bs-target="#modalTolak">Tolak
|
|
||||||
Pesanan</button>
|
|
||||||
<button type="button" class="btn btn-success terima flex-fill ms-2" data-bs-toggle="modal"
|
|
||||||
data-bs-target="#modalTerima">Terima Pesanan</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{-- MODAL GAMBAR --}}
|
|
||||||
<div class="modal fade" id="modalImagePreview" tabindex="-1" aria-hidden="true">
|
|
||||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
|
||||||
<div class="modal-content bg-transparent border-0 shadow-none">
|
|
||||||
|
|
||||||
<div class="modal-body p-0 text-center">
|
|
||||||
<img id="img-preview-target" src="" class="img-fluid rounded shadow-lg"
|
|
||||||
style="max-height: 85vh;">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
function showImage(src) {
|
|
||||||
var modalImg = document.getElementById('img-preview-target');
|
|
||||||
modalImg.src = src;
|
|
||||||
var myModal = new bootstrap.Modal(document.getElementById('modalImagePreview'));
|
|
||||||
myModal.show();
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
{{-- MODAL TOLAK --}}
|
|
||||||
<div class="modal fade" id="modalTolak" tabindex="-1" aria-hidden="true">
|
|
||||||
<div class="modal-dialog modal-dialog-centered">
|
|
||||||
<div class="modal-content modal-reject">
|
|
||||||
|
|
||||||
<div class="modal-header pb-0">
|
|
||||||
<h5 class="modal-title">Konfirmasi Penolakan</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-body pt-0">
|
|
||||||
<div class="alert d-flex align-items-center border-0 mb-4 mt-2 p-3 rounded-3"
|
|
||||||
style="background-color: #f8d7da; color: #842029;" role="alert">
|
|
||||||
<i class="bi bi-exclamation-circle-fill me-1" style="line-height: 1;"></i>
|
|
||||||
|
|
||||||
<div class="lh-sm" style="font-size: 0.75rem;">
|
|
||||||
Status pesanan akan otomatis berubah menjadi <strong>"Ditolak"</strong>.
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<label class="form-label fw-bold small text-muted text-uppercase mb-2"> Pesan yang akan dikirim
|
|
||||||
</label>
|
|
||||||
<div class="mb-3">
|
|
||||||
<textarea class="form-control custom-textarea bg-light" id="pesanTolak" rows="5">Halo Kak Budi Susanto,
|
|
||||||
Mohon maaf, pesanan buket Anda pada tanggal 10 Nov 2025 kami *TOLAK* dikarenakan:
|
|
||||||
|
|
||||||
[TULIS ALASAN DISINI]
|
|
||||||
|
|
||||||
Silakan hubungi admin untuk info pengembalian dana. Terima kasih.</textarea>
|
|
||||||
|
|
||||||
<div class="text-start mt-1">
|
|
||||||
<small class="text-muted" style="font-size: 0.75rem;">
|
|
||||||
*Pesan dapat diedit sebelum dikirim
|
|
||||||
</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-footer border-top-0 pt-0">
|
|
||||||
<div class="d-flex w-100 gap-2">
|
|
||||||
|
|
||||||
<button type="button" class="btn btn-light batal rounded-pill flex-fill py-2"
|
|
||||||
data-bs-toggle="modal" data-bs-target="#default">
|
|
||||||
Batal
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<button type="button" class="btn btn-danger kirim-wa rounded-pill flex-fill py-2"
|
|
||||||
onclick="kirimWa('tolak')">
|
|
||||||
<i class="bi bi-whatsapp me-1"></i> Kirim Penolakan
|
|
||||||
</button>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{-- MODAL TERIMA --}}
|
|
||||||
<div class="modal fade" id="modalTerima" tabindex="-1" aria-hidden="true">
|
|
||||||
<div class="modal-dialog modal-dialog-centered">
|
|
||||||
<div class="modal-content modal-accept">
|
|
||||||
|
|
||||||
<div class="modal-header pb-0">
|
|
||||||
<h5 class="modal-title">Konfirmasi Penerimaan</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-body pt-0">
|
|
||||||
|
|
||||||
<div class="alert d-flex align-items-center border-0 mb-4 mt-2 p-3 rounded-3"
|
|
||||||
style="background-color: #d1e7dd; color: #0f5132;" role="alert">
|
|
||||||
<i class="bi bi-info-circle-fill me-1" style="line-height: 1;"></i>
|
|
||||||
|
|
||||||
<div class="lh-sm" style="font-size: 0.75rem;">
|
|
||||||
Status pesanan akan otomatis berubah menjadi <strong>"Diproses"</strong>.
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mb-2">
|
|
||||||
<label class="form-label fw-bold small text-muted text-uppercase mb-2"> Pesan yang akan dikirim
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<div class="position-relative">
|
|
||||||
<textarea class="form-control bg-light border-0 shadow-sm p-3 text-secondary" id="pesanTerima" rows="4"
|
|
||||||
style="resize: none; font-size: 0.85rem; line-height: 1.2; border-radius: 0.5rem;">Halo Kak Budi Susanto,
|
|
||||||
|
|
||||||
Selamat! Pesanan Buket Anda untuk tanggal 10 Nov 2025 telah kami *TERIMA*.
|
|
||||||
|
|
||||||
Silakan datang tepat waktu ya. Terima kasih!</textarea>
|
|
||||||
|
|
||||||
<div class="position-absolute top-0 start-0 bottom-0 bg-success"
|
|
||||||
style="width: 4px; border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem;">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="text-start mt-1">
|
|
||||||
<small class="text-muted" style="font-size: 0.75rem;">
|
|
||||||
*Pesan dapat diedit sebelum dikirim
|
|
||||||
</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-footer border-top-0 pt-0">
|
|
||||||
<div class="d-flex w-100 gap-2">
|
|
||||||
|
|
||||||
<button type="button" class="btn btn-light batal rounded-pill flex-fill py-2"
|
|
||||||
data-bs-toggle="modal" data-bs-target="#default">
|
|
||||||
Batal
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<button type="button" class="btn btn-success kirim-wa rounded-pill flex-fill py-2"
|
|
||||||
onclick="kirimWa('terima')">
|
|
||||||
<i class="bi bi-whatsapp me-1"></i> Kirim & Terima
|
|
||||||
</button>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script>
|
|
||||||
function kirimWa(jenis) {
|
|
||||||
// 1. Nomor HP Dummy (Nanti diganti variabel database)
|
|
||||||
var nomorHp = "+6281334394400";
|
|
||||||
|
|
||||||
// 2. Ambil isi pesan dari textarea
|
|
||||||
var pesan = "";
|
|
||||||
if (jenis === 'tolak') {
|
|
||||||
pesan = document.getElementById('pesanTolak').value;
|
|
||||||
} else {
|
|
||||||
pesan = document.getElementById('pesanTerima').value;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 3. Encode pesan biar aman di URL (spasi jadi %20, dst)
|
|
||||||
var url = "https://wa.me/" + nomorHp + "?text=" + encodeURIComponent(pesan);
|
|
||||||
|
|
||||||
// 4. Buka WhatsApp di tab baru
|
|
||||||
window.open(url, '_blank');
|
|
||||||
|
|
||||||
// 5. (Opsional) Tutup Modal setelah kirim
|
|
||||||
// var modalEl = document.getElementById(jenis === 'tolak' ? 'modalTolak' : 'modalTerima');
|
|
||||||
// var modal = bootstrap.Modal.getInstance(modalEl);
|
|
||||||
// modal.hide();
|
|
||||||
|
|
||||||
// Disini nanti bisa ditambah ajax buat update status di database
|
|
||||||
alert("Simulasi: Status pesanan berhasil diupdate jadi " + (jenis === 'tolak' ? 'DITOLAK' : 'DITERIMA'));
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,194 +0,0 @@
|
||||||
{{-- RIWAYAT BUKET --}}
|
|
||||||
<div class="modal fade text-left" id="riwayatBuket" tabindex="-1" role="dialog" aria-labelledby="myModalLabel1"
|
|
||||||
aria-hidden="true">
|
|
||||||
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
|
|
||||||
<div class="modal-content">
|
|
||||||
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="myModalLabel1">Detail Riwayat Pesanan Buket</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-body">
|
|
||||||
<div class="row gx-3">
|
|
||||||
|
|
||||||
<div class="col-12 col-md-6">
|
|
||||||
|
|
||||||
<h6 class="modal-section-title">Rincian Pesanan</h6>
|
|
||||||
<div class="detail-order">
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Nama Buket</span>
|
|
||||||
<span class="detail-value">Buket Lily Premium</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Request Khusus</span>
|
|
||||||
<span class="detail-value">Full pink</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Ucapan</span>
|
|
||||||
<span class="detail-value">Selamat ulang tahun</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h6 class="modal-section-title">Informasi Pemesan</h6>
|
|
||||||
<div class="detail-customer">
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Nama Lengkap</span>
|
|
||||||
<span class="detail-value">Budi Susanto</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">WhatsApp</span>
|
|
||||||
<span class="detail-value">089673665678</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Tanggal Pengambilan</span>
|
|
||||||
<span class="detail-value">10 Nov 2025</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-12 col-md-6 mt-4 mt-md-0">
|
|
||||||
<h6 class="modal-section-title">Pembayaran</h6>
|
|
||||||
|
|
||||||
<div class="payment-box">
|
|
||||||
<div class="detail-row align-items-center">
|
|
||||||
<span class="detail-label">Status</span>
|
|
||||||
<span class="badge bg-success-subtle rounded-pill px-3 py-2">Terbayar</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row align-items-center">
|
|
||||||
<span class="detail-label">Total</span>
|
|
||||||
<span class="detail-value">Rp 150.000</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row align-items-start">
|
|
||||||
<span class="detail-label d-block ">Bukti Pembayaran</span>
|
|
||||||
<div class="proof-img-wrapper" onclick="showImage('{{ asset('img/invoice.jpg') }}')">
|
|
||||||
<img src="{{ asset('img/invoice.jpg') }}" class="proof-img">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{-- RIWAYAT FOTO --}}
|
|
||||||
<div class="modal fade text-left" id="riwayatFoto" tabindex="-1" role="dialog" aria-labelledby="myModalLabel1"
|
|
||||||
aria-hidden="true">
|
|
||||||
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
|
|
||||||
<div class="modal-content">
|
|
||||||
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="myModalLabel1">Detail Riwayat Pesanan Foto</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-body">
|
|
||||||
<div class="row gx-3">
|
|
||||||
|
|
||||||
<div class="col-12 col-md-6 h-100">
|
|
||||||
|
|
||||||
<h6 class="modal-section-title">Rincian Pesanan</h6>
|
|
||||||
<div class="detail-order ">
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Tanggal Booking</span>
|
|
||||||
<span class="detail-value">Kamis 10 Juni 2025</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Waktu Booking</span>
|
|
||||||
<span class="detail-value">10.00</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Paket Foto</span>
|
|
||||||
<span class="detail-value">Single</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Additional</span>
|
|
||||||
<div class="detail-value">
|
|
||||||
<span class="item">Kostum boneka</span><br>
|
|
||||||
<small class="amount">x1</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h6 class="modal-section-title">Informasi Pemesan</h6>
|
|
||||||
<div class="detail-customer">
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">Nama Lengkap</span>
|
|
||||||
<span class="detail-value">Budi Susanto</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row">
|
|
||||||
<span class="detail-label">WhatsApp</span>
|
|
||||||
<span class="detail-value">089673665678</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-12 col-md-6 mt-4 mt-md-0 h-100 d-flex flex-column">
|
|
||||||
|
|
||||||
<h6 class="modal-section-title">Pembayaran</h6>
|
|
||||||
|
|
||||||
<div class="payment-box flex-grow-1 d-flex flex-column justify-content-between">
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<div class="detail-row align-items-center">
|
|
||||||
<span class="detail-label">Status</span>
|
|
||||||
<span class="badge bg-success-subtle rounded-pill px-3 py-2">Terbayar</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row align-items-center">
|
|
||||||
<span class="detail-label">Total</span>
|
|
||||||
<span class="detail-value">Rp 150.000</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-row align-items-start mt-3">
|
|
||||||
<span class="detail-label d-block">Bukti Pembayaran</span>
|
|
||||||
<div class="proof-img-wrapper" onclick="showImage('{{ asset('img/invoice.jpg') }}')">
|
|
||||||
<img src="{{ asset('img/invoice.jpg') }}" class="proof-img">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{-- MODAL GAMBAR --}}
|
|
||||||
<div class="modal fade" id="modalImagePreview" tabindex="-1" aria-hidden="true">
|
|
||||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
|
||||||
<div class="modal-content bg-transparent border-0 shadow-none">
|
|
||||||
|
|
||||||
<div class="modal-body p-0 text-center">
|
|
||||||
<img id="img-preview-target" src="" class="img-fluid rounded shadow-lg"
|
|
||||||
style="max-height: 85vh;">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
function showImage(src) {
|
|
||||||
var modalImg = document.getElementById('img-preview-target');
|
|
||||||
modalImg.src = src;
|
|
||||||
var myModal = new bootstrap.Modal(document.getElementById('modalImagePreview'));
|
|
||||||
myModal.show();
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,86 +0,0 @@
|
||||||
<div class="modal fade text-left" id="default" tabindex="-1" role="dialog" aria-labelledby="myModalLabel1"
|
|
||||||
aria-hidden="true">
|
|
||||||
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
|
|
||||||
<div class="modal-content">
|
|
||||||
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="myModalLabel1">Detail Pesanan Foto</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>s
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-body">
|
|
||||||
<div class="row">
|
|
||||||
|
|
||||||
<div class="col-12 col-md-7">
|
|
||||||
|
|
||||||
<h6 class="mb-3 fw-bold">Rincian Pesanan</h6>
|
|
||||||
<div class="d-flex justify-content-between mb-2">
|
|
||||||
<span class="text-muted">Tanggal Booking</span>
|
|
||||||
<span class="fw-semibold">Kamis 10 Juni 2025</span>
|
|
||||||
</div>
|
|
||||||
<div class="d-flex justify-content-between mb-2">
|
|
||||||
<span class="text-muted">Waktu Booking</span>
|
|
||||||
<span class="fw-semibold">10.00</span>
|
|
||||||
</div>
|
|
||||||
<div class="d-flex justify-content-between mb-2">
|
|
||||||
<span class="text-muted">Paket Foto</span>
|
|
||||||
<span class="fw-semibold">Single</span>
|
|
||||||
</div>
|
|
||||||
<div class="d-flex justify-content-between mb-4">
|
|
||||||
<span class="text-muted">Additional yang Dipilih</span>
|
|
||||||
<div class="text-end">
|
|
||||||
<span class="d-block fw-semibold">Kostum boneka</span>
|
|
||||||
<small class="text-muted">x1</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h6 class="mb-3 fw-bold">Informasi Pemesan</h6>
|
|
||||||
<div class="d-flex justify-content-between mb-2">
|
|
||||||
<span class="text-muted">Nama Lengkap</span>
|
|
||||||
<span class="fw-semibold">Budi Susanto</span>
|
|
||||||
</div>
|
|
||||||
<div class="d-flex justify-content-between mb-2">
|
|
||||||
<span class="text-muted">Nomor WhatsApp</span>
|
|
||||||
<span class="fw-semibold">089673665678</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-12 col-md-5 mt-4 mt-md-0">
|
|
||||||
<h6 class="mb-3 fw-bold">Pembayaran</h6>
|
|
||||||
|
|
||||||
<div class="p-3 bg-light rounded">
|
|
||||||
<div class="d-flex justify-content-between align-items-center mb-2">
|
|
||||||
<span class="text-muted">Status Pesanan</span>
|
|
||||||
<span
|
|
||||||
class="badge bg-success-subtle text-success px-3 py-2 rounded-pill">Terbayar</span>
|
|
||||||
</div>
|
|
||||||
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
||||||
<span class="text-muted">Total</span>
|
|
||||||
<span class="fw-bold fs-6">Rp 150.000</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mb-2">
|
|
||||||
<span class="text-muted d-block mb-2">Bukti Pembayaran</span>
|
|
||||||
<div class="text-center border rounded p-2 bg-white">
|
|
||||||
<img src="{{ asset('path/to/bukti-transfer.jpg') }}" alt="Bukti Transfer"
|
|
||||||
class="img-fluid rounded" style="max-height: 200px;">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-footer border-top-0 justify-content-end pt-0 pb-4 pe-4">
|
|
||||||
<button type="button" class="btn btn-danger px-4" data-bs-dismiss="modal">
|
|
||||||
Tolak Pesanan
|
|
||||||
</button>
|
|
||||||
<button type="button" class="btn btn-success ms-2 px-4">
|
|
||||||
Terima Pesanan
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
@ -1,317 +0,0 @@
|
||||||
@extends('layouts.admin')
|
|
||||||
|
|
||||||
@section('title', 'Beranda')
|
|
||||||
|
|
||||||
@section('content')
|
|
||||||
<section class="row gy-2">
|
|
||||||
<div class="col-12">
|
|
||||||
<div class="row gx-2">
|
|
||||||
<div class="col-6 col-lg-3 col-md-6">
|
|
||||||
<div class="card mb-0">
|
|
||||||
<div class="card-body px-3 py-4">
|
|
||||||
|
|
||||||
<div class="stat-header">
|
|
||||||
<h6 class="stat-label">Pendapatan Bulan Ini</h6>
|
|
||||||
<i class="bi bi-info-circle menu-dots" data-bs-toggle="tooltip" data-bs-placement="top"
|
|
||||||
title="Total pendapatan dari pesanan buket dan foto dalam bulan ini"></i>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="stat-body">
|
|
||||||
<div class="stat-icon">
|
|
||||||
<i class="bi bi-bank"></i>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h6 class="stat-count">Rp 1.000.000</h6>
|
|
||||||
<span class="stat-percent text-success fw-bold">
|
|
||||||
<i class="bi bi-arrow-up"></i> 34.7%
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<small class="stat-month">dari bulan lalu</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-6 col-lg-3 col-md-6">
|
|
||||||
<div class="card mb-0">
|
|
||||||
<div class="card-body px-3 py-4">
|
|
||||||
|
|
||||||
<div class="stat-header">
|
|
||||||
<h6 class="stat-label">Total Pesanan Masuk</h6>
|
|
||||||
<i class="bi bi-info-circle menu-dots" data-bs-toggle="tooltip" data-bs-placement="top"
|
|
||||||
title="Total pesanan buket dan foto yang masuk dalam bulan ini"></i>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="stat-body">
|
|
||||||
<div class="stat-icon">
|
|
||||||
<i class="bi bi-cart-fill"></i>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h6 class="stat-count">20 Pesanan</h6>
|
|
||||||
<span class="stat-percent text-success fw-bold">
|
|
||||||
<i class="bi bi-arrow-up"></i> 34.7%
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<small class="stat-month">dari bulan lalu</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-6 col-lg-3 col-md-6">
|
|
||||||
<div class="card mb-0">
|
|
||||||
<div class="card-body px-3 py-4">
|
|
||||||
|
|
||||||
<div class="stat-header">
|
|
||||||
<h6 class="stat-label">Pesanan Selesai</h6>
|
|
||||||
<i class="bi bi-info-circle menu-dots" data-bs-toggle="tooltip" data-bs-placement="top"
|
|
||||||
title="Total pesanan buket dan foto yang selesai dalam bulan ini"></i>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="stat-body">
|
|
||||||
<div class="stat-icon">
|
|
||||||
<i class="bi bi-cart-check-fill"></i>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h6 class="stat-count">20 Pesanan</h6>
|
|
||||||
<span class="stat-percent text-success fw-bold">
|
|
||||||
<i class="bi bi-arrow-up"></i> 34.7%
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<small class="stat-month">dari bulan lalu</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-6 col-lg-3 col-md-6">
|
|
||||||
<div class="card mb-0">
|
|
||||||
<div class="card-body px-3 py-4">
|
|
||||||
|
|
||||||
<div class="stat-header">
|
|
||||||
<h6 class="stat-label">Pesanan Dibatalkan</h6>
|
|
||||||
<i class="bi bi-info-circle menu-dots" data-bs-toggle="tooltip" data-bs-placement="top"
|
|
||||||
title="Total pesanan buket dan foto yang dibatalkan dalam bulan ini"></i>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="stat-body">
|
|
||||||
<div class="stat-icon">
|
|
||||||
<i class="bi bi-cart-x-fill"></i>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h6 class="stat-count">20 Pesanan</h6>
|
|
||||||
<span class="stat-percent text-success fw-bold">
|
|
||||||
<i class="bi bi-arrow-up"></i> 34.7%
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<small class="stat-month">dari bulan lalu</small>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-12">
|
|
||||||
<div class="row gx-2">
|
|
||||||
<div class="col-12 col-xl-6">
|
|
||||||
<div class="card mb-0">
|
|
||||||
<div class="card-header">
|
|
||||||
<h4>Bunga Diambil Hari Ini</h4>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-hover table-lg">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Waktu</th>
|
|
||||||
<th>Nama Pelanggan</th>
|
|
||||||
<th>Nama Buket</th>
|
|
||||||
<th>Aksi</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>Si Ganteng</td>
|
|
||||||
<td>Komentar dia...</td>
|
|
||||||
<td>cb</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<a href="#" class="btn icon btn-primary btn-action"
|
|
||||||
data-bs-toggle="modal" data-bs-target="#buketToday">
|
|
||||||
<i class="bi bi-eye"></i>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-12 col-xl-6">
|
|
||||||
<div class="card mb-0">
|
|
||||||
<div class="card-header">
|
|
||||||
<h4>Jadwal Foto Hari Ini</h4>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-hover table-lg">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Waktu</th>
|
|
||||||
<th>Nama Pelanggan</th>
|
|
||||||
<th>Nama Paket</th>
|
|
||||||
<th>Aksi</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>Si Keren</td>
|
|
||||||
<td>Komentar dia...</td>
|
|
||||||
<td>cb</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<a href="#" class="btn icon btn-primary btn-action"
|
|
||||||
data-bs-toggle="modal" data-bs-target="#fotoToday">
|
|
||||||
<i class="bi bi-eye"></i>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-12 col-xl-12">
|
|
||||||
<div class="card mb-0">
|
|
||||||
<div class="card-header">
|
|
||||||
<h4>Pesanan Pending</h4>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
|
|
||||||
<div class="nav nav-pills nav-fill mb-4" id="v-pills-tab" role="tablist" aria-orientation="horizontal">
|
|
||||||
<a class="nav-link active" id="v-pills-home-tab" data-bs-toggle="pill" href="#v-pills-home"
|
|
||||||
role="tab" aria-controls="v-pills-home" aria-selected="true">
|
|
||||||
Buket
|
|
||||||
</a>
|
|
||||||
<a class="nav-link" id="v-pills-profile-tab" data-bs-toggle="pill" href="#v-pills-profile"
|
|
||||||
role="tab" aria-controls="v-pills-profile" aria-selected="false">
|
|
||||||
Foto
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="tab-content" id="v-pills-tabContent">
|
|
||||||
|
|
||||||
<div class="tab-pane fade show active" id="v-pills-home" role="tabpanel"
|
|
||||||
aria-labelledby="v-pills-home-tab">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-hover table-lg">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>No.</th>
|
|
||||||
<th>Nama Pelanggan</th>
|
|
||||||
<th>Nama Buket</th>
|
|
||||||
<th>Tanggal Ambil</th>
|
|
||||||
<th>Total</th>
|
|
||||||
<th>Status</th>
|
|
||||||
<th>Aksi</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">1</p>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">Congratulations</p>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">Congratulations</p>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">Congratulations</p>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">Congratulations</p>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<span class="badge bg-success-subtle rounded-pill px-3 py-2">Selesai</span>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<a href="#"
|
|
||||||
class="btn icon btn-primary btn-action"data-bs-toggle="modal"
|
|
||||||
data-bs-target="#riwayatBuket">
|
|
||||||
<i class="bi bi-eye"></i>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="tab-pane fade" id="v-pills-profile" role="tabpanel"
|
|
||||||
aria-labelledby="v-pills-profile-tab">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-hover table-lg">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>No.</th>
|
|
||||||
<th>Nama Pelanggan</th>
|
|
||||||
<th>Nama Paket</th>
|
|
||||||
<th>Tanggal Booking</th>
|
|
||||||
<th>Total</th>
|
|
||||||
<th>Status</th>
|
|
||||||
<th>Aksi</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">1</p>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">Congratulations</p>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">Congratulations</p>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">Congratulations</p>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<p class="mb-0">Congratulations</p>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<span class="badge bg-success-subtle rounded-pill px-3 py-2">Selesai</span>
|
|
||||||
</td>
|
|
||||||
<td class="col-auto">
|
|
||||||
<a href="#"
|
|
||||||
class="btn icon btn-primary btn-action"data-bs-toggle="modal"
|
|
||||||
data-bs-target="#riwayatFoto">
|
|
||||||
<i class="bi bi-eye"></i>
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
@include('admin.beranda.partials.modal-buket')
|
|
||||||
@include('admin.beranda.partials.modal-foto')
|
|
||||||
@include('admin.beranda.partials.modal-riwayat')
|
|
||||||
@endsection
|
|
||||||
|
|
@ -74,7 +74,7 @@ class="badge rounded-pill px-3 py-2
|
||||||
@include('admin.kelola-admin.partials.modal-delete')
|
@include('admin.kelola-admin.partials.modal-delete')
|
||||||
@empty
|
@empty
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="4" class="text-center text-muted">Belum ada data admin.</td>
|
<td colspan="6" class="text-center text-muted">Belum ada data admin.</td>
|
||||||
</tr>
|
</tr>
|
||||||
@endforelse
|
@endforelse
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@
|
||||||
@include('admin.paket-foto.partials.modal-delete-foto')
|
@include('admin.paket-foto.partials.modal-delete-foto')
|
||||||
@empty
|
@empty
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="4" class="text-center text-muted">Belum ada data paket foto.</td>
|
<td colspan="7" class="text-center text-muted">Belum ada data paket foto.</td>
|
||||||
</tr>
|
</tr>
|
||||||
@endforelse
|
@endforelse
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
||||||
|
|
@ -70,10 +70,13 @@ class="custom-img-box-foto d-flex align-items-center justify-content-center text
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal fade" id="modalImagePreview" tabindex="-1" aria-hidden="true">
|
<div class="modal fade" id="modalImagePreview" tabindex="-1" aria-hidden="true" style="z-index: 1060 !important;">
|
||||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
<div class="modal-dialog modal-dialog-centered modal-lg">
|
||||||
<div class="modal-content bg-transparent border-0 shadow-none">
|
<div class="modal-content bg-transparent border-0 shadow-none">
|
||||||
|
<div class="text-end mb-2">
|
||||||
|
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"
|
||||||
|
aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
<div class="modal-body p-0 text-center">
|
<div class="modal-body p-0 text-center">
|
||||||
<img id="img-preview-target" src="" class="img-fluid rounded shadow-lg"
|
<img id="img-preview-target" src="" class="img-fluid rounded shadow-lg"
|
||||||
style="max-height: 85vh;">
|
style="max-height: 85vh;">
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
<div class="modal fade text-left" id="buket{{ $p->id_transaksi }}" tabindex="-1" role="dialog"
|
<div class="modal fade text-left" id="buket{{ $p->id_transaksi }}" tabindex="-1" role="dialog"
|
||||||
aria-labelledby="myModalLabel1" aria-hidden="true">
|
aria-labelledby="labelBuket{{ $p->id_transaksi }}" aria-hidden="true">
|
||||||
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
|
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
|
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title" id="myModalLabel1">Detail Pesanan Buket</h5>
|
<h5 class="modal-title" id="labelBuket{{ $p->id_transaksi }}">Detail Pesanan Buket</h5>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -113,15 +113,22 @@ class="badge {{ $p->status_label->class }}">
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer border-top-0 pt-2 px-2">
|
<div class="modal-footer border-top-0 pt-2 px-2">
|
||||||
<div class="d-flex w-100 gap-2">
|
<div class="d-flex w-100 gap-2">
|
||||||
<button type="button" class="btn btn-danger flex-fill tolak"
|
@if ($p->status_transaksi == 'menunggu_verifikasi')
|
||||||
onclick="prosesTanpaDialog(this, 'tolak', '{{ $p->id_transaksi }}')">
|
<button type="button" class="btn btn-danger flex-fill tolak"
|
||||||
Tolak Pesanan
|
onclick="prosesBuket(this, 'tolak', '{{ $p->id_transaksi }}', 'buket')">
|
||||||
</button>
|
Tolak Pesanan
|
||||||
|
</button>
|
||||||
|
|
||||||
<button type="button" class="btn btn-success flex-fill terima"
|
<button type="button" class="btn btn-success flex-fill terima"
|
||||||
onclick="prosesTanpaDialog(this, 'terima', '{{ $p->id_transaksi }}')">
|
onclick="prosesBuket(this, 'terima', '{{ $p->id_transaksi }}', 'buket')">
|
||||||
Terima Pesanan
|
Terima Pesanan
|
||||||
</button>
|
</button>
|
||||||
|
@elseif ($p->status_transaksi == 'diterima')
|
||||||
|
<button type="button" class="btn btn-primary flex-fill terima"
|
||||||
|
onclick="prosesBuket(this, 'selesai', '{{ $p->id_transaksi }}', 'buket')">
|
||||||
|
Selesaikan Pesanan
|
||||||
|
</button>
|
||||||
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -130,7 +137,7 @@ class="badge {{ $p->status_label->class }}">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- MODAL GAMBAR --}}
|
{{-- MODAL GAMBAR --}}
|
||||||
<div class="modal fade" id="modalImagePreview" tabindex="-1" aria-hidden="true">
|
<div class="modal fade" id="modalImagePreview" tabindex="-1" aria-hidden="true" style="z-index: 1060 !important;">
|
||||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
<div class="modal-dialog modal-dialog-centered modal-lg">
|
||||||
<div class="modal-content bg-transparent border-0 shadow-none">
|
<div class="modal-content bg-transparent border-0 shadow-none">
|
||||||
{{-- Tombol close putih agar terlihat di background gelap --}}
|
{{-- Tombol close putih agar terlihat di background gelap --}}
|
||||||
|
|
@ -161,7 +168,7 @@ function showImage(src) {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function prosesTanpaDialog(btn, jenis, id) {
|
function prosesBuket(btn, jenis, id) {
|
||||||
// 1. Efek Loading pada tombol yang diklik
|
// 1. Efek Loading pada tombol yang diklik
|
||||||
const originalText = btn.innerHTML;
|
const originalText = btn.innerHTML;
|
||||||
btn.innerHTML = '<span class="spinner-border spinner-border-sm"></span>';
|
btn.innerHTML = '<span class="spinner-border spinner-border-sm"></span>';
|
||||||
|
|
@ -186,8 +193,9 @@ function prosesTanpaDialog(btn, jenis, id) {
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.success) {
|
if (data.success) {
|
||||||
// 3. Langsung buka WhatsApp di tab baru
|
// 3. Langsung buka WhatsApp di tab baru
|
||||||
window.open(data.wa_url, '_blank');
|
if (data.wa_url) {
|
||||||
// 4. Reload halaman utama untuk update status di tabel
|
window.open(data.wa_url, '_blank');
|
||||||
|
}
|
||||||
location.reload();
|
location.reload();
|
||||||
} else {
|
} else {
|
||||||
alert("Error: " + data.message);
|
alert("Error: " + data.message);
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
<div class="modal fade text-left" id="foto{{ $p->id_booking }}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel1"
|
<div class="modal fade text-left" id="foto{{ $p->id_booking }}" tabindex="-1" role="dialog"
|
||||||
aria-hidden="true">
|
aria-labelledby="labelFoto{{ $p->id_booking }}" aria-hidden="true">
|
||||||
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
|
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
|
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title" id="myModalLabel1">Detail Pesanan Foto</h5>
|
<h5 class="modal-title" id="labelFoto{{ $p->id_booking }}">Detail Pesanan Foto</h5>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -92,7 +92,7 @@ class="badge {{ $p->status_label->class }}">
|
||||||
{{-- Klik hanya pada gambar --}}
|
{{-- Klik hanya pada gambar --}}
|
||||||
<img src="{{ asset('storage/' . $p->bukti_bayar) }}" class="proof-img"
|
<img src="{{ asset('storage/' . $p->bukti_bayar) }}" class="proof-img"
|
||||||
style="cursor: pointer;"
|
style="cursor: pointer;"
|
||||||
onclick="showImage('{{ asset('storage/' . $p->bukti_bayar) }}')">
|
onclick="showImageFoto('{{ asset('storage/' . $p->bukti_bayar) }}')">
|
||||||
@else
|
@else
|
||||||
{{-- Div pengganti kalau tidak ada foto --}}
|
{{-- Div pengganti kalau tidak ada foto --}}
|
||||||
<div class="custom-img-box d-flex align-items-center justify-content-center text-muted border rounded"
|
<div class="custom-img-box d-flex align-items-center justify-content-center text-muted border rounded"
|
||||||
|
|
@ -108,15 +108,22 @@ class="badge {{ $p->status_label->class }}">
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer border-top-0 pt-2 px-2">
|
<div class="modal-footer border-top-0 pt-2 px-2">
|
||||||
<div class="d-flex w-100 gap-2">
|
<div class="d-flex w-100 gap-2">
|
||||||
<button type="button" class="btn btn-danger flex-fill tolak"
|
@if ($p->status_booking == 'menunggu_verifikasi')
|
||||||
onclick="prosesTanpaDialog(this, 'tolak', '{{ $p->id_booking }}')">
|
<button type="button" class="btn btn-danger flex-fill tolak"
|
||||||
Tolak Pesanan
|
onclick="prosesFoto(this, 'tolak', '{{ $p->id_booking }}', 'foto')">
|
||||||
</button>
|
Tolak Pesanan
|
||||||
|
</button>
|
||||||
|
|
||||||
<button type="button" class="btn btn-success flex-fill terima"
|
<button type="button" class="btn btn-success flex-fill terima"
|
||||||
onclick="prosesTanpaDialog(this, 'terima', '{{ $p->id_booking }}')">
|
onclick="prosesFoto(this, 'terima', '{{ $p->id_booking }}', 'foto')">
|
||||||
Terima Pesanan
|
Terima Pesanan
|
||||||
</button>
|
</button>
|
||||||
|
@elseif ($p->status_booking == 'diterima')
|
||||||
|
<button type="button" class="btn btn-primary flex-fill terima"
|
||||||
|
onclick="prosesFoto(this, 'selesai', '{{ $p->id_booking }}', 'foto')">
|
||||||
|
Selesaikan Pesanan
|
||||||
|
</button>
|
||||||
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -125,7 +132,7 @@ class="badge {{ $p->status_label->class }}">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- MODAL GAMBAR --}}
|
{{-- MODAL GAMBAR --}}
|
||||||
<div class="modal fade" id="modalImagePreview" tabindex="-1" aria-hidden="true">
|
<div class="modal fade" id="modalImagePreviewFoto" tabindex="-1" aria-hidden="true" style="z-index: 1060 !important;">
|
||||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
<div class="modal-dialog modal-dialog-centered modal-lg">
|
||||||
<div class="modal-content bg-transparent border-0 shadow-none">
|
<div class="modal-content bg-transparent border-0 shadow-none">
|
||||||
{{-- Tombol close putih agar terlihat di background gelap --}}
|
{{-- Tombol close putih agar terlihat di background gelap --}}
|
||||||
|
|
@ -134,7 +141,7 @@ class="badge {{ $p->status_label->class }}">
|
||||||
aria-label="Close"></button>
|
aria-label="Close"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body p-0 text-center">
|
<div class="modal-body p-0 text-center">
|
||||||
<img id="img-preview-target" src="" class="img-fluid rounded shadow-lg"
|
<img id="img-preview-target-foto" src="" class="img-fluid rounded shadow-lg"
|
||||||
style="max-height: 85vh; object-fit: contain;">
|
style="max-height: 85vh; object-fit: contain;">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -142,9 +149,9 @@ class="badge {{ $p->status_label->class }}">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function showImage(src) {
|
function showImageFoto(src) {
|
||||||
const modalElement = document.getElementById('modalImagePreview');
|
const modalElement = document.getElementById('modalImagePreviewFoto');
|
||||||
const modalImg = document.getElementById('img-preview-target');
|
const modalImg = document.getElementById('img-preview-target-foto');
|
||||||
|
|
||||||
// 1. Set sumber gambar
|
// 1. Set sumber gambar
|
||||||
modalImg.src = src;
|
modalImg.src = src;
|
||||||
|
|
@ -157,7 +164,7 @@ function showImage(src) {
|
||||||
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function prosesTanpaDialog(btn, jenis, id) {
|
function prosesFoto(btn, jenis, id) {
|
||||||
// 1. Efek Loading pada tombol yang diklik
|
// 1. Efek Loading pada tombol yang diklik
|
||||||
const originalText = btn.innerHTML;
|
const originalText = btn.innerHTML;
|
||||||
btn.innerHTML = '<span class="spinner-border spinner-border-sm"></span>';
|
btn.innerHTML = '<span class="spinner-border spinner-border-sm"></span>';
|
||||||
|
|
@ -182,8 +189,9 @@ function prosesTanpaDialog(btn, jenis, id) {
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.success) {
|
if (data.success) {
|
||||||
// 3. Langsung buka WhatsApp di tab baru
|
// 3. Langsung buka WhatsApp di tab baru
|
||||||
window.open(data.wa_url, '_blank');
|
if (data.wa_url) {
|
||||||
// 4. Reload halaman utama untuk update status di tabel
|
window.open(data.wa_url, '_blank');
|
||||||
|
}
|
||||||
location.reload();
|
location.reload();
|
||||||
} else {
|
} else {
|
||||||
alert("Error: " + data.message);
|
alert("Error: " + data.message);
|
||||||
|
|
|
||||||
53
resources/views/admin/pesanan/partials/modal-riwayat-buket.blade.php
Normal file → Executable file
|
|
@ -96,7 +96,7 @@ class="badge {{ $rb->status_label->class }}">
|
||||||
{{-- Klik hanya pada gambar --}}
|
{{-- Klik hanya pada gambar --}}
|
||||||
<img src="{{ asset('storage/' . $rb->bukti_bayar) }}" class="proof-img"
|
<img src="{{ asset('storage/' . $rb->bukti_bayar) }}" class="proof-img"
|
||||||
style="cursor: pointer;"
|
style="cursor: pointer;"
|
||||||
onclick="showImage('{{ asset('storage/' . $rb->bukti_bayar) }}')">
|
onclick="showImageBuket('{{ asset('storage/' . $rb->bukti_bayar) }}')">
|
||||||
@else
|
@else
|
||||||
{{-- Div pengganti kalau tidak ada foto --}}
|
{{-- Div pengganti kalau tidak ada foto --}}
|
||||||
<div class="custom-img-box d-flex align-items-center justify-content-center text-muted border rounded"
|
<div class="custom-img-box d-flex align-items-center justify-content-center text-muted border rounded"
|
||||||
|
|
@ -116,7 +116,7 @@ class="badge {{ $rb->status_label->class }}">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- MODAL GAMBAR --}}
|
{{-- MODAL GAMBAR --}}
|
||||||
<div class="modal fade" id="modalImagePreview" tabindex="-1" aria-hidden="true">
|
<div class="modal fade" id="modalImagePreviewBuket" tabindex="-1" aria-hidden="true" style="z-index: 1060 !important;">
|
||||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
<div class="modal-dialog modal-dialog-centered modal-lg">
|
||||||
<div class="modal-content bg-transparent border-0 shadow-none">
|
<div class="modal-content bg-transparent border-0 shadow-none">
|
||||||
{{-- Tombol close putih agar terlihat di background gelap --}}
|
{{-- Tombol close putih agar terlihat di background gelap --}}
|
||||||
|
|
@ -125,7 +125,7 @@ class="badge {{ $rb->status_label->class }}">
|
||||||
aria-label="Close"></button>
|
aria-label="Close"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body p-0 text-center">
|
<div class="modal-body p-0 text-center">
|
||||||
<img id="img-preview-target" src="" class="img-fluid rounded shadow-lg"
|
<img id="img-preview-target-buket" src="" class="img-fluid rounded shadow-lg"
|
||||||
style="max-height: 85vh; object-fit: contain;">
|
style="max-height: 85vh; object-fit: contain;">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -133,9 +133,9 @@ class="badge {{ $rb->status_label->class }}">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function showImage(src) {
|
function showImageBuket(src) {
|
||||||
const modalElement = document.getElementById('modalImagePreview');
|
const modalElement = document.getElementById('modalImagePreviewBuket');
|
||||||
const modalImg = document.getElementById('img-preview-target');
|
const modalImg = document.getElementById('img-preview-target-buket');
|
||||||
|
|
||||||
// 1. Set sumber gambar
|
// 1. Set sumber gambar
|
||||||
modalImg.src = src;
|
modalImg.src = src;
|
||||||
|
|
@ -145,3 +145,44 @@ function showImage(src) {
|
||||||
myModal.show();
|
myModal.show();
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
<script>
|
||||||
|
// Tambahkan parameter ke-4: 'kategori'
|
||||||
|
function prosesTanpaDialog(btn, jenis, id, kategori) {
|
||||||
|
|
||||||
|
// 1. Efek Loading
|
||||||
|
const originalText = btn.innerHTML;
|
||||||
|
btn.innerHTML = '<span class="spinner-border spinner-border-sm"></span>';
|
||||||
|
btn.disabled = true;
|
||||||
|
|
||||||
|
// 2. Fetch
|
||||||
|
fetch(`{{ url('/admin/riwayat-pesanan/update-status') }}/${id}`, {
|
||||||
|
method: 'PUT',
|
||||||
|
headers: {
|
||||||
|
'X-CSRF-TOKEN': '{{ csrf_token() }}',
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Accept': 'application/json'
|
||||||
|
},
|
||||||
|
// Kirim 'jenis' DAN 'kategori'
|
||||||
|
body: JSON.stringify({
|
||||||
|
jenis: jenis,
|
||||||
|
kategori: kategori
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
if (data.success) {
|
||||||
|
location.reload();
|
||||||
|
} else {
|
||||||
|
alert("Gagal: " + (data.message || "Terjadi kesalahan"));
|
||||||
|
btn.innerHTML = originalText;
|
||||||
|
btn.disabled = false;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error(error);
|
||||||
|
alert("Error sistem.");
|
||||||
|
btn.innerHTML = originalText;
|
||||||
|
btn.disabled = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
|
||||||
56
resources/views/admin/pesanan/partials/modal-riwayat-foto.blade.php
Normal file → Executable file
|
|
@ -93,9 +93,10 @@ class="badge {{ $rf->status_label->class }}">
|
||||||
<div class="proof-img-wrapper">
|
<div class="proof-img-wrapper">
|
||||||
@if ($rf->bukti_bayar)
|
@if ($rf->bukti_bayar)
|
||||||
{{-- Klik hanya pada gambar --}}
|
{{-- Klik hanya pada gambar --}}
|
||||||
<img src="{{ asset('storage/' . $rf->bukti_bayar) }}" class="proof-img"
|
<img src="{{ asset('storage/' . $rf->bukti_bayar) }}" class="proof-img" <img
|
||||||
|
src="{{ asset('storage/' . $rf->bukti_bayar) }}" class="proof-img"
|
||||||
style="cursor: pointer;"
|
style="cursor: pointer;"
|
||||||
onclick="showImage('{{ asset('storage/' . $rf->bukti_bayar) }}')">
|
onclick="showImageFoto('{{ asset('storage/' . $rf->bukti_bayar) }}')">
|
||||||
@else
|
@else
|
||||||
{{-- Div pengganti kalau tidak ada foto --}}
|
{{-- Div pengganti kalau tidak ada foto --}}
|
||||||
<div class="custom-img-box d-flex align-items-center justify-content-center text-muted border rounded"
|
<div class="custom-img-box d-flex align-items-center justify-content-center text-muted border rounded"
|
||||||
|
|
@ -115,7 +116,7 @@ class="badge {{ $rf->status_label->class }}">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{-- MODAL GAMBAR --}}
|
{{-- MODAL GAMBAR --}}
|
||||||
<div class="modal fade" id="modalImagePreview" tabindex="-1" aria-hidden="true">
|
<div class="modal fade" id="modalImagePreviewFoto" tabindex="-1" aria-hidden="true" style="z-index: 1060 !important;">
|
||||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
<div class="modal-dialog modal-dialog-centered modal-lg">
|
||||||
<div class="modal-content bg-transparent border-0 shadow-none">
|
<div class="modal-content bg-transparent border-0 shadow-none">
|
||||||
{{-- Tombol close putih agar terlihat di background gelap --}}
|
{{-- Tombol close putih agar terlihat di background gelap --}}
|
||||||
|
|
@ -124,7 +125,7 @@ class="badge {{ $rf->status_label->class }}">
|
||||||
aria-label="Close"></button>
|
aria-label="Close"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body p-0 text-center">
|
<div class="modal-body p-0 text-center">
|
||||||
<img id="img-preview-target" src="" class="img-fluid rounded shadow-lg"
|
<img id="img-preview-target-foto" src="" class="img-fluid rounded shadow-lg"
|
||||||
style="max-height: 85vh; object-fit: contain;">
|
style="max-height: 85vh; object-fit: contain;">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -132,9 +133,9 @@ class="badge {{ $rf->status_label->class }}">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function showImage(src) {
|
function showImageFoto(src) {
|
||||||
const modalElement = document.getElementById('modalImagePreview');
|
const modalElement = document.getElementById('modalImagePreviewFoto');
|
||||||
const modalImg = document.getElementById('img-preview-target');
|
const modalImg = document.getElementById('img-preview-target-foto');
|
||||||
|
|
||||||
// 1. Set sumber gambar
|
// 1. Set sumber gambar
|
||||||
modalImg.src = src;
|
modalImg.src = src;
|
||||||
|
|
@ -144,3 +145,44 @@ function showImage(src) {
|
||||||
myModal.show();
|
myModal.show();
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
<script>
|
||||||
|
// Tambahkan parameter ke-4: 'kategori'
|
||||||
|
function prosesTanpaDialog(btn, jenis, id, kategori) {
|
||||||
|
|
||||||
|
// 1. Efek Loading
|
||||||
|
const originalText = btn.innerHTML;
|
||||||
|
btn.innerHTML = '<span class="spinner-border spinner-border-sm"></span>';
|
||||||
|
btn.disabled = true;
|
||||||
|
|
||||||
|
// 2. Fetch
|
||||||
|
fetch(`{{ url('/admin/riwayat-pesanan/update-status') }}/${id}`, {
|
||||||
|
method: 'PUT',
|
||||||
|
headers: {
|
||||||
|
'X-CSRF-TOKEN': '{{ csrf_token() }}',
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Accept': 'application/json'
|
||||||
|
},
|
||||||
|
// Kirim 'jenis' DAN 'kategori'
|
||||||
|
body: JSON.stringify({
|
||||||
|
jenis: jenis,
|
||||||
|
kategori: kategori
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
if (data.success) {
|
||||||
|
location.reload();
|
||||||
|
} else {
|
||||||
|
alert("Gagal: " + (data.message || "Terjadi kesalahan"));
|
||||||
|
btn.innerHTML = originalText;
|
||||||
|
btn.disabled = false;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error(error);
|
||||||
|
alert("Error sistem.");
|
||||||
|
btn.innerHTML = originalText;
|
||||||
|
btn.disabled = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,28 @@
|
||||||
@section('title', 'Riwayat Pesanan')
|
@section('title', 'Riwayat Pesanan')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
|
{{-- ALERT SUKSES --}}
|
||||||
|
@if (session('success'))
|
||||||
|
<div class="alert alert-success alert-dismissible fade show" role="alert">
|
||||||
|
{{ session('success') }}
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
{{-- ALERT ERROR UMUM (Jika ada error selain validasi modal) --}}
|
||||||
|
@if (session('error'))
|
||||||
|
<div class="alert alert-danger alert-dismissible fade show" role="alert">
|
||||||
|
{{ session('error') }}
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
<section class="section">
|
<section class="section">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
|
|
||||||
<div class="nav nav-pills nav-fill mb-4" id="v-pills-tab" role="tablist" aria-orientation="horizontal">
|
<div class="nav nav-pills nav-fill mb-4" id="v-pills-tab" role="tablist" aria-orientation="horizontal">
|
||||||
<a class="nav-link active" id="v-pills-home-tab" data-bs-toggle="pill" href="#v-pills-home" role="tab"
|
<a class="nav-link active" id="v-pills-home-tab" data-bs-toggle="pill" href="#v-pills-home"
|
||||||
aria-controls="v-pills-home" aria-selected="true">
|
role="tab" aria-controls="v-pills-home" aria-selected="true">
|
||||||
Buket
|
Buket
|
||||||
</a>
|
</a>
|
||||||
<a class="nav-link" id="v-pills-profile-tab" data-bs-toggle="pill" href="#v-pills-profile"
|
<a class="nav-link" id="v-pills-profile-tab" data-bs-toggle="pill" href="#v-pills-profile"
|
||||||
|
|
|
||||||
|
|
@ -83,10 +83,13 @@ class="badge bg-success-subtle rounded-pill px-3 py-2 text-success">{{ $b->kateg
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal fade" id="modalImagePreview" tabindex="-1" aria-hidden="true">
|
<div class="modal fade" id="modalImagePreview" tabindex="-1" aria-hidden="true" style="z-index: 1060 !important;">
|
||||||
<div class="modal-dialog modal-dialog-centered modal-lg">
|
<div class="modal-dialog modal-dialog-centered modal-lg">
|
||||||
<div class="modal-content bg-transparent border-0 shadow-none">
|
<div class="modal-content bg-transparent border-0 shadow-none">
|
||||||
|
<div class="text-end mb-2">
|
||||||
|
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"
|
||||||
|
aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
<div class="modal-body p-0 text-center">
|
<div class="modal-body p-0 text-center">
|
||||||
<img id="img-preview-target" src="" class="img-fluid rounded shadow-lg"
|
<img id="img-preview-target" src="" class="img-fluid rounded shadow-lg"
|
||||||
style="max-height: 85vh;">
|
style="max-height: 85vh;">
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,7 @@ class="btn btn-detailbuket-primary flex-fill">
|
||||||
'* seharga Rp ' .
|
'* seharga Rp ' .
|
||||||
number_format($buket->harga, 0, ',', '.') .
|
number_format($buket->harga, 0, ',', '.') .
|
||||||
'. Bisa diskusi sedikit soal detail dan custom-nya?';
|
'. Bisa diskusi sedikit soal detail dan custom-nya?';
|
||||||
$waLink = 'https://wa.me/6289673668516?text=' . urlencode($waText);
|
$waLink = 'https://wa.me/6282337687878?text=' . urlencode($waText);
|
||||||
@endphp
|
@endphp
|
||||||
<a href="{{ $waLink }}" target="_blank" class="btn btn-detailbuket-secondary flex-fill">
|
<a href="{{ $waLink }}" target="_blank" class="btn btn-detailbuket-secondary flex-fill">
|
||||||
Diskusikan di WA
|
Diskusikan di WA
|
||||||
|
|
|
||||||
|
|
@ -201,8 +201,6 @@ class="position-absolute w-100 h-100 opacity-0 start-0 top-0 cursor-pointer @err
|
||||||
<div class="d-flex gap-3">
|
<div class="d-flex gap-3">
|
||||||
<a href="{{ route('booking.cancel') }}"
|
<a href="{{ route('booking.cancel') }}"
|
||||||
class="btn formulirfoto-btn-cancel flex-fill">Batalkan</a>
|
class="btn formulirfoto-btn-cancel flex-fill">Batalkan</a>
|
||||||
{{-- <a href="{{ route('detail.foto', $foto->id_paket) }}"
|
|
||||||
class="btn formulirfoto-btn-cancel flex-fill">Batalkan</a> --}}
|
|
||||||
<button type="submit" class="btn formulirfoto-btn-submit flex-fill">Kirim
|
<button type="submit" class="btn formulirfoto-btn-submit flex-fill">Kirim
|
||||||
Pesanan</button>
|
Pesanan</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,6 @@
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
use App\Http\Controllers\Admin as Admin;
|
use App\Http\Controllers\Admin as Admin;
|
||||||
use App\Http\Controllers\User as User;
|
use App\Http\Controllers\User as User;
|
||||||
use App\Http\Controllers\AuthController; // Asumsi controller login dipisah atau di Admin
|
|
||||||
use App\Http\Controllers\User\TestBookingController;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
import { defineConfig } from 'vite';
|
|
||||||
import laravel from 'laravel-vite-plugin';
|
|
||||||
import tailwindcss from '@tailwindcss/vite';
|
|
||||||
|
|
||||||
export default defineConfig({
|
|
||||||
plugins: [
|
|
||||||
laravel({
|
|
||||||
input: ['resources/css/app.css', 'resources/js/app.js'],
|
|
||||||
refresh: true,
|
|
||||||
}),
|
|
||||||
tailwindcss(),
|
|
||||||
],
|
|
||||||
server: {
|
|
||||||
watch: {
|
|
||||||
ignored: ['**/storage/framework/views/**'],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||