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
|
return result
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def kabkota(conn):
|
def kabkota(conn, provinsi_id=None):
|
||||||
cur = conn.cursor()
|
cur = conn.cursor()
|
||||||
SQL = "SELECT id,nama FROM wil_kabupatenkota ORDER BY nama"
|
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)
|
||||||
|
|
||||||
cur.execute(SQL)
|
|
||||||
result = cur.fetchall()
|
result = cur.fetchall()
|
||||||
return result
|
return result
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def kecamatan(conn):
|
def kecamatan(conn, kabkota_id):
|
||||||
cur = conn.cursor()
|
cur = conn.cursor()
|
||||||
SQL = "SELECT id,nama FROM wil_kecamatan ORDER BY nama"
|
if kabkota_id:
|
||||||
cur.execute(SQL)
|
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()
|
result = cur.fetchall()
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@ -147,20 +166,13 @@ class apiController:
|
|||||||
kode_provinsi,
|
kode_provinsi,
|
||||||
kabupaten_kota_kode,
|
kabupaten_kota_kode,
|
||||||
kabupaten_kota_nama,
|
kabupaten_kota_nama,
|
||||||
COUNT(DISTINCT kelurahan_desa_id) AS "COUNT_DISTINCT(kelurahan_desa_id)"
|
COUNT(DISTINCT kelurahan_desa_id) AS jumlah_desa
|
||||||
FROM (
|
FROM (
|
||||||
SELECT
|
SELECT
|
||||||
wp.id AS provinsi_id,
|
|
||||||
wp.kode AS kode_provinsi,
|
wp.kode AS kode_provinsi,
|
||||||
wkk.id AS kabupaten_kota_id,
|
|
||||||
wkk.kode AS kabupaten_kota_kode,
|
wkk.kode AS kabupaten_kota_kode,
|
||||||
wkk.nama AS kabupaten_kota_nama,
|
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.id AS kelurahan_desa_id,
|
||||||
wkd.kode AS kelurahan_desa_kode,
|
|
||||||
wkd.nama AS kelurahan_desa_nama,
|
|
||||||
mid.status,
|
mid.status,
|
||||||
mid.tahun
|
mid.tahun
|
||||||
FROM metrik_indeks_desa mid
|
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_kabupatenkota wkk ON wk.kabupatenkota_id = wkk.id
|
||||||
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id
|
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id
|
||||||
WHERE mid.tahun = (SELECT MAX(tahun) FROM metrik_indeks_desa)
|
WHERE mid.tahun = (SELECT MAX(tahun) FROM metrik_indeks_desa)
|
||||||
) AS virtual_table
|
AND wp.kode = %s
|
||||||
WHERE kode_provinsi = %s
|
AND wkk.kode = %s
|
||||||
AND kabupaten_kota_kode = %s
|
) AS filtered_data
|
||||||
GROUP BY tahun, status, kode_provinsi, kabupaten_kota_kode, kabupaten_kota_nama
|
GROUP BY tahun, status, kode_provinsi, kabupaten_kota_kode, kabupaten_kota_nama;
|
||||||
ORDER BY status, kabupaten_kota_kode DESC;
|
|
||||||
"""
|
"""
|
||||||
cur.execute(SQL, (kode_prov, kode_kabkota))
|
cur.execute(SQL, (kode_prov, kode_kabkota))
|
||||||
result = cur.fetchall()
|
result = cur.fetchall()
|
||||||
@ -708,24 +719,19 @@ class apiController:
|
|||||||
def getTotalSerapanKab(conn, kode_kab):
|
def getTotalSerapanKab(conn, kode_kab):
|
||||||
cur = conn.cursor()
|
cur = conn.cursor()
|
||||||
SQL = """
|
SQL = """
|
||||||
SELECT
|
WITH latest_year AS (
|
||||||
SUM(serapan) / 1000000000 AS serapan_per_1M,
|
SELECT MAX(tahun) AS tahun FROM metrik_dana_desa
|
||||||
(SUM(serapan) / NULLIF(SUM(pagu), 0)) * 100 AS persentase_serapan
|
)
|
||||||
FROM (
|
|
||||||
SELECT
|
SELECT
|
||||||
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama,
|
SUM(mdd.salur_pagu) / 1000000000 AS serapan_per_1M,
|
||||||
wkk.id kabupaten_kota_id, wkk.kode kabupaten_kota_kode, wkk.nama kabupaten_kota_nama,
|
(SUM(mdd.salur_pagu) / NULLIF(SUM(mdd.pagu), 0)) * 100 AS persentase_serapan
|
||||||
wk.id kecamatan_id, wk.kode kecamatan_kode, wk.nama kecamatan_nama,
|
FROM metrik_dana_desa mdd
|
||||||
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
INNER JOIN wil_desa wkd ON mdd.desa_id = wkd.id
|
||||||
mdd.pagu, salur_pagu, mdd.persen_serapan, mdd.tahun_anggaran
|
|
||||||
FROM metrik_dana_desa mdd
|
|
||||||
INNER JOIN wil_desa wkd ON mdd.kelurahan_desa_id = wkd.id
|
|
||||||
INNER JOIN wil_kecamatan wk ON wkd.kecamatan_id = wk.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_kabupatenkota wkk ON wk.kabupatenkota_id = wkk.id
|
||||||
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id
|
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id
|
||||||
WHERE wkk.kode = %s
|
WHERE mdd.tahun = (SELECT tahun FROM latest_year) AND
|
||||||
) AS virtual_table
|
wkk.kode = %s
|
||||||
WHERE tahun_anggaran = 2024;
|
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
cur.execute(SQL, (kode_kab,))
|
cur.execute(SQL, (kode_kab,))
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
from flask import Blueprint, jsonify, render_template
|
from flask import Blueprint, jsonify, render_template, request
|
||||||
import psycopg2
|
|
||||||
from app import mapController
|
from app import mapController
|
||||||
from app.apiController import apiController
|
from app.apiController import apiController
|
||||||
from app.utils import toRupiah
|
from app.utils import toRupiah
|
||||||
@ -272,14 +271,16 @@ def get_master_provinsi():
|
|||||||
data = apiController.provinsi(conn)
|
data = apiController.provinsi(conn)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@main.route('/api/master/kabkota')
|
@main.route('/api/master/kabkota/')
|
||||||
def get_master_kabkota():
|
def get_master_kabkota():
|
||||||
|
provinsi_id = request.args.get('provinsi_id')
|
||||||
with get_connection() as conn:
|
with get_connection() as conn:
|
||||||
data = apiController.kabkota
|
data = apiController.kabkota(conn, provinsi_id)
|
||||||
return jsonify(data)
|
return jsonify(data)
|
||||||
|
|
||||||
@main.route('/api/master/kecamatan')
|
@main.route('/api/master/kecamatan')
|
||||||
def get_master_kecamatan():
|
def get_master_kecamatan():
|
||||||
|
kabkota_id = request.args.get('kabkota_id')
|
||||||
with get_connection() as conn:
|
with get_connection() as conn:
|
||||||
data = apiController.kecamatan(conn)
|
data = apiController.kecamatan(conn,kabkota_id)
|
||||||
return jsonify(data)
|
return jsonify(data)
|
||||||
|
|||||||
@ -583,7 +583,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
$('#provinsiDropdown').on('change', function (e) {
|
$('#provinsiDropdown').on('change', function (e) {
|
||||||
const kodeProvinsi = $(this).val(); // lebih aman daripada e.target.value
|
const kodeProvinsi = $(this).val();
|
||||||
console.log("Provinsi dipilih:", kodeProvinsi);
|
console.log("Provinsi dipilih:", kodeProvinsi);
|
||||||
|
|
||||||
if (!kodeProvinsi) {
|
if (!kodeProvinsi) {
|
||||||
@ -593,6 +593,29 @@
|
|||||||
|
|
||||||
localStorage.setItem('kode_provinsi', kodeProvinsi);
|
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}`);
|
console.log(`Memuat kabupaten dari /geojson/kabupaten/${kodeProvinsi}`);
|
||||||
loadLayer(`/geojson/kabupaten/${kodeProvinsi}`, () => {
|
loadLayer(`/geojson/kabupaten/${kodeProvinsi}`, () => {
|
||||||
console.log("Layer kabupaten dimuat.");
|
console.log("Layer kabupaten dimuat.");
|
||||||
@ -600,9 +623,36 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
$('#kabkotaDropdown').on('change', function (e) {
|
$('#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);
|
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');
|
loadLayer(`/geojson/kecamatan/${kodeKabupaten}`, () => {}, 'kecamatan');
|
||||||
}).select2();
|
}).select2();
|
||||||
|
|
||||||
@ -611,10 +661,66 @@
|
|||||||
localStorage.setItem('kode_kecamatan', kodeKecamatan);
|
localStorage.setItem('kode_kecamatan', kodeKecamatan);
|
||||||
loadLayer(`/geojson/desa/${kodeKecamatan}`, () => {}, 'desa');
|
loadLayer(`/geojson/desa/${kodeKecamatan}`, () => {}, 'desa');
|
||||||
});
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<script>
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
console.log("ready for fetching data")
|
console.log("ready for fetching data")
|
||||||
const provinsiURL = "{{ url_for('main.get_master_provinsi') }}";
|
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({
|
$('#provinsiDropdown').select2({
|
||||||
placeholder: 'Pilih Desa',
|
placeholder: 'Pilih Desa',
|
||||||
allowClear: true,
|
allowClear: true,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user