instalasi-sim-rs/app/Http/Controllers/ProcedureController.php

187 lines
5.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Procedure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;
use Inertia\Inertia;
class ProcedureController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$procedures = Procedure::orderBy('created_at', 'desc')
->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');
}
}