feat(pemohon): menambahkan fitur reschedule jadwal kunjungan

fix(surveyor): memperbaiki nama placeholder dan call report
This commit is contained in:
majid
2025-02-12 18:03:05 +07:00
parent 2d99b6ab7a
commit c860daa1d5
14 changed files with 1009 additions and 540 deletions

View File

@@ -16,7 +16,7 @@
$luas_bangunan = 'N/A';
if ($item->detail) {
foreach ($item->detail as $luas) {
if (isset($luas->name) && $luas->name === 'IMB') {
if (isset($luas->name) && $luas->jenis_legalitas_jaminan_id === 10) {
$details = json_decode($luas->details, true);
$luas_bangunan = isset($details['luas_bangunan']) ? $details['luas_bangunan'] : 'N/A';
break;

View File

@@ -471,7 +471,7 @@
<label for="city" class="form-label max-w-56">Kabupaten/Kota</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" id="city" class="input w-full cursor-not-allowed" readonly
value="{{ isset($permohonan->debiture->city) ? $permohonan->debiture->city->name : '' }}">
value="{{ isset($permohonan->debiture->city) ? strtolower($permohonan->debiture->city->name) : '' }}">
</div>
</div>
<input type="hidden" name="district_code"
@@ -559,9 +559,32 @@
}
}
function loadCities() {
const citySelect = document.getElementById("city_code");
if (citySelect) {
// Hapus semua opsi sebelumnya
citySelect.innerHTML = '<option value="">Pilih Kota/Kabupaten</option>';
cities.forEach((city) => {
// Ubah nama kota menjadi lowercase
const cityNameLowercase = city.name.toLowerCase();
// Tambahkan opsi ke dropdown
const option = document.createElement("option");
option.value = city.code;
option.textContent = cityNameLowercase; // Nama dalam lowercase
citySelect.appendChild(option);
});
} else {
console.error("Element with ID 'city_code' not found.");
}
}
document.addEventListener('DOMContentLoaded', () => {
loadSavedLocationData();
loadCities();
});
// Fungsi untuk memuat data lokasi yang tersimpan
</script>
@include('lpj::surveyor.js.utils')

View File

@@ -217,7 +217,7 @@
}
@endphp
<img id="foto_tempat-preview" src="{{ $fotoSrc ?: asset('images/default-placeholder.png') }}"
<img id="foto_tempat-preview" src="{{ $fotoSrc ?: '' }}"
alt="Foto Tempat" class="mt-2 max-w-full h-auto"
style="max-width: 30rem; {{ $fotoSrc ? '' : 'display: none;' }}">

View File

@@ -23,12 +23,12 @@
</div>
<div>
<label class="block text-sm font-medium text-gray-700">Jarak ke CBD Point</label>
<input type="text" class="input mt-2" name="jarak_cbd_point" placeholder="Km"
<input type="text" class="input mt-2" name="jarak_cbd_point" placeholder="Masukkan Jarak ke CBD Point"
value="{{ old('jarak_cbd_point', isset($forminspeksi['lingkungan']['jarak_cbd_point']) ? $forminspeksi['lingkungan']['jarak_cbd_point'] : '') }}">
</div>
<div>
<label class="block text-sm font-medium text-gray-700">Nama CBD Point</label>
<input type="text" class="input mt-2" name="nama_cbd_point" placeholder="Km"
<input type="text" class="input mt-2" name="nama_cbd_point" placeholder="Masukkan Nama CBD Point"
value="{{ old('nama_cbd_point', isset($forminspeksi['lingkungan']['nama_cbd_point']) ? $forminspeksi['lingkungan']['nama_cbd_point'] : '') }}">
</div>
</div>
@@ -40,7 +40,7 @@
$forminspeksi['lingkungan']['lebar_perkerasan_jalan'] ?? '',
);
@endphp
<input type="text" name="lebar_perkerasan_jalan" class="input mt-2" placeholder="Meter"
<input type="text" name="lebar_perkerasan_jalan" class="input mt-2" placeholder="Masukkan Lebar Perkerasan Jalan"
value="{{ $lebarPerkerasanJalan }}">
</div>

View File

