From b8f8a3f2bf81393fbca649fff63c52f59dbf090f Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Tue, 24 Dec 2024 10:01:25 +0700 Subject: [PATCH 1/7] Perbaiki pengaturan canvas dan hapus elemen gambar yang tidak terpakai - Modifikasi ukuran canvas agar sesuai dengan rasio video (portrait/landscape). - Tambahkan logika untuk menampilkan kontrol editor dan menyembunyikan kontrol kamera. - Sesuaikan ulang ukuran canvas menggambar agar sinkron dengan ukuran canvas utama. - Hapus elemen gambar pratinjau yang tidak lagi digunakan di komponen foto. --- .../views/surveyor/components/foto.blade.php | 5 --- .../views/surveyor/js/camera-editor.blade.php | 45 +++++++++++++++++-- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/resources/views/surveyor/components/foto.blade.php b/resources/views/surveyor/components/foto.blade.php index ce56427..98f2c5a 100644 --- a/resources/views/surveyor/components/foto.blade.php +++ b/resources/views/surveyor/components/foto.blade.php @@ -418,11 +418,6 @@
- Foto Lantai -
@@ -204,9 +204,9 @@ setupCanvas() { // Set initial canvas size this.canvas.width = 1280; - this.canvas.height = 960; - this.drawingCanvas.width = 1280; - this.drawingCanvas.height = 960; + this.canvas.height = (this.canvas.width * 3) / 4; + this.drawingCanvas.width = this.canvas.width; + this.drawingCanvas.height = this.canvas.height; } setupDrawingContext() { @@ -277,6 +277,43 @@ this.saveDrawingState(); } + takePhoto() { + const context = this.canvas.getContext('2d'); + + // Determine if the video is in portrait or landscape mode + const isPortrait = this.video.videoHeight > this.video.videoWidth; + + if (isPortrait) { + // Portrait mode + this.canvas.width = this.video.videoWidth; + this.canvas.height = this.video.videoHeight; + context.drawImage(this.video, 0, 0, this.canvas.width, this.canvas.height); + } else { + // Landscape mode + this.canvas.width = 1280; + this.canvas.height = (this.canvas.width * this.video.videoHeight) / this.video.videoWidth; + context.drawImage(this.video, 0, 0, this.canvas.width, this.canvas.height); + } + + // Adjust drawing canvas to match main canvas + this.drawingCanvas.width = this.canvas.width; + this.drawingCanvas.height = this.canvas.height; + + // Hide video, show canvases + this.video.style.display = 'none'; + this.canvas.style.display = 'block'; + this.drawingCanvas.style.display = 'block'; + + // Show editor controls, hide camera controls + document.getElementById('editorControls').classList.remove('hidden'); + document.getElementById('cameraControls').classList.add('hidden'); + + // Clear drawing history + this.drawingHistory = []; + this.historyIndex = -1; + this.saveDrawingState(); + } + switchCamera() { this.currentFacingMode = this.currentFacingMode === 'environment' ? 'user' : 'environment'; this.startCamera(); From 97cb88371e79ad99106b62a2a557abad225dba24 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Tue, 24 Dec 2024 10:47:14 +0700 Subject: [PATCH 2/7] Tambah role baru untuk akses modul - Menambahkan role "EO Appraisal" dan "DD Appraisal" pada daftar roles di module.json. - Memperluas aksesibilitas modul untuk peran-peran tersebut. --- module.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/module.json b/module.json index dd16ad9..15e7edd 100644 --- a/module.json +++ b/module.json @@ -245,7 +245,9 @@ "permission": "", "roles": [ "administrator", - "senior-officer" + "senior-officer", + "EO Appraisal", + "DD Appraisal" ], "sub": [ { From d1668cf04429881dbce3f45af0beabb727dd0d7d Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Tue, 24 Dec 2024 11:30:49 +0700 Subject: [PATCH 3/7] Tambahkan fitur persetujuan pada otorisator - Ditambahkan relasi baru di model Permohonan untuk persetujuan SO, EO, dan DD. - Modifikasi PenilaianController untuk menyertakan data relasi persetujuan. - Perbaikan dan penyesuaian tampilan tabel dengan kolom persetujuan. - Tambahkan logika tombol otorisator berdasarkan peran pengguna dan status persetujuan. - Update tampilan detail permohonan dengan informasi persetujuan. --- app/Http/Controllers/PenilaianController.php | 2 +- app/Models/Permohonan.php | 12 ++ .../penilaian/otorisator/index.blade.php | 181 ++++++++++++------ .../views/penilaian/otorisator/show.blade.php | 52 +++-- 4 files changed, 167 insertions(+), 80 deletions(-) diff --git a/app/Http/Controllers/PenilaianController.php b/app/Http/Controllers/PenilaianController.php index 0013891..1599ac8 100644 --- a/app/Http/Controllers/PenilaianController.php +++ b/app/Http/Controllers/PenilaianController.php @@ -536,7 +536,7 @@ $filteredRecords = $query->count(); // Ambil data dengan relasi - $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'region.teams.teamsUsers'])->get(); + $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'approveSo'])->get(); // Hitung jumlah halaman diff --git a/app/Models/Permohonan.php b/app/Models/Permohonan.php index eac4ad8..0ed5c0a 100644 --- a/app/Models/Permohonan.php +++ b/app/Models/Permohonan.php @@ -193,4 +193,16 @@ public function approveBayar(){ return $this->belongsTo(User::class, 'approve_bayar_by', 'id'); } + + public function approveEo(){ + return $this->belongsTo(User::class, 'approval_eo', 'id'); + } + + public function approveDd(){ + return $this->belongsTo(User::class, 'approval_dd', 'id'); + } + + public function approveSo(){ + return $this->belongsTo(User::class, 'approval_so', 'id'); + } } diff --git a/resources/views/penilaian/otorisator/index.blade.php b/resources/views/penilaian/otorisator/index.blade.php index 282d63a..1b0b790 100644 --- a/resources/views/penilaian/otorisator/index.blade.php +++ b/resources/views/penilaian/otorisator/index.blade.php @@ -8,8 +8,8 @@
+ data-datatable-state-save="false" id="permohonan-table" + data-api-url="{{ route('otorisator.datatables', ['otorisator' => $header]) }}">

Daftar {{ $header }} @@ -30,46 +30,59 @@
+ data-datatable-table="true"> - - - - - - - - + + + + + + + + - @if ($header == 'Pembayaran') - - @endif + - - + + + + + + + +
- - - Nomor Registrasi - - - Tanggal Permohonan - - - User Pemohon - - - Cabang Pemohon - - - Debitur - - - Tujuan Penilaian - -
+ + + Nomor Registrasi + + + Tanggal Permohonan + + + User Pemohon + + + Cabang Pemohon + + + Debitur + + + Tujuan Penilaian + + - Status Bayar - - + Status Bayar + + Action
+ Approval SO + + + Approval EO + + + Approval DD + + Action
@@ -182,34 +195,80 @@ return `${data.tujuan_penilaian.name}`; }, }, - ...(dataHeader === 'Pembayaran' && { - status_bayar: { - title: 'Status Bayar', - render: (item, data) => { - const status = data.status_bayar.replace(/_/g, - ' '); - const statusClass = data.status_bayar === 'belum_bayar' ? 'text-red-600' : - 'text-green-600'; - return ` + status_bayar: { + title: 'Status Bayar', + render: (item, data) => { + const status = data.status_bayar.replace(/_/g, + ' '); + const statusClass = data.status_bayar === 'belum_bayar' ? 'text-red-600' : + 'text-green-600'; + return ` ${status} `; - }, }, - }), - + }, + approval_so: { + title: 'Approval SO', + render: (item, data) => { + if(data.approve_so) { + return `${data.approve_so.name} | ${window.formatTanggalIndonesia(data.approval_so_at)}`; + } + return ''; + }, + }, + approval_eo: { + title: 'Approval EO', + render: (item, data) => { + if(data.approve_eo) { + return `${data.approve_eo.name} | ${window.formatTanggalIndonesia(data.approval_eo_at)}`; + } + return ''; + }, + }, + approval_dd: { + title: 'Approval DD', + render: (item, data) => { + if(data.approve_dd) { + return `${data.approve_dd.name} | ${window.formatTanggalIndonesia(data.approval_dd_at)}`; + } + return ''; + }, + }, actions: { title: 'Status', render: (item, data) => { - return `
- - - + const userRoles = @json(Auth::user()->getRoleNames()); + const isAdmin = userRoles.includes('administrator'); - - - -
`; + let buttons = ` +
+ + + + `; + if ((isAdmin || userRoles.includes('senior-officer')) && !data.approval_so) { + buttons += ` + + + + `; + } else if ((isAdmin || userRoles.includes('EO Appraisal')) && data.approval_so && !data.approval_eo) { + buttons += ` + + + + `; + } else if ((isAdmin || userRoles.includes('DD Appraisal')) && data.approval_eo && !data.approval_dd) { + buttons += ` + + + + `; + } + + buttons += `
`; + return buttons; }, } }, @@ -217,7 +276,7 @@ let dataTable = new KTDataTable(element, dataTableOptions); // Custom search functionality - searchInput.addEventListener('input', function() { + searchInput.addEventListener('input', function () { const searchValue = this.value.trim(); dataTable.search(searchValue, true); @@ -265,7 +324,7 @@ error: (error) => { console.error('Error:', error); Swal.fire('Gagal!', 'Terjadi kesalahan saat melakukan otorisator.', - 'error'); + 'error'); } }); } diff --git a/resources/views/penilaian/otorisator/show.blade.php b/resources/views/penilaian/otorisator/show.blade.php index 1cc6a38..b38f066 100644 --- a/resources/views/penilaian/otorisator/show.blade.php +++ b/resources/views/penilaian/otorisator/show.blade.php @@ -14,16 +14,16 @@ @include('lpj::component.detail-jaminan', ['backLink' => 'otorisator.'. $dataHeader . '.index']) @if($permohonan->approval_so) -
-
-

- Approval -

-
+
+
+

+ Approval +

+
-
- - +
+
+ @@ -39,17 +39,33 @@ - -
Diperiksa Oleh {{ getUser($permohonan->approval_so)->name ?? 'N/A' }}{{ getUser($permohonan->approval_dd)->name ?? 'N/A' }} {{ $permohonan->approval_dd_at ? formatTanggalIndonesia($permohonan->approval_dd_at,1) : 'N/A' }}
+ + +
-
@endif
- + @if(Auth::user()->hasAnyRole(['administrator','senior-officer']) && $permohonan->approval_so==null) + + @endif + + @if(Auth::user()->hasAnyRole(['administrator','EO Appraisal']) && $permohonan->approval_so && $permohonan->approval_eo==null) + + @endif + + @if(Auth::user()->hasAnyRole(['administrator','DD Appraisal']) && $permohonan->approval_eo && $permohonan->approval_dd==null) + + @endif
@@ -57,7 +73,7 @@ @push('scripts') +
+
+
+ FOTO JAMINAN +
+
+
+ @if (isset($formFoto)) + @foreach ($formFoto['rute_menuju_lokasi'] as $item) +
+

+ {{ $item['name_rute'] . ' ' . $loop->index + 1 }} +

+ + @if(file_exists(storage_path('app/public/'. $item['foto_rute']))) + {{ $item['foto_rute'] }} + @endif +
+ @endforeach + @endif + + @if (isset($formFoto['object_jaminan'])) + @foreach ($formFoto['object_jaminan'] as $item) +
+

+ {{ $item['name_objek'] }} +

+ + @if(file_exists(storage_path('app/public/'. $item['foto_objek']))) + {{ $item['foto_objek'] }} + @endif +
+ @endforeach + @endif + + @if (isset($formFoto['foto_basement'])) +
+

+ Basement +

+ + @if(file_exists(storage_path('app/public/'. $formFoto['foto_basement']))) + {{ $formFoto['foto_basement'] }} + @endif +
+ @endif + + @if (isset($formFoto['foto_gerbang'])) +
+

+ Gerbang +

+ + @if(file_exists(storage_path('app/public/'. $formFoto['foto_gerbang']))) + {{ $formFoto['foto_gerbang'] }} + @endif +
+ @endif + @if (isset($formFoto['pendamping'])) +
+

+ Pendamping +

+ @if(file_exists(storage_path('app/public/'. $formFoto['pendamping']))) + {{ $formFoto['pendamping'] }} + @endif +
+ @endif +
+
+

+ + From 163eee5b8c4276b6eb87431255982f5413c1a203 Mon Sep 17 00:00:00 2001 From: Daeng Deni Mardaeni Date: Tue, 24 Dec 2024 13:29:27 +0700 Subject: [PATCH 7/7] Perbaiki logika pengecekan form foto - Mengubah kondisi pengecekan dari `isset($formFoto)` menjadi `isset($formFoto['rute_menuju_lokasi'])`. - Memastikan data `rute_menuju_lokasi` tersedia sebelum melakukan iterasi untuk menampilkan foto. --- resources/views/penilai/components/print-out.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/penilai/components/print-out.blade.php b/resources/views/penilai/components/print-out.blade.php index 3f888cd..bac42a4 100644 --- a/resources/views/penilai/components/print-out.blade.php +++ b/resources/views/penilai/components/print-out.blade.php @@ -1062,7 +1062,7 @@
- @if (isset($formFoto)) + @if (isset($formFoto['rute_menuju_lokasi'])) @foreach ($formFoto['rute_menuju_lokasi'] as $item)