[Update controller]

This commit is contained in:
Arief Dwi Wicaksono 2025-10-02 15:59:52 +07:00
parent e1d2a130f7
commit 64d5c96518
2 changed files with 32 additions and 65 deletions

View File

@ -8,24 +8,25 @@ use Illuminate\Http\Request;
class PelangganController extends Controller class PelangganController extends Controller
{ {
// List pesanan
public function index() public function index()
{ {
$pelanggans = Pelanggan::with('template')->latest()->paginate(10); $pelanggans = Pelanggan::with('template')->latest()->paginate(10);
return view('pelanggans.index', compact('pelanggans')); return view('admin.pelanggans.index', compact('pelanggans'));
} }
public function create() // Detail pesanan
public function show($id)
{ {
$templates = Template::all(); $pelanggan = Pelanggan::with('template')->findOrFail($id);
return view('pelanggans.create', compact('templates')); return view('admin.pelanggans.show', compact('pelanggan'));
} }
// Pelanggan membuat pesanan (user side)
public function store(Request $request) public function store(Request $request)
{ {
// Ambil template dulu untuk tahu struktur form
$template = Template::findOrFail($request->input('template_id')); $template = Template::findOrFail($request->input('template_id'));
// Generate rules dinamis dari JSON "form" di template
$rules = [ $rules = [
'nama_pemesan' => 'required|string|max:255', 'nama_pemesan' => 'required|string|max:255',
'email' => 'required|email', 'email' => 'required|email',
@ -33,15 +34,11 @@ class PelangganController extends Controller
'template_id' => 'required|exists:templates,id', 'template_id' => 'required|exists:templates,id',
]; ];
// validasi dinamis dari field JSON form di template
if ($template->form) { if ($template->form) {
foreach ($template->form as $field => $options) { foreach ($template->form as $field => $options) {
// contoh: $options bisa seperti ["type"=>"text","required"=>true]
$rule = []; $rule = [];
if (!empty($options['required'])) { $rule[] = !empty($options['required']) ? 'required' : 'nullable';
$rule[] = 'required';
} else {
$rule[] = 'nullable';
}
$rule[] = 'string'; $rule[] = 'string';
$rules["form.$field"] = implode('|', $rule); $rules["form.$field"] = implode('|', $rule);
} }
@ -49,8 +46,8 @@ class PelangganController extends Controller
$validated = $request->validate($rules); $validated = $request->validate($rules);
// fallback harga dari template kalau tidak dikirim // harga otomatis dari template
$harga = $request->input('harga', $template->harga); $harga = $template->harga;
$pelanggan = Pelanggan::create([ $pelanggan = Pelanggan::create([
'nama_pemesan' => $validated['nama_pemesan'], 'nama_pemesan' => $validated['nama_pemesan'],
@ -59,26 +56,14 @@ class PelangganController extends Controller
'template_id' => $template->id, 'template_id' => $template->id,
'form' => $request->input('form'), 'form' => $request->input('form'),
'harga' => $harga, 'harga' => $harga,
'status' => 'menunggu', 'status' => 'menunggu', // default
]); ]);
return redirect()->route('pelanggans.show', $pelanggan->id) return redirect()->route('pelanggans.show', $pelanggan->id)
->with('success', 'Pesanan berhasil dikirim. Status: menunggu.'); ->with('success', 'Pesanan berhasil dikirim, status menunggu konfirmasi admin.');
}
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'));
} }
// Admin ubah status
public function update(Request $request, $id) public function update(Request $request, $id)
{ {
$pelanggan = Pelanggan::findOrFail($id); $pelanggan = Pelanggan::findOrFail($id);
@ -89,14 +74,16 @@ class PelangganController extends Controller
$pelanggan->update($validated); $pelanggan->update($validated);
return redirect()->back()->with('success', 'Status diperbarui.'); return redirect()->back()->with('success', 'Status pesanan berhasil diperbarui.');
} }
// Admin hapus pesanan
public function destroy($id) public function destroy($id)
{ {
$pelanggan = Pelanggan::findOrFail($id); $pelanggan = Pelanggan::findOrFail($id);
$pelanggan->delete(); $pelanggan->delete();
return redirect()->route('pelanggans.index')->with('success', 'Data dihapus.'); return redirect()->route('pelanggans.index')
->with('success', 'Pesanan berhasil dihapus.');
} }
} }

View File

@ -7,51 +7,31 @@ use Illuminate\Http\Request;
class TemplateController extends Controller class TemplateController extends Controller
{ {
// Lihat semua template (dari seeder)
public function index() public function index()
{ {
return response()->json(Template::with('kategori')->get()); $templates = Template::with('kategori')->get();
return view('admin.templates.index', compact('templates'));
} }
public function store(Request $request) // Form edit (untuk ubah harga / nama dsb)
public function edit(Template $template)
{
return view('admin.templates.edit', compact('template'));
}
// Update template (ubah harga / nama / paket)
public function update(Request $request, Template $template)
{ {
$validated = $request->validate([ $validated = $request->validate([
'nama_template' => 'required|string|max:255', 'nama_template' => 'required|string|max:255',
'harga' => 'required|numeric|min:0', 'harga' => 'required|numeric|min:0',
'foto' => 'nullable|string',
'paket' => 'required|in:starter,basic,premium', 'paket' => 'required|in:starter,basic,premium',
'kategori_id' => 'required|exists:kategoris,id',
'form' => 'required|array' // harus array JSON
]);
$template = Template::create($validated);
return response()->json($template, 201);
}
public function show(Template $template)
{
return response()->json($template->load('kategori'));
}
public function update(Request $request, Template $template)
{
$validated = $request->validate([
'nama_template' => 'sometimes|required|string|max:255',
'harga' => 'sometimes|required|numeric|min:0',
'foto' => 'nullable|string',
'paket' => 'sometimes|required|in:starter,basic,premium',
'kategori_id' => 'sometimes|required|exists:kategoris,id',
'form' => 'sometimes|required|array'
]); ]);
$template->update($validated); $template->update($validated);
return response()->json($template); return redirect()->route('admin.templates.index')
} ->with('success', 'Template berhasil diperbarui!');
public function destroy(Template $template)
{
$template->delete();
return response()->json(null, 204);
} }
} }