From b4053a82e3de82a189d267b492faba7e1117e20d Mon Sep 17 00:00:00 2001 From: kokichi17 Date: Wed, 14 Aug 2024 13:39:22 +0700 Subject: [PATCH] role kepala bengkel permissions --- app/Http/Controllers/TeacherController.php | 188 +++++++++++++++++++++ app/Http/Controllers/UserController.php | 35 +++- app/Models/User.php | 7 + database/seeders/MenuSeeder.php | 9 + database/seeders/PermissionTableSeeder.php | 2 + resources/views/teachers/edit.blade.php | 36 ++++ resources/views/teachers/index.blade.php | 32 ++++ resources/views/users/edit.blade.php | 45 +++-- resources/views/users/index.blade.php | 2 +- routes/web.php | 5 + 10 files changed, 332 insertions(+), 29 deletions(-) create mode 100644 app/Http/Controllers/TeacherController.php create mode 100644 resources/views/teachers/edit.blade.php create mode 100644 resources/views/teachers/index.blade.php diff --git a/app/Http/Controllers/TeacherController.php b/app/Http/Controllers/TeacherController.php new file mode 100644 index 0000000..d3f30a4 --- /dev/null +++ b/app/Http/Controllers/TeacherController.php @@ -0,0 +1,188 @@ +user()->hasRole('manager'); + $isKaprog = auth()->user()->hasRole('kepala program'); + $isKabeng = auth()->user()->hasRole('kepala bengkel'); + $isTeacher = auth()->user()->hasRole('teacher'); + $isMentor = auth()->user()->hasRole('mentor'); + + $users = User::whereRelation('roles', 'name', 'teacher'); + if ($search) { + $users = $users->where('name', 'like', '%' . $search . '%') + ->orWhere('email', 'like', '%' . $search . '%'); + } + if ($status) { + $users = $users->where('status', $status); + } + if ($school) { + $users = $users->whereHas('schools', function($query) use ($school) { + $query->where('school_id', $school); + }); + } + if ($department) { + $users = $users->whereHas('departments', function($query) use ($department) { + $query->where('department_id', $department); + }); + } + if ($isManager) { + $users = $users->whereHas('schools', function($query) { + $query->where('school_id', auth()->user()->schools()->first()->id); + }); + } + if ($isKaprog || $isKabeng) { + $users = $users->kabeng(); + } + if ($isTeacher) { + $users = $users->teacher(); + } + if ($isMentor) { + $users = $users->mentor(auth()->user()->companies()->first()->id); + } + if ($sort) { + if ($sort[0] == '-') { + $sort = substr($sort, 1); + $sortType = 'desc'; + } else { + $sortType = 'asc'; + } + + $users = $users->orderBy($sort, $sortType); + } + $users = $users->paginate(10); + + if ($users->count() > 0) { + $context = [ + 'status' => true, + 'message' => 'Data guru ditemukan', + 'teachers' => $users, + 'pagination' => $users->links()->render(), + 'search' => $search, + 'statusData' => $status, + 'school' => $school, + 'department' => $department, + 'sort' => $sort, + ]; + } else { + $context = [ + 'status' => false, + 'message' => 'Data guru tidak ditemukan', + 'teachers' => [], + 'pagination' => $users->links()->render(), + 'search' => $search, + 'statusData' => $status, + 'school' => $school, + 'department' => $department, + 'sort' => $sort, + ]; + } + + return $context; + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index(Request $request) + { + $search = $request->query('search'); + $status = $request->query('status'); + $school = $request->query('school'); + $department = $request->query('department'); + $sort = $request->query('sort'); + $sort = $sort ? $sort : 'name'; + + $context = $this->getData($search, $status, $school, $department, $sort); + + return $context['status'] + ? view('teachers.index', $context) + : view('teachers.index', $context)->with('error', $context['message']); + } + + public function edit(Request $request, $id) + { + $id = decrypt($id); + + + $user = User::whereRelation('roles', 'name', 'teacher') + ->where('id', $id) + ->first(); + + $modelIds = DB::table('model_has_roles') + ->where('role_id', 6) + ->pluck('model_id'); + $students = User::whereIn('id', $modelIds)->get(); + $selectedStudentIds = DB::table('group_user') + ->where('teacher_id', $id) + ->pluck('user_id') + ->toArray(); + + if ($user) { + + $context = [ + 'status' => true, + 'message' => 'Data guru ditemukan', + 'teacher' => $user, + 'students' => $students, + 'selectedStudentIds' => $selectedStudentIds + ]; + } else { + $context = [ + 'status' => false, + 'message' => 'Data guru tidak ditemukan', + 'teacher' => null, + 'students' => null, + 'selectedStudentIds' => null + ]; + } + + return view('teachers.edit', $context); + } + + public function update(Request $request, $id) + { + $id = decrypt($id); + + $request->validate([ + 'name' => 'required|string|max:255', + 'student_ids' => 'nullable|array' + ]); + + $user = User::whereRelation('roles', 'name', 'teacher') + ->where('id', $id) + ->first(); + + if ($user) { + $user->update([ + 'name' => $request->name, + ]); + if ($request->student_ids) { + DB::table('group_user')->where('teacher_id', $id)->delete(); + foreach ($request->student_ids as $studentId) { + DB::table('group_user')->insert([ + 'teacher_id' => $user->id, + 'user_id' => $studentId, + ]); + } + } + + return redirect()->route('teachers.index')->with('success', 'Data guru berhasil diperbarui'); + } else { + return redirect()->route('teachers.index')->with('error', 'Data guru tidak ditemukan'); + } + } +} diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 1bb5e37..84c076d 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -56,9 +56,14 @@ public function getData($search=null, $status=null, $school=null, $department=nu if ($isManager) { $users->manager(auth()->user()->schools()->first()->id); } - if ($isKaprog || $isKabeng) { + if ($isKaprog) { $users->kaprog(auth()->user()->departments()->first()->id); } + if ($isKabeng) { + $users->whereHas('roles', function($query) { + $query->where('name', 'mentor'); + }); + } if ($isTeacher) { $users = $users->teacher(); } @@ -307,6 +312,10 @@ public function edit($id) ->where('role_id', 6) ->pluck('model_id'); $students = User::whereIn('id', $modelIds)->get(); + $selectedStudentIds = DB::table('group_user') + ->where('teacher_id', $id) + ->pluck('user_id') + ->toArray(); } elseif ($isKaprog) { $roles = Role::where('name', 'student')->orWhere('name', 'kepala program')->orWhere('name', 'mentor')->pluck('name', 'id'); $schoolId = auth()->user()->schools()->first()->id; @@ -319,6 +328,10 @@ public function edit($id) ->where('role_id', 6) ->pluck('model_id'); $students = User::whereIn('id', $modelIds)->get(); + $selectedStudentIds = DB::table('group_user') + ->where('teacher_id', $id) + ->pluck('user_id') + ->toArray(); } elseif ($isKabeng) { $roles = Role::where('name', 'mentor')->pluck('name', 'id'); $schoolId = auth()->user()->schools()->first()->id; @@ -331,6 +344,10 @@ public function edit($id) ->where('role_id', 6) ->pluck('model_id'); $students = User::whereIn('id', $modelIds)->get(); + $selectedStudentIds = DB::table('group_user') + ->where('teacher_id', $id) + ->pluck('user_id') + ->toArray(); } else { $roles = auth()->user()->hasRole('super-admin') ? Role::pluck('name', 'id') @@ -344,9 +361,13 @@ public function edit($id) ->where('role_id', 6) ->pluck('model_id'); $students = User::whereIn('id', $modelIds)->get(); + $selectedStudentIds = DB::table('group_user') + ->where('teacher_id', $id) + ->pluck('user_id') + ->toArray(); } - return view('users.edit', compact('user', 'schools', 'departments', 'courses', 'roles', 'companies', 'students')); + return view('users.edit', compact('user', 'schools', 'departments', 'courses', 'roles', 'companies', 'students', 'selectedStudentIds')); } catch (\Exception $e) { return redirect()->route('users.index') ->with('error', 'User tidak ditemukan'); @@ -374,6 +395,7 @@ public function update(Request $request, $id) 'department_id' => 'nullable|exists:departments,id', 'course_id' => 'nullable|exists:courses,id', 'company_id' => 'nullable|exists:companies,id', + 'student_ids' => 'nullable|array', 'status' => 'boolean', ]); @@ -398,6 +420,15 @@ public function update(Request $request, $id) if ($request->company_id) { $user->companies()->sync($request->company_id); } + if ($request->student_ids) { + DB::table('group_user')->where('teacher_id', $id)->delete(); + foreach ($request->student_ids as $studentId) { + DB::table('group_user')->insert([ + 'teacher_id' => $user->id, + 'user_id' => $studentId, + ]); + } + } return redirect()->route('users.index') ->with('success', 'User berhasil diubah'); diff --git a/app/Models/User.php b/app/Models/User.php index 7514cc7..f66719d 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -199,6 +199,13 @@ public function scopeKaprog($query, $department_id) }); } + public function scopeKabeng($query) + { + return $query->whereHas('roles', function ($query) { + $query->where('name', 'teacher'); + }); + } + public function scopeMentor($query, $company_id) { return $query->whereRelation('companies', 'id', $company_id) diff --git a/database/seeders/MenuSeeder.php b/database/seeders/MenuSeeder.php index 483def5..4e2b4e5 100644 --- a/database/seeders/MenuSeeder.php +++ b/database/seeders/MenuSeeder.php @@ -36,6 +36,15 @@ public function run() 'parent_id' => null, 'permission_id' => Permission::where('name', 'student-list')->first()->id, ], + [ + 'name' => 'Guru', + 'icon' => 'mdi:account-multiple', + 'url' => 'teachers', + 'status' => 1, + 'order' => 11, + 'parent_id' => null, + 'permission_id' => Permission::where('name', 'teacher-list')->first()->id, + ], [ 'name' => 'IDUKA', 'icon' => 'mdi:building', diff --git a/database/seeders/PermissionTableSeeder.php b/database/seeders/PermissionTableSeeder.php index 688ed93..06dd024 100644 --- a/database/seeders/PermissionTableSeeder.php +++ b/database/seeders/PermissionTableSeeder.php @@ -82,6 +82,8 @@ public function run() 'student-list', + 'teacher-list', + 'journal-list', 'journal-create', 'journal-edit', diff --git a/resources/views/teachers/edit.blade.php b/resources/views/teachers/edit.blade.php new file mode 100644 index 0000000..20c7c9f --- /dev/null +++ b/resources/views/teachers/edit.blade.php @@ -0,0 +1,36 @@ +@extends('layouts.dashboard') + +@section('dashboard-content') + + @error(['name', 'course_id', 'skills', 'company', 'start_date', 'end_date', 'extend']) +
{{ $message }}
+ @enderror + + @if (auth()->user()->can('user-edit')) + +
+ + +
+ @else + + @endif +
+
+@endsection + + +@push('scripts') + +@endpush \ No newline at end of file diff --git a/resources/views/teachers/index.blade.php b/resources/views/teachers/index.blade.php new file mode 100644 index 0000000..57b6b02 --- /dev/null +++ b/resources/views/teachers/index.blade.php @@ -0,0 +1,32 @@ +{{-- @php + dd($teachers->toArray()); +@endphp --}} + +@extends('layouts.dashboard') + +@section('dashboard-content') + + + + + Kelola + + + Nama + + + + + @foreach ($teachers as $student) + + + + + + {{ $student->name }} + + @endforeach + + +@endsection diff --git a/resources/views/users/edit.blade.php b/resources/views/users/edit.blade.php index a26d617..38cc774 100644 --- a/resources/views/users/edit.blade.php +++ b/resources/views/users/edit.blade.php @@ -1,6 +1,5 @@ @extends('layouts.dashboard') - @section('dashboard-content') @@ -65,7 +64,7 @@ @@ -91,23 +90,14 @@ @once @push('scripts') @endpush -@endonce \ No newline at end of file +@endonce diff --git a/resources/views/users/index.blade.php b/resources/views/users/index.blade.php index 07b5a7b..90c1cc7 100644 --- a/resources/views/users/index.blade.php +++ b/resources/views/users/index.blade.php @@ -6,7 +6,7 @@ @extends('layouts.dashboard') @section('dashboard-content') - diff --git a/routes/web.php b/routes/web.php index 41337ab..4e9b008 100644 --- a/routes/web.php +++ b/routes/web.php @@ -25,6 +25,7 @@ use App\Http\Controllers\PresenceStatusController; use App\Http\Controllers\ScorePredicateController; use App\Exports\StudentsExport; +use App\Http\Controllers\TeacherController; use Maatwebsite\Excel\Facades\Excel; use Illuminate\Http\Request; @@ -83,6 +84,10 @@ return Excel::download(new StudentsExport($request), 'students.xlsx'); })->name('students.export'); + Route::get('teachers', [TeacherController::class, 'index'])->name('teachers.index'); + Route::get('teachers/edit/{id}', [TeacherController::class, 'edit'])->name('teachers.edit'); + Route::put('teachers/update/{id}', [TeacherController::class, 'update'])->name('teachers.update'); + Route::resource('/appliances', ApplianceController::class); Route::put('appliances/{id}/accept', [ApplianceController::class, 'accept'])->name('appliances.accept'); Route::put('appliances/{id}/reject', [ApplianceController::class, 'reject'])->name('appliances.reject');