Status Wilayah

This commit is contained in:
='fauz 2025-07-01 14:47:09 +07:00
parent ea99316d4c
commit 6be099fe2f
5 changed files with 378 additions and 293 deletions

View File

@ -51,48 +51,57 @@ class apiController:
def getStatusKecamatan(conn,kode_prov, kode_kabkota, kode_kecamatan): def getStatusKecamatan(conn,kode_prov, kode_kabkota, kode_kecamatan):
cur = conn.cursor() cur = conn.cursor()
SQL = """ SQL = """
SELECT SELECT
tahun AS tahun, tahun as tahun,
status as th, status as th,
kode_provinsi, kode_provinsi,
kabupaten_kota_kode, kabupaten_kota_kode,
kecamatan_kode, kecamatan_kode,
kecamatan_nama, kecamatan_nama,
COUNT(DISTINCT kelurahan_desa_id) AS `COUNT_DISTINCT(kelurahan_desa_id)` COUNT(distinct kelurahan_desa_id) as `COUNT_DISTINCT(kelurahan_desa_id)`
FROM ( FROM
SELECT (
wp.id AS provinsi_id, SELECT
wp.kode AS kode_provinsi, wp.id as provinsi_id,
wkk.id AS kabupaten_kota_id, wp.kode as kode_provinsi,
wkk.kode AS kabupaten_kota_kode, wkk.id as kabupaten_kota_id,
wkk.nama AS kabupaten_kota_nama, wkk.kode as kabupaten_kota_kode,
wk.id AS kecamatan_id, wkk.nama as kabupaten_kota_nama,
wk.kode AS kecamatan_kode, wk.id as kecamatan_id,
wk.nama AS kecamatan_nama, wk.kode as kecamatan_kode,
wkd.id AS kelurahan_desa_id, wk.nama as kecamatan_nama,
wkd.kode AS kelurahan_desa_kode, wd.id as kelurahan_desa_id,
wkd.nama AS kelurahan_desa_nama, wp.kode as kelurahan_desa_kode,
mid.status, wk.nama as kelurahan_desa_nama,
mid.tahun mid.status,
FROM metrik_indeks_desa mid mid.tahun
INNER JOIN wil_desa wkd ON mid.desa_id = wkd.id FROM
INNER JOIN wil_kecamatan wk ON wkd.kecamatan_id = wk.id metrik_indeks_desa mid
INNER JOIN wil_kabupatenkota wkk ON wk.kabupatenkota_id = wkk.id JOIN wil_desa wd on
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id wd.kode_int = mid.kode_desa
WHERE mid.tahun = ( JOIN wil_kecamatan wk on
SELECT MAX(tahun) FROM metrik_indeks_desa LIMIT 1 wk.id = wd.kecamatan_id
) JOIN wil_kabupatenkota wkk on
) AS virtual_table wkk.id = wk.kabupatenkota_id
WHERE kode_provinsi = %s JOIN wil_provinsi wp on
AND kabupaten_kota_kode = %s wp.id = wkk.provinsi_id
where
mid.tahun = (
select
MAX(tahun)
from
metrik_indeks_desa
limit 1 ) ) as virtual_table
WHERE provinsi_id = %s
AND kecamatan_kode = %s AND kecamatan_kode = %s
GROUP BY tahun, status, kode_provinsi, kabupaten_kota_kode, kecamatan_kode, kecamatan_nama GROUP BY tahun, status, kode_provinsi, kabupaten_kota_kode, kecamatan_kode, kecamatan_nama
ORDER BY kecamatan_kode DESC; ORDER BY kecamatan_kode DESC;
""" """
try: try:
cur.execute(SQL, (kode_prov, kode_kabkota, kode_kecamatan)) cur.execute(SQL, (kode_prov, kode_kecamatan))
print('status kecamtan :', cur._executed)
except Exception as e: except Exception as e:
print(e)
return [] return []
print(kode_prov, kode_kabkota, kode_kecamatan) print(kode_prov, kode_kabkota, kode_kecamatan)
result = cur.fetchall() result = cur.fetchall()
@ -140,11 +149,11 @@ class apiController:
# select wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, # 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, # 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, # 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, # wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
# mid.status, mid.status, mid.tahun # mid.status, mid.status, mid.tahun
# from metrik_indeks_desa mid # from metrik_indeks_desa mid
# inner join wil_desa wkd on mid.desa_id = wkd.id # inner join wil_desa wkd on mid.desa_id = wk.id
# inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id # inner join wil_kecamatan wk on wk.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 mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1) # where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1)
@ -172,16 +181,16 @@ class apiController:
wp.kode AS kode_provinsi, wp.kode AS kode_provinsi,
wkk.kode AS kabupaten_kota_kode, wkk.kode AS kabupaten_kota_kode,
wkk.nama AS kabupaten_kota_nama, wkk.nama AS kabupaten_kota_nama,
wkd.id AS kelurahan_desa_id, wk.id AS kelurahan_desa_id,
mid.status, mid.status,
mid.tahun mid.tahun
FROM metrik_indeks_desa mid FROM metrik_indeks_desa mid
INNER JOIN wil_desa wkd ON mid.desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mid.kode_desa
INNER JOIN wil_kecamatan wk ON wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
INNER JOIN wil_kabupatenkota wkk ON wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
WHERE mid.tahun = (SELECT MAX(tahun) FROM metrik_indeks_desa) WHERE mid.tahun = (SELECT MAX(tahun) FROM metrik_indeks_desa)
AND wp.kode = %s AND wp.id = %s
AND wkk.kode = %s AND wkk.kode = %s
) AS filtered_data ) 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;
@ -205,11 +214,11 @@ class apiController:
# select wp.id provinsi_id, wp.kode kode_provinsi, # select wp.id provinsi_id, wp.kode kode_provinsi,
# wkk.id kabupaten_kota_id, wkk.kode kabupaten_kota_kode, wkk.nama kabupaten_kota_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, # 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, # wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
# mid.status, mid.status, mid.tahun # mid.status, mid.status, mid.tahun
# from metrik_indeks_desa mid # from metrik_indeks_desa mid
# inner join wil_desa wkd on mid.desa_id = wkd.id # inner join wil_desa wkd on mid.desa_id = wk.id
# inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id # inner join wil_kecamatan wk on wk.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 mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1) # where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1)
@ -235,13 +244,13 @@ class apiController:
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, 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, 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, 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, wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
mb.jenis, mb.jumlah mb.jenis, mb.jumlah
from metric_bumdes mb from metrik_bumdes mb
inner join wil_desa wkd on mb.kelurahan_desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mb.kode_desa
inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
inner join wil_kabupatenkota wkk on wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
inner join wil_provinsi wp on wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
) AS virtual_table GROUP BY jenis ORDER BY "SUM(jumlah)" DESC ) AS virtual_table GROUP BY jenis ORDER BY "SUM(jumlah)" DESC
LIMIT 1000; LIMIT 1000;
""" """
@ -259,13 +268,13 @@ class apiController:
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, 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, 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, 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, wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
mpd.jenis_pendamping, mpd.jumlah mpd.jenis_pendamping, mpd.jumlah
from metric_pendamping_desa mpd from metric_pendamping_desa mpd
inner join wil_desa wkd on mpd.kelurahan_desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mpd.kode_desa
inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
inner join wil_kabupatenkota wkk on wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
inner join wil_provinsi wp on wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah)" DESC ) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah)" DESC
LIMIT 1000; LIMIT 1000;
""" """
@ -281,13 +290,13 @@ class apiController:
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, 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, 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, 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, wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
mpd.jenis_pendamping, mpd.jumlah mpd.jenis_pendamping, mpd.jumlah
from metric_pendamping_desa mpd from metric_pendamping_desa mpd
INNER JOIN wil_desa wkd ON mdd.desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mpd.kode_desa
INNER JOIN wil_kecamatan wk ON wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
INNER JOIN wil_kabupatenkota wkk ON wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
WHERE wp.kode = %s WHERE wp.kode = %s
) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah)" DESC ) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah)" DESC
LIMIT 1000; LIMIT 1000;
@ -300,7 +309,7 @@ class apiController:
return result return result
@staticmethod @staticmethod
def getPendampingPerDesa(conn): def getPendampingPerDesa(conn, kode_desa):
cur = conn.cursor() cur = conn.cursor()
SQL = """ SQL = """
SELECT jenis_pendamping AS jenis_pendamping, SUM(jumlah) / COUNT(DISTINCT kabupaten_kota_id) AS "SUM(jumlah) / COUNT(DISTINCT kabupaten_kota_id)" SELECT jenis_pendamping AS jenis_pendamping, SUM(jumlah) / COUNT(DISTINCT kabupaten_kota_id) AS "SUM(jumlah) / COUNT(DISTINCT kabupaten_kota_id)"
@ -308,19 +317,22 @@ class apiController:
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, 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, 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, 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, wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
mpd.jenis_pendamping, mpd.jumlah mpd.jenis_pendamping, mpd.jumlah
from metric_pendamping_desa mpd from metric_pendamping_desa mpd
inner join wil_desa wkd on mpd.kelurahan_desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mpd.kode_desa
inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
inner join wil_kabupatenkota wkk on wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
inner join wil_provinsi wp on wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah) / COUNT(DISTINCT kabupaten_kota_id)" DESC WHERE wk.kode = %s
) AS virtual_table
GROUP BY jenis_pendamping ORDER BY "SUM(jumlah) / COUNT(DISTINCT kabupaten_kota_id)" DESC
LIMIT 10000; LIMIT 10000;
""" """
try: try:
cur.execute(SQL) cur.execute(SQL)
except Exception as e: except Exception as e:
print(e)
return [] return []
result = cur.fetchall() result = cur.fetchall()
return result return result
@ -334,13 +346,13 @@ class apiController:
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, 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, 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, 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, wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
mkd.jumlah mkd.jumlah
from metric_koperasi_desa mkd from metric_koperasi_desa mkd
inner join wil_desa wkd on mkd.kelurahan_desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mkd.kode_desa
inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
inner join wil_kabupatenkota wkk on wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
inner join wil_provinsi wp on wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
) AS virtual_table; ) AS virtual_table;
""" """
cur.execute(SQL) cur.execute(SQL)
@ -356,13 +368,13 @@ class apiController:
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, 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, 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, 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, wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
mkd.jumlah mkd.jumlah
from metric_koperasi_desa mkd from metric_koperasi_desa mkd
inner join wil_desa wkd on mkd.kelurahan_desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mkd.kode_desa
inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
inner join wil_kabupatenkota wkk on wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
inner join wil_provinsi wp on wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
) AS virtual_table ) AS virtual_table
WHERE jumlah = 0 WHERE jumlah = 0
LIMIT 50000; LIMIT 50000;
@ -454,11 +466,11 @@ class apiController:
# select wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, # 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, # 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, # 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, # wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
# mid.status, mid.status, mid.tahun # mid.status, mid.status, mid.tahun
# from metrik_indeks_desa mid # from metrik_indeks_desa mid
# inner join wil_desa wkd on mid.desa_id = wkd.id # inner join wil_desa wkd on mid.desa_id = wk.id
# inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id # inner join wil_kecamatan wk on wk.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 mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1) # where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1)
@ -479,11 +491,11 @@ class apiController:
# select wp.id provinsi_id, wp.kode kode_provinsi, # select wp.id provinsi_id, wp.kode kode_provinsi,
# wkk.id kabupaten_kota_id, wkk.kode kabupaten_kota_kode, wkk.nama kabupaten_kota_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, # 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, # wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
# mid.status, mid.status, mid.tahun # mid.status, mid.status, mid.tahun
# from metrik_indeks_desa mid # from metrik_indeks_desa mid
# inner join wil_desa wkd on mid.desa_id = wkd.id # inner join wil_desa wkd on mid.desa_id = wk.id
# inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id # inner join wil_kecamatan wk on wk.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 mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1) # where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1)
@ -512,11 +524,11 @@ class apiController:
# select wp.id provinsi_id, wp.kode kode_provinsi, # select wp.id provinsi_id, wp.kode kode_provinsi,
# wkk.id kabupaten_kota_id, wkk.kode kabupaten_kota_kode, wkk.nama kabupaten_kota_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, # 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, # wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
# mid.status, mid.status, mid.tahun # mid.status, mid.status, mid.tahun
# from metrik_indeks_desa mid # from metrik_indeks_desa mid
# inner join wil_desa wkd on mid.desa_id = wkd.id # inner join wil_desa wkd on mid.desa_id = wk.id
# inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id # inner join wil_kecamatan wk on wk.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 mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1) # where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1)
@ -540,13 +552,13 @@ class apiController:
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, 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, 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, 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, wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
mb.tipe, mb.jumlah mb.tipe, mb.jumlah
from metrik_bumdes mb from metrik_bumdes mb
inner join wil_desa wkd on mb.desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mb.kode_desa
inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
inner join wil_kabupatenkota wkk on wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
inner join wil_provinsi wp on wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
WHERE wp.kode = %s WHERE wp.kode = %s
) AS virtual_table GROUP BY tipe ORDER BY "SUM(jumlah)" DESC ) AS virtual_table GROUP BY tipe ORDER BY "SUM(jumlah)" DESC
LIMIT 1000; LIMIT 1000;
@ -568,13 +580,13 @@ class apiController:
select wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, 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, 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, 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, wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
mid.idm, mid.status, mid.tahun mid.idm, mid.status, mid.tahun
from metrik_indeks_desa mid from metrik_indeks_desa mid
inner join wil_desa wkd on mid.desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mid.kode_desa
inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
inner join wil_kabupatenkota wkk on wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
inner join wil_provinsi wp on wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1) where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1)
) AS virtual_table ) AS virtual_table
WHERE provinsi_kode = %s WHERE provinsi_kode = %s
@ -593,11 +605,11 @@ class apiController:
# select wp.id provinsi_id, wp.kode kode_provinsi, # select wp.id provinsi_id, wp.kode kode_provinsi,
# wkk.id kabupaten_kota_id, wkk.kode kabupaten_kota_kode, wkk.nama kabupaten_kota_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, # 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, # wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
# mid.status, mid.status, mid.tahun # mid.status, mid.status, mid.tahun
# from metrik_indeks_desa mid # from metrik_indeks_desa mid
# inner join wil_desa wkd on mid.desa_id = wkd.id # inner join wil_desa wkd on mid.desa_id = wk.id
# inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id # inner join wil_kecamatan wk on wk.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 mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1) # where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1)
@ -619,10 +631,10 @@ class apiController:
# WHEN mkd.jumlah > 0 THEN 'Kopmer' # WHEN mkd.jumlah > 0 THEN 'Kopmer'
# ELSE 'Non Kopmer' # ELSE 'Non Kopmer'
# END AS status_koperasi, # END AS status_koperasi,
# COUNT(DISTINCT wkd.id) AS jumlah_desa # COUNT(DISTINCT wk.id) AS jumlah_desa
# FROM metric_koperasi_desa mkd # FROM metric_koperasi_desa mkd
# INNER JOIN wil_desa wkd ON mkd.kelurahan_desa_id = wkd.id # INNER JOIN wil_desa wkd ON mkd.kelurahan_desa_id = wk.id
# INNER JOIN wil_kecamatan wk ON wkd.kecamatan_id = wk.id # INNER JOIN wil_kecamatan wk ON wk.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 wp.kode = %s # WHERE wp.kode = %s
@ -647,10 +659,10 @@ class apiController:
SUM(mdd.salur_pagu) / 1000000000 AS serapan_per_1M, SUM(mdd.salur_pagu) / 1000000000 AS serapan_per_1M,
(SUM(mdd.salur_pagu) / NULLIF(SUM(mdd.pagu), 0)) * 100 AS persentase_serapan (SUM(mdd.salur_pagu) / NULLIF(SUM(mdd.pagu), 0)) * 100 AS persentase_serapan
FROM metrik_dana_desa mdd FROM metrik_dana_desa mdd
INNER JOIN wil_desa wkd ON mdd.desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mdd.kode_desa
INNER JOIN wil_kecamatan wk ON wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
INNER JOIN wil_kabupatenkota wkk ON wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
WHERE mdd.tahun = (SELECT tahun FROM latest_year) WHERE mdd.tahun = (SELECT tahun FROM latest_year)
AND wp.kode = %s AND wp.kode = %s
""" """
@ -659,7 +671,46 @@ class apiController:
for row in cur.fetchall(): for row in cur.fetchall():
total_serapan += row[1] total_serapan += row[1]
return {'jumlah_per_m':toRupiah(row[0]), 'persentage':round(row[1],2)} return {'jumlah_per_m':toRupiah(row[0]), 'persentage':round(row[1],2)}
@staticmethod
def getTotalDana(conn, level,kode_lvl):
print("data level:", level,kode_lvl)
cursor = conn.cursor()
level_conf = {
'provinsi' : ('wil_provinsi','wp', 'kode'),
'kabkota' : ('wil_kabupatenkota', 'wkk', 'kode'),
'kecamatan' : ('wil_kecamatan', 'wk', 'kode'),
'desa' : ('wil_desa', 'wd', 'kode')
}
if level not in level_conf or not kode_lvl:
print('level tidak valid')
return
tabel,alias, key = level_conf[level]
query = f"""
WITH latest_year AS (
SELECT MAX(tahun) AS tahun FROM metrik_dana_desa
)
SELECT
SUM(mdd.pagu) AS serapan_per_1M
FROM metrik_dana_desa mdd
JOIN wil_desa wd on wd.kode_int = mdd.kode_desa
JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
WHERE mdd.tahun = (SELECT tahun FROM latest_year)
AND {alias}.{key} = '{kode_lvl}'
"""
print("Query :", query)
try:
cursor.execute(query)
except Exception as e:
print(e)
return[]
result = cursor.fetchone()
print("data:", query)
return result
@staticmethod @staticmethod
# def getStatusKecamatan(conn, kode_prov, kode_kabkota, kode_kecamatan): # def getStatusKecamatan(conn, kode_prov, kode_kabkota, kode_kecamatan):
# cur = conn.cursor() # cur = conn.cursor()
@ -676,11 +727,11 @@ class apiController:
# select wp.id provinsi_id, wp.kode kode_provinsi, # select wp.id provinsi_id, wp.kode kode_provinsi,
# wkk.id kabupaten_kota_id, wkk.kode kabupaten_kota_kode, wkk.nama kabupaten_kota_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, # 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, # wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
# mid.status, mid.status, mid.tahun # mid.status, mid.status, mid.tahun
# from metrik_indeks_desa mid # from metrik_indeks_desa mid
# inner join wil_desa wkd on mid.desa_id = wkd.id # inner join wil_desa wkd on mid.desa_id = wk.id
# inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id # inner join wil_kecamatan wk on wk.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 mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1) # where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1)
@ -703,26 +754,27 @@ class apiController:
def getBumdesKab(conn, kode_kab): def getBumdesKab(conn, kode_kab):
cur = conn.cursor() cur = conn.cursor()
SQL = """ SQL = """
SELECT jenis AS jenis, sum(jumlah) AS "SUM(jumlah)" SELECT jenis, sum(jumlah) AS "SUM(jumlah)"
FROM (select FROM (
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, SELECT
wkk.id kabupaten_kota_id, wkk.kode kabupaten_kota_kode, wkk.nama kabupaten_kota_nama, wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama,
wk.id kecamatan_id, wk.kode kecamatan_kode, wk.nama kecamatan_nama, wkk.id kabupaten_kota_id, wkk.kode kabupaten_kota_kode, wkk.nama kabupaten_kota_nama,
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama, wk.id kecamatan_id, wk.kode kecamatan_kode, wk.nama kecamatan_nama,
mb.jenis, mb.jumlah wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
from metric_bumdes mb mb.tipe as jenis, mb.jumlah
inner join wil_desa wkd on mb.kelurahan_desa_id = wkd.id FROM metrik_bumdes mb
inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id JOIN wil_desa wd on wd.kode_int = mb.kode_desa
inner join wil_kabupatenkota wkk on wk.kabupatenkota_id = wkk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
inner join wil_provinsi wp on wkk.provinsi_id = wp.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
WHERE wkk.kode = %s WHERE wkk.kode = %s
) AS virtual_table GROUP BY jenis ORDER BY "SUM(jumlah)" DESC ) AS virtual_table GROUP BY jenis ORDER BY "SUM(jumlah)";
LIMIT 1000;
""" """
try: # try:
cur.execute(SQL, (kode_prov,)) cur.execute(SQL, (kode_kab,))
except Exception as e: # except Exception as e:
return [] # return []
result = cur.fetchall() result = cur.fetchall()
return result return result
@ -737,10 +789,10 @@ class apiController:
SUM(mdd.salur_pagu) / 1000000000 AS serapan_per_1M, SUM(mdd.salur_pagu) / 1000000000 AS serapan_per_1M,
(SUM(mdd.salur_pagu) / NULLIF(SUM(mdd.pagu), 0)) * 100 AS persentase_serapan (SUM(mdd.salur_pagu) / NULLIF(SUM(mdd.pagu), 0)) * 100 AS persentase_serapan
FROM metrik_dana_desa mdd FROM metrik_dana_desa mdd
INNER JOIN wil_desa wkd ON mdd.desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mdd.kode_desa
INNER JOIN wil_kecamatan wk ON wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
INNER JOIN wil_kabupatenkota wkk ON wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
WHERE mdd.tahun = (SELECT tahun FROM latest_year) AND WHERE mdd.tahun = (SELECT tahun FROM latest_year) AND
wkk.kode = %s wkk.kode = %s
""" """
@ -764,13 +816,13 @@ class apiController:
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, 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, 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, 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, wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
mpd.jenis_pendamping, mpd.jumlah mpd.jenis_pendamping, mpd.jumlah
from metric_pendamping_desa mpd from metric_pendamping_desa mpd
inner join wil_desa wkd on mpd.kelurahan_desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mpd.kode_desa
inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
inner join wil_kabupatenkota wkk on wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
inner join wil_provinsi wp on wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
WHERE wkk.kode = %s WHERE wkk.kode = %s
) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah)" DESC ) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah)" DESC
LIMIT 1000; LIMIT 1000;
@ -791,12 +843,12 @@ class apiController:
WHEN mkd.jumlah > 0 THEN 'Kopmer' WHEN mkd.jumlah > 0 THEN 'Kopmer'
ELSE 'Non Kopmer' ELSE 'Non Kopmer'
END AS status_koperasi, END AS status_koperasi,
COUNT(DISTINCT wkd.id) AS jumlah_desa COUNT(DISTINCT wk.id) AS jumlah_desa
FROM metric_koperasi_desa mkd FROM metric_koperasi_desa mkd
INNER JOIN wil_desa wkd ON mkd.kelurahan_desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mkd.kode_desa
INNER JOIN wil_kecamatan wk ON wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
INNER JOIN wil_kabupatenkota wkk ON wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
WHERE wkk.kode = %s WHERE wkk.kode = %s
GROUP BY status_koperasi GROUP BY status_koperasi
LIMIT 50000; LIMIT 50000;
@ -816,21 +868,21 @@ class apiController:
def getBumdesKec(conn, kode_kec): def getBumdesKec(conn, kode_kec):
cur = conn.cursor() cur = conn.cursor()
SQL = """ SQL = """
SELECT jenis AS jenis, sum(jumlah) AS "SUM(jumlah)" SELECT jenis, sum(jumlah) AS "SUM(jumlah)"
FROM (select FROM (
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, SELECT
wkk.id kabupaten_kota_id, wkk.kode kabupaten_kota_kode, wkk.nama kabupaten_kota_nama, wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama,
wk.id kecamatan_id, wk.kode kecamatan_kode, wk.nama kecamatan_nama, wkk.id kabupaten_kota_id, wkk.kode kabupaten_kota_kode, wkk.nama kabupaten_kota_nama,
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama, wk.id kecamatan_id, wk.kode kecamatan_kode, wk.nama kecamatan_nama,
mb.jenis, mb.jumlah wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
from metric_bumdes mb mb.tipe as jenis, mb.jumlah
inner join wil_desa wkd on mb.kelurahan_desa_id = wkd.id FROM metrik_bumdes mb
inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id JOIN wil_desa wd on wd.kode_int = mb.kode_desa
inner join wil_kabupatenkota wkk on wk.kabupatenkota_id = wkk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
inner join wil_provinsi wp on wkk.provinsi_id = wp.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
WHERE wk.kode = %s WHERE wk.kode = %s
) AS virtual_table GROUP BY jenis ORDER BY "SUM(jumlah)" DESC ) AS virtual_table GROUP BY jenis ORDER BY "SUM(jumlah)";
LIMIT 1000;
""" """
try: try:
cur.execute(SQL,(kode_kec,)) cur.execute(SQL,(kode_kec,))
@ -843,37 +895,22 @@ class apiController:
def getTotalSerapanKec(conn, kode_kec): def getTotalSerapanKec(conn, kode_kec):
cur = conn.cursor() cur = conn.cursor()
SQL = """ SQL = """
SELECT select
SUM(serapan) / 1000000000 AS serapan_per_1M, SUM(mdd.salur_pagu) serapan_per_milyar,
(SUM(serapan) / NULLIF(SUM(pagu), 0)) * 100 AS persentase_serapan (SUM(mdd.salur_pagu) / NULLIF(SUM(mdd.pagu), 0)) * 100 AS persentase_serapan
FROM ( from metrik_dana_desa mdd
SELECT join wil_desa as wd on wd.kode_int = mdd.kode_desa
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, JOIN wil_kecamatan AS wk ON wk.id = wd.kecamatan_id
wkk.id kabupaten_kota_id, wkk.kode kabupaten_kota_kode, wkk.nama kabupaten_kota_nama, JOIN wil_kabupatenkota AS wkk ON wkk.id = wk.kabupatenkota_id
wk.id kecamatan_id, wk.kode kecamatan_kode, wk.nama kecamatan_nama, JOIN wil_provinsi AS wp ON wp.id = wkk.provinsi_id
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama, where wk.kode = %s
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_kabupatenkota wkk ON wk.kabupatenkota_id = wkk.id
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id
WHERE wk.kode = %s
) AS virtual_table
WHERE tahun_anggaran = 2024;
""" """
try: try:
cur.execute(SQL, (kode_kec,)) cur.execute(SQL, (kode_kec,))
except Exception as e: except Exception as e:
return [] return []
result = cur.fetchone()
total_serapan = 0 return result
total_per_m = 0
for row in cur.fetchall():
total_serapan += row[1] or 0
total_per_m += row[0] or 0
return {'jumlah_per_m':toRupiah(total_per_m), 'persentage':round(total_serapan,2)}
@staticmethod @staticmethod
def getPendampingPerKec(conn, kode_kec): def getPendampingPerKec(conn, kode_kec):
cursor = conn.cursor() cursor = conn.cursor()
@ -883,13 +920,13 @@ class apiController:
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, 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, 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, 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, wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
mpd.jenis_pendamping, mpd.jumlah mpd.jenis_pendamping, mpd.jumlah
from metric_pendamping_desa mpd from metric_pendamping_desa mpd
inner join wil_desa wkd on mpd.kelurahan_desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mpd.kode_desa
inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
inner join wil_kabupatenkota wkk on wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
inner join wil_provinsi wp on wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
WHERE wk.kode = %s WHERE wk.kode = %s
) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah)" DESC ) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah)" DESC
LIMIT 1000; LIMIT 1000;
@ -910,12 +947,12 @@ class apiController:
WHEN mkd.jumlah > 0 THEN 'Kopmer' WHEN mkd.jumlah > 0 THEN 'Kopmer'
ELSE 'Non Kopmer' ELSE 'Non Kopmer'
END AS status_koperasi, END AS status_koperasi,
COUNT(DISTINCT wkd.id) AS jumlah_desa COUNT(DISTINCT wk.id) AS jumlah_desa
FROM metric_koperasi_desa mkd FROM metric_koperasi_desa mkd
INNER JOIN wil_desa wkd ON mkd.kelurahan_desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mkd.kode_desa
INNER JOIN wil_kecamatan wk ON wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
INNER JOIN wil_kabupatenkota wkk ON wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
WHERE wk.kode = %s WHERE wk.kode = %s
GROUP BY status_koperasi GROUP BY status_koperasi
LIMIT 50000; LIMIT 50000;
@ -944,22 +981,21 @@ class apiController:
select wp.id provinsi_id, wp.kode kode_provinsi, select wp.id provinsi_id, wp.kode kode_provinsi,
wkk.id kabupaten_kota_id, wkk.kode kabupaten_kota_kode, wkk.nama kabupaten_kota_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, wk.id kecamatan_id, wk.kode kecamatan_kode, wk.nama kecamatan_nama,
wkd.id desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama, wk.id desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
mid.idm, mid.status, mid.tahun mid.idm, mid.status, mid.tahun
from metrik_indeks_desa mid from metrik_indeks_desa mid
inner join wil_desa wkd on mid.desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mid.kode_desa
inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
inner join wil_kabupatenkota wkk on wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
inner join wil_provinsi wp on wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1) AND where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1) AND
wp.kode = %s AND wp.id = %s AND
wkk.kode = %s AND wd.kode = %s
wk.kode = %s AND
wkd.kode = %s
) AS virtual_table ) AS virtual_table
GROUP BY tahun, status,kode_provinsi, kelurahan_desa_kode,kelurahan_desa_nama ORDER BY status, kelurahan_desa_kode DESC GROUP BY tahun, status,kode_provinsi, kelurahan_desa_kode,kelurahan_desa_nama ORDER BY status, kelurahan_desa_kode DESC
""" """
cur.execute(SQL, (kode_prov, kode_kabkota, kode_kecamatan, kode_desa,)) cur.execute(SQL, (kode_prov,kode_desa,))
print(cur._executed)
result = cur.fetchall() result = cur.fetchall()
return result return result
@ -972,19 +1008,21 @@ class apiController:
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, 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, 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, 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, wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
mb.jenis, mb.jumlah mb.tipe as jenis, mb.jumlah
from metric_bumdes mb from metrik_bumdes mb
inner join wil_desa wkd on mb.kelurahan_desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mb.kode_desa
inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
inner join wil_kabupatenkota wkk on wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
inner join wil_provinsi wp on wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
WHERE wkd.kode = %s WHERE wd.kode = %s
) AS virtual_table GROUP BY jenis ORDER BY "SUM(jumlah)" DESC ) AS virtual_table GROUP BY jenis ORDER BY "SUM(jumlah)" DESC
LIMIT 1000; LIMIT 1000;
""" """
try:
cur.execute(SQL,(kode_desa,)) cur.execute(SQL,(kode_desa,))
except Exception as e:
return []
result = cur.fetchall() result = cur.fetchall()
return result return result
@ -992,27 +1030,29 @@ class apiController:
def getTotalSerapanDesa(conn, kode_desa): def getTotalSerapanDesa(conn, kode_desa):
cur = conn.cursor() cur = conn.cursor()
SQL = """ SQL = """
SELECT SELECT
SUM(serapan) / 1000000000 AS serapan_per_1M,pagu, SUM(serapan) AS serapan_per_1M,
(SUM(serapan) / NULLIF(SUM(pagu), 0)) * 100 AS persentase_serapan (SUM(serapan) / NULLIF(SUM(pagu), 0)) * 100 AS persentase_serapan
FROM ( FROM (
SELECT SELECT
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, 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, 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, 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, wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
mdd.pagu, salur_pagu, mdd.persen_serapan, mdd.tahun_anggaran mdd.pagu, salur_pagu as serapan, mdd.tahun as tahun_anggaran
FROM metrik_dana_desa mdd FROM metrik_dana_desa mdd
INNER JOIN wil_desa wkd ON mdd.kelurahan_desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mdd.kode_desa
INNER JOIN wil_kecamatan wk ON wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
INNER JOIN wil_kabupatenkota wkk ON wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
WHERE wkd.kode = %s WHERE wd.kode = %s
) AS virtual_table ) AS virtual_table
WHERE tahun_anggaran = 2024
group by pagu;
""" """
cur.execute(SQL, (kode_desa,)) try:
cur.execute(SQL, (kode_desa,))
except Exception as e:
print(e)
return []
result = cur.fetchall() result = cur.fetchall()
return result return result
@ -1025,14 +1065,14 @@ class apiController:
# wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama, # 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, # 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, # 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, # wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
# mpd.jenis_pendamping, mpd.jumlah # mpd.jenis_pendamping, mpd.jumlah
# from metric_pendamping_desa mpd # from metric_pendamping_desa mpd
# inner join wil_desa wkd on mpd.kelurahan_desa_id = wkd.id # inner join wil_desa wkd on mpd.kelurahan_desa_id = wk.id
# inner join wil_kecamatan wk on wkd.kecamatan_id = wk.id # inner join wil_kecamatan wk on wk.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 wkd.kode = %s # WHERE wk.kode = %s
# ) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah)" DESC # ) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah)" DESC
# LIMIT 1000; # LIMIT 1000;
# """ # """
@ -1049,13 +1089,13 @@ class apiController:
WHEN mkd.jumlah > 0 THEN 'Kopmer' WHEN mkd.jumlah > 0 THEN 'Kopmer'
ELSE 'Non Kopmer' ELSE 'Non Kopmer'
END AS status_koperasi, END AS status_koperasi,
COUNT(DISTINCT wkd.id) AS jumlah_desa COUNT(DISTINCT wk.id) AS jumlah_desa
FROM metric_koperasi_desa mkd FROM metric_koperasi_desa mkd
INNER JOIN wil_desa wkd ON mkd.kelurahan_desa_id = wkd.id JOIN wil_desa wd on wd.kode_int = mkd.kode_desa
INNER JOIN wil_kecamatan wk ON wkd.kecamatan_id = wk.id JOIN wil_kecamatan wk on wk.id = wd.kecamatan_id
INNER JOIN wil_kabupatenkota wkk ON wk.kabupatenkota_id = wkk.id JOIN wil_kabupatenkota wkk on wkk.id = wk.kabupatenkota_id
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id JOIN wil_provinsi wp on wp.id = wkk.provinsi_id
WHERE wkd.kode = %s WHERE wk.kode = %s
GROUP BY status_koperasi GROUP BY status_koperasi
LIMIT 50000; LIMIT 50000;
""" """

