101 lines
4.1 KiB
PHP
101 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\TransaksiBuket;
|
|
use Illuminate\Http\Request;
|
|
|
|
class PesananBuketController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
$pesanan = TransaksiBuket::whereIn('status_transaksi', ['menunggu_verifikasi', 'diterima'])
|
|
->orderBy('created_at', 'ASC')
|
|
->get();
|
|
|
|
return view('admin.pesanan.buket', compact('pesanan'));
|
|
}
|
|
|
|
public function updateStatus(Request $request, $id)
|
|
{
|
|
try {
|
|
// 1. Ambil data dengan relasi
|
|
$pesanan = \App\Models\TransaksiBuket::with(['pelanggan', 'buket'])->findOrFail($id);
|
|
|
|
// 2. Tentukan status & session flash sekaligus agar tidak dobel
|
|
if ($request->jenis === 'terima') {
|
|
$status = 'diterima';
|
|
session()->flash('success', "Pesanan {$pesanan->no_invoice} telah diterima!"); // Alert Hijau
|
|
} elseif ($request->jenis === 'selesai') {
|
|
$status = 'selesai';
|
|
session()->flash('success', "Pesanan {$pesanan->no_invoice} berhasil diselesaikan!");
|
|
} else {
|
|
$status = 'ditolak';
|
|
session()->flash('error', "Pesanan {$pesanan->no_invoice} telah ditolak!"); // Alert Merah
|
|
}
|
|
|
|
// 3. Update database
|
|
$pesanan->update(['status_transaksi' => $status]);
|
|
|
|
// 4. Siapkan Data untuk Pesan WA
|
|
$nama = $pesanan->pelanggan->nama; // Pastikan kolomnya 'nama', bukan 'nama_lengkap'
|
|
$produk = $pesanan->buket->nama;
|
|
$tgl_obj = \Carbon\Carbon::parse($pesanan->tgl_ambil)->locale('id');
|
|
$tanggal = $tgl_obj->translatedFormat('l, d F Y');
|
|
$waktu = $tgl_obj->format('H:i');
|
|
|
|
$total = number_format($pesanan->total_bayar, 0, ',', '.');
|
|
$req = $pesanan->request ?? '-';
|
|
$ucapan = $pesanan->ucapan ?? '-';
|
|
$invoice = $pesanan->no_invoice;
|
|
|
|
// 5. Susun Pesan berdasarkan kondisi
|
|
$msg = null;
|
|
if ($status === 'diterima') {
|
|
$msg = "Halo Kak *{$nama}*,\n\n" .
|
|
"Pesanan Anda dengan Nomor Invoice: *{$invoice}* telah kami *TERIMA* dan masuk dalam daftar proses pengerjaan.\n\n" .
|
|
"*Rincian Pesanan:*\n" .
|
|
"- *Produk:* {$produk}\n" .
|
|
"- *Total Bayar:* Rp {$total}\n" .
|
|
"- *Request:* {$req}\n" .
|
|
"- *Ucapan:* \"{$ucapan}\"\n" .
|
|
"- *Waktu Pengambilan:* {$tanggal} pukul {$waktu} WIB\n\n" .
|
|
"Mohon simpan rincian ini dan ditunggu info selanjutnya ya Kak. Terima kasih!";
|
|
} elseif ($status === 'ditolak') {
|
|
$msg = "Halo Kak *{$nama}*,\n\n" .
|
|
"Mengenai pesanan Anda dengan Nomor Invoice: *{$invoice}* terpaksa kami *TOLAK* dikarenakan:\n\n" .
|
|
"*[TULIS ALASAN DI SINI]*\n\n" .
|
|
"*Rincian Pesanan:*\n" .
|
|
"- *Produk:* {$produk}\n" .
|
|
"- *Total Bayar:* Rp {$total}\n" .
|
|
"- *Waktu Pengambilan:* {$tanggal}\n\n" .
|
|
"Admin kami akan segera menghubungi Kakak terkait proses pengembalian dana. Mohon maaf atas ketidaknyamanannya.";
|
|
}
|
|
|
|
// 6. Format Nomor WhatsApp
|
|
$wa_url = null;
|
|
|
|
if ($msg) {
|
|
$no_wa = preg_replace('/[^0-9]/', '', $pesanan->pelanggan->no_wa);
|
|
|
|
if (str_starts_with($no_wa, '0')) {
|
|
$no_wa = '62' . substr($no_wa, 1);
|
|
} elseif (str_starts_with($no_wa, '8')) {
|
|
$no_wa = '62' . $no_wa;
|
|
}
|
|
|
|
$wa_url = "https://wa.me/{$no_wa}?text=" . urlencode($msg);
|
|
}
|
|
|
|
// 7. Kembalikan Response JSON
|
|
return response()->json([
|
|
'success' => true,
|
|
'wa_url' => $wa_url
|
|
]);
|
|
} catch (\Exception $e) {
|
|
return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
|
|
}
|
|
}
|
|
}
|