TIF_NGANJUK_E41220418/app/Http/Controllers/Admin/PesananFotoController.php

121 lines
4.8 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\BookingFoto;
use Illuminate\Http\Request;
class PesananFotoController extends Controller
{
public function index()
{
$pesanan = BookingFoto::with([
'pelanggan',
'paketFoto',
'detailAdditional.additional'
])
->whereIn('status_booking', ['menunggu_verifikasi', 'diterima'])
->latest()
->get();
return view('admin.pesanan.foto', compact('pesanan'));
}
public function updateStatus(Request $request, $id)
{
try {
// 1. Ambil data dengan relasi lengkap (Eager Loading)
$pesanan = \App\Models\BookingFoto::with(['pelanggan', 'paketFoto', 'detailAdditional.additional'])->findOrFail($id);
// 2. Tentukan status & session flash
if ($request->jenis === 'terima') {
$status = '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 {
$status = 'ditolak';
session()->flash('error', "Booking {$pesanan->no_invoice} telah ditolak!");
}
// 3. Update database (Pastikan nama kolom status_booking sesuai migrasimu)
$pesanan->update(['status_booking' => $status]);
// 4. Siapkan Data Dasar
$nama = $pesanan->pelanggan->nama;
$paket = $pesanan->paketFoto->nama;
$tgl_obj = \Carbon\Carbon::parse($pesanan->tgl_booking)->locale('id');
$tanggal = $tgl_obj->translatedFormat('l, d F Y');
// Jam mulai dan selesai
$jam_mulai = \Carbon\Carbon::parse($pesanan->jam_mulai)->format('H:i');
$jam_selesai = \Carbon\Carbon::parse($pesanan->jam_selesai)->format('H:i');
$total = number_format($pesanan->total_bayar, 0, ',', '.');
$invoice = $pesanan->no_invoice;
// 5. Olah Data Additional untuk list di WA
$list_additional = "";
if ($pesanan->detailAdditional->count() > 0) {
foreach ($pesanan->detailAdditional as $item) {
$list_additional .= "- " . $item->additional->nama . " (x" . $item->qty . ")\n";
}
} else {
$list_additional = "- Tidak ada additional\n";
}
// 6. Susun Pesan WA
$msg = null;
if ($status === 'diterima') {
$msg = "Halo Kak *{$nama}* ,\n\n" .
"Booking foto Anda dengan Invoice: *{$invoice}* telah kami *TERIMA*. \n\n" .
"*Rincian Booking:*\n" .
"- *Paket:* {$paket}\n" .
"*Additional:*\n{$list_additional}" .
"- *Total Bayar:* Rp {$total}\n\n" .
"*Jadwal Sesi Foto:*\n" .
" Tanggal: {$tanggal}\n" .
" Jam: {$jam_mulai} - {$jam_selesai} WIB\n\n" .
"Mohon datang 15 menit sebelum jadwal dimulai ya Kak. Sampai jumpa di studio! ";
} elseif ($status === 'ditolak') {
$msg = "Halo Kak *{$nama}*,\n\n" .
"Mohon maaf, booking foto Anda dengan Invoice *{$invoice}* terpaksa kami *TOLAK* dikarenakan:\n\n" .
"*[TULIS ALASAN DI SINI]*\n\n" .
"*Rincian Booking:*\n" .
"- *Paket:* {$paket}\n" .
"*Additional:*\n{$list_additional}" .
"- *Total Bayar:* Rp {$total}\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. ";
}
// 7. Format Nomor WhatsApp (Sesuaikan kolom: no_hp / no_wa)
$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);
}
return response()->json([
'success' => true,
'wa_url' => $wa_url
]);
} catch (\Exception $e) {
return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
}
}
}