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));
}
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();
}
}
}
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) {
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 {
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/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 --}}
-
+