latest()->paginate(10); return view('pelanggans.index', compact('pelanggans')); } public function create() { $templates = Template::all(); return view('pelanggans.create', compact('templates')); } public function store(Request $request) { // Ambil template dulu untuk tahu struktur form $template = Template::findOrFail($request->input('template_id')); // Generate rules dinamis dari JSON "form" di template $rules = [ 'nama_pemesan' => 'required|string|max:255', 'email' => 'required|email', 'no_tlpn' => 'required|string|max:30', 'template_id' => 'required|exists:templates,id', ]; if ($template->form) { foreach ($template->form as $field => $options) { // contoh: $options bisa seperti ["type"=>"text","required"=>true] $rule = []; if (!empty($options['required'])) { $rule[] = 'required'; } else { $rule[] = 'nullable'; } $rule[] = 'string'; $rules["form.$field"] = implode('|', $rule); } } $validated = $request->validate($rules); // fallback harga dari template kalau tidak dikirim $harga = $request->input('harga', $template->harga); $pelanggan = Pelanggan::create([ 'nama_pemesan' => $validated['nama_pemesan'], 'email' => $validated['email'], 'no_tlpn' => $validated['no_tlpn'], 'template_id' => $template->id, 'form' => $request->input('form'), 'harga' => $harga, 'status' => 'menunggu', ]); return redirect()->route('pelanggans.show', $pelanggan->id) ->with('success', 'Pesanan berhasil dikirim. Status: menunggu.'); } public function show($id) { $pelanggan = Pelanggan::with('template')->findOrFail($id); return view('pelanggans.show', compact('pelanggan')); } public function edit($id) { $pelanggan = Pelanggan::findOrFail($id); $templates = Template::all(); return view('pelanggans.edit', compact('pelanggan', 'templates')); } public function update(Request $request, $id) { $pelanggan = Pelanggan::findOrFail($id); $validated = $request->validate([ 'status' => 'required|in:menunggu,diterima,ditolak', ]); $pelanggan->update($validated); return redirect()->back()->with('success', 'Status diperbarui.'); } public function destroy($id) { $pelanggan = Pelanggan::findOrFail($id); $pelanggan->delete(); return redirect()->route('pelanggans.index')->with('success', 'Data dihapus.'); } }