refactor: enhance store method in PesanBuketController with request validation and improved error handling
This commit is contained in:
parent
326799bf85
commit
dfc1dd3e3a
|
|
@ -8,10 +8,9 @@
|
||||||
use App\Models\TransaksiBuket;
|
use App\Models\TransaksiBuket;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Storage;
|
|
||||||
use Illuminate\Support\Facades\Validator;
|
|
||||||
use App\Http\Requests\User\PesanBuketRequest;
|
|
||||||
use App\Services\WhatsAppService;
|
use App\Services\WhatsAppService;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
use App\Http\Requests\User\PesanBuketRequest;
|
||||||
|
|
||||||
class PesanBuketController extends Controller
|
class PesanBuketController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -55,94 +54,51 @@ public function formulir($slug_id)
|
||||||
$buket = Buket::findOrFail($slug_id);
|
$buket = Buket::findOrFail($slug_id);
|
||||||
return view('user/pembayaran-buket', compact('buket'));
|
return view('user/pembayaran-buket', compact('buket'));
|
||||||
}
|
}
|
||||||
public function store(Request $request)
|
public function store(PesanBuketRequest $request)
|
||||||
{
|
{
|
||||||
$buket = Buket::findOrFail($request->id_buket);
|
$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 {
|
try {
|
||||||
db::beginTransaction();
|
DB::beginTransaction();
|
||||||
$pelanggan = Pelanggan::create([
|
$pelanggan = Pelanggan::create($request->only([
|
||||||
'nama' => $request->nama,
|
'nama',
|
||||||
'no_wa' => $request->no_wa,
|
'no_wa'
|
||||||
]);
|
]));
|
||||||
$namaFile = 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() . '.' .
|
||||||
$pathBukti = $file->storeAs('img/payment/buket', $namaFile, 'public');
|
$file->getClientOriginalExtension();
|
||||||
|
$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,
|
||||||
'tgl_ambil' => $request->tgl_ambil . ' ' . $request->waktu_ambil,
|
'tgl_ambil' => $request->tgl_ambil . ' ' .
|
||||||
|
$request->waktu_ambil,
|
||||||
'request' => $request->request_khusus,
|
'request' => $request->request_khusus,
|
||||||
'ucapan' => $request->ucapan,
|
'ucapan' => $request->ucapan,
|
||||||
'bukti_bayar' => $pathBukti,
|
'bukti_bayar' => $pathBukti,
|
||||||
'status_transaksi' => 'menunggu_verifikasi',
|
'status_transaksi' => 'menunggu_verifikasi',
|
||||||
'total_bayar' => $buket->harga,
|
'total_bayar' => $buket->harga,
|
||||||
'no_invoice' => 'INV-BUKET-' . strtoupper(\Illuminate\Support\Str::random(6)),
|
'no_invoice' => 'INV-BUKET-' . strtoupper(Str::random(6)),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
$urlWA = WhatsAppService::getPesananBuketMessage(
|
||||||
$pesan = "Halo Admin Flo.do! Saya sudah melakukan pembayaran untuk invoice {$transaksi->no_invoice}:\n\n" .
|
$transaksi,
|
||||||
"*Data Pemesan:*\n" .
|
$pelanggan
|
||||||
"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([
|
return redirect()->route('pesan.buket')->with([
|
||||||
'success' => 'Pesanan Berhasil Dibuat!',
|
'success' => 'Pesanan Berhasil Dibuat!',
|
||||||
'waUrl' => $urlWA
|
'waUrl' => $urlWA
|
||||||
]);
|
]);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
DB::rollBack();
|
DB::rollBack();
|
||||||
return back()->with('error', 'Terjadi kesalahan: ' . $e->getMessage());
|
return back()->with('error', 'Terjadi kesalahan: ' .
|
||||||
|
$e->getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue