1108 lines
49 KiB
Python
1108 lines
49 KiB
Python
import json
|
|
from app.utils import toRupiah
|
|
class apiController:
|
|
#====================================================================
|
|
# Kabupaten Kota
|
|
#===================================================================
|
|
@staticmethod
|
|
def provinsi(conn):
|
|
cur = conn.cursor()
|
|
SQL = "SELECT id, nama FROM wil_provinsi ORDER BY nama"
|
|
cur.execute(SQL)
|
|
result = cur.fetchall()
|
|
return result
|
|
|
|
@staticmethod
|
|
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, 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
|
|
|
|
@staticmethod
|
|
def getStatusKecamatan(conn,kode_prov, kode_kabkota, kode_kecamatan):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
SELECT
|
|
tahun as tahun,
|
|
status as th,
|
|
kode_provinsi,
|
|
kabupaten_kota_kode,
|
|
kecamatan_kode,
|
|
kecamatan_nama,
|
|
COUNT(distinct kelurahan_desa_id) as `COUNT_DISTINCT(kelurahan_desa_id)`
|
|
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,
|
|
wd.id as kelurahan_desa_id,
|
|
wp.kode as kelurahan_desa_kode,
|
|
wk.nama as kelurahan_desa_nama,
|
|
mid.status,
|
|
mid.tahun
|
|
FROM
|
|
metrik_indeks_desa mid
|
|
JOIN wil_desa wd on
|
|
wd.kode_int = mid.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
|
|
mid.tahun = (
|
|
select
|
|
MAX(tahun)
|
|
from
|
|
metrik_indeks_desa
|
|
limit 1 ) ) as virtual_table
|
|
WHERE provinsi_id = %s
|
|
AND kecamatan_kode = %s
|
|
GROUP BY tahun, status, kode_provinsi, kabupaten_kota_kode, kecamatan_kode, kecamatan_nama
|
|
ORDER BY kecamatan_kode DESC;
|
|
"""
|
|
try:
|
|
cur.execute(SQL, (kode_prov, kode_kecamatan))
|
|
print('status kecamtan :', cur._executed)
|
|
except Exception as e:
|
|
print(e)
|
|
return []
|
|
print(kode_prov, kode_kabkota, kode_kecamatan)
|
|
result = cur.fetchall()
|
|
return result
|
|
|
|
#Status Desa
|
|
#===========================================================
|
|
@staticmethod
|
|
def getTotalPersentaseSerapan(conn):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
WITH latest_year AS (
|
|
SELECT MAX(tahun) AS tahun_terbaru FROM metrik_dana_desa
|
|
)
|
|
SELECT
|
|
SUM(total_pagu) AS total_dana,
|
|
SUM(salur_pagu) as total_serapan
|
|
FROM metrik_dana_desa
|
|
"""
|
|
cur = conn.cursor()
|
|
cur.execute(SQL)
|
|
row = cur.fetchone()
|
|
if row:
|
|
total_dana, total_serapan = row
|
|
return {
|
|
'jumlah_per_m':toRupiah(total_dana),
|
|
'serapan_per_m':toRupiah(total_serapan),
|
|
'persentage':round((total_serapan / total_dana * 100) if total_dana else 0, 2)
|
|
}
|
|
|
|
return {
|
|
'jumlah_per_m': toRupiah(0),
|
|
'serapan_per_m': toRupiah(0),
|
|
'persentage': 0
|
|
}
|
|
|
|
#Status Wilayah
|
|
#===========================================
|
|
@staticmethod
|
|
# def getStatusProvinsi(conn,kode):
|
|
# cur = conn.cursor()
|
|
# SQL = """
|
|
# SELECT tahun AS tahun, status AS status,provinsi_kode,provinsi_nama,count(DISTINCT kelurahan_desa_id) AS "COUNT_DISTINCT(kelurahan_desa_id)"
|
|
# 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,
|
|
# wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
# mid.status, mid.status, mid.tahun
|
|
# from metrik_indeks_desa mid
|
|
# inner join wil_desa wkd on mid.desa_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_provinsi wp on wkk.provinsi_id = wp.id
|
|
# where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1)
|
|
# ) AS virtual_table
|
|
# WHERE provinsi_kode = %s
|
|
# GROUP BY tahun, status, provinsi_nama,provinsi_kode ORDER BY status, provinsi_nama DESC
|
|
# """;
|
|
# cur.execute(SQL, (kode,))
|
|
# result = cur.fetchall()
|
|
# return result
|
|
|
|
@staticmethod
|
|
def getStatusKabkota(conn,kode_prov, kode_kabkota):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
SELECT
|
|
tahun,
|
|
status,
|
|
kode_provinsi,
|
|
kabupaten_kota_kode,
|
|
kabupaten_kota_nama,
|
|
COUNT(DISTINCT kelurahan_desa_id) AS jumlah_desa
|
|
FROM (
|
|
SELECT
|
|
wp.kode AS kode_provinsi,
|
|
wkk.kode AS kabupaten_kota_kode,
|
|
wkk.nama AS kabupaten_kota_nama,
|
|
wk.id AS kelurahan_desa_id,
|
|
mid.status,
|
|
mid.tahun
|
|
FROM metrik_indeks_desa mid
|
|
JOIN wil_desa wd on wd.kode_int = mid.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 mid.tahun = (SELECT MAX(tahun) FROM metrik_indeks_desa)
|
|
AND wp.id = %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()
|
|
return result
|
|
@staticmethod
|
|
# def getStatusKecamatan(conn, kode_prov, kode_kabkota, kode_kecamatan):
|
|
# cur = conn.cursor()
|
|
# SQL = """
|
|
# SELECT
|
|
# tahun AS tahun,
|
|
# status AS status,
|
|
# kode_provinsi,
|
|
# kabupaten_kota_kode,
|
|
# kecamatan_kode,
|
|
# kecamatan_nama,
|
|
# count(DISTINCT kelurahan_desa_id) AS "COUNT_DISTINCT(kelurahan_desa_id)"
|
|
# FROM (
|
|
# select wp.id provinsi_id, wp.kode kode_provinsi,
|
|
# 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 kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
# mid.status, mid.status, mid.tahun
|
|
# from metrik_indeks_desa mid
|
|
# inner join wil_desa wkd on mid.desa_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_provinsi wp on wkk.provinsi_id = wp.id
|
|
# where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1)
|
|
# ) AS virtual_table
|
|
# WHERE kode_provinsi = %s
|
|
# AND kabupaten_kota_kode = %s
|
|
# AND kecamatan_kode = %s
|
|
# GROUP BY tahun, status,kode_provinsi, kabupaten_kota_kode,kecamatan_kode, kecamatan_nama ORDER BY status, kecamatan_kode DESC
|
|
# """
|
|
# cur.execute(SQL, (kode_prov, kode_kabkota, kode_kecamatan))
|
|
# print(kode_prov, kode_kabkota, kode_kecamatan)
|
|
# result = cur.fetchall()
|
|
# return result
|
|
|
|
#Status Bumdes
|
|
#===========================================
|
|
@staticmethod
|
|
def getBumdes(conn):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
SELECT jenis AS jenis, sum(jumlah) AS "SUM(jumlah)"
|
|
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,
|
|
wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
mb.jenis, mb.jumlah
|
|
from metrik_bumdes mb
|
|
JOIN wil_desa wd on wd.kode_int = mb.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
|
|
) AS virtual_table GROUP BY jenis ORDER BY "SUM(jumlah)" DESC
|
|
LIMIT 1000;
|
|
"""
|
|
|
|
cur.execute(SQL)
|
|
result = cur.fetchall()
|
|
return result
|
|
|
|
@staticmethod
|
|
def getPendamping(conn):
|
|
cursor = conn.cursor()
|
|
SQL = """
|
|
SELECT jenis_pendamping AS jenis_pendamping, sum(jumlah) AS "SUM(jumlah)"
|
|
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,
|
|
wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
mpd.jenis_pendamping, mpd.jumlah
|
|
from metric_pendamping_desa mpd
|
|
JOIN wil_desa wd on wd.kode_int = mpd.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
|
|
) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah)" DESC
|
|
LIMIT 1000;
|
|
"""
|
|
cursor.execute(SQL)
|
|
result = cursor.fetchall()
|
|
return result
|
|
@staticmethod
|
|
def getPendampingPerProv(conn, kode_prov):
|
|
cursor = conn.cursor()
|
|
SQL = """
|
|
SELECT jenis_pendamping AS jenis_pendamping, sum(jumlah) AS "SUM(jumlah)"
|
|
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,
|
|
wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
mpd.jenis_pendamping, mpd.jumlah
|
|
from metric_pendamping_desa mpd
|
|
JOIN wil_desa wd on wd.kode_int = mpd.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 wp.kode = %s
|
|
) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah)" DESC
|
|
LIMIT 1000;
|
|
"""
|
|
try:
|
|
cursor.execute(SQL, (kode_prov,))
|
|
except Exception as e:
|
|
return []
|
|
result = cursor.fetchall()
|
|
return result
|
|
|
|
@staticmethod
|
|
def getPendampingPerDesa(conn, kode_desa):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
SELECT jenis_pendamping AS jenis_pendamping, SUM(jumlah) / COUNT(DISTINCT kabupaten_kota_id) AS "SUM(jumlah) / COUNT(DISTINCT kabupaten_kota_id)"
|
|
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,
|
|
wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
mpd.jenis_pendamping, mpd.jumlah
|
|
from metric_pendamping_desa mpd
|
|
JOIN wil_desa wd on wd.kode_int = mpd.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 wk.kode = %s
|
|
) AS virtual_table
|
|
GROUP BY jenis_pendamping ORDER BY "SUM(jumlah) / COUNT(DISTINCT kabupaten_kota_id)" DESC
|
|
LIMIT 10000;
|
|
"""
|
|
try:
|
|
cur.execute(SQL)
|
|
except Exception as e:
|
|
print(e)
|
|
return []
|
|
result = cur.fetchall()
|
|
return result
|
|
|
|
@staticmethod
|
|
def getDesaDenganKopmer(conn):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
SELECT sum(jumlah) AS "SUM(jumlah)"
|
|
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,
|
|
wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
mkd.jumlah
|
|
from metric_koperasi_desa mkd
|
|
JOIN wil_desa wd on wd.kode_int = mkd.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
|
|
) AS virtual_table;
|
|
"""
|
|
cur.execute(SQL)
|
|
result = cur.fetchall()
|
|
return result
|
|
|
|
@staticmethod
|
|
def getDesaTanpaKopmer(connection):
|
|
cur = connection.cursor()
|
|
SQL = """
|
|
SELECT count(DISTINCT kelurahan_desa_id) AS "COUNT_DISTINCT(kelurahan_desa_id)"
|
|
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,
|
|
wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
mkd.jumlah
|
|
from metric_koperasi_desa mkd
|
|
JOIN wil_desa wd on wd.kode_int = mkd.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
|
|
) AS virtual_table
|
|
WHERE jumlah = 0
|
|
LIMIT 50000;
|
|
"""
|
|
cur.excute(SQL)
|
|
result = cur.fetchall()
|
|
return result
|
|
|
|
#======================================================
|
|
#MAP DATA
|
|
#=========================================================
|
|
def fetch_geojson(conn,level, parent_code=None):
|
|
# cur = conn.cursor()
|
|
# cur.execute(f"SELECT id, kode, nama, lat, lng, path, iso FROM {table_name} WHERE id = 1 LIMIT 1")
|
|
cur = conn.cursor()
|
|
if level == 'provinsi':
|
|
cur.execute("""
|
|
SELECT id, kode, nama, null as lat, null as lng, koordinat as path FROM wil_provinsi """)
|
|
elif level == 'kabupaten':
|
|
cur.execute("SELECT id, kode, nama, null as lat, null as lng, koordinat as path FROM wil_kabupatenkota WHERE provinsi_id = %s", (parent_code,))
|
|
elif level == 'kecamatan':
|
|
cur.execute("SELECT id, kode, nama, null as lat, null as lng, koordinat as path FROM wil_kecamatan WHERE kabupaten_kota_id = %s", (parent_code,))
|
|
elif level == 'desa':
|
|
# cur.execute("SELECT id, kode, nama, null as lat, null as lng,path FROM wil_desa WHERE kecamatan_id = %s", (parent_code,))
|
|
cur.execute(("""
|
|
SELECT id, kode, nama, null as lat, null as lng,
|
|
CONCAT(
|
|
REPEAT('[', 4 - (LENGTH(path) - LENGTH(REPLACE(path, '[', '')))),
|
|
path,
|
|
REPEAT(']', 4 - (LENGTH(path) - LENGTH(REPLACE(path, ']', ''))))
|
|
) AS path
|
|
FROM wil_desa WHERE kecamatan_id = %s""", (parent_code,)))
|
|
else:
|
|
return {"type": "FeatureCollection", "features": []}
|
|
features = []
|
|
|
|
for row in cur.fetchall():
|
|
path = row[5]
|
|
# path = swap_latlon(path)
|
|
# if not path:
|
|
# continue
|
|
# geometry = {
|
|
# "type": "Polygon",
|
|
# "coordinates": json.loads(path)
|
|
# }
|
|
|
|
#Multi poligons
|
|
try:
|
|
parsed_path = json.loads(path)
|
|
corrected_path = swap_latlon(parsed_path)
|
|
except Exception as e:
|
|
print(f"Error parsing path for row {row[0]}: {e}")
|
|
continue
|
|
|
|
if not corrected_path:
|
|
continue
|
|
|
|
geometry = {
|
|
"type": "MultiPolygon", # karena bentuk datamu seperti itu
|
|
"coordinates": corrected_path
|
|
}
|
|
|
|
feature = {
|
|
"type": "Feature",
|
|
"geometry": geometry,
|
|
"properties": {
|
|
"id": row[0],
|
|
"kode": row[1],
|
|
"nama": row[2],
|
|
"lat": row[3],
|
|
"lng": row[4]
|
|
}
|
|
}
|
|
features.append(feature)
|
|
|
|
return {
|
|
"type": "FeatureCollection",
|
|
"features": features
|
|
}
|
|
|
|
#Status Wilayah
|
|
#===========================================
|
|
# @staticmethod
|
|
# def getStatusProvinsi(conn,kode):
|
|
# cur = conn.cursor()
|
|
# SQL = """
|
|
# SELECT tahun AS tahun, status AS status,provinsi_kode,provinsi_nama,count(DISTINCT kelurahan_desa_id) AS "COUNT_DISTINCT(kelurahan_desa_id)"
|
|
# 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,
|
|
# wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
# mid.status, mid.status, mid.tahun
|
|
# from metrik_indeks_desa mid
|
|
# inner join wil_desa wkd on mid.desa_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_provinsi wp on wkk.provinsi_id = wp.id
|
|
# where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1)
|
|
# ) AS virtual_table
|
|
# WHERE provinsi_kode = %s
|
|
# GROUP BY tahun, status, provinsi_nama,provinsi_kode ORDER BY status, provinsi_nama DESC
|
|
# """;
|
|
# cur.execute(SQL, (kode,))
|
|
# result = cur.fetchall()
|
|
# return result
|
|
|
|
# @staticmethod
|
|
# def getStatusKabkota(conn, kode_prov, kode_kabkota):
|
|
# cur = conn.cursor()
|
|
# SQL = """
|
|
# SELECT tahun AS tahun, status AS status,kode_provinsi,kabupaten_kota_kode,kabupaten_kota_nama,count(DISTINCT kelurahan_desa_id) AS "COUNT_DISTINCT(kelurahan_desa_id)"
|
|
# FROM (
|
|
# select wp.id provinsi_id, wp.kode kode_provinsi,
|
|
# 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 kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
# mid.status, mid.status, mid.tahun
|
|
# from metrik_indeks_desa mid
|
|
# inner join wil_desa wkd on mid.desa_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_provinsi wp on wkk.provinsi_id = wp.id
|
|
# where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1)
|
|
# ) AS virtual_table
|
|
# WHERE kode_provinsi = %s
|
|
# AND virtual_table.kabupaten_kota_kode = %s
|
|
# 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))
|
|
# result = cur.fetchall()
|
|
# return result
|
|
|
|
@staticmethod
|
|
# def getStatusKecamatan(conn, kode_prov, kode_kabkota, kode_kecamatan):
|
|
# cur = conn.cursor()
|
|
# SQL = """
|
|
# SELECT
|
|
# tahun AS tahun,
|
|
# status AS status,
|
|
# kode_provinsi,
|
|
# kabupaten_kota_kode,
|
|
# kecamatan_kode,
|
|
# kecamatan_nama,
|
|
# count(DISTINCT kelurahan_desa_id) AS "COUNT_DISTINCT(kelurahan_desa_id)"
|
|
# FROM (
|
|
# select wp.id provinsi_id, wp.kode kode_provinsi,
|
|
# 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 kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
# mid.status, mid.status, mid.tahun
|
|
# from metrik_indeks_desa mid
|
|
# inner join wil_desa wkd on mid.desa_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_provinsi wp on wkk.provinsi_id = wp.id
|
|
# where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1)
|
|
# ) AS virtual_table
|
|
# WHERE kode_provinsi = %s
|
|
# AND kabupaten_kota_kode = %s
|
|
# AND kecamatan_kode = %s
|
|
# GROUP BY tahun, status,kode_provinsi, kabupaten_kota_kode,kecamatan_kode, kecamatan_nama ORDER BY status, kecamatan_kode DESC
|
|
# """
|
|
# cur.execute(SQL, (kode_prov, kode_kabkota, kode_kecamatan))
|
|
# print(kode_prov, kode_kabkota, kode_kecamatan)
|
|
# result = cur.fetchall()
|
|
# return result
|
|
|
|
@staticmethod
|
|
def getBumdesProv(conn, kode_prov):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
SELECT tipe AS jenis, sum(jumlah) AS "SUM(jumlah)"
|
|
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,
|
|
wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
mb.tipe, mb.jumlah
|
|
from metrik_bumdes mb
|
|
JOIN wil_desa wd on wd.kode_int = mb.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 wp.kode = %s
|
|
) AS virtual_table GROUP BY tipe ORDER BY "SUM(jumlah)" DESC
|
|
LIMIT 1000;
|
|
"""
|
|
|
|
cur.execute(SQL,(kode_prov,))
|
|
result = cur.fetchall()
|
|
return result
|
|
|
|
|
|
#Status Wilayah
|
|
#===========================================
|
|
@staticmethod
|
|
def getStatusProvinsi(conn,kode):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
SELECT tahun AS tahun, status AS status,provinsi_kode,provinsi_nama,count(DISTINCT kelurahan_desa_id) AS "COUNT_DISTINCT(kelurahan_desa_id)"
|
|
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,
|
|
wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
mid.idm, mid.status, mid.tahun
|
|
from metrik_indeks_desa mid
|
|
JOIN wil_desa wd on wd.kode_int = mid.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 mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1)
|
|
) AS virtual_table
|
|
WHERE provinsi_kode = %s
|
|
GROUP BY tahun, status, provinsi_nama,provinsi_kode ORDER BY status, provinsi_nama DESC
|
|
""";
|
|
cur.execute(SQL, (kode,))
|
|
result = cur.fetchall()
|
|
return result
|
|
|
|
# @staticmethod
|
|
# def getStatusKabkota(conn, kode_prov, kode_kabkota):
|
|
# cur = conn.cursor()
|
|
# SQL = """
|
|
# SELECT tahun AS tahun, status AS status,kode_provinsi,kabupaten_kota_kode,kabupaten_kota_nama,count(DISTINCT kelurahan_desa_id) AS "COUNT_DISTINCT(kelurahan_desa_id)"
|
|
# FROM (
|
|
# select wp.id provinsi_id, wp.kode kode_provinsi,
|
|
# 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 kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
# mid.status, mid.status, mid.tahun
|
|
# from metrik_indeks_desa mid
|
|
# inner join wil_desa wkd on mid.desa_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_provinsi wp on wkk.provinsi_id = wp.id
|
|
# where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1)
|
|
# ) AS virtual_table
|
|
# WHERE kode_provinsi = %s
|
|
# AND virtual_table.kabupaten_kota_kode = %s
|
|
# 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))
|
|
# result = cur.fetchall()
|
|
# return result
|
|
|
|
# @staticmethod
|
|
# def getDesaDenganAtauTanpaKopmer(conn, kode_prov):
|
|
# cur = conn.cursor()
|
|
# SQL = """
|
|
# SELECT
|
|
# CASE
|
|
# WHEN mkd.jumlah > 0 THEN 'Kopmer'
|
|
# ELSE 'Non Kopmer'
|
|
# END AS status_koperasi,
|
|
# COUNT(DISTINCT wk.id) AS jumlah_desa
|
|
# FROM metric_koperasi_desa mkd
|
|
# INNER JOIN wil_desa wkd ON mkd.kelurahan_desa_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_provinsi wp ON wkk.provinsi_id = wp.id
|
|
# WHERE wp.kode = %s
|
|
# GROUP BY status_koperasi
|
|
# LIMIT 50000;
|
|
# """
|
|
# try:
|
|
# cur.execute(SQL, (kode_prov,))
|
|
# except Exception as e:
|
|
# return []
|
|
# result = cur.fetchall()
|
|
# return result
|
|
|
|
@staticmethod
|
|
def getTotalSerapanProv(conn, kode_prov):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
WITH latest_year AS (
|
|
SELECT MAX(tahun) AS tahun FROM metrik_dana_desa
|
|
)
|
|
SELECT
|
|
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
|
|
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 wp.kode = %s
|
|
"""
|
|
cur.execute(SQL, (kode_prov,))
|
|
total_serapan = 0
|
|
for row in cur.fetchall():
|
|
total_serapan += row[1]
|
|
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
|
|
# def getStatusKecamatan(conn, kode_prov, kode_kabkota, kode_kecamatan):
|
|
# cur = conn.cursor()
|
|
# SQL = """
|
|
# SELECT
|
|
# tahun AS tahun,
|
|
# status AS status,
|
|
# kode_provinsi,
|
|
# kabupaten_kota_kode,
|
|
# kecamatan_kode,
|
|
# kecamatan_nama,
|
|
# count(DISTINCT kelurahan_desa_id) AS "COUNT_DISTINCT(kelurahan_desa_id)"
|
|
# FROM (
|
|
# select wp.id provinsi_id, wp.kode kode_provinsi,
|
|
# 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 kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
# mid.status, mid.status, mid.tahun
|
|
# from metrik_indeks_desa mid
|
|
# inner join wil_desa wkd on mid.desa_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_provinsi wp on wkk.provinsi_id = wp.id
|
|
# where mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1)
|
|
# ) AS virtual_table
|
|
# WHERE kode_provinsi = %s
|
|
# AND kabupaten_kota_kode = %s
|
|
# AND kecamatan_kode = %s
|
|
# GROUP BY tahun, status,kode_provinsi, kabupaten_kota_kode,kecamatan_kode, kecamatan_nama ORDER BY status, kecamatan_kode DESC
|
|
# """
|
|
# cur.execute(SQL, (kode_prov, kode_kabkota, kode_kecamatan))
|
|
# print(kode_prov, kode_kabkota, kode_kecamatan)
|
|
# result = cur.fetchall()
|
|
# return result
|
|
|
|
#====================================================================
|
|
# Kabupaten Kota
|
|
#===================================================================
|
|
|
|
@staticmethod
|
|
def getBumdesKab(conn, kode_kab):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
SELECT jenis, sum(jumlah) AS "SUM(jumlah)"
|
|
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,
|
|
wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
mb.tipe as jenis, mb.jumlah
|
|
FROM metrik_bumdes mb
|
|
JOIN wil_desa wd on wd.kode_int = mb.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 wkk.kode = %s
|
|
) AS virtual_table GROUP BY jenis ORDER BY "SUM(jumlah)";
|
|
"""
|
|
# try:
|
|
cur.execute(SQL, (kode_kab,))
|
|
# except Exception as e:
|
|
# return []
|
|
|
|
result = cur.fetchall()
|
|
return result
|
|
|
|
@staticmethod
|
|
def getTotalSerapanKab(conn, kode_kab):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
WITH latest_year AS (
|
|
SELECT MAX(tahun) AS tahun FROM metrik_dana_desa
|
|
)
|
|
SELECT
|
|
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
|
|
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
|
|
wkk.kode = %s
|
|
"""
|
|
try:
|
|
cur.execute(SQL, (kode_kab,))
|
|
except Exception as e:
|
|
return []
|
|
total_serapan = 0
|
|
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
|
|
def getPendampingPerKab(conn, kode_kab):
|
|
cursor = conn.cursor()
|
|
SQL = """
|
|
SELECT jenis_pendamping AS jenis_pendamping, sum(jumlah) AS "SUM(jumlah)"
|
|
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,
|
|
wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
mpd.jenis_pendamping, mpd.jumlah
|
|
from metric_pendamping_desa mpd
|
|
JOIN wil_desa wd on wd.kode_int = mpd.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 wkk.kode = %s
|
|
) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah)" DESC
|
|
LIMIT 1000;
|
|
"""
|
|
try:
|
|
cursor.execute(SQL, (kode_kab,))
|
|
except Exception as e:
|
|
return []
|
|
result = cursor.fetchall()
|
|
return result
|
|
|
|
@staticmethod
|
|
def getDesaDenganAtauTanpaKopmerKab(conn, kode_kab):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
SELECT
|
|
CASE
|
|
WHEN mkd.jumlah > 0 THEN 'Kopmer'
|
|
ELSE 'Non Kopmer'
|
|
END AS status_koperasi,
|
|
COUNT(DISTINCT wk.id) AS jumlah_desa
|
|
FROM metric_koperasi_desa mkd
|
|
JOIN wil_desa wd on wd.kode_int = mkd.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 wkk.kode = %s
|
|
GROUP BY status_koperasi
|
|
LIMIT 50000;
|
|
"""
|
|
try:
|
|
cur.execute(SQL, (kode_kab,))
|
|
except Exception as e:
|
|
return []
|
|
result = cur.fetchall()
|
|
return result
|
|
|
|
#====================================================================
|
|
# Kecamatan
|
|
#===================================================================
|
|
|
|
@staticmethod
|
|
def getBumdesKec(conn, kode_kec):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
SELECT jenis, sum(jumlah) AS "SUM(jumlah)"
|
|
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,
|
|
wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
mb.tipe as jenis, mb.jumlah
|
|
FROM metrik_bumdes mb
|
|
JOIN wil_desa wd on wd.kode_int = mb.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 wk.kode = %s
|
|
) AS virtual_table GROUP BY jenis ORDER BY "SUM(jumlah)";
|
|
"""
|
|
try:
|
|
cur.execute(SQL,(kode_kec,))
|
|
except Exception as e:
|
|
return []
|
|
result = cur.fetchall()
|
|
return result
|
|
|
|
@staticmethod
|
|
def getTotalSerapanKec(conn, kode_kec):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
select
|
|
SUM(mdd.salur_pagu) serapan_per_milyar,
|
|
(SUM(mdd.salur_pagu) / NULLIF(SUM(mdd.pagu), 0)) * 100 AS persentase_serapan
|
|
from metrik_dana_desa mdd
|
|
join wil_desa as wd on wd.kode_int = mdd.kode_desa
|
|
JOIN wil_kecamatan AS wk ON wk.id = wd.kecamatan_id
|
|
JOIN wil_kabupatenkota AS wkk ON wkk.id = wk.kabupatenkota_id
|
|
JOIN wil_provinsi AS wp ON wp.id = wkk.provinsi_id
|
|
where wk.kode = %s
|
|
"""
|
|
try:
|
|
cur.execute(SQL, (kode_kec,))
|
|
except Exception as e:
|
|
return []
|
|
result = cur.fetchone()
|
|
return result
|
|
@staticmethod
|
|
def getPendampingPerKec(conn, kode_kec):
|
|
cursor = conn.cursor()
|
|
SQL = """
|
|
SELECT jenis_pendamping AS jenis_pendamping, sum(jumlah) AS "SUM(jumlah)"
|
|
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,
|
|
wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
mpd.jenis_pendamping, mpd.jumlah
|
|
from metric_pendamping_desa mpd
|
|
JOIN wil_desa wd on wd.kode_int = mpd.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 wk.kode = %s
|
|
) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah)" DESC
|
|
LIMIT 1000;
|
|
"""
|
|
try:
|
|
cursor.execute(SQL, (kode_kec,))
|
|
except Exception as e:
|
|
return []
|
|
result = cursor.fetchall()
|
|
return result
|
|
|
|
@staticmethod
|
|
def getDesaDenganAtauTanpaKopmerKec(conn, kode_kec):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
SELECT
|
|
CASE
|
|
WHEN mkd.jumlah > 0 THEN 'Kopmer'
|
|
ELSE 'Non Kopmer'
|
|
END AS status_koperasi,
|
|
COUNT(DISTINCT wk.id) AS jumlah_desa
|
|
FROM metric_koperasi_desa mkd
|
|
JOIN wil_desa wd on wd.kode_int = mkd.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 wk.kode = %s
|
|
GROUP BY status_koperasi
|
|
LIMIT 50000;
|
|
"""
|
|
# cur.execute(SQL, (kode_kec,))
|
|
try:
|
|
cur.execute(SQL, (kode_kec,))
|
|
except Exception as e:
|
|
return []
|
|
result = cur.fetchall()
|
|
return result
|
|
|
|
#====================================================================
|
|
# Desa
|
|
#===================================================================
|
|
|
|
def getStatusDesaByDesa(conn,kode_prov, kode_kabkota, kode_kecamatan, kode_desa):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
SELECT tahun AS tahun,
|
|
status AS status,
|
|
kelurahan_desa_kode,
|
|
kelurahan_desa_nama,
|
|
count(DISTINCT desa_id) AS "COUNT_DISTINCT(desa_id)"
|
|
FROM (
|
|
select wp.id provinsi_id, wp.kode kode_provinsi,
|
|
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 desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
mid.idm, mid.status, mid.tahun
|
|
from metrik_indeks_desa mid
|
|
JOIN wil_desa wd on wd.kode_int = mid.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 mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1) AND
|
|
wp.id = %s AND
|
|
wd.kode = %s
|
|
) AS virtual_table
|
|
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_desa,))
|
|
print(cur._executed)
|
|
result = cur.fetchall()
|
|
return result
|
|
|
|
@staticmethod
|
|
def getBumdesDesa(conn, kode_desa):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
SELECT jenis AS jenis, sum(jumlah) AS "SUM(jumlah)"
|
|
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,
|
|
wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
mb.tipe as jenis, mb.jumlah
|
|
from metrik_bumdes mb
|
|
JOIN wil_desa wd on wd.kode_int = mb.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 wd.kode = %s
|
|
) AS virtual_table GROUP BY jenis ORDER BY "SUM(jumlah)" DESC
|
|
LIMIT 1000;
|
|
"""
|
|
try:
|
|
cur.execute(SQL,(kode_desa,))
|
|
except Exception as e:
|
|
return []
|
|
result = cur.fetchall()
|
|
return result
|
|
|
|
@staticmethod
|
|
def getTotalSerapanDesa(conn, kode_desa):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
SELECT
|
|
SUM(serapan) 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,
|
|
wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
mdd.pagu, salur_pagu as serapan, mdd.tahun as tahun_anggaran
|
|
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 wd.kode = %s
|
|
) AS virtual_table
|
|
"""
|
|
try:
|
|
cur.execute(SQL, (kode_desa,))
|
|
except Exception as e:
|
|
print(e)
|
|
return []
|
|
result = cur.fetchall()
|
|
return result
|
|
|
|
@staticmethod
|
|
# def getPendampingPerDesa(conn, kode_desa):
|
|
# cursor = conn.cursor()
|
|
# SQL = """
|
|
# SELECT jenis_pendamping AS jenis_pendamping, sum(jumlah) AS "SUM(jumlah)"
|
|
# 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,
|
|
# wk.id kelurahan_desa_id, wk.kode kelurahan_desa_kode, wk.nama kelurahan_desa_nama,
|
|
# mpd.jenis_pendamping, mpd.jumlah
|
|
# from metric_pendamping_desa mpd
|
|
# inner join wil_desa wkd on mpd.kelurahan_desa_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_provinsi wp on wkk.provinsi_id = wp.id
|
|
# WHERE wk.kode = %s
|
|
# ) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah)" DESC
|
|
# LIMIT 1000;
|
|
# """
|
|
# cursor.execute(SQL, (kode_desa,))
|
|
# result = cursor.fetchall()
|
|
# return result
|
|
|
|
@staticmethod
|
|
def getDesaDenganAtauTanpaKopmerDesa(conn, kode_desa):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
SELECT
|
|
CASE
|
|
WHEN mkd.jumlah > 0 THEN 'Kopmer'
|
|
ELSE 'Non Kopmer'
|
|
END AS status_koperasi,
|
|
COUNT(DISTINCT wk.id) AS jumlah_desa
|
|
FROM metric_koperasi_desa mkd
|
|
JOIN wil_desa wd on wd.kode_int = mkd.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 wk.kode = %s
|
|
GROUP BY status_koperasi
|
|
LIMIT 50000;
|
|
"""
|
|
# cur.execute(SQL, (kode_desa,))
|
|
try:
|
|
cur.execute(SQL, (kode_desa,))
|
|
except Exception as e:
|
|
return []
|
|
result = cur.fetchall()
|
|
return result |