select([ 'id', 'code', 'name', 'category', 'base_price', 'is_taxable', 'tax_percentage', 'requires_approval', 'is_active', 'created_at' ]) ->paginate(10) ->through(function ($procedure) { return [ 'id' => $procedure->id, 'code' => $procedure->code, 'name' => $procedure->name, 'category' => $procedure->category, 'price' => 'Rp ' . number_format($procedure->base_price, 2), 'tax' => $procedure->is_taxable ? $procedure->tax_percentage . '%' : 'Non-Pajak', 'approval' => $procedure->requires_approval ? 'Perlu' : 'Tidak', 'status' => $procedure->is_active ? 'Aktif' : 'Non-Aktif', 'created_at' => $procedure->created_at->format('d/m/Y H:i') ]; }); return Inertia::render('procedures/index', [ 'procedures' => $procedures, 'status' => session('status') ]); } /** * Show the form for creating a new resource. */ public function create() { return Inertia::render('procedures/form', [ 'mode' => 'create', 'categories' => [ 'Konsultasi', 'Pemeriksaan', 'Tindakan', 'Operasi', 'Laboratorium', 'Radiologi', 'Obat', 'Lainnya' ], 'defaults' => [ 'is_taxable' => true, 'tax_percentage' => 10.00, 'is_discountable' => true, 'requires_approval' => false, 'is_active' => true ] ]); } /** * Store a newly created resource in storage. */ public function store(Request $request) { $validated = $request->validate([ 'code' => 'required|string|max:20|unique:m_procedure,code', 'name' => 'required|string|max:100', 'category' => [ 'required', Rule::in(Procedure::getCategories()) ], 'description' => 'nullable|string', 'base_price' => 'required|numeric|min:0', 'is_taxable' => 'required|boolean', 'tax_percentage' => 'required_if:is_taxable,true|numeric|between:0,100', 'is_discountable' => 'required|boolean', 'requires_approval' => 'required|boolean', 'is_active' => 'required|boolean' ]); DB::transaction(function () use ($validated) { Procedure::create($validated); }); return redirect()->route('procedures.index') ->with('status', 'Prosedur berhasil ditambahkan'); } /** * Display the specified resource. */ public function show(Procedure $procedure) { // } /** * Show the form for editing the specified resource. */ public function edit(Procedure $procedure) { return Inertia::render('procedures/form', [ 'mode' => 'edit', 'procedure' => [ 'id' => $procedure->id, 'code' => $procedure->code, 'name' => $procedure->name, 'category' => $procedure->category, 'description' => $procedure->description, 'base_price' => $procedure->base_price, 'is_taxable' => $procedure->is_taxable, 'tax_percentage' => $procedure->tax_percentage, 'is_discountable' => $procedure->is_discountable, 'requires_approval' => $procedure->requires_approval, 'is_active' => $procedure->is_active ], 'categories' => Procedure::getCategories() ]); } /** * Update the specified resource in storage. */ public function update(Request $request, Procedure $procedure) { $validated = $request->validate([ 'code' => [ 'required', 'string', 'max:20', Rule::unique('m_procedure', 'code')->ignore($procedure->id) ], 'name' => 'required|string|max:100', 'category' => [ 'required', Rule::in(Procedure::getCategories()) ], 'description' => 'nullable|string', 'base_price' => 'required|numeric|min:0', 'is_taxable' => 'required|boolean', 'tax_percentage' => 'required_if:is_taxable,true|numeric|between:0,100', 'is_discountable' => 'required|boolean', 'requires_approval' => 'required|boolean', 'is_active' => 'required|boolean' ]); DB::transaction(function () use ($validated, $procedure) { $procedure->update($validated); }); return redirect()->route('procedures.index') ->with('status', 'Data prosedur berhasil diperbarui'); } /** * Remove the specified resource from storage. */ public function destroy(Procedure $procedure) { DB::transaction(function () use ($procedure) { $procedure->delete(); }); return redirect()->route('procedures.index') ->with('status', 'Prosedur berhasil dihapus'); } }