From ea99316d4cb54de1d1b3a74e57b700e8a2521785 Mon Sep 17 00:00:00 2001 From: ='fauz <='fauzgabriel@gmail.com> Date: Mon, 30 Jun 2025 16:28:34 +0700 Subject: [PATCH] dropdown masih beberapa geometry belum nampak di map --- app/__pycache__/apiController.cpython-313.pyc | Bin 39647 -> 38786 bytes app/__pycache__/routes.cpython-313.pyc | Bin 16459 -> 16854 bytes app/apiController.py | 61 +++--- app/routes.py | 11 +- templates/index.html | 188 ++++++++++-------- 5 files changed, 150 insertions(+), 110 deletions(-) diff --git a/app/__pycache__/apiController.cpython-313.pyc b/app/__pycache__/apiController.cpython-313.pyc index 2278caeb5e4db2216ff222a4c420f87b288c1f1c..e42f553ef72c39a4862fe5748409db2e0f9563fa 100644 GIT binary patch delta 1420 zcmb7EOKcle6uoa|-i-f_lh{t9)Sl3Q?ULGQnt%vyQ`ZSZ>BIiH&lF0Z1`Bfehlt4YSn=G~} zUXzue);P&W8ud50bQoV7vy$_;%0+|#s07pdy|~ii!rNK{#w3b-wkF8OAj<_ofefGE zo63HIOu%kF2opqq=Ke{+vYXY2P|bbv1^ zzukMHcagvDXu!{=BY1vPtoJ+!pV$&k{xTs63xAm-W^AF%;$Oj&`t6oadD5f5+eRsQ z8kZj0=jV$pm5h}+GcOErnAf&Bd6g)n;|YLtH2|)7ec03CbdE5TFQT<2G@uA7*GAg8 zl8Ow29gIT%O%eY?kr_oQQoJRVCdFb>+PHSIp+gmG3=~_GYl0YL1eM2YLIVaKmS(6* z6+30bj2M8FSULePY^g+>{vJ@pie^Si*(*D$w1HYwOSlX_$GYg>1)#W9i&7QkGB(Ad z+E_KGS&jK>)8EH}nleyZ_FmH~z9?1vQ9ff=g<%h_3N;lE5T3xV9*iM2??vHfU|KAF2sG9ZT8@$*DX?Va3Gl&2^Tpm-#gqr)XnlxD%32u z$vfn5U-!VHBR%1x>D-|R%gZUF^(B(sMYvfmvO}Q=Te#}?nZkm3pptB;KJ~v;O?Fw; zY~g5Jz_mOrE8BfV;IL#xanFy$itBsgqC<1C?lIc=BsK3>#`(^;;}v!X*?DGW!NBXC zv!Pq1CuD$BpCE<{y2v286gAw^mSOT6NKS=5UH8%}Vr`d9 zugH|exO2jXf6u*iabHv*1wHo2FO;KEVqh>|s&eCu(2?etZ?>QDA)v%{=S)>j+2YjANopkF&9kd7q=e(N0{&*sv( zsb|O2xtun2;8^Zpc6?l0W_ucY!k~FfV@_|;m|uWw3f+r0-G1sT@E}$j9E*%ryt^0{ zlZ4ugoZj?KjQETewzV=hdkEa+ OrmBeV4w$z18~y?6pGoTg delta 1137 zcmZ8fU2IfE6h1Te&fWjJ+wK0ew%gsMjkbVW1oy#G=^xNW+!#B#N?6-<+r>i4uFdXJ zsj*N|oW?&VGQK-|>GmDitA zdHAk@6Nn)s@7rO?WINo9NJV5~#Az5j_4ER%x4<`of z4g)yp*b9*M0xk^%@skdhlS@*mkiH5T;;KO&Bym~8ToHKeA*o>hQE2~Dgr&lAm%_@e zYYH6R9wZ8$8*VyQ3j-N|oNB1t!DQhaYl5V;;vvIeWvJEN8g2lC#mQQp(~_?0siECw zErz9aozBRH6Wai|+pus?jOJ{-#;{2@m+594Q@OX2sJwO^ee38qkq2Uo2V+XkZYYDb zRjWH_*sG=yNIV1JkdxsyL*e!qZGk8x^{Una>9BmBHCa<-xYJNKul1n=*A1%<+tfSd z!oa1x$C{XzZB#PxY3ETwpWlaxhqtH`>EZ$Wtm`+;o;OE;?{#+)2j1-7r#j5-<2{|u zNjas$OES#BEqtqICi<<@J-4T{=c~G68Q=)%qY|DYyXfx#uHAH{u^qd6uLm2VeO>hP zF8j__cFE@3*~~6AGnwOr7QioNC&iV%m`bjTzx#h-^gfD5O9AmuVoKGDa@2+Wczmc{ zEDTOD@|w{1W*PZXyfCC{LQOLA; zzMP%5kkcYJt21&@OqV`ju{)jH%=V7AJ6tXwKwF` z^EQ0HztNNLHS<0h%8KkOj!$o_*TLqV(@Xm6g*P9)YHh(C^QTgUV!C*6G?gwE^9M%`7xx!Zsr-37v(QK~cyZyH+s6W{3TWOkm05W+ zE-$vS?aW@zh_4shN#q9g-xkQM9Fx);v~HbSr5HH1k(|e#Q*~|cN=Nfk7lM_J2_fHu U;|FN^lMZ`G;3k+c?~`Z$0%5%eiU0rr diff --git a/app/__pycache__/routes.cpython-313.pyc b/app/__pycache__/routes.cpython-313.pyc index eee3129b53fe145b6f868cbb24b0877d788838cb..6f78c3bd52fdc29ed339e161cc86864d370b8a6f 100644 GIT binary patch delta 1496 zcmYLJZERCz6z*wzw{~}J_kGu{AGhtLYuB%_Ze#1FE7M?%8^H|0{lHONbrbgC?H~k+ zfv90o0>R@4E)Zwrhtsf(T>jt>)I<{#P&YO~7chwKr#LeVYSehn-4>hl+;h)!&U2pg zzW05v9D(aEfqlhhD>BgU?2bJHAA~R1Jw+HVv%(~1LoU2r635o23ZrbmxoVfC2X;b_ zvDJw6qNlU^0h7=03`9&@4;2j#_va2K2F8Z=MPSi7s*W5O9L^8sBZBHCYSlt!(Xt+1 z6h_s-;W1Uf7e&u*L9bO6N(s?F{~(zohM%p{g4KC?`%Q=YhGWAu$A-!Nc}H~IeA8kZ z?>{cy7Ys$Ndj*E#n$ztwjdNnlthwcWA;rG6I{(UBiQ=_Dhv}1|&9*{(r|7bv$`rz^ zC<|(Uy%VAj;@Y&h17fP50%{?fS~g}fQ>I1R-jV)X-@0Vg#ZVB>+a-H;&;HTuSZ-KN zP%NeGw6y|+@RYp<7?*_x3a2qy;?4rRx(!|Q~Ok{Y3fGBQ-q z0V!>y#0A9jYN=1)h3L|zOWjb=My?vb*|MOpncN=SElZlCd>54H;#u2(_G)>R=yEi;{LnY6nY( zIB5I)7;;7+j@z8o;wEmhwh(z|9P-+G&I|zSs>J)QGT{&wNa_%oDU-UL z{k2&xZb-mI;_;y|#2miRHR5V+zQCpvduzWYBplujpXq(y2(zY3;cqC~ zk@Vw-kraHXBj=MA{3pU}uDS(6f30hVW(-B^VNUOKAj%jquP!4%+(^FI?rk9kUR}D(BUv8C`zF^#2v5-x74rusLEZ)l0O6=I8l5ZfS{tq>Z+` z3{pMu>Fud#y5;TuBb`#|M0uJVai`2ee3m}wh;37l&4o2LwF zH_o+{!zEm5d%|Ic))kY%Sh{Q^Z@E}|wEdt7@3z~0#Rg-+G1pPoY;klRV!s(p;N-;k QGJDHqc(F0Ts58WB>pF delta 1581 zcmZ`(U2KzO6z=IC-MV#uuIsv=w(H-%uI>K1cFQ(l3}Y4p!E9<2aCEe?Io6hU9S(_R z#2Gbkv3O)b2r(pHu!Jb{i%Pgaz2Igl)@^~L;Dw8Np)naQA|Z;N^R*I)vB`IO-shb2 zKIfeGeb2Sm;L8~>Z4?(5s_6HGb7XYQyJ)H_OlWAy--d<63Dqv3Kjk+F9eLfQlGHn1 zE*wk5;?u#=^uz%PgpPa`R2%FmYDi>tidi^F_s}<4Okzg$gVB1jXT{i<(KZS@AvkBe z9LX9|B6(;mF*&xN6}5zlO(e3#FT~UPMu+#ulP^vt6GBVaf?8PFq>V+>QJgNa>3y`E z4B=-b)$%7ronXr9QerHTR(23>yjyGoFIr7@T{Ahh$eT@F04_XSQbX{G61%RQ;D~&w z#Ln=I(i(@CH{=G`?e<(HhW+vMa4bF<6?m_UNPecw3hw^~6mdX0nT{S9 zj>W`g3L22-%WFa3L#puL#R{ixE2%rtQB@`XQLzU~{cPb1|4lqr*{|D9>!}Da5wbho~kv%w^$yhg5I?FU`&=RgJ9^RSV<@RXtGMKAT6@x z}a`j+fVVY_iB z-I!d%0=V7Xq(7J2stjS}F~}WyL?(Y`|HG{m)9@kmaCn2(BoW?|fXRx@ncr>rG*Z zpvm6?SMRet@8_r^{%Zx9&1fyc{&u*TIYJL|R1n7yKf%Gch^C^6|7E%twn-Xzn909v z^q(KPAgvgC9%jPlA{Ug>scL0VaXrGx!h?=ZNnHf^eT7*b={yMZ0#>^uD3|Yb%|cZx z`*4vI`2p+se!bh>1l4$@`$w09(MA?Lsss-vW#A|SMDV;2+wp48D4fPfucJoT7_qZZ z=B=S;A{m=H5Pwu$#8mH7B>>WfMx`!WSCh7`msfkIH32nLGw5GeleS){QtRKa9<^qQ WnpVJni!rtaa@JBj-1n@O3H|{ZGo2m) diff --git a/app/apiController.py b/app/apiController.py index 54920f1..680b7a2 100644 --- a/app/apiController.py +++ b/app/apiController.py @@ -318,7 +318,10 @@ class apiController: ) AS virtual_table GROUP BY jenis_pendamping ORDER BY "SUM(jumlah) / COUNT(DISTINCT kabupaten_kota_id)" DESC LIMIT 10000; """ - cur.execute(SQL) + try: + cur.execute(SQL) + except Exception as e: + return [] result = cur.fetchall() return result @@ -371,7 +374,7 @@ class apiController: #====================================================== #MAP DATA #========================================================= - def fetch_geojson(level, parent_code=None): + 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() @@ -383,7 +386,15 @@ class apiController: 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,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 = [] @@ -1006,28 +1017,28 @@ class apiController: 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 + # 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): diff --git a/app/routes.py b/app/routes.py index de5b45d..b9982b6 100644 --- a/app/routes.py +++ b/app/routes.py @@ -37,7 +37,10 @@ def get_connection(): #======================================================== @main.route('/') def index(): - return render_template('index.html') + with get_connection() as conn: + data = apiController.provinsi(conn) + print(data) + return render_template('index.html', provinsis=data) @main.route("/geojson/provinsi") def get_provinsi(): @@ -252,13 +255,15 @@ def get_pendamping_per_desa(kode_desa): #informasi bumdes @main.route("/api/desa/bumdes/") def get_status_bumdes_desa(kode_desa): - data = apiController.getBumdesDesa(conn,kode_desa) + with get_connection() as conn: + data = apiController.getBumdesDesa(conn,kode_desa) return jsonify(data) #informasi serapan @main.route("/api/desa/serapan/") def get_pdesa_serapan(kode_desa): - data = apiController.getTotalSerapanDesa(conn,kode_desa) + with get_connection() as conn: + data = apiController.getTotalSerapanDesa(conn,kode_desa) return jsonify(data) #================== diff --git a/templates/index.html b/templates/index.html index 84d377a..15abcc9 100644 --- a/templates/index.html +++ b/templates/index.html @@ -127,8 +127,9 @@ @@ -209,6 +210,10 @@