This commit is contained in:
2026-05-13 14:01:56 +07:00
24 changed files with 11114 additions and 25 deletions
@@ -46,6 +46,7 @@ class AuthController extends Controller
'email' => ['required', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
'role' => ['string'],
'uid' => ['required','string', 'unique:users'],
]);
$user = User::create([
@@ -53,6 +54,7 @@ class AuthController extends Controller
'email' => $credentials['email'],
'password' => Hash::make($credentials['password']),
'role' => $credentials['role'],
'uid' => $credentials['uid'],
]);
$profile = Profile::create([
@@ -35,7 +35,9 @@ class DistributionController extends Controller
public function store(Request $request): JsonResponse
{
Gate::authorize('petani');
if (!Gate::any(['super_admin', 'petani','fasilitator', 'offtaker'])) {
abort(403);
}
$validated = $request->validate([
'offtaker_id' => 'required|numeric',
@@ -58,8 +60,9 @@ class DistributionController extends Controller
public function update(Request $request, string $id): JsonResponse
{
// Biasanya Admin atau Offtaker yang melakukan update grade/price
Gate::authorize('super_admin');
if (!Gate::any(['super_admin', 'petani','fasilitator', 'offtaker'])) {
abort(403);
}
$distribution = Distribution::findOrFail($id);
@@ -82,8 +85,10 @@ class DistributionController extends Controller
}
public function batchUpsert(Request $request): JsonResponse
{
Gate::authorize('any', ['super_admin', 'petani']);
{
if (!Gate::any(['super_admin', 'petani','fasilitator', 'offtaker'])) {
abort(403);
}
$validated = $request->validate([
'distributions' => ['required', 'array'],
+4 -4
View File
@@ -77,7 +77,7 @@ class LahanController extends Controller
*/
public function store(Request $request): JsonResponse
{
if (!Gate::any(['petani', 'fasilitator'])) {
if (!Gate::any(['petani', 'fasilitator','super_admin'])) {
abort(403);
}
@@ -151,7 +151,7 @@ class LahanController extends Controller
*/
public function update(Request $request, string $id): JsonResponse
{
if (!Gate::any(['petani', 'fasilitator'])) {
if (!Gate::any(['petani', 'fasilitator','super_admin'])) {
abort(403);
}
@@ -181,7 +181,7 @@ class LahanController extends Controller
*/
public function destroy(string $id): JsonResponse
{
if (!Gate::any(['petani', 'fasilitator'])) {
if (!Gate::any(['petani', 'fasilitator','super_admin'])) {
abort(403);
}
@@ -199,7 +199,7 @@ class LahanController extends Controller
public function batchUpsert(Request $request): JsonResponse
{
if (!Gate::any(['petani', 'fasilitator'])) {
if (!Gate::any(['petani', 'fasilitator','super_admin'])) {
abort(403);
}
+3 -3
View File
@@ -29,7 +29,7 @@ class PanenController extends Controller
public function store(Request $request): JsonResponse
{
if (!Gate::any(['petani', 'fasilitator'])) {
if (!Gate::any(['petani', 'fasilitator','super_admin'])) {
abort(403);
}
@@ -67,7 +67,7 @@ class PanenController extends Controller
public function update(Request $request, string $id): JsonResponse
{
if (!Gate::any(['petani', 'fasilitator'])) {
if (!Gate::any(['petani', 'fasilitator','super_admin'])) {
abort(403);
}
$panen = Panen::findOrFail($id);
@@ -95,7 +95,7 @@ class PanenController extends Controller
*/
public function batchUpsert(Request $request): JsonResponse
{
if (Gate::authorize(['petani', 'fasilitator'])) {
if (Gate::authorize(['petani', 'fasilitator','super_admin'])) {
abort(403);
}
$profileId = Auth::user()->profile->id;
@@ -95,7 +95,9 @@ class ProfileController extends Controller
*/
public function store(Request $request)
{
Gate::authorize('fasilitator');
if(!Gate::any(['fasilitator','super_admin'])){
abort(403);
}
$validated = $request->validate([
'nama' => ['required', 'string', 'max:255'],
@@ -237,7 +239,7 @@ class ProfileController extends Controller
public function downloadFile(string $id, string $type): JsonResponse | BinaryFileResponse
{
if (!Gate::any(['petani', 'fasilitator'])) {
if (!Gate::any(['petani', 'fasilitator', 'super_admin'])) {
abort(403);
}
@@ -91,7 +91,7 @@ class TanamanController extends Controller
*/
public function store(Request $request): JsonResponse
{
if (!Gate::any(['petani', 'fasilitator'])) {
if (!Gate::any(['petani', 'fasilitator','super_admin'])) {
abort(403);
}
$profile = Auth::user()->profile;
@@ -151,7 +151,7 @@ class TanamanController extends Controller
*/
public function update(Request $request, string $id): JsonResponse
{
if (!Gate::any(['petani', 'fasilitator'])) {
if (!Gate::any(['petani', 'fasilitator','super_admin'])) {
abort(403);
}
$tanaman = Tanaman::findOrFail($id);
@@ -186,7 +186,7 @@ class TanamanController extends Controller
*/
public function destroy(string $id): JsonResponse
{
if (!Gate::any(['petani', 'fasilitator'])) {
if (!Gate::any(['petani', 'fasilitator','super_admin'])) {
abort(403);
}
$tanaman = Tanaman::findOrFail($id);
@@ -61,6 +61,8 @@ class KolomBasisDataController extends Controller
'relasi_kolom_id' => ['nullable', 'string'],
'relasi_kolom_label' => ['nullable', 'string'],
'enum_opsi' => ['nullable', 'json'],
'is_active' => ['nullable', 'boolean'],
'is_browse' => ['nullable', 'boolean'],
]);
if (!empty($validated['enum_opsi'])) {
@@ -139,6 +141,8 @@ class KolomBasisDataController extends Controller
'relasi_kolom_id' => ['nullable', 'string'],
'relasi_kolom_label' => ['nullable', 'string'],
'enum_opsi' => ['nullable', 'json'],
'is_active' => ['nullable', 'boolean'],
'is_browse' => ['nullable', 'boolean'],
]);
$kolom->update([...$validated,
@@ -44,7 +44,10 @@ class ValueBasisDataController extends Controller
if (!$tabel) {
abort(404, 'Data tabel tidak ditemukan.');
}
$kolom = KolomBasisData::where('tabel_id', $tabelId)->get();
$kolom = KolomBasisData::where('tabel_id', $tabelId)
->where('is_active', true)
->where('is_browse', true)
->get();
if ($kolom->isEmpty()) {
abort(404, 'Data kolom tidak ditemukan untuk tabel ini.');
}
@@ -162,7 +165,8 @@ class ValueBasisDataController extends Controller
if (!$tabel) {
abort(404, 'Data tabel tidak ditemukan.');
}
$kolom = KolomBasisData::where('tabel_id', $tabelId)->get();
$kolom = KolomBasisData::where('tabel_id', $tabelId)
->where('is_active', true)->get();
if ($kolom->isEmpty()) {
abort(404, 'Data kolom tidak ditemukan untuk tabel ini.');
}
@@ -210,7 +214,8 @@ class ValueBasisDataController extends Controller
if (!$tabel) {
abort(404, 'Data tabel tidak ditemukan.');
}
$kolom = KolomBasisData::where('tabel_id', $tabelId)->get();
$kolom = KolomBasisData::where('tabel_id', $tabelId)
->where('is_active', true)->get();
if ($kolom->isEmpty()) {
abort(404, 'Data kolom tidak ditemukan untuk tabel ini.');
}
@@ -278,7 +283,8 @@ class ValueBasisDataController extends Controller
if (!$tabel) {
abort(404, 'Data tabel tidak ditemukan.');
}
$kolom = KolomBasisData::where('tabel_id', $tabelId)->get();
$kolom = KolomBasisData::where('tabel_id', $tabelId)
->where('is_active', true)->get();
if ($kolom->isEmpty()) {
abort(404, 'Data kolom tidak ditemukan untuk tabel ini.');
}
@@ -334,7 +340,8 @@ class ValueBasisDataController extends Controller
if (!$tabel) {
abort(404, 'Data tabel tidak ditemukan.');
}
$kolom = KolomBasisData::where('tabel_id', $tabelId)->get();
$kolom = KolomBasisData::where('tabel_id', $tabelId)
->where('is_active', true)->get();
if ($kolom->isEmpty()) {
abort(404, 'Data kolom tidak ditemukan untuk tabel ini.');
}
@@ -396,7 +403,8 @@ class ValueBasisDataController extends Controller
if (!$tabel) {
abort(404, 'Data tabel tidak ditemukan.');
}
$kolom = KolomBasisData::where('tabel_id', $tabelId)->get();
$kolom = KolomBasisData::where('tabel_id', $tabelId)
->where('is_active', true)->get();
if ($kolom->isEmpty()) {
abort(404, 'Data kolom tidak ditemukan untuk tabel ini.');
}
@@ -0,0 +1,148 @@
<?php
namespace App\Http\Controllers\Web\Program;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Program\KelompokBelajarTani;
class KelompokBelajarTaniController extends Controller
{
public function index(Request $request)
{
$title = 'Kelompok Belajar Tani';
// SUMMARY CARD
$summary = ([
'total_kelompok' => KelompokBelajarTani::count(),
'aktif' => KelompokBelajarTani::where('status', 'aktif')->count(),
'nonaktif' => KelompokBelajarTani::where('status', 'nonaktif')->count(),
]);
// QUERY
$query = KelompokBelajarTani::query();
// SEARCH
if ($request->filled('search')) {
$search = $request->search;
$query->where(function ($q) use ($search) {
$q->where('nama_kelompok', 'ilike', "%{$search}%")
->orWhere('deskripsi', 'ilike', "%{$search}%");
});
}
// FILTER STATUS
if ($request->filled('status')) {
$query->where('status', $request->status);
}
// PAGINATION
$perPage = $request->input('per_page', 10);
$kelompok = $query->latest()->paginate($perPage);
return view('program.kelompokbelajar.index', compact(
'title',
'summary',
'kelompok'
));
}
public function create()
{
return view('program.kelompokbelajar.add');
}
public function store(Request $request)
{
$validated = $request->validate([
'nama_kelompok' => 'required|string|max:255',
'status' => 'required|string',
'deskripsi' => 'nullable|string',
], [
'nama_kelompok.required' => 'Nama kelompok wajib diisi.',
'nama_kelompok.string' => 'Nama kelompok harus berupa teks.',
'nama_kelompok.max' => 'Nama kelompok maksimal 255 karakter.',
'status.required' => 'Status wajib diisi.',
'status.string' => 'Status harus berupa teks.',
'deskripsi.string' => 'Deskripsi harus berupa teks.',
]);
KelompokBelajarTani::create([
'nama_kelompok' => $request->nama_kelompok,
'status' => $request->status,
'deskripsi' => $request->deskripsi,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
return response()->json([
'status' => 'success',
'message' => 'Kelompok Belajar Tani berhasil disimpan.'
]);
}
public function edit($id)
{
$kelompok = KelompokBelajarTani::findOrFail($id);
return view('program.kelompokbelajar.edit', compact(
'kelompok'
));
}
public function update(Request $request, $id)
{
$validated = $request->validate([
'nama_kelompok' => 'required|string|max:255',
'status' => 'required|string',
'deskripsi' => 'nullable|string',
]);
$kelompok = KelompokBelajarTani::findOrFail($id);
$kelompok->update([
'nama_kelompok' => $request->nama_kelompok,
'status' => $request->status,
'deskripsi' => $request->deskripsi,
'updated_by' => auth()->user()->id,
]);
return response()->json([
'status' => 'success',
'message' => 'Data Kelompok Belajar Tani berhasil diperbarui.'
]);
}
public function destroy($id)
{
$kelompok = KelompokBelajarTani::findOrFail($id);
$kelompok->update([
'deleted_by' => auth()->user()->id
]);
$kelompok->delete();
return response()->json([
'status' => 'success',
'message' => 'Data Kelompok Belajar Tani berhasil dihapus.'
]);
}
public function show($id)
{
$kelompok = KelompokBelajarTani::findOrFail($id);
return response()->json([
'status' => 'success',
'data' => $kelompok
]);
}
}