Merge branch 'staging' into feature/senior-officer
This commit is contained in:
@@ -6,6 +6,7 @@ use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Modules\Lpj\Http\Requests\BankDataRequest;
|
||||
use Modules\Lpj\Models\BankData;
|
||||
use Modules\Lpj\Models\Inspeksi;
|
||||
use Modules\Lpj\Models\JenisJaminan;
|
||||
use Modules\Lpj\Services\BankDataService;
|
||||
use Modules\Location\Models\Province;
|
||||
@@ -25,6 +26,64 @@ class BankDataController extends Controller
|
||||
$provinces = Province::all();
|
||||
$jenisJaminan = JenisJaminan::all();
|
||||
|
||||
//insert data pembanding
|
||||
|
||||
$inspeksi = Inspeksi::all();
|
||||
|
||||
foreach ($inspeksi as $item) {
|
||||
if(isset($item->data_pembanding)){
|
||||
$data_pembanding = json_decode($item->data_pembanding);
|
||||
foreach ($data_pembanding->data_pembanding as $dataPembanding) {
|
||||
$lat = trim($dataPembanding->kordinat_lat);
|
||||
$lng = trim($dataPembanding->kordinat_lng);
|
||||
|
||||
if (!empty($lat) && !empty($lng)) {
|
||||
$lat = floatval($lat);
|
||||
$lng = floatval($lng);
|
||||
|
||||
if ($lat >= -90 && $lat <= 90 && $lng >= -180 && $lng <= 180) {
|
||||
$data = [
|
||||
'address' => $dataPembanding->address,
|
||||
'village_code' => $dataPembanding->village_code,
|
||||
'district_code' => $dataPembanding->district_code,
|
||||
'city_code' => $dataPembanding->city_code,
|
||||
'province_code' => $dataPembanding->province_code,
|
||||
'tahun' => $dataPembanding->tahun,
|
||||
'luas_tanah' => $dataPembanding->luas_tanah,
|
||||
'luas_bangunan' => $dataPembanding->luas_bangunan,
|
||||
'tahun_bangunan' => $dataPembanding->tahun_bangunan,
|
||||
'status_nara_sumber' => $dataPembanding->status_nara_sumber,
|
||||
'harga' => $dataPembanding->harga,
|
||||
'harga_diskon' => $dataPembanding->harga_diskon,
|
||||
'diskon' => str_replace(',','.',$dataPembanding->diskon),
|
||||
'total' => $dataPembanding->total,
|
||||
'nama_nara_sumber' => $dataPembanding->nama_nara_sumber,
|
||||
'peruntukan' => $dataPembanding->peruntukan,
|
||||
'penawaran' => $dataPembanding->penawaran,
|
||||
'telepon' => $dataPembanding->telepon,
|
||||
'hak_properti' => $dataPembanding->hak_properti,
|
||||
'jenis_aset' => $dataPembanding->jenis_aset,
|
||||
'foto_objek' => $dataPembanding->foto_objek,
|
||||
'tanggal' => $dataPembanding->tanggal,
|
||||
'harga_penawaran' => $dataPembanding->harga_penawaran,
|
||||
];
|
||||
|
||||
BankData::updateOrCreate(
|
||||
[
|
||||
'kordinat_lat' => $lat,
|
||||
'kordinat_lng' => $lng
|
||||
],
|
||||
$data
|
||||
);
|
||||
}
|
||||
}else{
|
||||
// Invalid coordinates
|
||||
\Log::warning("Invalid coordinates: Lat: $lat, Lng: $lng");// Do something to handle this situation, such as logging an error or skipping the record
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return view('lpj::bank-data.index', compact('provinces', 'jenisJaminan' ));
|
||||
}
|
||||
|
||||
@@ -101,7 +160,7 @@ class BankDataController extends Controller
|
||||
}
|
||||
|
||||
if ($search['start_date'] && $search['end_date']) {
|
||||
$query->betweenDates($request->start_date, $search['end_date']);
|
||||
$query->betweenDates($search['start_date'], $search['end_date']);
|
||||
}
|
||||
} else{
|
||||
$search = $request->get('search');
|
||||
@@ -141,14 +200,15 @@ class BankDataController extends Controller
|
||||
return [
|
||||
'id' => $item->id,
|
||||
'jenis_aset' => $item->jenis_aset,
|
||||
'tanggal' => $item->tanggal->format('d-m-Y'),
|
||||
'tanggal' => $item->tanggal ? $item->tanggal->format('d-m-Y') : '-',
|
||||
'tahun' => $item->tahun,
|
||||
'luas_tanah' => $item->luas_tanah,
|
||||
'luas_bangunan' => $item->luas_bangunan,
|
||||
'harga' => $item->harga,
|
||||
'nilai_pasar' => $item->nilai_pasar,
|
||||
'location' => $item->kordinat_lat . ', ' . $item->kordinat_lng,
|
||||
'address' => formatAlamat($item)
|
||||
'address' => formatAlamat($item),
|
||||
'photos' => json_decode($item->foto_objek, true) ?: [$item->foto_objek],
|
||||
// Add more fields as needed
|
||||
];
|
||||
});
|
||||
@@ -159,6 +219,10 @@ class BankDataController extends Controller
|
||||
// Calculate the current page number
|
||||
$currentPage = $request->get('page', 1);
|
||||
|
||||
// Ensure current page doesn't exceed page count
|
||||
$currentPage = min($currentPage, $pageCount);
|
||||
|
||||
|
||||
// Return the response data as a JSON object
|
||||
return response()->json([
|
||||
'draw' => $request->get('draw'),
|
||||
|
||||
@@ -166,6 +166,13 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="imageModal" class="fixed inset-0 bg-black bg-opacity-50 hidden items-center justify-center z-50">
|
||||
<div class="bg-white p-4 rounded-lg max-w-3xl max-h-[100vh] overflow-auto">
|
||||
<img id="modalImage" src="" alt="Zoomed Image" class="max-w-full h-auto">
|
||||
<button id="closeModal" class="mt-4 px-4 py-2 bg-red-300 text-gray-800 rounded hover:bg-red-400" onclick="closeImageModal()">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
@@ -183,6 +190,26 @@
|
||||
});
|
||||
}
|
||||
|
||||
function openImageModal(src) {
|
||||
const modal = document.getElementById('imageModal');
|
||||
const modalImage = document.getElementById('modalImage');
|
||||
modalImage.src = src;
|
||||
modal.classList.remove('hidden');
|
||||
modal.classList.add('flex');
|
||||
}
|
||||
|
||||
function closeImageModal() {
|
||||
const modal = document.getElementById('imageModal');
|
||||
modal.classList.remove('flex');
|
||||
modal.classList.add('hidden');
|
||||
}
|
||||
|
||||
function changeMainPhoto(thumbnail, index) {
|
||||
const mainPhoto = thumbnail.closest('.photo-gallery').querySelector('.main-photo img');
|
||||
mainPhoto.src = thumbnail.src;
|
||||
mainPhoto.alt = thumbnail.alt;
|
||||
}
|
||||
|
||||
function updateMapMarkers(data) {
|
||||
// Clear existing markers
|
||||
markers.forEach(marker => marker.setMap(null));
|
||||
@@ -218,7 +245,7 @@
|
||||
|
||||
// Create info window content
|
||||
const contentString = `
|
||||
<div id='content' style='width: 500px; max-width: 100%;'>
|
||||
<div id='content' style='width: 550px; max-width: 100%;'>
|
||||
<div id='siteNotice'></div>
|
||||
<h2 class='card-title mb-5'>
|
||||
${item.jenis_aset}
|
||||
@@ -320,6 +347,29 @@
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
${item.photos && item.photos.length > 0 ? `
|
||||
<div class="photo-gallery mb-5">
|
||||
<div class="main-photo mb-2">
|
||||
<img src="storage/${item.photos[0]}" alt="${item.jenis_aset}"
|
||||
style="width: 100%; height: auto; object-fit: cover; cursor: pointer;"
|
||||
onclick="openImageModal(this.src)">
|
||||
</div>
|
||||
<div class="thumbnail-container flex gap-2 overflow-x-auto">
|
||||
${item.photos.map((photo, index) => `
|
||||
<img src="storage/${photo}" alt="${item.jenis_aset} ${index + 1}"
|
||||
class="thumbnail cursor-pointer"
|
||||
style="width: 60px; height: 60px; object-fit: cover;"
|
||||
onclick="changeMainPhoto(this, ${index})">
|
||||
`).join('')}
|
||||
</div>
|
||||
</div>
|
||||
` : ''}
|
||||
<div class="border-t border-gray-300 border-dashed"></div>
|
||||
<div class='flex justify-end mt-3'>
|
||||
<button onclick="getDirections(${lat}, ${lng})" class='btn btn-sm btn-primary'>
|
||||
Get Directions
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
@@ -354,6 +404,26 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function getDirections(lat, lng) {
|
||||
console.log('Getting directions to:', lat, lng);
|
||||
if (navigator.geolocation) {
|
||||
navigator.geolocation.getCurrentPosition(
|
||||
(position) => {
|
||||
const origin = position.coords.latitude + ',' + position.coords.longitude;
|
||||
const destination = lat + ',' + lng;
|
||||
const url = `https://www.google.com/maps/dir/?api=1&origin=${origin}&destination=${destination}`;
|
||||
window.open(url, '_blank');
|
||||
},
|
||||
() => {
|
||||
alert('Unable to get your current location. Please enable location services.');
|
||||
}
|
||||
);
|
||||
} else {
|
||||
alert('Geolocation is not supported by your browser.');
|
||||
}
|
||||
}
|
||||
|
||||
function initializeDataTable() {
|
||||
const element = document.querySelector('#bank-data-table');
|
||||
const searchInput = document.getElementById('search');
|
||||
@@ -422,6 +492,7 @@
|
||||
dataTable.on('draw', () => {
|
||||
const data = dataTable._data;
|
||||
updateMapMarkers(data);
|
||||
updatePagination(data);
|
||||
})
|
||||
// Custom search functionality
|
||||
searchInput.addEventListener('input', function () {
|
||||
@@ -445,6 +516,20 @@
|
||||
dataTable.reload();
|
||||
});
|
||||
|
||||
function updatePagination(response) {
|
||||
const paginationInfo = document.querySelector('[data-datatable-info="true"]');
|
||||
|
||||
if (paginationInfo) {
|
||||
if (response.recordsFiltered > 0) {
|
||||
const start = (response.page - 1) * response.pageSize + 1;
|
||||
const end = Math.min(start + response.pageSize - 1, response.recordsFiltered);
|
||||
paginationInfo.textContent = `Showing ${start} to ${end} of ${response.recordsFiltered} entries`;
|
||||
} else {
|
||||
paginationInfo.textContent = 'No entries to show';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function initializeEverything() {
|
||||
initMap();
|
||||
initializeDataTable();
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
href="{{ route('otorisator.view-laporan') }}?permohonanId={{ $permohonan->id }}&documentId={{ $documentId }}&jaminanId={{ $jenisJaminanId }}&statusLpj={{ true }}">
|
||||
Lihat Laporan
|
||||
</a>
|
||||
@if (Auth::user()->hasAnyRole(['administrator', 'senior-officer']) && $permohonan->approval_so == null)
|
||||
@if (Auth::user()->hasAnyRole(['administrator', 'senior-officer']) && $permohonan->approval_so == 0)
|
||||
<button onclick="otorisatorData({{ $permohonan->id }})" type="button" class="btn btn-primary">
|
||||
<i class="ki-filled ki-double-check"></i>
|
||||
Otorisator {{ $header ?? '' }}
|
||||
@@ -171,7 +171,7 @@
|
||||
|
||||
@if (Auth::user()->hasAnyRole(['administrator', 'EO Appraisal']) &&
|
||||
$permohonan->approval_so &&
|
||||
$permohonan->approval_eo == null &&
|
||||
$permohonan->approval_eo == 0 &&
|
||||
in_array($permohonan->nilai_plafond_id, [1, 2]))
|
||||
<button onclick="otorisatorData({{ $permohonan->id }})" type="button" class="btn btn-primary">
|
||||
<i class="ki-filled ki-double-check"></i>
|
||||
@@ -181,7 +181,7 @@
|
||||
|
||||
@if (Auth::user()->hasAnyRole(['administrator', 'DD Appraisal']) &&
|
||||
$permohonan->approval_eo &&
|
||||
$permohonan->approval_dd == null &&
|
||||
$permohonan->approval_dd == 0 &&
|
||||
in_array($permohonan->nilai_plafond_id, [1, 2, 4]))
|
||||
<button onclick="otorisatorData({{ $permohonan->id }})" type="button" class="btn btn-primary">
|
||||
<i class="ki-filled ki-double-check"></i>
|
||||
|
||||
Reference in New Issue
Block a user