TIF_NGANJUK_E41220418/app/Http/Controllers/User/PesanBuketController.php

147 lines
6.0 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use App\Models\Buket;
use App\Models\Pelanggan;
use App\Models\TransaksiBuket;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
class PesanBuketController extends Controller
{
public function index(Request $request)
{
$query = Buket::query();
if ($request->filled('keyword')) {
$search = $request->keyword;
$query->where(function ($q) use ($search) {
$q->where('nama', 'like', '%' . $search . '%')
->orWhere('deskripsi', 'like', '%' . $search . '%');
});
}
if ($request->filled('kategori') && $request->kategori != '') {
$query->where('kategori', $request->kategori);
}
if ($request->filled('min_price')) $query->where('harga', '>=', $request->min_price);
if ($request->filled('max_price')) $query->where('harga', '<=', $request->max_price);
if ($request->filled('ukuran')) $query->where('ukuran', $request->ukuran);
$buket = $query->paginate(8)->withQueryString();
if ($request->ajax()) {
return view('user.components._list', compact('buket'))->render();
}
return view('user/pesan-buket', compact('buket'));
}
public function detail($slug_id)
{
$buket = Buket::findOrFail($slug_id);
return view('user/detail-buket', compact('buket'));
}
public function formulir($slug_id)
{
$buket = Buket::findOrFail($slug_id);
return view('user/pembayaran-buket', compact('buket'));
}
public function store(Request $request)
{
$buket = Buket::findOrFail($request->id_buket);
$validator = Validator::make($request->all(), [
'nama' => 'required|string|min:3|max:100',
'no_wa' => 'required|numeric|digits_between:10,15',
'tgl_ambil' => 'required|date|after_or_equal:today',
'waktu_ambil' => 'required',
'waktu_ambil' => [
'required',
'date_format:H:i',
'after_or_equal:09:00',
'before_or_equal:21:00',
],
'bukti_bayar' => 'required|image|mimes:jpeg,png,jpg|max:2048',
'request_khusus' => 'nullable|string|max:255',
'ucapan' => 'nullable|string|max:500',
], [
'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.',
'bukti_bayar.max' => 'Ukuran :attribute maksimal adalah 2MB.',
'waktu_ambil.after_or_equal' => 'Jam operasional kami mulai pukul 09:00.',
'waktu_ambil.before_or_equal' => 'Jam operasional kami berakhir pukul 21:00.',
], [
'nama' => 'nama pemesan',
'no_wa' => 'nomor WhatsApp',
'tgl_ambil' => 'tanggal pengambilan',
'waktu_ambil' => 'waktu pengambilan',
'bukti_bayar' => 'bukti pembayaran',
'ucapan' => 'kartu ucapan',
]);
if ($validator->fails()) {
return back()->withErrors($validator)->withInput();
}
try {
db::beginTransaction();
$pelanggan = Pelanggan::create([
'nama' => $request->nama,
'no_wa' => $request->no_wa,
]);
$namaFile = null;
if ($request->hasFile('bukti_bayar')) {
$file = $request->file('bukti_bayar');
$namaFile = 'bukti_' . time() . '.' . $file->getClientOriginalExtension();
$pathBukti = $file->storeAs('img/payment/buket', $namaFile, 'public');
}
$transaksi = TransaksiBuket::create([
'id_pelanggan' => $pelanggan->id_pelanggan,
'id_buket' => $request->id_buket,
'tgl_ambil' => $request->tgl_ambil . ' ' . $request->waktu_ambil,
'request' => $request->request_khusus,
'ucapan' => $request->ucapan,
'bukti_bayar' => $pathBukti,
'status_transaksi' => 'menunggu_verifikasi',
'total_bayar' => $buket->harga,
'no_invoice' => 'INV-BUKET-' . strtoupper(\Illuminate\Support\Str::random(6)),
]);
DB::commit();
$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" .
"*Detail Produk:*\n" .
"Produk: {$transaksi->buket->nama}\n" .
"Total: Rp " . number_format($transaksi->buket->harga, 0, ',', '.') . "\n\n" .
"Mohon segera diproses, ya! Terima kasih.";
$urlWA = "https://wa.me/6282337687878?text=" . urlencode($pesan);
return redirect()->route('pesan.buket')->with([
'success' => 'Pesanan Berhasil Dibuat!',
'waUrl' => $urlWA
]);
} catch (\Exception $e) {
DB::rollBack();
return back()->with('error', 'Terjadi kesalahan: ' . $e->getMessage());
}
}
}