@@ -16,7 +16,7 @@
$luas_tanah = 'N/A';
if ($item->detail) {
foreach ($item->detail as $luas) {
if (isset($luas->name) && $luas->name === 'Sertifikat') {
if (isset($luas->name) && $luas->jenis_legalitas_jaminan_id === 1) {
$details = json_decode($luas->details, true);
$luas_tanah = isset($details['luas_tanah']) ? $details['luas_tanah'] : 'N/A';
break;
@@ -191,7 +191,7 @@
@elseif (strcasecmp($item->name, 'Lebih Rendah') == 0)
<input id="input-lebih-rendah" type="text"
style="{{ isset($forminspeksi['tanah']['ketinggian_tanah']['lebih_rendah']) && $forminspeksi['tanah']['ketinggian_tanah']['lebih_rendah'] ? '' : 'display: none;' }}"
name="ketinggian_lebih_rendah" class="input w-full mt-2" placeholder="m2"
name="ketinggian_lebih_rendah" class="input w-full mt-2" placeholder="m"
value="{{ old('ketinggian_lebih_rendah', $forminspeksi['tanah']['ketinggian_tanah']['lebih_rendah'] ?? '') }}"/>
@endif
@@ -217,6 +217,11 @@
{{ old('kontur_jalan', isset($forminspeksi['tanah']['kontur_jalan']) ? $forminspeksi['tanah']['kontur_jalan'] : '') == 'rata' ? 'checked' : '' }}>
<span class="ml-2">Rata</span>
</label>
<label class="form-label flex items-center gap-2.5 text-nowrap">
<input type="radio" class="radio" name="kontur_jalan" value="Menanjak"
{{ old('kontur_jalan', isset($forminspeksi['tanah']['kontur_jalan']) ? $forminspeksi['tanah']['kontur_jalan'] : '') == 'Menanjak' ? 'checked' : '' }}>
<span class="ml-2">Menanjak</span>
</label>
</div>
<em id="error-kontur_jalan" class="alert text-danger text-sm"></em>
</div>

View File

@@ -200,6 +200,149 @@
});
}
function approveReschedule(penilaianId,permohonanId, noReg, debitur, reschedule_date, reschedule_note) {
Swal.fire({
title: 'Konfirmasi',
html: `
<p>Yakin akan Menyetujui atau Menolak Reschedule Jadwal Kunjungan <b>${noReg}</b> untuk Debitur <b>${debitur}</b>
pada waktu <b>${window.formatTanggalWaktuIndonesia(reschedule_date)}</b>?</p>
<p><b>Catatan: </b> <br/>${reschedule_note}</p>
`,
icon: 'warning',
showDenyButton: true,
showCancelButton: true,
confirmButtonColor: '#3085d6',
denyButtonColor: '#d33',
confirmButtonText: 'Approve',
denyButtonText: 'Reject'
}).then((result) => {
if (result.isConfirmed) {
// Approve action
let token = "{{ csrf_token() }}";
let useURL = "{{ URL::to('/surveyor/store-approve-reschedule') }}" + "/" + penilaianId;
var input_data = {
_token : token,
permohonan_id : permohonanId,
nomor_registrasi: noReg
}
$.ajax({
url: useURL,
type: "PUT",
cache: false,
data: input_data,
success: function(response) {
console.log(response);
if ('success' == response.status) {
Swal.fire('Sukses!', response.message, 'success').then(() => {
location.reload(true);
});
} else {
Swal.fire('Error!', response.message, 'error');
}
},
error: function(response, textStatus, errorThrown) {
console.log(response);
}
});
} else if (result.isDenied) {
// Reject action
Swal.fire({
title: 'Masukkan Keterangan',
input: 'textarea',
inputPlaceholder: 'Tuliskan alasan penolakan di sini...',
inputAttributes: {
'aria-label': 'Tuliskan alasan penolakan di sini'
},
showCancelButton: true,
confirmButtonText: 'Submit',
cancelButtonText: 'Batal'
}).then((rejectResult) => {
if (rejectResult.isConfirmed && rejectResult.value) {
let token = "{{ csrf_token() }}";
let useURL = "{{ URL::to('/surveyor/store-rejected-reschedule') }}" + "/" + penilaianId;
var input_data = {
_token : token,
permohonan_id : permohonanId,
nomor_registrasi: noReg,
rejected_note : rejectResult.value
}
$.ajax({
url: useURL,
type: "PUT",
cache: false,
data: input_data,
success: function(response) {
console.log(response);
if ('success' == response.status) {
Swal.fire('Ditolak!', response.message, 'success').then(() => {
location.reload(true);
});
} else {
Swal.fire('Error!', response.message, 'error');
}
},
error: function(response, textStatus, errorThrown) {
console.log(response);
}
});
} else if (rejectResult.dismiss === Swal.DismissReason.cancel) {
Swal.fire('Dibatalkan', 'Aksi penolakan dibatalkan.', 'info');
}
});
}
});
}
function prosesSurvey(permohonanId, nomor_registrasi) {
Swal.fire({
title: 'Konfirmasi',
text: `Yakin akan Melakukan Inspeksi dengan nomor registrasi ${nomor_registrasi}?`,
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Ya, Setujui',
cancelButtonText: 'Batal',
}).then((result) => {
if (result.isConfirmed) {
// Mendefinisikan URL dan data
let token = "{{ csrf_token() }}";
let useURL = `{{ URL::to('/surveyor/store-proses-survey') }}/${permohonanId}`;
let input_data = {
_token: token,
permohonan_id: permohonanId
};
// Melakukan AJAX request
$.ajax({
url: useURL,
type: "PUT",
cache: false,
data: input_data,
dataType: "json",
success: function(response) {
if (response.status === 'success') {
// Arahkan langsung ke halaman inspeksi
window.location.href = `surveyor/${permohonanId}/show?form=inspeksi`;
} else {
Swal.fire('Error!', response.message, 'error');
}
},
error: function(response) {
const errorMessage = response.responseJSON?.message || 'Terjadi kesalahan saat memproses data.';
Swal.fire('Error!', errorMessage, 'error');
}
});
}
});
}
</script>
<script type="module">
@@ -254,14 +397,23 @@
render: (item, data) => data.jenis_fasilitas_kredit ? `${data.jenis_fasilitas_kredit.name}` : 'N/A',
},
actions: {
title: 'Action',
render: (item, data) => {
let actionHtml = '';
// if (data.documents.length > 0) {
title: 'Action',
render: (item, data) => {
let actionHtml = '';
if (data.penilaian.waktu_penilaian == null ||
(data.penilaian.waktu_penilaian && data.penilaian.authorized_status == null)) {
actionHtml += `
if (data.status === 'request-reschedule') {
actionHtml += `
<button class="btn btn-sm btn-icon btn-clear btn-success"
onclick="approveReschedule('${data.penilaian.id}','${data.id}', '${data.nomor_registrasi}', '${data.debiture?.name}', '${data.penilaian.reschedule_date}', '${data.penilaian.reschedule_note}')"
title="Approve Reschedule">
<i class="ki-filled ki-double-check"></i>
</button>
`;
} else {
if (data.penilaian.waktu_penilaian == null ||
(data.penilaian.waktu_penilaian && data.penilaian.authorized_status == null)) {
// Tombol Buat Jadwal Kunjungan
actionHtml += `
<a class="btn btn-sm btn-icon btn-clear btn-primary"
data-modal-toggle="#modal_jadwal"
onclick="jadwal(${data.penilaian.id})"
@@ -269,9 +421,28 @@
<i class="ki-filled ki-calendar-edit"></i>
</a>
`;
} else {
actionHtml += `
if (data.penilaian.waktu_penilaian && data.penilaian.authorized_status == null) {
// Tambahkan elemen berdampingan
actionHtml += `
<span class="badge badge-xs badge-outline badge-warning text-4xs">Menunggu Pemohon</span>
`;
}
} else if (data.status === 'approved-reschedule' || data.status === 'rejected-reschedule') {
actionHtml += `
<span class="badge badge-xs badge-outline badge-warning text-4xs">Menunggu Pemohon</span>
`;
} else if(data.status === 'proses-survey'){
actionHtml += `
<a class="btn btn-sm btn-icon btn-clear btn-clarity"
onclick="prosesSurvey(${data.id}, '${data.nomor_registrasi}')"
title="Masuk Form Inspeksi">
<i class="ki-filled ki-tablet-ok"></i>
</a>
`;
}else {
// Tombol Lihat Form Inspeksi dan Freeze Survey
actionHtml += `
<a class="btn btn-sm btn-icon btn-clear btn-warning"
href="surveyor/${data.id}/show?form=inspeksi"
title="Lihat Form Inspeksi">
@@ -284,16 +455,13 @@
<i class="ki-filled ki-arrow-circle-right"></i>
</button>
`;
}
// } else {
}
}
// actionHtml =
// `<span class="badge badge-sm badge-danger uppercase flex justify-center">Lengkapi Aset Jaminan</span>`;
// }
return actionHtml;
}
}
return actionHtml;
}
}
}
};