diff --git a/app/Http/Controllers/ActivityController.php b/app/Http/Controllers/ActivityController.php index db08550..2a581e6 100644 --- a/app/Http/Controllers/ActivityController.php +++ b/app/Http/Controllers/ActivityController.php @@ -4,6 +4,7 @@ namespace Modules\Lpj\Http\Controllers; use App\Http\Controllers\Controller; use Exception; +use Carbon\Carbon; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Modules\Lpj\Models\Permohonan; @@ -47,38 +48,97 @@ class ActivityController extends Controller $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)) - ->when($teamId, fn($q) => $q->where('id', $teamId)); + $q->when($regionId, fn ($q) => $q->where('regions_id', $regionId)) + ->when($teamId, fn ($q) => $q->where('id', $teamId)); }) ->where('user_id', '!=', $user->id) - ->whereHas('user.roles', fn($q) => $q->whereIn('name', ['surveyor', 'surveyor-penilai'])) + ->whereHas('user.roles', fn ($q) => $q->whereIn('name', ['surveyor', 'surveyor-penilai'])) ->get(); return view('lpj::activity.progres_activity.index', compact('teamsActivity')); } - function updateTeamAssingment(Request $request) { - + public function updateTeamAssingment(Request $request) + { try { - $id = $request->input('id'); - $user = PenilaianTeam::where('penilaian_id', $id)->get(); - if ($user) { - foreach ($user as $item) { - if($item->role == 'surveyor') { - $item->update(['user_id' => $request->surveyor_id]); - } - } - return redirect()->route('activity.progres.index')->with('success', 'Surveyor berhasil diganti'); + // Validasi input + $request->validate([ + 'id' => 'required|integer', // penilaian_id + 'team_member_id' => 'required|integer', + 'permohonan_id' => 'required|integer', + 'user_id' => 'required|integer', + ]); + + $penilaianId = $request->input('id'); + $teamMemberId = $request->input('team_member_id'); + $permohonanId = $request->input('permohonan_id'); + $user_id = $request->input('user_id'); + + // Cek apakah permohonan ada + $permohonan = Permohonan::findOrFail($permohonanId); + + // Validasi status permohonan + if ($permohonan->status != 'assign') { + return response()->json([ + 'status' => 'error', + 'message' => 'Tidak bisa ganti tim, permohonan ini sudah mengatur jadwal.', + ]); } + // Ambil tim berdasarkan penilaian_id dan user_id + $teams = PenilaianTeam::where('penilaian_id', $penilaianId) + ->where('user_id', $user_id) + ->get(); + + // Cek apakah tim ditemukan + if ($teams->isEmpty()) { + return response()->json([ + 'status' => 'error', + 'message' => 'Data tim tidak ditemukan.', + ]); + } + + // Flag untuk mendeteksi perubahan + $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; + } + } + + if ($updated) { + return response()->json([ + 'status' => 'success', + 'message' => 'Data tim berhasil diperbarui.', + ]); + } + + return response()->json([ + 'status' => 'error', + 'message' => 'Tidak ada perubahan yang dilakukan.', + ]); } catch (\Throwable $th) { - return redirect()->route('activity.progres.index')->with('success', $th->getMessage()); + return response()->json([ + 'status' => 'error', + 'message' => $th->getMessage(), + ], 500); } } + public function senior() { return view('lpj::activity.senior_officer.index'); @@ -246,7 +306,9 @@ class ActivityController extends Controller 'permohonan.debiture', 'permohonan.tujuanPenilaian', 'permohonan.debiture.documents.jenisJaminan', - 'userPenilai', + 'userPenilai' => function ($query) use ($id) { + $query->where('user_id', $id); + }, 'permohonan.penilai', 'permohonan.approveEo', 'permohonan.approveDd', @@ -288,6 +350,73 @@ class ActivityController extends Controller // Ambil data dengan pagination $data = $query->skip($offset)->take($size)->get(); + + $data = $data->map(function ($item) { + $jeniAsset = null; + $statusPembayaran = trim(strtolower($item->permohonan->status_bayar ?? '')); + $tujuanPenilaian = $item->permohonan->tujuanPenilaian->name ?? null; + $now = Carbon::now(); + + // $plafond = $item->permohonan->nilaiPlafond->name ?? null; + // $type_report = $item->permohonan->penilai->type_penilai; + + // $hari = 0; + // if ($plafond == '< 1M') { + // $item->paparan = 'Tidak Ada'; + // }else if($plafond == '2 M - 5 M'){ + // $hari = 2; + // }else if($plafond == '5 M - 10 M'){ + // $hari = 3; + // } + + + if ($item->permohonan && $item->permohonan->debiture) { + $jeniAsset = $item->permohonan->debiture->documents->first() ?? null; + } + + $hariTambahan = 0; + + if ($tujuanPenilaian == 'RAP') { + $hariTambahan = 2; + } else { + if ($statusPembayaran == 'sudah_bayar') { + $hariTambahan = 1; // H+1 untuk yang sudah bayar + } else { + $hariTambahan = 2; // H+2 untuk yang belum bayar + } + } + + $tanggalMulai = $item->waktu_penilaian; + + if ($tanggalMulai) { + // Konversi string tanggal ke objek Carbon jika belum + if (!$tanggalMulai instanceof Carbon) { + $tanggalMulai = Carbon::parse($tanggalMulai); + } + + // Hitung tanggal selesai berdasarkan hari tambahan + $tanggalSelesai = $tanggalMulai->copy()->addDays($hariTambahan); + + // Hitung hari kerja + $hariKerja = hitungHariKerja($tanggalMulai->toDateString(), $tanggalSelesai->toDateString()); + + // Set due date SLA + $dueDateSla = $tanggalMulai->copy()->addDays($hariKerja); + + // Cek apakah sudah melewati due date + if ($now->greaterThan($dueDateSla)) { + $item->due_date_sla = null; + } else { + $item->due_date_sla = $dueDateSla->toDateString(); + } + } else { + $item->due_date_sla = null; + + } + + return $item; + }); + $filteredRecords = $data->count(); $pageCount = ceil($totalRecords / $size); diff --git a/app/Http/Controllers/PenilaiController.php b/app/Http/Controllers/PenilaiController.php index b695d90..d475e9c 100644 --- a/app/Http/Controllers/PenilaiController.php +++ b/app/Http/Controllers/PenilaiController.php @@ -709,6 +709,7 @@ class PenilaiController extends Controller 'asuransi_luas_bangunan' => $request->input('asuransi_luas_bangunan'), 'asuransi_nilai_1' => $request->input('asuransi_nilai_1'), 'asuransi_nilai_2' => $request->input('asuransi_nilai_2'), + 'keterangan_penilai' => $request->input('keterangan_penilai') ?? [], ]; $npwData = []; diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index 216cfd9..8599936 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -1972,7 +1972,8 @@ class SurveyorController extends Controller }); } - $query->whereRaw('LOWER(status) = ?', ['assign']); + $query->whereRaw('LOWER(status) IN (?, ?)', ['assign', 'survey']); + if (!Auth::user()->hasRole('administrator')) { $query->whereHas('penilaian.userPenilai', function ($q) { diff --git a/resources/views/activity/progres_activity/index.blade.php b/resources/views/activity/progres_activity/index.blade.php index fbced76..09c636c 100644 --- a/resources/views/activity/progres_activity/index.blade.php +++ b/resources/views/activity/progres_activity/index.blade.php @@ -102,6 +102,7 @@