diff --git a/app/Http/Controllers/ActivityController.php b/app/Http/Controllers/ActivityController.php index 2a581e6..cc300a7 100644 --- a/app/Http/Controllers/ActivityController.php +++ b/app/Http/Controllers/ActivityController.php @@ -14,6 +14,8 @@ use Modules\Lpj\Models\PenilaianTeam; use Modules\Lpj\Models\StatusPermohonan; use Modules\Lpj\Exports\PermohonanExport; use Maatwebsite\Excel\Facades\Excel; +use Modules\Lpj\Models\Teams; +use Illuminate\Support\Facades\DB; class ActivityController extends Controller { @@ -46,6 +48,7 @@ class ActivityController extends Controller $teamId = $userTeam?->teams_id; } + $teamsActivity = TeamsUsers::with(['user', 'team', 'team.regions', 'user.roles']) ->whereHas('team', function ($q) use ($regionId, $teamId) { $q->when($regionId, fn ($q) => $q->where('regions_id', $regionId)) @@ -55,7 +58,15 @@ class ActivityController extends Controller ->whereHas('user.roles', fn ($q) => $q->whereIn('name', ['surveyor', 'surveyor-penilai'])) ->get(); - return view('lpj::activity.progres_activity.index', compact('teamsActivity')); + $teamId = is_array($teamId) ? $teamId : [$teamId]; + + $teamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user'])->whereNotIn( + 'id', + $teamId + )->get(); + + + return view('lpj::activity.progres_activity.index', compact('teamsActivity', 'teamPenilai')); } @@ -63,23 +74,31 @@ class ActivityController extends Controller { try { // Validasi input - $request->validate([ + $validatedData = $request->validate([ 'id' => 'required|integer', // penilaian_id - 'team_member_id' => 'required|integer', + 'team_member_id' => 'nullable|integer', + 'region_id' => 'nullable|integer', 'permohonan_id' => 'required|integer', 'user_id' => 'required|integer', + 'team_id' => 'required|integer', + ], [ + 'team_member_id.required_without' => 'Field team_member_id atau region_id harus diisi.', + 'region_id.required_without' => 'Field region_id atau team_member_id harus diisi.', ]); - $penilaianId = $request->input('id'); - $teamMemberId = $request->input('team_member_id'); - $permohonanId = $request->input('permohonan_id'); - $user_id = $request->input('user_id'); + + $penilaianId = $validatedData['id']; + $teamMemberId = $validatedData['team_member_id'] ?? null; + $regionId = $validatedData['region_id'] ?? null; + $permohonanId = $validatedData['permohonan_id']; + $userId = $validatedData['user_id']; + $teamId = $validatedData['team_id']; // Cek apakah permohonan ada $permohonan = Permohonan::findOrFail($permohonanId); // Validasi status permohonan - if ($permohonan->status != 'assign') { + if ($permohonan->status !== 'assign') { return response()->json([ 'status' => 'error', 'message' => 'Tidak bisa ganti tim, permohonan ini sudah mengatur jadwal.', @@ -88,7 +107,7 @@ class ActivityController extends Controller // Ambil tim berdasarkan penilaian_id dan user_id $teams = PenilaianTeam::where('penilaian_id', $penilaianId) - ->where('user_id', $user_id) + ->where('user_id', $userId) ->get(); // Cek apakah tim ditemukan @@ -99,39 +118,66 @@ class ActivityController extends Controller ]); } - // Flag untuk mendeteksi perubahan + // Mulai transaksi + DB::beginTransaction(); $updated = false; - // Proses update berdasarkan role - foreach ($teams as $team) { - if ($team->role == 'surveyor') { - // Jika role-nya surveyor, update user_id menjadi teamMemberId - $team->user_id = $teamMemberId; - $team->save(); - $updated = true; - } elseif ($team->role == 'penilai') { - // Jika role-nya penilai, update user_id menjadi teamMemberId - $team->user_id = $teamMemberId; - $team->save(); - $updated = true; + // Proses update berdasarkan region_id + if ($regionId) { + foreach ($teams as $team) { + if ($team->role === 'surveyor') { + $team->update([ + 'team_id' => $regionId, + 'user_id' => null]); + $permohonan->update([ + 'status' => 'registered']); + $updated = true; + } + + if ($team->role === 'penilai') { + $team->update([ + 'team_id' => $regionId, + 'user_id' => null, + ]); + $permohonan->update([ + 'status' => 'registered', + 'region_id' => $regionId, + ]); + $updated = true; + } } } + // Proses update berdasarkan team_member_id + if ($teamMemberId) { + foreach ($teams as $team) { + if ($team->role === 'surveyor' || $team->role === 'penilai') { + $team->update(['user_id' => $teamMemberId]); + $updated = true; + } + } + } + + if ($updated) { + DB::commit(); return response()->json([ 'status' => 'success', 'message' => 'Data tim berhasil diperbarui.', ]); } + DB::rollBack(); return response()->json([ 'status' => 'error', 'message' => 'Tidak ada perubahan yang dilakukan.', ]); } catch (\Throwable $th) { + // Rollback transaksi jika terjadi error + DB::rollBack(); return response()->json([ 'status' => 'error', - 'message' => $th->getMessage(), + 'message' => 'Terjadi kesalahan: ' . $th->getMessage(), ], 500); } } @@ -139,6 +185,7 @@ class ActivityController extends Controller + public function senior() { return view('lpj::activity.senior_officer.index'); diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index 05d90f4..5295020 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -142,7 +142,7 @@ class PenilaianController extends Controller ]); DB::commit(); - return response()->json(['success' => true, 'message' => 'Data berhasil disimpan'], 200); + return response()->json(['success' => true, 'message' => 'Data berhasil di-assign.'], 200); } catch (Exception $e) { DB::rollBack(); @@ -194,7 +194,7 @@ class PenilaianController extends Controller 'status' => 'assign', ]); DB::commit(); - return response()->json(['success' => true, 'message' => 'Data berhasil disimpan'], 200); + return response()->json(['success' => true, 'message' => 'Data berhasil di-assign.'], 200); } catch (Exception $e) { DB::rollBack(); return response()->json(['success' => false, 'error' => $e->getMessage()]); diff --git a/resources/views/activity/progres_activity/index.blade.php b/resources/views/activity/progres_activity/index.blade.php index 09c636c..df7f2e7 100644 --- a/resources/views/activity/progres_activity/index.blade.php +++ b/resources/views/activity/progres_activity/index.blade.php @@ -249,7 +249,7 @@ paparan: { title: 'Paparan', - render: (item, data) => { + render: (item, data) => { if (!data.due_date_sla) { return `Sudah melewati batas`; } @@ -279,7 +279,7 @@ actions: { title: 'Action', render: (item, data) => ` - + `, }, @@ -311,68 +311,110 @@ } - + }; + + // Mulai dari pemilihan kategori + selectCategory(); + } + + @endpush