From ffd8f72c7408514f0056fe6cb67c94a95a89f47e Mon Sep 17 00:00:00 2001 From: majid Date: Tue, 11 Feb 2025 11:55:42 +0700 Subject: [PATCH 1/2] fix(surveyor): perbaikan upload foto --- app/Http/Controllers/SurveyorController.php | 4 +- .../views/surveyor/components/foto.blade.php | 252 +++++++++--------- 2 files changed, 125 insertions(+), 131 deletions(-) diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index bdab1ad..db036e9 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -81,7 +81,7 @@ use Modules\Lpj\Http\Requests\SurveyorRequest; use Modules\Lpj\Http\Requests\FormSurveyorRequest; use Modules\Lpj\Emails\SendJadwalKunjunganEmail; use App\Helpers\Lpj; - +use Modules\Lpj\Models\Authorization; class SurveyorController extends Controller { public $user; @@ -366,7 +366,7 @@ class SurveyorController extends Controller return response()->json([ 'success' => true, 'message' => 'Data berhasil disimpan', - 'file' => $newFoto + 'path' => $newFoto[0]['path'], ], 200); } diff --git a/resources/views/surveyor/components/foto.blade.php b/resources/views/surveyor/components/foto.blade.php index 7f7a008..f18abbd 100644 --- a/resources/views/surveyor/components/foto.blade.php +++ b/resources/views/surveyor/components/foto.blade.php @@ -176,7 +176,7 @@ -
+

Upload Foto