View File

@ -31,7 +31,13 @@ def get_connection():
finally: finally:
if conn is not None and conn.is_connected(): if conn is not None and conn.is_connected():
conn.close() conn.close()
@main.route('/api/status/danadesa/<level>/<kode>')
def get_total_dana_by_level(level,kode):
with get_connection() as conn:
result = apiController.getTotalDana(conn,level,kode )
return jsonify(result)
#======================================================== #========================================================
# MAIN ROUTE # MAIN ROUTE
#======================================================== #========================================================
@ -243,7 +249,8 @@ def get_status_by_desa(kode_prov, kode_kabkota, kode_kecamatan, kode_desa):
@main.route('/api/desa/koperasi/<kode_desa>') @main.route('/api/desa/koperasi/<kode_desa>')
def get_koperasi_by_desa(kode_desa): def get_koperasi_by_desa(kode_desa):
data = apiController.getDesaDenganAtauTanpaKopmerDesa(conn, kode_desa) with get_connection() as conn:
data = apiController.getDesaDenganAtauTanpaKopmerDesa(conn, kode_desa)
return jsonify(data) return jsonify(data)
@main.route('/api/desa/pendamping/<kode_desa>') @main.route('/api/desa/pendamping/<kode_desa>')

View File

@ -284,33 +284,27 @@
let klasifikasiHTML = "<li>Tidak ada data</li>"; let klasifikasiHTML = "<li>Tidak ada data</li>";
if (Array.isArray(status?.[0])) { if (Array.isArray(status?.[0])) {
indexDesaHTML = status[0] provIndexDesaHTML = status[0]
.map(d => `${d[1]}: ${d[4]} / `) .map(d => `${d[1]}: ${d[4]} / `)
.join(""); .join("");
bumdesHTML = status[1] provBumdesHTML = status[1]
.map(dt => `${dt[0]}:${dt[1]} / `) .map(dt => `${dt[0]}:${dt[1]} / `)
.join(""); .join("");
danadesaHTML = `Dana :${status[2].jumlah_per_m}, Persentase : ${status[2].persentage}%`; const raw = Number(status[5]);
serapanHTML = status[3] provDanaTotalHTML = `Total : ${formatWithUnit(raw)}`;
.map(([jabatan, nilai]) => { provDanadesaHTML = `Total : ${status[2].jumlah_per_m}, Persentase : ${status[2].persentage}%`;
const alias = jabatan === 'Pendamping Lokal Desa' ? 'PLD' : provKoperasiHTML = status[4]
jabatan === 'Pendamping Desa' ? 'PD' :
jabatan;
return `${alias}: ${nilai}`;
}).join("");
koperasiHTML = status[4]
.map(dt => `${dt[0]}: ${dt[1]} / `) .map(dt => `${dt[0]}: ${dt[1]} / `)
.join(""); .join("");
} }
const popupContent = ` const popupContent = `
<strong>${feature.properties.nama}</strong><br/> <strong>${feature.properties.nama}</strong><br/>
<strong>Status Desa:</strong> <strong>Status Desa:</strong>
<li>IDM - ${indexDesaHTML}</li> <li>IDM - ${provIndexDesaHTML}</li>
<li>BUM - ${bumdesHTML}</li> <li>BUM - ${provBumdesHTML}</li>
<li>DD - ${danadesaHTML}</li> <li>DD - ${provDanaTotalHTML}</li>
<li>SERAPAN - ${serapanHTML} </li> <li>SERAPAN - ${provDanadesaHTML} </li>
<li>KOPERASI - ${koperasiHTML} </li> <li>KOPERASI - ${provKoperasiHTML} </li>
`; `;
layer.bindPopup(popupContent).openPopup(e.latlng); layer.bindPopup(popupContent).openPopup(e.latlng);
@ -322,15 +316,19 @@
let klasifikasiHTML = "<li>Tidak ada data</li>"; let klasifikasiHTML = "<li>Tidak ada data</li>";
if (Array.isArray(status?.[0])) { if (Array.isArray(status?.[0])) {
indexDesaHTML = status[0] kabindexDesaHTML= status[0]
.map(d => `${d[1]}: ${d[5]} / `) .map(d => `${d[1]}: ${d[5]} / `)
.join(""); .join("");
bumdesHTML = status[1] kabbumdesHTML = status[1]
.map(dt => `${dt[0]}:${dt[1]} / `) .map(dt => `${dt[0]}:${dt[1]} / `)
.join(""); .join("");
danadesaHTML = `Dana :${status[2].jumlah_per_m}, Persentase : ${status[2].persentage}%`;
serapanHTML = status[3] const raw = Number(status[5]);
kabdanaTotalHTML = `Total : ${formatWithUnit(raw)}`;
kabdanadesaHTML = `Dana :${status[2].jumlah_per_m}, Persentase : ${status[2].persentage}%`;
kabserapanHTML = status[3]
.map(([jabatan, nilai]) => { .map(([jabatan, nilai]) => {
const alias = jabatan === 'Pendamping Lokal Desa' ? 'PLD' : const alias = jabatan === 'Pendamping Lokal Desa' ? 'PLD' :
jabatan === 'Pendamping Desa' ? 'PD' : jabatan === 'Pendamping Desa' ? 'PD' :
@ -338,18 +336,18 @@
return `${alias}: ${nilai} /`; return `${alias}: ${nilai} /`;
}).join(""); }).join("");
koperasiHTML = status[4] kabkoperasiHTML = status[4]
.map(dt => `${dt[0]}: ${dt[1]} / `) .map(dt => `${dt[0]}: ${dt[1]} / `)
.join(""); .join("");
} }
const popupContent = ` const popupContent = `
<strong>${feature.properties.nama}</strong><br/> <strong>${feature.properties.nama}</strong><br/>
<strong>Status Desa (Kabupaten):</strong> <strong>Status Desa (Kabupaten):</strong>
<li>IDM - ${indexDesaHTML}</li> <li>IDM - ${kabindexDesaHTML}</li>
<li>BUM - ${bumdesHTML}</li> <li>BUM - ${kabbumdesHTML}</li>
<li>DD - ${danadesaHTML}</li> <li>DD - ${kabdanaTotalHTML}</li>
<li>SERAPAN - ${serapanHTML} </li> <li>SERAPAN - ${kabdanadesaHTML} </li>
<li>KOPERASI - ${koperasiHTML} </li> <li>KOPERASI - ${kabkoperasiHTML} </li>
`; `;
layer.bindPopup(popupContent).openPopup(e.latlng); layer.bindPopup(popupContent).openPopup(e.latlng);
@ -357,20 +355,25 @@
} else if (currentLevel === 'kecamatan'){ } else if (currentLevel === 'kecamatan'){
const province_code = localStorage.getItem('kode_provinsi') const province_code = localStorage.getItem('kode_provinsi')
const region_code = localStorage.getItem('kode_kabupatenkota') const region_code = localStorage.getItem('kode_kabupatenkota')
localStorage.setItem('kode_kecamatan',feature.properties.kode) localStorage.setItem('kode_kecamatan',feature.properties.id)
const status = await fetchStatusDesaByKecamatan(province_code, region_code, feature.properties.kode) const status = await fetchStatusDesaByKecamatan(province_code, region_code, feature.properties.kode)
let klasifikasiHTML = "<li>Tidak ada data</li>"; let klasifikasiHTML = "<li>Tidak ada data</li>";
if (Array.isArray(status?.[0])) { if (Array.isArray(status?.[0])) {
indexDesaHTML = status[0] kecindexDesaHTML = status[0]
.map(d => `${d[1]}: ${d[6]} / `) .map(d => `${d[1]}: ${d[6]} / `)
.join(""); .join("");
bumdesHTML = status[1] kecbumdesHTML = status[1]
.map(dt => `${dt[0]}:${dt[1]} / `) .map(dt => `${dt[0]}:${dt[1]} / `)
.join(""); .join("");
danadesaHTML = `Dana :${status[2].jumlah_per_m}, Persentase : ${status[2].persentage}%`;
serapanHTML = status[3] const raw = Number(status[5]);
kecdanaTotalHTML = `Total : ${formatWithUnit(raw)}`;
kecdanadesaHTML = `Total: ${formatWithUnit(status[2][0])} / Persen: ${Math.round(status[2][1])}`;
kecserapanHTML = status[3]
.map(([jabatan, nilai]) => { .map(([jabatan, nilai]) => {
const alias = jabatan === 'Pendamping Lokal Desa' ? 'PLD' : const alias = jabatan === 'Pendamping Lokal Desa' ? 'PLD' :
jabatan === 'Pendamping Desa' ? 'PD' : jabatan === 'Pendamping Desa' ? 'PD' :
@ -378,7 +381,7 @@
return `${alias}: ${nilai} /`; return `${alias}: ${nilai} /`;
}).join(""); }).join("");
koperasiHTML = status[4] keckoperasiHTML = status[4]
.map(dt => `${dt[0]}: ${dt[1]} / `) .map(dt => `${dt[0]}: ${dt[1]} / `)
.join(""); .join("");
} }
@ -387,12 +390,11 @@
` `
<strong> ${feature.properties.nama}</strong> <strong> ${feature.properties.nama}</strong>
<strong>Status Desa (Kecamatan):</strong> <strong>Status Desa (Kecamatan):</strong>
<strong>Status Desa:</strong> <li>IDM - ${kecindexDesaHTML}</li>
<li>IDM - ${indexDesaHTML}</li> <li>BUM - ${kecbumdesHTML}</li>
<li>BUM - ${bumdesHTML}</li> <li>DD - ${kecdanaTotalHTML}</li>
<li>DD - ${danadesaHTML}</li> <li>SERAPAN - ${kecdanadesaHTML} </li>
<li>SERAPAN - ${serapanHTML} </li> <li>KOPERASI - ${keckoperasiHTML} </li>
<li>KOPERASI - ${koperasiHTML} </li>
` `
layer.bindPopup(popupContent).openPopup(e.latlng); layer.bindPopup(popupContent).openPopup(e.latlng);
}else { }else {
@ -400,19 +402,24 @@
const province_code = localStorage.getItem('kode_provinsi') const province_code = localStorage.getItem('kode_provinsi')
const region_code = localStorage.getItem('kode_kabupatenkota') const region_code = localStorage.getItem('kode_kabupatenkota')
const district_code = localStorage.getItem('kode_kecamatan') const district_code = localStorage.getItem('kode_kecamatan')
console.log(province_code, region_code , district_code, feature.properties.kode)
const status = await fetchStatusDesaByDesa(province_code, region_code , district_code, feature.properties.kode); const status = await fetchStatusDesaByDesa(province_code, region_code , district_code, feature.properties.kode);
let klasifikasiHTML = "<li>Tidak ada data</li>"; let klasifikasiHTML = "<li>Tidak ada data</li>";
if (Array.isArray(status?.[0])) { if (Array.isArray(status?.[0])) {
indexDesaHTML = status[0] indexDesaHTML = status[0]
.map(d => `${d[1]}: ${d[5]} / `) .map(d => `${d[1]}`)
.join(""); .join("");
bumdesHTML = status[1] bumdesHTML = status[1]
.map(dt => `${dt[0]}:${dt[1]} / `) .map(dt => `${dt[0]}:${dt[1]} / `)
.join(""); .join("");
danadesaHTML = `Dana :${status[2].jumlah_per_m}, Persentase : ${status[2].persentage}%`;
const raw = Number(status[5]);
danaTotalHTML = `Total : ${formatWithUnit(raw)}`;
danadesaHTML = status[2].map(([serapan,persen]) => {
return `Nominal - ${formatWithUnit(serapan)} / Persen - ${Math.round(persen)}%`;
});
serapanHTML = status[3] serapanHTML = status[3]
.map(([jabatan, nilai]) => { .map(([jabatan, nilai]) => {
const alias = jabatan === 'Pendamping Lokal Desa' ? 'PLD' : const alias = jabatan === 'Pendamping Lokal Desa' ? 'PLD' :
@ -430,8 +437,8 @@
<strong>Status Desa (Desa):</strong> <strong>Status Desa (Desa):</strong>
<li>IDM - ${indexDesaHTML}</li> <li>IDM - ${indexDesaHTML}</li>
<li>BUM - ${bumdesHTML}</li> <li>BUM - ${bumdesHTML}</li>
<li>DD - ${danadesaHTML}</li> <li>DD - ${danaTotalHTML}</li>
<li>SERAPAN - ${serapanHTML} </li> <li>SERAPAN - ${danadesaHTML} </li>
<li>KOPERASI - ${koperasiHTML} </li> <li>KOPERASI - ${koperasiHTML} </li>
`; `;
@ -453,14 +460,35 @@
}); });
} }
function formatWithUnit(value) {
const abs = Math.abs(value);
let scaled, unit;
if (abs >= 1e12) { scaled = value / 1e12; unit = 'Triliun'; }
else if (abs >= 1e9) { scaled = value / 1e9; unit = 'Miliar'; }
else if (abs >= 1e6) { scaled = value / 1e6; unit = 'Juta'; }
else if (abs >= 1e3) { scaled = value / 1e3; unit = 'Ribu'; }
else { scaled = value; unit = ''; }
const formatted = scaled.toLocaleString('id-ID', {
minimumFractionDigits: unit ? 2 : 0,
maximumFractionDigits: unit ? 2 : 0
});
return unit
? `${formatted} ${unit}`
: formatted;
}
async function fetchStatusDesaByProvinsi(kodeProvinsi) { async function fetchStatusDesaByProvinsi(kodeProvinsi) {
const url = `http://localhost:5000/api/status-provinsi/${kodeProvinsi}`; const url = `http://localhost:5000/api/status-provinsi/${kodeProvinsi}`;
const urltdd = `http://localhost:5000/api/status/danadesa/provinsi/${kodeProvinsi}`;
const urldd = `http://localhost:5000/api/provinsi/serapan/${kodeProvinsi}`; const urldd = `http://localhost:5000/api/provinsi/serapan/${kodeProvinsi}`;
const urlpd = `http://localhost:5000//api/provinsi/pendamping/${kodeProvinsi}` const urlpd = `http://localhost:5000//api/provinsi/pendamping/${kodeProvinsi}`
const urlkop = `http://localhost:5000//api/provinsi/koperasi/${kodeProvinsi}` const urlkop = `http://localhost:5000//api/provinsi/koperasi/${kodeProvinsi}`
const urlbd = `http://localhost:5000/api/provinsi/bumdes/${kodeProvinsi}`; const urlbd = `http://localhost:5000/api/provinsi/bumdes/${kodeProvinsi}`;
try { try {
const res = await fetch(url); const res = await fetch(url);
const tdd = await fetch(urltdd)
const bumdes = await fetch(urlbd) const bumdes = await fetch(urlbd)
const dd = await fetch(urldd) const dd = await fetch(urldd)
const pd = await fetch(urlpd) const pd = await fetch(urlpd)
@ -468,12 +496,13 @@
if (!res.ok && !bumdes.ok && !dd.ok) throw new Error(`HTTP ${res.status}`); if (!res.ok && !bumdes.ok && !dd.ok) throw new Error(`HTTP ${res.status}`);
const IPD = await res.json() const IPD = await res.json()
const dtdd = await tdd.json()
const bd = await bumdes.json() const bd = await bumdes.json()
const danadesa = await dd.json() const danadesa = await dd.json()
const dtpd = await pd.json() const dtpd = await pd.json()
const dtkop = await kop.json() const dtkop = await kop.json()
console.log([IPD, bd, danadesa, dtpd, dtkop, dtdd]);
return [IPD,bd, danadesa, dtpd, dtkop]; return [IPD, bd, danadesa, dtpd, dtkop, dtdd];
} catch (err) { } catch (err) {
console.error("Gagal ambil status desa:", err); console.error("Gagal ambil status desa:", err);
return null; return null;
@ -482,12 +511,14 @@
async function fetchStatusDesaByKabupatenkota(kode_prov, kode_kabkota) { async function fetchStatusDesaByKabupatenkota(kode_prov, kode_kabkota) {
const url = `http://localhost:5000/api/status-kabupatenkota/${kode_prov}/${kode_kabkota}` const url = `http://localhost:5000/api/status-kabupatenkota/${kode_prov}/${kode_kabkota}`
const urltdd = `http://localhost:5000/api/status/danadesa/kabkota/${kode_kabkota}`;
const urldd = `http://localhost:5000/api/kabkota/serapan/${kode_kabkota}`; const urldd = `http://localhost:5000/api/kabkota/serapan/${kode_kabkota}`;
const urlpd = `http://localhost:5000//api/kabkota/pendamping/${kode_kabkota}` const urlpd = `http://localhost:5000//api/kabkota/pendamping/${kode_kabkota}`
const urlkop = `http://localhost:5000//api/kabkota/koperasi/${kode_kabkota}` const urlkop = `http://localhost:5000//api/kabkota/koperasi/${kode_kabkota}`
const urlbd = `http://localhost:5000/api/kabkota/bumdes/${kode_kabkota}`; const urlbd = `http://localhost:5000/api/kabkota/bumdes/${kode_kabkota}`;
try{ try{
const res = await fetch(url) const res = await fetch(url)
const tdd = await fetch(urltdd)
const bumdes = await fetch(urlbd) const bumdes = await fetch(urlbd)
const dd = await fetch(urldd) const dd = await fetch(urldd)
const pd = await fetch(urlpd) const pd = await fetch(urlpd)
@ -499,8 +530,9 @@
const danadesa = await dd.json() const danadesa = await dd.json()
const dtpd = await pd.json() const dtpd = await pd.json()
const dtkop = await kop.json() const dtkop = await kop.json()
const dttd = await tdd.json()
return [IPD,bd, danadesa, dtpd, dtkop]; return [IPD,bd, danadesa, dtpd, dtkop,dttd];
}catch(err){ }catch(err){
console.log(err) console.log(err)
return null; return null;
@ -509,12 +541,14 @@
async function fetchStatusDesaByKecamatan(province_code, region_code, district_code){ async function fetchStatusDesaByKecamatan(province_code, region_code, district_code){
const url = `http://localhost:5000/api/status-kecamatan/${province_code}/${region_code}/${district_code}` const url = `http://localhost:5000/api/status-kecamatan/${province_code}/${region_code}/${district_code}`
const urltdd = `http://localhost:5000/api/status/danadesa/kecamatan/${district_code}`;
const urldd = `http://localhost:5000/api/kecamatan/serapan/${district_code}`; const urldd = `http://localhost:5000/api/kecamatan/serapan/${district_code}`;
const urlpd = `http://localhost:5000//api/kecamatan/pendamping/${district_code}` const urlpd = `http://localhost:5000//api/kecamatan/pendamping/${district_code}`
const urlkop = `http://localhost:5000//api/kecamatan/koperasi/${district_code}` const urlkop = `http://localhost:5000//api/kecamatan/koperasi/${district_code}`
const urlbd = `http://localhost:5000/api/kecamatan/bumdes/${district_code}`; const urlbd = `http://localhost:5000/api/kecamatan/bumdes/${district_code}`;
try { try {
const res = await fetch(url) const res = await fetch(url)
const tdd = await fetch(urltdd)
const bumdes = await fetch(urlbd) const bumdes = await fetch(urlbd)
const dd = await fetch(urldd) const dd = await fetch(urldd)
const pd = await fetch(urlpd) const pd = await fetch(urlpd)
@ -526,8 +560,9 @@
const danadesa = await dd.json() const danadesa = await dd.json()
const dtpd = await pd.json() const dtpd = await pd.json()
const dtkop = await kop.json() const dtkop = await kop.json()
const dttd = await tdd.json()
return [IPD,bd, danadesa, dtpd, dtkop];; return [IPD,bd, danadesa, dtpd, dtkop, dttd];;
} catch (error) { } catch (error) {
console.log(error) console.log(error)
return null return null
@ -536,12 +571,14 @@
async function fetchStatusDesaByDesa(province_code, region_code, district_code, village_code){ async function fetchStatusDesaByDesa(province_code, region_code, district_code, village_code){
const url = `http://localhost:5000//api/desa/status/${province_code}/${region_code}/${district_code}/${village_code}` const url = `http://localhost:5000//api/desa/status/${province_code}/${region_code}/${district_code}/${village_code}`
const urltdd = `http://localhost:5000/api/status/danadesa/desa/${village_code}`;
const urldd = `http://localhost:5000/api/desa/serapan/${village_code}`; const urldd = `http://localhost:5000/api/desa/serapan/${village_code}`;
const urlpd = `http://localhost:5000//api/desa/pendamping/${village_code}` const urlpd = `http://localhost:5000//api/desa/pendamping/${village_code}`
const urlkop = `http://localhost:5000//api/desa/koperasi/${village_code}` const urlkop = `http://localhost:5000//api/desa/koperasi/${village_code}`
const urlbd = `http://localhost:5000/api/desa/bumdes/${village_code}`; const urlbd = `http://localhost:5000/api/desa/bumdes/${village_code}`;
try { try {
const res = await fetch(url) const res = await fetch(url)
const tdd = await fetch(urltdd)
const bumdes = await fetch(urlbd) const bumdes = await fetch(urlbd)
const dd = await fetch(urldd) const dd = await fetch(urldd)
const pd = await fetch(urlpd) const pd = await fetch(urlpd)
@ -553,8 +590,9 @@
const danadesa = await dd.json() const danadesa = await dd.json()
const dtpd = await pd.json() const dtpd = await pd.json()
const dtkop = await kop.json() const dtkop = await kop.json()
const dttd = await tdd.json()
return [IPD,bd, danadesa, dtpd, dtkop];; return [IPD,bd, danadesa, dtpd, dtkop, dttd];;
} catch (error) { } catch (error) {
console.log(error) console.log(error)
return null return null