90 lines
2.6 KiB
PHP
90 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Pelanggan;
|
|
use App\Models\Template;
|
|
use Illuminate\Http\Request;
|
|
|
|
class PelangganController extends Controller
|
|
{
|
|
// List pesanan
|
|
public function index()
|
|
{
|
|
$pelanggans = Pelanggan::with('template')->latest()->paginate(10);
|
|
return view('admin.pelanggans.index', compact('pelanggans'));
|
|
}
|
|
|
|
// Detail pesanan
|
|
public function show($id)
|
|
{
|
|
$pelanggan = Pelanggan::with('template')->findOrFail($id);
|
|
return view('admin.pelanggans.show', compact('pelanggan'));
|
|
}
|
|
|
|
// Pelanggan membuat pesanan (user side)
|
|
public function store(Request $request)
|
|
{
|
|
$template = Template::findOrFail($request->input('template_id'));
|
|
|
|
$rules = [
|
|
'nama_pemesan' => 'required|string|max:255',
|
|
'email' => 'required|email',
|
|
'no_tlpn' => 'required|string|max:30',
|
|
'template_id' => 'required|exists:templates,id',
|
|
];
|
|
|
|
// validasi dinamis dari field JSON form di template
|
|
if ($template->form) {
|
|
foreach ($template->form as $field => $options) {
|
|
$rule = [];
|
|
$rule[] = !empty($options['required']) ? 'required' : 'nullable';
|
|
$rule[] = 'string';
|
|
$rules["form.$field"] = implode('|', $rule);
|
|
}
|
|
}
|
|
|
|
$validated = $request->validate($rules);
|
|
|
|
// harga otomatis dari template
|
|
$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', // default
|
|
]);
|
|
|
|
return redirect()->route('pelanggans.show', $pelanggan->id)
|
|
->with('success', 'Pesanan berhasil dikirim, status menunggu konfirmasi admin.');
|
|
}
|
|
|
|
// Admin ubah status
|
|
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 pesanan berhasil diperbarui.');
|
|
}
|
|
|
|
// Admin hapus pesanan
|
|
public function destroy($id)
|
|
{
|
|
$pelanggan = Pelanggan::findOrFail($id);
|
|
$pelanggan->delete();
|
|
|
|
return redirect()->route('admin.pelanggan.index')
|
|
->with('success', 'Pesanan berhasil dihapus.');
|
|
}
|
|
}
|