1057 lines
48 KiB
Python
1057 lines
48 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,
|
|
wkd.id AS kelurahan_desa_id,
|
|
wkd.kode AS kelurahan_desa_kode,
|
|
wkd.nama AS kelurahan_desa_nama,
|
|
mid.status,
|
|
mid.tahun
|
|
FROM metrik_indeks_desa mid
|
|
INNER JOIN wil_desa wkd ON mid.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 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 kecamatan_kode DESC;
|
|
|
|
"""
|
|
try:
|
|
cur.execute(SQL, (kode_prov, kode_kabkota, kode_kecamatan))
|
|
except Exception as 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,
|
|
# wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
# mid.status, mid.status, mid.tahun
|
|
# from metrik_indeks_desa mid
|
|
# inner join wil_desa wkd on mid.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 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,
|
|
wkd.id AS kelurahan_desa_id,
|
|
mid.status,
|
|
mid.tahun
|
|
FROM metrik_indeks_desa mid
|
|
INNER JOIN wil_desa wkd ON mid.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 mid.tahun = (SELECT MAX(tahun) FROM metrik_indeks_desa)
|
|
AND wp.kode = %s
|
|
AND wkk.kode = %s
|
|
) AS filtered_data
|
|
GROUP BY tahun, status, kode_provinsi, kabupaten_kota_kode, kabupaten_kota_nama;
|
|
"""
|
|
cur.execute(SQL, (kode_prov, kode_kabkota))
|
|
result = cur.fetchall()
|
|
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,
|
|
# wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
# mid.status, mid.status, mid.tahun
|
|
# from metrik_indeks_desa mid
|
|
# inner join wil_desa wkd on mid.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 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,
|
|
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
mb.jenis, mb.jumlah
|
|
from metric_bumdes mb
|
|
inner join wil_desa wkd on mb.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
|
|
) 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,
|
|
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
mpd.jenis_pendamping, mpd.jumlah
|
|
from metric_pendamping_desa mpd
|
|
inner join wil_desa wkd on mpd.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
|
|
) 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,
|
|
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
mpd.jenis_pendamping, mpd.jumlah
|
|
from metric_pendamping_desa mpd
|
|
INNER JOIN wil_desa wkd ON mdd.desa_id = wkd.id
|
|
INNER JOIN wil_kecamatan wk ON wkd.kecamatan_id = wk.id
|
|
INNER JOIN wil_kabupatenkota wkk ON wk.kabupatenkota_id = wkk.id
|
|
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id
|
|
WHERE 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):
|
|
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,
|
|
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
mpd.jenis_pendamping, mpd.jumlah
|
|
from metric_pendamping_desa mpd
|
|
inner join wil_desa wkd on mpd.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
|
|
) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah) / COUNT(DISTINCT kabupaten_kota_id)" DESC
|
|
LIMIT 10000;
|
|
"""
|
|
cur.execute(SQL)
|
|
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,
|
|
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
mkd.jumlah
|
|
from metric_koperasi_desa mkd
|
|
inner join wil_desa wkd on mkd.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
|
|
) 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,
|
|
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
mkd.jumlah
|
|
from metric_koperasi_desa mkd
|
|
inner join wil_desa wkd on mkd.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
|
|
) AS virtual_table
|
|
WHERE jumlah = 0
|
|
LIMIT 50000;
|
|
"""
|
|
cur.excute(SQL)
|
|
result = cur.fetchall()
|
|
return result
|
|
|
|
#======================================================
|
|
#MAP DATA
|
|
#=========================================================
|
|
def fetch_geojson(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, koordinat 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,
|
|
# wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
# mid.status, mid.status, mid.tahun
|
|
# from metrik_indeks_desa mid
|
|
# inner join wil_desa wkd on mid.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 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,
|
|
# wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
# mid.status, mid.status, mid.tahun
|
|
# from metrik_indeks_desa mid
|
|
# inner join wil_desa wkd on mid.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 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,
|
|
# wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
# mid.status, mid.status, mid.tahun
|
|
# from metrik_indeks_desa mid
|
|
# inner join wil_desa wkd on mid.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 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,
|
|
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
mb.tipe, mb.jumlah
|
|
from metrik_bumdes mb
|
|
inner join wil_desa wkd on mb.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 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,
|
|
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
mid.idm, mid.status, mid.tahun
|
|
from metrik_indeks_desa mid
|
|
inner join wil_desa wkd on mid.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 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,
|
|
# wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
# mid.status, mid.status, mid.tahun
|
|
# from metrik_indeks_desa mid
|
|
# inner join wil_desa wkd on mid.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 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 wkd.id) AS jumlah_desa
|
|
# FROM metric_koperasi_desa mkd
|
|
# INNER JOIN wil_desa wkd ON mkd.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 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
|
|
INNER JOIN wil_desa wkd ON mdd.desa_id = wkd.id
|
|
INNER JOIN wil_kecamatan wk ON wkd.kecamatan_id = wk.id
|
|
INNER JOIN wil_kabupatenkota wkk ON wk.kabupatenkota_id = wkk.id
|
|
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id
|
|
WHERE 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 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,
|
|
# wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
# mid.status, mid.status, mid.tahun
|
|
# from metrik_indeks_desa mid
|
|
# inner join wil_desa wkd on mid.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 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 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,
|
|
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
mb.jenis, mb.jumlah
|
|
from metric_bumdes mb
|
|
inner join wil_desa wkd on mb.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 wkk.kode = %s
|
|
) AS virtual_table GROUP BY jenis ORDER BY "SUM(jumlah)" DESC
|
|
LIMIT 1000;
|
|
"""
|
|
try:
|
|
cur.execute(SQL, (kode_prov,))
|
|
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
|
|
INNER JOIN wil_desa wkd ON mdd.desa_id = wkd.id
|
|
INNER JOIN wil_kecamatan wk ON wkd.kecamatan_id = wk.id
|
|
INNER JOIN wil_kabupatenkota wkk ON wk.kabupatenkota_id = wkk.id
|
|
INNER JOIN wil_provinsi wp ON wkk.provinsi_id = wp.id
|
|
WHERE 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,
|
|
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
mpd.jenis_pendamping, mpd.jumlah
|
|
from metric_pendamping_desa mpd
|
|
inner join wil_desa wkd on mpd.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 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 wkd.id) AS jumlah_desa
|
|
FROM metric_koperasi_desa mkd
|
|
INNER JOIN wil_desa wkd ON mkd.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 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 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,
|
|
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
mb.jenis, mb.jumlah
|
|
from metric_bumdes mb
|
|
inner join wil_desa wkd on mb.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 GROUP BY jenis ORDER BY "SUM(jumlah)" DESC
|
|
LIMIT 1000;
|
|
"""
|
|
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(serapan) / 1000000000 AS serapan_per_1M,
|
|
(SUM(serapan) / NULLIF(SUM(pagu), 0)) * 100 AS persentase_serapan
|
|
FROM (
|
|
SELECT
|
|
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama,
|
|
wkk.id kabupaten_kota_id, wkk.kode kabupaten_kota_kode, wkk.nama kabupaten_kota_nama,
|
|
wk.id kecamatan_id, wk.kode kecamatan_kode, wk.nama kecamatan_nama,
|
|
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
mdd.pagu, salur_pagu, mdd.persen_serapan, mdd.tahun_anggaran
|
|
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:
|
|
cur.execute(SQL, (kode_kec,))
|
|
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 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,
|
|
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
mpd.jenis_pendamping, mpd.jumlah
|
|
from metric_pendamping_desa mpd
|
|
inner join wil_desa wkd on mpd.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 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 wkd.id) AS jumlah_desa
|
|
FROM metric_koperasi_desa mkd
|
|
INNER JOIN wil_desa wkd ON mkd.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
|
|
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,
|
|
wkd.id desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
mid.idm, mid.status, mid.tahun
|
|
from metrik_indeks_desa mid
|
|
inner join wil_desa wkd on mid.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 mid.tahun = (select max(tahun) from metrik_indeks_desa limit 1) AND
|
|
wp.kode = %s AND
|
|
wkk.kode = %s AND
|
|
wk.kode = %s AND
|
|
wkd.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_kabkota, kode_kecamatan, kode_desa,))
|
|
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,
|
|
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
mb.jenis, mb.jumlah
|
|
from metric_bumdes mb
|
|
inner join wil_desa wkd on mb.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 wkd.kode = %s
|
|
) AS virtual_table GROUP BY jenis ORDER BY "SUM(jumlah)" DESC
|
|
LIMIT 1000;
|
|
"""
|
|
|
|
cur.execute(SQL,(kode_desa,))
|
|
result = cur.fetchall()
|
|
return result
|
|
|
|
@staticmethod
|
|
def getTotalSerapanDesa(conn, kode_desa):
|
|
cur = conn.cursor()
|
|
SQL = """
|
|
SELECT
|
|
SUM(serapan) / 1000000000 AS serapan_per_1M,pagu,
|
|
(SUM(serapan) / NULLIF(SUM(pagu), 0)) * 100 AS persentase_serapan
|
|
FROM (
|
|
SELECT
|
|
wp.id provinsi_id, wp.kode provinsi_kode, wp.nama provinsi_nama,
|
|
wkk.id kabupaten_kota_id, wkk.kode kabupaten_kota_kode, wkk.nama kabupaten_kota_nama,
|
|
wk.id kecamatan_id, wk.kode kecamatan_kode, wk.nama kecamatan_nama,
|
|
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
mdd.pagu, salur_pagu, mdd.persen_serapan, mdd.tahun_anggaran
|
|
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 wkd.kode = %s
|
|
) AS virtual_table
|
|
WHERE tahun_anggaran = 2024
|
|
group by pagu;
|
|
"""
|
|
cur.execute(SQL, (kode_desa,))
|
|
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,
|
|
wkd.id kelurahan_desa_id, wkd.kode kelurahan_desa_kode, wkd.nama kelurahan_desa_nama,
|
|
mpd.jenis_pendamping, mpd.jumlah
|
|
from metric_pendamping_desa mpd
|
|
inner join wil_desa wkd on mpd.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 wkd.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 wkd.id) AS jumlah_desa
|
|
FROM metric_koperasi_desa mkd
|
|
INNER JOIN wil_desa wkd ON mkd.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 wkd.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 |