139 lines
4.2 KiB
PHP
139 lines
4.2 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'],
|
|
'nama_singkat' => ['required', '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'],
|
|
'nama_singkat' => ['required', '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.'
|
|
]);
|
|
}
|
|
} |