diff --git a/app/Http/Controllers/PenilaiController.php b/app/Http/Controllers/PenilaiController.php index 6dfc96c..f5beedd 100644 --- a/app/Http/Controllers/PenilaiController.php +++ b/app/Http/Controllers/PenilaiController.php @@ -407,26 +407,26 @@ class PenilaiController extends Controller $nomorLaporan = $this->generateNoLaporan($permohonan, $documentId, 'call-report'); $basicData = $this->surveyorController->getCommonData(); $inspeksi = Inspeksi::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first(); - // Penilai::updateOrCreate( - // [ - // 'permohonan_id' => $permohonanId, - // 'dokument_id' => $documentId, - // 'inspeksi_id' => $inspeksiId, - // ], - // [ - // 'type_penilai' => 'call-report', - // ] - // ); + Penilai::updateOrCreate( + [ + 'permohonan_id' => $permohonanId, + 'dokument_id' => $documentId, + 'inspeksi_id' => $inspeksiId, + ], + [ + 'type_penilai' => 'call-report', + ] + ); - // $resume = Penilai::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first(); + $call = Penilai::where('permohonan_id', $permohonanId)->where('dokument_id', $documentId)->first(); // $lpjData = null; - // $rap = null; - // $forminspeksi = null; - // if ($resume) { - $forminspeksi = json_decode($inspeksi->data_form, true); - // $rap = json_decode($resume->rap, true); - // } + $callReport = null; + $forminspeksi = null; + if ($forminspeksi) { + $forminspeksi = json_decode($inspeksi->data_form, true); + $callReport = json_decode($call->call_report, true); + } // Default: gunakan data dari debitur $debitur = Debiture::find($permohonan->debiture_id); @@ -460,10 +460,8 @@ class PenilaiController extends Controller } } - // return view('lpj::penilai.components.call-report', compact('permohonan', 'rap', 'provinces', 'cities', - // 'districts', - // 'villages','forminspeksi', 'noLpRAP', 'basicData','cekAlamat')); - return view('lpj::penilai.components.call-report', compact('permohonan', 'basicData', 'nomorLaporan', 'forminspeksi', 'cities', 'districts', 'villages', 'cekAlamat')); + + return view('lpj::penilai.components.call-report', compact('permohonan', 'basicData', 'nomorLaporan', 'forminspeksi', 'cities', 'districts', 'villages', 'cekAlamat', 'callReport')); } /** @@ -992,34 +990,34 @@ class PenilaiController extends Controller { try { + // DB::beginTransaction(); $validated = $request->validate([ 'permohonan_id' => 'required|exists:permohonan,id', - 'dokument_id' => 'required|exists:dokument,id', - 'inspeksi_id' => 'required|exists:inspeksi,id', + 'dokument_id' => 'required', + 'inspeksi_id' => 'required', 'data' => 'required' ]); - DB::beginTransaction(); $data = $request->input('data'); Penilai::updateOrCreate( [ - 'permohonan_id' => $request->permohonanId, - 'dokument_id' => $request->documentId, - 'inspeksi_id' => $request->inspeksiId, + 'permohonan_id' => $validated['permohonan_id'], + 'dokument_id' => $validated['dokument_id'], + 'inspeksi_id' => $validated['inspeksi_id'], ], [ - 'call-report' => json_encode($data), + 'call_report' => json_encode($validated['data']), ] ); - DB::commit(); + // DB::commit(); return response()->json([ 'success' => true, 'message' => 'Berhasil menyimpan data', - 'data' => $result + 'data' => $data ], 200); } catch (\Throwable $e) { - DB::rollBack(); + // DB::rollBack(); return response()->json([ 'success' => false, 'message' => 'Terjadi kesalahan saat menyimpan data', diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index 4b2ba7b..31e3e47 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -84,12 +84,20 @@ class PenilaianController extends Controller $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']; + if ($validatedData['penilai_surveyor_id'] == 'pilih_dari_region') { + $teams_ids[] = $validatedData['surveyor_penilai_region_id']; + $user_ids[] = null; + + } else { + $teams_ids[] = $validatedData['teams_id']; + $user_ids[] = $validatedData['penilai_surveyor_id']; + } + } else { $user_ids[] = $validatedData['surveyor_id']; + } $roles[] = 'surveyor'; @@ -111,10 +119,22 @@ class PenilaianController extends Controller $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']; + if ($validatedData['penilai_surveyor_id'] == 'pilih_dari_region') { + + + $permohonan->update([ + 'region_id' => $validatedData['surveyor_penilai_region_id'], + ]); + + $teams_ids[] = $validatedData['surveyor_penilai_region_id']; + $user_ids[] = null; + } else { + $teams_ids[] = $validatedData['teams_id']; + $user_ids[] = $validatedData['penilai_surveyor_id']; + } } else { $user_ids[] = $validatedData['penilai_id']; } @@ -122,6 +142,7 @@ class PenilaianController extends Controller $roles[] = 'penilai'; } + // dd($teams_ids, $user_ids); foreach ($teams_ids as $key => $teams_id) { PenilaianTeam::create([ 'penilaian_id' => $validatedData['penilaian_id'], @@ -131,12 +152,14 @@ class PenilaianController extends Controller ]); } - if ($validatedData['surveyor_id'] === 'pilih_dari_region' || $validatedData['penilai_id'] === 'pilih_dari_region') { + if ($validatedData['surveyor_id'] === 'pilih_dari_region' || $validatedData['penilai_id'] === 'pilih_dari_region' || $validatedData['penilai_surveyor_id'] === 'pilih_dari_region') { $status = $permohonan->status; - } else { + }else { $status = 'assign'; } + + $permohonan->update([ 'status' => $status, ]); @@ -144,6 +167,7 @@ class PenilaianController extends Controller DB::commit(); return response()->json(['success' => true, 'message' => 'Data berhasil di-assign.'], 200); } catch (Exception $e) { + dd($e); DB::rollBack(); return response()->json(['error' => $e->getMessage()]); @@ -766,7 +790,7 @@ class PenilaianController extends Controller return redirect()->back()->with('error', 'Laporan belum dibuat'); } - return view('lpj::' . $viewLaporan, compact('permohonan', 'forminspeksi', 'basicData', 'inspeksi', 'lpjData', 'provinces', 'resumeData', 'rap', 'memo', 'cities', 'districts', 'villages','formFoto', 'formPeta','nomorLaporan', 'penilai')); + return view('lpj::' . $viewLaporan, compact('permohonan', 'forminspeksi', 'basicData', 'inspeksi', 'lpjData', 'provinces', 'resumeData', 'rap', 'memo', 'cities', 'districts', 'villages', 'formFoto', 'formPeta', 'nomorLaporan', 'penilai')); } private function getViewLaporan($tipe) @@ -835,7 +859,7 @@ class PenilaianController extends Controller } } - public function revisiLaporan(Request $request,$id) + public function revisiLaporan(Request $request, $id) { $permohonan = Permohonan::findOrFail($id); $permohonan->update([ diff --git a/app/Http/Controllers/RegistrasiController.php b/app/Http/Controllers/RegistrasiController.php index 676051e..a0fb3ba 100644 --- a/app/Http/Controllers/RegistrasiController.php +++ b/app/Http/Controllers/RegistrasiController.php @@ -1,236 +1,253 @@ user) || !$this->user->can('debitur.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); } - public function dataForDatatables(Request $request) - { - if (is_null($this->user) || !$this->user->can('debitur.view')) { - //abort(403, 'Sorry! You are not allowed to view users.'); - } - - // Retrieve data from the database - $query = Permohonan::query() + // Retrieve data from the database + $query = Permohonan::query() ->whereIn('status', ['preregister', 'revisi']); - // Apply search filter if provided - 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 . '%'); - }); - } - - // Apply sorting if provided - if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { - $order = $request->get('sortOrder'); - $column = $request->get('sortField'); - $query->orderBy($column, $order); - } - - // Get the total count of records - $totalRecords = $query->count(); - - // Apply pagination if provided - if ($request->has('page') && $request->has('size')) { - $page = $request->get('page'); - $size = $request->get('size'); - $offset = ($page - 1) * $size; // Calculate the offset - - $query->skip($offset)->take($size); - } - - // Get the filtered count of records - $filteredRecords = $query->count(); - - // Get the data for the current page - $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); - - // Calculate the page count - $pageCount = ceil($totalRecords / $request->get('size')); - - // Calculate the current page number - $currentPage = 0 + 1; - - // Return the response data as a JSON object - return response()->json([ - 'draw' => $request->get('draw'), - 'recordsTotal' => $totalRecords, - 'recordsFiltered' => $filteredRecords, - 'pageCount' => $pageCount, - 'page' => $currentPage, - 'totalCount' => $totalRecords, - 'data' => $data, - ]); + // Apply search filter if provided + 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 . '%'); + }); } - public function edit($id) - { - return view('lpj::registrasi.edit', compact('id')); + // Apply sorting if provided + if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) { + $order = $request->get('sortOrder'); + $column = $request->get('sortField'); + $query->orderBy($column, $order); } - public function setData(Request $request) - : JsonResponse { - $data = []; - $datas = []; + // Get the total count of records + $totalRecords = $query->count(); - if (request()->ajax()) { - $id = $request->id; - $datas = Permohonan::find($id); + // Apply pagination if provided + if ($request->has('page') && $request->has('size')) { + $page = $request->get('page'); + $size = $request->get('size'); + $offset = ($page - 1) * $size; // Calculate the offset - if ($datas) { - $jenisPenilaians = null; - $regions = null; - $regions = Regions::pluck('name', 'id'); - $jenisPenilaians = JenisPenilaian::pluck('name', 'id'); - - $data['status'] = 'success'; - $data['regions'] = $regions; - $data['jenisPenilaians'] = $jenisPenilaians; - $data['datas'] = $datas; - $data['message'] ['message_success'] = ["data successfully found"]; - } else { - $data['status'] = 'error'; - $data['datas'] = null; - $data['message'] ['message_data'] = ["data not found"]; - } - } else { - $data['status'] = 'error'; - $data['message']['message_ajax'] = ["no ajax request"]; - } - - return response()->json($data); + $query->skip($offset)->take($size); } - public function update(Request $request, $id) - : JsonResponse { - // init - $data = []; - $dataku = []; - $tindakan = null; - if (request()->ajax()) { - $validator = RegistrasiController::rulesEditnya($request, $id); + // Get the filtered count of records + $filteredRecords = $query->count(); - if ($validator['fails']) { - $data['message'] = $validator['errors']; - $data['status'] = 'error'; - } else { - try { - $tindakan = $request->tindakan; - $dataku = [ - 'registrasi_by' => Auth::id(), - 'registrasi_at' => now(), - ]; + // Get the data for the current page + $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); - if ($tindakan == 0) { - $dataku['jenis_penilaian_id'] = $request->jenis_penilaian; - $dataku['region_id'] = $request->region; - $dataku['sla'] = $request->sla; - $dataku['status'] = 'registered'; - if ($request->catatan2) { - $dataku['registrasi_catatan'] = $request->catatan2; - } - } else { - $dataku['registrasi_catatan'] = $request->catatan; - $dataku['status'] = 'revisi'; - } + // Calculate the page count + $pageCount = ceil($totalRecords / $request->get('size')); - $data['dataku'] = $dataku; - - $modal = Permohonan::find($id); - - $modal->update($dataku); - // - $data['status'] = 'success'; - $data['message'] ['message_success'] = ['Regitrasi ' . $modal->nomor_registrasi . ' successfully']; - } catch (Exception $e) { - $data['status'] = 'error'; - $data['message'] ['message_try_catch'] = ['Regitrasi updated failed.']; - } - } - } else { - $data['status'] = 'error'; - $data['message'] ['message_ajax'] = ["no ajax request"]; - } - - return response()->json($data); - } - - public function rulesEditnya($request, $id) - { - $tindakan = null; - $jenis_penilaian = null; - $validate_catatan = ''; - $tindakan = $request->tindakan; - $jenis_penilaian = $request->jenis_penilaian; - - $validateIt = [ - // 'name' diambil dari definisi parameter yang di kirim pada POST Data - 'tindakan' => 'required', - ]; - - $messageIt = [ - 'tindakan.required' => 'Silahkan pilih Tindakan', - ]; - - if ($tindakan == 0) { - $validateIt['jenis_penilaian'] = ['required']; - $messageIt ['jenis_penilaian.required'] = 'Silahkan pilih Jenis Penilaian'; - - // INTERNAL - if (1 == $jenis_penilaian) { - $validateIt['region'] = ['required']; - $messageIt ['region.required'] = 'Silahkan pilih Region'; - } - else - { - $validateIt['sla'] = ['required']; - $messageIt ['sla.required'] = 'Silahkan isi SLA'; - } - - } elseif ($tindakan == 1) { - $validateIt['catatan'] = ['required']; - $messageIt ['catatan.required'] = 'Silahkan isi Catatan'; - } - - $validator = Validator::make($request->all(), $validateIt, $messageIt); - - $data['fails'] = $validator->fails(); - $data['errors'] = $validator->errors(); - - return $data; - } - - public function show($id) - { - $permohonan = Permohonan::find($id); - return view('lpj::registrasi.show', compact('id', 'permohonan')); - } + // Calculate the current page number + $currentPage = 0 + 1; + // Return the response data as a JSON object + return response()->json([ + 'draw' => $request->get('draw'), + 'recordsTotal' => $totalRecords, + 'recordsFiltered' => $filteredRecords, + 'pageCount' => $pageCount, + 'page' => $currentPage, + 'totalCount' => $totalRecords, + 'data' => $data, + ]); } + + public function edit($id) + { + return view('lpj::registrasi.edit', compact('id')); + } + + public function setData(Request $request): JsonResponse + { + $data = []; + $datas = []; + + if (request()->ajax()) { + $id = $request->id; + $datas = Permohonan::find($id); + + if ($datas) { + $jenisPenilaians = null; + $regions = null; + $regions = Regions::pluck('name', 'id'); + $jenisPenilaians = JenisPenilaian::pluck('name', 'id'); + + $data['status'] = 'success'; + $data['regions'] = $regions; + $data['jenisPenilaians'] = $jenisPenilaians; + $data['datas'] = $datas; + $data['message'] ['message_success'] = ["data successfully found"]; + } else { + $data['status'] = 'error'; + $data['datas'] = null; + $data['message'] ['message_data'] = ["data not found"]; + } + } else { + $data['status'] = 'error'; + $data['message']['message_ajax'] = ["no ajax request"]; + } + + return response()->json($data); + } + + public function update(Request $request, $id): JsonResponse + { + // init + $data = []; + $dataku = []; + $tindakan = null; + if (request()->ajax()) { + $validator = RegistrasiController::rulesEditnya($request, $id); + + if ($validator['fails']) { + $data['message'] = $validator['errors']; + $data['status'] = 'error'; + } else { + try { + $tindakan = $request->tindakan; + $dataku = [ + 'registrasi_by' => Auth::id(), + 'registrasi_at' => now(), + ]; + + if ($tindakan == 0) { + $dataku['jenis_penilaian_id'] = $request->jenis_penilaian; + $dataku['region_id'] = $request->region; + $dataku['sla'] = $request->sla; + $dataku['status'] = 'registered'; + if ($request->catatan2) { + $dataku['registrasi_catatan'] = $request->catatan2; + } + } else { + $dataku['registrasi_catatan'] = $request->catatan; + $dataku['status'] = 'revisi'; + } + + $data['dataku'] = $dataku; + + $modal = Permohonan::find($id); + + $modal->update($dataku); + // + $data['status'] = 'success'; + $data['message'] ['message_success'] = ['Regitrasi ' . $modal->nomor_registrasi . ' successfully']; + } catch (Exception $e) { + $data['status'] = 'error'; + $data['message'] ['message_try_catch'] = ['Regitrasi updated failed.']; + } + } + } else { + $data['status'] = 'error'; + $data['message'] ['message_ajax'] = ["no ajax request"]; + } + + return response()->json($data); + } + + public function rulesEditnya($request, $id) + { + $tindakan = null; + $jenis_penilaian = null; + $validate_catatan = ''; + $tindakan = $request->tindakan; + $jenis_penilaian = $request->jenis_penilaian; + + $validateIt = [ + // 'name' diambil dari definisi parameter yang di kirim pada POST Data + 'tindakan' => 'required', + ]; + + $messageIt = [ + 'tindakan.required' => 'Silahkan pilih Tindakan', + ]; + + if ($tindakan == 0) { + $validateIt['jenis_penilaian'] = ['required']; + $messageIt ['jenis_penilaian.required'] = 'Silahkan pilih Jenis Penilaian'; + + // INTERNAL + if (1 == $jenis_penilaian) { + $validateIt['region'] = ['required']; + $messageIt ['region.required'] = 'Silahkan pilih Region'; + } else { + $validateIt['sla'] = ['required']; + $messageIt ['sla.required'] = 'Silahkan isi SLA'; + } + + } elseif ($tindakan == 1) { + $validateIt['catatan'] = ['required']; + $messageIt ['catatan.required'] = 'Silahkan isi Catatan'; + } + + $validator = Validator::make($request->all(), $validateIt, $messageIt); + + $data['fails'] = $validator->fails(); + $data['errors'] = $validator->errors(); + + return $data; + } + + public function show($id) + { + $permohonan = Permohonan::find($id); + $debitur = Debiture::find($permohonan->debiture_id); + $documents = DokumenJaminan::with('pemilik', 'detail')->where('debiture_id', $id)->get(); + return view('lpj::registrasi.show', compact('id', 'permohonan', 'documents', 'debitur')); + } + + public function storeRevisi(Request $request, $id) + { + try { + $permohonan = Permohonan::find($id); + + $permohonan->update([ + 'status' => 'registered' + ]); + + return redirect()->route('registrasi.index')->with('success', 'Submit Revision successfully'); + } catch (Exception $e) { + return redirect()->route('registrasi.index')->with('error', 'Failed to create permohonan' . $e->getMessage()); + + } + } +} diff --git a/app/Http/Requests/PenilaianRequest.php b/app/Http/Requests/PenilaianRequest.php index 99e979a..20b9b61 100644 --- a/app/Http/Requests/PenilaianRequest.php +++ b/app/Http/Requests/PenilaianRequest.php @@ -36,7 +36,7 @@ class PenilaianRequest extends FormRequest 'penilai_surveyor_id' => 'nullable', 'surveyor_region_id' => 'nullable|required_without_all:penilai_surveyor_id,penilai_region_id,penilai_id,surveyor_id', 'penilai_region_id' => 'nullable|required_without_all:penilai_surveyor_id,surveyor_region_id,penilai_id,surveyor_id', - + 'surveyor_penilai_region_id' => 'nullable', 'keterangan' => 'nullable', ]; diff --git a/app/Models/Penilai.php b/app/Models/Penilai.php index 1d15c41..08cfbad 100644 --- a/app/Models/Penilai.php +++ b/app/Models/Penilai.php @@ -14,18 +14,7 @@ class Penilai extends Model /** * The attributes that are mass assignable. */ - protected $fillable = [ - 'dokument_id', - 'permohonan_id', - 'inspeksi_id', - 'kertas_kerja', - 'resume', - 'lpj', - 'type', - 'memo', - 'rap', - 'type_penilai' - ]; + protected $guarded = ['id']; // protected static function newFactory(): PenilaiFactory // { @@ -41,4 +30,8 @@ class Penilai extends Model return $this->belongsTo(Inspeksi::class); } + public function penilai_nilai_likuidasi(){ + return $this->hasMany(PenilaiNilaiLikuidasi::class); + } + } diff --git a/database/migrations/2025_02_20_020123_update_penilai_table.php b/database/migrations/2025_02_20_020123_update_penilai_table.php new file mode 100644 index 0000000..5fd1813 --- /dev/null +++ b/database/migrations/2025_02_20_020123_update_penilai_table.php @@ -0,0 +1,37 @@ +enum('type_penilai', ['memo', 'resume', 'standard', 'sederhana', 'rap', 'call-report']) + ->nullable() + ->comment('Jenis penilai: memo, resume, standard, sederhana, rap, call-report') + ->change(); + $table->json('call_report')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('penilai', function (Blueprint $table) { + $table->enum('type_penilai', ['memo', 'resume', 'standard', 'sederhana', 'rap']) + ->nullable() + ->comment('Jenis penilai: memo, resume, standard, sederhana, rap') + ->change(); + + $table->dropColumn(['type_penilai', 'call_report']); + }); + } +}; diff --git a/database/migrations/2025_02_20_021257_create_sla_criteria_table.php b/database/migrations/2025_02_20_021257_create_sla_criteria_table.php new file mode 100644 index 0000000..c754c5e --- /dev/null +++ b/database/migrations/2025_02_20_021257_create_sla_criteria_table.php @@ -0,0 +1,33 @@ +id(); + $table->string('name_criteria'); + $table->string('criteria'); + $table->timestamps(); + $table->softDeletes(); + + $table->unsignedBigInteger('created_by')->nullable(); + $table->unsignedBigInteger('updated_by')->nullable(); + $table->unsignedBigInteger('deleted_by')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('sla_criteria'); + } +}; diff --git a/resources/views/debitur/jaminan.blade.php b/resources/views/debitur/jaminan.blade.php index 8d6cee5..e3b1076 100644 --- a/resources/views/debitur/jaminan.blade.php +++ b/resources/views/debitur/jaminan.blade.php @@ -13,7 +13,13 @@ {{ isset($document->id) ? 'Edit' : 'Tambah' }} Data Jaminan