Update Role fasilitator, kordinator
This commit is contained in:
@@ -8,16 +8,29 @@ use App\Models\User;
|
||||
use App\Models\Profile;
|
||||
use App\Enums\Role;
|
||||
use App\Models\Wilayah\Provinsi;
|
||||
use App\Models\Pertanian\Komoditas;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class UserController extends Controller
|
||||
{
|
||||
// Manajemen pengguna hanya untuk super admin & admin (sama dengan menu "Daftar Pengguna").
|
||||
// Berlaku untuk semua method di controller ini.
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware(function (Request $request, \Closure $next) {
|
||||
abort_unless($request->user() && Gate::forUser($request->user())->any(['super_admin', 'admin']), 403);
|
||||
|
||||
return $next($request);
|
||||
});
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$query = User::orderBy('created_at', 'desc');
|
||||
$query = User::with('koordinatorKomoditas.komoditas:id,nama')->orderBy('created_at', 'desc');
|
||||
|
||||
$tab = $request->get('tab', 'active');
|
||||
if ($tab === 'pending') {
|
||||
@@ -45,8 +58,15 @@ class UserController extends Controller
|
||||
$pendingUsers = User::whereNull('email_verified_at')->count();
|
||||
|
||||
$roles = Role::cases();
|
||||
$komoditasOptions = $this->komoditasOptions();
|
||||
|
||||
return view('konfigurasi.user.index', compact('users', 'totalUsers', 'activeUsers', 'pendingUsers', 'roles', 'tab'));
|
||||
return view('konfigurasi.user.index', compact('users', 'totalUsers', 'activeUsers', 'pendingUsers', 'roles', 'tab', 'komoditasOptions'));
|
||||
}
|
||||
|
||||
// Komoditas utama yang bisa ditugaskan ke koordinator
|
||||
private function komoditasOptions()
|
||||
{
|
||||
return Komoditas::select('id', 'nama')->where('is_utama', true)->orderBy('nama')->get();
|
||||
}
|
||||
|
||||
public function verify(Request $request, $id)
|
||||
@@ -92,8 +112,9 @@ class UserController extends Controller
|
||||
{
|
||||
$roles = Role::cases();
|
||||
$provinsi = Provinsi::orderBy('nama', 'asc')->get();
|
||||
$komoditasOptions = $this->komoditasOptions();
|
||||
|
||||
return view('konfigurasi.user.add', compact('roles', 'provinsi'));
|
||||
return view('konfigurasi.user.add', compact('roles', 'provinsi', 'komoditasOptions'));
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
@@ -104,6 +125,8 @@ class UserController extends Controller
|
||||
'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email'],
|
||||
'password' => ['required', 'string', 'min:8', 'confirmed'],
|
||||
'role' => ['required', 'string'],
|
||||
'komoditas_ids' => ['nullable', 'array', 'required_if:role,' . Role::KOORDINATOR->value],
|
||||
'komoditas_ids.*' => ['integer', 'exists:master_komoditas,id'],
|
||||
'telepon' => ['required', 'max:13'],
|
||||
'desa_kelurahan_id' => ['nullable', 'exists:desa_kelurahan,id'],
|
||||
'ktp' => ['nullable', 'min:16', 'max:16'],
|
||||
@@ -116,6 +139,7 @@ class UserController extends Controller
|
||||
'password.confirmed' => 'Konfirmasi password tidak cocok!',
|
||||
'password.min' => 'Password minimal 8 karakter!',
|
||||
'email.unique' => 'Email sudah terdaftar.',
|
||||
'komoditas_ids.required_if' => 'Pilih minimal satu komoditas untuk koordinator.',
|
||||
'required' => 'Kolom :attribute wajib diisi.'
|
||||
]);
|
||||
|
||||
@@ -163,6 +187,10 @@ class UserController extends Controller
|
||||
'created_by' => auth()->id(),
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
if ($user->isKoordinator()) {
|
||||
KoordinatorKomoditasController::simpanPenugasan($user, $request->input('komoditas_ids', []));
|
||||
}
|
||||
});
|
||||
|
||||
if ($request->expectsJson()) {
|
||||
|
||||
Reference in New Issue
Block a user