Sync SOP ke e-doc Plant & Add Subject dan penyempurnaan bagian matrix training karyawan
This commit is contained in:
@@ -87,9 +87,12 @@ class EmployeeController extends Controller
|
||||
->pluck('initial')
|
||||
->map(fn($i) => strtolower($i))
|
||||
->toArray();
|
||||
|
||||
// [TAMBAHAN] Menarik daftar Materi/SOP untuk ditampilkan di form
|
||||
$subjects = \App\Models\Subject::orderBy('name', 'asc')->get();
|
||||
|
||||
return view('pages.admin.employee.create', compact(
|
||||
'departments', 'positions', 'trainingMatrices', 'deptPosMapping', 'existingInitials'
|
||||
'departments', 'positions', 'trainingMatrices', 'deptPosMapping', 'existingInitials', 'subjects'
|
||||
));
|
||||
}
|
||||
|
||||
@@ -112,6 +115,7 @@ class EmployeeController extends Controller
|
||||
'position_id' => 'required|exists:positions,id',
|
||||
'training_matrix_id' => 'nullable|integer',
|
||||
'documents.*' => 'nullable|file|max:5120',
|
||||
'trainings' => 'nullable|array', // Validasi input matrix
|
||||
]);
|
||||
|
||||
DB::beginTransaction();
|
||||
@@ -121,10 +125,11 @@ class EmployeeController extends Controller
|
||||
$validated['role'] = $request->role ?? 'karyawan';
|
||||
$validated['must_change_password'] = true;
|
||||
|
||||
$userData = Arr::except($validated, ['documents', 'is_trainer']);
|
||||
$userData = Arr::except($validated, ['documents', 'is_trainer', 'trainings']);
|
||||
|
||||
$user = User::create($userData);
|
||||
|
||||
// Pengaturan Hak Akses (Role)
|
||||
$rolesToAssign = [];
|
||||
if ($validated['role'] == 'admin') {
|
||||
$rolesToAssign[] = 'admin';
|
||||
@@ -142,6 +147,18 @@ class EmployeeController extends Controller
|
||||
|
||||
$user->assignRole(array_unique($rolesToAssign));
|
||||
|
||||
// [TAMBAHAN] Menyimpan Training Matrix ke tabel Pivot (employee_subject)
|
||||
if ($request->has('trainings')) {
|
||||
$matrixData = [];
|
||||
foreach ($request->trainings as $subjectId => $training) {
|
||||
if (isset($training['selected']) && $training['selected'] == 1) {
|
||||
$matrixData[$subjectId] = ['status' => $training['status']];
|
||||
}
|
||||
}
|
||||
$user->trainings()->sync($matrixData);
|
||||
}
|
||||
|
||||
// Menyimpan Dokumen
|
||||
if ($request->hasFile('documents')) {
|
||||
foreach ($request->file('documents') as $file) {
|
||||
$fileName = time() . '_' . str_replace(' ', '_', $file->getClientOriginalName());
|
||||
@@ -167,7 +184,6 @@ class EmployeeController extends Controller
|
||||
|
||||
DB::commit();
|
||||
|
||||
// FIX: Menggunakan rute jamak (employees)
|
||||
return redirect()->route('admin.employees.index')
|
||||
->with('success', "Data Karyawan {$user->first_name} berhasil ditambahkan! Password default: Karyawan123!");
|
||||
|
||||
@@ -179,12 +195,16 @@ class EmployeeController extends Controller
|
||||
|
||||
public function show(User $employee)
|
||||
{
|
||||
$employee->load(['department', 'position', 'roles']);
|
||||
// [TAMBAHAN] Memuat relasi 'trainings' agar matrix terlihat di halaman Detail
|
||||
$employee->load(['department', 'position', 'roles', 'trainings']);
|
||||
return view('pages.admin.employee.show', compact('employee'));
|
||||
}
|
||||
|
||||
public function edit(User $employee)
|
||||
{
|
||||
// [TAMBAHAN] Memuat relasi trainings yang sudah dimiliki karyawan
|
||||
$employee->load('trainings');
|
||||
|
||||
$departments = Department::with('positions')->orderBy('name', 'asc')->get();
|
||||
$positions = Position::all();
|
||||
|
||||
@@ -197,7 +217,10 @@ class EmployeeController extends Controller
|
||||
$marketingDeptIds = Department::where('name', 'LIKE', '%MKT%')->orWhere('name', 'LIKE', '%MARKETING%')->pluck('id');
|
||||
$trainingMatrices = TrainingMatrix::whereIn('department_id', $marketingDeptIds)->get();
|
||||
|
||||
return view('pages.admin.employee.edit', compact('employee', 'departments', 'positions', 'trainingMatrices', 'deptPosMapping'));
|
||||
// [TAMBAHAN] Menarik daftar semua Materi/SOP
|
||||
$subjects = \App\Models\Subject::orderBy('name', 'asc')->get();
|
||||
|
||||
return view('pages.admin.employee.edit', compact('employee', 'departments', 'positions', 'trainingMatrices', 'deptPosMapping', 'subjects'));
|
||||
}
|
||||
|
||||
public function update(Request $request, User $employee)
|
||||
@@ -219,6 +242,7 @@ class EmployeeController extends Controller
|
||||
'position_id' => 'required|exists:positions,id',
|
||||
'training_matrix_id' => 'nullable|integer',
|
||||
'is_active' => 'nullable|boolean',
|
||||
'trainings' => 'nullable|array', // Validasi input matrix
|
||||
]);
|
||||
|
||||
DB::beginTransaction();
|
||||
@@ -228,10 +252,11 @@ class EmployeeController extends Controller
|
||||
$validated['password'] = Hash::make($request->password);
|
||||
}
|
||||
|
||||
$userData = Arr::except($validated, ['is_trainer', 'is_active']);
|
||||
$userData = Arr::except($validated, ['is_trainer', 'is_active', 'trainings']);
|
||||
$userData['is_active'] = $request->has('is_active');
|
||||
$employee->update($userData);
|
||||
|
||||
// Perbarui Hak Akses (Role)
|
||||
$rolesToAssign = [];
|
||||
$inputRole = $validated['role'] ?? 'karyawan';
|
||||
|
||||
@@ -246,6 +271,22 @@ class EmployeeController extends Controller
|
||||
|
||||
$employee->syncRoles(array_unique($rolesToAssign));
|
||||
|
||||
// [TAMBAHAN] Memperbarui Training Matrix
|
||||
if ($request->has('trainings')) {
|
||||
$matrixData = [];
|
||||
foreach ($request->trainings as $subjectId => $training) {
|
||||
// Cek jika dicentang
|
||||
if (isset($training['selected']) && $training['selected'] == 1) {
|
||||
$matrixData[$subjectId] = ['status' => $training['status']];
|
||||
}
|
||||
}
|
||||
// sync() akan secara otomatis menghapus yang tidak dicentang dan menambah/memperbarui yang dicentang
|
||||
$employee->trainings()->sync($matrixData);
|
||||
} else {
|
||||
// Jika tidak ada materi yang dicentang sama sekali, kosongkan riwayat trainingnya
|
||||
$employee->trainings()->detach();
|
||||
}
|
||||
|
||||
DB::table('audit_trails')->insert([
|
||||
'user_id' => auth()->id(),
|
||||
'action' => 'Update Employee',
|
||||
@@ -256,7 +297,6 @@ class EmployeeController extends Controller
|
||||
|
||||
DB::commit();
|
||||
|
||||
// FIX: Menggunakan rute jamak (employees)
|
||||
return redirect()->route('admin.employees.index')->with('success', "Data Karyawan {$employee->first_name} berhasil diperbarui.");
|
||||
|
||||
} catch (\Exception $e) {
|
||||
@@ -264,7 +304,7 @@ class EmployeeController extends Controller
|
||||
return back()->with('error', 'Gagal memperbarui data! ' . $e->getMessage())->withInput();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function destroy(User $employee)
|
||||
{
|
||||
if ($employee->hasRole('admin')) {
|
||||
|
||||
Reference in New Issue
Block a user