From f227093c95d52b9fd270f84b0c139814c8a33e82 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Mon, 14 Apr 2025 09:15:27 +0700 Subject: [PATCH 01/49] refactor(permohonan-pembatalan): perbaiki relasi dan nama metode - Menghapus import yang tidak digunakan untuk model Permohonan. - Mengganti nama metode 'creator' menjadi 'user' untuk konsistensi. - Menambahkan metode 'authorizedUser' untuk relasi dengan pengguna yang mengotorisasi. --- app/Models/PermohonanPembatalan.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/Models/PermohonanPembatalan.php b/app/Models/PermohonanPembatalan.php index 1197b2f..6626d08 100644 --- a/app/Models/PermohonanPembatalan.php +++ b/app/Models/PermohonanPembatalan.php @@ -5,7 +5,6 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; - use Modules\Lpj\Models\Permohonan; use Modules\Usermanagement\Models\User; class PermohonanPembatalan extends Base @@ -44,7 +43,11 @@ return $this->belongsTo(Permohonan::class, 'permohonan_id'); } - public function creator(){ + public function user(){ return $this->belongsTo(User::class, 'created_by'); } + + public function authorizedUser(){ + return $this->belongsTo(User::class, 'authorized_by'); + } } From 15e75c286c5572338ad297a0c51cb662ea017677 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Mon, 14 Apr 2025 09:16:07 +0700 Subject: [PATCH 02/49] feat(laporan-pembatalan): tambahkan fitur laporan pembatalan - Menambahkan controller LaporanPembatalanController untuk mengelola laporan pembatalan. - Menyediakan metode untuk menampilkan halaman laporan dan mengekspor data ke Excel. - Mengimplementasikan filter pencarian berdasarkan tanggal, cabang, dan status. - Menyediakan pagination dan sorting untuk data laporan. - Menambahkan tampilan blade untuk laporan pembatalan dengan elemen UI yang diperlukan. --- .../LaporanPembatalanController.php | 140 +++++++++ .../views/laporan_pembatalan/index.blade.php | 283 ++++++++++++++++++ 2 files changed, 423 insertions(+) create mode 100644 app/Http/Controllers/LaporanPembatalanController.php create mode 100644 resources/views/laporan_pembatalan/index.blade.php diff --git a/app/Http/Controllers/LaporanPembatalanController.php b/app/Http/Controllers/LaporanPembatalanController.php new file mode 100644 index 0000000..3f8fc5f --- /dev/null +++ b/app/Http/Controllers/LaporanPembatalanController.php @@ -0,0 +1,140 @@ +user) || !$this->user->can('debitur.view')) { + //abort(403, 'Sorry! You are not allowed to view users.'); + } + + // Retrieve data from the database + $query = PermohonanPembatalan::query(); + + + if (!Auth::user()->hasAnyRole(['administrator'])) { + $query = $query->whereHas('permohonan', function ($q) { + $q->where('branch_id', Auth::user()->branch_id); + }); + } + + $query = $query->orderBy('created_at', 'desc'); + + // Apply search filter if provided + if ($request->has('search') && !empty($request->get('search'))) { + $search = json_decode($request->get('search')); + + if (isset($search->start_date) || isset($search->end_date)) { + $query->whereBetween('created_at', [ + $search->start_date ?? '1900-01-01', + $search->end_date ?? now()->toDateString() + ]); + } + + // Filter by branch if provided + if (isset($search->branch_id) && !empty($search->branch_id)) { + $query->whereHas('permohonan', function ($q) use ($search) { + $q->where('branch_id', $search->branch_id); + }); + } + + if (isset($search->search)) { + $query->where(function ($q) use ($search) { + $q->whereHas('permohonan', function ($subq) use ($search) { + $subq->where('nomor_registrasi', 'LIKE', '%' . $search->search . '%'); + $subq->orWhereRelation('user', 'name', 'LIKE', '%' . $search->search . '%'); + $subq->orWhereRelation('branch', 'name', 'LIKE', '%' . $search->search . '%'); + }); + $q->orWhere('alasan_pembatalan', 'LIKE', '%' . $search->search . '%'); + $q->orWhere('status', 'LIKE', '%' . $search->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(); + $size = $request->get('size', 10); + if ($size == 0) { + $size = 10; + } + + // 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->get(); + + $data = $data->map(function ($item) { + return [ + 'id' => $item->id, + 'nomor_registrasi' => $item->permohonan->nomor_registrasi ?? '-', + 'tanggal_permohonan' => $item->permohonan->tanggal_permohonan ? date('d-m-Y', strtotime($item->permohonan->tanggal_permohonan)) : '-', + 'tanggal_pembatalan' => date('d-m-Y', strtotime($item->created_at)), + 'cabang' => $item->permohonan->branch->name ?? '-', + 'pemohon' => $item->permohonan->user->name ?? '-', + 'debitur' => $item->permohonan->debiture->name ?? '-', + 'alasan_pembatalan' => $item->alasan_pembatalan, + 'status' => $item->status, + 'diajukan_oleh' => $item->user->name ?? '-', + 'disetujui_oleh' => $item->authorized_by ? $item->authorizedUser->name : '-', + 'tanggal_disetujui' => $item->authorized_at ? formatTanggalIndonesia(strtotime($item->authorized_at),1) : '-' + ]; + }); + + + // Calculate the page count + $pageCount = ceil($totalRecords / $size); + + // Calculate the current page number + $currentPage = max(1, $request->get('page', 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, + ]); + } + } diff --git a/resources/views/laporan_pembatalan/index.blade.php b/resources/views/laporan_pembatalan/index.blade.php new file mode 100644 index 0000000..60f9dad --- /dev/null +++ b/resources/views/laporan_pembatalan/index.blade.php @@ -0,0 +1,283 @@ +@extends('layouts.main') + +@section('breadcrumbs') + {{-- {{ Breadcrumbs::render('laporan-pembatalan') }}--}} +@endsection + +@section('content') +
+
+
+

+ Laporan Pembatalan +

+
+
+ +
+
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Tanggal Permohonan + + + Tanggal Pembatalan + + + Cabang + + + Pemohon + + + Debitur + + + Alasan Pembatalan + + + Status + + + Diajukan Oleh + + + Disetujui Oleh + + + Tanggal Disetujui + +
+
+ +
+
+
+@endsection + +@push('scripts') + +@endpush From 8e081e69688962d8e61e3015f54c064e353422f6 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Mon, 14 Apr 2025 09:16:30 +0700 Subject: [PATCH 03/49] feat(laporan-pembatalan): tambahkan fitur ekspor laporan pembatalan - Menambahkan kelas LaporanPembatalanExport untuk mengelola ekspor data laporan pembatalan. - Mengimplementasikan filter pencarian berdasarkan nomor registrasi, nama pemohon, dan nama cabang. - Menyediakan opsi untuk memfilter berdasarkan rentang tanggal, status, dan cabang. - Menyusun data yang diekspor dengan format yang sesuai untuk laporan. --- app/Exports/LaporanPembatalanExport.php | 102 ++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 app/Exports/LaporanPembatalanExport.php diff --git a/app/Exports/LaporanPembatalanExport.php b/app/Exports/LaporanPembatalanExport.php new file mode 100644 index 0000000..b44afe2 --- /dev/null +++ b/app/Exports/LaporanPembatalanExport.php @@ -0,0 +1,102 @@ +request = $request; + } + + public function collection() + { + $query = PermohonanPembatalan::where('status', 'batal'); + + if (!Auth::user()->hasAnyRole(['administrator'])) { + $query = $query->whereHas('permohonan', function ($q) { + $q->where('branch_id', Auth::user()->branch_id); + }); + } + + // Apply search filter if provided + if ($this->request->has('search') && !empty($this->request->get('search'))) { + $search = $this->request->get('search'); + $query->where(function ($q) use ($search) { + $q->whereHas('permohonan', function ($subq) use ($search) { + $subq->where('nomor_registrasi', 'LIKE', '%' . $search . '%'); + $subq->orWhereRelation('user', 'name', 'LIKE', '%' . $search . '%'); + $subq->orWhereRelation('branch', 'name', 'LIKE', '%' . $search . '%'); + }); + $q->orWhere('alasan', 'LIKE', '%' . $search . '%'); + $q->orWhere('status', 'LIKE', '%' . $search . '%'); + }); + } + + // Filter by date range if provided + if ($this->request->has('start_date') || $this->request->has('end_date')) { + $query->whereBetween('created_at', [ + $this->request->get('start_date') ?? '1900-01-01', + $this->request->get('end_date') ?? now()->toDateString() + ]); + } + + // Filter by status if provided + if ($this->request->has('status') && !empty($this->request->get('status'))) { + $query->where('status', $this->request->get('status')); + } + + // Filter by branch if provided + if ($this->request->has('branch_id') && !empty($this->request->get('branch_id'))) { + $query->whereHas('permohonan', function ($q) { + $q->where('branch_id', $this->request->get('branch_id')); + }); + } + + return $query->orderBy('created_at', 'desc') + ->get(); + } + + public function headings(): array + { + return [ + 'No. Registrasi', + 'Tanggal Permohonan', + 'Tanggal Pembatalan', + 'Cabang', + 'Pemohon', + 'Debitur', + 'Alasan Pembatalan', + 'Status', + 'Diajukan Oleh', + 'Disetujui Oleh', + 'Tanggal Disetujui' + ]; + } + + public function map($pembatalan): array + { + return [ + $pembatalan->permohonan->nomor_registrasi ?? '-', + $pembatalan->permohonan->tanggal_permohonan ? date('d-m-Y', strtotime($pembatalan->permohonan->tanggal_permohonan)) : '-', + date('d-m-Y', strtotime($pembatalan->created_at)), + $pembatalan->permohonan->branch->name ?? '-', + $pembatalan->permohonan->user->name ?? '-', + $pembatalan->permohonan->debiture->name ?? '-', + $pembatalan->alasan_pembatalan, + $pembatalan->status, + $pembatalan->user->name ?? '-', + $pembatalan->authorized_by ? $pembatalan->authorizedUser->name : '-', + $pembatalan->authorized_at ? formatTanggalIndonesia(strtotime($pembatalan->authorized_at),1) : '-' + ]; + } + } From 1c1eee8e3a1378e89edf79dbecea696b3f75e311 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Mon, 14 Apr 2025 09:16:47 +0700 Subject: [PATCH 04/49] feat(laporan-pembatalan): tambahkan fitur laporan pembatalan - Menambahkan entri menu untuk "Laporan Pembatalan" di module.json. - Menambahkan rute untuk laporan pembatalan di web.php. - Menghubungkan rute dengan LaporanPembatalanController untuk mengelola data laporan. --- module.json | 17 +++++++++++++++++ routes/web.php | 8 ++++++++ 2 files changed, 25 insertions(+) diff --git a/module.json b/module.json index ee72503..a5e17be 100644 --- a/module.json +++ b/module.json @@ -30,6 +30,23 @@ "senior-officer" ] }, + { + "title": "Laporan Pembatalan", + "path": "laporan-pembatalan", + "icon": "ki-filled ki-filter-tablet text-lg text-primary", + "classes": "", + "attributes": [], + "permission": "", + "roles": [ + "administrator", + "pemohon-ao", + "pemohon-eo", + "admin", + "DD Appraisal", + "EO Appraisal", + "senior-officer" + ] + }, { "title": "Laporan Admin Kredit", "path": "laporan-admin-kredit", diff --git a/routes/web.php b/routes/web.php index 8d079e5..cb892c2 100644 --- a/routes/web.php +++ b/routes/web.php @@ -22,6 +22,7 @@ use Modules\Lpj\Http\Controllers\LampiranDokumenController; use Modules\Lpj\Http\Controllers\LaporanAdminKreditController; use Modules\Lpj\Http\Controllers\LaporanController; use Modules\Lpj\Http\Controllers\LaporanExternalController; + use Modules\Lpj\Http\Controllers\LaporanPembatalanController; use Modules\Lpj\Http\Controllers\LaporanPermohonanController; use Modules\Lpj\Http\Controllers\NilaiPlafondController; use Modules\Lpj\Http\Controllers\NocController; @@ -692,6 +693,13 @@ Route::middleware(['auth'])->group(function () { Route::get('/', [LaporanPermohonanController::class, 'index'])->name('index'); }); + // Laporan Pembatalan routes + Route::prefix('laporan-pembatalan')->name('laporan-pembatalan.')->group(function () { + Route::get('/', [LaporanPembatalanController::class, 'index'])->name('index'); + Route::get('/data', [LaporanPembatalanController::class, 'dataForDatatables'])->name('data'); + Route::get('/export', [LaporanPembatalanController::class, 'export'])->name('export'); + }); + }); require __DIR__ . '/registrasi.php'; From 2e07d526a8f0dbaa604c3d034f58bb916b4975a0 Mon Sep 17 00:00:00 2001 From: majid Date: Wed, 16 Apr 2025 21:34:24 +0700 Subject: [PATCH 05/49] fix(surveyor/penilai):perbaikkan pengambilan key luas unit dan handle foto di informasi --- .../components/apartemen-kantor.blade.php | 2 +- .../surveyor/components/informasi.blade.php | 46 +++++++++++-------- .../components/print-out/informasi.blade.php | 6 ++- 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/resources/views/surveyor/components/apartemen-kantor.blade.php b/resources/views/surveyor/components/apartemen-kantor.blade.php index 1034935..da7e5fe 100644 --- a/resources/views/surveyor/components/apartemen-kantor.blade.php +++ b/resources/views/surveyor/components/apartemen-kantor.blade.php @@ -16,7 +16,7 @@ $total_luas_unit = 0; $jenis_legalitas_jaminan_id = 0; if (isset($item->detail)) { - $total_luas_unit = calculateTotalLuas($item->detail, 'luas_tanah', 1, 27, 3); + $total_luas_unit = calculateTotalLuas($item->detail, 'luas_bangunan', 1, 27, 3); } @endphp Foto Gs + style="{{ isset($forminspeksi['upload_gs']) && is_string($forminspeksi['upload_gs']) && !empty($forminspeksi['upload_gs']) ? '' : 'display: none;' }} max-width: 30rem;" /> @@ -150,9 +150,9 @@ > Foto Bhumi + style="{{ isset($forminspeksi['foto_sentuh_tanahku']) && is_string($forminspeksi['foto_sentuh_tanahku']) && !empty($forminspeksi['foto_sentuh_tanahku']) ? '' : 'display: none;' }} max-width: 30rem;"/> @@ -173,9 +173,9 @@ onchange="uploadFile(this, 'gistaru-preview', 'foto_gistaru')"> Foto Bhumi + style="{{ isset($forminspeksi['foto_gistaru']) && is_string($forminspeksi['foto_gistaru']) && !empty($forminspeksi['foto_gistaru']) ? '' : 'display: none;' }} max-width: 30rem;" /> @@ -199,10 +199,15 @@ class="file-input file-input-bordered w-full " accept=".jpg,.jpeg,.png,.gif,.bmp,.tiff,.tif,.webp,.svg" onchange="uploadFile(this, 'bhumi-preview', 'foto_bhumi')"> + @php + $bhumiPath = isset($forminspeksi['foto_bhumi']) && is_string($forminspeksi['foto_bhumi']) && !empty($forminspeksi['foto_bhumi']) + ? asset('storage/' . $forminspeksi['foto_bhumi']) + : ''; + @endphp Foto Bhumi + style="{{ $bhumiPath ? '' : 'display: none;' }} max-width: 30rem;" /> Bhumi @@ -222,10 +227,16 @@ class="file-input file-input-bordered w-full" accept=".jpg,.jpeg,.png,.gif,.bmp,.tiff,.tif,.webp,.svg" onchange="uploadFile(this, 'argis-region-preview', 'foto_argis_region')"> + @php + $argisRegionPath = isset($forminspeksi['foto_argis_region']) && is_string($forminspeksi['foto_argis_region']) && !empty($forminspeksi['foto_argis_region']) + ? asset('storage/' . $forminspeksi['foto_argis_region']) + : ''; + @endphp + Foto Argis Region + style="{{ $argisRegionPath ? '' : 'display: none;' }} max-width: 30rem;"> < @@ -247,19 +258,14 @@ @php - $fotoTempat = $forminspeksi['foto_tempat'] ?? null; - $fotoSrc = ''; - - if (is_array($fotoTempat)) { - $fotoSrc = asset('storage/' . $fotoTempat[0]); - } elseif (!empty($fotoTempat)) { - $fotoSrc = asset('storage/' . $fotoTempat); - } + $fotoTempat = isset($forminspeksi['foto_tempat']) && is_string($forminspeksi['foto_tempat']) && !empty($forminspeksi['foto_tempat']) + ? asset('storage/' . $forminspeksi['foto_tempat']) + : ''; @endphp - Foto Tempat + style="max-width: 30rem; {{ $fotoTempat ? '' : 'display: none;' }}"> diff --git a/resources/views/surveyor/components/print-out/informasi.blade.php b/resources/views/surveyor/components/print-out/informasi.blade.php index f1b2a27..7e529ba 100644 --- a/resources/views/surveyor/components/print-out/informasi.blade.php +++ b/resources/views/surveyor/components/print-out/informasi.blade.php @@ -67,19 +67,21 @@ } // Filter fotoTypes untuk memastikan hanya yang memiliki imagePath valid $validPhotoTypes = array_filter($fotoTypes, function ($type) use ($forminspeksi) { - return isset($forminspeksi[$type]) && file_exists(storage_path('app/public/' . $forminspeksi[$type])); + return isset($forminspeksi[$type]) && !empty($forminspeksi[$type]) && is_string($forminspeksi[$type]); }); @endphp @foreach ($validPhotoTypes as $type) @php $imagePath = $forminspeksi[$type] ?? null; + $imageUrl = is_string($imagePath) ? asset('storage/' . $imagePath) : null; + @endphp @if ($imagePath && file_exists(storage_path('app/public/' . $imagePath))) {{ $customLabels[$type] ?? '' }} - {{ $imagePath }} From 4647e75733b25dc327bc6f5c2c693a0d72b1fc68 Mon Sep 17 00:00:00 2001 From: majid Date: Wed, 16 Apr 2025 22:53:48 +0700 Subject: [PATCH 06/49] fix(penilai): rename nama file apartement-kantor ke apartemen-kantor --- .../{apartement-kantor.blade.php => apartemen-kantor.blade.php} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename resources/views/penilai/components/analisa/{apartement-kantor.blade.php => apartemen-kantor.blade.php} (100%) diff --git a/resources/views/penilai/components/analisa/apartement-kantor.blade.php b/resources/views/penilai/components/analisa/apartemen-kantor.blade.php similarity index 100% rename from resources/views/penilai/components/analisa/apartement-kantor.blade.php rename to resources/views/penilai/components/analisa/apartemen-kantor.blade.php From a5902305d02dd1a73b2137df80a728187d219964 Mon Sep 17 00:00:00 2001 From: majid Date: Thu, 17 Apr 2025 10:04:34 +0700 Subject: [PATCH 07/49] fix(surveyor): perbaikkan upload foto mengunakan kamera dan upload file foto --- .../views/surveyor/components/foto.blade.php | 135 ++++++++++++++++++ 1 file changed, 135 insertions(+) diff --git a/resources/views/surveyor/components/foto.blade.php b/resources/views/surveyor/components/foto.blade.php index c235149..a872162 100644 --- a/resources/views/surveyor/components/foto.blade.php +++ b/resources/views/surveyor/components/foto.blade.php @@ -286,6 +286,8 @@ // Track files that are already on the server const existingFiles = new Set(); + addCameraOption(dropzoneElement, paramName); + myDropzone = new Dropzone(selector, { url: "{{ route('surveyor.storeFoto') }}", paramName: paramName, @@ -392,6 +394,133 @@ } } + + function addCameraOption(dropzoneElement, paramName) { + if (dropzoneElement.querySelector('.upload-options')) { + return; + } + + // Create the upload options container + const uploadOptionsContainer = document.createElement('div'); + uploadOptionsContainer.className = 'upload-options'; + uploadOptionsContainer.style.cssText = ` + display: flex; + justify-content: center; + margin-top: 10px; + gap: 20px; + `; + + // Create camera button + const cameraButton = document.createElement('button'); + cameraButton.type = 'button'; + cameraButton.className = 'camera-button'; + cameraButton.innerHTML = ' Kamera'; + cameraButton.style.cssText = ` + padding: 8px 16px; + background-color: #f5f8fa; + border: 1px solid #e4e6ef; + border-radius: 6px; + display: flex; + align-items: center; + gap: 8px; + cursor: pointer; + `; + + // Create file button + const fileButton = document.createElement('button'); + fileButton.type = 'button'; + fileButton.className = 'file-button'; + fileButton.innerHTML = ' File'; + fileButton.style.cssText = ` + padding: 8px 16px; + background-color: #f5f8fa; + border: 1px solid #e4e6ef; + border-radius: 6px; + display: flex; + align-items: center; + gap: 8px; + cursor: pointer; + `; + + / + const cameraInput = document.createElement('input'); + cameraInput.type = 'file'; + cameraInput.id = 'camera-input-' + paramName; + cameraInput.accept = 'image/*'; + cameraInput.capture = 'environment'; + cameraInput.style.display = 'none'; + + + const fileInput = document.createElement('input'); + fileInput.type = 'file'; + fileInput.id = 'file-input-' + paramName; + fileInput.accept = 'image/*'; + fileInput.style.display = 'none'; + + // Add event listeners - use only one instance per button + cameraButton.addEventListener('click', function(e) { + e.preventDefault(); + e.stopPropagation(); + cameraInput.click(); + }, false); + + fileButton.addEventListener('click', function(e) { + e.preventDefault(); + e.stopPropagation(); + fileInput.click(); + }, false); + + // Handle file selection for camera - clear input after use + cameraInput.addEventListener('change', function() { + if (this.files && this.files.length > 0) { + handleFileSelection(this.files, myDropzone); + + this.value = ''; + } + }, false); + + // Handle file selection for gallery - clear input after use + fileInput.addEventListener('change', function() { + if (this.files && this.files.length > 0) { + handleFileSelection(this.files, myDropzone); + + this.value = ''; + } + }, false); + + // Append elements + uploadOptionsContainer.appendChild(cameraButton); + uploadOptionsContainer.appendChild(fileButton); + document.body.appendChild(cameraInput); + document.body.appendChild(fileInput); + + // Find the message element in dropzone and insert the options after it + const dzMessage = dropzoneElement.querySelector('.dz-message'); + if (dzMessage) { + dzMessage.appendChild(uploadOptionsContainer); + } else { + dropzoneElement.appendChild(uploadOptionsContainer); + } + + + if (dzMessage) { + dzMessage.style.cssText += ` + display: flex; + flex-direction: column; + align-items: center; + `; + } + } + + + function handleFileSelection(files, dropzone) { + if (!dropzone) return; + + Array.from(files).forEach(file => { + dropzone.addFile(file); + }); + } + function loadExistingPhotos(dropzone, paramName, existingFilesSet) { showLoadingOverlay(); @@ -529,6 +658,12 @@ }); } + + // Check if device is mobile + function isMobileDevice() { + return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); + } + // Inisialisasi Dropzone untuk elemen awal dengan pengecekan function safeInitDropzone(selector, paramName) { setTimeout(() => { From b53b94e27dca5c3d73b4b6e634260d7923d37640 Mon Sep 17 00:00:00 2001 From: majid Date: Thu, 17 Apr 2025 15:33:34 +0700 Subject: [PATCH 08/49] fix(surveyor):perbaikkan hapus foto --- resources/views/surveyor/components/foto.blade.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/resources/views/surveyor/components/foto.blade.php b/resources/views/surveyor/components/foto.blade.php index 534f350..571ca91 100644 --- a/resources/views/surveyor/components/foto.blade.php +++ b/resources/views/surveyor/components/foto.blade.php @@ -364,6 +364,8 @@ param_name: paramName }; + + // Add file to existing files set to prevent duplicates existingFiles.add(file.name); @@ -830,6 +832,9 @@ const filePreviewElement = file.previewElement; + console.log(file.originalPath); + + if (!filePreviewElement) { console.error('File preview element not found for:', file); return; @@ -874,7 +879,7 @@ url: "{{ route('surveyor.hapusFoto') }}", method: 'DELETE', data: { - path: file.originalPath, + path: response.path, permohonan_id: {{ $permohonan->id ?? 0 }}, dokument_id: '{{ request('dokument') ?? '' }}', param_name: response.param_name From 5e946cdfa78f69b32c92f6d6bce2799f54bf3adf Mon Sep 17 00:00:00 2001 From: majid Date: Thu, 17 Apr 2025 19:01:46 +0700 Subject: [PATCH 09/49] fix(penilai):perbaikkan otorisasi paparan dibawah < 2M --- app/Http/Controllers/PenilaianController.php | 12 ++++++++++-- resources/views/penilaian/otorisator/show.blade.php | 6 +++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index 904c721..24a60bf 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -603,8 +603,15 @@ class PenilaianController extends Controller break; case 'paparan': if (Auth::user()->roles[0]->name === 'senior-officer' || Auth::user()->roles[0]->name === 'administrator' && $authorization->approve_so === null) { + $status = '3'; + if (in_array($permohonan->nilai_plafond_id, [3])) { + $status = '1'; + $permohonan->update([ + 'status' => $authorization->request + ]); + } $authorization->update([ - 'status' => '3', + 'status' => $status, 'status_so' => '1', 'approve_so' => Auth::user()->id, 'approve_so_at' => now(), @@ -615,9 +622,10 @@ class PenilaianController extends Controller 'tanggal_paparan' => $request->tanggalPaparan, 'keterangan' => $request->keterangan ]); + } elseif (Auth::user()->roles[0]->name === 'EO Appraisal') { $status = '2'; - if (in_array($permohonan->nilai_plafond_id, [1,2])) { + if (in_array($permohonan->nilai_plafond_id, [1,2, 3])) { $status = '1'; $permohonan->update([ 'status' => $authorization->request diff --git a/resources/views/penilaian/otorisator/show.blade.php b/resources/views/penilaian/otorisator/show.blade.php index 38c23cc..cf027b1 100644 --- a/resources/views/penilaian/otorisator/show.blade.php +++ b/resources/views/penilaian/otorisator/show.blade.php @@ -172,7 +172,7 @@ @if (Auth::user()->hasAnyRole(['administrator', 'EO Appraisal']) && $permohonan->approval_so && $permohonan->approval_eo == 0 && - in_array($permohonan->nilai_plafond_id, [1, 2, 4])) + in_array($permohonan->nilai_plafond_id, [1, 2,3, 4])) @endif - @if (Auth::user()->hasAnyRole(['administrator', 'EO Appraisal']) && $authorization->approve_so && $authorization->approve_eo == null && in_array($permohonan->nilai_plafond_id, [1, 2,4])) + @if (Auth::user()->hasAnyRole(['administrator', 'EO Appraisal']) && $authorization->approve_so && $authorization->approve_eo == null && in_array($permohonan->nilai_plafond_id, [1, 2,3,4]) && $permohonan->status === 'proses-paparan') @endif - @if (Auth::user()->hasAnyRole(['administrator', 'DD Appraisal']) && $authorization->approve_eo && $authorization->approve_dd == null && in_array($permohonan->nilai_plafond_id, [4])) + @if (Auth::user()->hasAnyRole(['administrator', 'DD Appraisal']) && $authorization->approve_eo && $authorization->approve_dd == null && in_array($permohonan->nilai_plafond_id, [4]) &&$permohonan->status === 'proses-paparan') + +
+ +
+ + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Nomor Registrasi + + + Tanggal Permohonan + + + Cabang + + + Pemohon + + + CIF + + + Nama Debitur + + + Jenis Penilaian + + + Tujuan Penilaian + + + Jenis Fasilitas Kredit + + + Jenis Agunan + + + Alamat Agunan + + + Bukti Kepemilikan + + + Nama Pemilik + + + Luas Tanah + + + Nilai Tanah + + + Luas Bangunan + + + Nilai Bangunan + + + Nilai NJOP + + + Nilai Pasar Wajar + + + Nilai Likuidasi + + + Tanggal Dokumen Diterima + + + Tanggal SPK + + + Nomor SPK + + + Tanggal Rencana Kunjungan + + + Tanggal Kunjungan + + + Tanggal Delivered + + + Jangka Waktu SLA + + + Tanggal Laporan + + + Tanggal Review + + + Nama Penilai + + + Nama Team Leader + + + Saran + + + Catatan + +
+
+
+ + +@endsection + +@push('scripts') + +@endpush From 0972f3fcff4c69989c6ca934b82678a5fa9cf04b Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Wed, 23 Apr 2025 15:51:03 +0700 Subject: [PATCH 34/49] feat(laporan-hasil-penilaian): tambahkan filter penilai pada laporan penilaian jaminan - Menambahkan filter untuk memilih penilai pada halaman laporan penilaian jaminan. - Memperbarui query untuk menyertakan filter penilai saat mengambil data. - Memperbaiki tampilan dengan menambahkan elemen input untuk filter penilai. --- app/Exports/LaporanPenilaianJaminanExport.php | 7 ++ .../LaporanPenilaianJaminanController.php | 22 +++-- .../laporan_penilaian_jaminan/index.blade.php | 91 ++++++++++++++----- 3 files changed, 88 insertions(+), 32 deletions(-) diff --git a/app/Exports/LaporanPenilaianJaminanExport.php b/app/Exports/LaporanPenilaianJaminanExport.php index cbf0196..1e063fa 100644 --- a/app/Exports/LaporanPenilaianJaminanExport.php +++ b/app/Exports/LaporanPenilaianJaminanExport.php @@ -41,6 +41,13 @@ $query->where('branch_id', $this->request->branch_id); } + if ($this->request->has('penilai_id') && !empty($this->request->penilai_id)) { + $request = $this->request; // Store in a local variable + $query->whereHas('penilaian._user_penilai.userPenilaiTeam', function($q) use ($request) { + $q->where('user_id', $request->penilai_id); + }); + } + // Apply search filter if provided if ($this->request->has('search') && !empty($this->request->search)) { $search = $this->request->search; diff --git a/app/Http/Controllers/LaporanPenilaianJaminanController.php b/app/Http/Controllers/LaporanPenilaianJaminanController.php index fd4ff07..9596161 100644 --- a/app/Http/Controllers/LaporanPenilaianJaminanController.php +++ b/app/Http/Controllers/LaporanPenilaianJaminanController.php @@ -46,6 +46,12 @@ $query->where('branch_id', $search->branch_id); } + if (isset($search->penilai_id) && !empty($search->penilai_id)) { + $query->whereHas('penilaian._user_penilai.userPenilaiTeam', function($q) use ($search) { + $q->where('user_id', $search->penilai_id); + }); + } + if (isset($search->search)) { $query->where(function ($q) use ($search) { @@ -110,12 +116,12 @@ 'id' => $permohonan->id, 'nomor_registrasi' => $permohonan->nomor_registrasi, 'tanggal_permohonan' => $permohonan->tanggal_permohonan, - 'branch' => $permohonan->debiture->branch->name, - 'name' => $permohonan->debiture->name, - 'pemohon' => $permohonan->creator->name, - 'tujuan_penilaian' => $permohonan->tujuanPenilaian->name, - 'jenis_agunan' => $permohonan->documents->pluck('jenisJaminan.name')->unique()->implode(', '), - 'alamat_agunan' => $permohonan->documents->map(function ($document) { + 'branch' => $permohonan->debiture?->branch?->name, + 'name' => $permohonan->debiture?->name, + 'pemohon' => $permohonan->creator?->name, + 'tujuan_penilaian' => $permohonan->tujuanPenilaian?->name, + 'jenis_agunan' => $permohonan->documents?->pluck('jenisJaminan.name')->unique()->implode(', '), + 'alamat_agunan' => $permohonan->documents?->map(function ($document) { return formatAlamat($document); })->unique()->implode(', '), 'luas_tanah' => $luas_tanah . ' m²', @@ -123,10 +129,10 @@ 'luas_bangunan' => $luas_bangunan . ' m²', 'nilai_bangunan' => formatRupiah($nilai_bangunan,2), 'tanggal_laporan' => $permohonan->approval_dd_at ?? $permohonan->approval_eo_at ?? '', - 'tanggal_review' => $permohonan->penilaian->tanggal_kunjungan ?? '', + 'tanggal_review' => $permohonan->penilaian?->tanggal_kunjungan ?? '', 'nilai_pasar_wajar' => formatRupiah($npw,2), 'nilai_likuidasi' => formatRupiah($nilai_liquidasi,2), - 'nama_penilai' => $permohonan->penilaian->_user_penilai->userPenilaiTeam->name, + 'nama_penilai' => $permohonan->penilaian?->_user_penilai?->userPenilaiTeam?->name, ]; }); diff --git a/resources/views/laporan_penilaian_jaminan/index.blade.php b/resources/views/laporan_penilaian_jaminan/index.blade.php index 449eddd..a95c245 100644 --- a/resources/views/laporan_penilaian_jaminan/index.blade.php +++ b/resources/views/laporan_penilaian_jaminan/index.blade.php @@ -6,44 +6,75 @@ @section('content')
-
-
-

- Laporan Penilaian Jaminan -

-
-
-