@@ -273,10 +273,11 @@ Dropzone.autoDiscover = false; document.addEventListener('DOMContentLoaded', function() { let myDropzone = null; + let uploadQueue = 0; + let uploadBatch = []; function initDropzone(selector, paramName) { try { - // Pastikan elemen ada sebelum membuat Dropzone const dropzoneElement = document.querySelector(selector); if (!dropzoneElement) { console.error(`Dropzone element not found: ${selector}`); @@ -286,7 +287,7 @@ myDropzone = new Dropzone(selector, { url: "{{ route('surveyor.storeFoto') }}", paramName: paramName, - maxFilesize: 10, + maxFilesize: 30, acceptedFiles: 'image/*', uploadMultiple: false, parallelUploads: 1, @@ -304,101 +305,41 @@ param_name: paramName, nomor_registrasi: '{{ $permohonan->nomor_registrasi ?? '' }}', }, - error: function(file, response) { - Swal.fire({ - icon: 'error', - title: 'Upload Gagal', - text: response.message || 'Error tidak diketahui' - }); + + addedfiles: function(files) { + uploadQueue += files.length; + uploadBatch = Array.from(files); + if (files.length > 0) showLoadingOverlay(); }, + error: function(file, response) { + handleUploadComplete(file, false, response.message); + }, success: function(file, response) { if (response.success) { - Swal.fire({ - icon: 'success', - title: 'Upload Berhasil', - toast: true, - position: 'top-end', - showConfirmButton: false, - timer: 1500 - }); - updatePhotoGallery(); + const fileData = { + path: response.path || file.path, + name: file.name, + description: '', + category: 'lainnya', + sub: '', + param_name: paramName + }; + + addEditAndDeleteButtons(file, fileData); + handleUploadComplete(file, true); + } else { + handleUploadComplete(file, false, response.message); } }, init: function() { // var myDropzone = this; - var loadingIndicator = $(` -
-
-
- `); - - var $dropzoneElement = $(selector); - $dropzoneElement.css('position', 'relative'); - $dropzoneElement.append(loadingIndicator); - - $.ajax({ - url: "{{ route('surveyor.getFoto') }}", - method: 'GET', - data: { - permohonan_id: {{ $permohonan->id ?? 0 }}, - dokument_id: '{{ request('dokument') ?? '' }}', - param_name: paramName - }, - headers: { - 'X-CSRF-TOKEN': '{{ csrf_token() }}' - }, - beforeSend: function() { - loadingIndicator.show(); - }, - success: function(response) { - if (response.fotos && response.fotos.length) { - response.fotos.forEach(function(foto) { - var mockFile = { - name: foto.name, - size: foto.size || 12345, - originalPath: foto.path - }; - - myDropzone.emit("addedfile", mockFile); - myDropzone.emit("thumbnail", mockFile, - foto.path); - myDropzone.emit("complete", mockFile); - addEditAndDeleteButtons(mockFile, { - path: foto.path, - name: foto.name, - description: foto - .description || '', - category: foto.category || - 'lainnya', - sub: foto.sub || '', - param_name: paramName - }); - }); - } - }, - error: function(xhr, status, error) { - console.error('Gagal memuat foto:', error); - }, - complete: function() { - loadingIndicator.hide(); - } - }); + loadExistingPhotos(this, paramName); } }); + return myDropzone; } catch (error) { console.error('Dropzone initialization error:', error); @@ -406,29 +347,8 @@ } } - function updatePhotoGallery() { - const gallery = document.querySelector('#upload-dropzone'); - - if (!myDropzone) { - console.error('Dropzone is not initialized'); - return; - } - - gallery.innerHTML = ` -
-
-
- `; + function loadExistingPhotos(dropzone, paramName) { + showLoadingOverlay(); $.ajax({ url: "{{ route('surveyor.getFoto') }}", @@ -436,15 +356,13 @@ data: { permohonan_id: {{ $permohonan->id ?? 0 }}, dokument_id: '{{ request('dokument') ?? '' }}', - param_name: 'upload_foto' + param_name: paramName }, headers: { 'X-CSRF-TOKEN': '{{ csrf_token() }}' }, success: function(response) { if (response.fotos && response.fotos.length) { - gallery.innerHTML = ''; - response.fotos.forEach(function(foto) { var mockFile = { name: foto.name, @@ -452,33 +370,113 @@ originalPath: foto.path }; - myDropzone.emit("addedfile", mockFile); - myDropzone.emit("thumbnail", mockFile, foto.path); - myDropzone.emit("complete", mockFile); + dropzone.emit("addedfile", mockFile); + dropzone.emit("thumbnail", mockFile, foto.path); + dropzone.emit("complete", mockFile); addEditAndDeleteButtons(mockFile, { path: foto.path, name: foto.name, description: foto.description || '', category: foto.category || 'lainnya', sub: foto.sub || '', - param_name: 'upload_foto' + param_name: paramName }); }); - } else { - gallery.innerHTML = '

Tidak ada foto yang ditemukan.

'; } }, error: function(xhr, status, error) { console.error('Gagal memuat foto:', error); - gallery.innerHTML = '

Gagal memuat foto. Silakan coba lagi.

'; + showErrorMessage('Gagal memuat foto yang ada'); }, complete: function() { - gallery.innerHTML = gallery.innerHTML.includes('loader') ? '' : gallery - .innerHTML; + hideLoadingOverlay(); } }); } + function handleUploadComplete(file, isSuccess, errorMessage = null) { + uploadQueue--; + const index = uploadBatch.indexOf(file); + if (index > -1) { + uploadBatch.splice(index, 1); + } + + // Show individual error if any + if (!isSuccess && errorMessage) { + showErrorMessage(errorMessage); + } + + // If all uploads are complete + if (uploadQueue === 0) { + hideLoadingOverlay(); + + // Show final status message + const totalFiles = uploadBatch.length + 1; // +1 for current file + if (totalFiles === 1) { + // Single file upload + if (isSuccess) { + showSuccessMessage('Foto berhasil diupload'); + } + } else { + // Multiple files upload + showSuccessMessage(`${totalFiles} foto berhasil diupload`); + } + + // Reset batch + uploadBatch = []; + } + } + + function showLoadingOverlay() { + const overlay = document.querySelector('.loading-overlay'); + if (!overlay) { + const dropzoneElement = document.querySelector('#upload-dropzone'); + const loadingOverlay = document.createElement('div'); + loadingOverlay.className = 'loading-overlay'; + loadingOverlay.style.cssText = ` + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(255,255,255,0.7); + display: flex; + justify-content: center; + align-items: center; + z-index: 1000; + `; + loadingOverlay.innerHTML = '
'; + dropzoneElement.appendChild(loadingOverlay); + } else { + overlay.style.display = 'flex'; + } + } + + function hideLoadingOverlay() { + const overlay = document.querySelector('.loading-overlay'); + if (overlay) overlay.style.display = 'none'; + } + + function showSuccessMessage(message) { + Swal.fire({ + icon: 'success', + title: message, + toast: true, + position: 'top-end', + showConfirmButton: false, + timer: 1500 + }); + } + + function showErrorMessage(message) { + Swal.fire({ + icon: 'error', + title: 'Upload Gagal', + text: message || 'Error tidak diketahui' + }); + } + + // Inisialisasi Dropzone untuk elemen awal dengan pengecekan function safeInitDropzone(selector, paramName) { setTimeout(() => { @@ -492,15 +490,12 @@ // Inisialisasi dropzone untuk elemen awal safeInitDropzone('#upload-dropzone', 'upload_foto'); - - // Event listener untuk menambah lantai - }); let fotoObjekJaminan = @json($fotoObjekJaminan); // Fungsi untuk membuka modal dan mengatur data - function openEditDataModal(file, response) { + window.openEditDrawer = function(file, response) { // Mengisi data input berdasarkan respons document.getElementById('editDataFilePath').value = response.path || ''; document.getElementById('editDataName').value = response.name || ''; @@ -567,12 +562,10 @@ cssMaxHeight: 500 }); - - // openModal('editPhotoModal'); } - function addEditAndDeleteButtons(file, response) { + window.addEditAndDeleteButtons = function(file, response) { const filePreviewElement = file.previewElement; @@ -592,7 +585,8 @@ editButton.style.cursor = 'pointer'; editButton.setAttribute("data-drawer-toggle", "#drawer_2_2"); editButton.onclick = function() { - openEditDataModal(file, response); + // e.preventDefault(); + openEditDrawer(file, response); }; // Tombol Hapus From 874d101b21e91e3972a652ee062ffe1326585282 Mon Sep 17 00:00:00 2001 From: majid Date: Tue, 11 Feb 2025 15:28:48 +0700 Subject: [PATCH 2/2] fix(surveyorr): perbaikan upload foto dan pembanding --- app/Http/Controllers/SurveyorController.php | 17 +- .../components/analisa/tanah.blade.php | 21 +- .../penilai/components/foto-jaminan.blade.php | 4 +- .../components/informasi-pembanding.blade.php | 2 +- .../components/print-out-standard.blade.php | 2 +- .../components/data-pembanding.blade.php | 39 +- .../views/surveyor/components/foto.blade.php | 33 +- .../pembanding-tanah-bangunan-unit.blade.php | 2 +- resources/views/surveyor/js/utils.blade.php | 335 +++++++++--------- 9 files changed, 240 insertions(+), 215 deletions(-) diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index db036e9..c929a95 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -82,6 +82,7 @@ use Modules\Lpj\Http\Requests\FormSurveyorRequest; use Modules\Lpj\Emails\SendJadwalKunjunganEmail; use App\Helpers\Lpj; use Modules\Lpj\Models\Authorization; + class SurveyorController extends Controller { public $user; @@ -1073,7 +1074,12 @@ class SurveyorController extends Controller // Pastikan input adalah array dan index valid if (is_array($inputValue) && isset($inputValue[$index])) { - $pembanding[$field] = $inputValue[$index]; + $value = $inputValue[$index]; + // Format hanya untuk harga, harga_diskon, dan total + if (in_array($field, ['harga', 'harga_diskon', 'total'])) { + $value = preg_replace('/[^0-9]/', '', $value); // Hapus karakter non-angka + } + $pembanding[$field] = $value; } else { $pembanding[$field] = null; } @@ -1178,6 +1184,9 @@ class SurveyorController extends Controller if ($request->filled($field)) { $newValue = $request->input($field); + if (in_array($field, ['harga', 'harga_diskon', 'total'])) { + $newValue = preg_replace('/[^0-9]/', '', $newValue); + } // Fields untuk tanah if (in_array($field, ['luas_tanah'])) { // Pastikan struktur array ada sebelum diakses @@ -1327,7 +1336,9 @@ class SurveyorController extends Controller foreach ($fields as $field) { if ($request->filled($field)) { $newValue = $request->input($field); - + if (in_array($field, ['harga', 'harga_diskon', 'total'])) { + $newValue = preg_replace('/[^0-9]/', '', $newValue); + } // Fields untuk alamat dalam asset if (in_array($field, ['address', 'village_code', 'district_code', 'city_code', 'province_code'])) { @@ -3532,7 +3543,7 @@ class SurveyorController extends Controller : 'lpj::surveyor.components.print-out.main'; // Generate PDF - $pdf = PDF::loadView($templateView, compact('permohonan', 'basicData', 'forminspeksi','alamat')); + $pdf = PDF::loadView($templateView, compact('permohonan', 'basicData', 'forminspeksi', 'alamat')); $pdf->setPaper('A4', 'portrait'); // Tentukan nama file PDF diff --git a/resources/views/penilai/components/analisa/tanah.blade.php b/resources/views/penilai/components/analisa/tanah.blade.php index 980a755..6f17db4 100644 --- a/resources/views/penilai/components/analisa/tanah.blade.php +++ b/resources/views/penilai/components/analisa/tanah.blade.php @@ -42,11 +42,12 @@ : null; @endphp - {{ !empty($bentukTanah) ? implode(', ', $bentukTanah) : 'Data tidak tersedia' }} + {{ !empty($bentukTanah) ? implode(', ', $bentukTanah) : '' }} - @if (in_array('Lainnya', $bentukTanah) && $lainnya) + @if (!empty($bentukTanah) && in_array('Lainnya', $bentukTanah) && !is_null($lainnya)) ({{ $lainnya }}) @endif + @@ -97,19 +98,16 @@ : @php - $posisiKavling = isset($forminspeksi['tanah']['posisi_kavling']['posisi_kavling']) - ? $forminspeksi['tanah']['posisi_kavling']['posisi_kavling'] - : []; - $lainnya = isset($forminspeksi['tanah']['posisi_kavling']['lainnya']) - ? $forminspeksi['tanah']['posisi_kavling']['lainnya'] - : null; + $posisiKavling = $forminspeksi['tanah']['posisi_kavling']['posisi_kavling'] ?? []; + $lainnya = $forminspeksi['tanah']['posisi_kavling']['lainnya'] ?? null; @endphp {{ !empty($posisiKavling) ? implode(', ', $posisiKavling) : '' }} - @if (in_array('Lainnya', $posisiKavling) && $lainnya) + @if (!empty($posisiKavling) && in_array('Lainnya', $posisiKavling) && !empty($lainnya)) ({{ $lainnya }}) @endif + @@ -134,13 +132,14 @@ @php $kondisiFisikTanah = $forminspeksi['tanah']['kondisi_fisik_tanah']['kondisi_fisik_tanah'][0] ?? '-'; - $lainnya = $forminspeksi['tanah']['kondisi_fisik_tanah']['lainnya']; + $lainnya = $forminspeksi['tanah']['kondisi_fisik_tanah']['lainnya'] ?? null; @endphp {{ $kondisiFisikTanah }} - @if ($kondisiFisikTanah === 'Lainnya' && $lainnya) + @if ($kondisiFisikTanah === 'Lainnya' && !empty($lainnya)) ({{ $lainnya }}) @endif + diff --git a/resources/views/penilai/components/foto-jaminan.blade.php b/resources/views/penilai/components/foto-jaminan.blade.php index 1888478..49a26a0 100644 --- a/resources/views/penilai/components/foto-jaminan.blade.php +++ b/resources/views/penilai/components/foto-jaminan.blade.php @@ -182,7 +182,7 @@ @endphp -

{{ $category }} - +

Lainnya - @isset($subcategory) @if (trim($subcategory) !== '') @@ -206,7 +206,7 @@ $imagePath = storage_path('app/public/' . $item['path']); @endphp -

{{ $category }} - +

Lainnya - @isset($subcategory) @if (trim($subcategory) !== '') diff --git a/resources/views/penilai/components/informasi-pembanding.blade.php b/resources/views/penilai/components/informasi-pembanding.blade.php index c2f3feb..87a8896 100644 --- a/resources/views/penilai/components/informasi-pembanding.blade.php +++ b/resources/views/penilai/components/informasi-pembanding.blade.php @@ -30,7 +30,7 @@

- Rp. {{ $item['harga'] }} + {{ isset($item['harga']) ? formatRupiah($item['harga']) : '' }}
diff --git a/resources/views/penilai/components/print-out-standard.blade.php b/resources/views/penilai/components/print-out-standard.blade.php index 9f9ce38..22016d1 100644 --- a/resources/views/penilai/components/print-out-standard.blade.php +++ b/resources/views/penilai/components/print-out-standard.blade.php @@ -321,7 +321,7 @@ @if ($key == 'luas_tanah' || $key == 'luas_bangunan') {{ $data[$key] ?? '-' }} m² @elseif($key == 'harga' || $key == 'harga_diskon') - Rp. {{ $data[$key] ?? 0 }} + {{ formatRupiah($data[$key]) ?? 0 }} @elseif($key == 'kordinat') @php $lat = $data['kordinat_lat'] ?? null; diff --git a/resources/views/surveyor/components/data-pembanding.blade.php b/resources/views/surveyor/components/data-pembanding.blade.php index c589cec..a8e2898 100644 --- a/resources/views/surveyor/components/data-pembanding.blade.php +++ b/resources/views/surveyor/components/data-pembanding.blade.php @@ -125,8 +125,8 @@ } } else { // Format currency untuk input harga - if (name.includes('harga') || name.includes('total') || name.includes('diskon')) { - element.value = value ? value.toString() : '0'; + if (name.includes('diskon')) { + element.value = value || '0'; } else { element.value = value || ''; } @@ -364,16 +364,16 @@ input.value = ''; } - if (input.classList.contains('currency')) { + if (input.classList.contains('currency-format')) { input.addEventListener('input', function() { + handleCurrencyInput(this); - - // Special handling for price-related inputs + // Calculate prices if needed if (input.name.includes('harga_pembanding') || input.name.includes('diskon_pembanding')) { const inputs = document.getElementsByName(input.name); const index = Array.from(inputs).indexOf(this); - calculatePrices(index); + calculatePrices('pembanding', index); } }); } @@ -382,7 +382,7 @@ if (input.name.includes('diskon_pembanding')) { input.addEventListener('input', function() { let value = - this.value = value.toString(); + this.value = value.toString(); }); } }); @@ -394,7 +394,10 @@ } - + function handleCurrencyInput(input) { + const value = input.value.replace(/[^\d]/g, ''); + input.value = formatCurrency(value); + } function removeColumn() { if (columnCount > 1) { @@ -445,6 +448,13 @@ ensureLocationEventListeners(); } + function initializeCurrencyFormat() { + document.querySelectorAll('.currency-format').forEach(input => { + input.addEventListener('input', function() { + formatCurrency(this); + }); + }); + } function initializeFirstPembandingListeners() { const firstProvinceSelect = document.getElementById('province_code_pembanding'); @@ -658,5 +668,18 @@ } }); } + document.addEventListener('DOMContentLoaded', function() { + // Initialize currency format for existing inputs + document.querySelectorAll('.currency-format').forEach(input => { + input.addEventListener('input', function() { + handleCurrencyInput(this); + }); + + // Format initial values if they exist + if (input.value) { + input.value = formatCurrency(input.value); + } + }); + }); @endpush diff --git a/resources/views/surveyor/components/foto.blade.php b/resources/views/surveyor/components/foto.blade.php index f18abbd..b7ec091 100644 --- a/resources/views/surveyor/components/foto.blade.php +++ b/resources/views/surveyor/components/foto.blade.php @@ -291,7 +291,6 @@ acceptedFiles: 'image/*', uploadMultiple: false, parallelUploads: 1, - maxFiles: 10, autoProcessQueue: true, dictDefaultMessage: 'Seret foto atau klik untuk unggah', @@ -430,28 +429,34 @@ function showLoadingOverlay() { const overlay = document.querySelector('.loading-overlay'); if (!overlay) { - const dropzoneElement = document.querySelector('#upload-dropzone'); + // Buat elemen overlay const loadingOverlay = document.createElement('div'); loadingOverlay.className = 'loading-overlay'; loadingOverlay.style.cssText = ` - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: rgba(255,255,255,0.7); - display: flex; - justify-content: center; - align-items: center; - z-index: 1000; - `; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + display: flex; + justify-content: center; + align-items: center; + z-index: 9999; + `; + + // Tambahkan loader di dalam overlay loadingOverlay.innerHTML = '
'; - dropzoneElement.appendChild(loadingOverlay); + + // Tambahkan overlay ke dalam + document.body.appendChild(loadingOverlay); } else { + // Tampilkan overlay jika sudah ada overlay.style.display = 'flex'; } } + function hideLoadingOverlay() { const overlay = document.querySelector('.loading-overlay'); if (overlay) overlay.style.display = 'none'; diff --git a/resources/views/surveyor/components/pembanding-tanah-bangunan-unit.blade.php b/resources/views/surveyor/components/pembanding-tanah-bangunan-unit.blade.php index d35a730..15b0ae7 100644 --- a/resources/views/surveyor/components/pembanding-tanah-bangunan-unit.blade.php +++ b/resources/views/surveyor/components/pembanding-tanah-bangunan-unit.blade.php @@ -391,7 +391,7 @@ value="{{ $inspectionData['asset']['harga'] ?? '' }}"> - + diff --git a/resources/views/surveyor/js/utils.blade.php b/resources/views/surveyor/js/utils.blade.php index c0b19f8..30c9ec6 100644 --- a/resources/views/surveyor/js/utils.blade.php +++ b/resources/views/surveyor/js/utils.blade.php @@ -34,35 +34,23 @@ function formatCurrency(value, isDiskon = false) { - // Konversi value ke string, pastikan bukan null/undefined - let stringValue = value === null || value === undefined ? '' : String(value); - - // Ganti koma dengan titik untuk memastikan parsing numerik - stringValue = stringValue.replace(/,/g, '.'); - - // Hapus karakter non-numerik kecuali titik - let numericValue = stringValue.replace(/[^\d.]/g, ''); - - // Parse nilai numerik - const parsedValue = parseFloat(numericValue); - - if (isDiskon) { - // Format untuk diskon - return isNaN(parsedValue) ? '' : parsedValue.toLocaleString('id-ID', { - minimumFractionDigits: 0, - maximumFractionDigits: 2 - }); - } else { - // Format untuk mata uang tanpa desimal - return isNaN(parsedValue) ? '' : parsedValue.toLocaleString('id-ID', { - minimumFractionDigits: 0, - maximumFractionDigits: 0 - }); + // Ensure the value is a valid number + const numericValue = parseFloat(value); + if (isNaN(numericValue)) { + return 0; } + + // Format the number with commas for thousands separators + const formattedValue = numericValue.toLocaleString('id-ID', { + style: 'currency', + currency: 'IDR', // Indonesian Rupiah + minimumFractionDigits: isDiskon ? 2 : 0, // Include decimals for discounts + maximumFractionDigits: isDiskon ? 2 : 0, + }); + + return formattedValue; } - - function previewImage(input, previewId) { if (input.files && input.files[0]) { var reader = new FileReader(); @@ -338,172 +326,171 @@ } function updateAnalisa(params) { - const inputMap = { - jenis_asset: 'jenis_asset_tidak_sesuai', - analisa_tanah: 'analisa_tanah_tidak_sesuai', - analisa_unit: 'analisa_luas_unit_tidak_sesuai', - analisa_bangunan: 'analisa_bangunan_tidak_sesuai', - }; + const inputMap = { + jenis_asset: 'jenis_asset_tidak_sesuai', + analisa_tanah: 'analisa_tanah_tidak_sesuai', + analisa_unit: 'analisa_luas_unit_tidak_sesuai', + analisa_bangunan: 'analisa_bangunan_tidak_sesuai', + }; - // Pastikan elemen ID ada di inputMap - if (!inputMap[params]) { - console.error('Parameter tidak valid:', params); - return; + // Pastikan elemen ID ada di inputMap + if (!inputMap[params]) { + console.error('Parameter tidak valid:', params); + return; + } + + // Ambil nilai berdasarkan parameter + const inputValue = document.getElementById(inputMap[params]).value; + const data = { + [params === 'jenis_asset' ? 'jenis_asset' : params.replace('analisa_', 'luas_')]: inputValue, + types: params + }; + + $.ajax({ + url: '{{ route('surveyor.update_analisa', ['id' => $permohonan->id]) }}', + type: 'POST', + data: data, + headers: { + 'X-CSRF-TOKEN': '{{ csrf_token() }}' + }, + success: function(response) { + console.log(response); + if (response.success) { + // window.location.href = + // '{{ route('surveyor.show', ['id' => $permohonan->id]) }}'; + toastrSuccessBuild(response.message); + } + }, + error: function(xhr, status, error) { + console.error('Terjadi error:', error); + console.log('Status:', status); + console.log('Response:', xhr.responseText); + if (xhr.responseJSON.message) { + toastrErrorBuild(xhr.responseJSON.message); + } else { + toastrErrorBuild('Terjadi kesalahan'); + } + } + }); + } + + function updateAlamatFields(status) { + // Ambil elemen formulir + const addressForm = document.getElementById('alamat_form'); + const inputs = addressForm.querySelectorAll('input, select'); + const addressInput = document.getElementById('address'); + + if (status === 'sesuai') { + addressInput.value = "{{ $dokumen->address ?? '' }}"; + inputs.forEach(element => { + if (element.tagName === 'INPUT') { + element.setAttribute('readonly', true); + } else if (element.tagName === 'SELECT') { + element.setAttribute('disabled', true); + element.classList.add('disabled-input') + } + }); + + addressForm.style.display = 'grid'; + addressForm.disabled = true; + addressForm.classList.add('disabled-input') + + + } else if (status === 'tidak sesuai') { + addressForm.style.display = 'grid'; + + addressForm.removeAttribute('disabled'); + addressForm.classList.remove('disabled-input') + const formInspeksi = @json($forminspeksi ?? ''); + const addressInput = document.getElementById('address'); + + if (formInspeksi && formInspeksi.asset && formInspeksi.asset.alamat) { + if (formInspeksi.asset.alamat['tidak sesuai'] && formInspeksi.asset.alamat['tidak sesuai'].address) { + addressInput.value = formInspeksi.asset.alamat['tidak sesuai'].address; + } else if (formInspeksi.asset.alamat['sesuai'] && formInspeksi.asset.alamat['sesuai'].address) { + addressInput.value = formInspeksi.asset.alamat['sesuai'].address; + } else { + addressInput.value = ""; + } } - // Ambil nilai berdasarkan parameter - const inputValue = document.getElementById(inputMap[params]).value; - const data = { - [params === 'jenis_asset' ? 'jenis_asset' : params.replace('analisa_', 'luas_')]: inputValue, - types: params - }; - - $.ajax({ - url: '{{ route('surveyor.update_analisa', ['id' => $permohonan->id]) }}', - type: 'POST', - data: data, - headers: { - 'X-CSRF-TOKEN': '{{ csrf_token() }}' - }, - success: function(response) { - console.log(response); - if (response.success) { - // window.location.href = - // '{{ route('surveyor.show', ['id' => $permohonan->id]) }}'; - toastrSuccessBuild(response.message); - } - }, - error: function(xhr, status, error) { - console.error('Terjadi error:', error); - console.log('Status:', status); - console.log('Response:', xhr.responseText); - if (xhr.responseJSON.message) { - toastrErrorBuild(xhr.responseJSON.message); - } else { - toastrErrorBuild('Terjadi kesalahan'); - } + inputs.forEach(element => { + if (element.tagName === 'INPUT') { + element.removeAttribute('readonly'); + } else if (element.tagName === 'SELECT') { + element.removeAttribute('disabled'); + element.classList.remove('disabled-input') } }); } + } - function updateAlamatFields(status) { - // Ambil elemen formulir - const addressForm = document.getElementById('alamat_form'); - const inputs = addressForm.querySelectorAll('input, select'); - const addressInput = document.getElementById('address'); + function toggleFieldVisibility(fieldName, inputId, visibleValues = []) { + const selectedValue = $(`[name="${fieldName}"]:checked`).val(); + const inputField = $(`#${inputId}`); - if (status === 'sesuai') { - addressInput.value = "{{ $dokumen->address ?? '' }}"; - inputs.forEach(element => { - if (element.tagName === 'INPUT') { - element.setAttribute('readonly', true); - } else if (element.tagName === 'SELECT') { - element.setAttribute('disabled', true); - element.classList.add('disabled-input') - } - }); - - addressForm.style.display = 'grid'; - addressForm.disabled = true; - addressForm.classList.add('disabled-input') - - - } else if (status === 'tidak sesuai') { - addressForm.style.display = 'grid'; - - addressForm.removeAttribute('disabled'); - addressForm.classList.remove('disabled-input') - const formInspeksi = @json($forminspeksi ?? ''); - const addressInput = document.getElementById('address'); - - if (formInspeksi && formInspeksi.asset && formInspeksi.asset.alamat) { - if (formInspeksi.asset.alamat['tidak sesuai'] && formInspeksi.asset.alamat['tidak sesuai'].address) { - addressInput.value = formInspeksi.asset.alamat['tidak sesuai'].address; - } else if (formInspeksi.asset.alamat['sesuai'] && formInspeksi.asset.alamat['sesuai'].address) { - addressInput.value = formInspeksi.asset.alamat['sesuai'].address; - } else { - addressInput.value = ""; - } - } - - inputs.forEach(element => { - if (element.tagName === 'INPUT') { - element.removeAttribute('readonly'); - } else if (element.tagName === 'SELECT') { - element.removeAttribute('disabled'); - element.classList.remove('disabled-input') - } - }); - } + if (visibleValues.includes(selectedValue)) { + inputField.show(); + } else { + inputField.hide().val(''); } + } - function toggleFieldVisibility(fieldName, inputId, visibleValues = []) { - const selectedValue = $(`[name="${fieldName}"]:checked`).val(); + + function toggleCheckboxVisibility(fieldName, inputId, visibleValues = []) { + const selectedValues = $(`[name="${fieldName}[]"]:checked`) + .map(function() { + return $(this).val().toLowerCase(); // Konversi nilai ke huruf kecil + }) + .get(); + + const inputField = $(`#${inputId}`); + + // Cek apakah salah satu nilai yang dipilih cocok dengan visibleValues + const shouldShow = visibleValues.some(value => selectedValues.includes(value.toLowerCase())); + + if (shouldShow) { + inputField.show(); + } else { + inputField.hide().val(''); + } + } + + + function toggleMultipleFields(fieldName, mappings) { + // Ambil semua nilai checkbox yang dicentang + const selectedValues = $(`[name="${fieldName}[]"]:checked`) + .map(function() { + return $(this).val().toLowerCase(); // Konversi nilai ke huruf kecil + }) + .get(); + + // Iterasi melalui setiap mapping + for (const [key, inputId] of Object.entries(mappings)) { const inputField = $(`#${inputId}`); - if (visibleValues.includes(selectedValue)) { + // Tampilkan input jika nilai yang relevan dipilih + if (selectedValues.includes(key.toLowerCase())) { inputField.show(); } else { - inputField.hide().val(''); + inputField.hide().val(''); // Sembunyikan dan reset nilai } } + } - function toggleCheckboxVisibility(fieldName, inputId, visibleValues = []) { - const selectedValues = $(`[name="${fieldName}[]"]:checked`) - .map(function() { - return $(this).val().toLowerCase(); // Konversi nilai ke huruf kecil - }) - .get(); + function toggleAlamatVisibility(idSesuai, idTidakSesuai, selectedValue) { + // Ambil elemen berdasarkan ID + const alamatSesuai = document.getElementById(idSesuai); + const alamatTidakSesuai = document.getElementById(idTidakSesuai); - const inputField = $(`#${inputId}`); - - // Cek apakah salah satu nilai yang dipilih cocok dengan visibleValues - const shouldShow = visibleValues.some(value => selectedValues.includes(value.toLowerCase())); - - if (shouldShow) { - inputField.show(); - } else { - inputField.hide().val(''); - } + // Periksa nilai yang dipilih dan tampilkan elemen yang sesuai + if (selectedValue === 'sesuai') { + alamatSesuai.style.display = 'grid'; // Tampilkan "Alamat Sesuai" + alamatTidakSesuai.style.display = 'none'; // Sembunyikan "Alamat Tidak Sesuai" + } else if (selectedValue === 'tidak sesuai') { + alamatSesuai.style.display = 'none'; // Sembunyikan "Alamat Sesuai" + alamatTidakSesuai.style.display = 'grid'; // Tampilkan "Alamat Tidak Sesuai" } - - - function toggleMultipleFields(fieldName, mappings) { - // Ambil semua nilai checkbox yang dicentang - const selectedValues = $(`[name="${fieldName}[]"]:checked`) - .map(function() { - return $(this).val().toLowerCase(); // Konversi nilai ke huruf kecil - }) - .get(); - - // Iterasi melalui setiap mapping - for (const [key, inputId] of Object.entries(mappings)) { - const inputField = $(`#${inputId}`); - - // Tampilkan input jika nilai yang relevan dipilih - if (selectedValues.includes(key.toLowerCase())) { - inputField.show(); - } else { - inputField.hide().val(''); // Sembunyikan dan reset nilai - } - } - } - - - function toggleAlamatVisibility(idSesuai, idTidakSesuai, selectedValue) { - // Ambil elemen berdasarkan ID - const alamatSesuai = document.getElementById(idSesuai); - const alamatTidakSesuai = document.getElementById(idTidakSesuai); - - // Periksa nilai yang dipilih dan tampilkan elemen yang sesuai - if (selectedValue === 'sesuai') { - alamatSesuai.style.display = 'grid'; // Tampilkan "Alamat Sesuai" - alamatTidakSesuai.style.display = 'none'; // Sembunyikan "Alamat Tidak Sesuai" - } else if (selectedValue === 'tidak sesuai') { - alamatSesuai.style.display = 'none'; // Sembunyikan "Alamat Sesuai" - alamatTidakSesuai.style.display = 'grid'; // Tampilkan "Alamat Tidak Sesuai" - } - } - + }