diff --git a/app/Http/Controllers/PenilaiController.php b/app/Http/Controllers/PenilaiController.php index 40b94d9..b78ef6a 100644 --- a/app/Http/Controllers/PenilaiController.php +++ b/app/Http/Controllers/PenilaiController.php @@ -20,11 +20,12 @@ use Modules\Location\Models\Village; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\App; use App\Helpers\Lpj; +use Modules\Lpj\Http\Requests\FormSurveyorRequest; + class PenilaiController extends Controller { public $user; - protected $surveyorController; public function __construct(SurveyorController $surveyorController) @@ -566,40 +567,53 @@ class PenilaiController extends Controller } public function storeLpjSederhanadanStandard(Request $request) - { +{ + try { + $validatedRequest = app(FormSurveyorRequest::class); + $this->surveyorController->store($validatedRequest); - try { + $data = [ + 'luas_tanah' => $request->input('luas_tanah'), + 'nilai_tanah_1' => $request->input('nilai_tanah_1'), + 'nilai_tanah_2' => $request->input('nilai_tanah_2'), + 'luas_bangunan' => $request->input('luas_bangunan'), + 'nilai_bangunan_1' => $request->input('nilai_bangunan_1'), + 'nilai_bangunan_2' => $request->input('nilai_bangunan_2'), + 'sarana_pelengkap' => $request->input('sarana_pelengkap', []), + 'nilai_sarana_pelengkap_1' => $request->input('nilai_sarana_pelengkap_1'), + 'nilai_sarana_pelengkap_2' => $request->input('nilai_sarana_pelengkap_2'), + 'total_nilai_pasar_wajar' => $request->input('total_nilai_pasar_wajar'), + 'likuidasi' => $request->input('likuidasi'), + 'likuidasi_nilai_1' => $request->input('likuidasi_nilai_1'), + 'likuidasi_nilai_2' => $request->input('likuidasi_nilai_2'), + 'asuransi_luas_bangunan' => $request->input('asuransi_luas_bangunan'), + 'asuransi_nilai_1' => $request->input('asuransi_nilai_1'), + 'asuransi_nilai_2' => $request->input('asuransi_nilai_2'), + ]; - $validatedData = $request->validate([ - 'permohonan_id' => 'required|integer', - 'document_id' => 'required|integer', - 'inspeksi_id' => 'required|integer', - 'lpj' => 'required', - ]); - Penilai::updateOrCreate( - [ - 'permohonan_id' => $validatedData['permohonan_id'], - 'dokument_id' => $validatedData['document_id'], - 'inspeksi_id' => $validatedData['inspeksi_id'], - ], - [ - 'lpj' => json_encode($validatedData['lpj']), - ] - ); - - - return response()->json([ - 'success' => true, - 'message' => 'Berhasil saved lpj' - ], 200); - } catch (\Exception $e) { - return response()->json([ - 'success' => false, - 'message' => 'Terjadi kesalahan', - 'error' => $e->getMessage() - ], 500); - } + // Update atau buat data baru + Penilai::updateOrCreate( + [ + 'permohonan_id' => $request->permohonanId, + 'dokument_id' => $request->documentId, + 'inspeksi_id' => $request->inspeksiId, + ], + [ + 'lpj' => json_encode($data), + ] + ); + return response()->json([ + 'success' => true, + 'message' => 'Berhasil menyimpan LPJ', + ], 200); + } catch (\Throwable $e) { + return response()->json([ + 'success' => false, + 'message' => 'Terjadi kesalahan saat menyimpan LPJ', + 'error' => $e->getMessage(), + ], 500); } +} public function print_out(Request $request) diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index 8824091..7247f82 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -1,568 +1,652 @@ surveyorController = $surveyorController; + // $this->penilaiController = $penilaiController; + } - /** - * Display a listing of the resource. - */ - public function index() - { - $status_permohonan = StatusPermohonan::all(); - return view('lpj::penilaian.index', compact('status_permohonan')); - } + /** + * Display a listing of the resource. + */ + public function index() + { + $status_permohonan = StatusPermohonan::all(); - /** - * Store a newly created resource in storage. - */ + return view('lpj::penilaian.index', compact('status_permohonan')); + } - public function store(PenilaianRequest $request) - { - $validatedData = $request->validated(); + /** + * Store a newly created resource in storage. + */ - if ($validatedData) { - try { - DB::beginTransaction(); + public function store(PenilaianRequest $request) + { + $validatedData = $request->validated(); - $penilaian = Penilaian::create($validatedData); - $validatedData['penilaian_id'] = $penilaian->id; - - $teams_ids = []; - $user_ids = []; - $roles = []; - - if ($validatedData['surveyor_id'] === 'pilih_dari_region') { - $surveyor_region_id = $validatedData['surveyor_region_id']; - - // Hapus team_id sebelumnya di Permohonan jika ada - $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); - if ($permohonan) { - $permohonan->update([ - 'region_id' => $surveyor_region_id, - ]); - } - - $teams_ids[] = $surveyor_region_id; - $user_ids[] = null; - $roles[] = 'surveyor'; - } else { - $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); - $teams_ids[] = $validatedData['teams_id']; - - if (isset($validatedData['penilai_surveyor_id'])) { - $user_ids[] = $validatedData['penilai_surveyor_id']; - } else { - $user_ids[] = $validatedData['surveyor_id']; - } - - $roles[] = 'surveyor'; - } - - if ($validatedData['penilai_id'] === 'pilih_dari_region') { - $penilaian_region_id = $validatedData['penilai_region_id']; - - // Hapus team_id sebelumnya di Permohonan jika ada - $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); - if ($permohonan) { - $permohonan->update([ - 'region_id' => $penilaian_region_id, - ]); - } - - $teams_ids[] = $penilaian_region_id; - $user_ids[] = null; - $roles[] = 'penilai'; - } else { - $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); - $teams_ids[] = $validatedData['teams_id']; - - if (isset($validatedData['penilai_surveyor_id'])) { - $user_ids[] = $validatedData['penilai_surveyor_id']; - } else { - $user_ids[] = $validatedData['penilai_id']; - } - - $roles[] = 'penilai'; - } - - foreach ($teams_ids as $key => $teams_id) { - PenilaianTeam::create([ - 'penilaian_id' => $validatedData['penilaian_id'], - 'team_id' => $teams_id, - 'user_id' => $user_ids[$key], - 'role' => $roles[$key], - ]); - } - - if ($validatedData['surveyor_id'] === 'pilih_dari_region' || $validatedData['penilai_id'] === 'pilih_dari_region') { - $status = $permohonan->status; - } else { - $status = 'assign'; - } - - $permohonan->update([ - 'status' => $status, - ]); - - DB::commit(); - return response()->json(['success' => true, 'message' => 'Data berhasil disimpan'], 200); - } catch (Exception $e) { - DB::rollBack(); - - return response()->json(['error' => $e->getMessage()]); - } - } - } - - /** - * Show the form for creating a new resource. - */ - public function create($id) - { - return view('lpj::penilaian.form'); - } - - /** - * Update the specified resource in storage. - */ - public function update(Request $request, $id) - { + if ($validatedData) { try { DB::beginTransaction(); - $penilaian = Penilaian::where('nomor_registrasi', $request->nomor_registrasi)->first(); - $penilaianId = $penilaian->id; + $penilaian = Penilaian::create($validatedData); + $validatedData['penilaian_id'] = $penilaian->id; - $penilainTeam = PenilaianTeam::where('penilaian_id', $penilaianId)->get(); + $teams_ids = []; + $user_ids = []; + $roles = []; + if ($validatedData['surveyor_id'] === 'pilih_dari_region') { + $surveyor_region_id = $validatedData['surveyor_region_id']; - foreach ($penilainTeam as $item) { - if ($item->role === 'surveyor' && $item->user_id === null) { - $item->update([ - 'user_id' => $request->surveyor_id, - 'role' => 'surveyor', + // Hapus team_id sebelumnya di Permohonan jika ada + $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); + if ($permohonan) { + $permohonan->update([ + 'region_id' => $surveyor_region_id, ]); } - if ($item->role === 'penilai' && $item->user_id === null) { - $item->update([ - 'user_id' => $request->penilai_id, - 'role' => 'penilai', - ]); + $teams_ids[] = $surveyor_region_id; + $user_ids[] = null; + $roles[] = 'surveyor'; + } else { + $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); + $teams_ids[] = $validatedData['teams_id']; + + if (isset($validatedData['penilai_surveyor_id'])) { + $user_ids[] = $validatedData['penilai_surveyor_id']; + } else { + $user_ids[] = $validatedData['surveyor_id']; } + + $roles[] = 'surveyor'; + } + + if ($validatedData['penilai_id'] === 'pilih_dari_region') { + $penilaian_region_id = $validatedData['penilai_region_id']; + + // Hapus team_id sebelumnya di Permohonan jika ada + $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); + if ($permohonan) { + $permohonan->update([ + 'region_id' => $penilaian_region_id, + ]); + } + + $teams_ids[] = $penilaian_region_id; + $user_ids[] = null; + $roles[] = 'penilai'; + } else { + $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first(); + $teams_ids[] = $validatedData['teams_id']; + + if (isset($validatedData['penilai_surveyor_id'])) { + $user_ids[] = $validatedData['penilai_surveyor_id']; + } else { + $user_ids[] = $validatedData['penilai_id']; + } + + $roles[] = 'penilai'; + } + + foreach ($teams_ids as $key => $teams_id) { + PenilaianTeam::create([ + 'penilaian_id' => $validatedData['penilaian_id'], + 'team_id' => $teams_id, + 'user_id' => $user_ids[$key], + 'role' => $roles[$key], + ]); + } + + if ($validatedData['surveyor_id'] === 'pilih_dari_region' || $validatedData['penilai_id'] === 'pilih_dari_region') { + $status = $permohonan->status; + } else { + $status = 'assign'; } - $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi); $permohonan->update([ - 'status' => 'assign', + 'status' => $status, ]); + DB::commit(); return response()->json(['success' => true, 'message' => 'Data berhasil disimpan'], 200); } catch (Exception $e) { DB::rollBack(); - return response()->json(['success' => false, 'error' => $e->getMessage()]); + + return response()->json(['error' => $e->getMessage()]); } } + } - /** - * Show the form for editing the specified resource. - */ - public function assignment($id) - { - $permohonan = Permohonan::with([ - 'user', - 'debiture.province', - 'debiture.city', - 'debiture.district', - 'debiture.village', - 'branch', - 'tujuanPenilaian', - ])->findOrFail($id); + /** + * Show the form for creating a new resource. + */ + public function create($id) + { + return view('lpj::penilaian.form'); + } - $idPenilaian = $permohonan->jenis_penilaian_id; - $idRegion = $permohonan->region_id; + /** + * Update the specified resource in storage. + */ + public function update(Request $request, $id) + { + try { + DB::beginTransaction(); + $penilaian = Penilaian::where('nomor_registrasi', $request->nomor_registrasi)->first(); - $jenisPenilaian = JenisPenilaian::find($idPenilaian); + $penilaianId = $penilaian->id; - $userTeam = Teams::with(['regions', 'teamsUsers.user'])->whereHas('regions', function ($q) use ($idRegion) { - $q->where('id', $idRegion); - })->get(); - - $teamPenilai = $userTeam->flatMap(function ($team) { - return $team->teamsUsers->filter(function ($teamUser) { - return $teamUser->user->roles->contains(function ($role) { - return $role->name === 'surveyor' || $role->name === 'surveyor-penilai' || $role->name === 'administrator'; - }); - })->map(function ($teamUser) { - return $teamUser->user; - }); - })->unique('id'); - - $existingTeamIds = $userTeam->pluck('id')->toArray(); - - $updateTeamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user'])->whereNotIn( - 'id', - $existingTeamIds, - )->get(); - - $regionName = null; - foreach ($userTeam as $item) { - $regionName = $item->regions; - } - - $penilaian = Penilaian::where('nomor_registrasi', $permohonan->nomor_registrasi)->first(); - - $penilaianTeam = collect(); - if ($penilaian && $penilaian->id) { - $penilaianTeam = PenilaianTeam::where('penilaian_id', $penilaian->id)->get(); - } - - return view( - 'lpj::penilaian.form', - compact( - 'permohonan', - 'teamPenilai', - 'jenisPenilaian', - 'penilaian', - 'regionName', - 'updateTeamPenilai', - 'penilaianTeam', - ), - ); - } - - /** - * Remove the specified resource from storage. - */ - - public function revisi(PenilaianRequest $request, $nomor_registrasi) - { - $validatedData = $request->validated(); - if ($validatedData) { - try { - if (isset($validatedData['dokumen']) && $request->hasFile('dokumen')) { - $file_name = $validatedData['dokumen']->getClientOriginalName(); - $validatedData['dokumen']->storeAs('public/dokumen_revisi', $file_name); - } - - $dataToUpdate = [ - 'keterangan' => $validatedData['keterangan'], - 'dokumen' => 'dokumen_revisi/' . $file_name, - 'status' => 'revisi', - ]; + $penilainTeam = PenilaianTeam::where('penilaian_id', $penilaianId)->get(); - $permohonan = Permohonan::where('nomor_registrasi', $nomor_registrasi)->first(); + foreach ($penilainTeam as $item) { + if ($item->role === 'surveyor' && $item->user_id === null) { + $item->update([ + 'user_id' => $request->surveyor_id, + 'role' => 'surveyor', + ]); + } - $permohonan->update($dataToUpdate); - return redirect()->route('penilaian.index')->with('success', 'Penilaian berhasil direvisi'); - } catch (Exception $e) { - return redirect()->route('penilaian.index')->with('error', $e->getMessage()); + if ($item->role === 'penilai' && $item->user_id === null) { + $item->update([ + 'user_id' => $request->penilai_id, + 'role' => 'penilai', + ]); } } - } - - public function dataForDatatables(Request $request) - { - if (is_null($this->user) || !$this->user->can('debitur.view')) { - } - - $query = Permohonan::query(); - - if ($request->has('search') && !empty($request->get('search'))) { - $search = $request->get('search'); - $query->where(function ($q) use ($search) { - $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); - $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); - $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%'); - $q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%'); - $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%'); - $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%'); - $q->orWhere('status', 'LIKE', '%' . $search . '%'); - }); - } - - $query->whereIn('status', ['registered', 'registrasi-final']); - - // Filter berdasarkan role - if (Auth::user()->roles[0]->name !== 'administrator') { - $query->whereHas('region.teams.teamsUsers.user', function ($q) { - $q->where('id', Auth::user()->id); - }); - } - - if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { - $order = $request->get('sortOrder'); - $column = $request->get('sortField'); - $query->orderBy($column, $order); - } - - $totalRecords = $query->count(); - - $size = $request->get('size', 10); - if ($size == 0) { - $size = 10; - } - - if ($request->has('page') && $request->has('size')) { - $page = $request->get('page', 1); - $offset = ($page - 1) * $size; - - $query->skip($offset)->take($size); - } - - $filteredRecords = $query->count(); - $data = $query->with( - ['user', 'debiture', 'branch', 'tujuanPenilaian','jenisPenilaian', 'region.teams.teamsUsers.user'], - )->get(); - - $pageCount = ceil($totalRecords / $size); - - $currentPage = max(1, $request->get('page', 1)); - return response()->json([ - 'draw' => $request->get('draw'), - 'recordsTotal' => $totalRecords, - 'recordsFiltered' => $filteredRecords, - 'pageCount' => $pageCount, - 'page' => $currentPage, - 'totalCount' => $totalRecords, - 'data' => $data, + $permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi); + $permohonan->update([ + 'status' => 'assign', ]); + DB::commit(); + return response()->json(['success' => true, 'message' => 'Data berhasil disimpan'], 200); + } catch (Exception $e) { + DB::rollBack(); + return response()->json(['success' => false, 'error' => $e->getMessage()]); + } + } + + /** + * Show the form for editing the specified resource. + */ + public function assignment($id) + { + $permohonan = Permohonan::with([ + 'user', + 'debiture.province', + 'debiture.city', + 'debiture.district', + 'debiture.village', + 'branch', + 'tujuanPenilaian', + ])->findOrFail($id); + + $idPenilaian = $permohonan->jenis_penilaian_id; + $idRegion = $permohonan->region_id; + + $jenisPenilaian = JenisPenilaian::find($idPenilaian); + + $userTeam = Teams::with(['regions', 'teamsUsers.user'])->whereHas('regions', function ($q) use ($idRegion) { + $q->where('id', $idRegion); + })->get(); + + $teamPenilai = $userTeam->flatMap(function ($team) { + return $team->teamsUsers->filter(function ($teamUser) { + return $teamUser->user->roles->contains(function ($role) { + return $role->name === 'surveyor' || $role->name === 'surveyor-penilai' || $role->name === 'administrator'; + }); + })->map(function ($teamUser) { + return $teamUser->user; + }); + })->unique('id'); + + $existingTeamIds = $userTeam->pluck('id')->toArray(); + + $updateTeamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user'])->whereNotIn( + 'id', + $existingTeamIds, + )->get(); + + $regionName = null; + foreach ($userTeam as $item) { + $regionName = $item->regions; } + $penilaian = Penilaian::where('nomor_registrasi', $permohonan->nomor_registrasi)->first(); - public function otorisator(Request $request) - { - $type = $request->route('type'); - $headers = [ - 'pelaporan' => 'Pelaporan', - 'pembayaran' => 'Pembayaran', - 'pembatalan' => 'Pembatalan', - 'sla' => 'SLA', - ]; - - $header = $headers[$type] ?? 'Pelaporan'; - - return view('lpj::penilaian.otorisator.index', compact('header')); + $penilaianTeam = collect(); + if ($penilaian && $penilaian->id) { + $penilaianTeam = PenilaianTeam::where('penilaian_id', $penilaian->id)->get(); } - public function show($id, $type) - { - $headers = [ - 'Pelaporan' => 'Pelaporan', - 'Pembayaran' => 'Pembayaran', - 'Pembatalan' => 'Pembatalan', - 'SLA' => 'SLA', - ]; + return view( + 'lpj::penilaian.form', + compact( + 'permohonan', + 'teamPenilai', + 'jenisPenilaian', + 'penilaian', + 'regionName', + 'updateTeamPenilai', + 'penilaianTeam', + ), + ); + } - $header = $headers[$type] ?? 'Pelaporan'; - $permohonan = Permohonan::find($id); + /** + * Remove the specified resource from storage. + */ - return view('lpj::penilaian.otorisator.show', compact('permohonan', 'header')); + public function revisi(PenilaianRequest $request, $nomor_registrasi) + { + $validatedData = $request->validated(); + if ($validatedData) { + try { + if (isset($validatedData['dokumen']) && $request->hasFile('dokumen')) { + $file_name = $validatedData['dokumen']->getClientOriginalName(); + $validatedData['dokumen']->storeAs('public/dokumen_revisi', $file_name); + } + + $dataToUpdate = [ + 'keterangan' => $validatedData['keterangan'], + 'dokumen' => 'dokumen_revisi/' . $file_name, + 'status' => 'revisi', + ]; + + + $permohonan = Permohonan::where('nomor_registrasi', $nomor_registrasi)->first(); + + $permohonan->update($dataToUpdate); + return redirect()->route('penilaian.index')->with('success', 'Penilaian berhasil direvisi'); + } catch (Exception $e) { + return redirect()->route('penilaian.index')->with('error', $e->getMessage()); + } + } + } + + + public function dataForDatatables(Request $request) + { + if (is_null($this->user) || !$this->user->can('debitur.view')) { } - public function otorisatorUpdate(Request $request, $id, $context) - { - $permohonan = Permohonan::find($id); - if (!$permohonan) { + $query = Permohonan::query(); + + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); + $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhere('status', 'LIKE', '%' . $search . '%'); + }); + } + + $query->whereIn('status', ['registered', 'registrasi-final']); + + // Filter berdasarkan role + if (Auth::user()->roles[0]->name !== 'administrator') { + $query->whereHas('region.teams.teamsUsers.user', function ($q) { + $q->where('id', Auth::user()->id); + }); + } + + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + $totalRecords = $query->count(); + + $size = $request->get('size', 10); + if ($size == 0) { + $size = 10; + } + + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page', 1); + $offset = ($page - 1) * $size; + + $query->skip($offset)->take($size); + } + + $filteredRecords = $query->count(); + $data = $query->with( + ['user', 'debiture', 'branch', 'tujuanPenilaian', 'region.teams.teamsUsers.user'], + )->get(); + + $pageCount = ceil($totalRecords / $size); + + $currentPage = max(1, $request->get('page', 1)); + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + + public function otorisator(Request $request) + { + $type = $request->route('type'); + $headers = [ + 'pelaporan' => 'Pelaporan', + 'pembayaran' => 'Pembayaran', + 'pembatalan' => 'Pembatalan', + 'sla' => 'SLA', + ]; + + $header = $headers[$type] ?? 'Pelaporan'; + + return view('lpj::penilaian.otorisator.index', compact('header')); + } + + public function show($id, $type) + { + $headers = [ + 'Pelaporan' => 'Pelaporan', + 'Pembayaran' => 'Pembayaran', + 'Pembatalan' => 'Pembatalan', + 'SLA' => 'SLA', + ]; + + $header = $headers[$type] ?? 'Pelaporan'; + $permohonan = Permohonan::find($id); + + return view('lpj::penilaian.otorisator.show', compact('permohonan', 'header')); + } + + public function otorisatorUpdate(Request $request, $id, $context) + { + $permohonan = Permohonan::find($id); + if (!$permohonan) { + return response()->json([ + 'message' => 'Data permohonan tidak ditemukan.', + ], 404); + } + + switch (strtolower($context)) { + case 'pembayaran': + + $newStatus = $permohonan->status_bayar === 'sudah_bayar' ? 'belum_bayar' : 'sudah_bayar'; + + $permohonan->update([ + 'status_bayar' => $newStatus, + 'keterangan' => $request->message, + ]); + break; + + case 'pembatalan': + $permohonan->update([ + 'status' => 'batal', + 'keterangan' => $request->message, + ]); + break; + + case 'pelaporan': + if (Auth::user()->roles[0]->name === 'senior-officer') { + $permohonan->update([ + 'status' => 'proses-laporan', + 'approval_so' => Auth::user()->id, + 'approval_so_at' => now(), + 'keterangan' => $request->message, + ]); + } elseif (Auth::user()->roles[0]->name === 'EO Appraisal') { + $permohonan->update([ + 'status' => 'proses-laporan', + 'approval_eo' => Auth::user()->id, + 'approval_eo_at' => now(), + 'keterangan' => $request->message, + ]); + } elseif (Auth::user()->roles[0]->name === 'DD Appraisal') { + $permohonan->update([ + 'status' => 'proses-laporan', + 'approval_dd' => Auth::user()->id, + 'approval_dd_at' => now(), + 'keterangan' => $request->message, + ]); + } + break; + + case 'sla': + + $permohonan->update([ + 'status' => 'proses-sla', + 'keterangan' => $request->message, + ]); + break; + + default: + return response()->json([ - 'message' => 'Data permohonan tidak ditemukan.', - ], 404); + 'message' => 'Konteks otorisasi tidak valid.', + ], 400); + } + + + return response()->json([ + 'message' => 'Otorisasi berhasil dilakukan.', + 'data' => $permohonan, + ]); + } + + + public function dataForAuthorization(Request $request, $otorisator) + { + if (is_null($this->user) || !$this->user->can('debitur.view')) { + // abort(403, 'Sorry! You are not allowed to view users.'); + } + + + // Tentukan status berdasarkan otorisator + $status = match ($otorisator) { + 'Pelaporan' => 'proses-laporan', + 'Pembayaran' => 'proses', + 'Pembatalan' => 'batal', + 'SLA' => 'freeze', + default => '', + }; + + + $query = Permohonan::query(); + + // Pencarian berdasarkan parameter search + if ($request->has('search') && !empty($request->get('search'))) { + $search = $request->get('search'); + $query->where(function ($q) use ($search) { + $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); + $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%'); + $q->orWhere('status', 'LIKE', '%' . $search . '%'); + }); + } + + + if (!empty($otorisator)) { + if ($status == 'proses') { + $query->whereIn('status_bayar', ['sudah_bayar', 'belum_bayar']); + } elseif ($status == 'proses-laporan') { + $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); + } elseif ($status == 'batal') { + $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); + } elseif ($status == 'freeze') { + $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); } + } - switch (strtolower($context)) { - case 'pembayaran': - - $newStatus = $permohonan->status_bayar === 'sudah_bayar' ? 'belum_bayar' : 'sudah_bayar'; - - $permohonan->update([ - 'status_bayar' => $newStatus, - 'keterangan' => $request->message, - ]); - break; - - case 'pembatalan': - $permohonan->update([ - 'status' => 'batal', - 'keterangan' => $request->message, - ]); - break; - - case 'pelaporan': - if(Auth::user()->roles[0]->name === 'senior-officer') { - $permohonan->update([ - 'status' => 'proses-laporan', - 'approval_so' => Auth::user()->id, - 'approval_so_at' => now(), - 'keterangan' => $request->message, - ]); - } elseif(Auth::user()->roles[0]->name === 'EO Appraisal') { - $permohonan->update([ - 'status' => 'proses-laporan', - 'approval_eo' => Auth::user()->id, - 'approval_eo_at' => now(), - 'keterangan' => $request->message, - ]); - } elseif(Auth::user()->roles[0]->name === 'DD Appraisal') { - $permohonan->update([ - 'status' => 'proses-laporan', - 'approval_dd' => Auth::user()->id, - 'approval_dd_at' => now(), - 'keterangan' => $request->message, - ]); - } - break; - - case 'sla': - - $permohonan->update([ - 'status' => 'proses-sla', - 'keterangan' => $request->message, - ]); - break; - - default: - - return response()->json([ - 'message' => 'Konteks otorisasi tidak valid.', - ], 400); - } + // Filter berdasarkan region user yang login + if (Auth::user()->hasRole('senior-officer')) { + $query->whereHas('region.teams.teamsUsers', function ($q) { + $q->where('user_id', Auth::id()); + }); + } + // Sorting berdasarkan sortField dan sortOrder + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); + } + + // Hitung total records + $totalRecords = $query->count(); + + // Pagination (default page size 10) + $size = $request->get('size', 10); + if ($size == 0) { + $size = 10; + } + + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page', 1); + $offset = ($page - 1) * $size; + + $query->skip($offset)->take($size); + } + + // Filtered records + $filteredRecords = $query->count(); + + // Ambil data dengan relasi + $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'approveSo'])->get(); + + + // Hitung jumlah halaman + $pageCount = ceil($totalRecords / $size); + + // Ambil current page + $currentPage = max(1, $request->get('page', 1)); + + // Return JSON response + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); + } + + public function view_laporan(Request $request) + { + + $id = $request->permohonanId; + $documentId = $request->query('documentId'); + $jaminanId = $request->query('jaminanId'); + + $permohonan = $this->surveyorController->getPermohonanJaminanId($id, $documentId, $jaminanId); + $basicData = $this->surveyorController->getCommonData(); + + $inspeksi = Inspeksi::where('permohonan_id', $id)->where('dokument_id', $documentId)->first(); + $lpj = Penilai::where('permohonan_id', $id)->where('dokument_id', $documentId)->first(); + + $forminspeksi = null; + $lpjData = null; + if ($inspeksi) { + $forminspeksi = json_decode($inspeksi->data_form, true); + } + + if ($lpj) { + $lpjData = json_decode($lpj->lpj, true); + } + + return view('lpj::penilaian.laporan-so', compact('permohonan', 'forminspeksi', 'basicData', 'inspeksi', 'lpjData')); + } + + public function storePenilaiLaporan(Request $request) + { + try { + $validatedRequest = app(FormSurveyorRequest::class); + $this->surveyorController->store($validatedRequest); + + $data = [ + 'luas_tanah' => $request->input('luas_tanah'), + 'nilai_tanah_1' => $request->input('nilai_tanah_1'), + 'nilai_tanah_2' => $request->input('nilai_tanah_2'), + 'luas_bangunan' => $request->input('luas_bangunan'), + 'nilai_bangunan_1' => $request->input('nilai_bangunan_1'), + 'nilai_bangunan_2' => $request->input('nilai_bangunan_2'), + 'sarana_pelengkap' => $request->input('sarana_pelengkap', []), + 'nilai_sarana_pelengkap_1' => $request->input('nilai_sarana_pelengkap_1'), + 'nilai_sarana_pelengkap_2' => $request->input('nilai_sarana_pelengkap_2'), + 'total_nilai_pasar_wajar' => $request->input('total_nilai_pasar_wajar'), + 'likuidasi' => $request->input('likuidasi'), + 'likuidasi_nilai_1' => $request->input('likuidasi_nilai_1'), + 'likuidasi_nilai_2' => $request->input('likuidasi_nilai_2'), + 'asuransi_luas_bangunan' => $request->input('asuransi_luas_bangunan'), + 'asuransi_nilai_1' => $request->input('asuransi_nilai_1'), + 'asuransi_nilai_2' => $request->input('asuransi_nilai_2'), + ]; + + // Update atau buat data baru + Penilai::updateOrCreate( + [ + 'permohonan_id' => $request->permohonanId, + 'dokument_id' => $request->documentId, + 'inspeksi_id' => $request->inspeksiId, + ], + [ + 'lpj' => json_encode($data), + ] + ); return response()->json([ - 'message' => 'Otorisasi berhasil dilakukan.', - 'data' => $permohonan, - ]); - } - - - public function dataForAuthorization(Request $request, $otorisator) - { - if (is_null($this->user) || !$this->user->can('debitur.view')) { - // abort(403, 'Sorry! You are not allowed to view users.'); - } - - - // Tentukan status berdasarkan otorisator - $status = match ($otorisator) { - 'Pelaporan' => 'proses-laporan', - 'Pembayaran' => 'proses', - 'Pembatalan' => 'batal', - 'SLA' => 'freeze', - default => '', - }; - - - $query = Permohonan::query(); - - // Pencarian berdasarkan parameter search - if ($request->has('search') && !empty($request->get('search'))) { - $search = $request->get('search'); - $query->where(function ($q) use ($search) { - $q->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); - $q->orWhere('tanggal_permohonan', 'LIKE', '%' . $search . '%'); - $q->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%'); - $q->orWhereRelation('debiture', 'name', 'LIKE', '%' . $search . '%'); - $q->orWhereRelation('tujuanPenilaian', 'name', 'LIKE', '%' . $search . '%'); - $q->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%'); - $q->orWhere('status', 'LIKE', '%' . $search . '%'); - }); - } - - - if (!empty($otorisator)) { - if ($status == 'proses') { - $query->whereIn('status_bayar', ['sudah_bayar', 'belum_bayar']); - } elseif ($status == 'proses-laporan') { - $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); - } elseif ($status == 'batal') { - $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); - } elseif ($status == 'freeze') { - $query->whereRaw('LOWER(status) = ?', [strtolower($status)]); - } - } - - // Filter berdasarkan region user yang login - if(Auth::user()->hasRole('senior-officer')) { - $query->whereHas('region.teams.teamsUsers', function ($q) { - $q->where('user_id', Auth::id()); - }); - } - - - // Sorting berdasarkan sortField dan sortOrder - if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { - $order = $request->get('sortOrder'); - $column = $request->get('sortField'); - $query->orderBy($column, $order); - } - - // Hitung total records - $totalRecords = $query->count(); - - // Pagination (default page size 10) - $size = $request->get('size', 10); - if ($size == 0) { - $size = 10; - } - - if ($request->has('page') && $request->has('size')) { - $page = $request->get('page', 1); - $offset = ($page - 1) * $size; - - $query->skip($offset)->take($size); - } - - // Filtered records - $filteredRecords = $query->count(); - - // Ambil data dengan relasi - $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'approveSo'])->get(); - - - // Hitung jumlah halaman - $pageCount = ceil($totalRecords / $size); - - // Ambil current page - $currentPage = max(1, $request->get('page', 1)); - - // Return JSON response + 'success' => true, + 'message' => 'Berhasil Update Laporan penilai', + 'data' => $request->all(), + ], 200); + } catch (\Throwable $e) { return response()->json([ - 'draw' => $request->get('draw'), - 'recordsTotal' => $totalRecords, - 'recordsFiltered' => $filteredRecords, - 'pageCount' => $pageCount, - 'page' => $currentPage, - 'totalCount' => $totalRecords, - 'data' => $data, - ]); + 'success' => false, + 'message' => 'Terjadi kesalahan', + 'error' => $e->getMessage() + ], 500); } - public function view_laporan(Request $request){ - - $id = $request->permohonanId; - - $permohonan = Permohonan::find($id); - return view('lpj::penilaian.laporan-so', compact('permohonan')); - } } + +} diff --git a/app/Http/Requests/FormSurveyorRequest.php b/app/Http/Requests/FormSurveyorRequest.php index 5e07ac0..2a16878 100644 --- a/app/Http/Requests/FormSurveyorRequest.php +++ b/app/Http/Requests/FormSurveyorRequest.php @@ -529,7 +529,7 @@ class FormSurveyorRequest extends FormRequest 'jenis_asset_tidak_sesuai' => 'nullable|string', 'alamat_sesuai' => 'required', 'alamat_tidak_sesuai' => 'nullable|string', - 'pihak_bank' => 'required|string', + 'pihak_bank' => 'nullable|string', 'hub_cadeb' => 'required', 'hub_cadeb_sesuai' => 'nullable|string', diff --git a/module.json b/module.json index aa2eeb7..f1a7700 100644 --- a/module.json +++ b/module.json @@ -520,17 +520,6 @@ "admin" ] }, - { - "title": "SLA", - "path": "basicdata.sla", - "classes": "", - "attributes": [], - "permission": "", - "roles": [ - "administrator", - "admin" - ] - }, { "title": "Bentuk", "path": "basicdata.bentuk-tanah", diff --git a/resources/views/activity/progres_activity/index.blade.php b/resources/views/activity/progres_activity/index.blade.php index f2f6527..1f706d8 100644 --- a/resources/views/activity/progres_activity/index.blade.php +++ b/resources/views/activity/progres_activity/index.blade.php @@ -169,7 +169,7 @@ nama_debitur: { title: 'Nama Debitur', render: (item, data) => { - return `${data.permohonan.debiture.name}` + return `${data.permohonan.debiture?.name}` }, }, tujuan_penilaian: { @@ -181,7 +181,7 @@ jenis_asset: { title: 'Jenis Asset', render: (item, data) => - `${data.permohonan.debiture.documents.map(d => d.jenis_jaminan.name) || ''}`, + `${data.permohonan.debiture?.documents?.map(d => d.jenis_jaminan.name) || ''}`, }, jenis_report: { title: 'Jenis Report', @@ -209,7 +209,7 @@ due_date: { title: 'Due Date', render: (item, data) => { - const jenis_asset = data.permohonan.debiture.documents.map(d => d.jenis_jaminan.name ); + const jenis_asset = data.permohonan.debiture?.documents?.map(d => d.jenis_jaminan.name ); return `${calculateDateSLA(jenis_asset, data.tanggal_kunjungan)}`; }, diff --git a/resources/views/component/form-penilai.blade.php b/resources/views/component/form-penilai.blade.php new file mode 100644 index 0000000..d121879 --- /dev/null +++ b/resources/views/component/form-penilai.blade.php @@ -0,0 +1,789 @@ + +
+ +{{ $permohonan->debiture->name }}
+ @endif +{{ $permohonan->nomor_registrasi }}
+{{ $permohonan->branch->name }}
+ @endif +{{ $permohonan->nomor_registrasi }}
+{{ $permohonan->user->name }}
+ @endif +{{ $permohonan->debiture->name }}
+ @endif + +{{ $permohonan->debiture->name }}
- @endif -{{ $permohonan->nomor_registrasi }}
-{{ $permohonan->branch->name }}
- @endif -{{ $permohonan->nomor_registrasi }}
-{{ $permohonan->user->name }}
- @endif -+ {{ $surveyor->userPenilaiTeam->name }} +
+ +{{ checkRegionUserName($surveyor->userPenilaiTeam->id) }} +
++ {{ $penilai->userPenilaiTeam->name }} +
+ ++ {{ checkRegionUserName($penilai->userPenilaiTeam->id) }} +
+