diff --git a/app/Http/Controllers/DokumenJaminanController.php b/app/Http/Controllers/DokumenJaminanController.php index d7bd597..f12ae72 100644 --- a/app/Http/Controllers/DokumenJaminanController.php +++ b/app/Http/Controllers/DokumenJaminanController.php @@ -9,6 +9,7 @@ use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Storage; + use Illuminate\Http\UploadedFile; use Log; use Modules\Location\Models\City; use Modules\Location\Models\District; @@ -249,7 +250,7 @@ 'jenis_legalitas_jaminan_id' => $value, 'name' => $request->name[$key], 'keterangan' => $request->keterangan[$key], - 'details' => isset($request->custom_field[$key]) ? json_encode($request->custom_field[$key]) : '' + 'details' => isset($request->custom_field[$key]) ? json_encode(array_values($request->custom_field[$key])) : '' ]; $dokumenJaminan = []; @@ -279,7 +280,6 @@ } - // Setelah loop, periksa apakah ada dokumen yang dihapus $existingDetail = $existingDetails->get($request->detail_dokumen_jaminan_id[$key] ?? null); @@ -287,32 +287,69 @@ $existingDokumen = json_decode($existingDetail->dokumen_jaminan, true) ?? []; $existingNomor = json_decode($existingDetail->dokumen_nomor, true) ?? []; + $newDokumenJaminan = []; + $newDokumenNomor = []; + $allFilesDeleted = true; - // Jika jumlah dokumen berkurang, berarti ada yang dihapus - if (count($existingDokumen) > count($dokumenJaminan)) { - $dokumenJaminan = $existingDokumen; - $dokumenNomor = $existingNomor; - foreach ($request->dokumen_jaminan[$key] as $index => $file) { - if ($file === null) { - // Hapus dokumen yang tidak ada lagi - unset($dokumenJaminan[$index]); - unset($dokumenNomor[$index]); + foreach ($existingDokumen as $index => $existingFile) { + if (isset($request->dokumen_jaminan[$key][$index])) { + $allFilesDeleted = false; + $file = $request->dokumen_jaminan[$key][$index]; + if ($file instanceof \Illuminate\Http\UploadedFile) { + // File baru diupload + $file_name = $file->getClientOriginalName(); + $file->storeAs('public/jaminan/' . $debitur->id . '/' . $document->id . '/', $file_name); + $newDokumenJaminan[] = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name; + $newDokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '-'; } elseif (is_string($file) && !empty($file)) { - // Update nomor dokumen untuk file yang tidak diubah - $dokumenNomor[$index] = $request->dokumen_nomor[$key][$index] ?? '-'; + // File tidak diubah + $newDokumenJaminan[] = $existingFile; + $newDokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? $existingNomor[$index]; + } + } else { + // File dihapus, hapus dari storage jika ada + if (Storage::exists('public/' . $existingFile)) { + Storage::delete('public/' . $existingFile); } } - // Reset array keys - $dokumenJaminan = array_values($dokumenJaminan); - $dokumenNomor = array_values($dokumenNomor); + } + + // Tambahkan file baru yang mungkin ditambahkan + foreach ($request->dokumen_jaminan[$key] ?? [] as $index => $file) { + if ($file instanceof UploadedFile) { + $allFilesDeleted = false; + $file_name = $file->getClientOriginalName(); + $path = 'jaminan/' . $debitur->id . '/' . $document->id . '/' . $file_name; + if (!in_array($path, $newDokumenJaminan)) { + $file->storeAs('public/' . dirname($path), $file_name); + $newDokumenJaminan[] = $path; + $newDokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '-'; + } + } elseif (is_string($file) && !empty($file) && !in_array($file, $newDokumenJaminan)) { + $allFilesDeleted = false; + $newDokumenJaminan[] = $file; + $newDokumenNomor[] = $request->dokumen_nomor[$key][$index] ?? '-'; + } + } + + if ($allFilesDeleted) { + $dokumenJaminan = []; + $dokumenNomor = []; + } else { + $dokumenJaminan = $newDokumenJaminan; + $dokumenNomor = $newDokumenNomor; } } + if (!empty($dokumenJaminan)) { $detailData['dokumen_jaminan'] = json_encode($dokumenJaminan); $detailData['dokumen_nomor'] = json_encode($dokumenNomor); + } else if(empty($dokumenJaminan)){ + $detailData['dokumen_jaminan'] = null; + $detailData['dokumen_nomor'] = null; } if (isset($request->detail_dokumen_jaminan_id[$key])) { diff --git a/app/Http/Controllers/RegistrasiController.php b/app/Http/Controllers/RegistrasiController.php index 137f10d..e3c0bdd 100644 --- a/app/Http/Controllers/RegistrasiController.php +++ b/app/Http/Controllers/RegistrasiController.php @@ -1,256 +1,265 @@ user) || !$this->user->can('debitur.view')) { - //abort(403, 'Sorry! You are not allowed to view users.'); + public function index() + { + return view('lpj::registrasi.index'); } - // Retrieve data from the database - $query = Permohonan::query() - ->whereIn('status', ['preregister', 'revisi']); + 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() + ->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 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 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 edit($id) + { + return view('lpj::registrasi.edit', compact('id')); } - // Get the total count of records - $totalRecords = $query->count(); + public function setData(Request $request) + : JsonResponse + { + $data = []; + $datas = []; - // 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 (request()->ajax()) { + $id = $request->id; + $datas = Permohonan::find($id); - $query->skip($offset)->take($size); + 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); } - // Get the filtered count of records - $filteredRecords = $query->count(); + public function show($id) + { + $permohonan = Permohonan::find($id); + $debitur = Debiture::find($permohonan->debiture_id); + $documents = DokumenJaminan::with('pemilik', 'detail')->where('permohonan_id', $id)->get(); + return view('lpj::registrasi.show', compact('id', 'permohonan', 'documents', 'debitur')); + } - // Get the data for the current page - $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get(); + public function storeRevisi(Request $request, $id) + { + try { + $permohonan = Permohonan::find($id); - // Calculate the page count - $pageCount = ceil($totalRecords / $request->get('size')); + $permohonan->update([ + 'status' => 'registered' + ]); - // Calculate the current page number - $currentPage = 0 + 1; + 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()); - // 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 update(Request $request, $id) + : JsonResponse + { + // init + $data = []; + $dataku = []; + $tindakan = null; + if (request()->ajax()) { + $validator = RegistrasiController::rulesEditnya($request, $id); - public function setData(Request $request): JsonResponse - { - $data = []; - $datas = []; + if ($validator['fails']) { + $data['message'] = $validator['errors']; + $data['status'] = 'error'; + } else { + try { + $tindakan = $request->tindakan; + $dataku = [ + 'registrasi_by' => Auth::id(), + 'registrasi_at' => now(), + ]; - if (request()->ajax()) { - $id = $request->id; - $datas = Permohonan::find($id); + if ($tindakan == 0) { + $dataku['jenis_penilaian_id'] = $request->jenis_penilaian; + $dataku['region_id'] = $request->region; + $dataku['status'] = 'registered'; + if ($request->catatan2) { + $dataku['registrasi_catatan'] = $request->catatan2; + } + } else { + $dataku['registrasi_catatan'] = $request->catatan; + $dataku['status'] = 'revisi'; + } - if ($datas) { - $jenisPenilaians = null; - $regions = null; - $regions = Regions::pluck('name', 'id'); - $jenisPenilaians = JenisPenilaian::pluck('name', 'id'); + $data['dataku'] = $dataku; - $data['status'] = 'success'; - $data['regions'] = $regions; - $data['jenisPenilaians'] = $jenisPenilaians; - $data['datas'] = $datas; - $data['message'] ['message_success'] = ["data successfully found"]; + $modal = Permohonan::find($id); + + $modal->update($dataku); + + if ($modal && $request->jenis_laporan) { + foreach ($modal->documents as $document) { + Penilai::updateOrCreate( + [ + 'permohonan_id' => $id, + 'dokument_id' => $document->id + ], + ['type' => $request->jenis_laporan] + ); + } + } + // + $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['datas'] = null; - $data['message'] ['message_data'] = ["data not found"]; + $data['message'] ['message_ajax'] = ["no ajax request"]; } - } else { - $data['status'] = 'error'; - $data['message']['message_ajax'] = ["no ajax request"]; + + return response()->json($data); } - return response()->json($data); - } + public function rulesEditnya($request, $id) + { + $tindakan = null; + $jenis_penilaian = null; + $validate_catatan = ''; + $tindakan = $request->tindakan; + $jenis_penilaian = $request->jenis_penilaian; - public function update(Request $request, $id): JsonResponse - { - // init - $data = []; - $dataku = []; - $tindakan = null; - if (request()->ajax()) { - $validator = RegistrasiController::rulesEditnya($request, $id); + $validateIt = [ + // 'name' diambil dari definisi parameter yang di kirim pada POST Data + 'tindakan' => 'required', + ]; - if ($validator['fails']) { - $data['message'] = $validator['errors']; - $data['status'] = 'error'; - } else { - try { - $tindakan = $request->tindakan; - $dataku = [ - 'registrasi_by' => Auth::id(), - 'registrasi_at' => now(), - ]; + $messageIt = [ + 'tindakan.required' => 'Silahkan pilih Tindakan', + ]; - if ($tindakan == 0) { - $dataku['jenis_penilaian_id'] = $request->jenis_penilaian; - $dataku['region_id'] = $request->region; - $dataku['status'] = 'registered'; - if ($request->catatan2) { - $dataku['registrasi_catatan'] = $request->catatan2; - } - } else { - $dataku['registrasi_catatan'] = $request->catatan; - $dataku['status'] = 'revisi'; - } + if ($tindakan == 0) { + $validateIt['jenis_penilaian'] = ['required']; + $messageIt ['jenis_penilaian.required'] = 'Silahkan pilih Jenis Penilaian'; - $data['dataku'] = $dataku; - - $modal = Permohonan::find($id); - - $modal->update($dataku); - - if($modal && $request->jenis_laporan){ - Penilai::updateOrCreate( - ['permohonan_id' => $id], - ['type' => $request->jenis_laporan] - ); - } - // - $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.']; + // INTERNAL + if (1 == $jenis_penilaian) { + $validateIt['region'] = ['required']; + $messageIt ['region.required'] = 'Silahkan pilih Region'; } + } else if ($tindakan == 1) { + $validateIt['catatan'] = ['required']; + $messageIt ['catatan.required'] = 'Silahkan isi Catatan'; } - } else { - $data['status'] = 'error'; - $data['message'] ['message_ajax'] = ["no ajax request"]; - } - return response()->json($data); - } + $validator = Validator::make($request->all(), $validateIt, $messageIt); - 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'; - } - } 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('permohonan_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()); + $data['fails'] = $validator->fails(); + $data['errors'] = $validator->errors(); + return $data; } } -} diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index cbd8afc..8cbdafe 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -762,21 +762,23 @@ class SurveyorController extends Controller } // If validation passes, update permohonan status - $permohonan = Permohonan::findOrFail($id); + $permohonan = Permohonan::with('jenisPenilaian')->findOrFail($id); $permohonan->update([ 'status' => 'survey-completed', 'submitted_at' => now() ]); - LaporanExternal::updateOrCreate( - ['permohonan_id' => $permohonan->id], - [ - 'nomor_laporan' => $permohonan->nomor_registrasi, - 'tanggal_laporan' => now(), - 'created_by' => Auth::id(), - ] - ); + if($permohonan->jenisPenilaian->name=="External") { + LaporanExternal::updateOrCreate( + ['permohonan_id' => $permohonan->id], + [ + 'nomor_laporan' => $permohonan->nomor_registrasi, + 'tanggal_laporan' => now(), + 'created_by' => Auth::id(), + ] + ); + } return response()->json([ diff --git a/app/Models/LampiranDokumen.php b/app/Models/LampiranDokumen.php index 9c98eaa..27eb576 100644 --- a/app/Models/LampiranDokumen.php +++ b/app/Models/LampiranDokumen.php @@ -27,18 +27,16 @@ class LampiranDokumen extends Base { $user = Auth::user(); - if ($user && ($user->hasRole('penilai') || $user->hasRole('administrator'))) { + if ($user && $user->hasAnyRole(['penilai', 'administrator', 'Penilai', 'admin'])) { $file = $fileData['file']; - $keterangan = $fileData['keterangan'] ?? null; - $fileName = $fileData['nama_file'] ?? time() . '_' . $file->getClientOriginalName(); $filePath = $file->storeAs('lampiran_dokumen', $fileName, 'public'); return self::create([ 'permohonan_id' => $fileData['permohonan_id'] ?? null, - 'nama_file' => $fileName, - 'path_file' => $filePath, - 'keterangan' => $keterangan, + 'nama_file' => $fileName, + 'path_file' => $filePath, + 'keterangan' => $fileData['keterangan'] ?? null, ]); } diff --git a/resources/views/component/detail-jaminan.blade.php b/resources/views/component/detail-jaminan.blade.php index b1c1825..d7d2882 100644 --- a/resources/views/component/detail-jaminan.blade.php +++ b/resources/views/component/detail-jaminan.blade.php @@ -390,7 +390,7 @@ @endforelse - @if(Auth::user()->hasRole(['Penilai', 'administrator','penilai','admin'])) + @if(Auth::user()->hasRole(['Penilai', 'administrator','penilai','admin','surveyor']))