dropdown action

This commit is contained in:
='fauz
2025-06-30 12:47:53 +07:00
parent 3e2b383e87
commit f480216e5c
5 changed files with 154 additions and 41 deletions
Binary file not shown.
Binary file not shown.
+39 -33
View File
@@ -13,18 +13,37 @@ class apiController:
return result
@staticmethod
def kabkota(conn):
def kabkota(conn, provinsi_id=None):
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()
return result
@staticmethod
def kecamatan(conn):
def kecamatan(conn, kabkota_id):
cur = conn.cursor()
SQL = "SELECT id,nama FROM wil_kecamatan ORDER BY nama"
cur.execute(SQL)
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 = """
SELECT
SUM(serapan) / 1000000000 AS serapan_per_1M,
(SUM(serapan) / NULLIF(SUM(pagu), 0)) * 100 AS persentase_serapan
FROM (
WITH latest_year AS (
SELECT MAX(tahun) AS tahun FROM metrik_dana_desa
)
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
FROM metrik_dana_desa mdd
INNER JOIN wil_desa wkd ON mdd.kelurahan_desa_id = wkd.id
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.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,))
+6 -5
View File
@@ -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)