dropdown action
This commit is contained in:
parent
3e2b383e87
commit
f480216e5c
Binary file not shown.
Binary file not shown.
@ -13,18 +13,37 @@ class apiController:
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
def kabkota(conn):
|
||||
def kabkota(conn, provinsi_id=None):
|
||||
cur = conn.cursor()
|
||||
if provinsi_id:
|
||||
SQL = """
|
||||
SELECT id, nama
|
||||
FROM wil_kabupatenkota
|
||||
WHERE provinsi_id = %s
|
||||
ORDER BY nama
|
||||
"""
|
||||
cur.execute(SQL, (provinsi_id,))
|
||||
else:
|
||||
SQL = "SELECT id,nama FROM wil_kabupatenkota ORDER BY nama"
|
||||
|
||||
cur.execute(SQL)
|
||||
|
||||
result = cur.fetchall()
|
||||
return result
|
||||
@staticmethod
|
||||
def kecamatan(conn):
|
||||
def kecamatan(conn, kabkota_id):
|
||||
cur = conn.cursor()
|
||||
if kabkota_id:
|
||||
SQL = """
|
||||
SELECT id, nama
|
||||
FROM wil_kecamatan
|
||||
WHERE kabupatenkota_id = %s
|
||||
ORDER BY nama
|
||||
"""
|
||||
cur.execute(SQL, (kabkota_id,))
|
||||
else:
|
||||
SQL = "SELECT id,nama FROM wil_kecamatan ORDER BY nama"
|
||||
cur.execute(SQL)
|
||||
|
||||
result = cur.fetchall()
|
||||
return result
|
||||
|
||||
@ -147,20 +166,13 @@ class apiController:
|
||||
kode_provinsi,
|
||||
kabupaten_kota_kode,
|
||||
kabupaten_kota_nama,
|
||||
COUNT(DISTINCT kelurahan_desa_id) AS "COUNT_DISTINCT(kelurahan_desa_id)"
|
||||
COUNT(DISTINCT kelurahan_desa_id) AS jumlah_desa
|
||||
FROM (
|
||||
SELECT
|
||||
wp.id AS provinsi_id,
|
||||
wp.kode AS kode_provinsi,
|
||||
wkk.id AS kabupaten_kota_id,
|
||||
wkk.kode AS kabupaten_kota_kode,
|
||||
wkk.nama AS kabupaten_kota_nama,
|
||||
wk.id AS kecamatan_id,
|
||||
wk.kode AS kecamatan_kode,
|
||||
wk.nama AS kecamatan_nama,
|
||||
wkd.id AS kelurahan_desa_id,
|
||||
wkd.kode AS kelurahan_desa_kode,
|
||||
wkd.nama AS kelurahan_desa_nama,
|
||||
mid.status,
|
||||
mid.tahun
|
||||
FROM metrik_indeks_desa mid
|
||||
@ -169,11 +181,10 @@ class apiController:
|
||||
INNER JOIN wil_kabupatenkota wkk ON wk.kabupatenkota_id = wkk.id
|
||||
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id
|
||||
WHERE mid.tahun = (SELECT MAX(tahun) FROM metrik_indeks_desa)
|
||||
) AS virtual_table
|
||||
WHERE kode_provinsi = %s
|
||||
AND kabupaten_kota_kode = %s
|
||||
GROUP BY tahun, status, kode_provinsi, kabupaten_kota_kode, kabupaten_kota_nama
|
||||
ORDER BY status, kabupaten_kota_kode DESC;
|
||||
AND wp.kode = %s
|
||||
AND wkk.kode = %s
|
||||
) AS filtered_data
|
||||
GROUP BY tahun, status, kode_provinsi, kabupaten_kota_kode, kabupaten_kota_nama;
|
||||
"""
|
||||
cur.execute(SQL, (kode_prov, kode_kabkota))
|
||||
result = cur.fetchall()
|
||||
@ -708,24 +719,19 @@ class apiController:
|
||||
def getTotalSerapanKab(conn, kode_kab):
|
||||
cur = conn.cursor()
|
||||
SQL = """
|
||||
WITH latest_year AS (
|
||||
SELECT MAX(tahun) AS tahun FROM metrik_dana_desa
|
||||
)
|
||||
SELECT
|
||||
SUM(serapan) / 1000000000 AS serapan_per_1M,
|
||||
(SUM(serapan) / NULLIF(SUM(pagu), 0)) * 100 AS persentase_serapan
|
||||
FROM (
|
||||
SELECT
|
||||
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama,
|
||||
wkk.id kabupaten_kota_id, wkk.kode kabupaten_kota_kode, wkk.nama kabupaten_kota_nama,
|
||||
wk.id kecamatan_id, wk.kode kecamatan_kode, wk.nama kecamatan_nama,
|
||||
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
||||
mdd.pagu, salur_pagu, mdd.persen_serapan, mdd.tahun_anggaran
|
||||
SUM(mdd.salur_pagu) / 1000000000 AS serapan_per_1M,
|
||||
(SUM(mdd.salur_pagu) / NULLIF(SUM(mdd.pagu), 0)) * 100 AS persentase_serapan
|
||||
FROM metrik_dana_desa mdd
|
||||
INNER JOIN wil_desa wkd ON mdd.kelurahan_desa_id = wkd.id
|
||||
INNER JOIN wil_desa wkd ON mdd.desa_id = wkd.id
|
||||
INNER JOIN wil_kecamatan wk ON wkd.kecamatan_id = wk.id
|
||||
INNER JOIN wil_kabupatenkota wkk ON wk.kabupatenkota_id = wkk.id
|
||||
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id
|
||||
WHERE wkk.kode = %s
|
||||
) AS virtual_table
|
||||
WHERE tahun_anggaran = 2024;
|
||||
WHERE mdd.tahun = (SELECT tahun FROM latest_year) AND
|
||||
wkk.kode = %s
|
||||
"""
|
||||
try:
|
||||
cur.execute(SQL, (kode_kab,))
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
from flask import Blueprint, jsonify, render_template
|
||||
import psycopg2
|
||||
from flask import Blueprint, jsonify, render_template, request
|
||||
from app import mapController
|
||||
from app.apiController import apiController
|
||||
from app.utils import toRupiah
|
||||
@ -272,14 +271,16 @@ def get_master_provinsi():
|
||||
data = apiController.provinsi(conn)
|
||||
return data
|
||||
|
||||
@main.route('/api/master/kabkota')
|
||||
@main.route('/api/master/kabkota/')
|
||||
def get_master_kabkota():
|
||||
provinsi_id = request.args.get('provinsi_id')
|
||||
with get_connection() as conn:
|
||||
data = apiController.kabkota
|
||||
data = apiController.kabkota(conn, provinsi_id)
|
||||
return jsonify(data)
|
||||
|
||||
@main.route('/api/master/kecamatan')
|
||||
def get_master_kecamatan():
|
||||
kabkota_id = request.args.get('kabkota_id')
|
||||
with get_connection() as conn:
|
||||
data = apiController.kecamatan(conn)
|
||||
data = apiController.kecamatan(conn,kabkota_id)
|
||||
return jsonify(data)
|
||||
|
||||
@ -583,7 +583,7 @@
|
||||
}
|
||||
|
||||
$('#provinsiDropdown').on('change', function (e) {
|
||||
const kodeProvinsi = $(this).val(); // lebih aman daripada e.target.value
|
||||
const kodeProvinsi = $(this).val();
|
||||
console.log("Provinsi dipilih:", kodeProvinsi);
|
||||
|
||||
if (!kodeProvinsi) {
|
||||
@ -593,6 +593,29 @@
|
||||
|
||||
localStorage.setItem('kode_provinsi', kodeProvinsi);
|
||||
|
||||
$('#kabkotaDropdown').empty().trigger('change');
|
||||
|
||||
// Ambil kabupaten berdasarkan provinsi
|
||||
const kabkotaURL = "{{ url_for('main.get_master_kabkota') }}";
|
||||
$.ajax({
|
||||
url: kabkotaURL,
|
||||
data: { provinsi_id: kodeProvinsi },
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
const results = data.map(kabupaten => ({
|
||||
id: kabupaten[0],
|
||||
text: kabupaten[1]
|
||||
}));
|
||||
|
||||
// Tambahkan ke dropdown kabupaten
|
||||
$('#kabkotaDropdown').select2({
|
||||
data: results,
|
||||
placeholder: 'Pilih Kabupaten/Kota',
|
||||
allowClear: true
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
console.log(`Memuat kabupaten dari /geojson/kabupaten/${kodeProvinsi}`);
|
||||
loadLayer(`/geojson/kabupaten/${kodeProvinsi}`, () => {
|
||||
console.log("Layer kabupaten dimuat.");
|
||||
@ -600,9 +623,36 @@
|
||||
});
|
||||
|
||||
$('#kabkotaDropdown').on('change', function (e) {
|
||||
const kodeKabupaten = e.target.value;
|
||||
|
||||
const kodeKabupaten = $(this).val();
|
||||
if (!kodeKabupaten) {
|
||||
console.warn("Tidak ada kode provinsi yang dipilih!");
|
||||
return;
|
||||
}
|
||||
localStorage.setItem('kode_kabupatenkota', kodeKabupaten);
|
||||
|
||||
$('#kecamatanDropdown').empty().trigger('change');
|
||||
|
||||
// Ambil kabupaten berdasarkan provinsi
|
||||
const kabkotaURL = "{{ url_for('main.get_master_kecamatan') }}";
|
||||
$.ajax({
|
||||
url: kabkotaURL,
|
||||
data: { kabkota_id: kodeKabupaten },
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
const results = data.map(kecamatan => ({
|
||||
id: kecamatan[0],
|
||||
text: kecamatan[1]
|
||||
}));
|
||||
|
||||
// Tambahkan ke dropdown kabupaten
|
||||
$('#kecamatanDropdown').select2({
|
||||
data: results,
|
||||
placeholder: 'Pilih Kabupaten/Kota',
|
||||
allowClear: true
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
loadLayer(`/geojson/kecamatan/${kodeKabupaten}`, () => {}, 'kecamatan');
|
||||
}).select2();
|
||||
|
||||
@ -611,10 +661,66 @@
|
||||
localStorage.setItem('kode_kecamatan', kodeKecamatan);
|
||||
loadLayer(`/geojson/desa/${kodeKecamatan}`, () => {}, 'desa');
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
console.log("ready for fetching data")
|
||||
const provinsiURL = "{{ url_for('main.get_master_provinsi') }}";
|
||||
$('#kabkotaDropdown').empty().trigger('change');
|
||||
$('#provinsiDropdown').select2({
|
||||
placeholder: 'Pilih Provinsi',
|
||||
allowClear: true,
|
||||
ajax: {
|
||||
url: provinsiURL,
|
||||
dataType: 'json',
|
||||
delay: 250,
|
||||
data: function (params) {
|
||||
return {
|
||||
q: params.term
|
||||
};
|
||||
},
|
||||
processResults: function (data) {
|
||||
console.log(data)
|
||||
return {
|
||||
results: data.map(provinsi => ({
|
||||
id: provinsi[0],
|
||||
text: provinsi[1]
|
||||
}))
|
||||
};
|
||||
},
|
||||
cache: true
|
||||
},
|
||||
minimumInputLength: 0
|
||||
});
|
||||
|
||||
$('#kabkotaDropdown').select2({
|
||||
placeholder: 'Pilih Kabkota',
|
||||
allowClear: true,
|
||||
ajax: {
|
||||
url: provinsiURL,
|
||||
dataType: 'json',
|
||||
delay: 250,
|
||||
data: function (params) {
|
||||
return {
|
||||
q: params.term
|
||||
};
|
||||
},
|
||||
processResults: function (data) {
|
||||
console.log(data)
|
||||
return {
|
||||
results: data.map(provinsi => ({
|
||||
id: provinsi[0],
|
||||
text: provinsi[1]
|
||||
}))
|
||||
};
|
||||
},
|
||||
cache: true
|
||||
},
|
||||
minimumInputLength: 0
|
||||
});
|
||||
|
||||
$('#provinsiDropdown').select2({
|
||||
placeholder: 'Pilih Desa',
|
||||
allowClear: true,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user