refactor BookingFotoController and PesanBuketController to remove commented code and improve readability
This commit is contained in:
parent
54e9f32413
commit
d8b8e6e832
|
|
@ -27,16 +27,11 @@ public function detail($id)
|
||||||
{
|
{
|
||||||
$foto = PaketFoto::findOrFail($id);
|
$foto = PaketFoto::findOrFail($id);
|
||||||
\Carbon\Carbon::setLocale('id');
|
\Carbon\Carbon::setLocale('id');
|
||||||
// Jika add-ons disimpan di DB, ambil juga:
|
|
||||||
$additionals = Additional::all();
|
$additionals = Additional::all();
|
||||||
// Logika Tanggal
|
$start = \Carbon\Carbon::now();
|
||||||
$start = \Carbon\Carbon::now(); // Mulai hari ini
|
$end = \Carbon\Carbon::now()->addMonth();
|
||||||
$end = \Carbon\Carbon::now()->addMonth(); // Maksimal 1 bulan ke depan
|
|
||||||
// Untuk navigasi panah
|
|
||||||
$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 view('user.detail-foto', compact('foto', 'additionals', 'start', 'end', 'currentMonthLabel', 'prevMonth', 'nextMonth'));
|
return view('user.detail-foto', compact('foto', 'additionals', 'start', 'end', 'currentMonthLabel', 'prevMonth', 'nextMonth'));
|
||||||
}
|
}
|
||||||
|
|
@ -46,8 +41,6 @@ public function loadCalendar(Request $request)
|
||||||
$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);
|
||||||
|
|
||||||
// Data Navigasi
|
|
||||||
$prevMonth = $start->copy()->subMonth();
|
$prevMonth = $start->copy()->subMonth();
|
||||||
$nextMonth = $start->copy()->addMonth();
|
$nextMonth = $start->copy()->addMonth();
|
||||||
$currentMonthLabel = $start->isoFormat('MMMM YYYY');
|
$currentMonthLabel = $start->isoFormat('MMMM YYYY');
|
||||||
|
|
@ -58,7 +51,6 @@ public function loadCalendar(Request $request)
|
||||||
'currentMonthLabel'
|
'currentMonthLabel'
|
||||||
))->render();
|
))->render();
|
||||||
|
|
||||||
// Return JSON agar JavaScript bisa membacanya sebagai data.html
|
|
||||||
return response()->json(['html' => $html]);
|
return response()->json(['html' => $html]);
|
||||||
}
|
}
|
||||||
public function cekSlot(Request $request)
|
public function cekSlot(Request $request)
|
||||||
|
|
@ -72,15 +64,11 @@ public function cekSlot(Request $request)
|
||||||
}
|
}
|
||||||
public function formulir(Request $request)
|
public function formulir(Request $request)
|
||||||
{
|
{
|
||||||
// 1. Ambil Data Paket
|
|
||||||
$foto = PaketFoto::findOrFail($request->id_paket);
|
$foto = PaketFoto::findOrFail($request->id_paket);
|
||||||
$durasiDasar = $foto->durasi; // Ambil durasi paket asli
|
$durasiDasar = $foto->durasi;
|
||||||
|
|
||||||
// 2. Hitung Total Add-ons & Tambahan Menit
|
|
||||||
$addonsDetails = [];
|
$addonsDetails = [];
|
||||||
$totalAddon = 0;
|
$totalAddon = 0;
|
||||||
$tambahanMenit = 0; // Inisialisasi tambahan waktu
|
$tambahanMenit = 0;
|
||||||
|
|
||||||
if ($request->has('addons')) {
|
if ($request->has('addons')) {
|
||||||
foreach ($request->addons as $id => $qty) {
|
foreach ($request->addons as $id => $qty) {
|
||||||
if ($qty > 0) {
|
if ($qty > 0) {
|
||||||
|
|
@ -89,10 +77,9 @@ public function formulir(Request $request)
|
||||||
$subtotal = $add->harga * $qty;
|
$subtotal = $add->harga * $qty;
|
||||||
$totalAddon += $subtotal;
|
$totalAddon += $subtotal;
|
||||||
|
|
||||||
// LOGIKA TAMBAHAN WAKTU BERDASARKAN ID
|
if ($id == 4) {
|
||||||
if ($id == 4) { // Tambah waktu/5 menit
|
|
||||||
$tambahanMenit += (5 * $qty);
|
$tambahanMenit += (5 * $qty);
|
||||||
} elseif ($id == 6) { // Tambah 10 menit sesi Spotlight
|
} elseif ($id == 6) {
|
||||||
$tambahanMenit += (10 * $qty);
|
$tambahanMenit += (10 * $qty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -106,44 +93,34 @@ public function formulir(Request $request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. Hitung Ulang Jam Selesai
|
|
||||||
$totalDurasi = $durasiDasar + $tambahanMenit;
|
$totalDurasi = $durasiDasar + $tambahanMenit;
|
||||||
$jamMulai = \Carbon\Carbon::createFromFormat('H:i', $request->jam_mulai);
|
$jamMulai = \Carbon\Carbon::createFromFormat('H:i', $request->jam_mulai);
|
||||||
$jamSelesaiBaru = $jamMulai->copy()->addMinutes($totalDurasi)->format('H:i');
|
$jamSelesaiBaru = $jamMulai->copy()->addMinutes($totalDurasi)->format('H:i');
|
||||||
|
|
||||||
// 4. Hitung Grand Total
|
|
||||||
$grandTotal = $foto->harga + $totalAddon;
|
$grandTotal = $foto->harga + $totalAddon;
|
||||||
|
|
||||||
// 5. Logika Deadline Pembayaran (Tetap sama)
|
|
||||||
if (!session()->has('payment_deadline')) {
|
if (!session()->has('payment_deadline')) {
|
||||||
$deadline = now()->addHours(2);
|
$deadline = now()->addHours(2);
|
||||||
session()->put('payment_deadline', $deadline);
|
session()->put('payment_deadline', $deadline);
|
||||||
} else {
|
} else {
|
||||||
$deadline = session('payment_deadline');
|
$deadline = session('payment_deadline');
|
||||||
}
|
}
|
||||||
|
|
||||||
$sisaWaktu = now()->diffInSeconds($deadline, false);
|
$sisaWaktu = now()->diffInSeconds($deadline, false);
|
||||||
|
|
||||||
if ($sisaWaktu <= 0) {
|
if ($sisaWaktu <= 0) {
|
||||||
session()->forget(['payment_deadline', 'addons']);
|
session()->forget(['payment_deadline', 'addons']);
|
||||||
return redirect()->route('booking.foto')->with('error', 'Waktu pembayaran telah habis.');
|
return redirect()->route('booking.foto')->with('error', 'Waktu pembayaran telah habis.');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. Kirim jam_selesai yang sudah diperbarui ke View
|
|
||||||
return view('user.pembayaran-foto', compact(
|
return view('user.pembayaran-foto', compact(
|
||||||
'foto',
|
'foto',
|
||||||
'request',
|
'request',
|
||||||
'addonsDetails',
|
'addonsDetails',
|
||||||
'grandTotal',
|
'grandTotal',
|
||||||
'sisaWaktu',
|
'sisaWaktu',
|
||||||
'jamSelesaiBaru' // Variabel baru untuk ditampilkan di blade
|
'jamSelesaiBaru'
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
public function cancelBooking()
|
public function cancelBooking()
|
||||||
{
|
{
|
||||||
session()->forget(['payment_deadline', 'addons']); // Hapus session timer & data
|
session()->forget(['payment_deadline', 'addons']);
|
||||||
return redirect()->route('booking.foto'); // Kembali ke katalog utama
|
return redirect()->route('booking.foto');
|
||||||
}
|
}
|
||||||
public function store(Request $request)
|
public function store(Request $request)
|
||||||
{
|
{
|
||||||
|
|
@ -155,7 +132,6 @@ public function store(Request $request)
|
||||||
'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.',
|
'required' => 'Kolom :attribute wajib diisi.',
|
||||||
'string' => 'Input :attribute harus berupa teks valid.',
|
'string' => 'Input :attribute harus berupa teks valid.',
|
||||||
'min' => ':attribute terlalu pendek, minimal :min karakter.',
|
'min' => ':attribute terlalu pendek, minimal :min karakter.',
|
||||||
|
|
@ -166,25 +142,20 @@ public function store(Request $request)
|
||||||
'after_or_equal' => ':attribute tidak boleh tanggal yang sudah lewat.',
|
'after_or_equal' => ':attribute tidak boleh tanggal yang sudah lewat.',
|
||||||
'image' => ':attribute harus berupa file gambar.',
|
'image' => ':attribute harus berupa file gambar.',
|
||||||
'mimes' => 'Format :attribute harus jpeg, png, atau jpg.',
|
'mimes' => 'Format :attribute harus jpeg, png, atau jpg.',
|
||||||
'bukti_bayar.max' => 'Ukuran :attribute maksimal adalah 2MB.',
|
'bukti_bayar.max' => 'Ukuran :attribute maksimal adalah 2MB.',
|
||||||
], [
|
], [
|
||||||
'nama' => 'nama pemesan',
|
'nama' => 'nama pemesan',
|
||||||
'no_wa' => 'nomor WhatsApp',
|
'no_wa' => 'nomor WhatsApp',
|
||||||
'bukti_bayar' => 'bukti pembayaran',
|
'bukti_bayar' => 'bukti pembayaran',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
DB::beginTransaction(); // Mulai Transaksi Database
|
DB::beginTransaction();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 2. Ambil Data Paket & Hitung Waktu
|
|
||||||
$paket = PaketFoto::findOrFail($request->id_paket);
|
$paket = PaketFoto::findOrFail($request->id_paket);
|
||||||
|
|
||||||
// Asumsi durasi default 20 menit (atau ambil dari database jika ada kolom durasi)
|
|
||||||
$durasiMenit = $paket->durasi;
|
$durasiMenit = $paket->durasi;
|
||||||
$jamMulai = \Carbon\Carbon::createFromFormat('H:i', $request->jam_mulai);
|
$jamMulai = \Carbon\Carbon::createFromFormat('H:i', $request->jam_mulai);
|
||||||
$jamSelesai = $jamMulai->copy()->addMinutes($durasiMenit);
|
$jamSelesai = $jamMulai->copy()->addMinutes($durasiMenit);
|
||||||
|
|
||||||
// 3. Cek Slot Sekali Lagi (Mencegah Race Condition)
|
|
||||||
$isTaken = BookingFoto::where('tgl_booking', $request->tgl_booking)
|
$isTaken = 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', 'selesai'])
|
||||||
|
|
@ -194,13 +165,10 @@ public function store(Request $request)
|
||||||
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
|
|
||||||
$pelanggan = Pelanggan::firstOrCreate(
|
$pelanggan = Pelanggan::firstOrCreate(
|
||||||
['no_wa' => $request->no_wa],
|
['no_wa' => $request->no_wa],
|
||||||
['nama' => $request->nama]
|
['nama' => $request->nama]
|
||||||
);
|
);
|
||||||
// 6. Hitung Grand Total (Paket + Additional)
|
|
||||||
// Kita hitung ulang di server agar aman dari manipulasi inspect element
|
|
||||||
$grandTotal = $paket->harga;
|
$grandTotal = $paket->harga;
|
||||||
$listAdditional = [];
|
$listAdditional = [];
|
||||||
$totalDurasi = $durasiMenit;
|
$totalDurasi = $durasiMenit;
|
||||||
|
|
@ -212,9 +180,8 @@ public function store(Request $request)
|
||||||
$subtotal = $add->harga * $qty;
|
$subtotal = $add->harga * $qty;
|
||||||
$grandTotal += $subtotal;
|
$grandTotal += $subtotal;
|
||||||
|
|
||||||
// Logika Tambah Waktu berdasarkan ID yang sebelumnya kita bahas
|
if ($idAddon == 4) $totalDurasi += (5 * $qty);
|
||||||
if ($idAddon == 4) $totalDurasi += (5 * $qty); // Tambah 5 menit
|
if ($idAddon == 6) $totalDurasi += (10 * $qty);
|
||||||
if ($idAddon == 6) $totalDurasi += (10 * $qty); // Tambah 10 menit
|
|
||||||
|
|
||||||
$listAdditional[] = [
|
$listAdditional[] = [
|
||||||
'id_additional' => $idAddon,
|
'id_additional' => $idAddon,
|
||||||
|
|
@ -226,35 +193,25 @@ public function store(Request $request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$jamMulai = \Carbon\Carbon::createFromFormat('H:i', $request->jam_mulai);
|
$jamMulai = \Carbon\Carbon::createFromFormat('H:i', $request->jam_mulai);
|
||||||
$jamSelesai = $jamMulai->copy()->addMinutes($totalDurasi);
|
$jamSelesai = $jamMulai->copy()->addMinutes($totalDurasi);
|
||||||
|
|
||||||
// 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'])
|
->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 Data Pelanggan
|
|
||||||
$pelanggan = \App\Models\Pelanggan::create([
|
$pelanggan = \App\Models\Pelanggan::create([
|
||||||
'nama' => $request->nama,
|
'nama' => $request->nama,
|
||||||
'no_wa' => $request->no_wa
|
'no_wa' => $request->no_wa
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// 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();
|
||||||
$pathBukti = $file->storeAs('img/payment/foto', $namaFile, 'public');
|
$pathBukti = $file->storeAs('img/payment/foto', $namaFile, 'public');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. Simpan Booking Utama
|
|
||||||
$booking = \App\Models\BookingFoto::create([
|
$booking = \App\Models\BookingFoto::create([
|
||||||
'no_invoice' => 'INV-FOTO-' . strtoupper(\Illuminate\Support\Str::random(6)),
|
'no_invoice' => 'INV-FOTO-' . strtoupper(\Illuminate\Support\Str::random(6)),
|
||||||
'id_pelanggan' => $pelanggan->id_pelanggan,
|
'id_pelanggan' => $pelanggan->id_pelanggan,
|
||||||
|
|
@ -266,8 +223,6 @@ public function store(Request $request)
|
||||||
'bukti_bayar' => $pathBukti,
|
'bukti_bayar' => $pathBukti,
|
||||||
'status_booking' => 'menunggu_verifikasi'
|
'status_booking' => 'menunggu_verifikasi'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// 7. Simpan Detail Additional
|
|
||||||
foreach ($listAdditional as $item) {
|
foreach ($listAdditional as $item) {
|
||||||
\App\Models\DetailAdditional::create([
|
\App\Models\DetailAdditional::create([
|
||||||
'id_booking' => $booking->id_booking,
|
'id_booking' => $booking->id_booking,
|
||||||
|
|
@ -276,18 +231,15 @@ public function store(Request $request)
|
||||||
'subtotal' => $item['subtotal']
|
'subtotal' => $item['subtotal']
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
\Illuminate\Support\Facades\DB::commit();
|
\Illuminate\Support\Facades\DB::commit();
|
||||||
$txtAddons = "";
|
$txtAddons = "";
|
||||||
if (count($listAdditional) > 0) {
|
if (count($listAdditional) > 0) {
|
||||||
$txtAddons = "*Additional:*"; // Judul
|
$txtAddons = "*Additional:*";
|
||||||
foreach ($listAdditional as $item) {
|
foreach ($listAdditional as $item) {
|
||||||
// Ambil nama yang tadi kita titip
|
|
||||||
$txtAddons .= "\n- " . $item['nama_barang'] . " (" . $item['qty'] . "x)";
|
$txtAddons .= "\n- " . $item['nama_barang'] . " (" . $item['qty'] . "x)";
|
||||||
}
|
}
|
||||||
$txtAddons .= "\n"; // Kasih jarak baris
|
$txtAddons .= "\n";
|
||||||
}
|
}
|
||||||
// 8. Redirect ke WhatsApp
|
|
||||||
$pesan = "Halo Admin Flo.do! Saya sudah melakukan pembayaran untuk invoice {$booking->no_invoice}:\n\n" .
|
$pesan = "Halo Admin Flo.do! Saya sudah melakukan pembayaran untuk invoice {$booking->no_invoice}:\n\n" .
|
||||||
"*Data Pemesan:*\n" .
|
"*Data Pemesan:*\n" .
|
||||||
"Nama: {$request->nama}\n" .
|
"Nama: {$request->nama}\n" .
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,6 @@ public function formulir($slug_id)
|
||||||
public function store(Request $request)
|
public function store(Request $request)
|
||||||
{
|
{
|
||||||
$buket = Buket::findOrFail($request->id_buket);
|
$buket = Buket::findOrFail($request->id_buket);
|
||||||
// 1. Validasi Detail dengan Pesan Kustom & Alias
|
|
||||||
$validator = Validator::make($request->all(), [
|
$validator = Validator::make($request->all(), [
|
||||||
'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',
|
||||||
|
|
@ -72,7 +71,6 @@ public function store(Request $request)
|
||||||
'request_khusus' => 'nullable|string|max:255',
|
'request_khusus' => 'nullable|string|max:255',
|
||||||
'ucapan' => 'nullable|string|max:500',
|
'ucapan' => 'nullable|string|max:500',
|
||||||
], [
|
], [
|
||||||
// Detail Pesan Kustom
|
|
||||||
'required' => 'Kolom :attribute wajib diisi.',
|
'required' => 'Kolom :attribute wajib diisi.',
|
||||||
'string' => 'Input :attribute harus berupa teks valid.',
|
'string' => 'Input :attribute harus berupa teks valid.',
|
||||||
'min' => ':attribute terlalu pendek, minimal :min karakter.',
|
'min' => ':attribute terlalu pendek, minimal :min karakter.',
|
||||||
|
|
@ -87,7 +85,6 @@ public function store(Request $request)
|
||||||
'waktu_ambil.after_or_equal' => 'Jam operasional kami mulai pukul 09:00.',
|
'waktu_ambil.after_or_equal' => 'Jam operasional kami mulai pukul 09:00.',
|
||||||
'waktu_ambil.before_or_equal' => 'Jam operasional kami berakhir pukul 21:00.',
|
'waktu_ambil.before_or_equal' => 'Jam operasional kami berakhir pukul 21:00.',
|
||||||
], [
|
], [
|
||||||
// Alias Atribut agar lebih ramah
|
|
||||||
'nama' => 'nama pemesan',
|
'nama' => 'nama pemesan',
|
||||||
'no_wa' => 'nomor WhatsApp',
|
'no_wa' => 'nomor WhatsApp',
|
||||||
'tgl_ambil' => 'tanggal pengambilan',
|
'tgl_ambil' => 'tanggal pengambilan',
|
||||||
|
|
@ -96,28 +93,22 @@ public function store(Request $request)
|
||||||
'ucapan' => 'kartu ucapan',
|
'ucapan' => 'kartu ucapan',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Jika validasi gagal
|
|
||||||
if ($validator->fails()) {
|
if ($validator->fails()) {
|
||||||
return back()->withErrors($validator)->withInput();
|
return back()->withErrors($validator)->withInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
db::beginTransaction();
|
db::beginTransaction();
|
||||||
|
|
||||||
// 2. Simpan ke Tabel Pelanggan dulu
|
|
||||||
$pelanggan = Pelanggan::create([
|
$pelanggan = Pelanggan::create([
|
||||||
'nama' => $request->nama,
|
'nama' => $request->nama,
|
||||||
'no_wa' => $request->no_wa,
|
'no_wa' => $request->no_wa,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// 3. Handle File Upload Bukti Bayar
|
|
||||||
$namaFile = null;
|
$namaFile = 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();
|
||||||
$pathBukti = $file->storeAs('img/payment/buket', $namaFile, 'public');
|
$pathBukti = $file->storeAs('img/payment/buket', $namaFile, 'public');
|
||||||
}
|
}
|
||||||
|
|
||||||
$transaksi = TransaksiBuket::create([
|
$transaksi = TransaksiBuket::create([
|
||||||
'id_pelanggan' => $pelanggan->id_pelanggan,
|
'id_pelanggan' => $pelanggan->id_pelanggan,
|
||||||
'id_buket' => $request->id_buket,
|
'id_buket' => $request->id_buket,
|
||||||
|
|
@ -132,7 +123,6 @@ public function store(Request $request)
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|
||||||
// 5. Membuat Pesan WhatsApp Otomatis
|
|
||||||
$pesan = "Halo Admin Flo.do! Saya sudah melakukan pembayaran untuk invoice {$transaksi->no_invoice}:\n\n" .
|
$pesan = "Halo Admin Flo.do! Saya sudah melakukan pembayaran untuk invoice {$transaksi->no_invoice}:\n\n" .
|
||||||
"*Data Pemesan:*\n" .
|
"*Data Pemesan:*\n" .
|
||||||
"Nama: {$pelanggan->nama}\n" .
|
"Nama: {$pelanggan->nama}\n" .
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue