Files
database-pertani-web/app/Http/Controllers/Web/ProgramController.php
T

137 lines
4.1 KiB
PHP

<?php
namespace App\Http\Controllers\Web;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Illuminate\View\View;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use App\Models\Core\Program;
use App\Models\Wilayah\Provinsi;
use App\Models\Pertanian\Komoditas;
class ProgramController extends Controller
{
public function index(Request $request): View
{
$title = 'Program';
$perPage = $request->query('per_page', 10);
$search = $request->query('search', '');
$program = Program::where('nama', 'like', "%$search%")
->paginate($perPage);
return view('core.program.index', compact('title', 'program'));
}
public function create(): View
{
$provinsi = Provinsi::orderBy('nama', 'asc')->get();
$komoditas = Komoditas::orderBy('nama', 'asc')->get();
return view('core.program.add', compact('provinsi', 'komoditas'));
}
public function getProgram(): JsonResponse
{
$program = Program::select(['id', 'nama', 'sub_domain'])->get();
return response()->json(['data' => $program]);
}
public function store(Request $request): RedirectResponse
{
$validator = Validator::make($request->all(), [
'nama' => ['required'],
'sub_domain' => ['required', Rule::unique(Program::class, 'sub_domain')],
'tahun' => ['required', 'integer'],
'instansi' => ['nullable', 'string'],
]);
if ($validator->fails()) {
return response()->json([
'status' => 'error',
'message' => $validator->errors()->first()
], 422);
}
Program::create([...$validator->validated(),
'created_by' => auth()->id(),
'updated_by' => auth()->id(),
]);
return redirect()->route('program.index')->with('success', 'Data program berhasil disimpan!');
}
public function show($id): View
{
$program = Program::find($id);
if (!$program) {
return redirect()->route('program.index')->with('error', 'Data program tidak ditemukan.');
}
$komoditas = Komoditas::all();
$provinsi = Provinsi::all();
return view('core.program.view', compact('program', 'komoditas', 'provinsi'));
}
public function edit($id): View
{
$program = Program::find($id);
if (!$program) {
return redirect()->route('program.index')->with('error', 'Data program tidak ditemukan.');
}
return view('core.program.edit', compact('program'));
}
public function update(Request $request, $id): RedirectResponse
{
$validator = Validator::make($request->all(), [
'nama' => ['required'],
'sub_domain' => ['required', Rule::unique(Program::class, 'sub_domain')->ignore($id)],
'tahun' => ['required', 'integer'],
'instansi' => ['nullable', 'string'],
]);
if ($validator->fails()) {
return redirect()->back()->withErrors($validator)->withInput();
}
$program = Program::find($id);
if (!$program) {
return redirect()->route('program.index')->with('error', 'Data program tidak ditemukan!');
}
$program->update([...$validator->validated(),
'updated_by' => auth()->id(),
]);
return redirect()->route('program.index')->with('success', 'Data program berhasil diperbarui!');
}
public function destroy($id): JsonResponse
{
$program = Program::find($id);
if (!$program) {
return response()->json([
'status' => 'error',
'message' => 'Data tidak ditemukan.'
], 404);
}
$program->deleted_by = auth()->user()->id;
$program->save();
$program->delete();
return response()->json([
'status' => 'success',
'message' => 'Data program berhasil dihapus.'
]);
}
}