From 9560793ff5eb5f9f03514f7355cd93eefd726579 Mon Sep 17 00:00:00 2001 From: LailaWulandarii Date: Wed, 7 Jan 2026 17:06:39 +0700 Subject: [PATCH 1/7] delete photo checking rule for edit and delete buket and foto --- app/Http/Controllers/Admin/BuketController.php | 4 ++-- app/Http/Controllers/Admin/FotoController.php | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/Admin/BuketController.php b/app/Http/Controllers/Admin/BuketController.php index 0c82347..5dc07f7 100755 --- a/app/Http/Controllers/Admin/BuketController.php +++ b/app/Http/Controllers/Admin/BuketController.php @@ -122,7 +122,7 @@ public function update(Request $request, string $id) if ($request->hasFile('foto')) { // 1. Hapus foto lama jika ada - if ($buket->foto && file_exists(public_path($buket->foto))) { + if ($buket->foto) { File::delete(public_path($buket->foto)); } @@ -142,7 +142,7 @@ public function destroy(string $id) { $buket = Buket::findOrFail($id); - if ($buket->foto && File::exists(public_path($buket->foto))) { + if ($buket->foto) { File::delete(public_path($buket->foto)); } $buket->delete(); diff --git a/app/Http/Controllers/Admin/FotoController.php b/app/Http/Controllers/Admin/FotoController.php index 9238c40..67ffa7a 100755 --- a/app/Http/Controllers/Admin/FotoController.php +++ b/app/Http/Controllers/Admin/FotoController.php @@ -29,7 +29,7 @@ public function store(Request $request) $validator = Validator::make($request->all(), [ 'nama' => 'required|string|min:3|max:100', 'harga' => 'required|numeric|min:0', - 'durasi' => 'required|integer|min:1', + 'durasi' => 'required|integer|min:0', 'deskripsi' => 'required|string|min:10', 'foto' => 'required|image|mimes:jpeg,png,jpg|max:2048', ], [ @@ -84,7 +84,7 @@ public function update(Request $request, string $id) $validator = Validator::make($request->all(), [ 'nama' => 'required|string|min:3|max:100', 'harga' => 'required|numeric|min:0', - 'durasi' => 'required|integer|min:1', + 'durasi' => 'required|integer|min:0', 'deskripsi' => 'required|string|min:10', 'foto' => 'nullable|image|mimes:jpeg,png,jpg|max:2048', ], [ @@ -115,7 +115,7 @@ public function update(Request $request, string $id) if ($request->hasFile('foto')) { // Hapus file lama jika ada foto baru yang diunggah - if ($paket->foto && File::exists(public_path($paket->foto))) { + if ($paket->foto) { File::delete(public_path($paket->foto)); } @@ -136,7 +136,7 @@ public function destroy(string $id) $paket = PaketFoto::where('id_paket', $id)->firstOrFail(); // 1. Cek dan hapus file foto dari folder public - if ($paket->foto && File::exists(public_path($paket->foto))) { + if ($paket->foto) { File::delete(public_path($paket->foto)); } From 98456552c7535fdeae0da0ce4ae95259abb137b5 Mon Sep 17 00:00:00 2001 From: LailaWulandarii Date: Wed, 7 Jan 2026 17:15:27 +0700 Subject: [PATCH 2/7] change date to indonesian format, add total booking duration after add additional in formulir function, add detail validator in store function, edit template confirmation message --- .../User/BookingFotoController.php | 225 +++++++++++------- 1 file changed, 140 insertions(+), 85 deletions(-) diff --git a/app/Http/Controllers/User/BookingFotoController.php b/app/Http/Controllers/User/BookingFotoController.php index c4b6ad8..3f10a5b 100755 --- a/app/Http/Controllers/User/BookingFotoController.php +++ b/app/Http/Controllers/User/BookingFotoController.php @@ -23,7 +23,7 @@ public function index() public function detail($id) { $foto = PaketFoto::findOrFail($id); - + \Carbon\Carbon::setLocale('id'); // Jika add-ons disimpan di DB, ambil juga: $additionals = Additional::all(); // Logika Tanggal @@ -33,23 +33,25 @@ public function detail($id) $prevMonth = $start->copy()->subMonth(); $nextMonth = $start->copy()->addMonth(); - $currentMonthLabel = $start->format('F Y'); + // translatedFormat akan mengikuti locale 'id' di config Anda + $currentMonthLabel = $start->isoFormat('MMMM YYYY'); return view('user.detail-foto', compact('foto', 'additionals', 'start', 'end', 'currentMonthLabel', 'prevMonth', 'nextMonth')); } public function loadCalendar(Request $request) { + \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'); $year = $request->year ?? date('Y'); - $start = \Carbon\Carbon::createFromDate($year, $month, 1); // Data Navigasi $prevMonth = $start->copy()->subMonth(); $nextMonth = $start->copy()->addMonth(); - $currentMonthLabel = $start->format('F Y'); - - // Return hanya potongan HTML (Partial), bukan halaman full + // translatedFormat akan mengikuti locale 'id' di config Anda + $currentMonthLabel = $start->isoFormat('MMMM YYYY'); // Return hanya potongan HTML (Partial), bukan halaman full $html = view('user.components.calendar-grid', compact( 'start', 'prevMonth', @@ -74,31 +76,48 @@ public function formulir(Request $request) { // 1. Ambil Data Paket $foto = PaketFoto::findOrFail($request->id_paket); + $durasiDasar = $foto->durasi; // Ambil durasi paket asli - // 2. Hitung Total Add-ons (Jika ada) + // 2. Hitung Total Add-ons & Tambahan Menit $addonsDetails = []; $totalAddon = 0; + $tambahanMenit = 0; // Inisialisasi tambahan waktu if ($request->has('addons')) { foreach ($request->addons as $id => $qty) { if ($qty > 0) { $add = Additional::find($id); - $subtotal = $add->harga * $qty; - $totalAddon += $subtotal; + if ($add) { + $subtotal = $add->harga * $qty; + $totalAddon += $subtotal; - $addonsDetails[] = [ - 'nama' => $add->nama, - 'qty' => $qty, - 'subtotal' => $subtotal, - 'id' => $id // Simpan ID untuk dikirim lagi nanti - ]; + // LOGIKA TAMBAHAN WAKTU BERDASARKAN ID + if ($id == 4) { // Tambah waktu/5 menit + $tambahanMenit += (5 * $qty); + } elseif ($id == 6) { // Tambah 10 menit sesi Spotlight + $tambahanMenit += (10 * $qty); + } + + $addonsDetails[] = [ + 'nama' => $add->nama, + 'qty' => $qty, + 'subtotal' => $subtotal, + 'id' => $id + ]; + } } } } - // 3. Hitung Grand Total + // 3. Hitung Ulang Jam Selesai + $totalDurasi = $durasiDasar + $tambahanMenit; + $jamMulai = \Carbon\Carbon::createFromFormat('H:i', $request->jam_mulai); + $jamSelesaiBaru = $jamMulai->copy()->addMinutes($totalDurasi)->format('H:i'); + + // 4. Hitung Grand Total $grandTotal = $foto->harga + $totalAddon; - // 1. Cek apakah sudah ada deadline di session? Kalau belum, buat baru (2 jam dari sekarang) + + // 5. Logika Deadline Pembayaran (Tetap sama) if (!session()->has('payment_deadline')) { $deadline = now()->addHours(2); session()->put('payment_deadline', $deadline); @@ -106,21 +125,21 @@ public function formulir(Request $request) $deadline = session('payment_deadline'); } - // 2. Hitung sisa waktu dalam detik - $sisaWaktu = now()->diffInSeconds($deadline, false); // false = biar bisa negatif kalau lewat + $sisaWaktu = now()->diffInSeconds($deadline, false); - // 3. Jika waktu habis (negatif), hapus session dan tendang user if ($sisaWaktu <= 0) { - session()->forget(['payment_deadline', 'addons']); // Bersihkan session - return redirect()->route('booking.foto')->with('error', 'Waktu pembayaran telah habis. Silakan ulang pemesanan.'); + session()->forget(['payment_deadline', 'addons']); + return redirect()->route('booking.foto')->with('error', 'Waktu pembayaran telah habis.'); } - // 4. Kirim semua data ke View Pembayaran untuk ditampilkan + + // 6. Kirim jam_selesai yang sudah diperbarui ke View return view('user.pembayaran-foto', compact( 'foto', - 'request', // Kirim request agar tgl & jam bisa diakses di blade + 'request', 'addonsDetails', 'grandTotal', - 'sisaWaktu' + 'sisaWaktu', + 'jamSelesaiBaru' // Variabel baru untuk ditampilkan di blade )); } public function cancelBooking() @@ -130,55 +149,47 @@ public function cancelBooking() } public function store(Request $request) { - - // 1. Validasi Input - $request->validate([ + // 1. Validasi Input menggunakan Format Validator + $validator = \Illuminate\Support\Facades\Validator::make($request->all(), [ 'id_paket' => 'required|exists:paket_fotos,id_paket', 'tgl_booking' => 'required|date|after_or_equal:today', 'jam_mulai' => 'required', - 'nama' => 'required|string|max:255', - 'no_wa' => 'required|numeric', + 'nama' => 'required|string|min:3|max:100', + 'no_wa' => 'required|numeric|digits_between:10,15', '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.', + ], [ + // Alias Atribut agar lebih ramah + 'id_paket' => 'paket foto', + 'nama' => 'nama pemesan', + 'no_wa' => 'nomor WhatsApp', + 'tgl_booking' => 'tanggal booking', + 'jam_mulai' => 'jam mulai', + 'bukti_bayar' => 'bukti pembayaran', ]); - DB::beginTransaction(); // Mulai Transaksi Database + if ($validator->fails()) { + return back()->withErrors($validator)->withInput(); + } + + \Illuminate\Support\Facades\DB::beginTransaction(); // Mulai Transaksi Database try { - // 2. Ambil Data Paket & Hitung Waktu - $paket = PaketFoto::findOrFail($request->id_paket); - - // Asumsi durasi default 20 menit (atau ambil dari database jika ada kolom durasi) - $durasiMenit = $paket->durasi; - $jamMulai = \Carbon\Carbon::createFromFormat('H:i', $request->jam_mulai); - $jamSelesai = $jamMulai->copy()->addMinutes($durasiMenit); - - // 3. Cek Slot Sekali Lagi (Mencegah Race Condition) - $isTaken = BookingFoto::where('tgl_booking', $request->tgl_booking) - ->where('jam_mulai', $request->jam_mulai) - ->whereIn('status_booking', ['menunggu_verifikasi', 'diterima', 'selesai']) - ->exists(); - - if ($isTaken) { - return back()->with('error', 'Mohon maaf, slot waktu ini baru saja diambil orang lain.'); - } - - // 4. Simpan/Update Data Pelanggan - $pelanggan = Pelanggan::firstOrCreate( - ['no_wa' => $request->no_wa], - ['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'), $namaFile); - $pathBukti = 'img/payment/' . $namaFile; - } - - // 6. Hitung Grand Total (Paket + Additional) - // Kita hitung ulang di server agar aman dari manipulasi inspect element + // 2. Ambil Data Paket & Hitung Waktu (Termasuk Tambahan Menit dari Addons) + $paket = \App\Models\PaketFoto::findOrFail($request->id_paket); + $totalDurasi = $paket->durasi; $grandTotal = $paket->harga; $listAdditional = []; @@ -190,32 +201,65 @@ public function store(Request $request) $subtotal = $add->harga * $qty; $grandTotal += $subtotal; + // Logika Tambah Waktu berdasarkan ID yang sebelumnya kita bahas + if ($idAddon == 4) $totalDurasi += (5 * $qty); // Tambah 5 menit + if ($idAddon == 6) $totalDurasi += (10 * $qty); // Tambah 10 menit + $listAdditional[] = [ 'id_additional' => $idAddon, 'qty' => $qty, - 'subtotal' => $subtotal + 'subtotal' => $subtotal, + 'nama_barang' => $add->nama ]; } } } } - // 7. Simpan Booking Utama - $booking = BookingFoto::create([ - 'no_invoice' => 'INV-FOTO-' . strtoupper(Str::random(6)), + $jamMulai = \Carbon\Carbon::createFromFormat('H:i', $request->jam_mulai); + $jamSelesai = $jamMulai->copy()->addMinutes($totalDurasi); + + // 3. Cek Slot Sekali Lagi (Mencegah Race Condition) + $isTaken = \App\Models\BookingFoto::where('tgl_booking', $request->tgl_booking) + ->where('jam_mulai', $request->jam_mulai) + ->whereIn('status_booking', ['menunggu_verifikasi', 'diterima', 'selesai']) + ->exists(); + + if ($isTaken) { + return back()->with('error', 'Mohon maaf, slot waktu ini baru saja diambil orang lain.'); + } + + // 4. Simpan/Update Data Pelanggan + $pelanggan = \App\Models\Pelanggan::firstOrCreate( + ['no_wa' => $request->no_wa], + ['nama' => $request->nama] + ); + + // 5. Upload Bukti Bayar + $pathBukti = null; + if ($request->hasFile('bukti_bayar')) { + $file = $request->file('bukti_bayar'); + $namaFile = 'bukti_' . time() . $file->getClientOriginalExtension(); + $file->move(public_path('img/payment'), $namaFile); + $pathBukti = 'img/payment/foto' . $namaFile; + } + + // 6. Simpan Booking Utama + $booking = \App\Models\BookingFoto::create([ + 'no_invoice' => 'INV-FOTO-' . strtoupper(\Illuminate\Support\Str::random(6)), 'id_pelanggan' => $pelanggan->id_pelanggan, 'id_paket' => $paket->id_paket, 'tgl_booking' => $request->tgl_booking, - 'jam_mulai' => $request->jam_mulai, // Format "09:00" + 'jam_mulai' => $request->jam_mulai, 'jam_selesai' => $jamSelesai->format('H:i'), 'total_bayar' => $grandTotal, 'bukti_bayar' => $pathBukti, 'status_booking' => 'menunggu_verifikasi' ]); - // 8. Simpan Detail Additional (Jika ada) + // 7. Simpan Detail Additional foreach ($listAdditional as $item) { - DetailAdditional::create([ + \App\Models\DetailAdditional::create([ 'id_booking' => $booking->id_booking, 'id_additional' => $item['id_additional'], 'qty' => $item['qty'], @@ -223,13 +267,28 @@ public function store(Request $request) ]); } - DB::commit(); - // 9. Redirect ke WhatsApp atau Halaman Sukses - $pesan = "Halo Admin Flo.do! Saya pesan foto paket *{$paket->nama}*.\n" . - "Tanggal: {$request->tgl_booking}\n" . - "Jam: {$request->jam_mulai}\n" . + \Illuminate\Support\Facades\DB::commit(); + $txtAddons = ""; + if (count($listAdditional) > 0) { + $txtAddons = "*Additional:*"; // Judul + foreach ($listAdditional as $item) { + // Ambil nama yang tadi kita titip + $txtAddons .= "\n- " . $item['nama_barang'] . " (" . $item['qty'] . "x)"; + } + $txtAddons .= "\n"; // Kasih jarak baris + } + // 8. Redirect ke WhatsApp + $pesan = "Halo Admin Flo.do! Saya sudah melakukan pembayaran untuk invoice {$booking->no_invoice}:" . + "*Data Pemesan:*\n" . + "Nama: {$pelanggan->nama}\n" . + "WA: {$pelanggan->no_wa}\n\n" . + "*Detail Booking:*\n" . + "Nama Paket: {$request->nama}\n" . + $txtAddons . + "Tanggal: " . \Carbon\Carbon::parse($request->tgl_booking)->translatedFormat('l, d F Y') . "\n" . + "Jam: {$request->jam_mulai} - {$jamSelesai->format('H:i')} WIB\n" . "Total: Rp " . number_format($grandTotal, 0, ',', '.') . "\n" . - "Mohon diverifikasi ya."; + "Mohon segera diproses, ya! Terima kasih."; $urlWA = "https://wa.me/6289673668516?text=" . urlencode($pesan); session()->forget('payment_deadline'); @@ -239,12 +298,8 @@ public function store(Request $request) 'waUrl' => $urlWA ]); } catch (\Exception $e) { - DB::rollBack(); - // Teks Debugging Lengkap - $errorMsg = "Error: " . $e->getMessage() . " | Baris: " . $e->getLine() . " | File: " . basename($e->getFile()); - - // Kirim pesan error lengkap ke layar - return back()->with('error', $errorMsg)->withInput(); + \Illuminate\Support\Facades\DB::rollBack(); + return back()->with('error', 'Error: ' . $e->getMessage())->withInput(); } } } From ea7edd2f0aa59414079954f81823e0ea31a11ca7 Mon Sep 17 00:00:00 2001 From: LailaWulandarii Date: Wed, 7 Jan 2026 17:26:03 +0700 Subject: [PATCH 3/7] update path for saving bukti_bayar, update no_invoice, and edit template confirmation message --- app/Http/Controllers/User/PesanBuketController.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/User/PesanBuketController.php b/app/Http/Controllers/User/PesanBuketController.php index 02fe137..02d9069 100755 --- a/app/Http/Controllers/User/PesanBuketController.php +++ b/app/Http/Controllers/User/PesanBuketController.php @@ -115,9 +115,9 @@ public function store(Request $request) if ($request->hasFile('bukti_bayar')) { $file = $request->file('bukti_bayar'); // Membuat nama file unik berdasarkan waktu agar tidak tertimpa - $namaFile = time() . '_' . $file->getClientOriginalName(); + $namaFile = 'bukti_' . time() . $file->getClientOriginalExtension(); // Pindahkan ke folder public/img/payment - $file->move(public_path('img/payment'), $namaFile); + $file->move(public_path('img/payment/buket'), $namaFile); } $transaksi = TransaksiBuket::create([ @@ -129,13 +129,13 @@ public function store(Request $request) 'bukti_bayar' => 'img/payment/' . $namaFile, 'status_transaksi' => 'menunggu_verifikasi', // Ubah dari status ke status_transaksi 'total_bayar' => $buket->harga, // Tambahkan ini karena total_bayar wajib di fillable - 'no_invoice' => 'INV-' . time(), // Tambahkan invoice sederhana + 'no_invoice' => 'INV-BUKET-' . strtoupper(\Illuminate\Support\Str::random(6)), // Tambahkan invoice sederhana ]); DB::commit(); // 5. Membuat Pesan WhatsApp Otomatis - $pesan = "Halo Admin Flo.do! Saya sudah melakukan pembayaran:\n\n" . + $pesan = "Halo Admin Flo.do! Saya sudah melakukan pembayaran untuk invoice {$transaksi->no_invoice}:\n\n" . "*Data Pemesan:*\n" . "Nama: {$pelanggan->nama}\n" . "WA: {$pelanggan->no_wa}\n\n" . @@ -147,7 +147,7 @@ public function store(Request $request) $urlWA = "https://wa.me/6289673668516?text=" . urlencode($pesan); return redirect()->route('pesan.buket')->with([ - 'success' => 'Pesanan berhasil dikirim!', + 'success' => 'Pesanan Berhasil Dibuat!', 'waUrl' => $urlWA ]); } catch (\Exception $e) { From 23cd1e5b0b33295da4c0dc65b0557ea38491c3e0 Mon Sep 17 00:00:00 2001 From: LailaWulandarii Date: Wed, 7 Jan 2026 17:27:32 +0700 Subject: [PATCH 4/7] set locale to indonesian and clean welcome blade --- resources/views/welcome.blade.php | 408 +----------------------------- 1 file changed, 1 insertion(+), 407 deletions(-) diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php index 8daeec8..90e5276 100755 --- a/resources/views/welcome.blade.php +++ b/resources/views/welcome.blade.php @@ -1,407 +1 @@ - - - - - - - Beranda Admin | Flo.do - - - - - - - - - -
- -
-
- - - -
- -
-
- -

Beranda

- - - -
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
Profile Views
-
112.000
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
Followers
-
183.000
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
Following
-
80.000
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
Saved Post
-
112
-
-
-
-
-
-
-
-
-
-
-

Profile Visit

-
-
-
-
-
-
-
-
-
-
-
-

Profile Visit

-
-
-
-
-
- - - -
Europe
-
-
-
-
862
-
-
-
-
-
-
-
-
- - - -
America
-
-
-
-
375
-
-
-
-
-
-
-
-
- - - -
Indonesia
-
-
-
-
1025
-
-
-
-
-
-
-
-
-
-
-
-

Latest Comments

-
-
-
- - - - - - - - - - - - - - - - - -
NameComment
-
-
- -
-

Si Cantik

-
-
-

Congratulations on your graduation!

-
-
-
- -
-

Si Ganteng

-
-
-

Wow amazing design! Can you make another - tutorial for - this design?

-
-
-
-
-
-
-
-
-
-
-
-
- Face 1 -
-
-
John Duck
-
@johnducky
-
-
-
-
-
-
-

Recent Messages

-
-
-
-
- -
-
-
Hank Schrader
-
@johnducky
-
-
-
-
- -
-
-
Dean Winchester
-
@imdean
-
-
-
-
- -
-
-
John Dodol
-
@dodoljohn
-
-
-
- -
-
-
-
-
-

Visitors Profile

-
-
-
-
-
-
-
-
- -
- -
-
-
- - - - - - - - - - - - - - +tes From 5b5fbf1c504c71737988c9d02a31d6bc715ab39c Mon Sep 17 00:00:00 2001 From: LailaWulandarii Date: Wed, 7 Jan 2026 17:28:52 +0700 Subject: [PATCH 5/7] update name input, error validation, and date format in booking foto feature --- resources/views/user/detail-foto.blade.php | 95 +++++++++-- .../views/user/pembayaran-foto.blade.php | 158 +++++++++++++----- 2 files changed, 195 insertions(+), 58 deletions(-) diff --git a/resources/views/user/detail-foto.blade.php b/resources/views/user/detail-foto.blade.php index c34f257..0618321 100755 --- a/resources/views/user/detail-foto.blade.php +++ b/resources/views/user/detail-foto.blade.php @@ -18,7 +18,7 @@ @csrf {{-- Kotak simpan data sementara di dalam form --}} - +
@@ -35,8 +35,16 @@ class="detailfoto-thumb rounded-4">

{{ $foto->nama }}

-

Rp {{ number_format($foto->harga, 0, ',', '.') }} -

+
+

+ Rp {{ number_format($foto->harga, 0, ',', '.') }} +

+ | + + {{ $foto->durasi }} Menit Sesi + +

{{ $foto->deskripsi }}

@@ -78,10 +86,12 @@ class="detailfoto-thumb rounded-4"> 10:00

Pilih Tanggal dan Waktu

+

Slot abu-abu berarti jadwal sudah penuh. Silakan pilih waktu lain yang + tersedia.

-
+
@include('user.components.calendar-grid')
@@ -89,13 +99,16 @@ class="detailfoto-thumb rounded-4">
Jam Tersedia
@for ($hour = 9; $hour <= 20; $hour++) + {{-- Slot Jam Genap (contoh: 09:00) --}} + + {{-- Slot Jam Setengah (contoh: 09:30) --}} @endfor
@@ -113,12 +126,13 @@ class="detailfoto-thumb rounded-4">
- + @endsection From 4d7dd13088e218491531060f87fc39ea8841763a Mon Sep 17 00:00:00 2001 From: LailaWulandarii Date: Wed, 7 Jan 2026 17:29:37 +0700 Subject: [PATCH 6/7] update btn text and edit payment info --- resources/views/user/detail-buket.blade.php | 2 +- .../views/user/pembayaran-buket.blade.php | 51 +++++++++++++++---- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/resources/views/user/detail-buket.blade.php b/resources/views/user/detail-buket.blade.php index dea4e45..26aed68 100755 --- a/resources/views/user/detail-buket.blade.php +++ b/resources/views/user/detail-buket.blade.php @@ -71,7 +71,7 @@ class="detailbuket-spec-val">{{ ucfirst(str_replace('_', ' ', $buket->kategori))
- Beli Sekarang + Pesan Sekarang @php $waText = diff --git a/resources/views/user/pembayaran-buket.blade.php b/resources/views/user/pembayaran-buket.blade.php index c8227df..5ca4b99 100755 --- a/resources/views/user/pembayaran-buket.blade.php +++ b/resources/views/user/pembayaran-buket.blade.php @@ -116,12 +116,12 @@ class="form-control formulirbuket-input @error('waktu_ambil') is-invalid @enderr
-

1234567890

-

a.n Flo.do

+

6860305231

+

a.n Deborah Febryana

+ class="btn btn-sm btn-outline-secondary py-1 px-2 btn-copy" + data-clipboard-text="6860305231" style="font-size: 12px">salin
@@ -132,17 +132,50 @@ class="btn btn-sm btn-outline-secondary py-1 px-3 x-small btn-copy"
-

0987654321

-

a.n Flo.do

+

005601002337563

+

a.n Deborah Febryana

+ class="btn btn-sm btn-outline-secondary py-1 px-2 btn-copy" + data-clipboard-text="005601002337563" + style="font-size: 12px">salin +
+ + +
+
+
+ ShopeePay +
+
+
+

082133958469

+

a.n Deborah Febryana

+
+ +
+
+
+
+
+
+ Dana +
+
+
+

082133958469

+

a.n Deborah Febryana

+
+
-

Upload Bukti Pembayaran

Date: Wed, 7 Jan 2026 17:30:44 +0700 Subject: [PATCH 7/7] set locale to indonesia, edit paket foto seeder and edit main admin css --- app/Providers/AppServiceProvider.php | 9 +++++++-- database/seeders/PaketFotoSeeder.php | 14 +++++++------- public/css/app.css | 13 ++++++++----- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 452e6b6..e31cb23 100755 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use Carbon\Carbon; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider @@ -17,8 +18,12 @@ public function register(): void /** * Bootstrap any application services. */ - public function boot(): void + public function boot() { - // + // Set locale Carbon secara global ke Indonesia + Carbon::setLocale('id'); + + // Opsional: Set timezone jika diperlukan + date_default_timezone_set('Asia/Jakarta'); } } diff --git a/database/seeders/PaketFotoSeeder.php b/database/seeders/PaketFotoSeeder.php index 8270d5c..48dce51 100755 --- a/database/seeders/PaketFotoSeeder.php +++ b/database/seeders/PaketFotoSeeder.php @@ -21,49 +21,49 @@ public function run(): void 'nama' => 'Couple', 'harga' => 45000, 'deskripsi' => 'Untuk 2 orang, 15 menit sesi foto sepuasnya, 5 menit sesi pilih foto, 1 lembar print out foto ukutan 4R.', - 'foto' => 'img/foto/grup.jpeg', + 'foto' => 'img/foto/couple.jpeg', 'durasi' => '15', ], [ 'nama' => 'Group', 'harga' => 80000, 'deskripsi' => 'Untuk 3-5 orang, 15 menit sesi foto sepuasnya, 5 menit sesi pilih foto, 3 lembar print out foto ukutan 4R.', - 'foto' => 'img/foto/pas-foto.jpg', + 'foto' => 'img/foto/1767368465_grup.jpeg', 'durasi' => '15', ], [ 'nama' => 'Pas Foto Paket 1', 'harga' => 25000, 'deskripsi' => 'Sesi pas foto untuk 1 orang dengan 8x shoot fotografer. Termasuk 1 file foto edit dan bebas request warna background. Paket cetak: ukuran 2x3 (12 lembar).', - 'foto' => 'img/foto/pas-foto.jpg', + 'foto' => 'img/foto/1767368572_pas-foto.jpg', 'durasi' => '0', ], [ 'nama' => 'Pas Foto Paket 2', 'harga' => 25000, 'deskripsi' => 'Sesi pas foto untuk 1 orang dengan 8x shoot fotografer. Termasuk 1 file foto edit dan bebas request warna background. Paket cetak: ukuran 3x4 (8 lembar).', - 'foto' => 'img/foto/pas-foto.jpg', + 'foto' => 'img/foto/1767368572_pas-foto.jpg', 'durasi' => '0', ], [ 'nama' => 'Pas Foto Paket 3', 'harga' => 25000, 'deskripsi' => 'Sesi pas foto untuk 1 orang dengan 8x shoot fotografer. Termasuk 1 file foto edit dan bebas request warna background. Paket cetak: ukuran 4x6 (4 lembar).', - 'foto' => 'img/foto/pas-foto.jpg', + 'foto' => 'img/foto/1767368572_pas-foto.jpg', 'durasi' => '0', ], [ 'nama' => 'Pas Foto Paket 4', 'harga' => 25000, 'deskripsi' => 'Sesi pas foto untuk 1 orang dengan 8x shoot fotografer. Termasuk 1 file foto edit dan bebas request warna background. Paket cetak campur: ukuran 4x6 (2 lembar), 3x4 (3 lembar), dan 2x3 (4 lembar).', - 'foto' => 'img/foto/pas-foto.jpg', + 'foto' => 'img/foto/1767368572_pas-foto.jpg', 'durasi' => '0', ], [ 'nama' => 'Background Biru', 'harga' => 95000, 'deskripsi' => 'Paket foto untuk 2 orang. Termasuk: Max 10x shoot fotografer (formal), 10 menit self-photo (bebas), dan semua file dikirim via Google Drive. Cetak 2 Foto (4R) terdiri dari: (2x3) 8 lembar, (3x4) 6 lembar, dan (4x6) 4 lembar.', - 'foto' => 'img/foto/latar-biru.jpeg', + 'foto' => 'img/foto/1766833654_latar biru 1.jpeg', 'durasi' => '20', ], ]; diff --git a/public/css/app.css b/public/css/app.css index bea78fa..b3294ee 100755 --- a/public/css/app.css +++ b/public/css/app.css @@ -870,8 +870,8 @@ .footer-full { background-color: var(--bs-primary); color: white; font-size: var(--fs-small); - padding: 1rem; - margin-top: 2rem; + padding: .5rem; + margin-top: 1rem; margin-left: -2rem; margin-right: -2rem; margin-bottom: -2rem; @@ -2313,9 +2313,12 @@ .dataTable-table>tbody { vertical-align: inherit } -.table>thead, -.dataTable-table>thead { - vertical-align: bottom +.table>thead>tr>th, +.dataTable-table>thead>tr>th { + text-align: center !important; + /* Meniru perilaku .text-center */ + vertical-align: middle; + /* Opsional: agar teks berada di tengah secara vertikal */ } .table-group-divider {