Add new template for PCPD LRA with charts and data tables

- Implemented HTML structure for the PCPD LRA page.
- Included CSS styles for layout and design.
- Added JavaScript for dynamic data handling and chart rendering.
- Integrated DataTables for displaying target and realization data.
- Set up AJAX calls for data refresh every 5 minutes.
1 parent 798956a1
...@@ -16,8 +16,9 @@ eis-minerba,Minerba,/eis/minerba,1,0,1,eis-pajak,pcpd,Views,view_minerba,eis,pcp ...@@ -16,8 +16,9 @@ eis-minerba,Minerba,/eis/minerba,1,0,1,eis-pajak,pcpd,Views,view_minerba,eis,pcp
eis-reklame,Reklame,/eis/reklame,1,0,1,eis-pajak,pcpd,Views,view_reklame,eis,pcpd.pt eis-reklame,Reklame,/eis/reklame,1,0,1,eis-pajak,pcpd,Views,view_reklame,eis,pcpd.pt
eis-atd,Air Tanah,/eis/atd,1,0,1,eis-pajak,pcpd,Views,view_atd,eis,pcpd.pt eis-atd,Air Tanah,/eis/atd,1,0,1,eis-pajak,pcpd,Views,view_atd,eis,pcpd.pt
eis-opsen,Opsen,/eis/opsen,1,0,1,eis-pajak,pcpd,Views,view_opsen,eis,pcpd.pt eis-opsen,Opsen,/eis/opsen,1,0,1,eis-pajak,pcpd,Views,view_opsen,eis,pcpd.pt
eis-webr,WebR,/eis/webr,1,0,1,,pcpd,Views,view_webr,eis,pcpd_retribusi.pt eis-webr,Retribusi,/eis/webr,1,0,1,,pcpd,Views,view_webr,eis,pcpd_retribusi.pt
eis-lra,LRA Lain2,/eis/lra,0,0,1,,pcpd,Views,view_lra,eis,pcpd_lra.pt eis-hpkdd,HPKDD,/eis/hpkdd,1,0,1,,pcpd,Views,view_hpkdd,eis,pcpd_hpkdd.pt
eis-lra,Lain-lain PAD yang sah,/eis/lra,1,0,1,,pcpd,Views,view_lra,eis,pcpd_lra.pt
eis,EIS,/eis,1,0,0 eis,EIS,/eis,1,0,0
eis-carousel,Carousel,/eis/carousel,1,0,0 eis-carousel,Carousel,/eis/carousel,1,0,0
eis-carousel-act,Carousel Action,/eis/carousel/{act}/act,1,0 eis-carousel-act,Carousel Action,/eis/carousel/{act}/act,1,0
......
...@@ -10,6 +10,7 @@ from sqlalchemy import func, and_, String ...@@ -10,6 +10,7 @@ from sqlalchemy import func, and_, String
from sqlalchemy.sql.expression import cast from sqlalchemy.sql.expression import cast
from ..models.payment import PaymentPBB, PaymentPAD, PaymentBPHTB, PaymentWEBR, Targets from ..models.payment import PaymentPBB, PaymentPAD, PaymentBPHTB, PaymentWEBR, Targets
from opensipkd.pbb.monitoring.models import PembayaranSppt, Kecamatan, Kelurahan, Sppt from opensipkd.pbb.monitoring.models import PembayaranSppt, Kecamatan, Kelurahan, Sppt
from opensipkd.webr.models.lra import LraModel
from datetime import timedelta from datetime import timedelta
from ..models.payment import PCDBSession from ..models.payment import PCDBSession
from opensipkd.webr.models import WebrAnggaran, WebrArPayment from opensipkd.webr.models import WebrAnggaran, WebrArPayment
...@@ -468,49 +469,27 @@ class Views(BaseView): ...@@ -468,49 +469,27 @@ class Views(BaseView):
today = datetime.now().date() today = datetime.now().date()
result = [] result = []
tahun = today.year tahun = today.year
from opensipkd.webr.models.lra import LraModel return LraModel.sum_rinci(tahun, '4.1.04')
realisasi = LraModel.sum_rinci(tahun)
for row in realisasi:
target = row[2] and float(row[2]) or 0
realisasi = row[3] and float(row[3]) or 0
result.append({"kode": row[0],
"nama": row[1],
"target": target,
"realisasi": realisasi,
"persen": round(realisasi/target * 100, 2) if target > 0 else 0,
"sisa": target - realisasi,
}
)
# realisasi = WebrArPayment.sum_rekening(tahun)
# for dept in realisasi:
# found = False
# for res in result:
# if dept.rekening_kode == res["kode"]:
# found = True
# res["realisasi"] = float(dept.total_pokok) or 0
# res["sisa"] = res["target"] - res["realisasi"]
# res["persen"] = round(
# res["realisasi"]/res["target"] * 100, 2) if res["target"] > 0 else 0
# if not found:
# result.append({"kode": dept.rekening_kode,
# "nama": dept.rekening_nama,
# "target": 0,
# "realisasi": float(dept.total_pokok) or 0,
# "sisa": 0 - (float(dept.total_pokok) or 0),
# "persen": 0,
# }
# )
return result
def get_lrar_data(self): def get_lrar_data(self):
today = datetime.now().date() today = datetime.now().date()
result = [] result = []
tahun = today.year tahun = today.year
from opensipkd.webr.models.lra import LraModel return LraModel.sum_rekap(tahun, '4.1.04')
return LraModel.sum_rekap(tahun)
def get_hpkdd_data(self):
today = datetime.now().date()
result = []
tahun = today.year
return LraModel.sum_rinci(tahun, '4.1.03')
def get_hpkddr_data(self):
today = datetime.now().date()
result = []
tahun = today.year
return LraModel.sum_rekap(tahun, '4.1.03')
def loop_data(self, src, dst): def loop_data(self, src, dst):
for key, val in enumerate(src): for key, val in enumerate(src):
...@@ -802,6 +781,10 @@ class Views(BaseView): ...@@ -802,6 +781,10 @@ class Views(BaseView):
elif act == 'lrar': elif act == 'lrar':
return self.get_lrar_data() return self.get_lrar_data()
elif act == 'hpkdd':
return self.get_hpkdd_data()
elif act == 'hpkddr':
return self.get_hpkddr_data()
else: else:
resp = self.get_pad_data(act) resp = self.get_pad_data(act)
...@@ -863,3 +846,11 @@ class Views(BaseView): ...@@ -863,3 +846,11 @@ class Views(BaseView):
def view_walet(self): def view_walet(self):
return {"module": 'walet', return {"module": 'walet',
"title": "Pajak Sarang Burung Walet"} "title": "Pajak Sarang Burung Walet"}
def view_lra(self):
return {"module": 'lra',
"title": "Pendapatan Lain-Lain yang Sah"}
def view_hpkdd(self):
return {"module": 'hpkdd',
"title": "Hasil Pengelolaan Kekayaan Daerah yang Dipisahkan"}
...@@ -222,95 +222,7 @@ ...@@ -222,95 +222,7 @@
</div> </div>
<hr> <hr>
</div> </div>
<div class="row">
<div class="col-md-12">
<div class="panel panel-default">
<div class="panel-heading">
<img src="${home}/eis/static/42x42-statistics.png" class="icon-rounded" alt="" align="left">
<h5 class="text-left bold">Target dan Realisasi Pendapatan Lain-lain Rekap
<i class="fa fa-info-circle pull-right icon-color"></i>
</h5>
</div>
<div class="panel-body">
<table class="table table-bordered table-sm" id="tableLraRekap">
<thead>
<tr>
<th class="align-middle text-center">Kode</th>
<th class="align-middle text-center">Jenis</th>
<th class="text-center">Target</th>
<th class="text-center">Realisasi</th>
<th class="text-center">Selisih</th>
<th class="text-center">%</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td class=""></td>
<td class=""></td>
<td class="right">0</td>
<td class="right">0</td>
<td class="right">0</td>
<td class="right">0</td>
</tr>
</tbody>
<tfoot>
<td colspan="2" class="text-right">Jumlah</td>
<td><span id="lra_rekap_target"></span></td>
<td><span id="lra_rekap_realisasi"></span></td>
<td><span id="lra_rekap_sisa"></span></td>
<td><span id="lra_rekap_persen"></span></td>
</tfoot>
</table>
</div>
</div>
</div>
<hr>
</div>
<div class="row">
<div class="col-md-12">
<div class="panel panel-default">
<div class="panel-heading">
<img src="${home}/eis/static/42x42-statistics.png" class="icon-rounded" alt="" align="left">
<h5 class="text-left bold">Target dan Realisasi Pendapatan Lain-lain
<i class="fa fa-info-circle pull-right icon-color"></i>
</h5>
</div>
<div class="panel-body">
<table class="table table-bordered table-sm" id="tableLra">
<thead>
<tr>
<th class="align-middle text-center">Kode</th>
<th class="align-middle text-center">Jenis</th>
<th class="text-center">Target</th>
<th class="text-center">Realisasi</th>
<th class="text-center">Selisih</th>
<th class="text-center">%</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td class=""></td>
<td class=""></td>
<td class="right">0</td>
<td class="right">0</td>
<td class="right">0</td>
<td class="right">0</td>
</tr>
</tbody>
<tfoot>
<td colspan="2" class="text-right">Jumlah</td>
<td><span id="lra_target"></span></td>
<td><span id="lra_realisasi"></span></td>
<td><span id="lra_sisa"></span></td>
<td><span id="lra_persen"></span></td>
</tfoot>
</table>
</div>
</div>
</div>
<hr>
</div>
</div> </div>
<metal:js fill-slot="js_files"> <metal:js fill-slot="js_files">
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.5.1/chart.js"></script> --> <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.5.1/chart.js"></script> -->
...@@ -658,133 +570,7 @@ ...@@ -658,133 +570,7 @@
}); });
} }
var tableLra = $('#tableLra').DataTable(
{
"destroy": true,
"paging": false,
"searching": false,
"info": false,
"autoWidth": false,
"scrollX": true,
"order": [[0, 'asc']],
"columnDefs": [
{ className: 'text-center', width: "50px", targets: [0] },
{ className: 'text-left', targets: [1] },
{ className: 'text-right', width: "100px", targets: [2, 3, 4], render: $.fn.dataTable.render.number('.', ',', 0, '') },
{ className: 'text-right', width: "100px", targets: [5], render: $.fn.dataTable.render.number('.', ',', 2, '') },
]
}
);
var lraRefresh = function () {
tableLra.clear();
var lraUrl = "${url}".replace("/webr/", "/lra/");
$.get(lraUrl, {}, function (data, status) {
if (status === "success") {
console.log(data);
var lra_target = 0;
var lra_realisasi = 0;
var lra_sisa = 0;
var lra_persen = 0;
data.forEach(function (row) {
console.log(row);
tableLra.row.add([
row.kode,
row.nama,
row.target,
row.realisasi,
row.sisa,
row.persen.toFixed(2)
]);
lra_target += row.target;
lra_realisasi += row.realisasi;
lra_sisa += row.sisa;
lra_persen += row.persen;
;
$('#lra_target').html(lra_target.toLocaleString("id-ID"));
$('#lra_realisasi').html(lra_realisasi.toLocaleString("id-ID"));
$('#lra_sisa').html(lra_sisa.toLocaleString("id-ID"));
if (lra_target > 0)
$('#lra_persen').html((lra_realisasi / lra_target * 100).toFixed(2));
else
$('#lra_persen').html("0.00");
tableLra.draw();
});
} else {
console.log("Request failed.");
tableLra.draw();
}
}).fail(function () {
console.log("Request failed.");
tableLra.draw();
});
}
var tableLraRekap = $('#tableLraRekap').DataTable(
{
"destroy": true,
"paging": false,
"searching": false,
"info": false,
"autoWidth": false,
"scrollX": true,
"order": [[0, 'asc']],
"columnDefs": [
{ className: 'text-center', width: "50px", targets: [0] },
{ className: 'text-left', targets: [1] },
{ className: 'text-right', width: "100px", targets: [2, 3, 4], render: $.fn.dataTable.render.number('.', ',', 0, '') },
{ className: 'text-right', width: "100px", targets: [5], render: $.fn.dataTable.render.number('.', ',', 2, '') },
]
}
);
var lraRekapRefresh = function () {
tableLraRekap.clear();
var lraRUrl = "${url}".replace("/webr/", "/lrar/");
$.get(lraRUrl, {}, function (data, status) {
if (status === "success") {
console.log(data);
var lra_rekap_target = 0;
var lra_rekap_realisasi = 0;
var lra_rekap_sisa = 0;
var lra_rekap_persen = 0;
data.forEach(function (row) {
console.log(row);
tableLraRekap.row.add([
row.kode,
row.nama,
row.target,
row.realisasi,
row.sisa,
row.persen.toFixed(2)
]);
lra_rekap_target += row.target;
lra_rekap_realisasi += row.realisasi;
lra_rekap_sisa += row.sisa;
lra_rekap_persen += row.persen;
;
$('#lra_rekap_target').html(lra_rekap_target.toLocaleString("id-ID"));
$('#lra_rekap_realisasi').html(lra_rekap_realisasi.toLocaleString("id-ID"));
$('#lra_rekap_sisa').html(lra_rekap_sisa.toLocaleString("id-ID"));
if (lra_rekap_target > 0)
$('#lra_rekap_persen').html((lra_rekap_realisasi / lra_rekap_target * 100).toFixed(2));
else
$('#lra_rekap_persen').html("0.00");
tableLraRekap.draw();
});
} else {
console.log("Request failed.");
tableLra.draw();
}
}).fail(function () {
console.log("Request failed.");
tableLra.draw();
});
}
$.fn.datarefresh = function () { $.fn.datarefresh = function () {
console.log("data_refresh"); console.log("data_refresh");
...@@ -805,8 +591,6 @@ ...@@ -805,8 +591,6 @@
trendChart(); trendChart();
dinasRefresh(); dinasRefresh();
jenisRefresh(); jenisRefresh();
lraRefresh();
lraRekapRefresh();
} else { } else {
console.log("Request failed."); console.log("Request failed.");
} }
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!